aws-cdk 2.177.0 → 2.178.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.
Files changed (42) hide show
  1. package/THIRD_PARTY_LICENSES +5518 -181
  2. package/build-info.json +2 -2
  3. package/db.json.gz +0 -0
  4. package/lib/api/aws-auth/sdk-logger.d.ts +4 -0
  5. package/lib/api/aws-auth/sdk-logger.js +18 -7
  6. package/lib/api/aws-auth/sdk-provider.js +4 -3
  7. package/lib/api/aws-auth/sdk.d.ts +1 -0
  8. package/lib/api/aws-auth/sdk.js +4 -3
  9. package/lib/api/aws-auth/tracing.d.ts +11 -0
  10. package/lib/api/aws-auth/tracing.js +60 -0
  11. package/lib/api/deployments/asset-publishing.js +7 -1
  12. package/lib/cli/cdk-toolkit.d.ts +6 -0
  13. package/lib/cli/cdk-toolkit.js +11 -10
  14. package/lib/cli/cli.js +10 -5
  15. package/lib/cli/parse-command-line-arguments.js +11 -15
  16. package/lib/cli/user-input.d.ts +4 -4
  17. package/lib/cli/user-input.js +1 -1
  18. package/lib/commands/context.js +2 -2
  19. package/lib/index.js +204 -158
  20. package/lib/index_bg.wasm +0 -0
  21. package/lib/init-templates/.init-version.json +1 -1
  22. package/lib/init-templates/.recommended-feature-flags.json +2 -1
  23. package/lib/legacy-exports-source.d.ts +1 -1
  24. package/lib/legacy-exports-source.js +3 -3
  25. package/lib/logging.d.ts +6 -13
  26. package/lib/logging.js +25 -70
  27. package/lib/toolkit/cli-io-host.d.ts +16 -12
  28. package/lib/toolkit/cli-io-host.js +127 -30
  29. package/package.json +10 -10
  30. package/test/_helpers/prompts.d.ts +11 -0
  31. package/test/_helpers/prompts.js +22 -0
  32. package/test/api/aws-auth/sdk-logger.test.js +13 -11
  33. package/test/api/logs/logging.test.js +4 -54
  34. package/test/cli/cdk-toolkit.test.js +7 -7
  35. package/test/cli/cli-arguments.test.js +4 -4
  36. package/test/cli/cli.test.js +2 -2
  37. package/test/cli/user-config.test.js +28 -1
  38. package/test/toolkit/cli-io-host-corked.test.d.ts +1 -0
  39. package/test/toolkit/cli-io-host-corked.test.js +73 -0
  40. package/test/toolkit/cli-io-host.test.js +164 -60
  41. package/lib/util/tracing.d.ts +0 -9
  42. package/lib/util/tracing.js +0 -58
@@ -28,12 +28,12 @@ describe('logging', () => {
28
28
  jest.restoreAllMocks();
29
29
  });
