aws-cdk 2.50.0 → 2.51.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.
@@ -522,6 +522,28 @@ describe('deploy', () => {
522
522
  }));
523
523
  });
524
524
  });
525
+ test('can disable asset prebuild', async () => {
526
+ // GIVEN
527
+ cloudExecutable = new util_2.MockCloudExecutable({
528
+ stacks: [MockStack.MOCK_STACK_WITH_ASSET],
529
+ });
530
+ const fakeCloudFormation = new FakeCloudFormation({});
531
+ const toolkit = new cdk_toolkit_1.CdkToolkit({
532
+ cloudExecutable,
533
+ configuration: cloudExecutable.configuration,
534
+ sdkProvider: cloudExecutable.sdkProvider,
535
+ cloudFormation: fakeCloudFormation,
536
+ });
537
+ // WHEN
538
+ // Not the best test but following this through to the asset publishing library fails
539
+ await util_2.withMocked(fakeCloudFormation, 'buildStackAssets', async (mockBuildStackAssets) => {
540
+ await toolkit.deploy({
541
+ selector: { patterns: ['Test-Stack-Asset'] },
542
+ assetBuildTime: cdk_toolkit_1.AssetBuildTime.JUST_IN_TIME,
543
+ });
544
+ expect(mockBuildStackAssets).not.toHaveBeenCalled();
545
+ });
546
+ });
525
547
  });
526
548
  });
527
549
  describe('destroy', () => {
@@ -889,4 +911,4 @@ class FakeCloudFormation extends cloudformation_deployments_1.CloudFormationDepl
889
911
  }
890
912
  }
891
913
  }