30
30
  describe('stream selection', () => {
31
- test('data() always writes to stdout with both styles', () => {
31
+ test('result() always writes to stdout with both styles', () => {
32
32
  // String style
33
- (0, logging_1.data)('test message');
33
+ (0, logging_1.result)('test message');
34
34
  expect(mockStdout).toHaveBeenCalledWith('test message\n');
35
35
  // Object style
36
- (0, logging_1.data)({ message: 'test message 2' });
36
+ (0, logging_1.result)({ message: 'test message 2' });
37
37
  expect(mockStdout).toHaveBeenCalledWith('test message 2\n');
38
38
  expect(mockStderr).not.toHaveBeenCalled();
39
39
  });
@@ -197,56 +197,6 @@ describe('logging', () => {
197
197
  // Would need to modify the code to expose the actual message code for verification
198
198
  });
199
199
  });
200
- describe('corked logging', () => {
201
- test('buffers messages when corked', async () => {
202
- await (0, logging_1.withCorkedLogging)(async () => {
203
- (0, logging_1.info)('message 1');
204
- (0, logging_1.info)({ message: 'message 2' });
205
- expect(mockStderr).not.toHaveBeenCalled();
206
- });
207
- expect(mockStderr).toHaveBeenCalledWith('message 1\n');
208
- expect(mockStderr).toHaveBeenCalledWith('message 2\n');
209
- });
210
- test('handles nested corking correctly', async () => {
211
- await (0, logging_1.withCorkedLogging)(async () => {
212
- (0, logging_1.info)('outer 1');
213
- await (0, logging_1.withCorkedLogging)(async () => {
214
- (0, logging_1.info)({ message: 'inner' });
215
- });
216
- (0, logging_1.info)({ message: 'outer 2' });
217
- expect(mockStderr).not.toHaveBeenCalled();
218
- });
219
- expect(mockStderr).toHaveBeenCalledTimes(3);
220
- expect(mockStderr).toHaveBeenCalledWith('outer 1\n');
221
- expect(mockStderr).toHaveBeenCalledWith('inner\n');
222
- expect(mockStderr).toHaveBeenCalledWith('outer 2\n');
223
- });
224
- test('handles errors in corked block while preserving buffer', async () => {
225
- await expect((0, logging_1.withCorkedLogging)(async () => {
226
- (0, logging_1.info)('message 1');
227
- throw new Error('test error');
228
- })).rejects.toThrow('test error');
229
- // The buffered message should still be printed even if the block throws
230
- expect(mockStderr).toHaveBeenCalledWith('message 1\n');
231
- });
232
- test('maintains correct order with mixed log levels in corked block', async () => {
233
- // Set threshold to debug to allow debug messages
234
- ioHost.logLevel = 'debug';
235
- await (0, logging_1.withCorkedLogging)(async () => {
236
- (0, logging_1.error)('error message');
237
- (0, logging_1.warning)('warning message');
238
- (0, logging_1.success)('success message');
239
- (0, logging_1.debug)('debug message');
240
- });
241
- const calls = mockStderr.mock.calls.map(call => call[0]);
242
- expect(calls).toEqual([
243
- 'error message\n',
244
- 'warning message\n',
245
- 'success message\n',
246
- expect.stringMatching(/^\[\d{2}:\d{2}:\d{2}\] debug message\n$/),
247
- ]);
248
- });
249
- });
250
200
  describe('CI mode behavior', () => {
251
201
  test('correctly switches between stdout and stderr based on CI mode', () => {
252
202
  ioHost.isCI = true;
@@ -266,4 +216,4 @@ describe('logging', () => {
266
216
  });
267
217
  });
268
218
  });
269
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2luZy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibG9nZ2luZy50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsa0RBQXVIO0FBQ3ZILGtFQUE2RDtBQUU3RCxRQUFRLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRTtJQUN2QixNQUFNLE1BQU0sR0FBRyx1QkFBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDNUMsSUFBSSxVQUFxQixDQUFDO0lBQzFCLElBQUksVUFBcUIsQ0FBQztJQUUxQixNQUFNLFNBQVMsR0FBRyxDQUFDLEdBQVcsRUFBVSxFQUFFO1FBQ3hDLE1BQU0sU0FBUyxHQUFHLDBCQUEwQixDQUFDO1FBQzdDLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDcEMsQ0FBQyxDQUFDO0lBRUYsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLE1BQU0sQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBRXBCLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDdkIsVUFBVSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUV2QixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUNwRSxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDeEMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQ3BFLFVB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QUMsQ0FBQztZQUV6RCxNQUFNLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztZQUNwQixJQUFBLGlCQUFPLEVBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUM3QixJQUFBLGlCQUFPLEVBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUM3QixJQUFBLGVBQUssRUFBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBRXpCLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQy9ELE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQy9ELE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQy9ELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRhdGEsIHN1Y2Nlc3MsIGhpZ2hsaWdodCwgZXJyb3IsIHdhcm5pbmcsIGluZm8sIGRlYnVnLCB0cmFjZSwgd2l0aENvcmtlZExvZ2dpbmcgfSBmcm9tICcuLi8uLi8uLi9saWIvbG9nZ2luZyc7XG5pbXBvcnQgeyBDbGlJb0hvc3QgfSBmcm9tICcuLi8uLi8uLi9saWIvdG9vbGtpdC9jbGktaW8taG9zdCc7XG5cbmRlc2NyaWJlKCdsb2dnaW5nJywgKCkgPT4ge1xuICBjb25zdCBpb0hvc3QgPSBDbGlJb0hvc3QuaW5zdGFuY2Uoe30sIHRydWUpO1xuICBsZXQgbW9ja1N0ZG91dDogamVzdC5Nb2NrO1xuICBsZXQgbW9ja1N0ZGVycjogamVzdC5Nb2NrO1xuXG4gIGNvbnN0IHN0cmlwQW5zaSA9IChzdHI6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgY29uc3QgYW5zaVJlZ2V4ID0gL1xcdTAwMWJcXFtbMC05O10qW2EtekEtWl0vZztcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoYW5zaVJlZ2V4LCAnJyk7XG4gIH07XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgaW9Ib3N0LmxvZ0xldmVsID0gJ2luZm8nO1xuICAgIGlvSG9zdC5pc0NJID0gZmFsc2U7XG5cbiAgICBtb2NrU3Rkb3V0ID0gamVzdC5mbigpO1xuICAgIG1vY2tTdGRlcnIgPSBqZXN0LmZuKCk7XG5cbiAgICBqZXN0LnNweU9uKHByb2Nlc3Muc3Rkb3V0LCAnd3JpdGUnKS5tb2NrSW1wbGVtZW50YXRpb24oKGNodW5rOiBhbnkpID0+IHtcbiAgICAgIG1vY2tTdGRvdXQoc3RyaXBBbnNpKGNodW5rLnRvU3RyaW5nKCkpKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuXG4gICAgamVzdC5zcHlPbihwcm9jZXNzLnN0ZGVyciwgJ3dyaXRlJykubW9ja0ltcGxlbWVudGF0aW9uKChjaHVuazogYW55KSA9PiB7XG4gICAgICBtb2NrU3RkZXJyKHN0cmlwQW5zaShjaHVuay50b1N0cmluZygpKSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBqZXN0LnJlc3RvcmVBbGxNb2NrcygpO1xuICB9KTtcblxuICBkZXNjcmliZSgnc3RyZWFtIHNlbGVjdGlvbicsICgpID0+IHtcbiAgICB0ZXN0KCdkYXRhKCkgYWx3YXlzIHdyaXRlcyB0byBzdGRvdXQgd2l0aCBib3RoIHN0eWxlcycsICgpID0+IHtcbiAgICAgIC8vIFN0cmluZyBzdHlsZVxuICAgICAgZGF0YSgndGVzdCBtZXNzYWdlJyk7XG4gICAgICBleHBlY3QobW9ja1N0ZG91dCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ3Rlc3QgbWVzc2FnZVxcbicpO1xuXG4gICAgICAvLyBPYmplY3Qgc3R5bGVcbiAgICAgIGRhdGEoeyBtZXNzYWdlOiAndGVzdCBtZXNzYWdlIDInIH0pO1xuICAgICAgZXhwZWN0KG1vY2tTdGRvdXQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCd0ZXN0IG1lc3NhZ2UgMlxcbicpO1xuICAgICAgZXhwZWN0KG1vY2tTdGRlcnIpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdlcnJvcigpIGFsd2F5cyB3cml0ZXMgdG8gc3RkZXJyIHdpdGggYm90aCBzdHlsZXMnLCAoKSA9PiB7XG4gICAgICAvLyBTdHJpbmcgc3R5bGVcbiAgICAgIGVycm9yKCd0ZXN0IGVycm9yJyk7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ3Rlc3QgZXJyb3JcXG4nKTtcblxuICAgICAgLy8gT2JqZWN0IHN0eWxlXG4gICAgICBlcnJvcih7IG1lc3NhZ2U6ICd0ZXN0IGVycm9yIDInIH0pO1xuICAgICAgZXhwZWN0KG1vY2tTdGRlcnIpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCd0ZXN0IGVycm9yIDJcXG4nKTtcbiAgICAgIGV4cGVjdChtb2NrU3Rkb3V0KS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnaW5mbygpIHdyaXRlcyB0byBzdGRlcnIgYnkgZGVmYXVsdCB3aXRoIGJvdGggc3R5bGVzJywgKCkgPT4ge1xuICAgICAgLy8gU3RyaW5nIHN0eWxlXG4gICAgICBpbmZvKCd0ZXN0IHByaW50Jyk7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ3Rlc3QgcHJpbnRcXG4nKTtcblxuICAgICAgLy8gT2JqZWN0IHN0eWxlXG4gICAgICBpbmZvKHsgbWVzc2FnZTogJ3Rlc3QgcHJpbnQgMicgfSk7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ3Rlc3QgcHJpbnQgMlxcbicpO1xuICAgICAgZXhwZWN0KG1vY2tTdGRvdXQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdpbmZvKCkgd3JpdGVzIHRvIHN0ZG91dCBpbiBDSSBtb2RlIHdpdGggYm90aCBzdHlsZXMnLCAoKSA9PiB7XG4gICAgICBpb0hvc3QuaXNDSSA9IHRydWU7XG4gICAgICAvLyBTdHJpbmcgc3R5bGVcbiAgICAgIGluZm8oJ3Rlc3QgcHJpbnQnKTtcbiAgICAgIGV4cGVjdChtb2NrU3Rkb3V0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgndGVzdCBwcmludFxcbicpO1xuXG4gICAgICAvLyBPYmplY3Qgc3R5bGVcbiAgICAgIGluZm8oeyBtZXNzYWdlOiAndGVzdCBwcmludCAyJyB9KTtcbiAgICAgIGV4cGVjdChtb2NrU3Rkb3V0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgndGVzdCBwcmludCAyXFxuJyk7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2xvZyBsZXZlbHMnLCAoKSA9PiB7XG4gICAgdGVzdCgncmVzcGVjdHMgbG9nIGxldmVsIHNldHRpbmdzIHdpdGggYm90aCBzdHlsZXMnLCAoKSA9PiB7XG4gICAgICBpb0hvc3QubG9nTGV2ZWwgPSAnZXJyb3InO1xuXG4gICAgICAvLyBTdHJpbmcgc3R5bGVcbiAgICAgIGVycm9yKCdlcnJvciBtZXNzYWdlJyk7XG4gICAgICB3YXJuaW5nKCd3YXJuaW5nIG1lc3NhZ2UnKTtcbiAgICAgIGluZm8oJ3ByaW50IG1lc3NhZ2UnKTtcblxuICAgICAgLy8gT2JqZWN0IHN0eWxlXG4gICAgICBlcnJvcih7IG1lc3NhZ2U6ICdlcnJvciBtZXNzYWdlIDInIH0pO1xuICAgICAgd2FybmluZyh7IG1lc3NhZ2U6ICd3YXJuaW5nIG1lc3NhZ2UgMicgfSk7XG4gICAgICBpbmZvKHsgbWVzc2FnZTogJ3ByaW50IG1lc3NhZ2UgMicgfSk7XG5cbiAgICAgIGV4cGVjdChtb2NrU3RkZXJyKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnZXJyb3IgbWVzc2FnZVxcbicpO1xuICAgICAgZXhwZWN0KG1vY2tTdGRlcnIpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCdlcnJvciBtZXNzYWdlIDJcXG4nKTtcbiAgICAgIGV4cGVjdChtb2NrU3RkZXJyKS5ub3QudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ3dhcm5pbmcgbWVzc2FnZVxcbicpO1xuICAgICAgZXhwZWN0KG1vY2tTdGRlcnIpLm5vdC50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnd2FybmluZyBtZXNzYWdlIDJcXG4nKTtcbiAgICAgIGV4cGVjdChtb2NrU3RkZXJyKS5ub3QudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ3ByaW50IG1lc3NhZ2VcXG4nKTtcbiAgICAgIGV4cGVjdChtb2NrU3RkZXJyKS5ub3QudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ3ByaW50IG1lc3NhZ2UgMlxcbicpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnZGVidWcgbWVzc2FnZXMgb25seSBzaG93IGF0IGRlYnVnIGxldmVsIHdpdGggYm90aCBzdHlsZXMnLCAoKSA9PiB7XG4gICAgICBpb0hvc3QubG9nTGV2ZWwgPSAnaW5mbyc7XG4gICAgICBkZWJ1ZygnZGVidWcgbWVzc2FnZScpO1xuICAgICAgZGVidWcoeyBtZXNzYWdlOiAnZGVidWcgbWVzc2FnZSAyJyB9KTtcbiAgICAgIGV4cGVjdChtb2NrU3RkZXJyKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuXG4gICAgICBpb0hvc3QubG9nTGV2ZWwgPSAnZGVidWcnO1xuICAgICAgZGVidWcoJ2RlYnVnIG1lc3NhZ2UnKTtcbiAgICAgIGRlYnVnKHsgbWVzc2FnZTogJ2RlYnVnIG1lc3NhZ2UgMicgfSk7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFdpdGgoXG4gICAgICAgIGV4cGVjdC5zdHJpbmdNYXRjaGluZygvXlxcW1xcZHsyfTpcXGR7Mn06XFxkezJ9XFxdIGRlYnVnIG1lc3NhZ2VcXG4kLyksXG4gICAgICApO1xuICAgICAgZXhwZWN0KG1vY2tTdGRlcnIpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFxuICAgICAgICBleHBlY3Quc3RyaW5nTWF0Y2hpbmcoL15cXFtcXGR7Mn06XFxkezJ9OlxcZHsyfVxcXSBkZWJ1ZyBtZXNzYWdlIDJcXG4kLyksXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgdGVzdCgndHJhY2UgbWVzc2FnZXMgb25seSBzaG93IGF0IHRyYWNlIGxldmVsIHdpdGggYm90aCBzdHlsZXMnLCAoKSA9PiB7XG4gICAgICBpb0hvc3QubG9nTGV2ZWwgPSAnZGVidWcnO1xuICAgICAgdHJhY2UoJ3RyYWNlIG1lc3NhZ2UnKTtcbiAgICAgIHRyYWNlKHsgbWVzc2FnZTogJ3RyYWNlIG1lc3NhZ2UgMicgfSk7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcblxuICAgICAgaW9Ib3N0LmxvZ0xldmVsID0gJ3RyYWNlJztcbiAgICAgIHRyYWNlKCd0cmFjZSBtZXNzYWdlJyk7XG4gICAgICB0cmFjZSh7IG1lc3NhZ2U6ICd0cmFjZSBtZXNzYWdlIDInIH0pO1xuICAgICAgZXhwZWN0KG1vY2tTdGRlcnIpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFxuICAgICAgICBleHBlY3Quc3RyaW5nTWF0Y2hpbmcoL15cXFtcXGR7Mn06XFxkezJ9OlxcZHsyfVxcXSB0cmFjZSBtZXNzYWdlXFxuJC8pLFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChtb2NrU3RkZXJyKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgICAgZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9eXFxbXFxkezJ9OlxcZHsyfTpcXGR7Mn1cXF0gdHJhY2UgbWVzc2FnZSAyXFxuJC8pLFxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2Zvcm1hdHRlZCBtZXNzYWdlcycsICgpID0+IHtcbiAgICB0ZXN0KCdoYW5kbGVzIGZvcm1hdCBzdHJpbmdzIGNvcnJlY3RseSB3aXRoIGJvdGggc3R5bGVzJywgKCkgPT4ge1xuICAgICAgLy8gU3RyaW5nIHN0eWxlXG4gICAgICBpbmZvKCdIZWxsbyAlcywgeW91IGhhdmUgJWQgbWVzc2FnZXMnLCAnVXNlcicsIDUpO1xuICAgICAgZXhwZWN0KG1vY2tTdGRlcnIpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCdIZWxsbyBVc2VyLCB5b3UgaGF2ZSA1IG1lc3NhZ2VzXFxuJyk7XG5cbiAgICAgIC8vIE9iamVjdCBzdHlsZVxuICAgICAgaW5mbyh7IG1lc3NhZ2U6ICdIZWxsbyAlcywgeW91IGhhdmUgJWQgbWVzc2FnZXMnIH0sICdVc2VyJywgNSk7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ0hlbGxvIFVzZXIsIHlvdSBoYXZlIDUgbWVzc2FnZXNcXG4nKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2hhbmRsZXMgb2JqZWN0cyBpbiBmb3JtYXQgc3RyaW5ncyB3aXRoIGJvdGggc3R5bGVzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqID0geyBuYW1lOiAndGVzdCcgfTtcbiAgICAgIC8vIFN0cmluZyBzdHlsZVxuICAgICAgaW5mbygnT2JqZWN0OiAlaicsIG9iaik7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ09iamVjdDoge1wibmFtZVwiOlwidGVzdFwifVxcbicpO1xuXG4gICAgICAvLyBPYmplY3Qgc3R5bGVcbiAgICAgIGluZm8oeyBtZXNzYWdlOiAnT2JqZWN0OiAlaicgfSwgb2JqKTtcbiAgICAgIGV4cGVjdChtb2NrU3RkZXJyKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnT2JqZWN0OiB7XCJuYW1lXCI6XCJ0ZXN0XCJ9XFxuJyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdoYW5kbGVzIG11bHRpcGxlIHN0eWxlIGNoYW5nZXMgaW4gc2luZ2xlIGNhbGwnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvYmogPSB7IGlkOiAxMjMgfTtcbiAgICAgIHN1Y2Nlc3MoJ1Byb2Nlc3NpbmcgJXM6ICVqIGF0ICVkJSUnLCAndGFzaycsIG9iaiwgNTApO1xuICAgICAgZXhwZWN0KG1vY2tTdGRlcnIpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFxuICAgICAgICAnUHJvY2Vzc2luZyB0YXNrOiB7XCJpZFwiOjEyM30gYXQgNTAlXFxuJyxcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzdHlsZWQgb3V0cHV0JywgKCkgPT4ge1xuICAgIHRlc3QoJ3N1Y2Nlc3MoKSBhZGRzIGdyZWVuIGNvbG9yIHRvIG91dHB1dCB3aXRoIGJvdGggc3R5bGVzJywgKCkgPT4ge1xuICAgICAgLy8gU3RyaW5nIHN0eWxlXG4gICAgICBzdWNjZXNzKCdvcGVyYXRpb24gY29tcGxldGVkJyk7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ29wZXJhdGlvbiBjb21wbGV0ZWRcXG4nKTtcblxuICAgICAgLy8gT2JqZWN0IHN0eWxlXG4gICAgICBzdWNjZXNzKHsgbWVzc2FnZTogJ29wZXJhdGlvbiBjb21wbGV0ZWQgMicgfSk7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ29wZXJhdGlvbiBjb21wbGV0ZWQgMlxcbicpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnaGlnaGxpZ2h0KCkgYWRkcyBib2xkIGZvcm1hdHRpbmcgdG8gb3V0cHV0IHdpdGggYm90aCBzdHlsZXMnLCAoKSA9PiB7XG4gICAgICAvLyBTdHJpbmcgc3R5bGVcbiAgICAgIGhpZ2hsaWdodCgnaW1wb3J0YW50IG1lc3NhZ2UnKTtcbiAgICAgIGV4cGVjdChtb2NrU3RkZXJyKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnaW1wb3J0YW50IG1lc3NhZ2VcXG4nKTtcblxuICAgICAgLy8gT2JqZWN0IHN0eWxlXG4gICAgICBoaWdobGlnaHQoeyBtZXNzYWdlOiAnaW1wb3J0YW50IG1lc3NhZ2UgMicgfSk7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ2ltcG9ydGFudCBtZXNzYWdlIDJcXG4nKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3N1Y2Nlc3MgaGFuZGxlcyBmb3JtYXQgc3RyaW5ncyB3aXRoIHN0eWxpbmcnLCAoKSA9PiB7XG4gICAgICBzdWNjZXNzKCdjb21wbGV0ZWQgdGFzayAlZCBvZiAlZCcsIDEsIDMpO1xuICAgICAgZXhwZWN0KG1vY2tTdGRlcnIpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCdjb21wbGV0ZWQgdGFzayAxIG9mIDNcXG4nKTtcblxuICAgICAgLy8gUmVtb3ZlIHRoZSBjb2RlIGZyb20gdGhlIHRlc3Qgc2luY2UgaXQncyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWxcbiAgICAgIHN1Y2Nlc3MoeyBtZXNzYWdlOiAnY29tcGxldGVkIHRhc2sgJWQgb2YgJWQnIH0sIDIsIDMpO1xuICAgICAgZXhwZWN0KG1vY2tTdGRlcnIpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCdjb21wbGV0ZWQgdGFzayAyIG9mIDNcXG4nKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2hpZ2hsaWdodCBoYW5kbGVzIGNvbXBsZXggb2JqZWN0cyB3aXRoIHN0eWxpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCBjb21wbGV4T2JqID0geyBzdGF0dXM6ICdhY3RpdmUnLCBjb3VudDogNDIgfTtcbiAgICAgIGhpZ2hsaWdodCgnU3RhdHVzOiAlaicsIGNvbXBsZXhPYmopO1xuICAgICAgZXhwZWN0KG1vY2tTdGRlcnIpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCdTdGF0dXM6IHtcInN0YXR1c1wiOlwiYWN0aXZlXCIsXCJjb3VudFwiOjQyfVxcbicpO1xuXG4gICAgICAvLyBSZW1vdmUgdGhlIGNvZGUgZnJvbSB0aGUgdGVzdCBzaW5jZSBpdCdzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbFxuICAgICAgaGlnaGxpZ2h0KHsgbWVzc2FnZTogJ1N0YXR1czogJWonIH0sIGNvbXBsZXhPYmopO1xuICAgICAgZXhwZWN0KG1vY2tTdGRlcnIpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCdTdGF0dXM6IHtcInN0YXR1c1wiOlwiYWN0aXZlXCIsXCJjb3VudFwiOjQyfVxcbicpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZWRnZSBjYXNlcycsICgpID0+IHtcbiAgICB0ZXN0KCdoYW5kbGVzIG51bGwgYW5kIHVuZGVmaW5lZCBhcmd1bWVudHMgd2l0aCBib3RoIHN0eWxlcycsICgpID0+IHtcbiAgICAgIC8vIFN0cmluZyBzdHlsZVxuICAgICAgaW5mbygnVmFsdWVzOiAlcywgJXMnLCBudWxsLCB1bmRlZmluZWQpO1xuICAgICAgZXhwZWN0KG1vY2tTdGRlcnIpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCdWYWx1ZXM6IG51bGwsIHVuZGVmaW5lZFxcbicpO1xuXG4gICAgICAvLyBPYmplY3Qgc3R5bGVcbiAgICAgIGluZm8oeyBtZXNzYWdlOiAnVmFsdWVzOiAlcywgJXMnIH0sIG51bGwsIHVuZGVmaW5lZCk7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ1ZhbHVlczogbnVsbCwgdW5kZWZpbmVkXFxuJyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdoYW5kbGVzIGNpcmN1bGFyIHJlZmVyZW5jZXMgaW4gb2JqZWN0cyB3aXRoIGJvdGggc3R5bGVzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqOiBhbnkgPSB7IG5hbWU6ICd0ZXN0JyB9O1xuICAgICAgb2JqLnNlbGYgPSBvYmo7XG5cbiAgICAgIC8vIFN0cmluZyBzdHlsZVxuICAgICAgaW5mbygnT2JqZWN0OiAlaicsIG9iaik7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0LnN0cmluZ0NvbnRhaW5pbmcoJ1tDaXJjdWxhcicpKTtcblxuICAgICAgLy8gT2JqZWN0IHN0eWxlXG4gICAgICBpbmZvKHsgbWVzc2FnZTogJ09iamVjdDogJWonIH0sIG9iaik7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0LnN0cmluZ0NvbnRhaW5pbmcoJ1tDaXJjdWxhcicpKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ21lc3NhZ2UgY29kZXMnLCAoKSA9PiB7XG4gICAgdGVzdCgndmFsaWRhdGVzIG1lc3NhZ2UgY29kZXMgY29ycmVjdGx5JywgKCkgPT4ge1xuICAgICAgLy8gVmFsaWQgY29kZXNcbiAgICAgIGV4cGVjdCgoKSA9PiBlcnJvcih7IG1lc3NhZ2U6ICd0ZXN0JywgY29kZTogJ0NES19UT09MS0lUX0UwMDAxJyB9KSkubm90LnRvVGhyb3coKTtcbiAgICAgIGV4cGVjdCgoKSA9PiB3YXJuaW5nKHsgbWVzc2FnZTogJ3Rlc3QnLCBjb2RlOiAnQ0RLX0FTU0VUU19XNDk5OScgfSkpLm5vdC50b1Rocm93KCk7XG4gICAgICBleHBlY3QoKCkgPT4gaW5mbyh7IG1lc3NhZ2U6ICd0ZXN0JywgY29kZTogJ0NES19TREtfSTAwMDAnIH0pKS5ub3QudG9UaHJvdygpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgndXNlcyBkZWZhdWx0IGNvZGVzIHdoZW4gbm9uZSBwcm92aWRlZCcsICgpID0+IHtcbiAgICAgIGVycm9yKCd0ZXN0IGVycm9yJyk7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0LnN0cmluZ0NvbnRhaW5pbmcoJ3Rlc3QgZXJyb3InKSk7XG4gICAgICAvLyBXb3VsZCBuZWVkIHRvIG1vZGlmeSB0aGUgY29kZSB0byBleHBvc2UgdGhlIGFjdHVhbCBtZXNzYWdlIGNvZGUgZm9yIHZlcmlmaWNhdGlvblxuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnY29ya2VkIGxvZ2dpbmcnLCAoKSA9PiB7XG4gICAgdGVzdCgnYnVmZmVycyBtZXNzYWdlcyB3aGVuIGNvcmtlZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHdpdGhDb3JrZWRMb2dnaW5nKGFzeW5jICgpID0+IHtcbiAgICAgICAgaW5mbygnbWVzc2FnZSAxJyk7XG4gICAgICAgIGluZm8oeyBtZXNzYWdlOiAnbWVzc2FnZSAyJyB9KTtcbiAgICAgICAgZXhwZWN0KG1vY2tTdGRlcnIpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KG1vY2tTdGRlcnIpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCdtZXNzYWdlIDFcXG4nKTtcbiAgICAgIGV4cGVjdChtb2NrU3RkZXJyKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnbWVzc2FnZSAyXFxuJyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdoYW5kbGVzIG5lc3RlZCBjb3JraW5nIGNvcnJlY3RseScsIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHdpdGhDb3JrZWRMb2dnaW5nKGFzeW5jICgpID0+IHtcbiAgICAgICAgaW5mbygnb3V0ZXIgMScpO1xuICAgICAgICBhd2FpdCB3aXRoQ29ya2VkTG9nZ2luZyhhc3luYyAoKSA9PiB7XG4gICAgICAgICAgaW5mbyh7IG1lc3NhZ2U6ICdpbm5lcicgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpbmZvKHsgbWVzc2FnZTogJ291dGVyIDInIH0pO1xuICAgICAgICBleHBlY3QobW9ja1N0ZGVycikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDMpO1xuICAgICAgZXhwZWN0KG1vY2tTdGRlcnIpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCdvdXRlciAxXFxuJyk7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ2lubmVyXFxuJyk7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ291dGVyIDJcXG4nKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2hhbmRsZXMgZXJyb3JzIGluIGNvcmtlZCBibG9jayB3aGlsZSBwcmVzZXJ2aW5nIGJ1ZmZlcicsIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGV4cGVjdCh3aXRoQ29ya2VkTG9nZ2luZyhhc3luYyAoKSA9PiB7XG4gICAgICAgIGluZm8oJ21lc3NhZ2UgMScpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Rlc3QgZXJyb3InKTtcbiAgICAgIH0pKS5yZWplY3RzLnRvVGhyb3coJ3Rlc3QgZXJyb3InKTtcblxuICAgICAgLy8gVGhlIGJ1ZmZlcmVkIG1lc3NhZ2Ugc2hvdWxkIHN0aWxsIGJlIHByaW50ZWQgZXZlbiBpZiB0aGUgYmxvY2sgdGhyb3dzXG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ21lc3NhZ2UgMVxcbicpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnbWFpbnRhaW5zIGNvcnJlY3Qgb3JkZXIgd2l0aCBtaXhlZCBsb2cgbGV2ZWxzIGluIGNvcmtlZCBibG9jaycsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIFNldCB0aHJlc2hvbGQgdG8gZGVidWcgdG8gYWxsb3cgZGVidWcgbWVzc2FnZXNcbiAgICAgIGlvSG9zdC5sb2dMZXZlbCA9ICdkZWJ1Zyc7XG5cbiAgICAgIGF3YWl0IHdpdGhDb3JrZWRMb2dnaW5nKGFzeW5jICgpID0+IHtcbiAgICAgICAgZXJyb3IoJ2Vycm9yIG1lc3NhZ2UnKTtcbiAgICAgICAgd2FybmluZygnd2FybmluZyBtZXNzYWdlJyk7XG4gICAgICAgIHN1Y2Nlc3MoJ3N1Y2Nlc3MgbWVzc2FnZScpO1xuICAgICAgICBkZWJ1ZygnZGVidWcgbWVzc2FnZScpO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGNhbGxzID0gbW9ja1N0ZGVyci5tb2NrLmNhbGxzLm1hcChjYWxsID0+IGNhbGxbMF0pO1xuICAgICAgZXhwZWN0KGNhbGxzKS50b0VxdWFsKFtcbiAgICAgICAgJ2Vycm9yIG1lc3NhZ2VcXG4nLFxuICAgICAgICAnd2FybmluZyBtZXNzYWdlXFxuJyxcbiAgICAgICAgJ3N1Y2Nlc3MgbWVzc2FnZVxcbicsXG4gICAgICAgIGV4cGVjdC5zdHJpbmdNYXRjaGluZygvXlxcW1xcZHsyfTpcXGR7Mn06XFxkezJ9XFxdIGRlYnVnIG1lc3NhZ2VcXG4kLyksXG4gICAgICBdKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0NJIG1vZGUgYmVoYXZpb3InLCAoKSA9PiB7XG4gICAgdGVzdCgnY29ycmVjdGx5IHN3aXRjaGVzIGJldHdlZW4gc3Rkb3V0IGFuZCBzdGRlcnIgYmFzZWQgb24gQ0kgbW9kZScsICgpID0+IHtcbiAgICAgIGlvSG9zdC5pc0NJID0gdHJ1ZTtcbiAgICAgIHdhcm5pbmcoJ3dhcm5pbmcgaW4gQ0knKTtcbiAgICAgIHN1Y2Nlc3MoJ3N1Y2Nlc3MgaW4gQ0knKTtcbiAgICAgIGVycm9yKCdlcnJvciBpbiBDSScpO1xuXG4gICAgICBleHBlY3QobW9ja1N0ZG91dCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ3dhcm5pbmcgaW4gQ0lcXG4nKTtcbiAgICAgIGV4cGVjdChtb2NrU3Rkb3V0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnc3VjY2VzcyBpbiBDSVxcbicpO1xuICAgICAgZXhwZWN0KG1vY2tTdGRlcnIpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCdlcnJvciBpbiBDSVxcbicpO1xuXG4gICAgICBpb0hvc3QuaXNDSSA9IGZhbHNlO1xuICAgICAgd2FybmluZygnd2FybmluZyBub3QgaW4gQ0knKTtcbiAgICAgIHN1Y2Nlc3MoJ3N1Y2Nlc3Mgbm90IGluIENJJyk7XG4gICAgICBlcnJvcignZXJyb3Igbm90IGluIENJJyk7XG5cbiAgICAgIGV4cGVjdChtb2NrU3RkZXJyKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnd2FybmluZyBub3QgaW4gQ0lcXG4nKTtcbiAgICAgIGV4cGVjdChtb2NrU3RkZXJyKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnc3VjY2VzcyBub3QgaW4gQ0lcXG4nKTtcbiAgICAgIGV4cGVjdChtb2NrU3RkZXJyKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnZXJyb3Igbm90IGluIENJXFxuJyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
219
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2luZy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibG9nZ2luZy50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsa0RBQXNHO0FBQ3RHLGtFQUE2RDtBQUU3RCxRQUFRLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRTtJQUN2QixNQUFNLE1BQU0sR0FBRyx1QkFBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDNUMsSUFBSSxVQUFxQixDQUFDO0lBQzFCLElBQUksVUFBcUIsQ0FBQztJQUUxQixNQUFNLFNBQVMsR0FBRyxDQUFDLEdBQVcsRUFBVSxFQUFFO1FBQ3hDLE1BQU0sU0FBUyxHQUFHLDBCQUEwQixDQUFDO1FBQzdDLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDcEMsQ0FBQyxDQUFDO0lBRUYsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLE1BQU0sQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBRXBCLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDdkIsVUFBVSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUV2QixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUNwRSxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDeEMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQ3BFLFVB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QUMsb0JBQW9CLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUMvRCxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsb0JBQW9CLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUMvRCxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsb0JBQW9CLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUMvRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZXN1bHQsIHN1Y2Nlc3MsIGhpZ2hsaWdodCwgZXJyb3IsIHdhcm5pbmcsIGluZm8sIGRlYnVnLCB0cmFjZSB9IGZyb20gJy4uLy4uLy4uL2xpYi9sb2dnaW5nJztcbmltcG9ydCB7IENsaUlvSG9zdCB9IGZyb20gJy4uLy4uLy4uL2xpYi90b29sa2l0L2NsaS1pby1ob3N0JztcblxuZGVzY3JpYmUoJ2xvZ2dpbmcnLCAoKSA9PiB7XG4gIGNvbnN0IGlvSG9zdCA9IENsaUlvSG9zdC5pbnN0YW5jZSh7fSwgdHJ1ZSk7XG4gIGxldCBtb2NrU3Rkb3V0OiBqZXN0Lk1vY2s7XG4gIGxldCBtb2NrU3RkZXJyOiBqZXN0Lk1vY2s7XG5cbiAgY29uc3Qgc3RyaXBBbnNpID0gKHN0cjogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICBjb25zdCBhbnNpUmVnZXggPSAvXFx1MDAxYlxcW1swLTk7XSpbYS16QS1aXS9nO1xuICAgIHJldHVybiBzdHIucmVwbGFjZShhbnNpUmVnZXgsICcnKTtcbiAgfTtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBpb0hvc3QubG9nTGV2ZWwgPSAnaW5mbyc7XG4gICAgaW9Ib3N0LmlzQ0kgPSBmYWxzZTtcblxuICAgIG1vY2tTdGRvdXQgPSBqZXN0LmZuKCk7XG4gICAgbW9ja1N0ZGVyciA9IGplc3QuZm4oKTtcblxuICAgIGplc3Quc3B5T24ocHJvY2Vzcy5zdGRvdXQsICd3cml0ZScpLm1vY2tJbXBsZW1lbnRhdGlvbigoY2h1bms6IGFueSkgPT4ge1xuICAgICAgbW9ja1N0ZG91dChzdHJpcEFuc2koY2h1bmsudG9TdHJpbmcoKSkpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG5cbiAgICBqZXN0LnNweU9uKHByb2Nlc3Muc3RkZXJyLCAnd3JpdGUnKS5tb2NrSW1wbGVtZW50YXRpb24oKGNodW5rOiBhbnkpID0+IHtcbiAgICAgIG1vY2tTdGRlcnIoc3RyaXBBbnNpKGNodW5rLnRvU3RyaW5nKCkpKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICB9KTtcblxuICBhZnRlckVhY2goKCkgPT4ge1xuICAgIGplc3QucmVzdG9yZUFsbE1vY2tzKCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzdHJlYW0gc2VsZWN0aW9uJywgKCkgPT4ge1xuICAgIHRlc3QoJ3Jlc3VsdCgpIGFsd2F5cyB3cml0ZXMgdG8gc3Rkb3V0IHdpdGggYm90aCBzdHlsZXMnLCAoKSA9PiB7XG4gICAgICAvLyBTdHJpbmcgc3R5bGVcbiAgICAgIHJlc3VsdCgndGVzdCBtZXNzYWdlJyk7XG4gICAgICBleHBlY3QobW9ja1N0ZG91dCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ3Rlc3QgbWVzc2FnZVxcbicpO1xuXG4gICAgICAvLyBPYmplY3Qgc3R5bGVcbiAgICAgIHJlc3VsdCh7IG1lc3NhZ2U6ICd0ZXN0IG1lc3NhZ2UgMicgfSk7XG4gICAgICBleHBlY3QobW9ja1N0ZG91dCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ3Rlc3QgbWVzc2FnZSAyXFxuJyk7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2Vycm9yKCkgYWx3YXlzIHdyaXRlcyB0byBzdGRlcnIgd2l0aCBib3RoIHN0eWxlcycsICgpID0+IHtcbiAgICAgIC8vIFN0cmluZyBzdHlsZVxuICAgICAgZXJyb3IoJ3Rlc3QgZXJyb3InKTtcbiAgICAgIGV4cGVjdChtb2NrU3RkZXJyKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgndGVzdCBlcnJvclxcbicpO1xuXG4gICAgICAvLyBPYmplY3Qgc3R5bGVcbiAgICAgIGVycm9yKHsgbWVzc2FnZTogJ3Rlc3QgZXJyb3IgMicgfSk7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ3Rlc3QgZXJyb3IgMlxcbicpO1xuICAgICAgZXhwZWN0KG1vY2tTdGRvdXQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdpbmZvKCkgd3JpdGVzIHRvIHN0ZGVyciBieSBkZWZhdWx0IHdpdGggYm90aCBzdHlsZXMnLCAoKSA9PiB7XG4gICAgICAvLyBTdHJpbmcgc3R5bGVcbiAgICAgIGluZm8oJ3Rlc3QgcHJpbnQnKTtcbiAgICAgIGV4cGVjdChtb2NrU3RkZXJyKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgndGVzdCBwcmludFxcbicpO1xuXG4gICAgICAvLyBPYmplY3Qgc3R5bGVcbiAgICAgIGluZm8oeyBtZXNzYWdlOiAndGVzdCBwcmludCAyJyB9KTtcbiAgICAgIGV4cGVjdChtb2NrU3RkZXJyKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgndGVzdCBwcmludCAyXFxuJyk7XG4gICAgICBleHBlY3QobW9ja1N0ZG91dCkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2luZm8oKSB3cml0ZXMgdG8gc3Rkb3V0IGluIENJIG1vZGUgd2l0aCBib3RoIHN0eWxlcycsICgpID0+IHtcbiAgICAgIGlvSG9zdC5pc0NJID0gdHJ1ZTtcbiAgICAgIC8vIFN0cmluZyBzdHlsZVxuICAgICAgaW5mbygndGVzdCBwcmludCcpO1xuICAgICAgZXhwZWN0KG1vY2tTdGRvdXQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCd0ZXN0IHByaW50XFxuJyk7XG5cbiAgICAgIC8vIE9iamVjdCBzdHlsZVxuICAgICAgaW5mbyh7IG1lc3NhZ2U6ICd0ZXN0IHByaW50IDInIH0pO1xuICAgICAgZXhwZWN0KG1vY2tTdGRvdXQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCd0ZXN0IHByaW50IDJcXG4nKTtcbiAgICAgIGV4cGVjdChtb2NrU3RkZXJyKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnbG9nIGxldmVscycsICgpID0+IHtcbiAgICB0ZXN0KCdyZXNwZWN0cyBsb2cgbGV2ZWwgc2V0dGluZ3Mgd2l0aCBib3RoIHN0eWxlcycsICgpID0+IHtcbiAgICAgIGlvSG9zdC5sb2dMZXZlbCA9ICdlcnJvcic7XG5cbiAgICAgIC8vIFN0cmluZyBzdHlsZVxuICAgICAgZXJyb3IoJ2Vycm9yIG1lc3NhZ2UnKTtcbiAgICAgIHdhcm5pbmcoJ3dhcm5pbmcgbWVzc2FnZScpO1xuICAgICAgaW5mbygncHJpbnQgbWVzc2FnZScpO1xuXG4gICAgICAvLyBPYmplY3Qgc3R5bGVcbiAgICAgIGVycm9yKHsgbWVzc2FnZTogJ2Vycm9yIG1lc3NhZ2UgMicgfSk7XG4gICAgICB3YXJuaW5nKHsgbWVzc2FnZTogJ3dhcm5pbmcgbWVzc2FnZSAyJyB9KTtcbiAgICAgIGluZm8oeyBtZXNzYWdlOiAncHJpbnQgbWVzc2FnZSAyJyB9KTtcblxuICAgICAgZXhwZWN0KG1vY2tTdGRlcnIpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCdlcnJvciBtZXNzYWdlXFxuJyk7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ2Vycm9yIG1lc3NhZ2UgMlxcbicpO1xuICAgICAgZXhwZWN0KG1vY2tTdGRlcnIpLm5vdC50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnd2FybmluZyBtZXNzYWdlXFxuJyk7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikubm90LnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCd3YXJuaW5nIG1lc3NhZ2UgMlxcbicpO1xuICAgICAgZXhwZWN0KG1vY2tTdGRlcnIpLm5vdC50b0hhdmVCZWVuQ2FsbGVkV2l0aCgncHJpbnQgbWVzc2FnZVxcbicpO1xuICAgICAgZXhwZWN0KG1vY2tTdGRlcnIpLm5vdC50b0hhdmVCZWVuQ2FsbGVkV2l0aCgncHJpbnQgbWVzc2FnZSAyXFxuJyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdkZWJ1ZyBtZXNzYWdlcyBvbmx5IHNob3cgYXQgZGVidWcgbGV2ZWwgd2l0aCBib3RoIHN0eWxlcycsICgpID0+IHtcbiAgICAgIGlvSG9zdC5sb2dMZXZlbCA9ICdpbmZvJztcbiAgICAgIGRlYnVnKCdkZWJ1ZyBtZXNzYWdlJyk7XG4gICAgICBkZWJ1Zyh7IG1lc3NhZ2U6ICdkZWJ1ZyBtZXNzYWdlIDInIH0pO1xuICAgICAgZXhwZWN0KG1vY2tTdGRlcnIpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG5cbiAgICAgIGlvSG9zdC5sb2dMZXZlbCA9ICdkZWJ1Zyc7XG4gICAgICBkZWJ1ZygnZGVidWcgbWVzc2FnZScpO1xuICAgICAgZGVidWcoeyBtZXNzYWdlOiAnZGVidWcgbWVzc2FnZSAyJyB9KTtcbiAgICAgIGV4cGVjdChtb2NrU3RkZXJyKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgICAgZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9eXFxbXFxkezJ9OlxcZHsyfTpcXGR7Mn1cXF0gZGVidWcgbWVzc2FnZVxcbiQvKSxcbiAgICAgICk7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFdpdGgoXG4gICAgICAgIGV4cGVjdC5zdHJpbmdNYXRjaGluZygvXlxcW1xcZHsyfTpcXGR7Mn06XFxkezJ9XFxdIGRlYnVnIG1lc3NhZ2UgMlxcbiQvKSxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCd0cmFjZSBtZXNzYWdlcyBvbmx5IHNob3cgYXQgdHJhY2UgbGV2ZWwgd2l0aCBib3RoIHN0eWxlcycsICgpID0+IHtcbiAgICAgIGlvSG9zdC5sb2dMZXZlbCA9ICdkZWJ1Zyc7XG4gICAgICB0cmFjZSgndHJhY2UgbWVzc2FnZScpO1xuICAgICAgdHJhY2UoeyBtZXNzYWdlOiAndHJhY2UgbWVzc2FnZSAyJyB9KTtcbiAgICAgIGV4cGVjdChtb2NrU3RkZXJyKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuXG4gICAgICBpb0hvc3QubG9nTGV2ZWwgPSAndHJhY2UnO1xuICAgICAgdHJhY2UoJ3RyYWNlIG1lc3NhZ2UnKTtcbiAgICAgIHRyYWNlKHsgbWVzc2FnZTogJ3RyYWNlIG1lc3NhZ2UgMicgfSk7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFdpdGgoXG4gICAgICAgIGV4cGVjdC5zdHJpbmdNYXRjaGluZygvXlxcW1xcZHsyfTpcXGR7Mn06XFxkezJ9XFxdIHRyYWNlIG1lc3NhZ2VcXG4kLyksXG4gICAgICApO1xuICAgICAgZXhwZWN0KG1vY2tTdGRlcnIpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFxuICAgICAgICBleHBlY3Quc3RyaW5nTWF0Y2hpbmcoL15cXFtcXGR7Mn06XFxkezJ9OlxcZHsyfVxcXSB0cmFjZSBtZXNzYWdlIDJcXG4kLyksXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZm9ybWF0dGVkIG1lc3NhZ2VzJywgKCkgPT4ge1xuICAgIHRlc3QoJ2hhbmRsZXMgZm9ybWF0IHN0cmluZ3MgY29ycmVjdGx5IHdpdGggYm90aCBzdHlsZXMnLCAoKSA9PiB7XG4gICAgICAvLyBTdHJpbmcgc3R5bGVcbiAgICAgIGluZm8oJ0hlbGxvICVzLCB5b3UgaGF2ZSAlZCBtZXNzYWdlcycsICdVc2VyJywgNSk7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ0hlbGxvIFVzZXIsIHlvdSBoYXZlIDUgbWVzc2FnZXNcXG4nKTtcblxuICAgICAgLy8gT2JqZWN0IHN0eWxlXG4gICAgICBpbmZvKHsgbWVzc2FnZTogJ0hlbGxvICVzLCB5b3UgaGF2ZSAlZCBtZXNzYWdlcycgfSwgJ1VzZXInLCA1KTtcbiAgICAgIGV4cGVjdChtb2NrU3RkZXJyKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnSGVsbG8gVXNlciwgeW91IGhhdmUgNSBtZXNzYWdlc1xcbicpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnaGFuZGxlcyBvYmplY3RzIGluIGZvcm1hdCBzdHJpbmdzIHdpdGggYm90aCBzdHlsZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvYmogPSB7IG5hbWU6ICd0ZXN0JyB9O1xuICAgICAgLy8gU3RyaW5nIHN0eWxlXG4gICAgICBpbmZvKCdPYmplY3Q6ICVqJywgb2JqKTtcbiAgICAgIGV4cGVjdChtb2NrU3RkZXJyKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnT2JqZWN0OiB7XCJuYW1lXCI6XCJ0ZXN0XCJ9XFxuJyk7XG5cbiAgICAgIC8vIE9iamVjdCBzdHlsZVxuICAgICAgaW5mbyh7IG1lc3NhZ2U6ICdPYmplY3Q6ICVqJyB9LCBvYmopO1xuICAgICAgZXhwZWN0KG1vY2tTdGRlcnIpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCdPYmplY3Q6IHtcIm5hbWVcIjpcInRlc3RcIn1cXG4nKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2hhbmRsZXMgbXVsdGlwbGUgc3R5bGUgY2hhbmdlcyBpbiBzaW5nbGUgY2FsbCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IHsgaWQ6IDEyMyB9O1xuICAgICAgc3VjY2VzcygnUHJvY2Vzc2luZyAlczogJWogYXQgJWQlJScsICd0YXNrJywgb2JqLCA1MCk7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFdpdGgoXG4gICAgICAgICdQcm9jZXNzaW5nIHRhc2s6IHtcImlkXCI6MTIzfSBhdCA1MCVcXG4nLFxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3N0eWxlZCBvdXRwdXQnLCAoKSA9PiB7XG4gICAgdGVzdCgnc3VjY2VzcygpIGFkZHMgZ3JlZW4gY29sb3IgdG8gb3V0cHV0IHdpdGggYm90aCBzdHlsZXMnLCAoKSA9PiB7XG4gICAgICAvLyBTdHJpbmcgc3R5bGVcbiAgICAgIHN1Y2Nlc3MoJ29wZXJhdGlvbiBjb21wbGV0ZWQnKTtcbiAgICAgIGV4cGVjdChtb2NrU3RkZXJyKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnb3BlcmF0aW9uIGNvbXBsZXRlZFxcbicpO1xuXG4gICAgICAvLyBPYmplY3Qgc3R5bGVcbiAgICAgIHN1Y2Nlc3MoeyBtZXNzYWdlOiAnb3BlcmF0aW9uIGNvbXBsZXRlZCAyJyB9KTtcbiAgICAgIGV4cGVjdChtb2NrU3RkZXJyKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnb3BlcmF0aW9uIGNvbXBsZXRlZCAyXFxuJyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdoaWdobGlnaHQoKSBhZGRzIGJvbGQgZm9ybWF0dGluZyB0byBvdXRwdXQgd2l0aCBib3RoIHN0eWxlcycsICgpID0+IHtcbiAgICAgIC8vIFN0cmluZyBzdHlsZVxuICAgICAgaGlnaGxpZ2h0KCdpbXBvcnRhbnQgbWVzc2FnZScpO1xuICAgICAgZXhwZWN0KG1vY2tTdGRlcnIpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCdpbXBvcnRhbnQgbWVzc2FnZVxcbicpO1xuXG4gICAgICAvLyBPYmplY3Qgc3R5bGVcbiAgICAgIGhpZ2hsaWdodCh7IG1lc3NhZ2U6ICdpbXBvcnRhbnQgbWVzc2FnZSAyJyB9KTtcbiAgICAgIGV4cGVjdChtb2NrU3RkZXJyKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnaW1wb3J0YW50IG1lc3NhZ2UgMlxcbicpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnc3VjY2VzcyBoYW5kbGVzIGZvcm1hdCBzdHJpbmdzIHdpdGggc3R5bGluZycsICgpID0+IHtcbiAgICAgIHN1Y2Nlc3MoJ2NvbXBsZXRlZCB0YXNrICVkIG9mICVkJywgMSwgMyk7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ2NvbXBsZXRlZCB0YXNrIDEgb2YgM1xcbicpO1xuXG4gICAgICAvLyBSZW1vdmUgdGhlIGNvZGUgZnJvbSB0aGUgdGVzdCBzaW5jZSBpdCdzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbFxuICAgICAgc3VjY2Vzcyh7IG1lc3NhZ2U6ICdjb21wbGV0ZWQgdGFzayAlZCBvZiAlZCcgfSwgMiwgMyk7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ2NvbXBsZXRlZCB0YXNrIDIgb2YgM1xcbicpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnaGlnaGxpZ2h0IGhhbmRsZXMgY29tcGxleCBvYmplY3RzIHdpdGggc3R5bGluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IGNvbXBsZXhPYmogPSB7IHN0YXR1czogJ2FjdGl2ZScsIGNvdW50OiA0MiB9O1xuICAgICAgaGlnaGxpZ2h0KCdTdGF0dXM6ICVqJywgY29tcGxleE9iaik7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ1N0YXR1czoge1wic3RhdHVzXCI6XCJhY3RpdmVcIixcImNvdW50XCI6NDJ9XFxuJyk7XG5cbiAgICAgIC8vIFJlbW92ZSB0aGUgY29kZSBmcm9tIHRoZSB0ZXN0IHNpbmNlIGl0J3MgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsXG4gICAgICBoaWdobGlnaHQoeyBtZXNzYWdlOiAnU3RhdHVzOiAlaicgfSwgY29tcGxleE9iaik7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ1N0YXR1czoge1wic3RhdHVzXCI6XCJhY3RpdmVcIixcImNvdW50XCI6NDJ9XFxuJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdlZGdlIGNhc2VzJywgKCkgPT4ge1xuICAgIHRlc3QoJ2hhbmRsZXMgbnVsbCBhbmQgdW5kZWZpbmVkIGFyZ3VtZW50cyB3aXRoIGJvdGggc3R5bGVzJywgKCkgPT4ge1xuICAgICAgLy8gU3RyaW5nIHN0eWxlXG4gICAgICBpbmZvKCdWYWx1ZXM6ICVzLCAlcycsIG51bGwsIHVuZGVmaW5lZCk7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ1ZhbHVlczogbnVsbCwgdW5kZWZpbmVkXFxuJyk7XG5cbiAgICAgIC8vIE9iamVjdCBzdHlsZVxuICAgICAgaW5mbyh7IG1lc3NhZ2U6ICdWYWx1ZXM6ICVzLCAlcycgfSwgbnVsbCwgdW5kZWZpbmVkKTtcbiAgICAgIGV4cGVjdChtb2NrU3RkZXJyKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnVmFsdWVzOiBudWxsLCB1bmRlZmluZWRcXG4nKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2hhbmRsZXMgY2lyY3VsYXIgcmVmZXJlbmNlcyBpbiBvYmplY3RzIHdpdGggYm90aCBzdHlsZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvYmo6IGFueSA9IHsgbmFtZTogJ3Rlc3QnIH07XG4gICAgICBvYmouc2VsZiA9IG9iajtcblxuICAgICAgLy8gU3RyaW5nIHN0eWxlXG4gICAgICBpbmZvKCdPYmplY3Q6ICVqJywgb2JqKTtcbiAgICAgIGV4cGVjdChtb2NrU3RkZXJyKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3Quc3RyaW5nQ29udGFpbmluZygnW0NpcmN1bGFyJykpO1xuXG4gICAgICAvLyBPYmplY3Qgc3R5bGVcbiAgICAgIGluZm8oeyBtZXNzYWdlOiAnT2JqZWN0OiAlaicgfSwgb2JqKTtcbiAgICAgIGV4cGVjdChtb2NrU3RkZXJyKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3Quc3RyaW5nQ29udGFpbmluZygnW0NpcmN1bGFyJykpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnbWVzc2FnZSBjb2RlcycsICgpID0+IHtcbiAgICB0ZXN0KCd2YWxpZGF0ZXMgbWVzc2FnZSBjb2RlcyBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgICAvLyBWYWxpZCBjb2Rlc1xuICAgICAgZXhwZWN0KCgpID0+IGVycm9yKHsgbWVzc2FnZTogJ3Rlc3QnLCBjb2RlOiAnQ0RLX1RPT0xLSVRfRTAwMDEnIH0pKS5ub3QudG9UaHJvdygpO1xuICAgICAgZXhwZWN0KCgpID0+IHdhcm5pbmcoeyBtZXNzYWdlOiAndGVzdCcsIGNvZGU6ICdDREtfQVNTRVRTX1c0OTk5JyB9KSkubm90LnRvVGhyb3coKTtcbiAgICAgIGV4cGVjdCgoKSA9PiBpbmZvKHsgbWVzc2FnZTogJ3Rlc3QnLCBjb2RlOiAnQ0RLX1NES19JMDAwMCcgfSkpLm5vdC50b1Rocm93KCk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCd1c2VzIGRlZmF1bHQgY29kZXMgd2hlbiBub25lIHByb3ZpZGVkJywgKCkgPT4ge1xuICAgICAgZXJyb3IoJ3Rlc3QgZXJyb3InKTtcbiAgICAgIGV4cGVjdChtb2NrU3RkZXJyKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3Quc3RyaW5nQ29udGFpbmluZygndGVzdCBlcnJvcicpKTtcbiAgICAgIC8vIFdvdWxkIG5lZWQgdG8gbW9kaWZ5IHRoZSBjb2RlIHRvIGV4cG9zZSB0aGUgYWN0dWFsIG1lc3NhZ2UgY29kZSBmb3IgdmVyaWZpY2F0aW9uXG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdDSSBtb2RlIGJlaGF2aW9yJywgKCkgPT4ge1xuICAgIHRlc3QoJ2NvcnJlY3RseSBzd2l0Y2hlcyBiZXR3ZWVuIHN0ZG91dCBhbmQgc3RkZXJyIGJhc2VkIG9uIENJIG1vZGUnLCAoKSA9PiB7XG4gICAgICBpb0hvc3QuaXNDSSA9IHRydWU7XG4gICAgICB3YXJuaW5nKCd3YXJuaW5nIGluIENJJyk7XG4gICAgICBzdWNjZXNzKCdzdWNjZXNzIGluIENJJyk7XG4gICAgICBlcnJvcignZXJyb3IgaW4gQ0knKTtcblxuICAgICAgZXhwZWN0KG1vY2tTdGRvdXQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCd3YXJuaW5nIGluIENJXFxuJyk7XG4gICAgICBleHBlY3QobW9ja1N0ZG91dCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ3N1Y2Nlc3MgaW4gQ0lcXG4nKTtcbiAgICAgIGV4cGVjdChtb2NrU3RkZXJyKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnZXJyb3IgaW4gQ0lcXG4nKTtcblxuICAgICAgaW9Ib3N0LmlzQ0kgPSBmYWxzZTtcbiAgICAgIHdhcm5pbmcoJ3dhcm5pbmcgbm90IGluIENJJyk7XG4gICAgICBzdWNjZXNzKCdzdWNjZXNzIG5vdCBpbiBDSScpO1xuICAgICAgZXJyb3IoJ2Vycm9yIG5vdCBpbiBDSScpO1xuXG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ3dhcm5pbmcgbm90IGluIENJXFxuJyk7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ3N1Y2Nlc3Mgbm90IGluIENJXFxuJyk7XG4gICAgICBleHBlY3QobW9ja1N0ZGVycikudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ2Vycm9yIG5vdCBpbiBDSVxcbicpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19