892
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXRvb2xraXQudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay10b29sa2l0LnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw0REFBNEQ7QUFDNUQsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDeEMsTUFBTSxtQkFBbUIsR0FBRztJQUMxQixFQUFFLEVBQUUscUJBQXFCO0NBQzFCLENBQUM7QUFDRixNQUFNLHFCQUFxQixHQUFHO0lBQzVCLElBQUksYUFBYTtRQUNmLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFFLGdHQUFnRztRQUNoRyxpRUFBaUU7UUFDakUsaUVBQWlFO1FBQ2pFLE1BQU0sU0FBUyxHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEQsMkRBQTJEO1FBQzNELHlCQUF5QjtRQUN6QixNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLHNDQUFzQztRQUN0QyxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBSSxpQkFBaUI7UUFDbkIsTUFBTSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUUsTUFBTSxVQUFVLEdBQUcscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2RCwrREFBK0Q7UUFDL0QseUJBQXlCO1FBQ3pCLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FB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RUFBRSxPQUFPLENBQUMsS0FBSztTQUM3QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sWUFBWSxDQUFDLE9BQTRCO1FBQzlDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEMsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVNLG1CQUFtQixDQUFDLEtBQXdDO1FBQ2pFLFFBQVEsS0FBSyxDQUFDLFNBQVMsRUFBRTtZQUN2QixLQUFLLFNBQVMsQ0FBQyxZQUFZLENBQUMsU0FBUztnQkFDbkMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdCLEtBQUssU0FBUyxDQUFDLFlBQVksQ0FBQyxTQUFTO2dCQUNuQyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDN0IsS0FBSyxTQUFTLENBQUMsWUFBWSxDQUFDLFNBQVM7Z0JBQ25DLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM3QixLQUFLLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTO2dCQUM1QyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDN0I7Z0JBQ0UsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLCtCQUErQixLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztTQUMzRTtJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIFdlIG5lZWQgdG8gbW9jayB0aGUgY2hva2lkYXIgbGlicmFyeSwgdXNlZCBieSAnY2RrIHdhdGNoJ1xuY29uc3QgbW9ja0Nob2tpZGFyV2F0Y2hlck9uID0gamVzdC5mbigpO1xuY29uc3QgZmFrZUNob2tpZGFyV2F0Y2hlciA9IHtcbiAgb246IG1vY2tDaG9raWRhcldhdGNoZXJPbixcbn07XG5jb25zdCBmYWtlQ2hva2lkYXJXYXRjaGVyT24gPSB7XG4gIGdldCByZWFkeUNhbGxiYWNrKCk6ICgpID0+IHZvaWQge1xuICAgIGV4cGVjdChtb2NrQ2hva2lkYXJXYXRjaGVyT24ubW9jay5jYWxscy5sZW5ndGgpLnRvQmVHcmVhdGVyVGhhbk9yRXF1YWwoMSk7XG4gICAgLy8gVGhlIGNhbGwgdG8gdGhlIGZpcnN0ICd3YXRjaGVyLm9uKCknIGluIHRoZSBwcm9kdWN0aW9uIGNvZGUgaXMgdGhlIG9uZSB3ZSBhY3R1YWxseSB3YW50IGhlcmUuXG4gICAgLy8gVGhpcyBpcyBhIHByZXR0eSBmcmFnaWxlLCBidXQgYXQgbGVhc3Qgd2l0aCB0aGlzIGhlbHBlciBjbGFzcyxcbiAgICAvLyB3ZSB3b3VsZCBoYXZlIHRvIGNoYW5nZSBpdCBvbmx5IGluIG9uZSBwbGFjZSBpZiBpdCBldmVyIGJyZWFrc1xuICAgIGNvbnN0IGZpcnN0Q2FsbCA9IG1vY2tDaG9raWRhcldhdGNoZXJPbi5tb2NrLmNhbGxzWzBdO1xuICAgIC8vIGxldCdzIG1ha2Ugc3VyZSB0aGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlICdyZWFkeScgZXZlbnQsXG4gICAgLy8ganVzdCB0byBiZSBkb3VibGUgc2FmZVxuICAgIGV4cGVjdChmaXJzdENhbGxbMF0pLnRvQmUoJ3JlYWR5Jyk7XG4gICAgLy8gdGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgY2FsbGJhY2tcbiAgICByZXR1cm4gZmlyc3RDYWxsWzFdO1xuICB9LFxuXG4gIGdldCBmaWxlRXZlbnRDYWxsYmFjaygpOiAoZXZlbnQ6ICdhZGQnIHwgJ2FkZERpcicgfCAnY2hhbmdlJyB8ICd1bmxpbmsnIHwgJ3VubGlua0RpcicsIHBhdGg6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPiB7XG4gICAgZXhwZWN0KG1vY2tDaG9raWRhcldhdGNoZXJPbi5tb2NrLmNhbGxzLmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuT3JFcXVhbCgyKTtcbiAgICBjb25zdCBzZWNvbmRDYWxsID0gbW9ja0Nob2tpZGFyV2F0Y2hlck9uLm1vY2suY2FsbHNbMV07XG4gICAgLy8gbGV0J3MgbWFrZSBzdXJlIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBub3QgdGhlICdyZWFkeScgZXZlbnQsXG4gICAgLy8ganVzdCB0byBiZSBkb3VibGUgc2FmZVxuICAgIGV4cGVjdChzZWNvbmRDYWxsWzBdKS5ub3QudG9CZSgncmVhZHknKTtcbiAgICAvLyB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIHRoZSBjYWxsYmFja1xuICAgIHJldHVybiBzZWNvbmRDYWxsWzFdO1xuICB9LFxufTtcblxuY29uc3QgbW9ja0Nob2tpZGFyV2F0Y2ggPSBqZXN0LmZuKCk7XG5qZXN0Lm1vY2soJ2Nob2tpZGFyJywgKCkgPT4gKHtcbiAgd2F0Y2g6IG1vY2tDaG9raWRhcldhdGNoLFxufSkpO1xuY29uc3QgZmFrZUNob2tpZGFyV2F0Y2ggPSB7XG4gIGdldCBpbmNsdWRlQXJncygpOiBzdHJpbmdbXSB7XG4gICAgZXhwZWN0KG1vY2tDaG9raWRhcldhdGNoLm1vY2suY2FsbHMubGVuZ3RoKS50b0JlKDEpO1xuICAgIC8vIHRoZSBpbmNsdWRlIGFyZ3MgYXJlIHRoZSBmaXJzdCBwYXJhbWV0ZXIgdG8gdGhlICd3YXRjaCgpJyBjYWxsXG4gICAgcmV0dXJuIG1vY2tDaG9raWRhcldhdGNoLm1vY2suY2FsbHNbMF1bMF07XG4gIH0sXG5cbiAgZ2V0IGV4Y2x1ZGVBcmdzKCk6IHN0cmluZ1tdIHtcbiAgICBleHBlY3QobW9ja0Nob2tpZGFyV2F0Y2gubW9jay5jYWxscy5sZW5ndGgpLnRvQmUoMSk7XG4gICAgLy8gdGhlIGlnbm9yZSBhcmdzIGFyZSBhIHByb3BlcnR5IG9mIHRoZSBzZWNvbmQgcGFyYW1ldGVyIHRvIHRoZSAnd2F0Y2goKScgY2FsbFxuICAgIGNvbnN0IGNob2tpZGFyV2F0Y2hPcHRzID0gbW9ja0Nob2tpZGFyV2F0Y2gubW9jay5jYWxsc1swXVsxXTtcbiAgICByZXR1cm4gY2hva2lkYXJXYXRjaE9wdHMuaWdub3JlZDtcbiAgfSxcbn07XG5cbmNvbnN0IG1vY2tEYXRhID0gamVzdC5mbigpO1xuamVzdC5tb2NrKCcuLi9saWIvbG9nZ2luZycsICgpID0+ICh7XG4gIC4uLmplc3QucmVxdWlyZUFjdHVhbCgnLi4vbGliL2xvZ2dpbmcnKSxcbiAgZGF0YTogbW9ja0RhdGEsXG59KSk7XG5qZXN0LnNldFRpbWVvdXQoMzBfMDAwKTtcblxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGN4c2NoZW1hIGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYSc7XG5pbXBvcnQgeyBNYW5pZmVzdCB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYSc7XG5pbXBvcnQgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0IHsgQm9vdHN0cmFwcGVyIH0gZnJvbSAnLi4vbGliL2FwaS9ib290c3RyYXAnO1xuaW1wb3J0IHsgQ2xvdWRGb3JtYXRpb25EZXBsb3ltZW50cywgRGVwbG95U3RhY2tPcHRpb25zLCBEZXN0cm95U3RhY2tPcHRpb25zIH0gZnJvbSAnLi4vbGliL2FwaS9jbG91ZGZvcm1hdGlvbi1kZXBsb3ltZW50cyc7XG5pbXBvcnQgeyBEZXBsb3lTdGFja1Jlc3VsdCB9IGZyb20gJy4uL2xpYi9hcGkvZGVwbG95LXN0YWNrJztcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSAnLi4vbGliL2FwaS91dGlsL2Nsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IENka1Rvb2xraXQsIFRhZyB9IGZyb20gJy4uL2xpYi9jZGstdG9vbGtpdCc7XG5pbXBvcnQgeyBSZXF1aXJlQXBwcm92YWwgfSBmcm9tICcuLi9saWIvZGlmZic7XG5pbXBvcnQgeyBmbGF0dGVuIH0gZnJvbSAnLi4vbGliL3V0aWwnO1xuaW1wb3J0IHsgaW5zdGFuY2VNb2NrRnJvbSwgTW9ja0Nsb3VkRXhlY3V0YWJsZSwgVGVzdFN0YWNrQXJ0aWZhY3QsIHdpdGhNb2NrZWQgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHsgTW9ja1Nka1Byb3ZpZGVyIH0gZnJvbSAnLi91dGlsL21vY2stc2RrJztcblxubGV0IGNsb3VkRXhlY3V0YWJsZTogTW9ja0Nsb3VkRXhlY3V0YWJsZTtcbmxldCBib290c3RyYXBwZXI6IGplc3QuTW9ja2VkPEJvb3RzdHJhcHBlcj47XG5sZXQgc3RkZXJyTW9jazogamVzdC5TcHlJbnN0YW5jZTtcbmJlZm9yZUVhY2goKCkgPT4ge1xuICBqZXN0LnJlc2V0QWxsTW9ja3MoKTtcblxuICBtb2NrQ2hva2lkYXJXYXRjaC5tb2NrUmV0dXJuVmFsdWUoZmFrZUNob2tpZGFyV2F0Y2hlcik7XG4gIC8vIG9uKCkgaW4gY2hva2lkYXIncyBXYXRjaGVyIHJldHVybnMgJ3RoaXMnXG4gIG1vY2tDaG9raWRhcldhdGNoZXJPbi5tb2NrUmV0dXJuVmFsdWUoZmFrZUNob2tpZGFyV2F0Y2hlcik7XG5cbiAgYm9vdHN0cmFwcGVyID0gaW5zdGFuY2VNb2NrRnJvbShCb290c3RyYXBwZXIpO1xuICBib290c3RyYXBwZXIuYm9vdHN0cmFwRW52aXJvbm1lbnQubW9ja1Jlc29sdmVkVmFsdWUoeyBub09wOiBmYWxzZSwgb3V0cHV0czoge30gfSBhcyBhbnkpO1xuXG4gIGNsb3VkRXhlY3V0YWJsZSA9IG5ldyBNb2NrQ2xvdWRFeGVjdXRhYmxlKHtcbiAgICBzdGFja3M6IFtcbiAgICAgIE1vY2tTdGFjay5NT0NLX1NUQUNLX0EsXG4gICAgICBNb2NrU3RhY2suTU9DS19TVEFDS19CLFxuICAgIF0sXG4gICAgbmVzdGVkQXNzZW1ibGllczogW3tcbiAgICAgIHN0YWNrczogW01vY2tTdGFjay5NT0NLX1NUQUNLX0NdLFxuICAgIH1dLFxuICB9KTtcblxuICBzdGRlcnJNb2NrID0gamVzdC5zcHlPbihwcm9jZXNzLnN0ZGVyciwgJ3dyaXRlJykubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHsgcmV0dXJuIHRydWU7IH0pO1xufSk7XG5cbmZ1bmN0aW9uIGRlZmF1bHRUb29sa2l0U2V0dXAoKSB7XG4gIHJldHVybiBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgY2xvdWRFeGVjdXRhYmxlLFxuICAgIGNvbmZpZ3VyYXRpb246IGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLFxuICAgIHNka1Byb3ZpZGVyOiBjbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgY2xvdWRGb3JtYXRpb246IG5ldyBGYWtlQ2xvdWRGb3JtYXRpb24oe1xuICAgICAgJ1Rlc3QtU3RhY2stQSc6IHsgRm9vOiAnQmFyJyB9LFxuICAgICAgJ1Rlc3QtU3RhY2stQic6IHsgQmF6OiAnWmluZ2EhJyB9LFxuICAgICAgJ1Rlc3QtU3RhY2stQyc6IHsgQmF6OiAnWmluZ2EhJyB9LFxuICAgIH0pLFxuICB9KTtcbn1cblxuZGVzY3JpYmUoJ3JlYWRDdXJyZW50VGVtcGxhdGUnLCAoKSA9PiB7XG4gIGxldCB0ZW1wbGF0ZTogYW55O1xuICBsZXQgbW9ja0ZvckVudmlyb25tZW50ID0gamVzdC5mbigpO1xuICBsZXQgbW9ja0Nsb3VkRXhlY3V0YWJsZTogTW9ja0Nsb3VkRXhlY3V0YWJsZTtcbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICB0ZW1wbGF0ZSA9IHtcbiAgICAgIFJlc291cmNlczoge1xuICAgICAgICBGdW5jOiB7XG4gICAgICAgICAgVHlwZTogJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicsXG4gICAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgICAgS2V5OiAnVmFsdWUnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gICAgbW9ja0Nsb3VkRXhlY3V0YWJsZSA9IG5ldyBNb2NrQ2xvdWRFeGVjdXRhYmxlKHtcbiAgICAgIHN0YWNrczogW1xuICAgICAgICB7XG4gICAgICAgICAgc3RhY2tOYW1lOiAnVGVzdC1TdGFjay1DJyxcbiAgICAgICAgICB0ZW1wbGF0ZSxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBhc3N1bWVSb2xlQXJuOiAnYmxvb3A6JHtBV1M6OlJlZ2lvbn06JHtBV1M6OkFjY291bnRJZH0nLFxuICAgICAgICAgICAgbG9va3VwUm9sZToge1xuICAgICAgICAgICAgICBhcm46ICdibG9vcC1sb29rdXA6JHtBV1M6OlJlZ2lvbn06JHtBV1M6OkFjY291bnRJZH0nLFxuICAgICAgICAgICAgICByZXF1aXJlc0Jvb3RzdHJhcFN0YWNrVmVyc2lvbjogNSxcbiAgICAgICAgICAgICAgYm9vdHN0cmFwU3RhY2tWZXJzaW9uU3NtUGFyYW1ldGVyOiAnL2Jvb3RzdHJhcC9wYXJhbWV0ZXInLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgc3RhY2tOYW1lOiAnVGVzdC1TdGFjay1BJyxcbiAgICAgICAgICB0ZW1wbGF0ZSxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBhc3N1bWVSb2xlQXJuOiAnYmxvb3A6JHtBV1M6OlJlZ2lvbn06JHtBV1M6OkFjY291bnRJZH0nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICAgIG1vY2tGb3JFbnZpcm9ubWVudCA9IGplc3QuZm4oKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4geyByZXR1cm4geyBzZGs6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIuc2RrLCBkaWRBc3N1bWVSb2xlOiB0cnVlIH07IH0pO1xuICAgIG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIuZm9yRW52aXJvbm1lbnQgPSBtb2NrRm9yRW52aXJvbm1lbnQ7XG4gICAgbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlci5zdHViQ2xvdWRGb3JtYXRpb24oe1xuICAgICAgZ2V0VGVtcGxhdGUoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgVGVtcGxhdGVCb2R5OiBKU09OLnN0cmluZ2lmeSh0ZW1wbGF0ZSksXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgZGVzY3JpYmVTdGFja3MoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgU3RhY2tzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFN0YWNrTmFtZTogJ1Rlc3QtU3RhY2stQycsXG4gICAgICAgICAgICAgIFN0YWNrU3RhdHVzOiAnQ1JFQVRFX0NPTVBMRVRFJyxcbiAgICAgICAgICAgICAgQ3JlYXRpb25UaW1lOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgU3RhY2tOYW1lOiAnVGVzdC1TdGFjay1BJyxcbiAgICAgICAgICAgICAgU3RhY2tTdGF0dXM6ICdDUkVBVEVfQ09NUExFVEUnLFxuICAgICAgICAgICAgICBDcmVhdGlvblRpbWU6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCdsb29rdXAgcm9sZSBpcyB1c2VkJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgbGV0IHJlcXVlc3RlZFBhcmFtZXRlck5hbWU6IHN0cmluZztcbiAgICBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLnN0dWJTU00oe1xuICAgICAgZ2V0UGFyYW1ldGVyKHJlcXVlc3QpIHtcbiAgICAgICAgcmVxdWVzdGVkUGFyYW1ldGVyTmFtZSA9IHJlcXVlc3QuTmFtZTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBQYXJhbWV0ZXI6IHtcbiAgICAgICAgICAgIFZhbHVlOiAnNicsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgY29uc3QgY2RrVG9vbGtpdCA9IG5ldyBDZGtUb29sa2l0KHtcbiAgICAgIGNsb3VkRXhlY3V0YWJsZTogbW9ja0Nsb3VkRXhlY3V0YWJsZSxcbiAgICAgIGNvbmZpZ3VyYXRpb246IG1vY2tDbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbixcbiAgICAgIHNka1Byb3ZpZGVyOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLFxuICAgICAgY2xvdWRGb3JtYXRpb246IG5ldyBDbG91ZEZvcm1hdGlvbkRlcGxveW1lbnRzKHsgc2RrUHJvdmlkZXI6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIgfSksXG4gICAgfSk7XG5cbiAgICAvLyBXSEVOXG4gICAgYXdhaXQgY2RrVG9vbGtpdC5kZXBsb3koe1xuICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1DJ10gfSxcbiAgICB9KTtcblxuICAgIC8vIFRIRU5cbiAgICBleHBlY3QocmVxdWVzdGVkUGFyYW1ldGVyTmFtZSEpLnRvRXF1YWwoJy9ib290c3RyYXAvcGFyYW1ldGVyJyk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudC5tb2NrLmNhbGxzLmxlbmd0aCkudG9FcXVhbCgyKTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50Lm1vY2suY2FsbHNbMF1bMl0pLnRvRXF1YWwoe1xuICAgICAgYXNzdW1lUm9sZUFybjogJ2Jsb29wLWxvb2t1cDpoZXJlOjEyMzQ1Njc4OTAxMicsXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2ZhbGxiYWNrIHRvIGRlcGxveSByb2xlIGlmIGJvb3RzdHJhcCBzdGFjayB2ZXJzaW9uIGlzIG5vdCB2YWxpZCcsIGFzeW5jICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGxldCByZXF1ZXN0ZWRQYXJhbWV0ZXJOYW1lOiBzdHJpbmc7XG4gICAgbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlci5zdHViU1NNKHtcbiAgICAgIGdldFBhcmFtZXRlcihyZXF1ZXN0KSB7XG4gICAgICAgIHJlcXVlc3RlZFBhcmFtZXRlck5hbWUgPSByZXF1ZXN0Lk5hbWU7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgUGFyYW1ldGVyOiB7XG4gICAgICAgICAgICBWYWx1ZTogJzEnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IGNka1Rvb2xraXQgPSBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgICBjbG91ZEV4ZWN1dGFibGU6IG1vY2tDbG91ZEV4ZWN1dGFibGUsXG4gICAgICBjb25maWd1cmF0aW9uOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24sXG4gICAgICBzZGtQcm92aWRlcjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlcixcbiAgICAgIGNsb3VkRm9ybWF0aW9uOiBuZXcgQ2xvdWRGb3JtYXRpb25EZXBsb3ltZW50cyh7IHNka1Byb3ZpZGVyOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyIH0pLFxuICAgIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIGF3YWl0IGNka1Rvb2xraXQuZGVwbG95KHtcbiAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJ1Rlc3QtU3RhY2stQyddIH0sXG4gICAgfSk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KGZsYXR0ZW4oc3RkZXJyTW9jay5tb2NrLmNhbGxzKSkudG9FcXVhbChleHBlY3QuYXJyYXlDb250YWluaW5nKFtcbiAgICAgIGV4cGVjdC5zdHJpbmdNYXRjaGluZygvQ291bGQgbm90IGFzc3VtZSBibG9vcC1sb29rdXA6aGVyZToxMjM0NTY3ODkwMTIvKSxcbiAgICAgIGV4cGVjdC5zdHJpbmdNYXRjaGluZygvcGxlYXNlIHVwZ3JhZGUgdG8gYm9vdHN0cmFwIHZlcnNpb24gPj0gNS8pLFxuICAgIF0pKTtcbiAgICBleHBlY3QocmVxdWVzdGVkUGFyYW1ldGVyTmFtZSEpLnRvRXF1YWwoJy9ib290c3RyYXAvcGFyYW1ldGVyJyk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudC5tb2NrLmNhbGxzLmxlbmd0aCkudG9FcXVhbCgzKTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50Lm1vY2suY2FsbHNbMF1bMl0pLnRvRXF1YWwoe1xuICAgICAgYXNzdW1lUm9sZUFybjogJ2Jsb29wLWxvb2t1cDpoZXJlOjEyMzQ1Njc4OTAxMicsXG4gICAgfSk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudC5tb2NrLmNhbGxzWzFdWzJdKS50b0VxdWFsKHtcbiAgICAgIGFzc3VtZVJvbGVBcm46ICdibG9vcDpoZXJlOjEyMzQ1Njc4OTAxMicsXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2ZhbGxiYWNrIHRvIGRlcGxveSByb2xlIGlmIGJvb3RzdHJhcCB2ZXJzaW9uIHBhcmFtZXRlciBub3QgZm91bmQnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLnN0dWJTU00oe1xuICAgICAgZ2V0UGFyYW1ldGVyKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBmb3VuZCcpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgICBjb25zdCBjZGtUb29sa2l0ID0gbmV3IENka1Rvb2xraXQoe1xuICAgICAgY2xvdWRFeGVjdXRhYmxlOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLFxuICAgICAgY29uZmlndXJhdGlvbjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLFxuICAgICAgc2RrUHJvdmlkZXI6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgICBjbG91ZEZvcm1hdGlvbjogbmV3IENsb3VkRm9ybWF0aW9uRGVwbG95bWVudHMoeyBzZGtQcm92aWRlcjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlciB9KSxcbiAgICB9KTtcblxuICAgIC8vIFdIRU5cbiAgICBhd2FpdCBjZGtUb29sa2l0LmRlcGxveSh7XG4gICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUMnXSB9LFxuICAgIH0pO1xuXG4gICAgLy8gVEhFTlxuICAgIGV4cGVjdChmbGF0dGVuKHN0ZGVyck1vY2subW9jay5jYWxscykpLnRvRXF1YWwoZXhwZWN0LmFycmF5Q29udGFpbmluZyhbXG4gICAgICBleHBlY3Quc3RyaW5nTWF0Y2hpbmcoL0NvdWxkIG5vdCBhc3N1bWUgYmxvb3AtbG9va3VwOmhlcmU6MTIzNDU2Nzg5MDEyLyksXG4gICAgICBleHBlY3Quc3RyaW5nTWF0Y2hpbmcoL3BsZWFzZSB1cGdyYWRlIHRvIGJvb3RzdHJhcCB2ZXJzaW9uID49IDUvKSxcbiAgICBdKSk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudC5tb2NrLmNhbGxzLmxlbmd0aCkudG9FcXVhbCgzKTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50Lm1vY2suY2FsbHNbMF1bMl0pLnRvRXF1YWwoe1xuICAgICAgYXNzdW1lUm9sZUFybjogJ2Jsb29wLWxvb2t1cDpoZXJlOjEyMzQ1Njc4OTAxMicsXG4gICAgfSk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudC5tb2NrLmNhbGxzWzFdWzJdKS50b0VxdWFsKHtcbiAgICAgIGFzc3VtZVJvbGVBcm46ICdibG9vcDpoZXJlOjEyMzQ1Njc4OTAxMicsXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2ZhbGxiYWNrIHRvIGRlcGxveSByb2xlIGlmIGZvckVudmlyb25tZW50IHRocm93cycsIGFzeW5jICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIC8vIHRocm93IGVycm9yIGZpcnN0IGZvciB0aGUgJ3ByZXBhcmVTZGtXaXRoTG9va3VwUm9sZUZvcicgY2FsbCBhbmQgc3VjY2VlZCBmb3IgdGhlIHJlc3RcbiAgICBtb2NrRm9yRW52aXJvbm1lbnQgPSBqZXN0LmZuKCkubW9ja0ltcGxlbWVudGF0aW9uT25jZSgoKSA9PiB7IHRocm93IG5ldyBFcnJvcignZXJyb3InKTsgfSlcbiAgICAgIC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4geyByZXR1cm4geyBzZGs6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIuc2RrLCBkaWRBc3N1bWVSb2xlOiB0cnVlIH07fSk7XG4gICAgbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlci5mb3JFbnZpcm9ubWVudCA9IG1vY2tGb3JFbnZpcm9ubWVudDtcbiAgICBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLnN0dWJTU00oe1xuICAgICAgZ2V0UGFyYW1ldGVyKCkge1xuICAgICAgICByZXR1cm4geyB9O1xuICAgICAgfSxcbiAgICB9KTtcbiAgICBjb25zdCBjZGtUb29sa2l0ID0gbmV3IENka1Rvb2xraXQoe1xuICAgICAgY2xvdWRFeGVjdXRhYmxlOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLFxuICAgICAgY29uZmlndXJhdGlvbjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLFxuICAgICAgc2RrUHJvdmlkZXI6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgICBjbG91ZEZvcm1hdGlvbjogbmV3IENsb3VkRm9ybWF0aW9uRGVwbG95bWVudHMoeyBzZGtQcm92aWRlcjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlciB9KSxcbiAgICB9KTtcblxuICAgIC8vIFdIRU5cbiAgICBhd2FpdCBjZGtUb29sa2l0LmRlcGxveSh7XG4gICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUMnXSB9LFxuICAgIH0pO1xuXG4gICAgLy8gVEhFTlxuICAgIGV4cGVjdChtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLnNkay5zc20pLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgZXhwZWN0KGZsYXR0ZW4oc3RkZXJyTW9jay5tb2NrLmNhbGxzKSkudG9FcXVhbChleHBlY3QuYXJyYXlDb250YWluaW5nKFtcbiAgICAgIGV4cGVjdC5zdHJpbmdNYXRjaGluZygvQ291bGQgbm90IGFzc3VtZSBibG9vcC1sb29rdXA6aGVyZToxMjM0NTY3ODkwMTIvKSxcbiAgICAgIGV4cGVjdC5zdHJpbmdNYXRjaGluZygvcGxlYXNlIHVwZ3JhZGUgdG8gYm9vdHN0cmFwIHZlcnNpb24gPj0gNS8pLFxuICAgIF0pKTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50Lm1vY2suY2FsbHMubGVuZ3RoKS50b0VxdWFsKDMpO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQubW9jay5jYWxsc1swXVsyXSkudG9FcXVhbCh7XG4gICAgICBhc3N1bWVSb2xlQXJuOiAnYmxvb3AtbG9va3VwOmhlcmU6MTIzNDU2Nzg5MDEyJyxcbiAgICB9KTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50Lm1vY2suY2FsbHNbMV1bMl0pLnRvRXF1YWwoe1xuICAgICAgYXNzdW1lUm9sZUFybjogJ2Jsb29wOmhlcmU6MTIzNDU2Nzg5MDEyJyxcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnZG9udCBsb29rdXAgYm9vdHN0cmFwIHZlcnNpb24gcGFyYW1ldGVyIGlmIGRlZmF1bHQgY3JlZGVudGlhbHMgYXJlIHVzZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBtb2NrRm9yRW52aXJvbm1lbnQgPSBqZXN0LmZuKCkubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHsgcmV0dXJuIHsgc2RrOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLnNkaywgZGlkQXNzdW1lUm9sZTogZmFsc2UgfTsgfSk7XG4gICAgbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlci5mb3JFbnZpcm9ubWVudCA9IG1vY2tGb3JFbnZpcm9ubWVudDtcbiAgICBjb25zdCBjZGtUb29sa2l0ID0gbmV3IENka1Rvb2xraXQoe1xuICAgICAgY2xvdWRFeGVjdXRhYmxlOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLFxuICAgICAgY29uZmlndXJhdGlvbjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLFxuICAgICAgc2RrUHJvdmlkZXI6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgICBjbG91ZEZvcm1hdGlvbjogbmV3IENsb3VkRm9ybWF0aW9uRGVwbG95bWVudHMoeyBzZGtQcm92aWRlcjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlciB9KSxcbiAgICB9KTtcbiAgICBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLnN0dWJTU00oe1xuICAgICAgZ2V0UGFyYW1ldGVyKCkge1xuICAgICAgICByZXR1cm4geyB9O1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIFdIRU5cbiAgICBhd2FpdCBjZGtUb29sa2l0LmRlcGxveSh7XG4gICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUMnXSB9LFxuICAgIH0pO1xuXG4gICAgLy8gVEhFTlxuICAgIGV4cGVjdChmbGF0dGVuKHN0ZGVyck1vY2subW9jay5jYWxscykpLnRvRXF1YWwoZXhwZWN0LmFycmF5Q29udGFpbmluZyhbXG4gICAgICBleHBlY3Quc3RyaW5nTWF0Y2hpbmcoL3BsZWFzZSB1cGdyYWRlIHRvIGJvb3RzdHJhcCB2ZXJzaW9uID49IDUvKSxcbiAgICBdKSk7XG4gICAgZXhwZWN0KG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIuc2RrLnNzbSkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50Lm1vY2suY2FsbHMubGVuZ3RoKS50b0VxdWFsKDMpO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQubW9jay5jYWxsc1swXVsyXSkudG9FcXVhbCh7XG4gICAgICBhc3N1bWVSb2xlQXJuOiAnYmxvb3AtbG9va3VwOmhlcmU6MTIzNDU2Nzg5MDEyJyxcbiAgICB9KTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50Lm1vY2suY2FsbHNbMV1bMl0pLnRvRXF1YWwoe1xuICAgICAgYXNzdW1lUm9sZUFybjogJ2Jsb29wOmhlcmU6MTIzNDU2Nzg5MDEyJyxcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnZG8gbm90IHByaW50IHdhcm5pbmdzIGlmIGxvb2t1cCByb2xlIG5vdCBwcm92aWRlZCBpbiBzdGFjayBhcnRpZmFjdCcsIGFzeW5jICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIuc3R1YlNTTSh7XG4gICAgICBnZXRQYXJhbWV0ZXIoKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgY29uc3QgY2RrVG9vbGtpdCA9IG5ldyBDZGtUb29sa2l0KHtcbiAgICAgIGNsb3VkRXhlY3V0YWJsZTogbW9ja0Nsb3VkRXhlY3V0YWJsZSxcbiAgICAgIGNvbmZpZ3VyYXRpb246IG1vY2tDbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbixcbiAgICAgIHNka1Byb3ZpZGVyOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLFxuICAgICAgY2xvdWRGb3JtYXRpb246IG5ldyBDbG91ZEZvcm1hdGlvbkRlcGxveW1lbnRzKHsgc2RrUHJvdmlkZXI6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIgfSksXG4gICAgfSk7XG5cbiAgICAvLyBXSEVOXG4gICAgYXdhaXQgY2RrVG9vbGtpdC5kZXBsb3koe1xuICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1BJ10gfSxcbiAgICB9KTtcblxuICAgIC8vIFRIRU5cbiAgICBleHBlY3QoZmxhdHRlbihzdGRlcnJNb2NrLm1vY2suY2FsbHMpKS5ub3QudG9FcXVhbChleHBlY3QuYXJyYXlDb250YWluaW5nKFtcbiAgICAgIGV4cGVjdC5zdHJpbmdNYXRjaGluZygvQ291bGQgbm90IGFzc3VtZS8pLFxuICAgICAgZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9wbGVhc2UgdXBncmFkZSB0byBib290c3RyYXAgdmVyc2lvbi8pLFxuICAgIF0pKTtcbiAgICBleHBlY3QobW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlci5zZGsuc3NtKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQubW9jay5jYWxscy5sZW5ndGgpLnRvRXF1YWwoMik7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudC5tb2NrLmNhbGxzWzBdWzJdKS50b0VxdWFsKHtcbiAgICAgIGFzc3VtZVJvbGVBcm46IHVuZGVmaW5lZCxcbiAgICAgIGFzc3VtZVJvbGVFeHRlcm5hbElkOiB1bmRlZmluZWQsXG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdkZXBsb3knLCAoKSA9PiB7XG4gIHRlc3QoJ2ZhaWxzIHdoZW4gbm8gdmFsaWQgc3RhY2sgbmFtZXMgYXJlIGdpdmVuJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIC8vIFdIRU5cbiAgICBhd2FpdCBleHBlY3QoKCkgPT4gdG9vbGtpdC5kZXBsb3koeyBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUQnXSB9IH0pKS5yZWplY3RzLnRvVGhyb3coJ05vIHN0YWNrcyBtYXRjaCB0aGUgbmFtZShzKSBUZXN0LVN0YWNrLUQnKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3dpdGggaG90c3dhcCBkZXBsb3ltZW50JywgKCkgPT4ge1xuICAgIHRlc3QoXCJwYXNzZXMgdGhyb3VnaCB0aGUgJ2hvdHN3YXAnIG9wdGlvbiB0byBDbG91ZEZvcm1hdGlvbkRlcGxveW1lbnRzLmRlcGxveVN0YWNrKClcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIGNvbnN0IG1vY2tDZm5EZXBsb3ltZW50cyA9IGluc3RhbmNlTW9ja0Zyb20oQ2xvdWRGb3JtYXRpb25EZXBsb3ltZW50cyk7XG4gICAgICBtb2NrQ2ZuRGVwbG95bWVudHMuZGVwbG95U3RhY2subW9ja1JldHVyblZhbHVlKFByb21pc2UucmVzb2x2ZSh7XG4gICAgICAgIG5vT3A6IGZhbHNlLFxuICAgICAgICBvdXRwdXRzOiB7fSxcbiAgICAgICAgc3RhY2tBcm46ICdzdGFja0FybicsXG4gICAgICAgIHN0YWNrQXJ0aWZhY3Q6IGluc3RhbmNlTW9ja0Zyb20oY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0KSxcbiAgICAgIH0pKTtcbiAgICAgIGNvbnN0IGNka1Rvb2xraXQgPSBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgICAgIGNsb3VkRXhlY3V0YWJsZSxcbiAgICAgICAgY29uZmlndXJhdGlvbjogY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24sXG4gICAgICAgIHNka1Byb3ZpZGVyOiBjbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgICAgIGNsb3VkRm9ybWF0aW9uOiBtb2NrQ2ZuRGVwbG95bWVudHMsXG4gICAgICB9KTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgYXdhaXQgY2RrVG9vbGtpdC5kZXBsb3koe1xuICAgICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUEtRGlzcGxheS1OYW1lJ10gfSxcbiAgICAgICAgcmVxdWlyZUFwcHJvdmFsOiBSZXF1aXJlQXBwcm92YWwuTmV2ZXIsXG4gICAgICAgIGhvdHN3YXA6IHRydWUsXG4gICAgICB9KTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KG1vY2tDZm5EZXBsb3ltZW50cy5kZXBsb3lTdGFjaykudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICBob3Rzd2FwOiB0cnVlLFxuICAgICAgfSkpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnbWFrZXMgY29ycmVjdCBDbG91ZEZvcm1hdGlvbiBjYWxscycsICgpID0+IHtcbiAgICB0ZXN0KCd3aXRob3V0IG9wdGlvbnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgYXdhaXQgdG9vbGtpdC5kZXBsb3koeyBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUEnLCAnVGVzdC1TdGFjay1CJ10gfSB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3dpdGggc3RhY2tzIGFsbCBzdGFja3Mgc3BlY2lmaWVkIGFzIGRvdWJsZSB3aWxkY2FyZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBhd2FpdCB0b29sa2l0LmRlcGxveSh7IHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJyoqJ10gfSB9KTtcbiAgICB9KTtcblxuXG4gICAgdGVzdCgnd2l0aCBvbmUgc3RhY2sgc3BlY2lmaWVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGF3YWl0IHRvb2xraXQuZGVwbG95KHsgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1BLURpc3BsYXktTmFtZSddIH0gfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCd3aXRoIHN0YWNrcyBhbGwgc3RhY2tzIHNwZWNpZmllZCBhcyB3aWxkY2FyZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBhd2FpdCB0b29sa2l0LmRlcGxveSh7IHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJyonXSB9IH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnd2l0aCBzbnMgbm90aWZpY2F0aW9uIGFybnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgY29uc3Qgbm90aWZpY2F0aW9uQXJucyA9IFtcbiAgICAgICAgJ2Fybjphd3M6c25zOnVzLWVhc3QtMjo0NDQ0NTU1NTY2NjY6TXlUb3BpYycsXG4gICAgICAgICdhcm46YXdzOnNuczpldS13ZXN0LTE6MTExMTU1NTU2NjY2Om15LWdyZWF0LXRvcGljJyxcbiAgICAgIF07XG4gICAgICBjb25zdCB0b29sa2l0ID0gbmV3IENka1Rvb2xraXQoe1xuICAgICAgICBjbG91ZEV4ZWN1dGFibGUsXG4gICAgICAgIGNvbmZpZ3VyYXRpb246IGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLFxuICAgICAgICBzZGtQcm92aWRlcjogY2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLFxuICAgICAgICBjbG91ZEZvcm1hdGlvbjogbmV3IEZha2VDbG91ZEZvcm1hdGlvbih7XG4gICAgICAgICAgJ1Rlc3QtU3RhY2stQSc6IHsgRm9vOiAnQmFyJyB9LFxuICAgICAgICAgICdUZXN0LVN0YWNrLUInOiB7IEJhejogJ1ppbmdhIScgfSxcbiAgICAgICAgfSwgbm90aWZpY2F0aW9uQXJucyksXG4gICAgICB9KTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgYXdhaXQgdG9vbGtpdC5kZXBsb3koe1xuICAgICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUEnLCAnVGVzdC1TdGFjay1CJ10gfSxcbiAgICAgICAgbm90aWZpY2F0aW9uQXJucyxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnZmFpbCB3aXRoIGluY29ycmVjdCBzbnMgbm90aWZpY2F0aW9uIGFybnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgY29uc3Qgbm90aWZpY2F0aW9uQXJucyA9IFsnYXJuOjo6Y2ZuLW15LWNvb2wtdG9waWMnXTtcbiAgICAgIGNvbnN0IHRvb2xraXQgPSBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgICAgIGNsb3VkRXhlY3V0YWJsZSxcbiAgICAgICAgY29uZmlndXJhdGlvbjogY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24sXG4gICAgICAgIHNka1Byb3ZpZGVyOiBjbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgICAgIGNsb3VkRm9ybWF0aW9uOiBuZXcgRmFrZUNsb3VkRm9ybWF0aW9uKHtcbiAgICAgICAgICAnVGVzdC1TdGFjay1BJzogeyBGb286ICdCYXInIH0sXG4gICAgICAgIH0sIG5vdGlmaWNhdGlvbkFybnMpLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGF3YWl0IGV4cGVjdCgoKSA9PlxuICAgICAgICB0b29sa2l0LmRlcGxveSh7XG4gICAgICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1BJ10gfSxcbiAgICAgICAgICBub3RpZmljYXRpb25Bcm5zLFxuICAgICAgICB9KSxcbiAgICAgICkucmVqZWN0cy50b1Rocm93KCdOb3RpZmljYXRpb24gYXJuIGFybjo6OmNmbi1teS1jb29sLXRvcGljIGlzIG5vdCBhIHZhbGlkIGFybiBmb3IgYW4gU05TIHRvcGljJyk7XG5cbiAgICB9KTtcblxuICAgIHRlc3QoJ2dsb2JsZXNzIGJvb3RzdHJhcCB1c2VzIGVudmlyb25tZW50IHdpdGhvdXQgcXVlc3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGF3YWl0IHRvb2xraXQuYm9vdHN0cmFwKFsnYXdzOi8vNTY3ODkvc291dGgtcG9sZSddLCBib290c3RyYXBwZXIsIHt9KTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KGJvb3RzdHJhcHBlci5ib290c3RyYXBFbnZpcm9ubWVudCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoe1xuICAgICAgICBhY2NvdW50OiAnNTY3ODknLFxuICAgICAgICByZWdpb246ICdzb3V0aC1wb2xlJyxcbiAgICAgICAgbmFtZTogJ2F3czovLzU2Nzg5L3NvdXRoLXBvbGUnLFxuICAgICAgfSwgZXhwZWN0LmFueXRoaW5nKCksIGV4cGVjdC5hbnl0aGluZygpKTtcbiAgICAgIGV4cGVjdChib290c3RyYXBwZXIuYm9vdHN0cmFwRW52aXJvbm1lbnQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2dsb2JieSBib290c3RyYXAgdXNlcyB3aGF0cyBpbiB0aGUgc3RhY2tzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG4gICAgICBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbi5zZXR0aW5ncy5zZXQoWydhcHAnXSwgJ3NvbWV0aGluZycpO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBhd2FpdCB0b29sa2l0LmJvb3RzdHJhcChbJ2F3czovLyovYmVybXVkYS10cmlhbmdsZS0xJ10sIGJvb3RzdHJhcHBlciwge30pO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBleHBlY3QoYm9vdHN0cmFwcGVyLmJvb3RzdHJhcEVudmlyb25tZW50KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7XG4gICAgICAgIGFjY291bnQ6ICcxMjM0NTY3ODkwMTInLFxuICAgICAgICByZWdpb246ICdiZXJtdWRhLXRyaWFuZ2xlLTEnLFxuICAgICAgICBuYW1lOiAnYXdzOi8vMTIzNDU2Nzg5MDEyL2Jlcm11ZGEtdHJpYW5nbGUtMScsXG4gICAgICB9LCBleHBlY3QuYW55dGhpbmcoKSwgZXhwZWN0LmFueXRoaW5nKCkpO1xuICAgICAgZXhwZWN0KGJvb3RzdHJhcHBlci5ib290c3RyYXBFbnZpcm9ubWVudCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnYm9vdHN0cmFwIGNhbiBiZSBpbnZva2VkIHdpdGhvdXQgdGhlIC0tYXBwIGFyZ3VtZW50JywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLnNldHRpbmdzLmNsZWFyKCk7XG4gICAgICBjb25zdCBtb2NrU3ludGhlc2l6ZSA9IGplc3QuZm4oKTtcbiAgICAgIGNsb3VkRXhlY3V0YWJsZS5zeW50aGVzaXplID0gbW9ja1N5bnRoZXNpemU7XG5cbiAgICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGF3YWl0IHRvb2xraXQuYm9vdHN0cmFwKFsnYXdzOi8vMTIzNDU2Nzg5MDEyL3dlc3QtcG9sZSddLCBib290c3RyYXBwZXIsIHt9KTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KGJvb3RzdHJhcHBlci5ib290c3RyYXBFbnZpcm9ubWVudCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoe1xuICAgICAgICBhY2NvdW50OiAnMTIzNDU2Nzg5MDEyJyxcbiAgICAgICAgcmVnaW9uOiAnd2VzdC1wb2xlJyxcbiAgICAgICAgbmFtZTogJ2F3czovLzEyMzQ1Njc4OTAxMi93ZXN0LXBvbGUnLFxuICAgICAgfSwgZXhwZWN0LmFueXRoaW5nKCksIGV4cGVjdC5hbnl0aGluZygpKTtcbiAgICAgIGV4cGVjdChib290c3RyYXBwZXIuYm9vdHN0cmFwRW52aXJvbm1lbnQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcblxuICAgICAgZXhwZWN0KGNsb3VkRXhlY3V0YWJsZS5oYXNBcHApLnRvRXF1YWwoZmFsc2UpO1xuICAgICAgZXhwZWN0KG1vY2tTeW50aGVzaXplKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnY2FuIGRpc2FibGUgYXNzZXQgcGFyYWxsZWxpc20nLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgY2xvdWRFeGVjdXRhYmxlID0gbmV3IE1vY2tDbG91ZEV4ZWN1dGFibGUoe1xuICAgICAgICBzdGFja3M6IFtNb2NrU3RhY2suTU9DS19TVEFDS19XSVRIX0FTU0VUXSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZmFrZUNsb3VkRm9ybWF0aW9uID0gbmV3IEZha2VDbG91ZEZvcm1hdGlvbih7fSk7XG5cbiAgICAgIGNvbnN0IHRvb2xraXQgPSBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgICAgIGNsb3VkRXhlY3V0YWJsZSxcbiAgICAgICAgY29uZmlndXJhdGlvbjogY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24sXG4gICAgICAgIHNka1Byb3ZpZGVyOiBjbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgICAgIGNsb3VkRm9ybWF0aW9uOiBmYWtlQ2xvdWRGb3JtYXRpb24sXG4gICAgICB9KTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgLy8gTm90IHRoZSBiZXN0IHRlc3QgYnV0IGZvbGxvd2luZyB0aGlzIHRocm91Z2ggdG8gdGhlIGFzc2V0IHB1Ymxpc2hpbmcgbGlicmFyeSBmYWlsc1xuICAgICAgYXdhaXQgd2l0aE1vY2tlZChmYWtlQ2xvdWRGb3JtYXRpb24sICdidWlsZFN0YWNrQXNzZXRzJywgYXN5bmMgKG1vY2tCdWlsZFN0YWNrQXNzZXRzKSA9PiB7XG4gICAgICAgIGF3YWl0IHRvb2xraXQuZGVwbG95KHtcbiAgICAgICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUFzc2V0J10gfSxcbiAgICAgICAgICBhc3NldFBhcmFsbGVsaXNtOiBmYWxzZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZXhwZWN0KG1vY2tCdWlsZFN0YWNrQXNzZXRzKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgYnVpbGRPcHRpb25zOiBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgICBwYXJhbGxlbDogZmFsc2UsXG4gICAgICAgICAgfSksXG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnZGVzdHJveScsICgpID0+IHtcbiAgdGVzdCgnZGVzdHJveSBjb3JyZWN0IHN0YWNrJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICBhd2FpdCBleHBlY3QoKCkgPT4ge1xuICAgICAgcmV0dXJuIHRvb2xraXQuZGVzdHJveSh7XG4gICAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJ1Rlc3QtU3RhY2stQS9UZXN0LVN0YWNrLUMnXSB9LFxuICAgICAgICBleGNsdXNpdmVseTogdHJ1ZSxcbiAgICAgICAgZm9yY2U6IHRydWUsXG4gICAgICAgIGZyb21EZXBsb3k6IHRydWUsXG4gICAgICB9KTtcbiAgICB9KS5yZXNvbHZlcztcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ3dhdGNoJywgKCkgPT4ge1xuICB0ZXN0KFwiZmFpbHMgd2hlbiBubyAnd2F0Y2gnIHNldHRpbmdzIGFyZSBmb3VuZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIGF3YWl0IGV4cGVjdCgoKSA9PiB7XG4gICAgICByZXR1cm4gdG9vbGtpdC53YXRjaCh7IHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbXSB9IH0pO1xuICAgIH0pLnJlamVjdHMudG9UaHJvdyhcIkNhbm5vdCB1c2UgdGhlICd3YXRjaCcgY29tbWFuZCB3aXRob3V0IHNwZWNpZnlpbmcgYXQgbGVhc3Qgb25lIGRpcmVjdG9yeSB0byBtb25pdG9yLiBcIiArXG4gICAgICAnTWFrZSBzdXJlIHRvIGFkZCBhIFwid2F0Y2hcIiBrZXkgdG8geW91ciBjZGsuanNvbicpO1xuICB9KTtcblxuICB0ZXN0KCdvYnNlcnZlcyBvbmx5IHRoZSByb290IGRpcmVjdG9yeSBieSBkZWZhdWx0JywgYXN5bmMgKCkgPT4ge1xuICAgIGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLnNldHRpbmdzLnNldChbJ3dhdGNoJ10sIHt9KTtcbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgYXdhaXQgdG9vbGtpdC53YXRjaCh7IHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbXSB9IH0pO1xuXG4gICAgY29uc3QgaW5jbHVkZUFyZ3MgPSBmYWtlQ2hva2lkYXJXYXRjaC5pbmNsdWRlQXJncztcbiAgICBleHBlY3QoaW5jbHVkZUFyZ3MubGVuZ3RoKS50b0JlKDEpO1xuICB9KTtcblxuICB0ZXN0KFwiYWxsb3dzIHByb3ZpZGluZyBhIHNpbmdsZSBzdHJpbmcgaW4gJ3dhdGNoLmluY2x1ZGUnXCIsIGFzeW5jICgpID0+IHtcbiAgICBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbi5zZXR0aW5ncy5zZXQoWyd3YXRjaCddLCB7XG4gICAgICBpbmNsdWRlOiAnbXktZGlyJyxcbiAgICB9KTtcbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgYXdhaXQgdG9vbGtpdC53YXRjaCh7IHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbXSB9IH0pO1xuXG4gICAgZXhwZWN0KGZha2VDaG9raWRhcldhdGNoLmluY2x1ZGVBcmdzKS50b1N0cmljdEVxdWFsKFsnbXktZGlyJ10pO1xuICB9KTtcblxuICB0ZXN0KFwiYWxsb3dzIHByb3ZpZGluZyBhbiBhcnJheSBvZiBzdHJpbmdzIGluICd3YXRjaC5pbmNsdWRlJ1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3Muc2V0KFsnd2F0Y2gnXSwge1xuICAgICAgaW5jbHVkZTogWydteS1kaXIxJywgJyoqL215LWRpcjIvKiddLFxuICAgIH0pO1xuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICBhd2FpdCB0b29sa2l0LndhdGNoKHsgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFtdIH0gfSk7XG5cbiAgICBleHBlY3QoZmFrZUNob2tpZGFyV2F0Y2guaW5jbHVkZUFyZ3MpLnRvU3RyaWN0RXF1YWwoWydteS1kaXIxJywgJyoqL215LWRpcjIvKiddKTtcbiAgfSk7XG5cbiAgdGVzdCgnaWdub3JlcyB0aGUgb3V0cHV0IGRpciwgZG90IGZpbGVzLCBkb3QgZGlyZWN0b3JpZXMsIGFuZCBub2RlX21vZHVsZXMgYnkgZGVmYXVsdCcsIGFzeW5jICgpID0+IHtcbiAgICBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbi5zZXR0aW5ncy5zZXQoWyd3YXRjaCddLCB7fSk7XG4gICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3Muc2V0KFsnb3V0cHV0J10sICdjZGsub3V0Jyk7XG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIGF3YWl0IHRvb2xraXQud2F0Y2goeyBzZWxlY3RvcjogeyBwYXR0ZXJuczogW10gfSB9KTtcblxuICAgIGV4cGVjdChmYWtlQ2hva2lkYXJXYXRjaC5leGNsdWRlQXJncykudG9TdHJpY3RFcXVhbChbXG4gICAgICAnY2RrLm91dC8qKicsXG4gICAgICAnKiovLionLFxuICAgICAgJyoqLy4qLyoqJyxcbiAgICAgICcqKi9ub2RlX21vZHVsZXMvKionLFxuICAgIF0pO1xuICB9KTtcblxuICB0ZXN0KFwiYWxsb3dzIHByb3ZpZGluZyBhIHNpbmdsZSBzdHJpbmcgaW4gJ3dhdGNoLmV4Y2x1ZGUnXCIsIGFzeW5jICgpID0+IHtcbiAgICBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbi5zZXR0aW5ncy5zZXQoWyd3YXRjaCddLCB7XG4gICAgICBleGNsdWRlOiAnbXktZGlyJyxcbiAgICB9KTtcbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgYXdhaXQgdG9vbGtpdC53YXRjaCh7IHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbXSB9IH0pO1xuXG4gICAgY29uc3QgZXhjbHVkZUFyZ3MgPSBmYWtlQ2hva2lkYXJXYXRjaC5leGNsdWRlQXJncztcbiAgICBleHBlY3QoZXhjbHVkZUFyZ3MubGVuZ3RoKS50b0JlKDUpO1xuICAgIGV4cGVjdChleGNsdWRlQXJnc1swXSkudG9CZSgnbXktZGlyJyk7XG4gIH0pO1xuXG4gIHRlc3QoXCJhbGxvd3MgcHJvdmlkaW5nIGFuIGFycmF5IG9mIHN0cmluZ3MgaW4gJ3dhdGNoLmV4Y2x1ZGUnXCIsIGFzeW5jICgpID0+IHtcbiAgICBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbi5zZXR0aW5ncy5zZXQoWyd3YXRjaCddLCB7XG4gICAgICBleGNsdWRlOiBbJ215LWRpcjEnLCAnKiovbXktZGlyMiddLFxuICAgIH0pO1xuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICBhd2FpdCB0b29sa2l0LndhdGNoKHsgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFtdIH0gfSk7XG5cbiAgICBjb25zdCBleGNsdWRlQXJncyA9IGZha2VDaG9raWRhcldhdGNoLmV4Y2x1ZGVBcmdzO1xuICAgIGV4cGVjdChleGNsdWRlQXJncy5sZW5ndGgpLnRvQmUoNik7XG4gICAgZXhwZWN0KGV4Y2x1ZGVBcmdzWzBdKS50b0JlKCdteS1kaXIxJyk7XG4gICAgZXhwZWN0KGV4Y2x1ZGVBcmdzWzFdKS50b0JlKCcqKi9teS1kaXIyJyk7XG4gIH0pO1xuXG4gIHRlc3QoJ2FsbG93cyB3YXRjaGluZyB3aXRoIGRlcGxveSBjb25jdXJyZW5jeScsIGFzeW5jICgpID0+IHtcbiAgICBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbi5zZXR0aW5ncy5zZXQoWyd3YXRjaCddLCB7fSk7XG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcbiAgICBjb25zdCBjZGtEZXBsb3lNb2NrID0gamVzdC5mbigpO1xuICAgIHRvb2xraXQuZGVwbG95ID0gY2RrRGVwbG95TW9jaztcblxuICAgIGF3YWl0IHRvb2xraXQud2F0Y2goeyBzZWxlY3RvcjogeyBwYXR0ZXJuczogW10gfSwgY29uY3VycmVuY3k6IDMgfSk7XG4gICAgZmFrZUNob2tpZGFyV2F0Y2hlck9uLnJlYWR5Q2FsbGJhY2soKTtcblxuICAgIGV4cGVjdChjZGtEZXBsb3lNb2NrKS50b0JlQ2FsbGVkV2l0aChleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7IGNvbmN1cnJlbmN5OiAzIH0pKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3dpdGggZmlsZSBjaGFuZ2UgZXZlbnRzJywgKCkgPT4ge1xuICAgIGxldCB0b29sa2l0OiBDZGtUb29sa2l0O1xuICAgIGxldCBjZGtEZXBsb3lNb2NrOiBqZXN0Lk1vY2s7XG5cbiAgICBiZWZvcmVFYWNoKGFzeW5jICgpID0+IHtcbiAgICAgIGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLnNldHRpbmdzLnNldChbJ3dhdGNoJ10sIHt9KTtcbiAgICAgIHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG4gICAgICBjZGtEZXBsb3lNb2NrID0gamVzdC5mbigpO1xuICAgICAgdG9vbGtpdC5kZXBsb3kgPSBjZGtEZXBsb3lNb2NrO1xuICAgICAgYXdhaXQgdG9vbGtpdC53YXRjaCh7IHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbXSB9IH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdChcImRvZXMgbm90IHRyaWdnZXIgYSAnZGVwbG95JyBiZWZvcmUgdGhlICdyZWFkeScgZXZlbnQgaGFzIGZpcmVkXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGZha2VDaG9raWRhcldhdGNoZXJPbi5maWxlRXZlbnRDYWxsYmFjaygnYWRkJywgJ215LWZpbGUnKTtcblxuICAgICAgZXhwZWN0KGNka0RlcGxveU1vY2spLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZShcIndoZW4gdGhlICdyZWFkeScgZXZlbnQgaGFzIGFscmVhZHkgZmlyZWRcIiwgKCkgPT4ge1xuICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIC8vIFRoZSByZWFkeSBjYWxsYmFjayB0cmlnZ2VycyBhIGRlcGxveW1lbnQgc28gZWFjaCB0ZXN0XG4gICAgICAgIC8vIHRoYXQgdXNlcyB0aGlzIGZ1bmN0aW9uIHdpbGwgc2VlICdjZGtEZXBsb3lNb2NrJyBjYWxsZWRcbiAgICAgICAgLy8gYW4gYWRkaXRpb25hbCB0aW1lLlxuICAgICAgICBmYWtlQ2hva2lkYXJXYXRjaGVyT24ucmVhZHlDYWxsYmFjaygpO1xuICAgICAgfSk7XG5cbiAgICAgIHRlc3QoXCJhbiBpbml0aWFsICdkZXBsb3knIGlzIHRyaWdnZXJlZCwgd2l0aG91dCBhbnkgZmlsZSBjaGFuZ2VzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgZXhwZWN0KGNka0RlcGxveU1vY2spLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgICAgIH0pO1xuXG4gICAgICB0ZXN0KFwiZG9lcyB0cmlnZ2VyIGEgJ2RlcGxveScgZm9yIGEgZmlsZSBjaGFuZ2VcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBmYWtlQ2hva2lkYXJXYXRjaGVyT24uZmlsZUV2ZW50Q2FsbGJhY2soJ2FkZCcsICdteS1maWxlJyk7XG5cbiAgICAgICAgZXhwZWN0KGNka0RlcGxveU1vY2spLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygyKTtcbiAgICAgIH0pO1xuXG4gICAgICB0ZXN0KFwidHJpZ2dlcnMgYSAnZGVwbG95JyB0d2ljZSBmb3IgdHdvIGZpbGUgY2hhbmdlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICBmYWtlQ2hva2lkYXJXYXRjaGVyT24uZmlsZUV2ZW50Q2FsbGJhY2soJ2FkZCcsICdteS1maWxlMScpLFxuICAgICAgICAgIGZha2VDaG9raWRhcldhdGNoZXJPbi5maWxlRXZlbnRDYWxsYmFjaygnY2hhbmdlJywgJ215LWZpbGUyJyksXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGV4cGVjdChjZGtEZXBsb3lNb2NrKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMyk7XG4gICAgICB9KTtcblxuICAgICAgdGVzdChcImJhdGNoZXMgZmlsZSBjaGFuZ2VzIHRoYXQgaGFwcGVuIGR1cmluZyAnZGVwbG95J1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICBmYWtlQ2hva2lkYXJXYXRjaGVyT24uZmlsZUV2ZW50Q2FsbGJhY2soJ2FkZCcsICdteS1maWxlMScpLFxuICAgICAgICAgIGZha2VDaG9raWRhcldhdGNoZXJPbi5maWxlRXZlbnRDYWxsYmFjaygnY2hhbmdlJywgJ215LWZpbGUyJyksXG4gICAgICAgICAgZmFrZUNob2tpZGFyV2F0Y2hlck9uLmZpbGVFdmVudENhbGxiYWNrKCd1bmxpbmsnLCAnbXktZmlsZTMnKSxcbiAgICAgICAgICBmYWtlQ2hva2lkYXJXYXRjaGVyT24uZmlsZUV2ZW50Q2FsbGJhY2soJ2FkZCcsICdteS1maWxlNCcpLFxuICAgICAgICBdKTtcblxuICAgICAgICBleHBlY3QoY2RrRGVwbG95TW9jaykudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDMpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdzeW50aCcsICgpID0+IHtcbiAgdGVzdCgnc3VjY2Vzc2Z1bCBzeW50aCBvdXRwdXRzIGhpZXJhcmNoaWNhbCBzdGFjayBpZHMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcbiAgICBhd2FpdCB0b29sa2l0LnN5bnRoKFtdLCBmYWxzZSwgZmFsc2UpO1xuXG4gICAgLy8gU2VwYXJhdGUgdGVzdHMgYXMgY29sb3JpemluZyBoYW1wZXJzIGRldGVjdGlvblxuICAgIGV4cGVjdChzdGRlcnJNb2NrLm1vY2suY2FsbHNbMV1bMF0pLnRvTWF0Y2goJ1Rlc3QtU3RhY2stQS1EaXNwbGF5LU5hbWUnKTtcbiAgICBleHBlY3Qoc3RkZXJyTW9jay5tb2NrLmNhbGxzWzFdWzBdKS50b01hdGNoKCdUZXN0LVN0YWNrLUInKTtcbiAgfSk7XG5cbiAgdGVzdCgnd2l0aCBubyBzdGRvdXQgb3B0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEdJVkVcbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgLy8gVEhFTlxuICAgIGF3YWl0IHRvb2xraXQuc3ludGgoWydUZXN0LVN0YWNrLUEtRGlzcGxheS1OYW1lJ10sIGZhbHNlLCB0cnVlKTtcbiAgICBleHBlY3QobW9ja0RhdGEubW9jay5jYWxscy5sZW5ndGgpLnRvRXF1YWwoMCk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgcHJvY2Vzcy5lbnYuU1RBQ0tTX1RPX1ZBTElEQVRFID0gdW5kZWZpbmVkO1xuICB9KTtcblxuICBkZXNjcmliZSgnc3RhY2sgd2l0aCBlcnJvciBhbmQgZmxhZ2dlZCBmb3IgdmFsaWRhdGlvbicsICgpID0+IHtcbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgIGNsb3VkRXhlY3V0YWJsZSA9IG5ldyBNb2NrQ2xvdWRFeGVjdXRhYmxlKHtcbiAgICAgICAgc3RhY2tzOiBbXG4gICAgICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQSxcbiAgICAgICAgICBNb2NrU3RhY2suTU9DS19TVEFDS19CLFxuICAgICAgICBdLFxuICAgICAgICBuZXN0ZWRBc3NlbWJsaWVzOiBbe1xuICAgICAgICAgIHN0YWNrczogW1xuICAgICAgICAgICAgeyBwcm9wZXJ0aWVzOiB7IHZhbGlkYXRlT25TeW50aDogdHJ1ZSB9LCAuLi5Nb2NrU3RhY2suTU9DS19TVEFDS19XSVRIX0VSUk9SIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfV0sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2NhdXNlcyBzeW50aCB0byBmYWlsIGlmIGF1dG9WYWxpZGF0ZT10cnVlJywgYXN5bmMoKSA9PiB7XG4gICAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuICAgICAgY29uc3QgYXV0b1ZhbGlkYXRlID0gdHJ1ZTtcbiAgICAgIGF3YWl0IGV4cGVjdCh0b29sa2l0LnN5bnRoKFtdLCBmYWxzZSwgdHJ1ZSwgYXV0b1ZhbGlkYXRlKSkucmVqZWN0cy50b0JlRGVmaW5lZCgpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnY2F1c2VzIHN5bnRoIHRvIHN1Y2NlZWQgaWYgYXV0b1ZhbGlkYXRlPWZhbHNlJywgYXN5bmMoKSA9PiB7XG4gICAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuICAgICAgY29uc3QgYXV0b1ZhbGlkYXRlID0gZmFsc2U7XG4gICAgICBhd2FpdCB0b29sa2l0LnN5bnRoKFtdLCBmYWxzZSwgdHJ1ZSwgYXV0b1ZhbGlkYXRlKTtcbiAgICAgIGV4cGVjdChtb2NrRGF0YS5tb2NrLmNhbGxzLmxlbmd0aCkudG9FcXVhbCgwKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnc3RhY2sgaGFzIGVycm9yIGFuZCB3YXMgZXhwbGljaXRseSBzZWxlY3RlZCcsIGFzeW5jKCkgPT4ge1xuICAgIGNsb3VkRXhlY3V0YWJsZSA9IG5ldyBNb2NrQ2xvdWRFeGVjdXRhYmxlKHtcbiAgICAgIHN0YWNrczogW1xuICAgICAgICBNb2NrU3RhY2suTU9DS19TVEFDS19BLFxuICAgICAgICBNb2NrU3RhY2suTU9DS19TVEFDS19CLFxuICAgICAgXSxcbiAgICAgIG5lc3RlZEFzc2VtYmxpZXM6IFt7XG4gICAgICAgIHN0YWNrczogW1xuICAgICAgICAgIHsgcHJvcGVydGllczogeyB2YWxpZGF0ZU9uU3ludGg6IGZhbHNlIH0sIC4uLk1vY2tTdGFjay5NT0NLX1NUQUNLX1dJVEhfRVJST1IgfSxcbiAgICAgICAgXSxcbiAgICAgIH1dLFxuICAgIH0pO1xuXG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIGF3YWl0IGV4cGVjdCh0b29sa2l0LnN5bnRoKFsnVGVzdC1TdGFjay1BL3dpdGhlcnJvcnMnXSwgZmFsc2UsIHRydWUpKS5yZWplY3RzLnRvQmVEZWZpbmVkKCk7XG4gIH0pO1xuXG4gIHRlc3QoJ3N0YWNrIGhhcyBlcnJvciwgaXMgbm90IGZsYWdnZWQgZm9yIHZhbGlkYXRpb24gYW5kIHdhcyBub3QgZXhwbGljaXRseSBzZWxlY3RlZCcsIGFzeW5jICgpID0+IHtcbiAgICBjbG91ZEV4ZWN1dGFibGUgPSBuZXcgTW9ja0Nsb3VkRXhlY3V0YWJsZSh7XG4gICAgICBzdGFja3M6IFtcbiAgICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQSxcbiAgICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQixcbiAgICAgIF0sXG4gICAgICBuZXN0ZWRBc3NlbWJsaWVzOiBbe1xuICAgICAgICBzdGFja3M6IFtcbiAgICAgICAgICB7IHByb3BlcnRpZXM6IHsgdmFsaWRhdGVPblN5bnRoOiBmYWxzZSB9LCAuLi5Nb2NrU3RhY2suTU9DS19TVEFDS19XSVRIX0VSUk9SIH0sXG4gICAgICAgIF0sXG4gICAgICB9XSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICBhd2FpdCB0b29sa2l0LnN5bnRoKFtdLCBmYWxzZSwgdHJ1ZSk7XG4gIH0pO1xuXG4gIHRlc3QoJ3N0YWNrIGhhcyBkZXBlbmRlbmN5IGFuZCB3YXMgZXhwbGljaXRseSBzZWxlY3RlZCcsIGFzeW5jICgpID0+IHtcbiAgICBjbG91ZEV4ZWN1dGFibGUgPSBuZXcgTW9ja0Nsb3VkRXhlY3V0YWJsZSh7XG4gICAgICBzdGFja3M6IFtcbiAgICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQyxcbiAgICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfRCxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgYXdhaXQgdG9vbGtpdC5zeW50aChbTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfRC5zdGFja05hbWVdLCB0cnVlLCBmYWxzZSk7XG5cbiAgICBleHBlY3QobW9ja0RhdGEubW9jay5jYWxscy5sZW5ndGgpLnRvRXF1YWwoMSk7XG4gICAgZXhwZWN0KG1vY2tEYXRhLm1vY2suY2FsbHNbMF1bMF0pLnRvQmVEZWZpbmVkKCk7XG4gIH0pO1xufSk7XG5cbmNsYXNzIE1vY2tTdGFjayB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTU9DS19TVEFDS19BOiBUZXN0U3RhY2tBcnRpZmFjdCA9IHtcbiAgICBzdGFja05hbWU6ICdUZXN0LVN0YWNrLUEnLFxuICAgIHRlbXBsYXRlOiB7IFJlc291cmNlczogeyBUZW1wbGF0ZU5hbWU6ICdUZXN0LVN0YWNrLUEnIH0gfSxcbiAgICBlbnY6ICdhd3M6Ly8xMjM0NTY3ODkwMTIvYmVybXVkYS10cmlhbmdsZS0xJyxcbiAgICBtZXRhZGF0YToge1xuICAgICAgJy9UZXN0LVN0YWNrLUEnOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBjeHNjaGVtYS5BcnRpZmFjdE1ldGFkYXRhRW50cnlUeXBlLlNUQUNLX1RBR1MsXG4gICAgICAgICAgZGF0YTogW1xuICAgICAgICAgICAgeyBrZXk6ICdGb28nLCB2YWx1ZTogJ0JhcicgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIGRpc3BsYXlOYW1lOiAnVGVzdC1TdGFjay1BLURpc3BsYXktTmFtZScsXG4gIH07XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTU9DS19TVEFDS19COiBUZXN0U3RhY2tBcnRpZmFjdCA9IHtcbiAgICBzdGFja05hbWU6ICdUZXN0LVN0YWNrLUInLFxuICAgIHRlbXBsYXRlOiB7IFJlc291cmNlczogeyBUZW1wbGF0ZU5hbWU6ICdUZXN0LVN0YWNrLUInIH0gfSxcbiAgICBlbnY6ICdhd3M6Ly8xMjM0NTY3ODkwMTIvYmVybXVkYS10cmlhbmdsZS0xJyxcbiAgICBtZXRhZGF0YToge1xuICAgICAgJy9UZXN0LVN0YWNrLUInOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBjeHNjaGVtYS5BcnRpZmFjdE1ldGFkYXRhRW50cnlUeXBlLlNUQUNLX1RBR1MsXG4gICAgICAgICAgZGF0YTogW1xuICAgICAgICAgICAgeyBrZXk6ICdCYXonLCB2YWx1ZTogJ1ppbmdhIScgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICB9O1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1PQ0tfU1RBQ0tfQzogVGVzdFN0YWNrQXJ0aWZhY3QgPSB7XG4gICAgc3RhY2tOYW1lOiAnVGVzdC1TdGFjay1DJyxcbiAgICB0ZW1wbGF0ZTogeyBSZXNvdXJjZXM6IHsgVGVtcGxhdGVOYW1lOiAnVGVzdC1TdGFjay1DJyB9IH0sXG4gICAgZW52OiAnYXdzOi8vMTIzNDU2Nzg5MDEyL2Jlcm11ZGEtdHJpYW5nbGUtMScsXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgICcvVGVzdC1TdGFjay1DJzogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogY3hzY2hlbWEuQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZS5TVEFDS19UQUdTLFxuICAgICAgICAgIGRhdGE6IFtcbiAgICAgICAgICAgIHsga2V5OiAnQmF6JywgdmFsdWU6ICdaaW5nYSEnIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICBkaXNwbGF5TmFtZTogJ1Rlc3QtU3RhY2stQS9UZXN0LVN0YWNrLUMnLFxuICB9O1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1PQ0tfU1RBQ0tfRDogVGVzdFN0YWNrQXJ0aWZhY3QgPSB7XG4gICAgc3RhY2tOYW1lOiAnVGVzdC1TdGFjay1EJyxcbiAgICB0ZW1wbGF0ZTogeyBSZXNvdXJjZXM6IHsgVGVtcGxhdGVOYW1lOiAnVGVzdC1TdGFjay1EJyB9IH0sXG4gICAgZW52OiAnYXdzOi8vMTIzNDU2Nzg5MDEyL2Jlcm11ZGEtdHJpYW5nbGUtMScsXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgICcvVGVzdC1TdGFjay1EJzogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogY3hzY2hlbWEuQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZS5TVEFDS19UQUdTLFxuICAgICAgICAgIGRhdGE6IFtcbiAgICAgICAgICAgIHsga2V5OiAnQmF6JywgdmFsdWU6ICdaaW5nYSEnIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICBkZXBlbmRzOiBbTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQy5zdGFja05hbWVdLFxuICB9XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTU9DS19TVEFDS19XSVRIX0VSUk9SOiBUZXN0U3RhY2tBcnRpZmFjdCA9IHtcbiAgICBzdGFja05hbWU6ICd3aXRoZXJyb3JzJyxcbiAgICBlbnY6ICdhd3M6Ly8xMjM0NTY3ODkwMTIvYmVybXVkYS10cmlhbmdsZS0xJyxcbiAgICB0ZW1wbGF0ZTogeyByZXNvdXJjZTogJ2Vycm9ycmVzb3VyY2UnIH0sXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgICcvcmVzb3VyY2UnOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBjeHNjaGVtYS5BcnRpZmFjdE1ldGFkYXRhRW50cnlUeXBlLkVSUk9SLFxuICAgICAgICAgIGRhdGE6ICd0aGlzIGlzIGFuIGVycm9yJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICBkaXNwbGF5TmFtZTogJ1Rlc3QtU3RhY2stQS93aXRoZXJyb3JzJyxcbiAgfVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1PQ0tfU1RBQ0tfV0lUSF9BU1NFVDogVGVzdFN0YWNrQXJ0aWZhY3QgPSB7XG4gICAgc3RhY2tOYW1lOiAnVGVzdC1TdGFjay1Bc3NldCcsXG4gICAgdGVtcGxhdGU6IHsgUmVzb3VyY2VzOiB7IFRlbXBsYXRlTmFtZTogJ1Rlc3QtU3RhY2stQXNzZXQnIH0gfSxcbiAgICBlbnY6ICdhd3M6Ly8xMjM0NTY3ODkwMTIvYmVybXVkYS10cmlhbmdsZS0xJyxcbiAgICBhc3NldE1hbmlmZXN0OiB7XG4gICAgICB2ZXJzaW9uOiBNYW5pZmVzdC52ZXJzaW9uKCksXG4gICAgICBmaWxlczoge1xuICAgICAgICB4eXo6IHtcbiAgICAgICAgICBzb3VyY2U6IHtcbiAgICAgICAgICAgIHBhdGg6IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLicsICdMSUNFTlNFJyksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBkZXN0aW5hdGlvbnM6IHtcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9XG59XG5cbmNsYXNzIEZha2VDbG91ZEZvcm1hdGlvbiBleHRlbmRzIENsb3VkRm9ybWF0aW9uRGVwbG95bWVudHMge1xuICBwcml2YXRlIHJlYWRvbmx5IGV4cGVjdGVkVGFnczogeyBbc3RhY2tOYW1lOiBzdHJpbmddOiBUYWdbXSB9ID0ge307XG4gIHByaXZhdGUgcmVhZG9ubHkgZXhwZWN0ZWROb3RpZmljYXRpb25Bcm5zPzogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZXhwZWN0ZWRUYWdzOiB7IFtzdGFja05hbWU6IHN0cmluZ106IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfSA9IHt9LFxuICAgIGV4cGVjdGVkTm90aWZpY2F0aW9uQXJucz86IHN0cmluZ1tdLFxuICApIHtcbiAgICBzdXBlcih7IHNka1Byb3ZpZGVyOiBuZXcgTW9ja1Nka1Byb3ZpZGVyKCkgfSk7XG5cbiAgICBmb3IgKGNvbnN0IFtzdGFja05hbWUsIHRhZ3NdIG9mIE9iamVjdC5lbnRyaWVzKGV4cGVjdGVkVGFncykpIHtcbiAgICAgIHRoaXMuZXhwZWN0ZWRUYWdzW3N0YWNrTmFtZV0gPVxuICAgICAgICBPYmplY3QuZW50cmllcyh0YWdzKS5tYXAoKFtLZXksIFZhbHVlXSkgPT4gKHsgS2V5LCBWYWx1ZSB9KSlcbiAgICAgICAgICAuc29ydCgobCwgcikgPT4gbC5LZXkubG9jYWxlQ29tcGFyZShyLktleSkpO1xuICAgIH1cbiAgICBpZiAoZXhwZWN0ZWROb3RpZmljYXRpb25Bcm5zKSB7XG4gICAgICB0aGlzLmV4cGVjdGVkTm90aWZpY2F0aW9uQXJucyA9IGV4cGVjdGVkTm90aWZpY2F0aW9uQXJucztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZGVwbG95U3RhY2sob3B0aW9uczogRGVwbG95U3RhY2tPcHRpb25zKTogUHJvbWlzZTxEZXBsb3lTdGFja1Jlc3VsdD4ge1xuICAgIGV4cGVjdChbXG4gICAgICBNb2NrU3RhY2suTU9DS19TVEFDS19BLnN0YWNrTmFtZSxcbiAgICAgIE1vY2tTdGFjay5NT0NLX1NUQUNLX0Iuc3RhY2tOYW1lLFxuICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQy5zdGFja05hbWUsXG4gICAgICBNb2NrU3RhY2suTU9DS19TVEFDS19XSVRIX0FTU0VULnN0YWNrTmFtZSxcbiAgICBdKS50b0NvbnRhaW4ob3B0aW9ucy5zdGFjay5zdGFja05hbWUpO1xuXG4gICAgaWYgKHRoaXMuZXhwZWN0ZWRUYWdzW29wdGlvbnMuc3RhY2suc3RhY2tOYW1lXSkge1xuICAgICAgZXhwZWN0KG9wdGlvbnMudGFncykudG9FcXVhbCh0aGlzLmV4cGVjdGVkVGFnc1tvcHRpb25zLnN0YWNrLnN0YWNrTmFtZV0pO1xuICAgIH1cblxuICAgIGV4cGVjdChvcHRpb25zLm5vdGlmaWNhdGlvbkFybnMpLnRvRXF1YWwodGhpcy5leHBlY3RlZE5vdGlmaWNhdGlvbkFybnMpO1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgc3RhY2tBcm46IGBhcm46YXdzOmNsb3VkZm9ybWF0aW9uOjo6c3RhY2svJHtvcHRpb25zLnN0YWNrLnN0YWNrTmFtZX0vTW9ja2VkT3V0YCxcbiAgICAgIG5vT3A6IGZhbHNlLFxuICAgICAgb3V0cHV0czogeyBTdGFja05hbWU6IG9wdGlvbnMuc3RhY2suc3RhY2tOYW1lIH0sXG4gICAgICBzdGFja0FydGlmYWN0OiBvcHRpb25zLnN0YWNrLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGRlc3Ryb3lTdGFjayhvcHRpb25zOiBEZXN0cm95U3RhY2tPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgZXhwZWN0KG9wdGlvbnMuc3RhY2spLnRvQmVEZWZpbmVkKCk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgcHVibGljIHJlYWRDdXJyZW50VGVtcGxhdGUoc3RhY2s6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCk6IFByb21pc2U8VGVtcGxhdGU+IHtcbiAgICBzd2l0Y2ggKHN0YWNrLnN0YWNrTmFtZSkge1xuICAgICAgY2FzZSBNb2NrU3RhY2suTU9DS19TVEFDS19BLnN0YWNrTmFtZTpcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gICAgICBjYXNlIE1vY2tTdGFjay5NT0NLX1NUQUNLX0Iuc3RhY2tOYW1lOlxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICAgIGNhc2UgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQy5zdGFja05hbWU6XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICAgICAgY2FzZSBNb2NrU3RhY2suTU9DS19TVEFDS19XSVRIX0FTU0VULnN0YWNrTmFtZTpcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoYE5vdCBhbiBleHBlY3RlZCBtb2NrIHN0YWNrOiAke3N0YWNrLnN0YWNrTmFtZX1gKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
914
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXRvb2xraXQudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay10b29sa2l0LnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw0REFBNEQ7QUFDNUQsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDeEMsTUFBTSxtQkFBbUIsR0FBRztJQUMxQixFQUFFLEVBQUUscUJBQXFCO0NBQzFCLENBQUM7QUFDRixNQUFNLHFCQUFxQixHQUFHO0lBQzVCLElBQUksYUFBYTtRQUNmLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFFLGdHQUFnRztRQUNoRyxpRUFBaUU7UUFDakUsaUVBQWlFO1FBQ2pFLE1BQU0sU0FBUyxHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEQsMkRBQTJEO1FBQzNELHlCQUF5QjtRQUN6QixNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLHNDQUFzQztRQUN0QyxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBSSxpQkFBaUI7UUFDbkIsTUFBTSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUUsTUFBTSxVQUFVLEdBQUcscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2RCwrREFBK0Q7UUFDL0QseUJBQXlCO1FBQ3pCLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FB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UyxFQUFFO1lBQ3ZCLEtBQUssU0FBUyxDQUFDLFlBQVksQ0FBQyxTQUFTO2dCQUNuQyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDN0IsS0FBSyxTQUFTLENBQUMsWUFBWSxDQUFDLFNBQVM7Z0JBQ25DLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM3QixLQUFLLFNBQVMsQ0FBQyxZQUFZLENBQUMsU0FBUztnQkFDbkMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdCLEtBQUssU0FBUyxDQUFDLHFCQUFxQixDQUFDLFNBQVM7Z0JBQzVDLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM3QjtnQkFDRSxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsK0JBQStCLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1NBQzNFO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gV2UgbmVlZCB0byBtb2NrIHRoZSBjaG9raWRhciBsaWJyYXJ5LCB1c2VkIGJ5ICdjZGsgd2F0Y2gnXG5jb25zdCBtb2NrQ2hva2lkYXJXYXRjaGVyT24gPSBqZXN0LmZuKCk7XG5jb25zdCBmYWtlQ2hva2lkYXJXYXRjaGVyID0ge1xuICBvbjogbW9ja0Nob2tpZGFyV2F0Y2hlck9uLFxufTtcbmNvbnN0IGZha2VDaG9raWRhcldhdGNoZXJPbiA9IHtcbiAgZ2V0IHJlYWR5Q2FsbGJhY2soKTogKCkgPT4gdm9pZCB7XG4gICAgZXhwZWN0KG1vY2tDaG9raWRhcldhdGNoZXJPbi5tb2NrLmNhbGxzLmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuT3JFcXVhbCgxKTtcbiAgICAvLyBUaGUgY2FsbCB0byB0aGUgZmlyc3QgJ3dhdGNoZXIub24oKScgaW4gdGhlIHByb2R1Y3Rpb24gY29kZSBpcyB0aGUgb25lIHdlIGFjdHVhbGx5IHdhbnQgaGVyZS5cbiAgICAvLyBUaGlzIGlzIGEgcHJldHR5IGZyYWdpbGUsIGJ1dCBhdCBsZWFzdCB3aXRoIHRoaXMgaGVscGVyIGNsYXNzLFxuICAgIC8vIHdlIHdvdWxkIGhhdmUgdG8gY2hhbmdlIGl0IG9ubHkgaW4gb25lIHBsYWNlIGlmIGl0IGV2ZXIgYnJlYWtzXG4gICAgY29uc3QgZmlyc3RDYWxsID0gbW9ja0Nob2tpZGFyV2F0Y2hlck9uLm1vY2suY2FsbHNbMF07XG4gICAgLy8gbGV0J3MgbWFrZSBzdXJlIHRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgJ3JlYWR5JyBldmVudCxcbiAgICAvLyBqdXN0IHRvIGJlIGRvdWJsZSBzYWZlXG4gICAgZXhwZWN0KGZpcnN0Q2FsbFswXSkudG9CZSgncmVhZHknKTtcbiAgICAvLyB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIHRoZSBjYWxsYmFja1xuICAgIHJldHVybiBmaXJzdENhbGxbMV07XG4gIH0sXG5cbiAgZ2V0IGZpbGVFdmVudENhbGxiYWNrKCk6IChldmVudDogJ2FkZCcgfCAnYWRkRGlyJyB8ICdjaGFuZ2UnIHwgJ3VubGluaycgfCAndW5saW5rRGlyJywgcGF0aDogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+IHtcbiAgICBleHBlY3QobW9ja0Nob2tpZGFyV2F0Y2hlck9uLm1vY2suY2FsbHMubGVuZ3RoKS50b0JlR3JlYXRlclRoYW5PckVxdWFsKDIpO1xuICAgIGNvbnN0IHNlY29uZENhbGwgPSBtb2NrQ2hva2lkYXJXYXRjaGVyT24ubW9jay5jYWxsc1sxXTtcbiAgICAvLyBsZXQncyBtYWtlIHN1cmUgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIG5vdCB0aGUgJ3JlYWR5JyBldmVudCxcbiAgICAvLyBqdXN0IHRvIGJlIGRvdWJsZSBzYWZlXG4gICAgZXhwZWN0KHNlY29uZENhbGxbMF0pLm5vdC50b0JlKCdyZWFkeScpO1xuICAgIC8vIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIGNhbGxiYWNrXG4gICAgcmV0dXJuIHNlY29uZENhbGxbMV07XG4gIH0sXG59O1xuXG5jb25zdCBtb2NrQ2hva2lkYXJXYXRjaCA9IGplc3QuZm4oKTtcbmplc3QubW9jaygnY2hva2lkYXInLCAoKSA9PiAoe1xuICB3YXRjaDogbW9ja0Nob2tpZGFyV2F0Y2gsXG59KSk7XG5jb25zdCBmYWtlQ2hva2lkYXJXYXRjaCA9IHtcbiAgZ2V0IGluY2x1ZGVBcmdzKCk6IHN0cmluZ1tdIHtcbiAgICBleHBlY3QobW9ja0Nob2tpZGFyV2F0Y2gubW9jay5jYWxscy5sZW5ndGgpLnRvQmUoMSk7XG4gICAgLy8gdGhlIGluY2x1ZGUgYXJncyBhcmUgdGhlIGZpcnN0IHBhcmFtZXRlciB0byB0aGUgJ3dhdGNoKCknIGNhbGxcbiAgICByZXR1cm4gbW9ja0Nob2tpZGFyV2F0Y2gubW9jay5jYWxsc1swXVswXTtcbiAgfSxcblxuICBnZXQgZXhjbHVkZUFyZ3MoKTogc3RyaW5nW10ge1xuICAgIGV4cGVjdChtb2NrQ2hva2lkYXJXYXRjaC5tb2NrLmNhbGxzLmxlbmd0aCkudG9CZSgxKTtcbiAgICAvLyB0aGUgaWdub3JlIGFyZ3MgYXJlIGEgcHJvcGVydHkgb2YgdGhlIHNlY29uZCBwYXJhbWV0ZXIgdG8gdGhlICd3YXRjaCgpJyBjYWxsXG4gICAgY29uc3QgY2hva2lkYXJXYXRjaE9wdHMgPSBtb2NrQ2hva2lkYXJXYXRjaC5tb2NrLmNhbGxzWzBdWzFdO1xuICAgIHJldHVybiBjaG9raWRhcldhdGNoT3B0cy5pZ25vcmVkO1xuICB9LFxufTtcblxuY29uc3QgbW9ja0RhdGEgPSBqZXN0LmZuKCk7XG5qZXN0Lm1vY2soJy4uL2xpYi9sb2dnaW5nJywgKCkgPT4gKHtcbiAgLi4uamVzdC5yZXF1aXJlQWN0dWFsKCcuLi9saWIvbG9nZ2luZycpLFxuICBkYXRhOiBtb2NrRGF0YSxcbn0pKTtcbmplc3Quc2V0VGltZW91dCgzMF8wMDApO1xuXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgY3hzY2hlbWEgZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktc2NoZW1hJztcbmltcG9ydCB7IE1hbmlmZXN0IH0gZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktc2NoZW1hJztcbmltcG9ydCAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgeyBCb290c3RyYXBwZXIgfSBmcm9tICcuLi9saWIvYXBpL2Jvb3RzdHJhcCc7XG5pbXBvcnQgeyBDbG91ZEZvcm1hdGlvbkRlcGxveW1lbnRzLCBEZXBsb3lTdGFja09wdGlvbnMsIERlc3Ryb3lTdGFja09wdGlvbnMgfSBmcm9tICcuLi9saWIvYXBpL2Nsb3VkZm9ybWF0aW9uLWRlcGxveW1lbnRzJztcbmltcG9ydCB7IERlcGxveVN0YWNrUmVzdWx0IH0gZnJvbSAnLi4vbGliL2FwaS9kZXBsb3ktc3RhY2snO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tICcuLi9saWIvYXBpL3V0aWwvY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgQ2RrVG9vbGtpdCwgVGFnLCBBc3NldEJ1aWxkVGltZSB9IGZyb20gJy4uL2xpYi9jZGstdG9vbGtpdCc7XG5pbXBvcnQgeyBSZXF1aXJlQXBwcm92YWwgfSBmcm9tICcuLi9saWIvZGlmZic7XG5pbXBvcnQgeyBmbGF0dGVuIH0gZnJvbSAnLi4vbGliL3V0aWwnO1xuaW1wb3J0IHsgaW5zdGFuY2VNb2NrRnJvbSwgTW9ja0Nsb3VkRXhlY3V0YWJsZSwgVGVzdFN0YWNrQXJ0aWZhY3QsIHdpdGhNb2NrZWQgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHsgTW9ja1Nka1Byb3ZpZGVyIH0gZnJvbSAnLi91dGlsL21vY2stc2RrJztcblxubGV0IGNsb3VkRXhlY3V0YWJsZTogTW9ja0Nsb3VkRXhlY3V0YWJsZTtcbmxldCBib290c3RyYXBwZXI6IGplc3QuTW9ja2VkPEJvb3RzdHJhcHBlcj47XG5sZXQgc3RkZXJyTW9jazogamVzdC5TcHlJbnN0YW5jZTtcbmJlZm9yZUVhY2goKCkgPT4ge1xuICBqZXN0LnJlc2V0QWxsTW9ja3MoKTtcblxuICBtb2NrQ2hva2lkYXJXYXRjaC5tb2NrUmV0dXJuVmFsdWUoZmFrZUNob2tpZGFyV2F0Y2hlcik7XG4gIC8vIG9uKCkgaW4gY2hva2lkYXIncyBXYXRjaGVyIHJldHVybnMgJ3RoaXMnXG4gIG1vY2tDaG9raWRhcldhdGNoZXJPbi5tb2NrUmV0dXJuVmFsdWUoZmFrZUNob2tpZGFyV2F0Y2hlcik7XG5cbiAgYm9vdHN0cmFwcGVyID0gaW5zdGFuY2VNb2NrRnJvbShCb290c3RyYXBwZXIpO1xuICBib290c3RyYXBwZXIuYm9vdHN0cmFwRW52aXJvbm1lbnQubW9ja1Jlc29sdmVkVmFsdWUoeyBub09wOiBmYWxzZSwgb3V0cHV0czoge30gfSBhcyBhbnkpO1xuXG4gIGNsb3VkRXhlY3V0YWJsZSA9IG5ldyBNb2NrQ2xvdWRFeGVjdXRhYmxlKHtcbiAgICBzdGFja3M6IFtcbiAgICAgIE1vY2tTdGFjay5NT0NLX1NUQUNLX0EsXG4gICAgICBNb2NrU3RhY2suTU9DS19TVEFDS19CLFxuICAgIF0sXG4gICAgbmVzdGVkQXNzZW1ibGllczogW3tcbiAgICAgIHN0YWNrczogW01vY2tTdGFjay5NT0NLX1NUQUNLX0NdLFxuICAgIH1dLFxuICB9KTtcblxuICBzdGRlcnJNb2NrID0gamVzdC5zcHlPbihwcm9jZXNzLnN0ZGVyciwgJ3dyaXRlJykubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHsgcmV0dXJuIHRydWU7IH0pO1xufSk7XG5cbmZ1bmN0aW9uIGRlZmF1bHRUb29sa2l0U2V0dXAoKSB7XG4gIHJldHVybiBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgY2xvdWRFeGVjdXRhYmxlLFxuICAgIGNvbmZpZ3VyYXRpb246IGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLFxuICAgIHNka1Byb3ZpZGVyOiBjbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgY2xvdWRGb3JtYXRpb246IG5ldyBGYWtlQ2xvdWRGb3JtYXRpb24oe1xuICAgICAgJ1Rlc3QtU3RhY2stQSc6IHsgRm9vOiAnQmFyJyB9LFxuICAgICAgJ1Rlc3QtU3RhY2stQic6IHsgQmF6OiAnWmluZ2EhJyB9LFxuICAgICAgJ1Rlc3QtU3RhY2stQyc6IHsgQmF6OiAnWmluZ2EhJyB9LFxuICAgIH0pLFxuICB9KTtcbn1cblxuZGVzY3JpYmUoJ3JlYWRDdXJyZW50VGVtcGxhdGUnLCAoKSA9PiB7XG4gIGxldCB0ZW1wbGF0ZTogYW55O1xuICBsZXQgbW9ja0ZvckVudmlyb25tZW50ID0gamVzdC5mbigpO1xuICBsZXQgbW9ja0Nsb3VkRXhlY3V0YWJsZTogTW9ja0Nsb3VkRXhlY3V0YWJsZTtcbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICB0ZW1wbGF0ZSA9IHtcbiAgICAgIFJlc291cmNlczoge1xuICAgICAgICBGdW5jOiB7XG4gICAgICAgICAgVHlwZTogJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicsXG4gICAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgICAgS2V5OiAnVmFsdWUnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gICAgbW9ja0Nsb3VkRXhlY3V0YWJsZSA9IG5ldyBNb2NrQ2xvdWRFeGVjdXRhYmxlKHtcbiAgICAgIHN0YWNrczogW1xuICAgICAgICB7XG4gICAgICAgICAgc3RhY2tOYW1lOiAnVGVzdC1TdGFjay1DJyxcbiAgICAgICAgICB0ZW1wbGF0ZSxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBhc3N1bWVSb2xlQXJuOiAnYmxvb3A6JHtBV1M6OlJlZ2lvbn06JHtBV1M6OkFjY291bnRJZH0nLFxuICAgICAgICAgICAgbG9va3VwUm9sZToge1xuICAgICAgICAgICAgICBhcm46ICdibG9vcC1sb29rdXA6JHtBV1M6OlJlZ2lvbn06JHtBV1M6OkFjY291bnRJZH0nLFxuICAgICAgICAgICAgICByZXF1aXJlc0Jvb3RzdHJhcFN0YWNrVmVyc2lvbjogNSxcbiAgICAgICAgICAgICAgYm9vdHN0cmFwU3RhY2tWZXJzaW9uU3NtUGFyYW1ldGVyOiAnL2Jvb3RzdHJhcC9wYXJhbWV0ZXInLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgc3RhY2tOYW1lOiAnVGVzdC1TdGFjay1BJyxcbiAgICAgICAgICB0ZW1wbGF0ZSxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBhc3N1bWVSb2xlQXJuOiAnYmxvb3A6JHtBV1M6OlJlZ2lvbn06JHtBV1M6OkFjY291bnRJZH0nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICAgIG1vY2tGb3JFbnZpcm9ubWVudCA9IGplc3QuZm4oKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4geyByZXR1cm4geyBzZGs6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIuc2RrLCBkaWRBc3N1bWVSb2xlOiB0cnVlIH07IH0pO1xuICAgIG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIuZm9yRW52aXJvbm1lbnQgPSBtb2NrRm9yRW52aXJvbm1lbnQ7XG4gICAgbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlci5zdHViQ2xvdWRGb3JtYXRpb24oe1xuICAgICAgZ2V0VGVtcGxhdGUoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgVGVtcGxhdGVCb2R5OiBKU09OLnN0cmluZ2lmeSh0ZW1wbGF0ZSksXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgZGVzY3JpYmVTdGFja3MoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgU3RhY2tzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFN0YWNrTmFtZTogJ1Rlc3QtU3RhY2stQycsXG4gICAgICAgICAgICAgIFN0YWNrU3RhdHVzOiAnQ1JFQVRFX0NPTVBMRVRFJyxcbiAgICAgICAgICAgICAgQ3JlYXRpb25UaW1lOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgU3RhY2tOYW1lOiAnVGVzdC1TdGFjay1BJyxcbiAgICAgICAgICAgICAgU3RhY2tTdGF0dXM6ICdDUkVBVEVfQ09NUExFVEUnLFxuICAgICAgICAgICAgICBDcmVhdGlvblRpbWU6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCdsb29rdXAgcm9sZSBpcyB1c2VkJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgbGV0IHJlcXVlc3RlZFBhcmFtZXRlck5hbWU6IHN0cmluZztcbiAgICBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLnN0dWJTU00oe1xuICAgICAgZ2V0UGFyYW1ldGVyKHJlcXVlc3QpIHtcbiAgICAgICAgcmVxdWVzdGVkUGFyYW1ldGVyTmFtZSA9IHJlcXVlc3QuTmFtZTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBQYXJhbWV0ZXI6IHtcbiAgICAgICAgICAgIFZhbHVlOiAnNicsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgY29uc3QgY2RrVG9vbGtpdCA9IG5ldyBDZGtUb29sa2l0KHtcbiAgICAgIGNsb3VkRXhlY3V0YWJsZTogbW9ja0Nsb3VkRXhlY3V0YWJsZSxcbiAgICAgIGNvbmZpZ3VyYXRpb246IG1vY2tDbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbixcbiAgICAgIHNka1Byb3ZpZGVyOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLFxuICAgICAgY2xvdWRGb3JtYXRpb246IG5ldyBDbG91ZEZvcm1hdGlvbkRlcGxveW1lbnRzKHsgc2RrUHJvdmlkZXI6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIgfSksXG4gICAgfSk7XG5cbiAgICAvLyBXSEVOXG4gICAgYXdhaXQgY2RrVG9vbGtpdC5kZXBsb3koe1xuICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1DJ10gfSxcbiAgICB9KTtcblxuICAgIC8vIFRIRU5cbiAgICBleHBlY3QocmVxdWVzdGVkUGFyYW1ldGVyTmFtZSEpLnRvRXF1YWwoJy9ib290c3RyYXAvcGFyYW1ldGVyJyk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudC5tb2NrLmNhbGxzLmxlbmd0aCkudG9FcXVhbCgyKTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50Lm1vY2suY2FsbHNbMF1bMl0pLnRvRXF1YWwoe1xuICAgICAgYXNzdW1lUm9sZUFybjogJ2Jsb29wLWxvb2t1cDpoZXJlOjEyMzQ1Njc4OTAxMicsXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2ZhbGxiYWNrIHRvIGRlcGxveSByb2xlIGlmIGJvb3RzdHJhcCBzdGFjayB2ZXJzaW9uIGlzIG5vdCB2YWxpZCcsIGFzeW5jICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGxldCByZXF1ZXN0ZWRQYXJhbWV0ZXJOYW1lOiBzdHJpbmc7XG4gICAgbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlci5zdHViU1NNKHtcbiAgICAgIGdldFBhcmFtZXRlcihyZXF1ZXN0KSB7XG4gICAgICAgIHJlcXVlc3RlZFBhcmFtZXRlck5hbWUgPSByZXF1ZXN0Lk5hbWU7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgUGFyYW1ldGVyOiB7XG4gICAgICAgICAgICBWYWx1ZTogJzEnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IGNka1Rvb2xraXQgPSBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgICBjbG91ZEV4ZWN1dGFibGU6IG1vY2tDbG91ZEV4ZWN1dGFibGUsXG4gICAgICBjb25maWd1cmF0aW9uOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24sXG4gICAgICBzZGtQcm92aWRlcjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlcixcbiAgICAgIGNsb3VkRm9ybWF0aW9uOiBuZXcgQ2xvdWRGb3JtYXRpb25EZXBsb3ltZW50cyh7IHNka1Byb3ZpZGVyOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyIH0pLFxuICAgIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIGF3YWl0IGNka1Rvb2xraXQuZGVwbG95KHtcbiAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJ1Rlc3QtU3RhY2stQyddIH0sXG4gICAgfSk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KGZsYXR0ZW4oc3RkZXJyTW9jay5tb2NrLmNhbGxzKSkudG9FcXVhbChleHBlY3QuYXJyYXlDb250YWluaW5nKFtcbiAgICAgIGV4cGVjdC5zdHJpbmdNYXRjaGluZygvQ291bGQgbm90IGFzc3VtZSBibG9vcC1sb29rdXA6aGVyZToxMjM0NTY3ODkwMTIvKSxcbiAgICAgIGV4cGVjdC5zdHJpbmdNYXRjaGluZygvcGxlYXNlIHVwZ3JhZGUgdG8gYm9vdHN0cmFwIHZlcnNpb24gPj0gNS8pLFxuICAgIF0pKTtcbiAgICBleHBlY3QocmVxdWVzdGVkUGFyYW1ldGVyTmFtZSEpLnRvRXF1YWwoJy9ib290c3RyYXAvcGFyYW1ldGVyJyk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudC5tb2NrLmNhbGxzLmxlbmd0aCkudG9FcXVhbCgzKTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50Lm1vY2suY2FsbHNbMF1bMl0pLnRvRXF1YWwoe1xuICAgICAgYXNzdW1lUm9sZUFybjogJ2Jsb29wLWxvb2t1cDpoZXJlOjEyMzQ1Njc4OTAxMicsXG4gICAgfSk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudC5tb2NrLmNhbGxzWzFdWzJdKS50b0VxdWFsKHtcbiAgICAgIGFzc3VtZVJvbGVBcm46ICdibG9vcDpoZXJlOjEyMzQ1Njc4OTAxMicsXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2ZhbGxiYWNrIHRvIGRlcGxveSByb2xlIGlmIGJvb3RzdHJhcCB2ZXJzaW9uIHBhcmFtZXRlciBub3QgZm91bmQnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLnN0dWJTU00oe1xuICAgICAgZ2V0UGFyYW1ldGVyKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBmb3VuZCcpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgICBjb25zdCBjZGtUb29sa2l0ID0gbmV3IENka1Rvb2xraXQoe1xuICAgICAgY2xvdWRFeGVjdXRhYmxlOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLFxuICAgICAgY29uZmlndXJhdGlvbjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLFxuICAgICAgc2RrUHJvdmlkZXI6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgICBjbG91ZEZvcm1hdGlvbjogbmV3IENsb3VkRm9ybWF0aW9uRGVwbG95bWVudHMoeyBzZGtQcm92aWRlcjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlciB9KSxcbiAgICB9KTtcblxuICAgIC8vIFdIRU5cbiAgICBhd2FpdCBjZGtUb29sa2l0LmRlcGxveSh7XG4gICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUMnXSB9LFxuICAgIH0pO1xuXG4gICAgLy8gVEhFTlxuICAgIGV4cGVjdChmbGF0dGVuKHN0ZGVyck1vY2subW9jay5jYWxscykpLnRvRXF1YWwoZXhwZWN0LmFycmF5Q29udGFpbmluZyhbXG4gICAgICBleHBlY3Quc3RyaW5nTWF0Y2hpbmcoL0NvdWxkIG5vdCBhc3N1bWUgYmxvb3AtbG9va3VwOmhlcmU6MTIzNDU2Nzg5MDEyLyksXG4gICAgICBleHBlY3Quc3RyaW5nTWF0Y2hpbmcoL3BsZWFzZSB1cGdyYWRlIHRvIGJvb3RzdHJhcCB2ZXJzaW9uID49IDUvKSxcbiAgICBdKSk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudC5tb2NrLmNhbGxzLmxlbmd0aCkudG9FcXVhbCgzKTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50Lm1vY2suY2FsbHNbMF1bMl0pLnRvRXF1YWwoe1xuICAgICAgYXNzdW1lUm9sZUFybjogJ2Jsb29wLWxvb2t1cDpoZXJlOjEyMzQ1Njc4OTAxMicsXG4gICAgfSk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudC5tb2NrLmNhbGxzWzFdWzJdKS50b0VxdWFsKHtcbiAgICAgIGFzc3VtZVJvbGVBcm46ICdibG9vcDpoZXJlOjEyMzQ1Njc4OTAxMicsXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2ZhbGxiYWNrIHRvIGRlcGxveSByb2xlIGlmIGZvckVudmlyb25tZW50IHRocm93cycsIGFzeW5jICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIC8vIHRocm93IGVycm9yIGZpcnN0IGZvciB0aGUgJ3ByZXBhcmVTZGtXaXRoTG9va3VwUm9sZUZvcicgY2FsbCBhbmQgc3VjY2VlZCBmb3IgdGhlIHJlc3RcbiAgICBtb2NrRm9yRW52aXJvbm1lbnQgPSBqZXN0LmZuKCkubW9ja0ltcGxlbWVudGF0aW9uT25jZSgoKSA9PiB7IHRocm93IG5ldyBFcnJvcignZXJyb3InKTsgfSlcbiAgICAgIC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4geyByZXR1cm4geyBzZGs6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIuc2RrLCBkaWRBc3N1bWVSb2xlOiB0cnVlIH07fSk7XG4gICAgbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlci5mb3JFbnZpcm9ubWVudCA9IG1vY2tGb3JFbnZpcm9ubWVudDtcbiAgICBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLnN0dWJTU00oe1xuICAgICAgZ2V0UGFyYW1ldGVyKCkge1xuICAgICAgICByZXR1cm4geyB9O1xuICAgICAgfSxcbiAgICB9KTtcbiAgICBjb25zdCBjZGtUb29sa2l0ID0gbmV3IENka1Rvb2xraXQoe1xuICAgICAgY2xvdWRFeGVjdXRhYmxlOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLFxuICAgICAgY29uZmlndXJhdGlvbjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLFxuICAgICAgc2RrUHJvdmlkZXI6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgICBjbG91ZEZvcm1hdGlvbjogbmV3IENsb3VkRm9ybWF0aW9uRGVwbG95bWVudHMoeyBzZGtQcm92aWRlcjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlciB9KSxcbiAgICB9KTtcblxuICAgIC8vIFdIRU5cbiAgICBhd2FpdCBjZGtUb29sa2l0LmRlcGxveSh7XG4gICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUMnXSB9LFxuICAgIH0pO1xuXG4gICAgLy8gVEhFTlxuICAgIGV4cGVjdChtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLnNkay5zc20pLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgZXhwZWN0KGZsYXR0ZW4oc3RkZXJyTW9jay5tb2NrLmNhbGxzKSkudG9FcXVhbChleHBlY3QuYXJyYXlDb250YWluaW5nKFtcbiAgICAgIGV4cGVjdC5zdHJpbmdNYXRjaGluZygvQ291bGQgbm90IGFzc3VtZSBibG9vcC1sb29rdXA6aGVyZToxMjM0NTY3ODkwMTIvKSxcbiAgICAgIGV4cGVjdC5zdHJpbmdNYXRjaGluZygvcGxlYXNlIHVwZ3JhZGUgdG8gYm9vdHN0cmFwIHZlcnNpb24gPj0gNS8pLFxuICAgIF0pKTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50Lm1vY2suY2FsbHMubGVuZ3RoKS50b0VxdWFsKDMpO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQubW9jay5jYWxsc1swXVsyXSkudG9FcXVhbCh7XG4gICAgICBhc3N1bWVSb2xlQXJuOiAnYmxvb3AtbG9va3VwOmhlcmU6MTIzNDU2Nzg5MDEyJyxcbiAgICB9KTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50Lm1vY2suY2FsbHNbMV1bMl0pLnRvRXF1YWwoe1xuICAgICAgYXNzdW1lUm9sZUFybjogJ2Jsb29wOmhlcmU6MTIzNDU2Nzg5MDEyJyxcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnZG9udCBsb29rdXAgYm9vdHN0cmFwIHZlcnNpb24gcGFyYW1ldGVyIGlmIGRlZmF1bHQgY3JlZGVudGlhbHMgYXJlIHVzZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBtb2NrRm9yRW52aXJvbm1lbnQgPSBqZXN0LmZuKCkubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHsgcmV0dXJuIHsgc2RrOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLnNkaywgZGlkQXNzdW1lUm9sZTogZmFsc2UgfTsgfSk7XG4gICAgbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlci5mb3JFbnZpcm9ubWVudCA9IG1vY2tGb3JFbnZpcm9ubWVudDtcbiAgICBjb25zdCBjZGtUb29sa2l0ID0gbmV3IENka1Rvb2xraXQoe1xuICAgICAgY2xvdWRFeGVjdXRhYmxlOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLFxuICAgICAgY29uZmlndXJhdGlvbjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLFxuICAgICAgc2RrUHJvdmlkZXI6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgICBjbG91ZEZvcm1hdGlvbjogbmV3IENsb3VkRm9ybWF0aW9uRGVwbG95bWVudHMoeyBzZGtQcm92aWRlcjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlciB9KSxcbiAgICB9KTtcbiAgICBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLnN0dWJTU00oe1xuICAgICAgZ2V0UGFyYW1ldGVyKCkge1xuICAgICAgICByZXR1cm4geyB9O1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIFdIRU5cbiAgICBhd2FpdCBjZGtUb29sa2l0LmRlcGxveSh7XG4gICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUMnXSB9LFxuICAgIH0pO1xuXG4gICAgLy8gVEhFTlxuICAgIGV4cGVjdChmbGF0dGVuKHN0ZGVyck1vY2subW9jay5jYWxscykpLnRvRXF1YWwoZXhwZWN0LmFycmF5Q29udGFpbmluZyhbXG4gICAgICBleHBlY3Quc3RyaW5nTWF0Y2hpbmcoL3BsZWFzZSB1cGdyYWRlIHRvIGJvb3RzdHJhcCB2ZXJzaW9uID49IDUvKSxcbiAgICBdKSk7XG4gICAgZXhwZWN0KG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIuc2RrLnNzbSkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50Lm1vY2suY2FsbHMubGVuZ3RoKS50b0VxdWFsKDMpO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQubW9jay5jYWxsc1swXVsyXSkudG9FcXVhbCh7XG4gICAgICBhc3N1bWVSb2xlQXJuOiAnYmxvb3AtbG9va3VwOmhlcmU6MTIzNDU2Nzg5MDEyJyxcbiAgICB9KTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50Lm1vY2suY2FsbHNbMV1bMl0pLnRvRXF1YWwoe1xuICAgICAgYXNzdW1lUm9sZUFybjogJ2Jsb29wOmhlcmU6MTIzNDU2Nzg5MDEyJyxcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnZG8gbm90IHByaW50IHdhcm5pbmdzIGlmIGxvb2t1cCByb2xlIG5vdCBwcm92aWRlZCBpbiBzdGFjayBhcnRpZmFjdCcsIGFzeW5jICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIuc3R1YlNTTSh7XG4gICAgICBnZXRQYXJhbWV0ZXIoKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgY29uc3QgY2RrVG9vbGtpdCA9IG5ldyBDZGtUb29sa2l0KHtcbiAgICAgIGNsb3VkRXhlY3V0YWJsZTogbW9ja0Nsb3VkRXhlY3V0YWJsZSxcbiAgICAgIGNvbmZpZ3VyYXRpb246IG1vY2tDbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbixcbiAgICAgIHNka1Byb3ZpZGVyOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLFxuICAgICAgY2xvdWRGb3JtYXRpb246IG5ldyBDbG91ZEZvcm1hdGlvbkRlcGxveW1lbnRzKHsgc2RrUHJvdmlkZXI6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIgfSksXG4gICAgfSk7XG5cbiAgICAvLyBXSEVOXG4gICAgYXdhaXQgY2RrVG9vbGtpdC5kZXBsb3koe1xuICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1BJ10gfSxcbiAgICB9KTtcblxuICAgIC8vIFRIRU5cbiAgICBleHBlY3QoZmxhdHRlbihzdGRlcnJNb2NrLm1vY2suY2FsbHMpKS5ub3QudG9FcXVhbChleHBlY3QuYXJyYXlDb250YWluaW5nKFtcbiAgICAgIGV4cGVjdC5zdHJpbmdNYXRjaGluZygvQ291bGQgbm90IGFzc3VtZS8pLFxuICAgICAgZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9wbGVhc2UgdXBncmFkZSB0byBib290c3RyYXAgdmVyc2lvbi8pLFxuICAgIF0pKTtcbiAgICBleHBlY3QobW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlci5zZGsuc3NtKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQubW9jay5jYWxscy5sZW5ndGgpLnRvRXF1YWwoMik7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudC5tb2NrLmNhbGxzWzBdWzJdKS50b0VxdWFsKHtcbiAgICAgIGFzc3VtZVJvbGVBcm46IHVuZGVmaW5lZCxcbiAgICAgIGFzc3VtZVJvbGVFeHRlcm5hbElkOiB1bmRlZmluZWQsXG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdkZXBsb3knLCAoKSA9PiB7XG4gIHRlc3QoJ2ZhaWxzIHdoZW4gbm8gdmFsaWQgc3RhY2sgbmFtZXMgYXJlIGdpdmVuJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIC8vIFdIRU5cbiAgICBhd2FpdCBleHBlY3QoKCkgPT4gdG9vbGtpdC5kZXBsb3koeyBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUQnXSB9IH0pKS5yZWplY3RzLnRvVGhyb3coJ05vIHN0YWNrcyBtYXRjaCB0aGUgbmFtZShzKSBUZXN0LVN0YWNrLUQnKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3dpdGggaG90c3dhcCBkZXBsb3ltZW50JywgKCkgPT4ge1xuICAgIHRlc3QoXCJwYXNzZXMgdGhyb3VnaCB0aGUgJ2hvdHN3YXAnIG9wdGlvbiB0byBDbG91ZEZvcm1hdGlvbkRlcGxveW1lbnRzLmRlcGxveVN0YWNrKClcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIGNvbnN0IG1vY2tDZm5EZXBsb3ltZW50cyA9IGluc3RhbmNlTW9ja0Zyb20oQ2xvdWRGb3JtYXRpb25EZXBsb3ltZW50cyk7XG4gICAgICBtb2NrQ2ZuRGVwbG95bWVudHMuZGVwbG95U3RhY2subW9ja1JldHVyblZhbHVlKFByb21pc2UucmVzb2x2ZSh7XG4gICAgICAgIG5vT3A6IGZhbHNlLFxuICAgICAgICBvdXRwdXRzOiB7fSxcbiAgICAgICAgc3RhY2tBcm46ICdzdGFja0FybicsXG4gICAgICAgIHN0YWNrQXJ0aWZhY3Q6IGluc3RhbmNlTW9ja0Zyb20oY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0KSxcbiAgICAgIH0pKTtcbiAgICAgIGNvbnN0IGNka1Rvb2xraXQgPSBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgICAgIGNsb3VkRXhlY3V0YWJsZSxcbiAgICAgICAgY29uZmlndXJhdGlvbjogY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24sXG4gICAgICAgIHNka1Byb3ZpZGVyOiBjbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgICAgIGNsb3VkRm9ybWF0aW9uOiBtb2NrQ2ZuRGVwbG95bWVudHMsXG4gICAgICB9KTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgYXdhaXQgY2RrVG9vbGtpdC5kZXBsb3koe1xuICAgICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUEtRGlzcGxheS1OYW1lJ10gfSxcbiAgICAgICAgcmVxdWlyZUFwcHJvdmFsOiBSZXF1aXJlQXBwcm92YWwuTmV2ZXIsXG4gICAgICAgIGhvdHN3YXA6IHRydWUsXG4gICAgICB9KTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KG1vY2tDZm5EZXBsb3ltZW50cy5kZXBsb3lTdGFjaykudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICBob3Rzd2FwOiB0cnVlLFxuICAgICAgfSkpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnbWFrZXMgY29ycmVjdCBDbG91ZEZvcm1hdGlvbiBjYWxscycsICgpID0+IHtcbiAgICB0ZXN0KCd3aXRob3V0IG9wdGlvbnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgYXdhaXQgdG9vbGtpdC5kZXBsb3koeyBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUEnLCAnVGVzdC1TdGFjay1CJ10gfSB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3dpdGggc3RhY2tzIGFsbCBzdGFja3Mgc3BlY2lmaWVkIGFzIGRvdWJsZSB3aWxkY2FyZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBhd2FpdCB0b29sa2l0LmRlcGxveSh7IHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJyoqJ10gfSB9KTtcbiAgICB9KTtcblxuXG4gICAgdGVzdCgnd2l0aCBvbmUgc3RhY2sgc3BlY2lmaWVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGF3YWl0IHRvb2xraXQuZGVwbG95KHsgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1BLURpc3BsYXktTmFtZSddIH0gfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCd3aXRoIHN0YWNrcyBhbGwgc3RhY2tzIHNwZWNpZmllZCBhcyB3aWxkY2FyZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBhd2FpdCB0b29sa2l0LmRlcGxveSh7IHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJyonXSB9IH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnd2l0aCBzbnMgbm90aWZpY2F0aW9uIGFybnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgY29uc3Qgbm90aWZpY2F0aW9uQXJucyA9IFtcbiAgICAgICAgJ2Fybjphd3M6c25zOnVzLWVhc3QtMjo0NDQ0NTU1NTY2NjY6TXlUb3BpYycsXG4gICAgICAgICdhcm46YXdzOnNuczpldS13ZXN0LTE6MTExMTU1NTU2NjY2Om15LWdyZWF0LXRvcGljJyxcbiAgICAgIF07XG4gICAgICBjb25zdCB0b29sa2l0ID0gbmV3IENka1Rvb2xraXQoe1xuICAgICAgICBjbG91ZEV4ZWN1dGFibGUsXG4gICAgICAgIGNvbmZpZ3VyYXRpb246IGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLFxuICAgICAgICBzZGtQcm92aWRlcjogY2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLFxuICAgICAgICBjbG91ZEZvcm1hdGlvbjogbmV3IEZha2VDbG91ZEZvcm1hdGlvbih7XG4gICAgICAgICAgJ1Rlc3QtU3RhY2stQSc6IHsgRm9vOiAnQmFyJyB9LFxuICAgICAgICAgICdUZXN0LVN0YWNrLUInOiB7IEJhejogJ1ppbmdhIScgfSxcbiAgICAgICAgfSwgbm90aWZpY2F0aW9uQXJucyksXG4gICAgICB9KTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgYXdhaXQgdG9vbGtpdC5kZXBsb3koe1xuICAgICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUEnLCAnVGVzdC1TdGFjay1CJ10gfSxcbiAgICAgICAgbm90aWZpY2F0aW9uQXJucyxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnZmFpbCB3aXRoIGluY29ycmVjdCBzbnMgbm90aWZpY2F0aW9uIGFybnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgY29uc3Qgbm90aWZpY2F0aW9uQXJucyA9IFsnYXJuOjo6Y2ZuLW15LWNvb2wtdG9waWMnXTtcbiAgICAgIGNvbnN0IHRvb2xraXQgPSBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgICAgIGNsb3VkRXhlY3V0YWJsZSxcbiAgICAgICAgY29uZmlndXJhdGlvbjogY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24sXG4gICAgICAgIHNka1Byb3ZpZGVyOiBjbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgICAgIGNsb3VkRm9ybWF0aW9uOiBuZXcgRmFrZUNsb3VkRm9ybWF0aW9uKHtcbiAgICAgICAgICAnVGVzdC1TdGFjay1BJzogeyBGb286ICdCYXInIH0sXG4gICAgICAgIH0sIG5vdGlmaWNhdGlvbkFybnMpLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGF3YWl0IGV4cGVjdCgoKSA9PlxuICAgICAgICB0b29sa2l0LmRlcGxveSh7XG4gICAgICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1BJ10gfSxcbiAgICAgICAgICBub3RpZmljYXRpb25Bcm5zLFxuICAgICAgICB9KSxcbiAgICAgICkucmVqZWN0cy50b1Rocm93KCdOb3RpZmljYXRpb24gYXJuIGFybjo6OmNmbi1teS1jb29sLXRvcGljIGlzIG5vdCBhIHZhbGlkIGFybiBmb3IgYW4gU05TIHRvcGljJyk7XG5cbiAgICB9KTtcblxuICAgIHRlc3QoJ2dsb2JsZXNzIGJvb3RzdHJhcCB1c2VzIGVudmlyb25tZW50IHdpdGhvdXQgcXVlc3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGF3YWl0IHRvb2xraXQuYm9vdHN0cmFwKFsnYXdzOi8vNTY3ODkvc291dGgtcG9sZSddLCBib290c3RyYXBwZXIsIHt9KTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KGJvb3RzdHJhcHBlci5ib290c3RyYXBFbnZpcm9ubWVudCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoe1xuICAgICAgICBhY2NvdW50OiAnNTY3ODknLFxuICAgICAgICByZWdpb246ICdzb3V0aC1wb2xlJyxcbiAgICAgICAgbmFtZTogJ2F3czovLzU2Nzg5L3NvdXRoLXBvbGUnLFxuICAgICAgfSwgZXhwZWN0LmFueXRoaW5nKCksIGV4cGVjdC5hbnl0aGluZygpKTtcbiAgICAgIGV4cGVjdChib290c3RyYXBwZXIuYm9vdHN0cmFwRW52aXJvbm1lbnQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2dsb2JieSBib290c3RyYXAgdXNlcyB3aGF0cyBpbiB0aGUgc3RhY2tzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG4gICAgICBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbi5zZXR0aW5ncy5zZXQoWydhcHAnXSwgJ3NvbWV0aGluZycpO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBhd2FpdCB0b29sa2l0LmJvb3RzdHJhcChbJ2F3czovLyovYmVybXVkYS10cmlhbmdsZS0xJ10sIGJvb3RzdHJhcHBlciwge30pO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBleHBlY3QoYm9vdHN0cmFwcGVyLmJvb3RzdHJhcEVudmlyb25tZW50KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7XG4gICAgICAgIGFjY291bnQ6ICcxMjM0NTY3ODkwMTInLFxuICAgICAgICByZWdpb246ICdiZXJtdWRhLXRyaWFuZ2xlLTEnLFxuICAgICAgICBuYW1lOiAnYXdzOi8vMTIzNDU2Nzg5MDEyL2Jlcm11ZGEtdHJpYW5nbGUtMScsXG4gICAgICB9LCBleHBlY3QuYW55dGhpbmcoKSwgZXhwZWN0LmFueXRoaW5nKCkpO1xuICAgICAgZXhwZWN0KGJvb3RzdHJhcHBlci5ib290c3RyYXBFbnZpcm9ubWVudCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnYm9vdHN0cmFwIGNhbiBiZSBpbnZva2VkIHdpdGhvdXQgdGhlIC0tYXBwIGFyZ3VtZW50JywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLnNldHRpbmdzLmNsZWFyKCk7XG4gICAgICBjb25zdCBtb2NrU3ludGhlc2l6ZSA9IGplc3QuZm4oKTtcbiAgICAgIGNsb3VkRXhlY3V0YWJsZS5zeW50aGVzaXplID0gbW9ja1N5bnRoZXNpemU7XG5cbiAgICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGF3YWl0IHRvb2xraXQuYm9vdHN0cmFwKFsnYXdzOi8vMTIzNDU2Nzg5MDEyL3dlc3QtcG9sZSddLCBib290c3RyYXBwZXIsIHt9KTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KGJvb3RzdHJhcHBlci5ib290c3RyYXBFbnZpcm9ubWVudCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoe1xuICAgICAgICBhY2NvdW50OiAnMTIzNDU2Nzg5MDEyJyxcbiAgICAgICAgcmVnaW9uOiAnd2VzdC1wb2xlJyxcbiAgICAgICAgbmFtZTogJ2F3czovLzEyMzQ1Njc4OTAxMi93ZXN0LXBvbGUnLFxuICAgICAgfSwgZXhwZWN0LmFueXRoaW5nKCksIGV4cGVjdC5hbnl0aGluZygpKTtcbiAgICAgIGV4cGVjdChib290c3RyYXBwZXIuYm9vdHN0cmFwRW52aXJvbm1lbnQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcblxuICAgICAgZXhwZWN0KGNsb3VkRXhlY3V0YWJsZS5oYXNBcHApLnRvRXF1YWwoZmFsc2UpO1xuICAgICAgZXhwZWN0KG1vY2tTeW50aGVzaXplKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnY2FuIGRpc2FibGUgYXNzZXQgcGFyYWxsZWxpc20nLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgY2xvdWRFeGVjdXRhYmxlID0gbmV3IE1vY2tDbG91ZEV4ZWN1dGFibGUoe1xuICAgICAgICBzdGFja3M6IFtNb2NrU3RhY2suTU9DS19TVEFDS19XSVRIX0FTU0VUXSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZmFrZUNsb3VkRm9ybWF0aW9uID0gbmV3IEZha2VDbG91ZEZvcm1hdGlvbih7fSk7XG5cbiAgICAgIGNvbnN0IHRvb2xraXQgPSBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgICAgIGNsb3VkRXhlY3V0YWJsZSxcbiAgICAgICAgY29uZmlndXJhdGlvbjogY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24sXG4gICAgICAgIHNka1Byb3ZpZGVyOiBjbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgICAgIGNsb3VkRm9ybWF0aW9uOiBmYWtlQ2xvdWRGb3JtYXRpb24sXG4gICAgICB9KTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgLy8gTm90IHRoZSBiZXN0IHRlc3QgYnV0IGZvbGxvd2luZyB0aGlzIHRocm91Z2ggdG8gdGhlIGFzc2V0IHB1Ymxpc2hpbmcgbGlicmFyeSBmYWlsc1xuICAgICAgYXdhaXQgd2l0aE1vY2tlZChmYWtlQ2xvdWRGb3JtYXRpb24sICdidWlsZFN0YWNrQXNzZXRzJywgYXN5bmMgKG1vY2tCdWlsZFN0YWNrQXNzZXRzKSA9PiB7XG4gICAgICAgIGF3YWl0IHRvb2xraXQuZGVwbG95KHtcbiAgICAgICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUFzc2V0J10gfSxcbiAgICAgICAgICBhc3NldFBhcmFsbGVsaXNtOiBmYWxzZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZXhwZWN0KG1vY2tCdWlsZFN0YWNrQXNzZXRzKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgYnVpbGRPcHRpb25zOiBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgICBwYXJhbGxlbDogZmFsc2UsXG4gICAgICAgICAgfSksXG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnY2FuIGRpc2FibGUgYXNzZXQgcHJlYnVpbGQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgY2xvdWRFeGVjdXRhYmxlID0gbmV3IE1vY2tDbG91ZEV4ZWN1dGFibGUoe1xuICAgICAgICBzdGFja3M6IFtNb2NrU3RhY2suTU9DS19TVEFDS19XSVRIX0FTU0VUXSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZmFrZUNsb3VkRm9ybWF0aW9uID0gbmV3IEZha2VDbG91ZEZvcm1hdGlvbih7fSk7XG5cbiAgICAgIGNvbnN0IHRvb2xraXQgPSBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgICAgIGNsb3VkRXhlY3V0YWJsZSxcbiAgICAgICAgY29uZmlndXJhdGlvbjogY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24sXG4gICAgICAgIHNka1Byb3ZpZGVyOiBjbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgICAgIGNsb3VkRm9ybWF0aW9uOiBmYWtlQ2xvdWRGb3JtYXRpb24sXG4gICAgICB9KTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgLy8gTm90IHRoZSBiZXN0IHRlc3QgYnV0IGZvbGxvd2luZyB0aGlzIHRocm91Z2ggdG8gdGhlIGFzc2V0IHB1Ymxpc2hpbmcgbGlicmFyeSBmYWlsc1xuICAgICAgYXdhaXQgd2l0aE1vY2tlZChmYWtlQ2xvdWRGb3JtYXRpb24sICdidWlsZFN0YWNrQXNzZXRzJywgYXN5bmMgKG1vY2tCdWlsZFN0YWNrQXNzZXRzKSA9PiB7XG4gICAgICAgIGF3YWl0IHRvb2xraXQuZGVwbG95KHtcbiAgICAgICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUFzc2V0J10gfSxcbiAgICAgICAgICBhc3NldEJ1aWxkVGltZTogQXNzZXRCdWlsZFRpbWUuSlVTVF9JTl9USU1FLFxuICAgICAgICB9KTtcblxuICAgICAgICBleHBlY3QobW9ja0J1aWxkU3RhY2tBc3NldHMpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ2Rlc3Ryb3knLCAoKSA9PiB7XG4gIHRlc3QoJ2Rlc3Ryb3kgY29ycmVjdCBzdGFjaycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgYXdhaXQgZXhwZWN0KCgpID0+IHtcbiAgICAgIHJldHVybiB0b29sa2l0LmRlc3Ryb3koe1xuICAgICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUEvVGVzdC1TdGFjay1DJ10gfSxcbiAgICAgICAgZXhjbHVzaXZlbHk6IHRydWUsXG4gICAgICAgIGZvcmNlOiB0cnVlLFxuICAgICAgICBmcm9tRGVwbG95OiB0cnVlLFxuICAgICAgfSk7XG4gICAgfSkucmVzb2x2ZXM7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCd3YXRjaCcsICgpID0+IHtcbiAgdGVzdChcImZhaWxzIHdoZW4gbm8gJ3dhdGNoJyBzZXR0aW5ncyBhcmUgZm91bmRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICBhd2FpdCBleHBlY3QoKCkgPT4ge1xuICAgICAgcmV0dXJuIHRvb2xraXQud2F0Y2goeyBzZWxlY3RvcjogeyBwYXR0ZXJuczogW10gfSB9KTtcbiAgICB9KS5yZWplY3RzLnRvVGhyb3coXCJDYW5ub3QgdXNlIHRoZSAnd2F0Y2gnIGNvbW1hbmQgd2l0aG91dCBzcGVjaWZ5aW5nIGF0IGxlYXN0IG9uZSBkaXJlY3RvcnkgdG8gbW9uaXRvci4gXCIgK1xuICAgICAgJ01ha2Ugc3VyZSB0byBhZGQgYSBcIndhdGNoXCIga2V5IHRvIHlvdXIgY2RrLmpzb24nKTtcbiAgfSk7XG5cbiAgdGVzdCgnb2JzZXJ2ZXMgb25seSB0aGUgcm9vdCBkaXJlY3RvcnkgYnkgZGVmYXVsdCcsIGFzeW5jICgpID0+IHtcbiAgICBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbi5zZXR0aW5ncy5zZXQoWyd3YXRjaCddLCB7fSk7XG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIGF3YWl0IHRvb2xraXQud2F0Y2goeyBzZWxlY3RvcjogeyBwYXR0ZXJuczogW10gfSB9KTtcblxuICAgIGNvbnN0IGluY2x1ZGVBcmdzID0gZmFrZUNob2tpZGFyV2F0Y2guaW5jbHVkZUFyZ3M7XG4gICAgZXhwZWN0KGluY2x1ZGVBcmdzLmxlbmd0aCkudG9CZSgxKTtcbiAgfSk7XG5cbiAgdGVzdChcImFsbG93cyBwcm92aWRpbmcgYSBzaW5nbGUgc3RyaW5nIGluICd3YXRjaC5pbmNsdWRlJ1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3Muc2V0KFsnd2F0Y2gnXSwge1xuICAgICAgaW5jbHVkZTogJ215LWRpcicsXG4gICAgfSk7XG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIGF3YWl0IHRvb2xraXQud2F0Y2goeyBzZWxlY3RvcjogeyBwYXR0ZXJuczogW10gfSB9KTtcblxuICAgIGV4cGVjdChmYWtlQ2hva2lkYXJXYXRjaC5pbmNsdWRlQXJncykudG9TdHJpY3RFcXVhbChbJ215LWRpciddKTtcbiAgfSk7XG5cbiAgdGVzdChcImFsbG93cyBwcm92aWRpbmcgYW4gYXJyYXkgb2Ygc3RyaW5ncyBpbiAnd2F0Y2guaW5jbHVkZSdcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLnNldHRpbmdzLnNldChbJ3dhdGNoJ10sIHtcbiAgICAgIGluY2x1ZGU6IFsnbXktZGlyMScsICcqKi9teS1kaXIyLyonXSxcbiAgICB9KTtcbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgYXdhaXQgdG9vbGtpdC53YXRjaCh7IHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbXSB9IH0pO1xuXG4gICAgZXhwZWN0KGZha2VDaG9raWRhcldhdGNoLmluY2x1ZGVBcmdzKS50b1N0cmljdEVxdWFsKFsnbXktZGlyMScsICcqKi9teS1kaXIyLyonXSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2lnbm9yZXMgdGhlIG91dHB1dCBkaXIsIGRvdCBmaWxlcywgZG90IGRpcmVjdG9yaWVzLCBhbmQgbm9kZV9tb2R1bGVzIGJ5IGRlZmF1bHQnLCBhc3luYyAoKSA9PiB7XG4gICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3Muc2V0KFsnd2F0Y2gnXSwge30pO1xuICAgIGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLnNldHRpbmdzLnNldChbJ291dHB1dCddLCAnY2RrLm91dCcpO1xuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICBhd2FpdCB0b29sa2l0LndhdGNoKHsgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFtdIH0gfSk7XG5cbiAgICBleHBlY3QoZmFrZUNob2tpZGFyV2F0Y2guZXhjbHVkZUFyZ3MpLnRvU3RyaWN0RXF1YWwoW1xuICAgICAgJ2Nkay5vdXQvKionLFxuICAgICAgJyoqLy4qJyxcbiAgICAgICcqKi8uKi8qKicsXG4gICAgICAnKiovbm9kZV9tb2R1bGVzLyoqJyxcbiAgICBdKTtcbiAgfSk7XG5cbiAgdGVzdChcImFsbG93cyBwcm92aWRpbmcgYSBzaW5nbGUgc3RyaW5nIGluICd3YXRjaC5leGNsdWRlJ1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3Muc2V0KFsnd2F0Y2gnXSwge1xuICAgICAgZXhjbHVkZTogJ215LWRpcicsXG4gICAgfSk7XG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIGF3YWl0IHRvb2xraXQud2F0Y2goeyBzZWxlY3RvcjogeyBwYXR0ZXJuczogW10gfSB9KTtcblxuICAgIGNvbnN0IGV4Y2x1ZGVBcmdzID0gZmFrZUNob2tpZGFyV2F0Y2guZXhjbHVkZUFyZ3M7XG4gICAgZXhwZWN0KGV4Y2x1ZGVBcmdzLmxlbmd0aCkudG9CZSg1KTtcbiAgICBleHBlY3QoZXhjbHVkZUFyZ3NbMF0pLnRvQmUoJ215LWRpcicpO1xuICB9KTtcblxuICB0ZXN0KFwiYWxsb3dzIHByb3ZpZGluZyBhbiBhcnJheSBvZiBzdHJpbmdzIGluICd3YXRjaC5leGNsdWRlJ1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3Muc2V0KFsnd2F0Y2gnXSwge1xuICAgICAgZXhjbHVkZTogWydteS1kaXIxJywgJyoqL215LWRpcjInXSxcbiAgICB9KTtcbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgYXdhaXQgdG9vbGtpdC53YXRjaCh7IHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbXSB9IH0pO1xuXG4gICAgY29uc3QgZXhjbHVkZUFyZ3MgPSBmYWtlQ2hva2lkYXJXYXRjaC5leGNsdWRlQXJncztcbiAgICBleHBlY3QoZXhjbHVkZUFyZ3MubGVuZ3RoKS50b0JlKDYpO1xuICAgIGV4cGVjdChleGNsdWRlQXJnc1swXSkudG9CZSgnbXktZGlyMScpO1xuICAgIGV4cGVjdChleGNsdWRlQXJnc1sxXSkudG9CZSgnKiovbXktZGlyMicpO1xuICB9KTtcblxuICB0ZXN0KCdhbGxvd3Mgd2F0Y2hpbmcgd2l0aCBkZXBsb3kgY29uY3VycmVuY3knLCBhc3luYyAoKSA9PiB7XG4gICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3Muc2V0KFsnd2F0Y2gnXSwge30pO1xuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG4gICAgY29uc3QgY2RrRGVwbG95TW9jayA9IGplc3QuZm4oKTtcbiAgICB0b29sa2l0LmRlcGxveSA9IGNka0RlcGxveU1vY2s7XG5cbiAgICBhd2FpdCB0b29sa2l0LndhdGNoKHsgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFtdIH0sIGNvbmN1cnJlbmN5OiAzIH0pO1xuICAgIGZha2VDaG9raWRhcldhdGNoZXJPbi5yZWFkeUNhbGxiYWNrKCk7XG5cbiAgICBleHBlY3QoY2RrRGVwbG95TW9jaykudG9CZUNhbGxlZFdpdGgoZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoeyBjb25jdXJyZW5jeTogMyB9KSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd3aXRoIGZpbGUgY2hhbmdlIGV2ZW50cycsICgpID0+IHtcbiAgICBsZXQgdG9vbGtpdDogQ2RrVG9vbGtpdDtcbiAgICBsZXQgY2RrRGVwbG95TW9jazogamVzdC5Nb2NrO1xuXG4gICAgYmVmb3JlRWFjaChhc3luYyAoKSA9PiB7XG4gICAgICBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbi5zZXR0aW5ncy5zZXQoWyd3YXRjaCddLCB7fSk7XG4gICAgICB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuICAgICAgY2RrRGVwbG95TW9jayA9IGplc3QuZm4oKTtcbiAgICAgIHRvb2xraXQuZGVwbG95ID0gY2RrRGVwbG95TW9jaztcbiAgICAgIGF3YWl0IHRvb2xraXQud2F0Y2goeyBzZWxlY3RvcjogeyBwYXR0ZXJuczogW10gfSB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoXCJkb2VzIG5vdCB0cmlnZ2VyIGEgJ2RlcGxveScgYmVmb3JlIHRoZSAncmVhZHknIGV2ZW50IGhhcyBmaXJlZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBmYWtlQ2hva2lkYXJXYXRjaGVyT24uZmlsZUV2ZW50Q2FsbGJhY2soJ2FkZCcsICdteS1maWxlJyk7XG5cbiAgICAgIGV4cGVjdChjZGtEZXBsb3lNb2NrKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoXCJ3aGVuIHRoZSAncmVhZHknIGV2ZW50IGhhcyBhbHJlYWR5IGZpcmVkXCIsICgpID0+IHtcbiAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAvLyBUaGUgcmVhZHkgY2FsbGJhY2sgdHJpZ2dlcnMgYSBkZXBsb3ltZW50IHNvIGVhY2ggdGVzdFxuICAgICAgICAvLyB0aGF0IHVzZXMgdGhpcyBmdW5jdGlvbiB3aWxsIHNlZSAnY2RrRGVwbG95TW9jaycgY2FsbGVkXG4gICAgICAgIC8vIGFuIGFkZGl0aW9uYWwgdGltZS5cbiAgICAgICAgZmFrZUNob2tpZGFyV2F0Y2hlck9uLnJlYWR5Q2FsbGJhY2soKTtcbiAgICAgIH0pO1xuXG4gICAgICB0ZXN0KFwiYW4gaW5pdGlhbCAnZGVwbG95JyBpcyB0cmlnZ2VyZWQsIHdpdGhvdXQgYW55IGZpbGUgY2hhbmdlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChjZGtEZXBsb3lNb2NrKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gICAgICB9KTtcblxuICAgICAgdGVzdChcImRvZXMgdHJpZ2dlciBhICdkZXBsb3knIGZvciBhIGZpbGUgY2hhbmdlXCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgZmFrZUNob2tpZGFyV2F0Y2hlck9uLmZpbGVFdmVudENhbGxiYWNrKCdhZGQnLCAnbXktZmlsZScpO1xuXG4gICAgICAgIGV4cGVjdChjZGtEZXBsb3lNb2NrKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMik7XG4gICAgICB9KTtcblxuICAgICAgdGVzdChcInRyaWdnZXJzIGEgJ2RlcGxveScgdHdpY2UgZm9yIHR3byBmaWxlIGNoYW5nZXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgZmFrZUNob2tpZGFyV2F0Y2hlck9uLmZpbGVFdmVudENhbGxiYWNrKCdhZGQnLCAnbXktZmlsZTEnKSxcbiAgICAgICAgICBmYWtlQ2hva2lkYXJXYXRjaGVyT24uZmlsZUV2ZW50Q2FsbGJhY2soJ2NoYW5nZScsICdteS1maWxlMicpLFxuICAgICAgICBdKTtcblxuICAgICAgICBleHBlY3QoY2RrRGVwbG95TW9jaykudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDMpO1xuICAgICAgfSk7XG5cbiAgICAgIHRlc3QoXCJiYXRjaGVzIGZpbGUgY2hhbmdlcyB0aGF0IGhhcHBlbiBkdXJpbmcgJ2RlcGxveSdcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgZmFrZUNob2tpZGFyV2F0Y2hlck9uLmZpbGVFdmVudENhbGxiYWNrKCdhZGQnLCAnbXktZmlsZTEnKSxcbiAgICAgICAgICBmYWtlQ2hva2lkYXJXYXRjaGVyT24uZmlsZUV2ZW50Q2FsbGJhY2soJ2NoYW5nZScsICdteS1maWxlMicpLFxuICAgICAgICAgIGZha2VDaG9raWRhcldhdGNoZXJPbi5maWxlRXZlbnRDYWxsYmFjaygndW5saW5rJywgJ215LWZpbGUzJyksXG4gICAgICAgICAgZmFrZUNob2tpZGFyV2F0Y2hlck9uLmZpbGVFdmVudENhbGxiYWNrKCdhZGQnLCAnbXktZmlsZTQnKSxcbiAgICAgICAgXSk7XG5cbiAgICAgICAgZXhwZWN0KGNka0RlcGxveU1vY2spLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnc3ludGgnLCAoKSA9PiB7XG4gIHRlc3QoJ3N1Y2Nlc3NmdWwgc3ludGggb3V0cHV0cyBoaWVyYXJjaGljYWwgc3RhY2sgaWRzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG4gICAgYXdhaXQgdG9vbGtpdC5zeW50aChbXSwgZmFsc2UsIGZhbHNlKTtcblxuICAgIC8vIFNlcGFyYXRlIHRlc3RzIGFzIGNvbG9yaXppbmcgaGFtcGVycyBkZXRlY3Rpb25cbiAgICBleHBlY3Qoc3RkZXJyTW9jay5tb2NrLmNhbGxzWzFdWzBdKS50b01hdGNoKCdUZXN0LVN0YWNrLUEtRGlzcGxheS1OYW1lJyk7XG4gICAgZXhwZWN0KHN0ZGVyck1vY2subW9jay5jYWxsc1sxXVswXSkudG9NYXRjaCgnVGVzdC1TdGFjay1CJyk7XG4gIH0pO1xuXG4gIHRlc3QoJ3dpdGggbm8gc3Rkb3V0IG9wdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAvLyBHSVZFXG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIC8vIFRIRU5cbiAgICBhd2FpdCB0b29sa2l0LnN5bnRoKFsnVGVzdC1TdGFjay1BLURpc3BsYXktTmFtZSddLCBmYWxzZSwgdHJ1ZSk7XG4gICAgZXhwZWN0KG1vY2tEYXRhLm1vY2suY2FsbHMubGVuZ3RoKS50b0VxdWFsKDApO1xuICB9KTtcblxuICBhZnRlckVhY2goKCkgPT4ge1xuICAgIHByb2Nlc3MuZW52LlNUQUNLU19UT19WQUxJREFURSA9IHVuZGVmaW5lZDtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3N0YWNrIHdpdGggZXJyb3IgYW5kIGZsYWdnZWQgZm9yIHZhbGlkYXRpb24nLCAoKSA9PiB7XG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICBjbG91ZEV4ZWN1dGFibGUgPSBuZXcgTW9ja0Nsb3VkRXhlY3V0YWJsZSh7XG4gICAgICAgIHN0YWNrczogW1xuICAgICAgICAgIE1vY2tTdGFjay5NT0NLX1NUQUNLX0EsXG4gICAgICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQixcbiAgICAgICAgXSxcbiAgICAgICAgbmVzdGVkQXNzZW1ibGllczogW3tcbiAgICAgICAgICBzdGFja3M6IFtcbiAgICAgICAgICAgIHsgcHJvcGVydGllczogeyB2YWxpZGF0ZU9uU3ludGg6IHRydWUgfSwgLi4uTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfV0lUSF9FUlJPUiB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH1dLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdjYXVzZXMgc3ludGggdG8gZmFpbCBpZiBhdXRvVmFsaWRhdGU9dHJ1ZScsIGFzeW5jKCkgPT4ge1xuICAgICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcbiAgICAgIGNvbnN0IGF1dG9WYWxpZGF0ZSA9IHRydWU7XG4gICAgICBhd2FpdCBleHBlY3QodG9vbGtpdC5zeW50aChbXSwgZmFsc2UsIHRydWUsIGF1dG9WYWxpZGF0ZSkpLnJlamVjdHMudG9CZURlZmluZWQoKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2NhdXNlcyBzeW50aCB0byBzdWNjZWVkIGlmIGF1dG9WYWxpZGF0ZT1mYWxzZScsIGFzeW5jKCkgPT4ge1xuICAgICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcbiAgICAgIGNvbnN0IGF1dG9WYWxpZGF0ZSA9IGZhbHNlO1xuICAgICAgYXdhaXQgdG9vbGtpdC5zeW50aChbXSwgZmFsc2UsIHRydWUsIGF1dG9WYWxpZGF0ZSk7XG4gICAgICBleHBlY3QobW9ja0RhdGEubW9jay5jYWxscy5sZW5ndGgpLnRvRXF1YWwoMCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ3N0YWNrIGhhcyBlcnJvciBhbmQgd2FzIGV4cGxpY2l0bHkgc2VsZWN0ZWQnLCBhc3luYygpID0+IHtcbiAgICBjbG91ZEV4ZWN1dGFibGUgPSBuZXcgTW9ja0Nsb3VkRXhlY3V0YWJsZSh7XG4gICAgICBzdGFja3M6IFtcbiAgICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQSxcbiAgICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQixcbiAgICAgIF0sXG4gICAgICBuZXN0ZWRBc3NlbWJsaWVzOiBbe1xuICAgICAgICBzdGFja3M6IFtcbiAgICAgICAgICB7IHByb3BlcnRpZXM6IHsgdmFsaWRhdGVPblN5bnRoOiBmYWxzZSB9LCAuLi5Nb2NrU3RhY2suTU9DS19TVEFDS19XSVRIX0VSUk9SIH0sXG4gICAgICAgIF0sXG4gICAgICB9XSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICBhd2FpdCBleHBlY3QodG9vbGtpdC5zeW50aChbJ1Rlc3QtU3RhY2stQS93aXRoZXJyb3JzJ10sIGZhbHNlLCB0cnVlKSkucmVqZWN0cy50b0JlRGVmaW5lZCgpO1xuICB9KTtcblxuICB0ZXN0KCdzdGFjayBoYXMgZXJyb3IsIGlzIG5vdCBmbGFnZ2VkIGZvciB2YWxpZGF0aW9uIGFuZCB3YXMgbm90IGV4cGxpY2l0bHkgc2VsZWN0ZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgY2xvdWRFeGVjdXRhYmxlID0gbmV3IE1vY2tDbG91ZEV4ZWN1dGFibGUoe1xuICAgICAgc3RhY2tzOiBbXG4gICAgICAgIE1vY2tTdGFjay5NT0NLX1NUQUNLX0EsXG4gICAgICAgIE1vY2tTdGFjay5NT0NLX1NUQUNLX0IsXG4gICAgICBdLFxuICAgICAgbmVzdGVkQXNzZW1ibGllczogW3tcbiAgICAgICAgc3RhY2tzOiBbXG4gICAgICAgICAgeyBwcm9wZXJ0aWVzOiB7IHZhbGlkYXRlT25TeW50aDogZmFsc2UgfSwgLi4uTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfV0lUSF9FUlJPUiB9LFxuICAgICAgICBdLFxuICAgICAgfV0sXG4gICAgfSk7XG5cbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgYXdhaXQgdG9vbGtpdC5zeW50aChbXSwgZmFsc2UsIHRydWUpO1xuICB9KTtcblxuICB0ZXN0KCdzdGFjayBoYXMgZGVwZW5kZW5jeSBhbmQgd2FzIGV4cGxpY2l0bHkgc2VsZWN0ZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgY2xvdWRFeGVjdXRhYmxlID0gbmV3IE1vY2tDbG91ZEV4ZWN1dGFibGUoe1xuICAgICAgc3RhY2tzOiBbXG4gICAgICAgIE1vY2tTdGFjay5NT0NLX1NUQUNLX0MsXG4gICAgICAgIE1vY2tTdGFjay5NT0NLX1NUQUNLX0QsXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIGF3YWl0IHRvb2xraXQuc3ludGgoW01vY2tTdGFjay5NT0NLX1NUQUNLX0Quc3RhY2tOYW1lXSwgdHJ1ZSwgZmFsc2UpO1xuXG4gICAgZXhwZWN0KG1vY2tEYXRhLm1vY2suY2FsbHMubGVuZ3RoKS50b0VxdWFsKDEpO1xuICAgIGV4cGVjdChtb2NrRGF0YS5tb2NrLmNhbGxzWzBdWzBdKS50b0JlRGVmaW5lZCgpO1xuICB9KTtcbn0pO1xuXG5jbGFzcyBNb2NrU3RhY2sge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1PQ0tfU1RBQ0tfQTogVGVzdFN0YWNrQXJ0aWZhY3QgPSB7XG4gICAgc3RhY2tOYW1lOiAnVGVzdC1TdGFjay1BJyxcbiAgICB0ZW1wbGF0ZTogeyBSZXNvdXJjZXM6IHsgVGVtcGxhdGVOYW1lOiAnVGVzdC1TdGFjay1BJyB9IH0sXG4gICAgZW52OiAnYXdzOi8vMTIzNDU2Nzg5MDEyL2Jlcm11ZGEtdHJpYW5nbGUtMScsXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgICcvVGVzdC1TdGFjay1BJzogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogY3hzY2hlbWEuQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZS5TVEFDS19UQUdTLFxuICAgICAgICAgIGRhdGE6IFtcbiAgICAgICAgICAgIHsga2V5OiAnRm9vJywgdmFsdWU6ICdCYXInIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICBkaXNwbGF5TmFtZTogJ1Rlc3QtU3RhY2stQS1EaXNwbGF5LU5hbWUnLFxuICB9O1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1PQ0tfU1RBQ0tfQjogVGVzdFN0YWNrQXJ0aWZhY3QgPSB7XG4gICAgc3RhY2tOYW1lOiAnVGVzdC1TdGFjay1CJyxcbiAgICB0ZW1wbGF0ZTogeyBSZXNvdXJjZXM6IHsgVGVtcGxhdGVOYW1lOiAnVGVzdC1TdGFjay1CJyB9IH0sXG4gICAgZW52OiAnYXdzOi8vMTIzNDU2Nzg5MDEyL2Jlcm11ZGEtdHJpYW5nbGUtMScsXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgICcvVGVzdC1TdGFjay1CJzogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogY3hzY2hlbWEuQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZS5TVEFDS19UQUdTLFxuICAgICAgICAgIGRhdGE6IFtcbiAgICAgICAgICAgIHsga2V5OiAnQmF6JywgdmFsdWU6ICdaaW5nYSEnIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgfTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNT0NLX1NUQUNLX0M6IFRlc3RTdGFja0FydGlmYWN0ID0ge1xuICAgIHN0YWNrTmFtZTogJ1Rlc3QtU3RhY2stQycsXG4gICAgdGVtcGxhdGU6IHsgUmVzb3VyY2VzOiB7IFRlbXBsYXRlTmFtZTogJ1Rlc3QtU3RhY2stQycgfSB9LFxuICAgIGVudjogJ2F3czovLzEyMzQ1Njc4OTAxMi9iZXJtdWRhLXRyaWFuZ2xlLTEnLFxuICAgIG1ldGFkYXRhOiB7XG4gICAgICAnL1Rlc3QtU3RhY2stQyc6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IGN4c2NoZW1hLkFydGlmYWN0TWV0YWRhdGFFbnRyeVR5cGUuU1RBQ0tfVEFHUyxcbiAgICAgICAgICBkYXRhOiBbXG4gICAgICAgICAgICB7IGtleTogJ0JheicsIHZhbHVlOiAnWmluZ2EhJyB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAgZGlzcGxheU5hbWU6ICdUZXN0LVN0YWNrLUEvVGVzdC1TdGFjay1DJyxcbiAgfTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNT0NLX1NUQUNLX0Q6IFRlc3RTdGFja0FydGlmYWN0ID0ge1xuICAgIHN0YWNrTmFtZTogJ1Rlc3QtU3RhY2stRCcsXG4gICAgdGVtcGxhdGU6IHsgUmVzb3VyY2VzOiB7IFRlbXBsYXRlTmFtZTogJ1Rlc3QtU3RhY2stRCcgfSB9LFxuICAgIGVudjogJ2F3czovLzEyMzQ1Njc4OTAxMi9iZXJtdWRhLXRyaWFuZ2xlLTEnLFxuICAgIG1ldGFkYXRhOiB7XG4gICAgICAnL1Rlc3QtU3RhY2stRCc6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IGN4c2NoZW1hLkFydGlmYWN0TWV0YWRhdGFFbnRyeVR5cGUuU1RBQ0tfVEFHUyxcbiAgICAgICAgICBkYXRhOiBbXG4gICAgICAgICAgICB7IGtleTogJ0JheicsIHZhbHVlOiAnWmluZ2EhJyB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAgZGVwZW5kczogW01vY2tTdGFjay5NT0NLX1NUQUNLX0Muc3RhY2tOYW1lXSxcbiAgfVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1PQ0tfU1RBQ0tfV0lUSF9FUlJPUjogVGVzdFN0YWNrQXJ0aWZhY3QgPSB7XG4gICAgc3RhY2tOYW1lOiAnd2l0aGVycm9ycycsXG4gICAgZW52OiAnYXdzOi8vMTIzNDU2Nzg5MDEyL2Jlcm11ZGEtdHJpYW5nbGUtMScsXG4gICAgdGVtcGxhdGU6IHsgcmVzb3VyY2U6ICdlcnJvcnJlc291cmNlJyB9LFxuICAgIG1ldGFkYXRhOiB7XG4gICAgICAnL3Jlc291cmNlJzogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogY3hzY2hlbWEuQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZS5FUlJPUixcbiAgICAgICAgICBkYXRhOiAndGhpcyBpcyBhbiBlcnJvcicsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAgZGlzcGxheU5hbWU6ICdUZXN0LVN0YWNrLUEvd2l0aGVycm9ycycsXG4gIH1cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNT0NLX1NUQUNLX1dJVEhfQVNTRVQ6IFRlc3RTdGFja0FydGlmYWN0ID0ge1xuICAgIHN0YWNrTmFtZTogJ1Rlc3QtU3RhY2stQXNzZXQnLFxuICAgIHRlbXBsYXRlOiB7IFJlc291cmNlczogeyBUZW1wbGF0ZU5hbWU6ICdUZXN0LVN0YWNrLUFzc2V0JyB9IH0sXG4gICAgZW52OiAnYXdzOi8vMTIzNDU2Nzg5MDEyL2Jlcm11ZGEtdHJpYW5nbGUtMScsXG4gICAgYXNzZXRNYW5pZmVzdDoge1xuICAgICAgdmVyc2lvbjogTWFuaWZlc3QudmVyc2lvbigpLFxuICAgICAgZmlsZXM6IHtcbiAgICAgICAgeHl6OiB7XG4gICAgICAgICAgc291cmNlOiB7XG4gICAgICAgICAgICBwYXRoOiBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnLi4nLCAnTElDRU5TRScpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZGVzdGluYXRpb25zOiB7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfVxufVxuXG5jbGFzcyBGYWtlQ2xvdWRGb3JtYXRpb24gZXh0ZW5kcyBDbG91ZEZvcm1hdGlvbkRlcGxveW1lbnRzIHtcbiAgcHJpdmF0ZSByZWFkb25seSBleHBlY3RlZFRhZ3M6IHsgW3N0YWNrTmFtZTogc3RyaW5nXTogVGFnW10gfSA9IHt9O1xuICBwcml2YXRlIHJlYWRvbmx5IGV4cGVjdGVkTm90aWZpY2F0aW9uQXJucz86IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGV4cGVjdGVkVGFnczogeyBbc3RhY2tOYW1lOiBzdHJpbmddOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IH0gPSB7fSxcbiAgICBleHBlY3RlZE5vdGlmaWNhdGlvbkFybnM/OiBzdHJpbmdbXSxcbiAgKSB7XG4gICAgc3VwZXIoeyBzZGtQcm92aWRlcjogbmV3IE1vY2tTZGtQcm92aWRlcigpIH0pO1xuXG4gICAgZm9yIChjb25zdCBbc3RhY2tOYW1lLCB0YWdzXSBvZiBPYmplY3QuZW50cmllcyhleHBlY3RlZFRhZ3MpKSB7XG4gICAgICB0aGlzLmV4cGVjdGVkVGFnc1tzdGFja05hbWVdID1cbiAgICAgICAgT2JqZWN0LmVudHJpZXModGFncykubWFwKChbS2V5LCBWYWx1ZV0pID0+ICh7IEtleSwgVmFsdWUgfSkpXG4gICAgICAgICAgLnNvcnQoKGwsIHIpID0+IGwuS2V5LmxvY2FsZUNvbXBhcmUoci5LZXkpKTtcbiAgICB9XG4gICAgaWYgKGV4cGVjdGVkTm90aWZpY2F0aW9uQXJucykge1xuICAgICAgdGhpcy5leHBlY3RlZE5vdGlmaWNhdGlvbkFybnMgPSBleHBlY3RlZE5vdGlmaWNhdGlvbkFybnM7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGRlcGxveVN0YWNrKG9wdGlvbnM6IERlcGxveVN0YWNrT3B0aW9ucyk6IFByb21pc2U8RGVwbG95U3RhY2tSZXN1bHQ+IHtcbiAgICBleHBlY3QoW1xuICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQS5zdGFja05hbWUsXG4gICAgICBNb2NrU3RhY2suTU9DS19TVEFDS19CLnN0YWNrTmFtZSxcbiAgICAgIE1vY2tTdGFjay5NT0NLX1NUQUNLX0Muc3RhY2tOYW1lLFxuICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfV0lUSF9BU1NFVC5zdGFja05hbWUsXG4gICAgXSkudG9Db250YWluKG9wdGlvbnMuc3RhY2suc3RhY2tOYW1lKTtcblxuICAgIGlmICh0aGlzLmV4cGVjdGVkVGFnc1tvcHRpb25zLnN0YWNrLnN0YWNrTmFtZV0pIHtcbiAgICAgIGV4cGVjdChvcHRpb25zLnRhZ3MpLnRvRXF1YWwodGhpcy5leHBlY3RlZFRhZ3Nbb3B0aW9ucy5zdGFjay5zdGFja05hbWVdKTtcbiAgICB9XG5cbiAgICBleHBlY3Qob3B0aW9ucy5ub3RpZmljYXRpb25Bcm5zKS50b0VxdWFsKHRoaXMuZXhwZWN0ZWROb3RpZmljYXRpb25Bcm5zKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgIHN0YWNrQXJuOiBgYXJuOmF3czpjbG91ZGZvcm1hdGlvbjo6OnN0YWNrLyR7b3B0aW9ucy5zdGFjay5zdGFja05hbWV9L01vY2tlZE91dGAsXG4gICAgICBub09wOiBmYWxzZSxcbiAgICAgIG91dHB1dHM6IHsgU3RhY2tOYW1lOiBvcHRpb25zLnN0YWNrLnN0YWNrTmFtZSB9LFxuICAgICAgc3RhY2tBcnRpZmFjdDogb3B0aW9ucy5zdGFjayxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBkZXN0cm95U3RhY2sob3B0aW9uczogRGVzdHJveVN0YWNrT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGV4cGVjdChvcHRpb25zLnN0YWNrKS50b0JlRGVmaW5lZCgpO1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkQ3VycmVudFRlbXBsYXRlKHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3QpOiBQcm9taXNlPFRlbXBsYXRlPiB7XG4gICAgc3dpdGNoIChzdGFjay5zdGFja05hbWUpIHtcbiAgICAgIGNhc2UgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQS5zdGFja05hbWU6XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICAgICAgY2FzZSBNb2NrU3RhY2suTU9DS19TVEFDS19CLnN0YWNrTmFtZTpcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gICAgICBjYXNlIE1vY2tTdGFjay5NT0NLX1NUQUNLX0Muc3RhY2tOYW1lOlxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICAgIGNhc2UgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfV0lUSF9BU1NFVC5zdGFja05hbWU6XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGBOb3QgYW4gZXhwZWN0ZWQgbW9jayBzdGFjazogJHtzdGFjay5zdGFja05hbWV9YCk7XG4gICAgfVxuICB9XG59XG4iXX0=
package/test/init.test.js CHANGED
@@ -114,12 +114,12 @@ describe('constructs version', () => {
114
114
  const config = await fs.readJson(path.join(tmpDir, 'cdk.json'));
115
115
  const context = config.context || {};
116
116
  for (const [key, actual] of Object.entries(context)) {
117
- expect(key in cxapi.FUTURE_FLAGS || key in cxapi.NEW_PROJECT_DEFAULT_CONTEXT).toBeTruthy();
118
- expect(cxapi.FUTURE_FLAGS[key] ?? cxapi.NEW_PROJECT_DEFAULT_CONTEXT[key]).toEqual(actual);
117
+ expect(key in cxapi.NEW_PROJECT_CONTEXT).toBeTruthy();
118
+ expect(cxapi.NEW_PROJECT_CONTEXT[key]).toEqual(actual);
119
119
  }
120
120
  // assert that expired future flags are not part of the cdk.json
121
121
  Object.keys(context).forEach(k => {
122
- expect(cxapi.FUTURE_FLAGS_EXPIRED.includes(k)).toEqual(false);
122
+ expect(cxapi.CURRENT_VERSION_EXPIRED_FLAGS.includes(k)).toEqual(false);
123
123
  });
124
124
  });
125
125
  }
@@ -174,4 +174,4 @@ async function recursiveListFiles(rdir) {
174
174
  }
175
175
  }
176
176
  }
177
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaW5pdC50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3Qix5Q0FBeUM7QUFDekMsK0JBQStCO0FBQy9CLHNDQUE4RDtBQUU5RCxRQUFRLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxFQUFFO0lBQ2xDLE9BQU8sQ0FBQyxxQ0FBcUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDL0QsTUFBTSxjQUFPLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRWxGLHdFQUF3RTtRQUN4RSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUM3RSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN0RSxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sQ0FBQyxpQ0FBaUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDM0QsTUFBTSxjQUFPLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRWxGLHdFQUF3RTtRQUN4RSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUM3RSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsVUFB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RUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUN6QjtBQUNILENBQUM7QUFFRDs7R0FFRztBQUNILEtBQUssVUFBVSxrQkFBa0IsQ0FBQyxJQUFZO0lBQzVDLE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxFQUFVLENBQUM7SUFDaEMsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEIsT0FBTyxHQUFHLENBQUM7SUFFWCxLQUFLLFVBQVUsT0FBTyxDQUFDLEdBQVc7UUFDaEMsS0FBSyxNQUFNLElBQUksSUFBSSxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDeEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO2dCQUMzQyxNQUFNLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUN6QjtpQkFBTTtnQkFDTCxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ3BCO1NBQ0Y7SUFDSCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIG9zIGZyb20gJ29zJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgYXZhaWxhYmxlSW5pdFRlbXBsYXRlcywgY2xpSW5pdCB9IGZyb20gJy4uL2xpYi9pbml0JztcblxuZGVzY3JpYmUoJ2NvbnN0cnVjdHMgdmVyc2lvbicsICgpID0+IHtcbiAgY2xpVGVzdCgnY3JlYXRlIGEgVHlwZVNjcmlwdCBsaWJyYXJ5IHByb2plY3QnLCBhc3luYyAod29ya0RpcikgPT4ge1xuICAgIGF3YWl0IGNsaUluaXQoJ2xpYicsICd0eXBlc2NyaXB0JywgZmFsc2UsIHVuZGVmaW5lZCAvKiBjYW5Vc2VOZXR3b3JrICovLCB3b3JrRGlyKTtcblxuICAgIC8vIENoZWNrIHRoYXQgcGFja2FnZS5qc29uIGFuZCBsaWIvIGdvdCBjcmVhdGVkIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeVxuICAgIGV4cGVjdChhd2FpdCBmcy5wYXRoRXhpc3RzKHBhdGguam9pbih3b3JrRGlyLCAncGFja2FnZS5qc29uJykpKS50b0JlVHJ1dGh5KCk7XG4gICAgZXhwZWN0KGF3YWl0IGZzLnBhdGhFeGlzdHMocGF0aC5qb2luKHdvcmtEaXIsICdsaWInKSkpLnRvQmVUcnV0aHkoKTtcbiAgfSk7XG5cbiAgY2xpVGVzdCgnY3JlYXRlIGEgVHlwZVNjcmlwdCBhcHAgcHJvamVjdCcsIGFzeW5jICh3b3JrRGlyKSA9PiB7XG4gICAgYXdhaXQgY2xpSW5pdCgnYXBwJywgJ3R5cGVzY3JpcHQnLCBmYWxzZSwgdW5kZWZpbmVkIC8qIGNhblVzZU5ldHdvcmsgKi8sIHdvcmtEaXIpO1xuXG4gICAgLy8gQ2hlY2sgdGhhdCBwYWNrYWdlLmpzb24gYW5kIGJpbi8gZ290IGNyZWF0ZWQgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5XG4gICAgZXhwZWN0KGF3YWl0IGZzLnBhdGhFeGlzdHMocGF0aC5qb2luKHdvcmtEaXIsICdwYWNrYWdlLmpzb24nKSkpLnRvQmVUcnV0aHkoKTtcbiAgICBleHBlY3QoYXdhaXQgZnMucGF0aEV4aXN0cyhwYXRoLmpvaW4od29ya0RpciwgJ2JpbicpKSkudG9CZVRydXRoeSgpO1xuICB9KTtcblxuICBjbGlUZXN0KCdjcmVhdGUgYSBKYXZhU2NyaXB0IGFwcCBwcm9qZWN0JywgYXN5bmMgKHdvcmtEaXIpID0+IHtcbiAgICBhd2FpdCBjbGlJbml0KCdhcHAnLCAnamF2YXNjcmlwdCcsIGZhbHNlLCB1bmRlZmluZWQgLyogY2FuVXNlTmV0d29yayAqLywgd29ya0Rpcik7XG5cbiAgICAvLyBDaGVjayB0aGF0IHBhY2thZ2UuanNvbiBhbmQgYmluLyBnb3QgY3JlYXRlZCBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnlcbiAgICBleHBlY3QoYXdhaXQgZnMucGF0aEV4aXN0cyhwYXRoLmpvaW4od29ya0RpciwgJ3BhY2thZ2UuanNvbicpKSkudG9CZVRydXRoeSgpO1xuICAgIGV4cGVjdChhd2FpdCBmcy5wYXRoRXhpc3RzKHBhdGguam9pbih3b3JrRGlyLCAnYmluJykpKS50b0JlVHJ1dGh5KCk7XG4gICAgZXhwZWN0KGF3YWl0IGZzLnBhdGhFeGlzdHMocGF0aC5qb2luKHdvcmtEaXIsICcuZ2l0JykpKS50b0JlVHJ1dGh5KCk7XG4gIH0pO1xuXG4gIGNsaVRlc3QoJ2NyZWF0ZSBhIEphdmEgYXBwIHByb2plY3QnLCBhc3luYyAod29ya0RpcikgPT4ge1xuICAgIGF3YWl0IGNsaUluaXQoJ2FwcCcsICdqYXZhJywgZmFsc2UsIHRydWUsIHdvcmtEaXIpO1xuXG4gICAgZXhwZWN0KGF3YWl0IGZzLnBhdGhFeGlzdHMocGF0aC5qb2luKHdvcmtEaXIsICdwb20ueG1sJykpKS50b0JlVHJ1dGh5KCk7XG5cbiAgICBjb25zdCBwb20gPSAoYXdhaXQgZnMucmVhZEZpbGUocGF0aC5qb2luKHdvcmtEaXIsICdwb20ueG1sJyksICd1dGY4JykpLnNwbGl0KC9cXHI/XFxuLyk7XG4gICAgY29uc3QgbWF0Y2hlcyA9IHBvbS5tYXAobGluZSA9PiBsaW5lLm1hdGNoKC9cXDxjb25zdHJ1Y3RzXFwudmVyc2lvblxcPiguKilcXDxcXC9jb25zdHJ1Y3RzXFwudmVyc2lvblxcPi8pKVxuICAgICAgLmZpbHRlcihsID0+IGwpO1xuXG4gICAgZXhwZWN0KG1hdGNoZXMubGVuZ3RoKS50b0VxdWFsKDEpO1xuICAgIG1hdGNoZXMuZm9yRWFjaChtID0+IHtcbiAgICAgIGNvbnN0IHZlcnNpb24gPSBtICYmIG1bMV07XG4gICAgICBleHBlY3QodmVyc2lvbikudG9NYXRjaCgvXFxbMTBcXC5bXFxkXStcXC5bXFxkXSssMTFcXC4wXFwuMFxcKS8pO1xuICAgIH0pO1xuICB9KTtcblxuICBjbGlUZXN0KCdjcmVhdGUgYSAuTkVUIGFwcCBwcm9qZWN0IGluIGNzaGFycCcsIGFzeW5jICh3b3JrRGlyKSA9PiB7XG4gICAgYXdhaXQgY2xpSW5pdCgnYXBwJywgJ2NzaGFycCcsIGZhbHNlLCB0cnVlLCB3b3JrRGlyKTtcblxuICAgIGNvbnN0IGNzcHJvakZpbGUgPSAoYXdhaXQgcmVjdXJzaXZlTGlzdEZpbGVzKHdvcmtEaXIpKS5maWx0ZXIoZiA9PiBmLmVuZHNXaXRoKCcuY3Nwcm9qJykpWzBdO1xuICAgIGNvbnN0IHNsbkZpbGUgPSAoYXdhaXQgcmVjdXJzaXZlTGlzdEZpbGVzKHdvcmtEaXIpKS5maWx0ZXIoZiA9PiBmLmVuZHNXaXRoKCcuc2xuJykpWzBdO1xuICAgIGV4cGVjdChjc3Byb2pGaWxlKS50b0JlRGVmaW5lZCgpO1xuICAgIGV4cGVjdChzbG5GaWxlKS50b0JlRGVmaW5lZCgpO1xuXG4gICAgY29uc3QgY3Nwcm9qID0gKGF3YWl0IGZzLnJlYWRGaWxlKGNzcHJvakZpbGUsICd1dGY4JykpLnNwbGl0KC9cXHI/XFxuLyk7XG4gICAgY29uc3Qgc2xuID0gKGF3YWl0IGZzLnJlYWRGaWxlKHNsbkZpbGUsICd1dGY4JykpLnNwbGl0KC9cXHI/XFxuLyk7XG5cbiAgICBleHBlY3QoY3Nwcm9qKS50b0NvbnRhaW5FcXVhbChleHBlY3Quc3RyaW5nTWF0Y2hpbmcoL1xcPFBhY2thZ2VSZWZlcmVuY2UgSW5jbHVkZT1cIkNvbnN0cnVjdHNcIiBWZXJzaW9uPVwiXFxbMTBcXC4uKiwxMVxcLi4qXFwpXCIvKSk7XG4gICAgZXhwZWN0KHNsbikudG9Db250YWluRXF1YWwoZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9cXFwiQXdzQ2RrVGVzdFthLXpBLVowLTldezZ9XFxcXEF3c0Nka1Rlc3RbYS16QS1aMC05XXs2fS5jc3Byb2pcXFwiLykpO1xuICB9KTtcblxuICBjbGlUZXN0KCdjcmVhdGUgYSAuTkVUIGFwcCBwcm9qZWN0IGluIGZzaGFycCcsIGFzeW5jICh3b3JrRGlyKSA9PiB7XG4gICAgYXdhaXQgY2xpSW5pdCgnYXBwJywgJ2ZzaGFycCcsIGZhbHNlLCB0cnVlLCB3b3JrRGlyKTtcblxuICAgIGNvbnN0IGZzcHJvakZpbGUgPSAoYXdhaXQgcmVjdXJzaXZlTGlzdEZpbGVzKHdvcmtEaXIpKS5maWx0ZXIoZiA9PiBmLmVuZHNXaXRoKCcuZnNwcm9qJykpWzBdO1xuICAgIGNvbnN0IHNsbkZpbGUgPSAoYXdhaXQgcmVjdXJzaXZlTGlzdEZpbGVzKHdvcmtEaXIpKS5maWx0ZXIoZiA9PiBmLmVuZHNXaXRoKCcuc2xuJykpWzBdO1xuICAgIGV4cGVjdChmc3Byb2pGaWxlKS50b0JlRGVmaW5lZCgpO1xuICAgIGV4cGVjdChzbG5GaWxlKS50b0JlRGVmaW5lZCgpO1xuXG4gICAgY29uc3QgZnNwcm9qID0gKGF3YWl0IGZzLnJlYWRGaWxlKGZzcHJvakZpbGUsICd1dGY4JykpLnNwbGl0KC9cXHI/XFxuLyk7XG4gICAgY29uc3Qgc2xuID0gKGF3YWl0IGZzLnJlYWRGaWxlKHNsbkZpbGUsICd1dGY4JykpLnNwbGl0KC9cXHI/XFxuLyk7XG5cbiAgICBleHBlY3QoZnNwcm9qKS50b0NvbnRhaW5FcXVhbChleHBlY3Quc3RyaW5nTWF0Y2hpbmcoL1xcPFBhY2thZ2VSZWZlcmVuY2UgSW5jbHVkZT1cIkNvbnN0cnVjdHNcIiBWZXJzaW9uPVwiXFxbMTBcXC4uKiwxMVxcLi4qXFwpXCIvKSk7XG4gICAgZXhwZWN0KHNsbikudG9Db250YWluRXF1YWwoZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9cXFwiQXdzQ2RrVGVzdFthLXpBLVowLTldezZ9XFxcXEF3c0Nka1Rlc3RbYS16QS1aMC05XXs2fS5mc3Byb2pcXFwiLykpO1xuICB9KTtcblxuICBjbGlUZXN0V2l0aERpclNwYWNlcygnY3NoYXJwIGFwcCB3aXRoIHNwYWNlcycsIGFzeW5jICh3b3JrRGlyKSA9PiB7XG4gICAgYXdhaXQgY2xpSW5pdCgnYXBwJywgJ2NzaGFycCcsIGZhbHNlLCB0cnVlLCB3b3JrRGlyKTtcblxuICAgIGNvbnN0IGNzcHJvakZpbGUgPSAoYXdhaXQgcmVjdXJzaXZlTGlzdEZpbGVzKHdvcmtEaXIpKS5maWx0ZXIoZiA9PiBmLmVuZHNXaXRoKCcuY3Nwcm9qJykpWzBdO1xuICAgIGV4cGVjdChjc3Byb2pGaWxlKS50b0JlRGVmaW5lZCgpO1xuXG4gICAgY29uc3QgY3Nwcm9qID0gKGF3YWl0IGZzLnJlYWRGaWxlKGNzcHJvakZpbGUsICd1dGY4JykpLnNwbGl0KC9cXHI/XFxuLyk7XG5cbiAgICBleHBlY3QoY3Nwcm9qKS50b0NvbnRhaW5FcXVhbChleHBlY3Quc3RyaW5nTWF0Y2hpbmcoL1xcPFBhY2thZ2VSZWZlcmVuY2UgSW5jbHVkZT1cIkNvbnN0cnVjdHNcIiBWZXJzaW9uPVwiXFxbMTBcXC4uKiwxMVxcLi4qXFwpXCIvKSk7XG4gIH0pO1xuXG4gIGNsaVRlc3RXaXRoRGlyU3BhY2VzKCdmc2hhcnAgYXBwIHdpdGggc3BhY2VzJywgYXN5bmMgKHdvcmtEaXIpID0+IHtcbiAgICBhd2FpdCBjbGlJbml0KCdhcHAnLCAnZnNoYXJwJywgZmFsc2UsIHRydWUsIHdvcmtEaXIpO1xuXG4gICAgY29uc3QgZnNwcm9qRmlsZSA9IChhd2FpdCByZWN1cnNpdmVMaXN0RmlsZXMod29ya0RpcikpLmZpbHRlcihmID0+IGYuZW5kc1dpdGgoJy5mc3Byb2onKSlbMF07XG4gICAgZXhwZWN0KGZzcHJvakZpbGUpLnRvQmVEZWZpbmVkKCk7XG5cbiAgICBjb25zdCBmc3Byb2ogPSAoYXdhaXQgZnMucmVhZEZpbGUoZnNwcm9qRmlsZSwgJ3V0ZjgnKSkuc3BsaXQoL1xccj9cXG4vKTtcblxuICAgIGV4cGVjdChmc3Byb2opLnRvQ29udGFpbkVxdWFsKGV4cGVjdC5zdHJpbmdNYXRjaGluZygvXFw8UGFja2FnZVJlZmVyZW5jZSBJbmNsdWRlPVwiQ29uc3RydWN0c1wiIFZlcnNpb249XCJcXFsxMFxcLi4qLDExXFwuLipcXClcIi8pKTtcbiAgfSk7XG5cbiAgY2xpVGVzdCgnY3JlYXRlIGEgUHl0aG9uIGFwcCBwcm9qZWN0JywgYXN5bmMgKHdvcmtEaXIpID0+IHtcbiAgICBhd2FpdCBjbGlJbml0KCdhcHAnLCAncHl0aG9uJywgZmFsc2UsIHRydWUsIHdvcmtEaXIpO1xuXG4gICAgZXhwZWN0KGF3YWl0IGZzLnBhdGhFeGlzdHMocGF0aC5qb2luKHdvcmtEaXIsICdyZXF1aXJlbWVudHMudHh0JykpKS50b0JlVHJ1dGh5KCk7XG4gICAgY29uc3Qgc2V0dXBQeSA9IChhd2FpdCBmcy5yZWFkRmlsZShwYXRoLmpvaW4od29ya0RpciwgJ3JlcXVpcmVtZW50cy50eHQnKSwgJ3V0ZjgnKSkuc3BsaXQoL1xccj9cXG4vKTtcbiAgICAvLyByZXR1cm4gUmVnRXhwTWF0Y2hBcnJheSAocmVzdWx0IG9mIGxpbmUubWF0Y2goKSkgZm9yIGV2ZXJ5IGxpbmVzIHRoYXQgbWF0Y2ggcmUuXG4gICAgY29uc3QgbWF0Y2hlcyA9IHNldHVwUHkubWFwKGxpbmUgPT4gbGluZS5tYXRjaCgvXmNvbnN0cnVjdHMoLiopLykpXG4gICAgICAuZmlsdGVyKGwgPT4gbCk7XG5cbiAgICBleHBlY3QobWF0Y2hlcy5sZW5ndGgpLnRvRXF1YWwoMSk7XG4gICAgbWF0Y2hlcy5mb3JFYWNoKG0gPT4ge1xuICAgICAgY29uc3QgdmVyc2lvbiA9IG0gJiYgbVsxXTtcbiAgICAgIGV4cGVjdCh2ZXJzaW9uKS50b01hdGNoKC8+PTEwXFwuXFxkK1xcLlxcZCw8MTFcXC4wXFwuMC8pO1xuICAgIH0pO1xuICB9KTtcblxuICBjbGlUZXN0KCctLWdlbmVyYXRlLW9ubHkgc2hvdWxkIHNraXAgZ2l0IGluaXQnLCBhc3luYyAod29ya0RpcikgPT4ge1xuICAgIGF3YWl0IGNsaUluaXQoJ2FwcCcsICdqYXZhc2NyaXB0JywgZmFsc2UsIHRydWUsIHdvcmtEaXIpO1xuXG4gICAgLy8gQ2hlY2sgdGhhdCBwYWNrYWdlLmpzb24gYW5kIGJpbi8gZ290IGNyZWF0ZWQgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5XG4gICAgZXhwZWN0KGF3YWl0IGZzLnBhdGhFeGlzdHMocGF0aC5qb2luKHdvcmtEaXIsICdwYWNrYWdlLmpzb24nKSkpLnRvQmVUcnV0aHkoKTtcbiAgICBleHBlY3QoYXdhaXQgZnMucGF0aEV4aXN0cyhwYXRoLmpvaW4od29ya0RpciwgJ2JpbicpKSkudG9CZVRydXRoeSgpO1xuICAgIGV4cGVjdChhd2FpdCBmcy5wYXRoRXhpc3RzKHBhdGguam9pbih3b3JrRGlyLCAnLmdpdCcpKSkudG9CZUZhbHN5KCk7XG4gIH0pO1xuXG4gIGNsaVRlc3QoJ2dpdCBkaXJlY3RvcnkgZG9lcyBub3QgdGhyb3cgb2ZmIHRoZSBpbml0ZXIhJywgYXN5bmMgKHdvcmtEaXIpID0+IHtcbiAgICBmcy5ta2RpclN5bmMocGF0aC5qb2luKHdvcmtEaXIsICcuZ2l0JykpO1xuXG4gICAgYXdhaXQgY2xpSW5pdCgnYXBwJywgJ3R5cGVzY3JpcHQnLCBmYWxzZSwgdW5kZWZpbmVkIC8qIGNhblVzZU5ldHdvcmsgKi8sIHdvcmtEaXIpO1xuXG4gICAgLy8gQ2hlY2sgdGhhdCBwYWNrYWdlLmpzb24gYW5kIGJpbi8gZ290IGNyZWF0ZWQgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5XG4gICAgZXhwZWN0KGF3YWl0IGZzLnBhdGhFeGlzdHMocGF0aC5qb2luKHdvcmtEaXIsICdwYWNrYWdlLmpzb24nKSkpLnRvQmVUcnV0aHkoKTtcbiAgICBleHBlY3QoYXdhaXQgZnMucGF0aEV4aXN0cyhwYXRoLmpvaW4od29ya0RpciwgJ2JpbicpKSkudG9CZVRydXRoeSgpO1xuICB9KTtcblxuICB0ZXN0KCd2ZXJpZnkgXCJmdXR1cmUgZmxhZ3NcIiBhcmUgYWRkZWQgdG8gY2RrLmpzb24nLCBhc3luYyAoKSA9PiB7XG5cbiAgICBmb3IgKGNvbnN0IHRlbXBsIG9mIGF3YWl0IGF2YWlsYWJsZUluaXRUZW1wbGF0ZXMoKSkge1xuICAgICAgZm9yIChjb25zdCBsYW5nIG9mIHRlbXBsLmxhbmd1YWdlcykge1xuICAgICAgICBhd2FpdCB3aXRoVGVtcERpcihhc3luYyB0bXBEaXIgPT4ge1xuICAgICAgICAgIGF3YWl0IGNsaUluaXQodGVtcGwubmFtZSwgbGFuZyxcbiAgICAgICAgICAgIC8qIGNhblVzZU5ldHdvcmsgKi8gZmFsc2UsXG4gICAgICAgICAgICAvKiBnZW5lcmF0ZU9ubHkgKi8gdHJ1ZSxcbiAgICAgICAgICAgIHRtcERpcik7XG5cbiAgICAgICAgICAvLyBvayBpZiB0ZW1wbGF0ZSBkb2Vzbid0IGhhdmUgYSBjZGsuanNvbiBmaWxlIChlLmcuIHRoZSBcImxpYlwiIHRlbXBsYXRlKVxuICAgICAgICAgIGlmICghYXdhaXQgZnMucGF0aEV4aXN0cyhwYXRoLmpvaW4odG1wRGlyLCAnY2RrLmpzb24nKSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBjb25maWcgPSBhd2FpdCBmcy5yZWFkSnNvbihwYXRoLmpvaW4odG1wRGlyLCAnY2RrLmpzb24nKSk7XG4gICAgICAgICAgY29uc3QgY29udGV4dCA9IGNvbmZpZy5jb250ZXh0IHx8IHt9O1xuICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgYWN0dWFsXSBvZiBPYmplY3QuZW50cmllcyhjb250ZXh0KSkge1xuICAgICAgICAgICAgZXhwZWN0KGtleSBpbiBjeGFwaS5GVVRVUkVfRkxBR1MgfHwga2V5IGluIGN4YXBpLk5FV19QUk9KRUNUX0RFRkFVTFRfQ09OVEVYVCkudG9CZVRydXRoeSgpO1xuXG4gICAgICAgICAgICBleHBlY3QoY3hhcGkuRlVUVVJFX0ZMQUdTW2tleV0gPz8gY3hhcGkuTkVXX1BST0pFQ1RfREVGQVVMVF9DT05URVhUW2tleV0pLnRvRXF1YWwoYWN0dWFsKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBhc3NlcnQgdGhhdCBleHBpcmVkIGZ1dHVyZSBmbGFncyBhcmUgbm90IHBhcnQgb2YgdGhlIGNkay5qc29uXG4gICAgICAgICAgT2JqZWN0LmtleXMoY29udGV4dCkuZm9yRWFjaChrID0+IHtcbiAgICAgICAgICAgIGV4cGVjdChjeGFwaS5GVVRVUkVfRkxBR1NfRVhQSVJFRC5pbmNsdWRlcyhrKSkudG9FcXVhbChmYWxzZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgLy8gVGhpcyBpcyBhIGxvdCB0byB0ZXN0LCBhbmQgaXQgY2FuIGJlIHNsb3ctaXNoLCBlc3BlY2lhbGx5IHdoZW4gcmFuIHdpdGggb3RoZXIgdGVzdHMuXG4gIDMwXzAwMCk7XG59KTtcblxudGVzdCgnd2hlbiBubyB2ZXJzaW9uIG51bWJlciBpcyBwcmVzZW50IChlLmcuLCBsb2NhbCBkZXZlbG9wbWVudCksIHRoZSB2MiB0ZW1wbGF0ZXMgYXJlIGNob3NlbiBieSBkZWZhdWx0JywgYXN5bmMgKCkgPT4ge1xuICBleHBlY3QoKGF3YWl0IGF2YWlsYWJsZUluaXRUZW1wbGF0ZXMoKSkubGVuZ3RoKS50b0JlR3JlYXRlclRoYW4oMCk7XG59KTtcblxuZnVuY3Rpb24gY2xpVGVzdChuYW1lOiBzdHJpbmcsIGhhbmRsZXI6IChkaXI6IHN0cmluZykgPT4gdm9pZCB8IFByb21pc2U8YW55Pik6IHZvaWQge1xuICB0ZXN0KG5hbWUsICgpID0+IHdpdGhUZW1wRGlyKGhhbmRsZXIpKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd2l0aFRlbXBEaXIoY2I6IChkaXI6IHN0cmluZykgPT4gdm9pZCB8IFByb21pc2U8YW55Pikge1xuICBjb25zdCB0bXBEaXIgPSBhd2FpdCBmcy5ta2R0ZW1wKHBhdGguam9pbihvcy50bXBkaXIoKSwgJ2F3cy1jZGstdGVzdCcpKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBjYih0bXBEaXIpO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGZzLnJlbW92ZSh0bXBEaXIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNsaVRlc3RXaXRoRGlyU3BhY2VzKG5hbWU6IHN0cmluZywgaGFuZGxlcjogKGRpcjogc3RyaW5nKSA9PiB2b2lkIHwgUHJvbWlzZTxhbnk+KTogdm9pZCB7XG4gIHRlc3QobmFtZSwgKCkgPT4gd2l0aFRlbXBEaXJXaXRoU3BhY2VzKGhhbmRsZXIpKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd2l0aFRlbXBEaXJXaXRoU3BhY2VzKGNiOiAoZGlyOiBzdHJpbmcpID0+IHZvaWQgfCBQcm9taXNlPGFueT4pIHtcbiAgY29uc3QgdG1wRGlyID0gYXdhaXQgZnMubWtkdGVtcChwYXRoLmpvaW4ob3MudG1wZGlyKCksICdhd3MtY2RrLXRlc3Qgd2l0aC1zcGFjZScpKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBjYih0bXBEaXIpO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGZzLnJlbW92ZSh0bXBEaXIpO1xuICB9XG59XG5cbi8qKlxuICogTGlzdCBhbGwgZmlsZXMgdW5kZXJuZWF0aCBkaXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVjdXJzaXZlTGlzdEZpbGVzKHJkaXI6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3QgcmV0ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgYXdhaXQgcmVjdXJzZShyZGlyKTtcbiAgcmV0dXJuIHJldDtcblxuICBhc3luYyBmdW5jdGlvbiByZWN1cnNlKGRpcjogc3RyaW5nKSB7XG4gICAgZm9yIChjb25zdCBuYW1lIG9mIGF3YWl0IGZzLnJlYWRkaXIoZGlyKSkge1xuICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLmpvaW4oZGlyLCBuYW1lKTtcbiAgICAgIGlmICgoYXdhaXQgZnMuc3RhdChmdWxsUGF0aCkpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgYXdhaXQgcmVjdXJzZShmdWxsUGF0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXQucHVzaChmdWxsUGF0aCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
177
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaW5pdC50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3Qix5Q0FBeUM7QUFDekMsK0JBQStCO0FBQy9CLHNDQUE4RDtBQUU5RCxRQUFRLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxFQUFFO0lBQ2xDLE9BQU8sQ0FBQyxxQ0FBcUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDL0QsTUFBTSxjQUFPLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRWxGLHdFQUF3RTtRQUN4RSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUM3RSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN0RSxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sQ0FBQyxpQ0FBaUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDM0QsTUFBTSxjQUFPLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRWxGLHdFQUF3RTtRQUN4RSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUM3RSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsVUFB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SCxLQUFLLFVBQVUsa0JBQWtCLENBQUMsSUFBWTtJQUM1QyxNQUFNLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFDO0lBQ2hDLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BCLE9BQU8sR0FBRyxDQUFDO0lBRVgsS0FBSyxVQUFVLE9BQU8sQ0FBQyxHQUFXO1FBQ2hDLEtBQUssTUFBTSxJQUFJLElBQUksTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3hDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtnQkFDM0MsTUFBTSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDekI7aUJBQU07Z0JBQ0wsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUNwQjtTQUNGO0lBQ0gsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgY3hhcGkgZnJvbSAnQGF3cy1jZGsvY3gtYXBpJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IGF2YWlsYWJsZUluaXRUZW1wbGF0ZXMsIGNsaUluaXQgfSBmcm9tICcuLi9saWIvaW5pdCc7XG5cbmRlc2NyaWJlKCdjb25zdHJ1Y3RzIHZlcnNpb24nLCAoKSA9PiB7XG4gIGNsaVRlc3QoJ2NyZWF0ZSBhIFR5cGVTY3JpcHQgbGlicmFyeSBwcm9qZWN0JywgYXN5bmMgKHdvcmtEaXIpID0+IHtcbiAgICBhd2FpdCBjbGlJbml0KCdsaWInLCAndHlwZXNjcmlwdCcsIGZhbHNlLCB1bmRlZmluZWQgLyogY2FuVXNlTmV0d29yayAqLywgd29ya0Rpcik7XG5cbiAgICAvLyBDaGVjayB0aGF0IHBhY2thZ2UuanNvbiBhbmQgbGliLyBnb3QgY3JlYXRlZCBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnlcbiAgICBleHBlY3QoYXdhaXQgZnMucGF0aEV4aXN0cyhwYXRoLmpvaW4od29ya0RpciwgJ3BhY2thZ2UuanNvbicpKSkudG9CZVRydXRoeSgpO1xuICAgIGV4cGVjdChhd2FpdCBmcy5wYXRoRXhpc3RzKHBhdGguam9pbih3b3JrRGlyLCAnbGliJykpKS50b0JlVHJ1dGh5KCk7XG4gIH0pO1xuXG4gIGNsaVRlc3QoJ2NyZWF0ZSBhIFR5cGVTY3JpcHQgYXBwIHByb2plY3QnLCBhc3luYyAod29ya0RpcikgPT4ge1xuICAgIGF3YWl0IGNsaUluaXQoJ2FwcCcsICd0eXBlc2NyaXB0JywgZmFsc2UsIHVuZGVmaW5lZCAvKiBjYW5Vc2VOZXR3b3JrICovLCB3b3JrRGlyKTtcblxuICAgIC8vIENoZWNrIHRoYXQgcGFja2FnZS5qc29uIGFuZCBiaW4vIGdvdCBjcmVhdGVkIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeVxuICAgIGV4cGVjdChhd2FpdCBmcy5wYXRoRXhpc3RzKHBhdGguam9pbih3b3JrRGlyLCAncGFja2FnZS5qc29uJykpKS50b0JlVHJ1dGh5KCk7XG4gICAgZXhwZWN0KGF3YWl0IGZzLnBhdGhFeGlzdHMocGF0aC5qb2luKHdvcmtEaXIsICdiaW4nKSkpLnRvQmVUcnV0aHkoKTtcbiAgfSk7XG5cbiAgY2xpVGVzdCgnY3JlYXRlIGEgSmF2YVNjcmlwdCBhcHAgcHJvamVjdCcsIGFzeW5jICh3b3JrRGlyKSA9PiB7XG4gICAgYXdhaXQgY2xpSW5pdCgnYXBwJywgJ2phdmFzY3JpcHQnLCBmYWxzZSwgdW5kZWZpbmVkIC8qIGNhblVzZU5ldHdvcmsgKi8sIHdvcmtEaXIpO1xuXG4gICAgLy8gQ2hlY2sgdGhhdCBwYWNrYWdlLmpzb24gYW5kIGJpbi8gZ290IGNyZWF0ZWQgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5XG4gICAgZXhwZWN0KGF3YWl0IGZzLnBhdGhFeGlzdHMocGF0aC5qb2luKHdvcmtEaXIsICdwYWNrYWdlLmpzb24nKSkpLnRvQmVUcnV0aHkoKTtcbiAgICBleHBlY3QoYXdhaXQgZnMucGF0aEV4aXN0cyhwYXRoLmpvaW4od29ya0RpciwgJ2JpbicpKSkudG9CZVRydXRoeSgpO1xuICAgIGV4cGVjdChhd2FpdCBmcy5wYXRoRXhpc3RzKHBhdGguam9pbih3b3JrRGlyLCAnLmdpdCcpKSkudG9CZVRydXRoeSgpO1xuICB9KTtcblxuICBjbGlUZXN0KCdjcmVhdGUgYSBKYXZhIGFwcCBwcm9qZWN0JywgYXN5bmMgKHdvcmtEaXIpID0+IHtcbiAgICBhd2FpdCBjbGlJbml0KCdhcHAnLCAnamF2YScsIGZhbHNlLCB0cnVlLCB3b3JrRGlyKTtcblxuICAgIGV4cGVjdChhd2FpdCBmcy5wYXRoRXhpc3RzKHBhdGguam9pbih3b3JrRGlyLCAncG9tLnhtbCcpKSkudG9CZVRydXRoeSgpO1xuXG4gICAgY29uc3QgcG9tID0gKGF3YWl0IGZzLnJlYWRGaWxlKHBhdGguam9pbih3b3JrRGlyLCAncG9tLnhtbCcpLCAndXRmOCcpKS5zcGxpdCgvXFxyP1xcbi8pO1xuICAgIGNvbnN0IG1hdGNoZXMgPSBwb20ubWFwKGxpbmUgPT4gbGluZS5tYXRjaCgvXFw8Y29uc3RydWN0c1xcLnZlcnNpb25cXD4oLiopXFw8XFwvY29uc3RydWN0c1xcLnZlcnNpb25cXD4vKSlcbiAgICAgIC5maWx0ZXIobCA9PiBsKTtcblxuICAgIGV4cGVjdChtYXRjaGVzLmxlbmd0aCkudG9FcXVhbCgxKTtcbiAgICBtYXRjaGVzLmZvckVhY2gobSA9PiB7XG4gICAgICBjb25zdCB2ZXJzaW9uID0gbSAmJiBtWzFdO1xuICAgICAgZXhwZWN0KHZlcnNpb24pLnRvTWF0Y2goL1xcWzEwXFwuW1xcZF0rXFwuW1xcZF0rLDExXFwuMFxcLjBcXCkvKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgY2xpVGVzdCgnY3JlYXRlIGEgLk5FVCBhcHAgcHJvamVjdCBpbiBjc2hhcnAnLCBhc3luYyAod29ya0RpcikgPT4ge1xuICAgIGF3YWl0IGNsaUluaXQoJ2FwcCcsICdjc2hhcnAnLCBmYWxzZSwgdHJ1ZSwgd29ya0Rpcik7XG5cbiAgICBjb25zdCBjc3Byb2pGaWxlID0gKGF3YWl0IHJlY3Vyc2l2ZUxpc3RGaWxlcyh3b3JrRGlyKSkuZmlsdGVyKGYgPT4gZi5lbmRzV2l0aCgnLmNzcHJvaicpKVswXTtcbiAgICBjb25zdCBzbG5GaWxlID0gKGF3YWl0IHJlY3Vyc2l2ZUxpc3RGaWxlcyh3b3JrRGlyKSkuZmlsdGVyKGYgPT4gZi5lbmRzV2l0aCgnLnNsbicpKVswXTtcbiAgICBleHBlY3QoY3Nwcm9qRmlsZSkudG9CZURlZmluZWQoKTtcbiAgICBleHBlY3Qoc2xuRmlsZSkudG9CZURlZmluZWQoKTtcblxuICAgIGNvbnN0IGNzcHJvaiA9IChhd2FpdCBmcy5yZWFkRmlsZShjc3Byb2pGaWxlLCAndXRmOCcpKS5zcGxpdCgvXFxyP1xcbi8pO1xuICAgIGNvbnN0IHNsbiA9IChhd2FpdCBmcy5yZWFkRmlsZShzbG5GaWxlLCAndXRmOCcpKS5zcGxpdCgvXFxyP1xcbi8pO1xuXG4gICAgZXhwZWN0KGNzcHJvaikudG9Db250YWluRXF1YWwoZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9cXDxQYWNrYWdlUmVmZXJlbmNlIEluY2x1ZGU9XCJDb25zdHJ1Y3RzXCIgVmVyc2lvbj1cIlxcWzEwXFwuLiosMTFcXC4uKlxcKVwiLykpO1xuICAgIGV4cGVjdChzbG4pLnRvQ29udGFpbkVxdWFsKGV4cGVjdC5zdHJpbmdNYXRjaGluZygvXFxcIkF3c0Nka1Rlc3RbYS16QS1aMC05XXs2fVxcXFxBd3NDZGtUZXN0W2EtekEtWjAtOV17Nn0uY3Nwcm9qXFxcIi8pKTtcbiAgfSk7XG5cbiAgY2xpVGVzdCgnY3JlYXRlIGEgLk5FVCBhcHAgcHJvamVjdCBpbiBmc2hhcnAnLCBhc3luYyAod29ya0RpcikgPT4ge1xuICAgIGF3YWl0IGNsaUluaXQoJ2FwcCcsICdmc2hhcnAnLCBmYWxzZSwgdHJ1ZSwgd29ya0Rpcik7XG5cbiAgICBjb25zdCBmc3Byb2pGaWxlID0gKGF3YWl0IHJlY3Vyc2l2ZUxpc3RGaWxlcyh3b3JrRGlyKSkuZmlsdGVyKGYgPT4gZi5lbmRzV2l0aCgnLmZzcHJvaicpKVswXTtcbiAgICBjb25zdCBzbG5GaWxlID0gKGF3YWl0IHJlY3Vyc2l2ZUxpc3RGaWxlcyh3b3JrRGlyKSkuZmlsdGVyKGYgPT4gZi5lbmRzV2l0aCgnLnNsbicpKVswXTtcbiAgICBleHBlY3QoZnNwcm9qRmlsZSkudG9CZURlZmluZWQoKTtcbiAgICBleHBlY3Qoc2xuRmlsZSkudG9CZURlZmluZWQoKTtcblxuICAgIGNvbnN0IGZzcHJvaiA9IChhd2FpdCBmcy5yZWFkRmlsZShmc3Byb2pGaWxlLCAndXRmOCcpKS5zcGxpdCgvXFxyP1xcbi8pO1xuICAgIGNvbnN0IHNsbiA9IChhd2FpdCBmcy5yZWFkRmlsZShzbG5GaWxlLCAndXRmOCcpKS5zcGxpdCgvXFxyP1xcbi8pO1xuXG4gICAgZXhwZWN0KGZzcHJvaikudG9Db250YWluRXF1YWwoZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9cXDxQYWNrYWdlUmVmZXJlbmNlIEluY2x1ZGU9XCJDb25zdHJ1Y3RzXCIgVmVyc2lvbj1cIlxcWzEwXFwuLiosMTFcXC4uKlxcKVwiLykpO1xuICAgIGV4cGVjdChzbG4pLnRvQ29udGFpbkVxdWFsKGV4cGVjdC5zdHJpbmdNYXRjaGluZygvXFxcIkF3c0Nka1Rlc3RbYS16QS1aMC05XXs2fVxcXFxBd3NDZGtUZXN0W2EtekEtWjAtOV17Nn0uZnNwcm9qXFxcIi8pKTtcbiAgfSk7XG5cbiAgY2xpVGVzdFdpdGhEaXJTcGFjZXMoJ2NzaGFycCBhcHAgd2l0aCBzcGFjZXMnLCBhc3luYyAod29ya0RpcikgPT4ge1xuICAgIGF3YWl0IGNsaUluaXQoJ2FwcCcsICdjc2hhcnAnLCBmYWxzZSwgdHJ1ZSwgd29ya0Rpcik7XG5cbiAgICBjb25zdCBjc3Byb2pGaWxlID0gKGF3YWl0IHJlY3Vyc2l2ZUxpc3RGaWxlcyh3b3JrRGlyKSkuZmlsdGVyKGYgPT4gZi5lbmRzV2l0aCgnLmNzcHJvaicpKVswXTtcbiAgICBleHBlY3QoY3Nwcm9qRmlsZSkudG9CZURlZmluZWQoKTtcblxuICAgIGNvbnN0IGNzcHJvaiA9IChhd2FpdCBmcy5yZWFkRmlsZShjc3Byb2pGaWxlLCAndXRmOCcpKS5zcGxpdCgvXFxyP1xcbi8pO1xuXG4gICAgZXhwZWN0KGNzcHJvaikudG9Db250YWluRXF1YWwoZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9cXDxQYWNrYWdlUmVmZXJlbmNlIEluY2x1ZGU9XCJDb25zdHJ1Y3RzXCIgVmVyc2lvbj1cIlxcWzEwXFwuLiosMTFcXC4uKlxcKVwiLykpO1xuICB9KTtcblxuICBjbGlUZXN0V2l0aERpclNwYWNlcygnZnNoYXJwIGFwcCB3aXRoIHNwYWNlcycsIGFzeW5jICh3b3JrRGlyKSA9PiB7XG4gICAgYXdhaXQgY2xpSW5pdCgnYXBwJywgJ2ZzaGFycCcsIGZhbHNlLCB0cnVlLCB3b3JrRGlyKTtcblxuICAgIGNvbnN0IGZzcHJvakZpbGUgPSAoYXdhaXQgcmVjdXJzaXZlTGlzdEZpbGVzKHdvcmtEaXIpKS5maWx0ZXIoZiA9PiBmLmVuZHNXaXRoKCcuZnNwcm9qJykpWzBdO1xuICAgIGV4cGVjdChmc3Byb2pGaWxlKS50b0JlRGVmaW5lZCgpO1xuXG4gICAgY29uc3QgZnNwcm9qID0gKGF3YWl0IGZzLnJlYWRGaWxlKGZzcHJvakZpbGUsICd1dGY4JykpLnNwbGl0KC9cXHI/XFxuLyk7XG5cbiAgICBleHBlY3QoZnNwcm9qKS50b0NvbnRhaW5FcXVhbChleHBlY3Quc3RyaW5nTWF0Y2hpbmcoL1xcPFBhY2thZ2VSZWZlcmVuY2UgSW5jbHVkZT1cIkNvbnN0cnVjdHNcIiBWZXJzaW9uPVwiXFxbMTBcXC4uKiwxMVxcLi4qXFwpXCIvKSk7XG4gIH0pO1xuXG4gIGNsaVRlc3QoJ2NyZWF0ZSBhIFB5dGhvbiBhcHAgcHJvamVjdCcsIGFzeW5jICh3b3JrRGlyKSA9PiB7XG4gICAgYXdhaXQgY2xpSW5pdCgnYXBwJywgJ3B5dGhvbicsIGZhbHNlLCB0cnVlLCB3b3JrRGlyKTtcblxuICAgIGV4cGVjdChhd2FpdCBmcy5wYXRoRXhpc3RzKHBhdGguam9pbih3b3JrRGlyLCAncmVxdWlyZW1lbnRzLnR4dCcpKSkudG9CZVRydXRoeSgpO1xuICAgIGNvbnN0IHNldHVwUHkgPSAoYXdhaXQgZnMucmVhZEZpbGUocGF0aC5qb2luKHdvcmtEaXIsICdyZXF1aXJlbWVudHMudHh0JyksICd1dGY4JykpLnNwbGl0KC9cXHI/XFxuLyk7XG4gICAgLy8gcmV0dXJuIFJlZ0V4cE1hdGNoQXJyYXkgKHJlc3VsdCBvZiBsaW5lLm1hdGNoKCkpIGZvciBldmVyeSBsaW5lcyB0aGF0IG1hdGNoIHJlLlxuICAgIGNvbnN0IG1hdGNoZXMgPSBzZXR1cFB5Lm1hcChsaW5lID0+IGxpbmUubWF0Y2goL15jb25zdHJ1Y3RzKC4qKS8pKVxuICAgICAgLmZpbHRlcihsID0+IGwpO1xuXG4gICAgZXhwZWN0KG1hdGNoZXMubGVuZ3RoKS50b0VxdWFsKDEpO1xuICAgIG1hdGNoZXMuZm9yRWFjaChtID0+IHtcbiAgICAgIGNvbnN0IHZlcnNpb24gPSBtICYmIG1bMV07XG4gICAgICBleHBlY3QodmVyc2lvbikudG9NYXRjaCgvPj0xMFxcLlxcZCtcXC5cXGQsPDExXFwuMFxcLjAvKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgY2xpVGVzdCgnLS1nZW5lcmF0ZS1vbmx5IHNob3VsZCBza2lwIGdpdCBpbml0JywgYXN5bmMgKHdvcmtEaXIpID0+IHtcbiAgICBhd2FpdCBjbGlJbml0KCdhcHAnLCAnamF2YXNjcmlwdCcsIGZhbHNlLCB0cnVlLCB3b3JrRGlyKTtcblxuICAgIC8vIENoZWNrIHRoYXQgcGFja2FnZS5qc29uIGFuZCBiaW4vIGdvdCBjcmVhdGVkIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeVxuICAgIGV4cGVjdChhd2FpdCBmcy5wYXRoRXhpc3RzKHBhdGguam9pbih3b3JrRGlyLCAncGFja2FnZS5qc29uJykpKS50b0JlVHJ1dGh5KCk7XG4gICAgZXhwZWN0KGF3YWl0IGZzLnBhdGhFeGlzdHMocGF0aC5qb2luKHdvcmtEaXIsICdiaW4nKSkpLnRvQmVUcnV0aHkoKTtcbiAgICBleHBlY3QoYXdhaXQgZnMucGF0aEV4aXN0cyhwYXRoLmpvaW4od29ya0RpciwgJy5naXQnKSkpLnRvQmVGYWxzeSgpO1xuICB9KTtcblxuICBjbGlUZXN0KCdnaXQgZGlyZWN0b3J5IGRvZXMgbm90IHRocm93IG9mZiB0aGUgaW5pdGVyIScsIGFzeW5jICh3b3JrRGlyKSA9PiB7XG4gICAgZnMubWtkaXJTeW5jKHBhdGguam9pbih3b3JrRGlyLCAnLmdpdCcpKTtcblxuICAgIGF3YWl0IGNsaUluaXQoJ2FwcCcsICd0eXBlc2NyaXB0JywgZmFsc2UsIHVuZGVmaW5lZCAvKiBjYW5Vc2VOZXR3b3JrICovLCB3b3JrRGlyKTtcblxuICAgIC8vIENoZWNrIHRoYXQgcGFja2FnZS5qc29uIGFuZCBiaW4vIGdvdCBjcmVhdGVkIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeVxuICAgIGV4cGVjdChhd2FpdCBmcy5wYXRoRXhpc3RzKHBhdGguam9pbih3b3JrRGlyLCAncGFja2FnZS5qc29uJykpKS50b0JlVHJ1dGh5KCk7XG4gICAgZXhwZWN0KGF3YWl0IGZzLnBhdGhFeGlzdHMocGF0aC5qb2luKHdvcmtEaXIsICdiaW4nKSkpLnRvQmVUcnV0aHkoKTtcbiAgfSk7XG5cbiAgdGVzdCgndmVyaWZ5IFwiZnV0dXJlIGZsYWdzXCIgYXJlIGFkZGVkIHRvIGNkay5qc29uJywgYXN5bmMgKCkgPT4ge1xuXG4gICAgZm9yIChjb25zdCB0ZW1wbCBvZiBhd2FpdCBhdmFpbGFibGVJbml0VGVtcGxhdGVzKCkpIHtcbiAgICAgIGZvciAoY29uc3QgbGFuZyBvZiB0ZW1wbC5sYW5ndWFnZXMpIHtcbiAgICAgICAgYXdhaXQgd2l0aFRlbXBEaXIoYXN5bmMgdG1wRGlyID0+IHtcbiAgICAgICAgICBhd2FpdCBjbGlJbml0KHRlbXBsLm5hbWUsIGxhbmcsXG4gICAgICAgICAgICAvKiBjYW5Vc2VOZXR3b3JrICovIGZhbHNlLFxuICAgICAgICAgICAgLyogZ2VuZXJhdGVPbmx5ICovIHRydWUsXG4gICAgICAgICAgICB0bXBEaXIpO1xuXG4gICAgICAgICAgLy8gb2sgaWYgdGVtcGxhdGUgZG9lc24ndCBoYXZlIGEgY2RrLmpzb24gZmlsZSAoZS5nLiB0aGUgXCJsaWJcIiB0ZW1wbGF0ZSlcbiAgICAgICAgICBpZiAoIWF3YWl0IGZzLnBhdGhFeGlzdHMocGF0aC5qb2luKHRtcERpciwgJ2Nkay5qc29uJykpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgY29uZmlnID0gYXdhaXQgZnMucmVhZEpzb24ocGF0aC5qb2luKHRtcERpciwgJ2Nkay5qc29uJykpO1xuICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBjb25maWcuY29udGV4dCB8fCB7fTtcbiAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIGFjdHVhbF0gb2YgT2JqZWN0LmVudHJpZXMoY29udGV4dCkpIHtcbiAgICAgICAgICAgIGV4cGVjdChrZXkgaW4gY3hhcGkuTkVXX1BST0pFQ1RfQ09OVEVYVCkudG9CZVRydXRoeSgpO1xuICAgICAgICAgICAgZXhwZWN0KGN4YXBpLk5FV19QUk9KRUNUX0NPTlRFWFRba2V5XSkudG9FcXVhbChhY3R1YWwpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGFzc2VydCB0aGF0IGV4cGlyZWQgZnV0dXJlIGZsYWdzIGFyZSBub3QgcGFydCBvZiB0aGUgY2RrLmpzb25cbiAgICAgICAgICBPYmplY3Qua2V5cyhjb250ZXh0KS5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgZXhwZWN0KGN4YXBpLkNVUlJFTlRfVkVSU0lPTl9FWFBJUkVEX0ZMQUdTLmluY2x1ZGVzKGspKS50b0VxdWFsKGZhbHNlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICAvLyBUaGlzIGlzIGEgbG90IHRvIHRlc3QsIGFuZCBpdCBjYW4gYmUgc2xvdy1pc2gsIGVzcGVjaWFsbHkgd2hlbiByYW4gd2l0aCBvdGhlciB0ZXN0cy5cbiAgMzBfMDAwKTtcbn0pO1xuXG50ZXN0KCd3aGVuIG5vIHZlcnNpb24gbnVtYmVyIGlzIHByZXNlbnQgKGUuZy4sIGxvY2FsIGRldmVsb3BtZW50KSwgdGhlIHYyIHRlbXBsYXRlcyBhcmUgY2hvc2VuIGJ5IGRlZmF1bHQnLCBhc3luYyAoKSA9PiB7XG4gIGV4cGVjdCgoYXdhaXQgYXZhaWxhYmxlSW5pdFRlbXBsYXRlcygpKS5sZW5ndGgpLnRvQmVHcmVhdGVyVGhhbigwKTtcbn0pO1xuXG5mdW5jdGlvbiBjbGlUZXN0KG5hbWU6IHN0cmluZywgaGFuZGxlcjogKGRpcjogc3RyaW5nKSA9PiB2b2lkIHwgUHJvbWlzZTxhbnk+KTogdm9pZCB7XG4gIHRlc3QobmFtZSwgKCkgPT4gd2l0aFRlbXBEaXIoaGFuZGxlcikpO1xufVxuXG5hc3luYyBmdW5jdGlvbiB3aXRoVGVtcERpcihjYjogKGRpcjogc3RyaW5nKSA9PiB2b2lkIHwgUHJvbWlzZTxhbnk+KSB7XG4gIGNvbnN0IHRtcERpciA9IGF3YWl0IGZzLm1rZHRlbXAocGF0aC5qb2luKG9zLnRtcGRpcigpLCAnYXdzLWNkay10ZXN0JykpO1xuICB0cnkge1xuICAgIGF3YWl0IGNiKHRtcERpcik7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgZnMucmVtb3ZlKHRtcERpcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2xpVGVzdFdpdGhEaXJTcGFjZXMobmFtZTogc3RyaW5nLCBoYW5kbGVyOiAoZGlyOiBzdHJpbmcpID0+IHZvaWQgfCBQcm9taXNlPGFueT4pOiB2b2lkIHtcbiAgdGVzdChuYW1lLCAoKSA9PiB3aXRoVGVtcERpcldpdGhTcGFjZXMoaGFuZGxlcikpO1xufVxuXG5hc3luYyBmdW5jdGlvbiB3aXRoVGVtcERpcldpdGhTcGFjZXMoY2I6IChkaXI6IHN0cmluZykgPT4gdm9pZCB8IFByb21pc2U8YW55Pikge1xuICBjb25zdCB0bXBEaXIgPSBhd2FpdCBmcy5ta2R0ZW1wKHBhdGguam9pbihvcy50bXBkaXIoKSwgJ2F3cy1jZGstdGVzdCB3aXRoLXNwYWNlJykpO1xuICB0cnkge1xuICAgIGF3YWl0IGNiKHRtcERpcik7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgZnMucmVtb3ZlKHRtcERpcik7XG4gIH1cbn1cblxuLyoqXG4gKiBMaXN0IGFsbCBmaWxlcyB1bmRlcm5lYXRoIGRpclxuICovXG5hc3luYyBmdW5jdGlvbiByZWN1cnNpdmVMaXN0RmlsZXMocmRpcjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCByZXQgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICBhd2FpdCByZWN1cnNlKHJkaXIpO1xuICByZXR1cm4gcmV0O1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHJlY3Vyc2UoZGlyOiBzdHJpbmcpIHtcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgYXdhaXQgZnMucmVhZGRpcihkaXIpKSB7XG4gICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbihkaXIsIG5hbWUpO1xuICAgICAgaWYgKChhd2FpdCBmcy5zdGF0KGZ1bGxQYXRoKSkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICBhd2FpdCByZWN1cnNlKGZ1bGxQYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldC5wdXNoKGZ1bGxQYXRoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==