testcafe 2.3.1-rc.2 → 2.4.0-rc.1

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 (57) hide show
  1. package/CHANGELOG.md +15 -1
  2. package/LICENSE +1 -1
  3. package/README.md +40 -46
  4. package/lib/api/test-controller/execution-context.js +4 -2
  5. package/lib/browser/connection/gateway.js +43 -1
  6. package/lib/browser/connection/index.js +24 -10
  7. package/lib/browser/connection/service-routes.js +3 -1
  8. package/lib/browser/provider/built-in/dedicated/chrome/index.js +19 -5
  9. package/lib/browser/provider/index.js +4 -1
  10. package/lib/client/automation/deps/hammerhead.js +24 -0
  11. package/lib/client/automation/deps/testcafe-core.js +24 -0
  12. package/lib/client/automation/index.js +251 -54
  13. package/lib/client/automation/index.min.js +1 -1
  14. package/lib/client/automation/playback/press/get-key-info.js +44 -0
  15. package/lib/client/automation/playback/press/utils.js +142 -0
  16. package/lib/client/automation/utils/get-key-code.js +15 -0
  17. package/lib/client/automation/utils/get-key-identifier.js +14 -0
  18. package/lib/client/automation/utils/is-letter.js +7 -0
  19. package/lib/client/automation/utils/key-identifier-maps.js +93 -0
  20. package/lib/client/browser/idle-page/index.js +7 -2
  21. package/lib/client/core/index.js +46 -3
  22. package/lib/client/core/index.min.js +1 -1
  23. package/lib/client/driver/index.js +45 -17
  24. package/lib/client/driver/index.min.js +1 -1
  25. package/lib/client/test-run/index.js.mustache +34 -30
  26. package/lib/client/ui/index.js +3230 -48
  27. package/lib/client/ui/index.min.js +1 -1
  28. package/lib/client/ui/sprite.svg +15 -0
  29. package/lib/client/ui/styles.css +183 -41
  30. package/lib/live/test-runner.js +4 -2
  31. package/lib/proxyless/api-base.js +3 -2
  32. package/lib/proxyless/client/event-descriptor.js +67 -0
  33. package/lib/proxyless/client/input.js +36 -0
  34. package/lib/proxyless/client/key-press/utils.js +31 -0
  35. package/lib/proxyless/client/types.js +1 -1
  36. package/lib/proxyless/client/utils.js +32 -2
  37. package/lib/proxyless/cookie-provider.js +31 -3
  38. package/lib/proxyless/errors.js +20 -0
  39. package/lib/proxyless/index.js +2 -10
  40. package/lib/proxyless/request-pipeline/index.js +32 -3
  41. package/lib/proxyless/resource-injector.js +5 -4
  42. package/lib/proxyless/types.js +3 -2
  43. package/lib/proxyless/utils/cdp.js +4 -3
  44. package/lib/reporter/index.js +2 -1
  45. package/lib/runner/bootstrapper.js +8 -1
  46. package/lib/runner/index.js +57 -44
  47. package/lib/shared/utils/is-file-protocol.js +2 -2
  48. package/lib/test-run/commands/actions.js +2 -2
  49. package/lib/test-run/cookies/base.js +4 -1
  50. package/lib/test-run/cookies/provider.js +9 -2
  51. package/lib/test-run/execute-js-expression/index.js +4 -2
  52. package/lib/test-run/index.js +17 -12
  53. package/lib/test-run/request/create-request-options.js +23 -12
  54. package/lib/test-run/request/send.js +2 -3
  55. package/lib/utils/check-is-vm.js +58 -0
  56. package/package.json +9 -6
  57. package/lib/proxyless/client/event-simulator.js +0 -40
@@ -43,6 +43,8 @@ class BrowserConnection extends events_1.EventEmitter {
43
43
  this.openFileProtocolRelativeUrl = '';
44
44
  this.openFileProtocolUrl = '';
45
45
  this.dispatchProxylessEventRelativeUrl = '';
46
+ this.dispatchProxylessEventSequenceRelativeUrl = '';
47
+ this.parseSelectorRelativeUrl = '';
46
48
  this.osInfo = null;
47
49
  this.HEARTBEAT_TIMEOUT = browser_connection_timeouts_1.HEARTBEAT_TIMEOUT;
48
50
  this.BROWSER_CLOSE_TIMEOUT = browser_connection_timeouts_1.BROWSER_CLOSE_TIMEOUT;
@@ -55,8 +57,10 @@ class BrowserConnection extends events_1.EventEmitter {
55
57
  this.testRunAborted = false;
56
58
  this.warningLog = new warning_log_1.default(null, warning_log_1.default.createAddWarningCallback(messageBus));
57
59
  this.debugLogger = (0, debug_1.default)(getBrowserConnectionDebugScope(this.id));
58
- if (messageBus)
60
+ if (messageBus) {
59
61
  this.messageBus = messageBus;
62
+ this.initMessageBus();
63
+ }
60
64
  this.browserInfo = browserInfo;
61
65
  this.browserInfo.userAgentProviderMetaInfo = '';
62
66
  this.provider = browserInfo.provider;
@@ -87,22 +91,29 @@ class BrowserConnection extends events_1.EventEmitter {
87
91
  this.closeWindowUrl = `${service_routes_1.default.closeWindow}/${this.id}`;
88
92
  this.openFileProtocolRelativeUrl = `${service_routes_1.default.openFileProtocol}/${this.id}`;
89
93
  this.dispatchProxylessEventRelativeUrl = `${service_routes_1.default.dispatchProxylessEvent}/${this.id}`;
94
+ this.dispatchProxylessEventSequenceRelativeUrl = `${service_routes_1.default.dispatchProxylessEventSequence}/${this.id}`;
95
+ this.parseSelectorRelativeUrl = `${service_routes_1.default.parseSelector}/${this.id}`;
90
96
  this.idleUrl = proxy.resolveRelativeServiceUrl(this.idleRelativeUrl);
91
97
  this.heartbeatUrl = proxy.resolveRelativeServiceUrl(this.heartbeatRelativeUrl);
92
98
  this.statusUrl = proxy.resolveRelativeServiceUrl(this.statusRelativeUrl);
93
99
  this.statusDoneUrl = proxy.resolveRelativeServiceUrl(this.statusDoneRelativeUrl);
94
100
  this.openFileProtocolUrl = proxy.resolveRelativeServiceUrl(this.openFileProtocolRelativeUrl);
95
101
  }
102
+ initMessageBus() {
103
+ this.warningLog.callback = warning_log_1.default.createAddWarningCallback(this._messageBus);
104
+ this.assignTestRunStartEventListener();
105
+ this.emit('message-bus-initialized', this._messageBus);
106
+ }
107
+ assignTestRunStartEventListener() {
108
+ if (!this._messageBus)
109
+ return;
110
+ this._messageBus.on('test-run-start', testRun => {
111
+ if (testRun.browserConnection.id === this.id)
112
+ this._currentTestRun = testRun;
113
+ });
114
+ }
96
115
  set messageBus(messageBus) {
97
116
  this._messageBus = messageBus;
98
- this.warningLog.callback = warning_log_1.default.createAddWarningCallback(this._messageBus);
99
- if (messageBus) {
100
- messageBus.on('test-run-start', testRun => {
101
- if (testRun.browserConnection.id === this.id)
102
- this._currentTestRun = testRun;
103
- });
104
- }
105
- this.emit('message-bus-initialized', messageBus);
106
117
  }
107
118
  get messageBus() {
108
119
  return this._messageBus;
@@ -406,6 +417,9 @@ class BrowserConnection extends events_1.EventEmitter {
406
417
  async dispatchProxylessEvent(type, options) {
407
418
  return this.provider.dispatchProxylessEvent(this.id, type, options);
408
419
  }
420
+ async dispatchProxylessEventSequence(eventSequence) {
421
+ return this.provider.dispatchProxylessEventSequence(this.id, eventSequence);
422
+ }
409
423
  async canUseDefaultWindowActions() {
410
424
  return this.provider.canUseDefaultWindowActions(this.id);
411
425
  }
@@ -417,4 +431,4 @@ class BrowserConnection extends events_1.EventEmitter {
417
431
  }
418
432
  exports.default = BrowserConnection;
419
433
  module.exports = exports.default;
420
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYnJvd3Nlci9jb25uZWN0aW9uL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsa0RBQTBCO0FBQzFCLDRFQUEyQztBQUMzQyxtQ0FBc0M7QUFDdEMsd0RBQWdDO0FBQ2hDLG1DQUF3QztBQUN4QyxtRUFLc0M7QUFDdEMsMkRBQXNEO0FBQ3RELHNFQUE2QztBQUM3QyxtQ0FBZ0M7QUFDaEMsd0RBQWdDO0FBQ2hDLHNEQUErQztBQUMvQywwRUFBaUQ7QUFDakQsa0RBQWtFO0FBQ2xFLDhDQUFvRDtBQUdwRCxrRkFBeUQ7QUFHekQsc0VBQThDO0FBQzlDLHlGQU1pRDtBQUVqRCx3REFBaUQ7QUFRakQsTUFBTSw4QkFBOEIsR0FBRyxDQUFDLEVBQVUsRUFBVSxFQUFFLENBQUMsK0JBQStCLEVBQUUsRUFBRSxDQUFDO0FBRW5HLE1BQU0sa0JBQWtCLEdBQUcsSUFBQSw2QkFBSSxFQUFDLG9EQUFvRCxDQUFDLENBQUM7QUE2Q3RGLE1BQXFCLGlCQUFrQixTQUFRLHFCQUFZO0lBNkN2RCxZQUNJLE9BQWlDLEVBQ2pDLFdBQXdCLEVBQ3hCLFNBQWtCLEVBQ2xCLHNCQUFzQixHQUFHLEtBQUssRUFDOUIsU0FBUyxHQUFHLEtBQUssRUFDakIsVUFBdUI7UUFDdkIsS0FBSyxFQUFFLENBQUM7UUEzQ0osb0JBQWUsR0FBbUIsSUFBSSxDQUFDO1FBU3hDLFFBQUcsR0FBRyxFQUFFLENBQUM7UUFDVCxZQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ1osa0JBQWEsR0FBRyxFQUFFLENBQUM7UUFDbkIsa0JBQWEsR0FBRyxFQUFFLENBQUM7UUFDcEIsaUJBQVksR0FBRyxFQUFFLENBQUM7UUFDbEIsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNmLHNCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUN2QixtQkFBYyxHQUFHLEVBQUUsQ0FBQztRQUNwQixrQkFBYSxHQUFHLEVBQUUs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QUUsT0FBWTtRQUM5RCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVNLEtBQUssQ0FBQywwQkFBMEI7UUFDbkMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRU0sT0FBTztRQUNWLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxnQkFBdUIsQ0FBQyxLQUFLO1lBQ2hELElBQUksQ0FBQyxNQUFNLEtBQUssZ0JBQXVCLENBQUMsTUFBTTtZQUM5QyxJQUFJLENBQUMsTUFBTSxLQUFLLGdCQUF1QixDQUFDLE9BQU8sQ0FBQztJQUN4RCxDQUFDO0NBQ0o7QUEvaEJELG9DQStoQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IHRpbWVMaW1pdCBmcm9tICd0aW1lLWxpbWl0LXByb21pc2UnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcbmltcG9ydCBNdXN0YWNoZSBmcm9tICdtdXN0YWNoZSc7XG5pbXBvcnQgeyBwdWxsIGFzIHJlbW92ZSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuICAgIGNhbGN1bGF0ZVByZXR0eVVzZXJBZ2VudCxcbiAgICBleHRyYWN0TWV0YUluZm8sXG4gICAgUGFyc2VkVXNlckFnZW50LFxuICAgIHBhcnNlVXNlckFnZW50LFxufSBmcm9tICcuLi8uLi91dGlscy9wYXJzZS11c2VyLWFnZW50JztcbmltcG9ydCB7IHJlYWRTeW5jIGFzIHJlYWQgfSBmcm9tICdyZWFkLWZpbGUtcmVsYXRpdmUnO1xuaW1wb3J0IHByb21pc2lmeUV2ZW50IGZyb20gJ3Byb21pc2lmeS1ldmVudCc7XG5pbXBvcnQgeyBuYW5vaWQgfSBmcm9tICduYW5vaWQnO1xuaW1wb3J0IENPTU1BTkQgZnJvbSAnLi9jb21tYW5kJztcbmltcG9ydCBCcm93c2VyQ29ubmVjdGlvblN0YXR1cyBmcm9tICcuL3N0YXR1cyc7XG5pbXBvcnQgSGVhcnRiZWF0U3RhdHVzIGZyb20gJy4vaGVhcnRiZWF0LXN0YXR1cyc7XG5pbXBvcnQgeyBHZW5lcmFsRXJyb3IsIFRpbWVvdXRFcnJvciB9IGZyb20gJy4uLy4uL2Vycm9ycy9ydW50aW1lJztcbmltcG9ydCB7IFJVTlRJTUVfRVJST1JTIH0gZnJvbSAnLi4vLi4vZXJyb3JzL3R5cGVzJztcbmltcG9ydCBCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXkgZnJvbSAnLi9nYXRld2F5JztcbmltcG9ydCBCcm93c2VySm9iIGZyb20gJy4uLy4uL3J1bm5lci9icm93c2VyLWpvYic7XG5pbXBvcnQgV2FybmluZ0xvZyBmcm9tICcuLi8uLi9ub3RpZmljYXRpb25zL3dhcm5pbmctbG9nJztcbmltcG9ydCBCcm93c2VyUHJvdmlkZXIgZnJvbSAnLi4vcHJvdmlkZXInO1xuaW1wb3J0IHsgT1NJbmZvIH0gZnJvbSAnZ2V0LW9zLWluZm8nO1xuaW1wb3J0IFNFUlZJQ0VfUk9VVEVTIGZyb20gJy4vc2VydmljZS1yb3V0ZXMnO1xuaW1wb3J0IHtcbiAgICBCUk9XU0VSX1JFU1RBUlRfVElNRU9VVCxcbiAgICBCUk9XU0VSX0NMT1NFX1RJTUVPVVQsXG4gICAgSEVBUlRCRUFUX1RJTUVPVVQsXG4gICAgTE9DQUxfQlJPV1NFUl9JTklUX1RJTUVPVVQsXG4gICAgUkVNT1RFX0JST1dTRVJfSU5JVF9USU1FT1VULFxufSBmcm9tICcuLi8uLi91dGlscy9icm93c2VyLWNvbm5lY3Rpb24tdGltZW91dHMnO1xuaW1wb3J0IE1lc3NhZ2VCdXMgZnJvbSAnLi4vLi4vdXRpbHMvbWVzc2FnZS1idXMnO1xuaW1wb3J0IEJyb3dzZXJDb25uZWN0aW9uVHJhY2tlciBmcm9tICcuL3RyYWNrZXInO1xuaW1wb3J0IFRlc3RSdW4gZnJvbSAnLi4vLi4vdGVzdC1ydW4nO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgVGVzdFJ1biBhcyBMZWdhY3lUZXN0UnVuIH0gZnJvbSAndGVzdGNhZmUtbGVnYWN5LWFwaSc7XG5pbXBvcnQgeyBQcm94eSB9IGZyb20gJ3Rlc3RjYWZlLWhhbW1lcmhlYWQnO1xuaW1wb3J0IHsgTmV4dFRlc3RSdW5JbmZvLCBPcGVuQnJvd3NlckFkZGl0aW9uYWxPcHRpb25zIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3R5cGVzJztcbmltcG9ydCB7IEV2ZW50VHlwZSB9IGZyb20gJy4uLy4uL3Byb3h5bGVzcy90eXBlcyc7XG5cbmNvbnN0IGdldEJyb3dzZXJDb25uZWN0aW9uRGVidWdTY29wZSA9IChpZDogc3RyaW5nKTogc3RyaW5nID0+IGB0ZXN0Y2FmZTpicm93c2VyOmNvbm5lY3Rpb246JHtpZH1gO1xuXG5jb25zdCBJRExFX1BBR0VfVEVNUExBVEUgPSByZWFkKCcuLi8uLi9jbGllbnQvYnJvd3Nlci9pZGxlLXBhZ2UvaW5kZXguaHRtbC5tdXN0YWNoZScpO1xuXG5cbmludGVyZmFjZSBEaXNjb25uZWN0aW9uUHJvbWlzZTxUPiBleHRlbmRzIFByb21pc2U8VD4ge1xuICAgIHJlc29sdmU6IEZ1bmN0aW9uO1xuICAgIHJlamVjdDogRnVuY3Rpb247XG59XG5cbmludGVyZmFjZSBCcm93c2VyQ29ubmVjdGlvblN0YXR1c1Jlc3VsdCB7XG4gICAgY21kOiBzdHJpbmc7XG4gICAgdXJsOiBzdHJpbmc7XG4gICAgdGVzdFJ1bklkOiBzdHJpbmcgfCBudWxsO1xufVxuXG5pbnRlcmZhY2UgSGVhcnRiZWF0U3RhdHVzUmVzdWx0IHtcbiAgICBjb2RlOiBIZWFydGJlYXRTdGF0dXM7XG4gICAgdXJsOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBJbml0U2NyaXB0IHtcbiAgICBjb2RlOiBzdHJpbmcgfCBudWxsO1xufVxuXG5pbnRlcmZhY2UgSW5pdFNjcmlwdFRhc2sgZXh0ZW5kcyBJbml0U2NyaXB0IHtcbiAgICByZXNvbHZlOiBGdW5jdGlvbjtcbn1cblxuaW50ZXJmYWNlIFByb3ZpZGVyTWV0YUluZm9PcHRpb25zIHtcbiAgICBhcHBlbmRUb1VzZXJBZ2VudD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnJvd3NlckNsb3NpbmdJbmZvIHtcbiAgICBpc1Jlc3RhcnRpbmc/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJyb3dzZXJJbmZvIHtcbiAgICBhbGlhczogc3RyaW5nO1xuICAgIGJyb3dzZXJOYW1lOiBzdHJpbmc7XG4gICAgYnJvd3Nlck9wdGlvbjogdW5rbm93bjtcbiAgICBwcm92aWRlck5hbWU6IHN0cmluZztcbiAgICBwcm92aWRlcjogQnJvd3NlclByb3ZpZGVyO1xuICAgIHVzZXJBZ2VudFByb3ZpZGVyTWV0YUluZm86IHN0cmluZztcbiAgICBwYXJzZWRVc2VyQWdlbnQ6IFBhcnNlZFVzZXJBZ2VudDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnJvd3NlckNvbm5lY3Rpb24gZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICAgIHB1YmxpYyBwZXJtYW5lbnQ6IGJvb2xlYW47XG4gICAgcHVibGljIHByZXZpb3VzQWN0aXZlV2luZG93SWQ6IHN0cmluZyB8IG51bGw7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkaXNhYmxlTXVsdGlwbGVXaW5kb3dzOiBib29sZWFuO1xuICAgIHB1YmxpYyByZWFkb25seSBwcm94eWxlc3M6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSByZWFkb25seSBIRUFSVEJFQVRfVElNRU9VVDogbnVtYmVyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgQlJPV1NFUl9DTE9TRV9USU1FT1VUOiBudW1iZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSBCUk9XU0VSX1JFU1RBUlRfVElNRU9VVDogbnVtYmVyO1xuICAgIHB1YmxpYyByZWFkb25seSBpZDogc3RyaW5nO1xuICAgIHByaXZhdGUgX2N1cnJlbnRUZXN0UnVuOiBUZXN0UnVuIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSByZWFkb25seSBqb2JRdWV1ZTogQnJvd3NlckpvYltdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaW5pdFNjcmlwdHNRdWV1ZTogSW5pdFNjcmlwdFRhc2tbXTtcbiAgICBwdWJsaWMgYnJvd3NlckNvbm5lY3Rpb25HYXRld2F5OiBCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXk7XG4gICAgcHJpdmF0ZSBkaXNjb25uZWN0aW9uUHJvbWlzZTogRGlzY29ubmVjdGlvblByb21pc2U8dm9pZD4gfCBudWxsO1xuICAgIHByaXZhdGUgdGVzdFJ1bkFib3J0ZWQ6IGJvb2xlYW47XG4gICAgcHVibGljIHN0YXR1czogQnJvd3NlckNvbm5lY3Rpb25TdGF0dXM7XG4gICAgcHJpdmF0ZSBoZWFydGJlYXRUaW1lb3V0OiBOb2RlSlMuVGltZW91dCB8IG51bGw7XG4gICAgcHJpdmF0ZSBwZW5kaW5nVGVzdFJ1bkluZm86IE5leHRUZXN0UnVuSW5mbyB8IG51bGw7XG4gICAgcHVibGljIHVybCA9ICcnO1xuICAgIHB1YmxpYyBpZGxlVXJsID0gJyc7XG4gICAgcHJpdmF0ZSBmb3JjZWRJZGxlVXJsID0gJyc7XG4gICAgcHJpdmF0ZSBpbml0U2NyaXB0VXJsID0gJyc7XG4gICAgcHVibGljIGhlYXJ0YmVhdFVybCA9ICcnO1xuICAgIHB1YmxpYyBzdGF0dXNVcmwgPSAnJztcbiAgICBwdWJsaWMgYWN0aXZlV2luZG93SWRVcmwgPSAnJztcbiAgICBwdWJsaWMgY2xvc2VXaW5kb3dVcmwgPSAnJztcbiAgICBwdWJsaWMgc3RhdHVzRG9uZVVybCA9ICcnO1xuICAgIHB1YmxpYyBoZWFydGJlYXRSZWxhdGl2ZVVybCA9ICcnO1xuICAgIHB1YmxpYyBzdGF0dXNSZWxhdGl2ZVVybCA9ICcnO1xuICAgIHB1YmxpYyBzdGF0dXNEb25lUmVsYXRpdmVVcmwgPSAnJztcbiAgICBwdWJsaWMgaWRsZVJlbGF0aXZlVXJsID0gJyc7XG4gICAgcHVibGljIG9wZW5GaWxlUHJvdG9jb2xSZWxhdGl2ZVVybCA9ICcnO1xuICAgIHB1YmxpYyBvcGVuRmlsZVByb3RvY29sVXJsID0gJyc7XG4gICAgcHVibGljIGRpc3BhdGNoUHJveHlsZXNzRXZlbnRSZWxhdGl2ZVVybCA9ICcnO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVidWdMb2dnZXI6IGRlYnVnLkRlYnVnZ2VyO1xuICAgIHByaXZhdGUgb3NJbmZvOiBPU0luZm8gfCBudWxsID0gbnVsbDtcblxuICAgIHB1YmxpYyByZWFkb25seSB3YXJuaW5nTG9nOiBXYXJuaW5nTG9nO1xuICAgIHByaXZhdGUgX21lc3NhZ2VCdXM/OiBNZXNzYWdlQnVzO1xuXG4gICAgcHVibGljIGlkbGU6IGJvb2xlYW47XG5cbiAgICBwdWJsaWMgYnJvd3NlckluZm86IEJyb3dzZXJJbmZvO1xuICAgIHB1YmxpYyBwcm92aWRlcjogYW55O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yIChcbiAgICAgICAgZ2F0ZXdheTogQnJvd3NlckNvbm5lY3Rpb25HYXRld2F5LFxuICAgICAgICBicm93c2VySW5mbzogQnJvd3NlckluZm8sXG4gICAgICAgIHBlcm1hbmVudDogYm9vbGVhbixcbiAgICAgICAgZGlzYWJsZU11bHRpcGxlV2luZG93cyA9IGZhbHNlLFxuICAgICAgICBwcm94eWxlc3MgPSBmYWxzZSxcbiAgICAgICAgbWVzc2FnZUJ1cz86IE1lc3NhZ2VCdXMpIHtcbiAgICAgICAgc3VwZXIoKTtcblxuICAgICAgICB0aGlzLkhFQVJUQkVBVF9USU1FT1VUICAgICAgID0gSEVBUlRCRUFUX1RJTUVPVVQ7XG4gICAgICAgIHRoaXMuQlJPV1NFUl9DTE9TRV9USU1FT1VUICAgPSBCUk9XU0VSX0NMT1NFX1RJTUVPVVQ7XG4gICAgICAgIHRoaXMuQlJPV1NFUl9SRVNUQVJUX1RJTUVPVVQgPSBCUk9XU0VSX1JFU1RBUlRfVElNRU9VVDtcblxuICAgICAgICB0aGlzLmlkICAgICAgICAgICAgICAgICAgICAgICA9IEJyb3dzZXJDb25uZWN0aW9uLl9nZW5lcmF0ZUlkKCk7XG4gICAgICAgIHRoaXMuam9iUXVldWUgICAgICAgICAgICAgICAgID0gW107XG4gICAgICAgIHRoaXMuaW5pdFNjcmlwdHNRdWV1ZSAgICAgICAgID0gW107XG4gICAgICAgIHRoaXMuYnJvd3NlckNvbm5lY3Rpb25HYXRld2F5ID0gZ2F0ZXdheTtcbiAgICAgICAgdGhpcy5kaXNjb25uZWN0aW9uUHJvbWlzZSAgICAgPSBudWxsO1xuICAgICAgICB0aGlzLnRlc3RSdW5BYm9ydGVkICAgICAgICAgICA9IGZhbHNlO1xuICAgICAgICB0aGlzLndhcm5pbmdMb2cgICAgICAgICAgICAgICA9IG5ldyBXYXJuaW5nTG9nKG51bGwsIFdhcm5pbmdMb2cuY3JlYXRlQWRkV2FybmluZ0NhbGxiYWNrKG1lc3NhZ2VCdXMpKTtcbiAgICAgICAgdGhpcy5kZWJ1Z0xvZ2dlciAgICAgICAgICAgICAgPSBkZWJ1ZyhnZXRCcm93c2VyQ29ubmVjdGlvbkRlYnVnU2NvcGUodGhpcy5pZCkpO1xuXG4gICAgICAgIGlmIChtZXNzYWdlQnVzKVxuICAgICAgICAgICAgdGhpcy5tZXNzYWdlQnVzID0gbWVzc2FnZUJ1cztcblxuICAgICAgICB0aGlzLmJyb3dzZXJJbmZvICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBicm93c2VySW5mbztcbiAgICAgICAgdGhpcy5icm93c2VySW5mby51c2VyQWdlbnRQcm92aWRlck1ldGFJbmZvID0gJyc7XG5cbiAgICAgICAgdGhpcy5wcm92aWRlciA9IGJyb3dzZXJJbmZvLnByb3ZpZGVyO1xuXG4gICAgICAgIHRoaXMucGVybWFuZW50ICAgICAgICAgICAgICA9IHBlcm1hbmVudDtcbiAgICAgICAgdGhpcy5zdGF0dXMgICAgICAgICAgICAgICAgID0gQnJvd3NlckNvbm5lY3Rpb25TdGF0dXMudW5pbml0aWFsaXplZDtcbiAgICAgICAgdGhpcy5pZGxlICAgICAgICAgICAgICAgICAgID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5oZWFydGJlYXRUaW1lb3V0ICAgICAgID0gbnVsbDtcbiAgICAgICAgdGhpcy5wZW5kaW5nVGVzdFJ1bkluZm8gICAgID0gbnVsbDtcbiAgICAgICAgdGhpcy5kaXNhYmxlTXVsdGlwbGVXaW5kb3dzID0gZGlzYWJsZU11bHRpcGxlV2luZG93cztcbiAgICAgICAgdGhpcy5wcm94eWxlc3MgICAgICAgICAgICAgID0gcHJveHlsZXNzO1xuXG4gICAgICAgIHRoaXMuX2J1aWxkQ29tbXVuaWNhdGlvblVybHMoZ2F0ZXdheS5wcm94eSk7XG4gICAgICAgIHRoaXMuX3NldEV2ZW50SGFuZGxlcnMoKTtcblxuICAgICAgICBCcm93c2VyQ29ubmVjdGlvblRyYWNrZXIuYWRkKHRoaXMpO1xuXG4gICAgICAgIHRoaXMucHJldmlvdXNBY3RpdmVXaW5kb3dJZCA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5icm93c2VyQ29ubmVjdGlvbkdhdGV3YXkuc3RhcnRTZXJ2aW5nQ29ubmVjdGlvbih0aGlzKTtcblxuICAgICAgICAvLyBOT1RFOiBHaXZlIGEgY2FsbGVyIHRpbWUgdG8gYXNzaWduIGV2ZW50IGxpc3RlbmVyc1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHRoaXMuX3J1bkJyb3dzZXIoKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfYnVpbGRDb21tdW5pY2F0aW9uVXJscyAocHJveHk6IFByb3h5KTogdm9pZCB7XG4gICAgICAgIHRoaXMudXJsICAgICAgICAgICAgICAgPSBwcm94eS5yZXNvbHZlUmVsYXRpdmVTZXJ2aWNlVXJsKGAke1NFUlZJQ0VfUk9VVEVTLmNvbm5lY3R9LyR7dGhpcy5pZH1gKTtcbiAgICAgICAgdGhpcy5mb3JjZWRJZGxlVXJsICAgICA9IHByb3h5LnJlc29sdmVSZWxhdGl2ZVNlcnZpY2VVcmwoYCR7U0VSVklDRV9ST1VURVMuaWRsZUZvcmNlZH0vJHt0aGlzLmlkfWApO1xuICAgICAgICB0aGlzLmluaXRTY3JpcHRVcmwgICAgID0gcHJveHkucmVzb2x2ZVJlbGF0aXZlU2VydmljZVVybChgJHtTRVJWSUNFX1JPVVRFUy5pbml0U2NyaXB0fS8ke3RoaXMuaWR9YCk7XG5cbiAgICAgICAgdGhpcy5oZWFydGJlYXRSZWxhdGl2ZVVybCAgICAgICAgICAgICAgPSBgJHtTRVJWSUNFX1JPVVRFUy5oZWFydGJlYXR9LyR7dGhpcy5pZH1gO1xuICAgICAgICB0aGlzLnN0YXR1c1JlbGF0aXZlVXJsICAgICAgICAgICAgICAgICA9IGAke1NFUlZJQ0VfUk9VVEVTLnN0YXR1c30vJHt0aGlzLmlkfWA7XG4gICAgICAgIHRoaXMuc3RhdHVzRG9uZVJlbGF0aXZlVXJsICAgICAgICAgICAgID0gYCR7U0VSVklDRV9ST1VURVMuc3RhdHVzRG9uZX0vJHt0aGlzLmlkfWA7XG4gICAgICAgIHRoaXMuaWRsZVJlbGF0aXZlVXJsICAgICAgICAgICAgICAgICAgID0gYCR7U0VSVklDRV9ST1VURVMuaWRsZX0vJHt0aGlzLmlkfWA7XG4gICAgICAgIHRoaXMuYWN0aXZlV2luZG93SWRVcmwgICAgICAgICAgICAgICAgID0gYCR7U0VSVklDRV9ST1VURVMuYWN0aXZlV2luZG93SWR9LyR7dGhpcy5pZH1gO1xuICAgICAgICB0aGlzLmNsb3NlV2luZG93VXJsICAgICAgICAgICAgICAgICAgICA9IGAke1NFUlZJQ0VfUk9VVEVTLmNsb3NlV2luZG93fS8ke3RoaXMuaWR9YDtcbiAgICAgICAgdGhpcy5vcGVuRmlsZVByb3RvY29sUmVsYXRpdmVVcmwgICAgICAgPSBgJHtTRVJWSUNFX1JPVVRFUy5vcGVuRmlsZVByb3RvY29sfS8ke3RoaXMuaWR9YDtcbiAgICAgICAgdGhpcy5kaXNwYXRjaFByb3h5bGVzc0V2ZW50UmVsYXRpdmVVcmwgPSBgJHtTRVJWSUNFX1JPVVRFUy5kaXNwYXRjaFByb3h5bGVzc0V2ZW50fS8ke3RoaXMuaWR9YDtcblxuICAgICAgICB0aGlzLmlkbGVVcmwgICAgICAgICAgICAgPSBwcm94eS5yZXNvbHZlUmVsYXRpdmVTZXJ2aWNlVXJsKHRoaXMuaWRsZVJlbGF0aXZlVXJsKTtcbiAgICAgICAgdGhpcy5oZWFydGJlYXRVcmwgICAgICAgID0gcHJveHkucmVzb2x2ZVJlbGF0aXZlU2VydmljZVVybCh0aGlzLmhlYXJ0YmVhdFJlbGF0aXZlVXJsKTtcbiAgICAgICAgdGhpcy5zdGF0dXNVcmwgICAgICAgICAgID0gcHJveHkucmVzb2x2ZVJlbGF0aXZlU2VydmljZVVybCh0aGlzLnN0YXR1c1JlbGF0aXZlVXJsKTtcbiAgICAgICAgdGhpcy5zdGF0dXNEb25lVXJsICAgICAgID0gcHJveHkucmVzb2x2ZVJlbGF0aXZlU2VydmljZVVybCh0aGlzLnN0YXR1c0RvbmVSZWxhdGl2ZVVybCk7XG4gICAgICAgIHRoaXMub3BlbkZpbGVQcm90b2NvbFVybCA9IHByb3h5LnJlc29sdmVSZWxhdGl2ZVNlcnZpY2VVcmwodGhpcy5vcGVuRmlsZVByb3RvY29sUmVsYXRpdmVVcmwpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgbWVzc2FnZUJ1cyAobWVzc2FnZUJ1czogTWVzc2FnZUJ1cyB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl9tZXNzYWdlQnVzICAgICAgICAgPSBtZXNzYWdlQnVzO1xuICAgICAgICB0aGlzLndhcm5pbmdMb2cuY2FsbGJhY2sgPSBXYXJuaW5nTG9nLmNyZWF0ZUFkZFdhcm5pbmdDYWxsYmFjayh0aGlzLl9tZXNzYWdlQnVzKTtcblxuICAgICAgICBpZiAobWVzc2FnZUJ1cykge1xuICAgICAgICAgICAgbWVzc2FnZUJ1cy5vbigndGVzdC1ydW4tc3RhcnQnLCB0ZXN0UnVuID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGVzdFJ1bi5icm93c2VyQ29ubmVjdGlvbi5pZCA9PT0gdGhpcy5pZClcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3VycmVudFRlc3RSdW4gPSB0ZXN0UnVuO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmVtaXQoJ21lc3NhZ2UtYnVzLWluaXRpYWxpemVkJywgbWVzc2FnZUJ1cyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtZXNzYWdlQnVzICgpOiBNZXNzYWdlQnVzIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lc3NhZ2VCdXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2V0RXZlbnRIYW5kbGVycyAoKTogdm9pZCB7XG4gICAgICAgIHRoaXMub24oJ2Vycm9yJywgZSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRlYnVnTG9nZ2VyKGUpO1xuICAgICAgICAgICAgdGhpcy5fZm9yY2VJZGxlKCk7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBpbiBCcm93c2VyQ29ubmVjdGlvblN0YXR1cykge1xuICAgICAgICAgICAgY29uc3Qgc3RhdHVzID0gQnJvd3NlckNvbm5lY3Rpb25TdGF0dXNbbmFtZSBhcyBrZXlvZiB0eXBlb2YgQnJvd3NlckNvbm5lY3Rpb25TdGF0dXNdO1xuXG4gICAgICAgICAgICB0aGlzLm9uKHN0YXR1cywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVidWdMb2dnZXIoYHN0YXR1cyBjaGFuZ2VkIHRvICcke3N0YXR1c30nYCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIF9nZW5lcmF0ZUlkICgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gbmFub2lkKDcpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldEFkZGl0aW9uYWxCcm93c2VyT3B0aW9ucyAoKTogT3BlbkJyb3dzZXJBZGRpdGlvbmFsT3B0aW9ucyB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBkaXNhYmxlTXVsdGlwbGVXaW5kb3dzOiB0aGlzLmRpc2FibGVNdWx0aXBsZVdpbmRvd3MsXG4gICAgICAgIH0gYXMgT3BlbkJyb3dzZXJBZGRpdGlvbmFsT3B0aW9ucztcblxuICAgICAgICBpZiAodGhpcy5wcm94eWxlc3MpIHtcbiAgICAgICAgICAgIG9wdGlvbnMucHJveHlsZXNzID0ge1xuICAgICAgICAgICAgICAgIHNlcnZpY2VEb21haW5zOiBbXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3NlckNvbm5lY3Rpb25HYXRld2F5LnByb3h5LnNlcnZlcjFJbmZvLmRvbWFpbixcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyQ29ubmVjdGlvbkdhdGV3YXkucHJveHkuc2VydmVyMkluZm8uZG9tYWluLFxuICAgICAgICAgICAgICAgIF0sXG5cbiAgICAgICAgICAgICAgICBkZXZlbG9wbWVudE1vZGU6IHRoaXMuYnJvd3NlckNvbm5lY3Rpb25HYXRld2F5LnByb3h5Lm9wdGlvbnMuZGV2ZWxvcG1lbnRNb2RlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX3J1bkJyb3dzZXIgKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYWRkaXRpb25hbE9wdGlvbnMgPSB0aGlzLl9nZXRBZGRpdGlvbmFsQnJvd3Nlck9wdGlvbnMoKTtcblxuICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm92aWRlci5vcGVuQnJvd3Nlcih0aGlzLmlkLCB0aGlzLnVybCwgdGhpcy5icm93c2VySW5mby5icm93c2VyT3B0aW9uLCBhZGRpdGlvbmFsT3B0aW9ucyk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyAhPT0gQnJvd3NlckNvbm5lY3Rpb25TdGF0dXMucmVhZHkpXG4gICAgICAgICAgICAgICAgYXdhaXQgcHJvbWlzaWZ5RXZlbnQodGhpcywgJ3JlYWR5Jyk7XG5cbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gQnJvd3NlckNvbm5lY3Rpb25TdGF0dXMub3BlbmVkO1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdvcGVuZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgR2VuZXJhbEVycm9yKFxuICAgICAgICAgICAgICAgIFJVTlRJTUVfRVJST1JTLnVuYWJsZVRvT3BlbkJyb3dzZXIsXG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VySW5mby5wcm92aWRlck5hbWUgKyAnOicgKyB0aGlzLmJyb3dzZXJJbmZvLmJyb3dzZXJOYW1lLFxuICAgICAgICAgICAgICAgIGVyci5zdGFja1xuICAgICAgICAgICAgKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9jbG9zZUJyb3dzZXIgKGRhdGE6IEJyb3dzZXJDbG9zaW5nSW5mbyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICghdGhpcy5pZGxlKVxuICAgICAgICAgICAgYXdhaXQgcHJvbWlzaWZ5RXZlbnQodGhpcywgJ2lkbGUnKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm92aWRlci5jbG9zZUJyb3dzZXIodGhpcy5pZCwgZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgLy8gTk9URTogQSB3YXJuaW5nIHdvdWxkIGJlIHJlYWxseSBuaWNlIGhlcmUsIGJ1dCBpdCBjYW4ndCBiZSBkb25lIHdoaWxlIGxvZyBpcyBzdG9yZWQgaW4gYSB0YXNrLlxuICAgICAgICAgICAgdGhpcy5kZWJ1Z0xvZ2dlcihlcnIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZm9yY2VJZGxlICgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmlkbGUpIHtcbiAgICAgICAgICAgIHRoaXMuaWRsZSA9IHRydWU7XG5cbiAgICAgICAgICAgIHRoaXMuZW1pdCgnaWRsZScpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY3JlYXRlQnJvd3NlckRpc2Nvbm5lY3RlZEVycm9yICgpOiBHZW5lcmFsRXJyb3Ige1xuICAgICAgICByZXR1cm4gbmV3IEdlbmVyYWxFcnJvcihSVU5USU1FX0VSUk9SUy5icm93c2VyRGlzY29ubmVjdGVkLCB0aGlzLnVzZXJBZ2VudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfd2FpdEZvckhlYXJ0YmVhdCAoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaGVhcnRiZWF0VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXJyID0gdGhpcy5fY3JlYXRlQnJvd3NlckRpc2Nvbm5lY3RlZEVycm9yKCk7XG5cbiAgICAgICAgICAgIHRoaXMuc3RhdHVzICAgICAgICAgPSBCcm93c2VyQ29ubmVjdGlvblN0YXR1cy5kaXNjb25uZWN0ZWQ7XG4gICAgICAgICAgICB0aGlzLnRlc3RSdW5BYm9ydGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgdGhpcy5lbWl0KCdkaXNjb25uZWN0ZWQnLCBlcnIpO1xuXG4gICAgICAgICAgICB0aGlzLl9yZXN0YXJ0QnJvd3Nlck9uRGlzY29ubmVjdChlcnIpO1xuICAgICAgICB9LCB0aGlzLkhFQVJUQkVBVF9USU1FT1VUKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9nZXRUZXN0UnVuSW5mbyAobmVlZFBvcE5leHQ6IGJvb2xlYW4pOiBQcm9taXNlPE5leHRUZXN0UnVuSW5mbz4ge1xuICAgICAgICBpZiAobmVlZFBvcE5leHQgfHwgIXRoaXMucGVuZGluZ1Rlc3RSdW5JbmZvKVxuICAgICAgICAgICAgdGhpcy5wZW5kaW5nVGVzdFJ1bkluZm8gPSBhd2FpdCB0aGlzLl9wb3BOZXh0VGVzdFJ1bkluZm8oKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5wZW5kaW5nVGVzdFJ1bkluZm8gYXMgTmV4dFRlc3RSdW5JbmZvO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX3BvcE5leHRUZXN0UnVuSW5mbyAoKTogUHJvbWlzZTxOZXh0VGVzdFJ1bkluZm8gfCBudWxsPiB7XG4gICAgICAgIHdoaWxlICh0aGlzLmhhc1F1ZXVlZEpvYnMgJiYgIXRoaXMuY3VycmVudEpvYi5oYXNRdWV1ZWRUZXN0UnVucylcbiAgICAgICAgICAgIHRoaXMuam9iUXVldWUuc2hpZnQoKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5oYXNRdWV1ZWRKb2JzID8gYXdhaXQgdGhpcy5jdXJyZW50Sm9iLnBvcE5leHRUZXN0UnVuSW5mbyh0aGlzKSA6IG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEN1cnJlbnRUZXN0UnVuICgpOiBMZWdhY3lUZXN0UnVuIHwgVGVzdFJ1biB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFRlc3RSdW47XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRCeUlkIChpZDogc3RyaW5nKTogQnJvd3NlckNvbm5lY3Rpb24gfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIEJyb3dzZXJDb25uZWN0aW9uVHJhY2tlci5hY3RpdmVCcm93c2VyQ29ubmVjdGlvbnNbaWRdIHx8IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfcmVzdGFydEJyb3dzZXIgKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLnN0YXR1cyA9IEJyb3dzZXJDb25uZWN0aW9uU3RhdHVzLnVuaW5pdGlhbGl6ZWQ7XG5cbiAgICAgICAgdGhpcy5fZm9yY2VJZGxlKCk7XG5cbiAgICAgICAgbGV0IHJlc29sdmVUaW1lb3V0OiBGdW5jdGlvbiB8IG51bGwgPSBudWxsO1xuICAgICAgICBsZXQgaXNUaW1lb3V0RXhwaXJlZCAgICAgICAgICAgICAgICA9IGZhbHNlO1xuICAgICAgICBsZXQgdGltZW91dDogTm9kZUpTLlRpbWVvdXQgfCBudWxsICA9IG51bGw7XG5cbiAgICAgICAgY29uc3QgcmVzdGFydFByb21pc2UgPSB0aW1lTGltaXQodGhpcy5fY2xvc2VCcm93c2VyKHsgaXNSZXN0YXJ0aW5nOiB0cnVlIH0pLCB0aGlzLkJST1dTRVJfQ0xPU0VfVElNRU9VVCwgeyByZWplY3RXaXRoOiBuZXcgVGltZW91dEVycm9yKCkgfSlcbiAgICAgICAgICAgIC5jYXRjaChlcnIgPT4gdGhpcy5kZWJ1Z0xvZ2dlcihlcnIpKVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5fcnVuQnJvd3NlcigpKTtcblxuICAgICAgICBjb25zdCB0aW1lb3V0UHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZVRpbWVvdXQgPSByZXNvbHZlO1xuXG4gICAgICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaXNUaW1lb3V0RXhwaXJlZCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9LCB0aGlzLkJST1dTRVJfUkVTVEFSVF9USU1FT1VUKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmFjZShbcmVzdGFydFByb21pc2UsIHRpbWVvdXRQcm9taXNlXSlcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCBhcyBOb2RlSlMuVGltZW91dCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNUaW1lb3V0RXhwaXJlZClcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIHRoaXMuX2NyZWF0ZUJyb3dzZXJEaXNjb25uZWN0ZWRFcnJvcigpKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIChyZXNvbHZlVGltZW91dCBhcyBGdW5jdGlvbikoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3Jlc3RhcnRCcm93c2VyT25EaXNjb25uZWN0IChlcnI6IEVycm9yKTogdm9pZCB7XG4gICAgICAgIGxldCByZXNvbHZlRm46IEZ1bmN0aW9uIHwgbnVsbCA9IG51bGw7XG4gICAgICAgIGxldCByZWplY3RGbjogRnVuY3Rpb24gfCBudWxsICA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5kaXNjb25uZWN0aW9uUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmVGbiA9IHJlc29sdmU7XG5cbiAgICAgICAgICAgIHJlamVjdEZuID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgKHJlamVjdEZuIGFzIEZ1bmN0aW9uKSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3RhcnRCcm93c2VyKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlKTtcbiAgICAgICAgICAgIH0pIGFzIERpc2Nvbm5lY3Rpb25Qcm9taXNlPHZvaWQ+O1xuXG4gICAgICAgIHRoaXMuZGlzY29ubmVjdGlvblByb21pc2UucmVzb2x2ZSA9IHJlc29sdmVGbiBhcyB1bmtub3duIGFzIEZ1bmN0aW9uO1xuICAgICAgICB0aGlzLmRpc2Nvbm5lY3Rpb25Qcm9taXNlLnJlamVjdCAgPSByZWplY3RGbiBhcyB1bmtub3duIGFzIEZ1bmN0aW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXREZWZhdWx0QnJvd3NlckluaXRUaW1lb3V0ICgpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgICAgICBjb25zdCBpc0xvY2FsQnJvd3NlciA9IGF3YWl0IHRoaXMucHJvdmlkZXIuaXNMb2NhbEJyb3dzZXIodGhpcy5pZCwgdGhpcy5icm93c2VySW5mby5icm93c2VyTmFtZSk7XG5cbiAgICAgICAgcmV0dXJuIGlzTG9jYWxCcm93c2VyID8gTE9DQUxfQlJPV1NFUl9JTklUX1RJTUVPVVQgOiBSRU1PVEVfQlJPV1NFUl9JTklUX1RJTUVPVVQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHByb2Nlc3NEaXNjb25uZWN0aW9uIChkaXNjb25uZWN0aW9uVGhyZXNob2xkRXhjZWVkZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgeyByZXNvbHZlLCByZWplY3QgfSA9IHRoaXMuZGlzY29ubmVjdGlvblByb21pc2UgYXMgRGlzY29ubmVjdGlvblByb21pc2U8dm9pZD47XG5cbiAgICAgICAgaWYgKGRpc2Nvbm5lY3Rpb25UaHJlc2hvbGRFeGNlZWRlZClcbiAgICAgICAgICAgIHJlamVjdCgpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFdhcm5pbmcgKG1lc3NhZ2U6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEpvYilcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEpvYi53YXJuaW5nTG9nLmFkZFdhcm5pbmcobWVzc2FnZSwgLi4uYXJncyk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMud2FybmluZ0xvZy5hZGRXYXJuaW5nKG1lc3NhZ2UsIC4uLmFyZ3MpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2FwcGVuZFRvUHJldHR5VXNlckFnZW50IChzdHI6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmJyb3dzZXJJbmZvLnBhcnNlZFVzZXJBZ2VudC5wcmV0dHlVc2VyQWdlbnQgKz0gYCAoJHtzdHJ9KWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbW92ZVdhcm5pbmdMb2dUb0pvYiAoam9iOiBCcm93c2VySm9iKTogdm9pZCB7XG4gICAgICAgIGpvYi53YXJuaW5nTG9nLmNvcHlGcm9tKHRoaXMud2FybmluZ0xvZyk7XG4gICAgICAgIHRoaXMud2FybmluZ0xvZy5jbGVhcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRQcm92aWRlck1ldGFJbmZvIChzdHI6IHN0cmluZywgb3B0aW9ucz86IFByb3ZpZGVyTWV0YUluZm9PcHRpb25zKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFwcGVuZFRvVXNlckFnZW50ID0gb3B0aW9ucz8uYXBwZW5kVG9Vc2VyQWdlbnQgYXMgYm9vbGVhbjtcblxuICAgICAgICBpZiAoYXBwZW5kVG9Vc2VyQWdlbnQpIHtcbiAgICAgICAgICAgIC8vIE5PVEU6XG4gICAgICAgICAgICAvLyBjaGFuZ2UgcHJldHR5VXNlckFnZW50IG9ubHkgd2hlbiBjb25uZWN0aW9uIGFscmVhZHkgd2FzIGVzdGFibGlzaGVkXG4gICAgICAgICAgICBpZiAodGhpcy5pc1JlYWR5KCkpXG4gICAgICAgICAgICAgICAgdGhpcy5fYXBwZW5kVG9QcmV0dHlVc2VyQWdlbnQoc3RyKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aGlzLm9uKCdyZWFkeScsICgpID0+IHRoaXMuX2FwcGVuZFRvUHJldHR5VXNlckFnZW50KHN0cikpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJyb3dzZXJJbmZvLnVzZXJBZ2VudFByb3ZpZGVyTWV0YUluZm8gPSBzdHI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB1c2VyQWdlbnQgKCk6IHN0cmluZyB7XG4gICAgICAgIGxldCB1c2VyQWdlbnQgPSB0aGlzLmJyb3dzZXJJbmZvLnBhcnNlZFVzZXJBZ2VudC5wcmV0dHlVc2VyQWdlbnQ7XG5cbiAgICAgICAgaWYgKHRoaXMuYnJvd3NlckluZm8udXNlckFnZW50UHJvdmlkZXJNZXRhSW5mbylcbiAgICAgICAgICAgIHVzZXJBZ2VudCArPSBgICgke3RoaXMuYnJvd3NlckluZm8udXNlckFnZW50UHJvdmlkZXJNZXRhSW5mb30pYDtcblxuICAgICAgICByZXR1cm4gdXNlckFnZW50O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY29ubmVjdGlvbkluZm8gKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICghdGhpcy5vc0luZm8pXG4gICAgICAgICAgICByZXR1cm4gdGhpcy51c2VyQWdlbnQ7XG5cbiAgICAgICAgY29uc3QgeyBuYW1lLCB2ZXJzaW9uIH0gPSB0aGlzLmJyb3dzZXJJbmZvLnBhcnNlZFVzZXJBZ2VudDtcbiAgICAgICAgbGV0IGNvbm5lY3Rpb25JbmZvICAgICAgPSBjYWxjdWxhdGVQcmV0dHlVc2VyQWdlbnQoeyBuYW1lLCB2ZXJzaW9uIH0sIHRoaXMub3NJbmZvKTtcbiAgICAgICAgY29uc3QgbWV0YUluZm8gICAgICAgICAgPSB0aGlzLmJyb3dzZXJJbmZvLnVzZXJBZ2VudFByb3ZpZGVyTWV0YUluZm8gfHwgZXh0cmFjdE1ldGFJbmZvKHRoaXMuYnJvd3NlckluZm8ucGFyc2VkVXNlckFnZW50LnByZXR0eVVzZXJBZ2VudCk7XG5cbiAgICAgICAgaWYgKG1ldGFJbmZvKVxuICAgICAgICAgICAgY29ubmVjdGlvbkluZm8gKz0gYCAoJHsgbWV0YUluZm8gfSlgO1xuXG4gICAgICAgIHJldHVybiBjb25uZWN0aW9uSW5mbztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJldHJ5VGVzdFBhZ2VzICgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnJvd3NlckNvbm5lY3Rpb25HYXRld2F5LnJldHJ5VGVzdFBhZ2VzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGFzUXVldWVkSm9icyAoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuam9iUXVldWUubGVuZ3RoO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY3VycmVudEpvYiAoKTogQnJvd3NlckpvYiB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYlF1ZXVlWzBdO1xuICAgIH1cblxuICAgIC8vIEFQSVxuICAgIHB1YmxpYyBydW5Jbml0U2NyaXB0IChjb2RlOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVua25vd24+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gdGhpcy5pbml0U2NyaXB0c1F1ZXVlLnB1c2goeyBjb2RlLCByZXNvbHZlIH0pKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkSm9iIChqb2I6IEJyb3dzZXJKb2IpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5qb2JRdWV1ZS5wdXNoKGpvYik7XG5cbiAgICAgICAgdGhpcy5fbW92ZVdhcm5pbmdMb2dUb0pvYihqb2IpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVKb2IgKGpvYjogQnJvd3NlckpvYik6IHZvaWQge1xuICAgICAgICByZW1vdmUodGhpcy5qb2JRdWV1ZSwgam9iKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY2xvc2UgKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IEJyb3dzZXJDb25uZWN0aW9uU3RhdHVzLmNsb3NpbmcgfHwgdGhpcy5zdGF0dXMgPT09IEJyb3dzZXJDb25uZWN0aW9uU3RhdHVzLmNsb3NlZClcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICB0aGlzLnN0YXR1cyA9IEJyb3dzZXJDb25uZWN0aW9uU3RhdHVzLmNsb3Npbmc7XG4gICAgICAgIHRoaXMuZW1pdChCcm93c2VyQ29ubmVjdGlvblN0YXR1cy5jbG9zaW5nKTtcblxuICAgICAgICBhd2FpdCB0aGlzLl9jbG9zZUJyb3dzZXIoKTtcblxuICAgICAgICB0aGlzLmJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5zdG9wU2VydmluZ0Nvbm5lY3Rpb24odGhpcyk7XG5cbiAgICAgICAgaWYgKHRoaXMuaGVhcnRiZWF0VGltZW91dClcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmhlYXJ0YmVhdFRpbWVvdXQpO1xuXG4gICAgICAgIEJyb3dzZXJDb25uZWN0aW9uVHJhY2tlci5yZW1vdmUodGhpcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0dXMgPSBCcm93c2VyQ29ubmVjdGlvblN0YXR1cy5jbG9zZWQ7XG4gICAgICAgIHRoaXMuZW1pdChCcm93c2VyQ29ubmVjdGlvblN0YXR1cy5jbG9zZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBlc3RhYmxpc2ggKHVzZXJBZ2VudDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuc3RhdHVzICAgICAgICAgICAgICAgICAgICAgID0gQnJvd3NlckNvbm5lY3Rpb25TdGF0dXMucmVhZHk7XG4gICAgICAgIHRoaXMuYnJvd3NlckluZm8ucGFyc2VkVXNlckFnZW50ID0gcGFyc2VVc2VyQWdlbnQodXNlckFnZW50KTtcbiAgICAgICAgdGhpcy5vc0luZm8gICAgICAgICAgICAgICAgICAgICAgPSBhd2FpdCB0aGlzLnByb3ZpZGVyLmdldE9TSW5mbyh0aGlzLmlkKTtcblxuICAgICAgICB0aGlzLl93YWl0Rm9ySGVhcnRiZWF0KCk7XG4gICAgICAgIHRoaXMuZW1pdCgncmVhZHknKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGVhcnRiZWF0ICgpOiBIZWFydGJlYXRTdGF0dXNSZXN1bHQge1xuICAgICAgICBpZiAodGhpcy5oZWFydGJlYXRUaW1lb3V0KVxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuaGVhcnRiZWF0VGltZW91dCk7XG5cbiAgICAgICAgdGhpcy5fd2FpdEZvckhlYXJ0YmVhdCgpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb2RlOiB0aGlzLnN0YXR1cyA9PT0gQnJvd3NlckNvbm5lY3Rpb25TdGF0dXMuY2xvc2luZyA/IEhlYXJ0YmVhdFN0YXR1cy5jbG9zaW5nIDogSGVhcnRiZWF0U3RhdHVzLm9rLFxuICAgICAgICAgICAgdXJsOiAgdGhpcy5zdGF0dXMgPT09IEJyb3dzZXJDb25uZWN0aW9uU3RhdHVzLmNsb3NpbmcgPyB0aGlzLmlkbGVVcmwgOiAnJyxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVuZGVySWRsZVBhZ2UgKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBNdXN0YWNoZS5yZW5kZXIoSURMRV9QQUdFX1RFTVBMQVRFIGFzIHN0cmluZywge1xuICAgICAgICAgICAgdXNlckFnZW50OiAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uSW5mbyxcbiAgICAgICAgICAgIHN0YXR1c1VybDogICAgICAgICAgIHRoaXMuc3RhdHVzVXJsLFxuICAgICAgICAgICAgaGVhcnRiZWF0VXJsOiAgICAgICAgdGhpcy5oZWFydGJlYXRVcmwsXG4gICAgICAgICAgICBpbml0U2NyaXB0VXJsOiAgICAgICB0aGlzLmluaXRTY3JpcHRVcmwsXG4gICAgICAgICAgICBvcGVuRmlsZVByb3RvY29sVXJsOiB0aGlzLm9wZW5GaWxlUHJvdG9jb2xVcmwsXG4gICAgICAgICAgICByZXRyeVRlc3RQYWdlczogICAgICAhIXRoaXMuYnJvd3NlckNvbm5lY3Rpb25HYXRld2F5LnJldHJ5VGVzdFBhZ2VzLFxuICAgICAgICAgICAgcHJveHlsZXNzOiAgICAgICAgICAgdGhpcy5wcm94eWxlc3MsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRJbml0U2NyaXB0ICgpOiBJbml0U2NyaXB0IHtcbiAgICAgICAgY29uc3QgaW5pdFNjcmlwdFByb21pc2UgPSB0aGlzLmluaXRTY3JpcHRzUXVldWVbMF07XG5cbiAgICAgICAgcmV0dXJuIHsgY29kZTogaW5pdFNjcmlwdFByb21pc2UgPyBpbml0U2NyaXB0UHJvbWlzZS5jb2RlIDogbnVsbCB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVJbml0U2NyaXB0UmVzdWx0IChkYXRhOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5pdFNjcmlwdFByb21pc2UgPSB0aGlzLmluaXRTY3JpcHRzUXVldWUuc2hpZnQoKTtcblxuICAgICAgICBpZiAoaW5pdFNjcmlwdFByb21pc2UpXG4gICAgICAgICAgICBpbml0U2NyaXB0UHJvbWlzZS5yZXNvbHZlKEpTT04ucGFyc2UoZGF0YSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0hlYWRsZXNzQnJvd3NlciAoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3ZpZGVyLmlzSGVhZGxlc3NCcm93c2VyKHRoaXMuaWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyByZXBvcnRKb2JSZXN1bHQgKHN0YXR1czogc3RyaW5nLCBkYXRhOiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBhd2FpdCB0aGlzLnByb3ZpZGVyLnJlcG9ydEpvYlJlc3VsdCh0aGlzLmlkLCBzdGF0dXMsIGRhdGEpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRTdGF0dXMgKGlzVGVzdERvbmU6IGJvb2xlYW4pOiBQcm9taXNlPEJyb3dzZXJDb25uZWN0aW9uU3RhdHVzUmVzdWx0PiB7XG4gICAgICAgIGlmICghdGhpcy5pZGxlICYmICFpc1Rlc3REb25lKSB7XG4gICAgICAgICAgICB0aGlzLmlkbGUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdpZGxlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IEJyb3dzZXJDb25uZWN0aW9uU3RhdHVzLm9wZW5lZCkge1xuICAgICAgICAgICAgY29uc3QgbmV4dFRlc3RSdW5JbmZvID0gYXdhaXQgdGhpcy5fZ2V0VGVzdFJ1bkluZm8oaXNUZXN0RG9uZSB8fCB0aGlzLnRlc3RSdW5BYm9ydGVkKTtcblxuICAgICAgICAgICAgdGhpcy50ZXN0UnVuQWJvcnRlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAobmV4dFRlc3RSdW5JbmZvKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pZGxlID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBjbWQ6ICAgICAgIENPTU1BTkQucnVuLFxuICAgICAgICAgICAgICAgICAgICB0ZXN0UnVuSWQ6IG5leHRUZXN0UnVuSW5mby50ZXN0UnVuSWQsXG4gICAgICAgICAgICAgICAgICAgIHVybDogICAgICAgbmV4dFRlc3RSdW5JbmZvLnVybCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNtZDogICAgICAgQ09NTUFORC5pZGxlLFxuICAgICAgICAgICAgdXJsOiAgICAgICB0aGlzLmlkbGVVcmwsXG4gICAgICAgICAgICB0ZXN0UnVuSWQ6IG51bGwsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhY3RpdmVXaW5kb3dJZCAoKTogbnVsbCB8IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3ZpZGVyLmdldEFjdGl2ZVdpbmRvd0lkKHRoaXMuaWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgYWN0aXZlV2luZG93SWQgKHZhbCkge1xuICAgICAgICB0aGlzLnByZXZpb3VzQWN0aXZlV2luZG93SWQgPSB0aGlzLmFjdGl2ZVdpbmRvd0lkO1xuXG4gICAgICAgIHRoaXMucHJvdmlkZXIuc2V0QWN0aXZlV2luZG93SWQodGhpcy5pZCwgdmFsKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgb3BlbkZpbGVQcm90b2NvbCAodXJsOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvdmlkZXIub3BlbkZpbGVQcm90b2NvbCh0aGlzLmlkLCB1cmwpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBkaXNwYXRjaFByb3h5bGVzc0V2ZW50ICh0eXBlOiBFdmVudFR5cGUsIG9wdGlvbnM6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm92aWRlci5kaXNwYXRjaFByb3h5bGVzc0V2ZW50KHRoaXMuaWQsIHR5cGUsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjYW5Vc2VEZWZhdWx0V2luZG93QWN0aW9ucyAoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3ZpZGVyLmNhblVzZURlZmF1bHRXaW5kb3dBY3Rpb25zKHRoaXMuaWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc1JlYWR5ICgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdHVzID09PSBCcm93c2VyQ29ubmVjdGlvblN0YXR1cy5yZWFkeSB8fFxuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPT09IEJyb3dzZXJDb25uZWN0aW9uU3RhdHVzLm9wZW5lZCB8fFxuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPT09IEJyb3dzZXJDb25uZWN0aW9uU3RhdHVzLmNsb3Npbmc7XG4gICAgfVxufVxuIl19
434
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYnJvd3Nlci9jb25uZWN0aW9uL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsa0RBQTBCO0FBQzFCLDRFQUEyQztBQUMzQyxtQ0FBc0M7QUFDdEMsd0RBQWdDO0FBQ2hDLG1DQUF3QztBQUN4QyxtRUFLc0M7QUFDdEMsMkRBQXNEO0FBQ3RELHNFQUE2QztBQUM3QyxtQ0FBZ0M7QUFDaEMsd0RBQWdDO0FBQ2hDLHNEQUErQztBQUMvQywwRUFBaUQ7QUFDakQsa0RBQWtFO0FBQ2xFLDhDQUFvRDtBQUdwRCxrRkFBeUQ7QUFHekQsc0VBQThDO0FBQzlDLHlGQU1pRDtBQUVqRCx3REFBaUQ7QUFRakQsTUFBTSw4QkFBOEIsR0FBRyxDQUFDLEVBQVUsRUFBVSxFQUFFLENBQUMsK0JBQStCLEVBQUUsRUFBRSxDQUFDO0FBRW5HLE1BQU0sa0JBQWtCLEdBQUcsSUFBQSw2QkFBSSxFQUFDLG9EQUFvRCxDQUFDLENBQUM7QUE2Q3RGLE1BQXFCLGlCQUFrQixTQUFRLHFCQUFZO0lBK0N2RCxZQUNJLE9BQWlDLEVBQ2pDLFdBQXdCLEVBQ3hCLFNBQWtCLEVBQ2xCLHNCQUFzQixHQUFHLEtBQUssRUFDOUIsU0FBUyxHQUFHLEtBQUssRUFDakIsVUFBdUI7UUFDdkIsS0FBSyxFQUFFLENBQUM7UUE3Q0osb0JBQWUsR0FBbUIsSUFBSSxDQUFDO1FBU3hDLFFBQUcsR0FBRyxFQUFFLENBQUM7UUFDVCxZQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ1osa0JBQWEsR0FBRyxFQUFFLENBQUM7UUFDbkIsa0JBQWEsR0FBRyxFQUFFLENBQUM7UUFDcEIsaUJBQVksR0FBRyxFQUFFLENBQUM7UUFDbEIsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNmLHNCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUN2QixtQkFBYyxHQUFHLEVBQUUsQ0FBQztRQUNwQixrQkFBYSxHQUFHLEVBQUUsQ0FBQztRQUNuQix5QkFBb0IsR0FBRyxFQUFFLENBQUM7UUFDMUIsc0JBQWlCLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLDBCQUFxQixHQUFHLEVBQUUsQ0FBQztRQUMzQixvQkFBZSxHQUFHLEVBQUUsQ0FBQztRQUNyQixnQ0FBMkIsR0FBRyxFQUFFLENBQUM7UUFDakMsd0JBQW1CLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLHNDQUFpQyxHQUFHLEVBQUUsQ0FBQztRQUN2Qyw4Q0FBeUMsR0FBRyxFQUFFLENBQUM7UUFDL0MsNkJBQXdCLEdBQUcsRUFBRSxDQUFDO1FBRTdCLFdBQU0sR0FBa0IsSUFBSSxDQUFDO1FBbUJqQyxJQUFJLENBQUMsaUJBQWlCLEdBQVMsK0NBQWlCLENBQUM7UUFDakQsSUFBSSxDQUFDLHFCQUFxQixHQUFLLG1EQUFxQixDQUFDO1FBQ3JELElBQUksQ0FBQyx1QkFBdUIsR0FBRyxxREFBdUIsQ0FBQztRQUV2RCxJQUFJLENBQUMsRUFBRSxHQUF5QixpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNoRSxJQUFJLENBQUMsUUFBUSxHQUFtQixFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLGdCQUFnQixHQUFXLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsT0FBTyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxvQkFBb0IsR0FBTyxJQUFJLENBQUM7UUFDckMsSUFBSSxDQUFDLGNBQWMsR0FBYSxLQUFLLENBQUM7UUFDdEMsSUFBSSxDQUFDLFVBQVUsR0FBaUIsSUFBSSxxQkFBVSxDQUFDLElBQUksRUFBRSxxQkFBVSxDQUFDLHdCQUF3QixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDdEcsSUFBSSxDQUFDLFdBQVcsR0FBZ0IsSUFBQSxlQUFLLEVBQUMsOEJBQThCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFL0UsSUFBSSxVQUFVLEVBQUU7WUFDWixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztZQUU3QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDekI7UUFFRCxJQUFJLENBQUMsV0FBVyxHQUE2QixXQUFXLENBQUM7UUFDekQsSUFBSSxDQUFDLFdBQVcsQ0FBQyx5QkFBeUIsR0FBRyxFQUFFLENBQUM7UUFFaEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDO1FBRXJDLElBQUksQ0FBQyxTQUFTLEdBQWdCLFNBQVMsQ0FBQztRQUN4QyxJQUFJLENBQUMsTUFBTSxHQUFtQixnQkFBdUIsQ0FBQyxhQUFhLENBQUM7UUFDcEUsSUFBSSxDQUFDLElBQUksR0FBcUIsSUFBSSxDQUFDO1FBQ25DLElBQUksQ0FBQyxnQkFBZ0IsR0FBUyxJQUFJLENBQUM7UUFDbkMsSUFBSSxDQUFDLGtCQUFrQixHQUFPLElBQUksQ0FBQztRQUNuQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsc0JBQXNCLENBQUM7UUFDckQsSUFBSSxDQUFDLFNBQVMsR0FBZ0IsU0FBUyxDQUFDO1FBRXhDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFFekIsaUJBQXdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRW5DLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7UUFFbkMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTNELHFEQUFxRDtRQUNyRCxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFTyx1QkFBdUIsQ0FBRSxLQUFZO1FBQ3pDLElBQUksQ0FBQyxHQUFHLEdBQWEsS0FBSyxDQUFDLHlCQUF5QixDQUFDLEdBQUcsd0JBQWMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDN0YsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMseUJBQXlCLENBQUMsR0FBRyx3QkFBYyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNoRyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLHdCQUFjLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWhHLElBQUksQ0FBQyxvQkFBb0IsR0FBd0IsR0FBRyx3QkFBYyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDMUYsSUFBSSxDQUFDLGlCQUFpQixHQUEyQixHQUFHLHdCQUFjLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUN2RixJQUFJLENBQUMscUJBQXFCLEdBQXVCLEdBQUcsd0JBQWMsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQzNGLElBQUksQ0FBQyxlQUFlLEdBQTZCLEdBQUcsd0JBQWMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3JGLElBQUksQ0FBQyxpQkFBaUIsR0FBMkIsR0FBRyx3QkFBYyxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDL0YsSUFBSSxDQUFDLGNBQWMsR0FBOEIsR0FBRyx3QkFBYyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDNUYsSUFBSSxDQUFDLDJCQUEyQixHQUFpQixHQUFHLHdCQUFjLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2pHLElBQUksQ0FBQyxpQ0FBaUMsR0FBVyxHQUFHLHdCQUFjLENBQUMsc0JBQXNCLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3ZHLElBQUksQ0FBQyx5Q0FBeUMsR0FBRyxHQUFHLHdCQUFjLENBQUMsOEJBQThCLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQy9HLElBQUksQ0FBQyx3QkFBd0IsR0FBb0IsR0FBRyx3QkFBYyxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFFOUYsSUFBSSxDQUFDLE9BQU8sR0FBZSxLQUFLLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2pGLElBQUksQ0FBQyxZQUFZLEdBQVUsS0FBSyxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3RGLElBQUksQ0FBQyxTQUFTLEdBQWEsS0FBSyxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ25GLElBQUksQ0FBQyxhQUFhLEdBQVMsS0FBSyxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3ZGLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFDakcsQ0FBQztJQUVNLGNBQWM7UUFDakIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEdBQUcscUJBQVUsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFakYsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVNLCtCQUErQjtRQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVc7WUFDakIsT0FBTztRQUVYLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxFQUFFO1lBQzVDLElBQUksT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRTtnQkFDeEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsSUFBVyxVQUFVLENBQUUsVUFBa0M7UUFDckQsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7SUFDbEMsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNqQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQztJQUVPLGlCQUFpQjtRQUNyQixJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRTtZQUNqQixJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7UUFFSCxLQUFLLE1BQU0sSUFBSSxJQUFJLGdCQUF1QixFQUFFO1lBQ3hDLE1BQU0sTUFBTSxHQUFHLGdCQUF1QixDQUFDLElBQTRDLENBQUMsQ0FBQztZQUVyRixJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxXQUFXLENBQUMsc0JBQXNCLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDdEQsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNMLENBQUM7SUFFTyxNQUFNLENBQUMsV0FBVztRQUN0QixPQUFPLElBQUEsZUFBTSxFQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFTyw0QkFBNEI7UUFDaEMsTUFBTSxPQUFPLEdBQUc7WUFDWixzQkFBc0IsRUFBRSxJQUFJLENBQUMsc0JBQXNCO1NBQ3RCLENBQUM7UUFFbEMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2hCLE9BQU8sQ0FBQyxTQUFTLEdBQUc7Z0JBQ2hCLGNBQWMsRUFBRTtvQkFDWixJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNO29CQUN0RCxJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNO2lCQUN6RDtnQkFFRCxlQUFlLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZTthQUMvRSxDQUFDO1NBQ0w7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBRU8sS0FBSyxDQUFDLFdBQVc7UUFDckIsSUFBSTtZQUNBLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7WUFFOUQsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztZQUV0RyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssZ0JBQXVCLENBQUMsS0FBSztnQkFDN0MsTUFBTSxJQUFBLHlCQUFjLEVBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBRXhDLElBQUksQ0FBQyxNQUFNLEdBQUcsZ0JBQXVCLENBQUMsTUFBTSxDQUFDO1lBQzdDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDdkI7UUFDRCxPQUFPLEdBQVEsRUFBRTtZQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksc0JBQVksQ0FDL0Isc0JBQWMsQ0FBQyxtQkFBbUIsRUFDbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUNsRSxHQUFHLENBQUMsS0FBSyxDQUNaLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQztJQUVPLEtBQUssQ0FBQyxhQUFhLENBQUUsT0FBMkIsRUFBRTtRQUN0RCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUk7WUFDVixNQUFNLElBQUEseUJBQWMsRUFBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFdkMsSUFBSTtZQUNBLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNuRDtRQUNELE9BQU8sR0FBRyxFQUFFO1lBQ1IsaUdBQWlHO1lBQ2pHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDekI7SUFDTCxDQUFDO0lBRU8sVUFBVTtRQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1osSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7WUFFakIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNyQjtJQUNMLENBQUM7SUFFTywrQkFBK0I7UUFDbkMsT0FBTyxJQUFJLHNCQUFZLENBQUMsc0JBQWMsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVPLGlCQUFpQjtRQUNyQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNwQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsK0JBQStCLEVBQUUsQ0FBQztZQUVuRCxJQUFJLENBQUMsTUFBTSxHQUFXLGdCQUF1QixDQUFDLFlBQVksQ0FBQztZQUMzRCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztZQUUzQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUUvQixJQUFJLENBQUMsMkJBQTJCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFTyxLQUFLLENBQUMsZUFBZSxDQUFFLFdBQW9CO1FBQy9DLElBQUksV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQjtZQUN2QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsTUFBTSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUUvRCxPQUFPLElBQUksQ0FBQyxrQkFBcUMsQ0FBQztJQUN0RCxDQUFDO0lBRU8sS0FBSyxDQUFDLG1CQUFtQjtRQUM3QixPQUFPLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQjtZQUMzRCxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRTFCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDdEYsQ0FBQztJQUVNLGlCQUFpQjtRQUNwQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDaEMsQ0FBQztJQUVNLE1BQU0sQ0FBQyxPQUFPLENBQUUsRUFBVTtRQUM3QixPQUFPLGlCQUF3QixDQUFDLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQztJQUN6RSxDQUFDO0lBRU8sS0FBSyxDQUFDLGVBQWU7UUFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxnQkFBdUIsQ0FBQyxhQUFhLENBQUM7UUFFcEQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRWxCLElBQUksY0FBYyxHQUFvQixJQUFJLENBQUM7UUFDM0MsSUFBSSxnQkFBZ0IsR0FBa0IsS0FBSyxDQUFDO1FBQzVDLElBQUksT0FBTyxHQUEyQixJQUFJLENBQUM7UUFFM0MsTUFBTSxjQUFjLEdBQUcsSUFBQSw0QkFBUyxFQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMscUJBQXFCLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxzQkFBWSxFQUFFLEVBQUUsQ0FBQzthQUN2SSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ25DLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUVwQyxNQUFNLGNBQWMsR0FBRyxJQUFJLE9BQU8sQ0FBTyxPQUFPLENBQUMsRUFBRTtZQUMvQyxjQUFjLEdBQUcsT0FBTyxDQUFDO1lBRXpCLE9BQU8sR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUN0QixnQkFBZ0IsR0FBRyxJQUFJLENBQUM7Z0JBRXhCLE9BQU8sRUFBRSxDQUFDO1lBQ2QsQ0FBQyxFQUFFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsY0FBYyxFQUFFLGNBQWMsQ0FBQyxDQUFDO2FBQ2hELElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDUCxZQUFZLENBQUMsT0FBeUIsQ0FBQyxDQUFDO1lBRXhDLElBQUksZ0JBQWdCO2dCQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsK0JBQStCLEVBQUUsQ0FBQyxDQUFDOztnQkFFMUQsY0FBMkIsRUFBRSxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVPLDJCQUEyQixDQUFFLEdBQVU7UUFDM0MsSUFBSSxTQUFTLEdBQW9CLElBQUksQ0FBQztRQUN0QyxJQUFJLFFBQVEsR0FBcUIsSUFBSSxDQUFDO1FBRXRDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUN4RCxTQUFTLEdBQUcsT0FBTyxDQUFDO1lBRXBCLFFBQVEsR0FBRyxHQUFHLEVBQUU7Z0JBQ1osTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hCLENBQUMsQ0FBQztZQUVGLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ1gsUUFBcUIsRUFBRSxDQUFDO1lBQzdCLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDO2FBQ0csSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNQLE9BQU8sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ2xDLENBQUMsQ0FBQzthQUNELEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNQLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFCLENBQUMsQ0FBK0IsQ0FBQztRQUVyQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxHQUFHLFNBQWdDLENBQUM7UUFDckUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sR0FBSSxRQUErQixDQUFDO0lBQ3hFLENBQUM7SUFFTSxLQUFLLENBQUMsNEJBQTRCO1FBQ3JDLE1BQU0sY0FBYyxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRWpHLE9BQU8sY0FBYyxDQUFDLENBQUMsQ0FBQyx3REFBMEIsQ0FBQyxDQUFDLENBQUMseURBQTJCLENBQUM7SUFDckYsQ0FBQztJQUVNLEtBQUssQ0FBQyxvQkFBb0IsQ0FBRSw4QkFBdUM7UUFDdEUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsb0JBQWtELENBQUM7UUFFcEYsSUFBSSw4QkFBOEI7WUFDOUIsTUFBTSxFQUFFLENBQUM7O1lBRVQsT0FBTyxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVNLFVBQVUsQ0FBRSxPQUFlLEVBQUUsR0FBRyxJQUFXO1FBQzlDLElBQUksSUFBSSxDQUFDLFVBQVU7WUFDZixJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7O1lBRXhELElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFTyx3QkFBd0IsQ0FBRSxHQUFXO1FBQ3pDLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLGVBQWUsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDO0lBQ3BFLENBQUM7SUFFTyxvQkFBb0IsQ0FBRSxHQUFlO1FBQ3pDLEdBQUcsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFTSxtQkFBbUIsQ0FBRSxHQUFXLEVBQUUsT0FBaUM7UUFDdEUsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsaUJBQTRCLENBQUM7UUFFaEUsSUFBSSxpQkFBaUIsRUFBRTtZQUNuQixRQUFRO1lBQ1Isc0VBQXNFO1lBQ3RFLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDZCxJQUFJLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDLENBQUM7O2dCQUVuQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUUvRCxPQUFPO1NBQ1Y7UUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLHlCQUF5QixHQUFHLEdBQUcsQ0FBQztJQUNyRCxDQUFDO0lBRUQsSUFBVyxTQUFTO1FBQ2hCLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQztRQUVqRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMseUJBQXlCO1lBQzFDLFNBQVMsSUFBSSxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMseUJBQXlCLEdBQUcsQ0FBQztRQUVwRSxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFBVyxjQUFjO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtZQUNaLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUUxQixNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDO1FBQzNELElBQUksY0FBYyxHQUFRLElBQUEsMkNBQXdCLEVBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25GLE1BQU0sUUFBUSxHQUFZLElBQUksQ0FBQyxXQUFXLENBQUMseUJBQXlCLElBQUksSUFBQSxrQ0FBZSxFQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRTFJLElBQUksUUFBUTtZQUNSLGNBQWMsSUFBSSxLQUFNLFFBQVMsR0FBRyxDQUFDO1FBRXpDLE9BQU8sY0FBYyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFXLGNBQWM7UUFDckIsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsY0FBYyxDQUFDO0lBQ3hELENBQUM7SUFFRCxJQUFXLGFBQWE7UUFDcEIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7SUFDbEMsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNqQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELE1BQU07SUFDQyxhQUFhLENBQUUsSUFBWTtRQUM5QixPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakYsQ0FBQztJQUVNLE1BQU0sQ0FBRSxHQUFlO1FBQzFCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXhCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRU0sU0FBUyxDQUFFLEdBQWU7UUFDN0IsSUFBQSxhQUFNLEVBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRU0sS0FBSyxDQUFDLEtBQUs7UUFDZCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssZ0JBQXVCLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssZ0JBQXVCLENBQUMsTUFBTTtZQUNqRyxPQUFPO1FBRVgsSUFBSSxDQUFDLE1BQU0sR0FBRyxnQkFBdUIsQ0FBQyxPQUFPLENBQUM7UUFDOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUUzQyxNQUFNLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUUzQixJQUFJLENBQUMsd0JBQXdCLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFMUQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCO1lBQ3JCLFlBQVksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUV4QyxpQkFBd0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxnQkFBdUIsQ0FBQyxNQUFNLENBQUM7UUFDN0MsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRU0sS0FBSyxDQUFDLFNBQVMsQ0FBRSxTQUFpQjtRQUNyQyxJQUFJLENBQUMsTUFBTSxHQUF3QixnQkFBdUIsQ0FBQyxLQUFLLENBQUM7UUFDakUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEdBQUcsSUFBQSxpQ0FBYyxFQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxNQUFNLEdBQXdCLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRTFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVNLFNBQVM7UUFDWixJQUFJLElBQUksQ0FBQyxnQkFBZ0I7WUFDckIsWUFBWSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRXhDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBRXpCLE9BQU87WUFDSCxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sS0FBSyxnQkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLDBCQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQywwQkFBZSxDQUFDLEVBQUU7WUFDcEcsR0FBRyxFQUFHLElBQUksQ0FBQyxNQUFNLEtBQUssZ0JBQXVCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1NBQzVFLENBQUM7SUFDTixDQUFDO0lBRU0sY0FBYztRQUNqQixPQUFPLGtCQUFRLENBQUMsTUFBTSxDQUFDLGtCQUE0QixFQUFFO1lBQ2pELFNBQVMsRUFBWSxJQUFJLENBQUMsY0FBYztZQUN4QyxTQUFTLEVBQVksSUFBSSxDQUFDLFNBQVM7WUFDbkMsWUFBWSxFQUFTLElBQUksQ0FBQyxZQUFZO1lBQ3RDLGFBQWEsRUFBUSxJQUFJLENBQUMsYUFBYTtZQUN2QyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsbUJBQW1CO1lBQzdDLGNBQWMsRUFBTyxDQUFDLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGNBQWM7WUFDbkUsU0FBUyxFQUFZLElBQUksQ0FBQyxTQUFTO1NBQ3RDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTSxhQUFhO1FBQ2hCLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRW5ELE9BQU8sRUFBRSxJQUFJLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdkUsQ0FBQztJQUVNLHNCQUFzQixDQUFFLElBQVk7UUFDdkMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFeEQsSUFBSSxpQkFBaUI7WUFDakIsaUJBQWlCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRU0saUJBQWlCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVNLEtBQUssQ0FBQyxlQUFlLENBQUUsTUFBYyxFQUFFLElBQVM7UUFDbkQsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRU0sS0FBSyxDQUFDLFNBQVMsQ0FBRSxVQUFtQjtRQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUMzQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztZQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3JCO1FBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLGdCQUF1QixDQUFDLE1BQU0sRUFBRTtZQUNoRCxNQUFNLGVBQWUsR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUV0RixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztZQUU1QixJQUFJLGVBQWUsRUFBRTtnQkFDakIsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7Z0JBRWxCLE9BQU87b0JBQ0gsR0FBRyxFQUFRLGlCQUFPLENBQUMsR0FBRztvQkFDdEIsU0FBUyxFQUFFLGVBQWUsQ0FBQyxTQUFTO29CQUNwQyxHQUFHLEVBQVEsZUFBZSxDQUFDLEdBQUc7aUJBQ2pDLENBQUM7YUFDTDtTQUNKO1FBRUQsT0FBTztZQUNILEdBQUcsRUFBUSxpQkFBTyxDQUFDLElBQUk7WUFDdkIsR0FBRyxFQUFRLElBQUksQ0FBQyxPQUFPO1lBQ3ZCLFNBQVMsRUFBRSxJQUFJO1NBQ2xCLENBQUM7SUFDTixDQUFDO0lBRUQsSUFBVyxjQUFjO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELElBQVcsY0FBYyxDQUFFLEdBQUc7UUFDMUIsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFFbEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFTSxLQUFLLENBQUMsZ0JBQWdCLENBQUUsR0FBVztRQUN0QyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRU0sS0FBSyxDQUFDLHNCQUFzQixDQUFFLElBQWUsRUFBRSxPQUFZO1FBQzlELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRU0sS0FBSyxDQUFDLDhCQUE4QixDQUFFLGFBQWlCO1FBQzFELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFTSxLQUFLLENBQUMsMEJBQTBCO1FBQ25DLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVNLE9BQU87UUFDVixPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssZ0JBQXVCLENBQUMsS0FBSztZQUNoRCxJQUFJLENBQUMsTUFBTSxLQUFLLGdCQUF1QixDQUFDLE1BQU07WUFDOUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxnQkFBdUIsQ0FBQyxPQUFPLENBQUM7SUFDeEQsQ0FBQztDQUNKO0FBampCRCxvQ0FpakJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCB0aW1lTGltaXQgZnJvbSAndGltZS1saW1pdC1wcm9taXNlJztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgTXVzdGFjaGUgZnJvbSAnbXVzdGFjaGUnO1xuaW1wb3J0IHsgcHVsbCBhcyByZW1vdmUgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgICBjYWxjdWxhdGVQcmV0dHlVc2VyQWdlbnQsXG4gICAgZXh0cmFjdE1ldGFJbmZvLFxuICAgIFBhcnNlZFVzZXJBZ2VudCxcbiAgICBwYXJzZVVzZXJBZ2VudCxcbn0gZnJvbSAnLi4vLi4vdXRpbHMvcGFyc2UtdXNlci1hZ2VudCc7XG5pbXBvcnQgeyByZWFkU3luYyBhcyByZWFkIH0gZnJvbSAncmVhZC1maWxlLXJlbGF0aXZlJztcbmltcG9ydCBwcm9taXNpZnlFdmVudCBmcm9tICdwcm9taXNpZnktZXZlbnQnO1xuaW1wb3J0IHsgbmFub2lkIH0gZnJvbSAnbmFub2lkJztcbmltcG9ydCBDT01NQU5EIGZyb20gJy4vY29tbWFuZCc7XG5pbXBvcnQgQnJvd3NlckNvbm5lY3Rpb25TdGF0dXMgZnJvbSAnLi9zdGF0dXMnO1xuaW1wb3J0IEhlYXJ0YmVhdFN0YXR1cyBmcm9tICcuL2hlYXJ0YmVhdC1zdGF0dXMnO1xuaW1wb3J0IHsgR2VuZXJhbEVycm9yLCBUaW1lb3V0RXJyb3IgfSBmcm9tICcuLi8uLi9lcnJvcnMvcnVudGltZSc7XG5pbXBvcnQgeyBSVU5USU1FX0VSUk9SUyB9IGZyb20gJy4uLy4uL2Vycm9ycy90eXBlcyc7XG5pbXBvcnQgQnJvd3NlckNvbm5lY3Rpb25HYXRld2F5IGZyb20gJy4vZ2F0ZXdheSc7XG5pbXBvcnQgQnJvd3NlckpvYiBmcm9tICcuLi8uLi9ydW5uZXIvYnJvd3Nlci1qb2InO1xuaW1wb3J0IFdhcm5pbmdMb2cgZnJvbSAnLi4vLi4vbm90aWZpY2F0aW9ucy93YXJuaW5nLWxvZyc7XG5pbXBvcnQgQnJvd3NlclByb3ZpZGVyIGZyb20gJy4uL3Byb3ZpZGVyJztcbmltcG9ydCB7IE9TSW5mbyB9IGZyb20gJ2dldC1vcy1pbmZvJztcbmltcG9ydCBTRVJWSUNFX1JPVVRFUyBmcm9tICcuL3NlcnZpY2Utcm91dGVzJztcbmltcG9ydCB7XG4gICAgQlJPV1NFUl9SRVNUQVJUX1RJTUVPVVQsXG4gICAgQlJPV1NFUl9DTE9TRV9USU1FT1VULFxuICAgIEhFQVJUQkVBVF9USU1FT1VULFxuICAgIExPQ0FMX0JST1dTRVJfSU5JVF9USU1FT1VULFxuICAgIFJFTU9URV9CUk9XU0VSX0lOSVRfVElNRU9VVCxcbn0gZnJvbSAnLi4vLi4vdXRpbHMvYnJvd3Nlci1jb25uZWN0aW9uLXRpbWVvdXRzJztcbmltcG9ydCBNZXNzYWdlQnVzIGZyb20gJy4uLy4uL3V0aWxzL21lc3NhZ2UtYnVzJztcbmltcG9ydCBCcm93c2VyQ29ubmVjdGlvblRyYWNrZXIgZnJvbSAnLi90cmFja2VyJztcbmltcG9ydCBUZXN0UnVuIGZyb20gJy4uLy4uL3Rlc3QtcnVuJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IFRlc3RSdW4gYXMgTGVnYWN5VGVzdFJ1biB9IGZyb20gJ3Rlc3RjYWZlLWxlZ2FjeS1hcGknO1xuaW1wb3J0IHsgUHJveHkgfSBmcm9tICd0ZXN0Y2FmZS1oYW1tZXJoZWFkJztcbmltcG9ydCB7IE5leHRUZXN0UnVuSW5mbywgT3BlbkJyb3dzZXJBZGRpdGlvbmFsT3B0aW9ucyB9IGZyb20gJy4uLy4uL3NoYXJlZC90eXBlcyc7XG5pbXBvcnQgeyBFdmVudFR5cGUgfSBmcm9tICcuLi8uLi9wcm94eWxlc3MvdHlwZXMnO1xuXG5jb25zdCBnZXRCcm93c2VyQ29ubmVjdGlvbkRlYnVnU2NvcGUgPSAoaWQ6IHN0cmluZyk6IHN0cmluZyA9PiBgdGVzdGNhZmU6YnJvd3Nlcjpjb25uZWN0aW9uOiR7aWR9YDtcblxuY29uc3QgSURMRV9QQUdFX1RFTVBMQVRFID0gcmVhZCgnLi4vLi4vY2xpZW50L2Jyb3dzZXIvaWRsZS1wYWdlL2luZGV4Lmh0bWwubXVzdGFjaGUnKTtcblxuXG5pbnRlcmZhY2UgRGlzY29ubmVjdGlvblByb21pc2U8VD4gZXh0ZW5kcyBQcm9taXNlPFQ+IHtcbiAgICByZXNvbHZlOiBGdW5jdGlvbjtcbiAgICByZWplY3Q6IEZ1bmN0aW9uO1xufVxuXG5pbnRlcmZhY2UgQnJvd3NlckNvbm5lY3Rpb25TdGF0dXNSZXN1bHQge1xuICAgIGNtZDogc3RyaW5nO1xuICAgIHVybDogc3RyaW5nO1xuICAgIHRlc3RSdW5JZDogc3RyaW5nIHwgbnVsbDtcbn1cblxuaW50ZXJmYWNlIEhlYXJ0YmVhdFN0YXR1c1Jlc3VsdCB7XG4gICAgY29kZTogSGVhcnRiZWF0U3RhdHVzO1xuICAgIHVybDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgSW5pdFNjcmlwdCB7XG4gICAgY29kZTogc3RyaW5nIHwgbnVsbDtcbn1cblxuaW50ZXJmYWNlIEluaXRTY3JpcHRUYXNrIGV4dGVuZHMgSW5pdFNjcmlwdCB7XG4gICAgcmVzb2x2ZTogRnVuY3Rpb247XG59XG5cbmludGVyZmFjZSBQcm92aWRlck1ldGFJbmZvT3B0aW9ucyB7XG4gICAgYXBwZW5kVG9Vc2VyQWdlbnQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJyb3dzZXJDbG9zaW5nSW5mbyB7XG4gICAgaXNSZXN0YXJ0aW5nPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCcm93c2VySW5mbyB7XG4gICAgYWxpYXM6IHN0cmluZztcbiAgICBicm93c2VyTmFtZTogc3RyaW5nO1xuICAgIGJyb3dzZXJPcHRpb246IHVua25vd247XG4gICAgcHJvdmlkZXJOYW1lOiBzdHJpbmc7XG4gICAgcHJvdmlkZXI6IEJyb3dzZXJQcm92aWRlcjtcbiAgICB1c2VyQWdlbnRQcm92aWRlck1ldGFJbmZvOiBzdHJpbmc7XG4gICAgcGFyc2VkVXNlckFnZW50OiBQYXJzZWRVc2VyQWdlbnQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJyb3dzZXJDb25uZWN0aW9uIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgICBwdWJsaWMgcGVybWFuZW50OiBib29sZWFuO1xuICAgIHB1YmxpYyBwcmV2aW91c0FjdGl2ZVdpbmRvd0lkOiBzdHJpbmcgfCBudWxsO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlzYWJsZU11bHRpcGxlV2luZG93czogYm9vbGVhbjtcbiAgICBwdWJsaWMgcmVhZG9ubHkgcHJveHlsZXNzOiBib29sZWFuO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgSEVBUlRCRUFUX1RJTUVPVVQ6IG51bWJlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IEJST1dTRVJfQ0xPU0VfVElNRU9VVDogbnVtYmVyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgQlJPV1NFUl9SRVNUQVJUX1RJTUVPVVQ6IG51bWJlcjtcbiAgICBwdWJsaWMgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgICBwcml2YXRlIF9jdXJyZW50VGVzdFJ1bjogVGVzdFJ1biB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgam9iUXVldWU6IEJyb3dzZXJKb2JbXTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGluaXRTY3JpcHRzUXVldWU6IEluaXRTY3JpcHRUYXNrW107XG4gICAgcHVibGljIGJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheTogQnJvd3NlckNvbm5lY3Rpb25HYXRld2F5O1xuICAgIHByaXZhdGUgZGlzY29ubmVjdGlvblByb21pc2U6IERpc2Nvbm5lY3Rpb25Qcm9taXNlPHZvaWQ+IHwgbnVsbDtcbiAgICBwcml2YXRlIHRlc3RSdW5BYm9ydGVkOiBib29sZWFuO1xuICAgIHB1YmxpYyBzdGF0dXM6IEJyb3dzZXJDb25uZWN0aW9uU3RhdHVzO1xuICAgIHByaXZhdGUgaGVhcnRiZWF0VGltZW91dDogTm9kZUpTLlRpbWVvdXQgfCBudWxsO1xuICAgIHByaXZhdGUgcGVuZGluZ1Rlc3RSdW5JbmZvOiBOZXh0VGVzdFJ1bkluZm8gfCBudWxsO1xuICAgIHB1YmxpYyB1cmwgPSAnJztcbiAgICBwdWJsaWMgaWRsZVVybCA9ICcnO1xuICAgIHByaXZhdGUgZm9yY2VkSWRsZVVybCA9ICcnO1xuICAgIHByaXZhdGUgaW5pdFNjcmlwdFVybCA9ICcnO1xuICAgIHB1YmxpYyBoZWFydGJlYXRVcmwgPSAnJztcbiAgICBwdWJsaWMgc3RhdHVzVXJsID0gJyc7XG4gICAgcHVibGljIGFjdGl2ZVdpbmRvd0lkVXJsID0gJyc7XG4gICAgcHVibGljIGNsb3NlV2luZG93VXJsID0gJyc7XG4gICAgcHVibGljIHN0YXR1c0RvbmVVcmwgPSAnJztcbiAgICBwdWJsaWMgaGVhcnRiZWF0UmVsYXRpdmVVcmwgPSAnJztcbiAgICBwdWJsaWMgc3RhdHVzUmVsYXRpdmVVcmwgPSAnJztcbiAgICBwdWJsaWMgc3RhdHVzRG9uZVJlbGF0aXZlVXJsID0gJyc7XG4gICAgcHVibGljIGlkbGVSZWxhdGl2ZVVybCA9ICcnO1xuICAgIHB1YmxpYyBvcGVuRmlsZVByb3RvY29sUmVsYXRpdmVVcmwgPSAnJztcbiAgICBwdWJsaWMgb3BlbkZpbGVQcm90b2NvbFVybCA9ICcnO1xuICAgIHB1YmxpYyBkaXNwYXRjaFByb3h5bGVzc0V2ZW50UmVsYXRpdmVVcmwgPSAnJztcbiAgICBwdWJsaWMgZGlzcGF0Y2hQcm94eWxlc3NFdmVudFNlcXVlbmNlUmVsYXRpdmVVcmwgPSAnJztcbiAgICBwdWJsaWMgcGFyc2VTZWxlY3RvclJlbGF0aXZlVXJsID0gJyc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZWJ1Z0xvZ2dlcjogZGVidWcuRGVidWdnZXI7XG4gICAgcHJpdmF0ZSBvc0luZm86IE9TSW5mbyB8IG51bGwgPSBudWxsO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IHdhcm5pbmdMb2c6IFdhcm5pbmdMb2c7XG4gICAgcHJpdmF0ZSBfbWVzc2FnZUJ1cz86IE1lc3NhZ2VCdXM7XG5cbiAgICBwdWJsaWMgaWRsZTogYm9vbGVhbjtcblxuICAgIHB1YmxpYyBicm93c2VySW5mbzogQnJvd3NlckluZm87XG4gICAgcHVibGljIHByb3ZpZGVyOiBhbnk7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKFxuICAgICAgICBnYXRld2F5OiBCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXksXG4gICAgICAgIGJyb3dzZXJJbmZvOiBCcm93c2VySW5mbyxcbiAgICAgICAgcGVybWFuZW50OiBib29sZWFuLFxuICAgICAgICBkaXNhYmxlTXVsdGlwbGVXaW5kb3dzID0gZmFsc2UsXG4gICAgICAgIHByb3h5bGVzcyA9IGZhbHNlLFxuICAgICAgICBtZXNzYWdlQnVzPzogTWVzc2FnZUJ1cykge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIHRoaXMuSEVBUlRCRUFUX1RJTUVPVVQgICAgICAgPSBIRUFSVEJFQVRfVElNRU9VVDtcbiAgICAgICAgdGhpcy5CUk9XU0VSX0NMT1NFX1RJTUVPVVQgICA9IEJST1dTRVJfQ0xPU0VfVElNRU9VVDtcbiAgICAgICAgdGhpcy5CUk9XU0VSX1JFU1RBUlRfVElNRU9VVCA9IEJST1dTRVJfUkVTVEFSVF9USU1FT1VUO1xuXG4gICAgICAgIHRoaXMuaWQgICAgICAgICAgICAgICAgICAgICAgID0gQnJvd3NlckNvbm5lY3Rpb24uX2dlbmVyYXRlSWQoKTtcbiAgICAgICAgdGhpcy5qb2JRdWV1ZSAgICAgICAgICAgICAgICAgPSBbXTtcbiAgICAgICAgdGhpcy5pbml0U2NyaXB0c1F1ZXVlICAgICAgICAgPSBbXTtcbiAgICAgICAgdGhpcy5icm93c2VyQ29ubmVjdGlvbkdhdGV3YXkgPSBnYXRld2F5O1xuICAgICAgICB0aGlzLmRpc2Nvbm5lY3Rpb25Qcm9taXNlICAgICA9IG51bGw7XG4gICAgICAgIHRoaXMudGVzdFJ1bkFib3J0ZWQgICAgICAgICAgID0gZmFsc2U7XG4gICAgICAgIHRoaXMud2FybmluZ0xvZyAgICAgICAgICAgICAgID0gbmV3IFdhcm5pbmdMb2cobnVsbCwgV2FybmluZ0xvZy5jcmVhdGVBZGRXYXJuaW5nQ2FsbGJhY2sobWVzc2FnZUJ1cykpO1xuICAgICAgICB0aGlzLmRlYnVnTG9nZ2VyICAgICAgICAgICAgICA9IGRlYnVnKGdldEJyb3dzZXJDb25uZWN0aW9uRGVidWdTY29wZSh0aGlzLmlkKSk7XG5cbiAgICAgICAgaWYgKG1lc3NhZ2VCdXMpIHtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZUJ1cyA9IG1lc3NhZ2VCdXM7XG5cbiAgICAgICAgICAgIHRoaXMuaW5pdE1lc3NhZ2VCdXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYnJvd3NlckluZm8gICAgICAgICAgICAgICAgICAgICAgICAgICA9IGJyb3dzZXJJbmZvO1xuICAgICAgICB0aGlzLmJyb3dzZXJJbmZvLnVzZXJBZ2VudFByb3ZpZGVyTWV0YUluZm8gPSAnJztcblxuICAgICAgICB0aGlzLnByb3ZpZGVyID0gYnJvd3NlckluZm8ucHJvdmlkZXI7XG5cbiAgICAgICAgdGhpcy5wZXJtYW5lbnQgICAgICAgICAgICAgID0gcGVybWFuZW50O1xuICAgICAgICB0aGlzLnN0YXR1cyAgICAgICAgICAgICAgICAgPSBCcm93c2VyQ29ubmVjdGlvblN0YXR1cy51bmluaXRpYWxpemVkO1xuICAgICAgICB0aGlzLmlkbGUgICAgICAgICAgICAgICAgICAgPSB0cnVlO1xuICAgICAgICB0aGlzLmhlYXJ0YmVhdFRpbWVvdXQgICAgICAgPSBudWxsO1xuICAgICAgICB0aGlzLnBlbmRpbmdUZXN0UnVuSW5mbyAgICAgPSBudWxsO1xuICAgICAgICB0aGlzLmRpc2FibGVNdWx0aXBsZVdpbmRvd3MgPSBkaXNhYmxlTXVsdGlwbGVXaW5kb3dzO1xuICAgICAgICB0aGlzLnByb3h5bGVzcyAgICAgICAgICAgICAgPSBwcm94eWxlc3M7XG5cbiAgICAgICAgdGhpcy5fYnVpbGRDb21tdW5pY2F0aW9uVXJscyhnYXRld2F5LnByb3h5KTtcbiAgICAgICAgdGhpcy5fc2V0RXZlbnRIYW5kbGVycygpO1xuXG4gICAgICAgIEJyb3dzZXJDb25uZWN0aW9uVHJhY2tlci5hZGQodGhpcyk7XG5cbiAgICAgICAgdGhpcy5wcmV2aW91c0FjdGl2ZVdpbmRvd0lkID0gbnVsbDtcblxuICAgICAgICB0aGlzLmJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5zdGFydFNlcnZpbmdDb25uZWN0aW9uKHRoaXMpO1xuXG4gICAgICAgIC8vIE5PVEU6IEdpdmUgYSBjYWxsZXIgdGltZSB0byBhc3NpZ24gZXZlbnQgbGlzdGVuZXJzXG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4gdGhpcy5fcnVuQnJvd3NlcigpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9idWlsZENvbW11bmljYXRpb25VcmxzIChwcm94eTogUHJveHkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51cmwgICAgICAgICAgID0gcHJveHkucmVzb2x2ZVJlbGF0aXZlU2VydmljZVVybChgJHtTRVJWSUNFX1JPVVRFUy5jb25uZWN0fS8ke3RoaXMuaWR9YCk7XG4gICAgICAgIHRoaXMuZm9yY2VkSWRsZVVybCA9IHByb3h5LnJlc29sdmVSZWxhdGl2ZVNlcnZpY2VVcmwoYCR7U0VSVklDRV9ST1VURVMuaWRsZUZvcmNlZH0vJHt0aGlzLmlkfWApO1xuICAgICAgICB0aGlzLmluaXRTY3JpcHRVcmwgPSBwcm94eS5yZXNvbHZlUmVsYXRpdmVTZXJ2aWNlVXJsKGAke1NFUlZJQ0VfUk9VVEVTLmluaXRTY3JpcHR9LyR7dGhpcy5pZH1gKTtcblxuICAgICAgICB0aGlzLmhlYXJ0YmVhdFJlbGF0aXZlVXJsICAgICAgICAgICAgICAgICAgICAgID0gYCR7U0VSVklDRV9ST1VURVMuaGVhcnRiZWF0fS8ke3RoaXMuaWR9YDtcbiAgICAgICAgdGhpcy5zdGF0dXNSZWxhdGl2ZVVybCAgICAgICAgICAgICAgICAgICAgICAgICA9IGAke1NFUlZJQ0VfUk9VVEVTLnN0YXR1c30vJHt0aGlzLmlkfWA7XG4gICAgICAgIHRoaXMuc3RhdHVzRG9uZVJlbGF0aXZlVXJsICAgICAgICAgICAgICAgICAgICAgPSBgJHtTRVJWSUNFX1JPVVRFUy5zdGF0dXNEb25lfS8ke3RoaXMuaWR9YDtcbiAgICAgICAgdGhpcy5pZGxlUmVsYXRpdmVVcmwgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGAke1NFUlZJQ0VfUk9VVEVTLmlkbGV9LyR7dGhpcy5pZH1gO1xuICAgICAgICB0aGlzLmFjdGl2ZVdpbmRvd0lkVXJsICAgICAgICAgICAgICAgICAgICAgICAgID0gYCR7U0VSVklDRV9ST1VURVMuYWN0aXZlV2luZG93SWR9LyR7dGhpcy5pZH1gO1xuICAgICAgICB0aGlzLmNsb3NlV2luZG93VXJsICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gYCR7U0VSVklDRV9ST1VURVMuY2xvc2VXaW5kb3d9LyR7dGhpcy5pZH1gO1xuICAgICAgICB0aGlzLm9wZW5GaWxlUHJvdG9jb2xSZWxhdGl2ZVVybCAgICAgICAgICAgICAgID0gYCR7U0VSVklDRV9ST1VURVMub3BlbkZpbGVQcm90b2NvbH0vJHt0aGlzLmlkfWA7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hQcm94eWxlc3NFdmVudFJlbGF0aXZlVXJsICAgICAgICAgPSBgJHtTRVJWSUNFX1JPVVRFUy5kaXNwYXRjaFByb3h5bGVzc0V2ZW50fS8ke3RoaXMuaWR9YDtcbiAgICAgICAgdGhpcy5kaXNwYXRjaFByb3h5bGVzc0V2ZW50U2VxdWVuY2VSZWxhdGl2ZVVybCA9IGAke1NFUlZJQ0VfUk9VVEVTLmRpc3BhdGNoUHJveHlsZXNzRXZlbnRTZXF1ZW5jZX0vJHt0aGlzLmlkfWA7XG4gICAgICAgIHRoaXMucGFyc2VTZWxlY3RvclJlbGF0aXZlVXJsICAgICAgICAgICAgICAgICAgPSBgJHtTRVJWSUNFX1JPVVRFUy5wYXJzZVNlbGVjdG9yfS8ke3RoaXMuaWR9YDtcblxuICAgICAgICB0aGlzLmlkbGVVcmwgICAgICAgICAgICAgPSBwcm94eS5yZXNvbHZlUmVsYXRpdmVTZXJ2aWNlVXJsKHRoaXMuaWRsZVJlbGF0aXZlVXJsKTtcbiAgICAgICAgdGhpcy5oZWFydGJlYXRVcmwgICAgICAgID0gcHJveHkucmVzb2x2ZVJlbGF0aXZlU2VydmljZVVybCh0aGlzLmhlYXJ0YmVhdFJlbGF0aXZlVXJsKTtcbiAgICAgICAgdGhpcy5zdGF0dXNVcmwgICAgICAgICAgID0gcHJveHkucmVzb2x2ZVJlbGF0aXZlU2VydmljZVVybCh0aGlzLnN0YXR1c1JlbGF0aXZlVXJsKTtcbiAgICAgICAgdGhpcy5zdGF0dXNEb25lVXJsICAgICAgID0gcHJveHkucmVzb2x2ZVJlbGF0aXZlU2VydmljZVVybCh0aGlzLnN0YXR1c0RvbmVSZWxhdGl2ZVVybCk7XG4gICAgICAgIHRoaXMub3BlbkZpbGVQcm90b2NvbFVybCA9IHByb3h5LnJlc29sdmVSZWxhdGl2ZVNlcnZpY2VVcmwodGhpcy5vcGVuRmlsZVByb3RvY29sUmVsYXRpdmVVcmwpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbml0TWVzc2FnZUJ1cyAoKTogdm9pZCB7XG4gICAgICAgIHRoaXMud2FybmluZ0xvZy5jYWxsYmFjayA9IFdhcm5pbmdMb2cuY3JlYXRlQWRkV2FybmluZ0NhbGxiYWNrKHRoaXMuX21lc3NhZ2VCdXMpO1xuXG4gICAgICAgIHRoaXMuYXNzaWduVGVzdFJ1blN0YXJ0RXZlbnRMaXN0ZW5lcigpO1xuICAgICAgICB0aGlzLmVtaXQoJ21lc3NhZ2UtYnVzLWluaXRpYWxpemVkJywgdGhpcy5fbWVzc2FnZUJ1cyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzc2lnblRlc3RSdW5TdGFydEV2ZW50TGlzdGVuZXIgKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX21lc3NhZ2VCdXMpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5vbigndGVzdC1ydW4tc3RhcnQnLCB0ZXN0UnVuID0+IHtcbiAgICAgICAgICAgIGlmICh0ZXN0UnVuLmJyb3dzZXJDb25uZWN0aW9uLmlkID09PSB0aGlzLmlkKVxuICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRUZXN0UnVuID0gdGVzdFJ1bjtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBtZXNzYWdlQnVzIChtZXNzYWdlQnVzOiBNZXNzYWdlQnVzIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX21lc3NhZ2VCdXMgPSBtZXNzYWdlQnVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWVzc2FnZUJ1cyAoKTogTWVzc2FnZUJ1cyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tZXNzYWdlQnVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NldEV2ZW50SGFuZGxlcnMgKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uKCdlcnJvcicsIGUgPT4ge1xuICAgICAgICAgICAgdGhpcy5kZWJ1Z0xvZ2dlcihlKTtcbiAgICAgICAgICAgIHRoaXMuX2ZvcmNlSWRsZSgpO1xuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gQnJvd3NlckNvbm5lY3Rpb25TdGF0dXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IEJyb3dzZXJDb25uZWN0aW9uU3RhdHVzW25hbWUgYXMga2V5b2YgdHlwZW9mIEJyb3dzZXJDb25uZWN0aW9uU3RhdHVzXTtcblxuICAgICAgICAgICAgdGhpcy5vbihzdGF0dXMsICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlYnVnTG9nZ2VyKGBzdGF0dXMgY2hhbmdlZCB0byAnJHtzdGF0dXN9J2ApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBfZ2VuZXJhdGVJZCAoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIG5hbm9pZCg3KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZXRBZGRpdGlvbmFsQnJvd3Nlck9wdGlvbnMgKCk6IE9wZW5Ccm93c2VyQWRkaXRpb25hbE9wdGlvbnMge1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgZGlzYWJsZU11bHRpcGxlV2luZG93czogdGhpcy5kaXNhYmxlTXVsdGlwbGVXaW5kb3dzLFxuICAgICAgICB9IGFzIE9wZW5Ccm93c2VyQWRkaXRpb25hbE9wdGlvbnM7XG5cbiAgICAgICAgaWYgKHRoaXMucHJveHlsZXNzKSB7XG4gICAgICAgICAgICBvcHRpb25zLnByb3h5bGVzcyA9IHtcbiAgICAgICAgICAgICAgICBzZXJ2aWNlRG9tYWluczogW1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5wcm94eS5zZXJ2ZXIxSW5mby5kb21haW4sXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3NlckNvbm5lY3Rpb25HYXRld2F5LnByb3h5LnNlcnZlcjJJbmZvLmRvbWFpbixcbiAgICAgICAgICAgICAgICBdLFxuXG4gICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnRNb2RlOiB0aGlzLmJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5wcm94eS5vcHRpb25zLmRldmVsb3BtZW50TW9kZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9ydW5Ccm93c2VyICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGFkZGl0aW9uYWxPcHRpb25zID0gdGhpcy5fZ2V0QWRkaXRpb25hbEJyb3dzZXJPcHRpb25zKCk7XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvdmlkZXIub3BlbkJyb3dzZXIodGhpcy5pZCwgdGhpcy51cmwsIHRoaXMuYnJvd3NlckluZm8uYnJvd3Nlck9wdGlvbiwgYWRkaXRpb25hbE9wdGlvbnMpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgIT09IEJyb3dzZXJDb25uZWN0aW9uU3RhdHVzLnJlYWR5KVxuICAgICAgICAgICAgICAgIGF3YWl0IHByb21pc2lmeUV2ZW50KHRoaXMsICdyZWFkeScpO1xuXG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9IEJyb3dzZXJDb25uZWN0aW9uU3RhdHVzLm9wZW5lZDtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnb3BlbmVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEdlbmVyYWxFcnJvcihcbiAgICAgICAgICAgICAgICBSVU5USU1FX0VSUk9SUy51bmFibGVUb09wZW5Ccm93c2VyLFxuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3NlckluZm8ucHJvdmlkZXJOYW1lICsgJzonICsgdGhpcy5icm93c2VySW5mby5icm93c2VyTmFtZSxcbiAgICAgICAgICAgICAgICBlcnIuc3RhY2tcbiAgICAgICAgICAgICkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfY2xvc2VCcm93c2VyIChkYXRhOiBCcm93c2VyQ2xvc2luZ0luZm8gPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoIXRoaXMuaWRsZSlcbiAgICAgICAgICAgIGF3YWl0IHByb21pc2lmeUV2ZW50KHRoaXMsICdpZGxlJyk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvdmlkZXIuY2xvc2VCcm93c2VyKHRoaXMuaWQsIGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIC8vIE5PVEU6IEEgd2FybmluZyB3b3VsZCBiZSByZWFsbHkgbmljZSBoZXJlLCBidXQgaXQgY2FuJ3QgYmUgZG9uZSB3aGlsZSBsb2cgaXMgc3RvcmVkIGluIGEgdGFzay5cbiAgICAgICAgICAgIHRoaXMuZGVidWdMb2dnZXIoZXJyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2ZvcmNlSWRsZSAoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5pZGxlKSB7XG4gICAgICAgICAgICB0aGlzLmlkbGUgPSB0cnVlO1xuXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2lkbGUnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2NyZWF0ZUJyb3dzZXJEaXNjb25uZWN0ZWRFcnJvciAoKTogR2VuZXJhbEVycm9yIHtcbiAgICAgICAgcmV0dXJuIG5ldyBHZW5lcmFsRXJyb3IoUlVOVElNRV9FUlJPUlMuYnJvd3NlckRpc2Nvbm5lY3RlZCwgdGhpcy51c2VyQWdlbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3dhaXRGb3JIZWFydGJlYXQgKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhlYXJ0YmVhdFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVyciA9IHRoaXMuX2NyZWF0ZUJyb3dzZXJEaXNjb25uZWN0ZWRFcnJvcigpO1xuXG4gICAgICAgICAgICB0aGlzLnN0YXR1cyAgICAgICAgID0gQnJvd3NlckNvbm5lY3Rpb25TdGF0dXMuZGlzY29ubmVjdGVkO1xuICAgICAgICAgICAgdGhpcy50ZXN0UnVuQWJvcnRlZCA9IHRydWU7XG5cbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZGlzY29ubmVjdGVkJywgZXJyKTtcblxuICAgICAgICAgICAgdGhpcy5fcmVzdGFydEJyb3dzZXJPbkRpc2Nvbm5lY3QoZXJyKTtcbiAgICAgICAgfSwgdGhpcy5IRUFSVEJFQVRfVElNRU9VVCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfZ2V0VGVzdFJ1bkluZm8gKG5lZWRQb3BOZXh0OiBib29sZWFuKTogUHJvbWlzZTxOZXh0VGVzdFJ1bkluZm8+IHtcbiAgICAgICAgaWYgKG5lZWRQb3BOZXh0IHx8ICF0aGlzLnBlbmRpbmdUZXN0UnVuSW5mbylcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ1Rlc3RSdW5JbmZvID0gYXdhaXQgdGhpcy5fcG9wTmV4dFRlc3RSdW5JbmZvKCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucGVuZGluZ1Rlc3RSdW5JbmZvIGFzIE5leHRUZXN0UnVuSW5mbztcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9wb3BOZXh0VGVzdFJ1bkluZm8gKCk6IFByb21pc2U8TmV4dFRlc3RSdW5JbmZvIHwgbnVsbD4ge1xuICAgICAgICB3aGlsZSAodGhpcy5oYXNRdWV1ZWRKb2JzICYmICF0aGlzLmN1cnJlbnRKb2IuaGFzUXVldWVkVGVzdFJ1bnMpXG4gICAgICAgICAgICB0aGlzLmpvYlF1ZXVlLnNoaWZ0KCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzUXVldWVkSm9icyA/IGF3YWl0IHRoaXMuY3VycmVudEpvYi5wb3BOZXh0VGVzdFJ1bkluZm8odGhpcykgOiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDdXJyZW50VGVzdFJ1biAoKTogTGVnYWN5VGVzdFJ1biB8IFRlc3RSdW4gfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRUZXN0UnVuO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0QnlJZCAoaWQ6IHN0cmluZyk6IEJyb3dzZXJDb25uZWN0aW9uIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiBCcm93c2VyQ29ubmVjdGlvblRyYWNrZXIuYWN0aXZlQnJvd3NlckNvbm5lY3Rpb25zW2lkXSB8fCBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX3Jlc3RhcnRCcm93c2VyICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBCcm93c2VyQ29ubmVjdGlvblN0YXR1cy51bmluaXRpYWxpemVkO1xuXG4gICAgICAgIHRoaXMuX2ZvcmNlSWRsZSgpO1xuXG4gICAgICAgIGxldCByZXNvbHZlVGltZW91dDogRnVuY3Rpb24gfCBudWxsID0gbnVsbDtcbiAgICAgICAgbGV0IGlzVGltZW91dEV4cGlyZWQgICAgICAgICAgICAgICAgPSBmYWxzZTtcbiAgICAgICAgbGV0IHRpbWVvdXQ6IE5vZGVKUy5UaW1lb3V0IHwgbnVsbCAgPSBudWxsO1xuXG4gICAgICAgIGNvbnN0IHJlc3RhcnRQcm9taXNlID0gdGltZUxpbWl0KHRoaXMuX2Nsb3NlQnJvd3Nlcih7IGlzUmVzdGFydGluZzogdHJ1ZSB9KSwgdGhpcy5CUk9XU0VSX0NMT1NFX1RJTUVPVVQsIHsgcmVqZWN0V2l0aDogbmV3IFRpbWVvdXRFcnJvcigpIH0pXG4gICAgICAgICAgICAuY2F0Y2goZXJyID0+IHRoaXMuZGVidWdMb2dnZXIoZXJyKSlcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMuX3J1bkJyb3dzZXIoKSk7XG5cbiAgICAgICAgY29uc3QgdGltZW91dFByb21pc2UgPSBuZXcgUHJvbWlzZTx2b2lkPihyZXNvbHZlID0+IHtcbiAgICAgICAgICAgIHJlc29sdmVUaW1lb3V0ID0gcmVzb2x2ZTtcblxuICAgICAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlzVGltZW91dEV4cGlyZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSwgdGhpcy5CUk9XU0VSX1JFU1RBUlRfVElNRU9VVCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJhY2UoW3Jlc3RhcnRQcm9taXNlLCB0aW1lb3V0UHJvbWlzZV0pXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQgYXMgTm9kZUpTLlRpbWVvdXQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGlzVGltZW91dEV4cGlyZWQpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCB0aGlzLl9jcmVhdGVCcm93c2VyRGlzY29ubmVjdGVkRXJyb3IoKSk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAocmVzb2x2ZVRpbWVvdXQgYXMgRnVuY3Rpb24pKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZXN0YXJ0QnJvd3Nlck9uRGlzY29ubmVjdCAoZXJyOiBFcnJvcik6IHZvaWQge1xuICAgICAgICBsZXQgcmVzb2x2ZUZuOiBGdW5jdGlvbiB8IG51bGwgPSBudWxsO1xuICAgICAgICBsZXQgcmVqZWN0Rm46IEZ1bmN0aW9uIHwgbnVsbCAgPSBudWxsO1xuXG4gICAgICAgIHRoaXMuZGlzY29ubmVjdGlvblByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlRm4gPSByZXNvbHZlO1xuXG4gICAgICAgICAgICByZWplY3RGbiA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIChyZWplY3RGbiBhcyBGdW5jdGlvbikoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXN0YXJ0QnJvd3NlcigpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZSk7XG4gICAgICAgICAgICB9KSBhcyBEaXNjb25uZWN0aW9uUHJvbWlzZTx2b2lkPjtcblxuICAgICAgICB0aGlzLmRpc2Nvbm5lY3Rpb25Qcm9taXNlLnJlc29sdmUgPSByZXNvbHZlRm4gYXMgdW5rbm93biBhcyBGdW5jdGlvbjtcbiAgICAgICAgdGhpcy5kaXNjb25uZWN0aW9uUHJvbWlzZS5yZWplY3QgID0gcmVqZWN0Rm4gYXMgdW5rbm93biBhcyBGdW5jdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RGVmYXVsdEJyb3dzZXJJbml0VGltZW91dCAoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICAgICAgY29uc3QgaXNMb2NhbEJyb3dzZXIgPSBhd2FpdCB0aGlzLnByb3ZpZGVyLmlzTG9jYWxCcm93c2VyKHRoaXMuaWQsIHRoaXMuYnJvd3NlckluZm8uYnJvd3Nlck5hbWUpO1xuXG4gICAgICAgIHJldHVybiBpc0xvY2FsQnJvd3NlciA/IExPQ0FMX0JST1dTRVJfSU5JVF9USU1FT1VUIDogUkVNT1RFX0JST1dTRVJfSU5JVF9USU1FT1VUO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBwcm9jZXNzRGlzY29ubmVjdGlvbiAoZGlzY29ubmVjdGlvblRocmVzaG9sZEV4Y2VlZGVkOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHsgcmVzb2x2ZSwgcmVqZWN0IH0gPSB0aGlzLmRpc2Nvbm5lY3Rpb25Qcm9taXNlIGFzIERpc2Nvbm5lY3Rpb25Qcm9taXNlPHZvaWQ+O1xuXG4gICAgICAgIGlmIChkaXNjb25uZWN0aW9uVGhyZXNob2xkRXhjZWVkZWQpXG4gICAgICAgICAgICByZWplY3QoKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRXYXJuaW5nIChtZXNzYWdlOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRKb2IpXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRKb2Iud2FybmluZ0xvZy5hZGRXYXJuaW5nKG1lc3NhZ2UsIC4uLmFyZ3MpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdMb2cuYWRkV2FybmluZyhtZXNzYWdlLCAuLi5hcmdzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9hcHBlbmRUb1ByZXR0eVVzZXJBZ2VudCAoc3RyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5icm93c2VySW5mby5wYXJzZWRVc2VyQWdlbnQucHJldHR5VXNlckFnZW50ICs9IGAgKCR7c3RyfSlgO1xuICAgIH1cblxuICAgIHByaXZhdGUgX21vdmVXYXJuaW5nTG9nVG9Kb2IgKGpvYjogQnJvd3NlckpvYik6IHZvaWQge1xuICAgICAgICBqb2Iud2FybmluZ0xvZy5jb3B5RnJvbSh0aGlzLndhcm5pbmdMb2cpO1xuICAgICAgICB0aGlzLndhcm5pbmdMb2cuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0UHJvdmlkZXJNZXRhSW5mbyAoc3RyOiBzdHJpbmcsIG9wdGlvbnM/OiBQcm92aWRlck1ldGFJbmZvT3B0aW9ucyk6IHZvaWQge1xuICAgICAgICBjb25zdCBhcHBlbmRUb1VzZXJBZ2VudCA9IG9wdGlvbnM/LmFwcGVuZFRvVXNlckFnZW50IGFzIGJvb2xlYW47XG5cbiAgICAgICAgaWYgKGFwcGVuZFRvVXNlckFnZW50KSB7XG4gICAgICAgICAgICAvLyBOT1RFOlxuICAgICAgICAgICAgLy8gY2hhbmdlIHByZXR0eVVzZXJBZ2VudCBvbmx5IHdoZW4gY29ubmVjdGlvbiBhbHJlYWR5IHdhcyBlc3RhYmxpc2hlZFxuICAgICAgICAgICAgaWYgKHRoaXMuaXNSZWFkeSgpKVxuICAgICAgICAgICAgICAgIHRoaXMuX2FwcGVuZFRvUHJldHR5VXNlckFnZW50KHN0cik7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpcy5vbigncmVhZHknLCAoKSA9PiB0aGlzLl9hcHBlbmRUb1ByZXR0eVVzZXJBZ2VudChzdHIpKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5icm93c2VySW5mby51c2VyQWdlbnRQcm92aWRlck1ldGFJbmZvID0gc3RyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdXNlckFnZW50ICgpOiBzdHJpbmcge1xuICAgICAgICBsZXQgdXNlckFnZW50ID0gdGhpcy5icm93c2VySW5mby5wYXJzZWRVc2VyQWdlbnQucHJldHR5VXNlckFnZW50O1xuXG4gICAgICAgIGlmICh0aGlzLmJyb3dzZXJJbmZvLnVzZXJBZ2VudFByb3ZpZGVyTWV0YUluZm8pXG4gICAgICAgICAgICB1c2VyQWdlbnQgKz0gYCAoJHt0aGlzLmJyb3dzZXJJbmZvLnVzZXJBZ2VudFByb3ZpZGVyTWV0YUluZm99KWA7XG5cbiAgICAgICAgcmV0dXJuIHVzZXJBZ2VudDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNvbm5lY3Rpb25JbmZvICgpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIXRoaXMub3NJbmZvKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudXNlckFnZW50O1xuXG4gICAgICAgIGNvbnN0IHsgbmFtZSwgdmVyc2lvbiB9ID0gdGhpcy5icm93c2VySW5mby5wYXJzZWRVc2VyQWdlbnQ7XG4gICAgICAgIGxldCBjb25uZWN0aW9uSW5mbyAgICAgID0gY2FsY3VsYXRlUHJldHR5VXNlckFnZW50KHsgbmFtZSwgdmVyc2lvbiB9LCB0aGlzLm9zSW5mbyk7XG4gICAgICAgIGNvbnN0IG1ldGFJbmZvICAgICAgICAgID0gdGhpcy5icm93c2VySW5mby51c2VyQWdlbnRQcm92aWRlck1ldGFJbmZvIHx8IGV4dHJhY3RNZXRhSW5mbyh0aGlzLmJyb3dzZXJJbmZvLnBhcnNlZFVzZXJBZ2VudC5wcmV0dHlVc2VyQWdlbnQpO1xuXG4gICAgICAgIGlmIChtZXRhSW5mbylcbiAgICAgICAgICAgIGNvbm5lY3Rpb25JbmZvICs9IGAgKCR7IG1ldGFJbmZvIH0pYDtcblxuICAgICAgICByZXR1cm4gY29ubmVjdGlvbkluZm87XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZXRyeVRlc3RQYWdlcyAoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5yZXRyeVRlc3RQYWdlcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhhc1F1ZXVlZEpvYnMgKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLmpvYlF1ZXVlLmxlbmd0aDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGN1cnJlbnRKb2IgKCk6IEJyb3dzZXJKb2Ige1xuICAgICAgICByZXR1cm4gdGhpcy5qb2JRdWV1ZVswXTtcbiAgICB9XG5cbiAgICAvLyBBUElcbiAgICBwdWJsaWMgcnVuSW5pdFNjcmlwdCAoY29kZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCB1bmtub3duPiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHRoaXMuaW5pdFNjcmlwdHNRdWV1ZS5wdXNoKHsgY29kZSwgcmVzb2x2ZSB9KSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEpvYiAoam9iOiBCcm93c2VySm9iKTogdm9pZCB7XG4gICAgICAgIHRoaXMuam9iUXVldWUucHVzaChqb2IpO1xuXG4gICAgICAgIHRoaXMuX21vdmVXYXJuaW5nTG9nVG9Kb2Ioam9iKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlSm9iIChqb2I6IEJyb3dzZXJKb2IpOiB2b2lkIHtcbiAgICAgICAgcmVtb3ZlKHRoaXMuam9iUXVldWUsIGpvYik7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNsb3NlICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSBCcm93c2VyQ29ubmVjdGlvblN0YXR1cy5jbG9zaW5nIHx8IHRoaXMuc3RhdHVzID09PSBCcm93c2VyQ29ubmVjdGlvblN0YXR1cy5jbG9zZWQpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdGhpcy5zdGF0dXMgPSBCcm93c2VyQ29ubmVjdGlvblN0YXR1cy5jbG9zaW5nO1xuICAgICAgICB0aGlzLmVtaXQoQnJvd3NlckNvbm5lY3Rpb25TdGF0dXMuY2xvc2luZyk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5fY2xvc2VCcm93c2VyKCk7XG5cbiAgICAgICAgdGhpcy5icm93c2VyQ29ubmVjdGlvbkdhdGV3YXkuc3RvcFNlcnZpbmdDb25uZWN0aW9uKHRoaXMpO1xuXG4gICAgICAgIGlmICh0aGlzLmhlYXJ0YmVhdFRpbWVvdXQpXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5oZWFydGJlYXRUaW1lb3V0KTtcblxuICAgICAgICBCcm93c2VyQ29ubmVjdGlvblRyYWNrZXIucmVtb3ZlKHRoaXMpO1xuXG4gICAgICAgIHRoaXMuc3RhdHVzID0gQnJvd3NlckNvbm5lY3Rpb25TdGF0dXMuY2xvc2VkO1xuICAgICAgICB0aGlzLmVtaXQoQnJvd3NlckNvbm5lY3Rpb25TdGF0dXMuY2xvc2VkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZXN0YWJsaXNoICh1c2VyQWdlbnQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLnN0YXR1cyAgICAgICAgICAgICAgICAgICAgICA9IEJyb3dzZXJDb25uZWN0aW9uU3RhdHVzLnJlYWR5O1xuICAgICAgICB0aGlzLmJyb3dzZXJJbmZvLnBhcnNlZFVzZXJBZ2VudCA9IHBhcnNlVXNlckFnZW50KHVzZXJBZ2VudCk7XG4gICAgICAgIHRoaXMub3NJbmZvICAgICAgICAgICAgICAgICAgICAgID0gYXdhaXQgdGhpcy5wcm92aWRlci5nZXRPU0luZm8odGhpcy5pZCk7XG5cbiAgICAgICAgdGhpcy5fd2FpdEZvckhlYXJ0YmVhdCgpO1xuICAgICAgICB0aGlzLmVtaXQoJ3JlYWR5Jyk7XG4gICAgfVxuXG4gICAgcHVibGljIGhlYXJ0YmVhdCAoKTogSGVhcnRiZWF0U3RhdHVzUmVzdWx0IHtcbiAgICAgICAgaWYgKHRoaXMuaGVhcnRiZWF0VGltZW91dClcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmhlYXJ0YmVhdFRpbWVvdXQpO1xuXG4gICAgICAgIHRoaXMuX3dhaXRGb3JIZWFydGJlYXQoKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29kZTogdGhpcy5zdGF0dXMgPT09IEJyb3dzZXJDb25uZWN0aW9uU3RhdHVzLmNsb3NpbmcgPyBIZWFydGJlYXRTdGF0dXMuY2xvc2luZyA6IEhlYXJ0YmVhdFN0YXR1cy5vayxcbiAgICAgICAgICAgIHVybDogIHRoaXMuc3RhdHVzID09PSBCcm93c2VyQ29ubmVjdGlvblN0YXR1cy5jbG9zaW5nID8gdGhpcy5pZGxlVXJsIDogJycsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIHJlbmRlcklkbGVQYWdlICgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gTXVzdGFjaGUucmVuZGVyKElETEVfUEFHRV9URU1QTEFURSBhcyBzdHJpbmcsIHtcbiAgICAgICAgICAgIHVzZXJBZ2VudDogICAgICAgICAgIHRoaXMuY29ubmVjdGlvbkluZm8sXG4gICAgICAgICAgICBzdGF0dXNVcmw6ICAgICAgICAgICB0aGlzLnN0YXR1c1VybCxcbiAgICAgICAgICAgIGhlYXJ0YmVhdFVybDogICAgICAgIHRoaXMuaGVhcnRiZWF0VXJsLFxuICAgICAgICAgICAgaW5pdFNjcmlwdFVybDogICAgICAgdGhpcy5pbml0U2NyaXB0VXJsLFxuICAgICAgICAgICAgb3BlbkZpbGVQcm90b2NvbFVybDogdGhpcy5vcGVuRmlsZVByb3RvY29sVXJsLFxuICAgICAgICAgICAgcmV0cnlUZXN0UGFnZXM6ICAgICAgISF0aGlzLmJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5yZXRyeVRlc3RQYWdlcyxcbiAgICAgICAgICAgIHByb3h5bGVzczogICAgICAgICAgIHRoaXMucHJveHlsZXNzLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SW5pdFNjcmlwdCAoKTogSW5pdFNjcmlwdCB7XG4gICAgICAgIGNvbnN0IGluaXRTY3JpcHRQcm9taXNlID0gdGhpcy5pbml0U2NyaXB0c1F1ZXVlWzBdO1xuXG4gICAgICAgIHJldHVybiB7IGNvZGU6IGluaXRTY3JpcHRQcm9taXNlID8gaW5pdFNjcmlwdFByb21pc2UuY29kZSA6IG51bGwgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFuZGxlSW5pdFNjcmlwdFJlc3VsdCAoZGF0YTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluaXRTY3JpcHRQcm9taXNlID0gdGhpcy5pbml0U2NyaXB0c1F1ZXVlLnNoaWZ0KCk7XG5cbiAgICAgICAgaWYgKGluaXRTY3JpcHRQcm9taXNlKVxuICAgICAgICAgICAgaW5pdFNjcmlwdFByb21pc2UucmVzb2x2ZShKU09OLnBhcnNlKGRhdGEpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNIZWFkbGVzc0Jyb3dzZXIgKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm92aWRlci5pc0hlYWRsZXNzQnJvd3Nlcih0aGlzLmlkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcmVwb3J0Sm9iUmVzdWx0IChzdGF0dXM6IHN0cmluZywgZGF0YTogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wcm92aWRlci5yZXBvcnRKb2JSZXN1bHQodGhpcy5pZCwgc3RhdHVzLCBkYXRhKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0U3RhdHVzIChpc1Rlc3REb25lOiBib29sZWFuKTogUHJvbWlzZTxCcm93c2VyQ29ubmVjdGlvblN0YXR1c1Jlc3VsdD4ge1xuICAgICAgICBpZiAoIXRoaXMuaWRsZSAmJiAhaXNUZXN0RG9uZSkge1xuICAgICAgICAgICAgdGhpcy5pZGxlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnaWRsZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSBCcm93c2VyQ29ubmVjdGlvblN0YXR1cy5vcGVuZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRUZXN0UnVuSW5mbyA9IGF3YWl0IHRoaXMuX2dldFRlc3RSdW5JbmZvKGlzVGVzdERvbmUgfHwgdGhpcy50ZXN0UnVuQWJvcnRlZCk7XG5cbiAgICAgICAgICAgIHRoaXMudGVzdFJ1bkFib3J0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKG5leHRUZXN0UnVuSW5mbykge1xuICAgICAgICAgICAgICAgIHRoaXMuaWRsZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgY21kOiAgICAgICBDT01NQU5ELnJ1bixcbiAgICAgICAgICAgICAgICAgICAgdGVzdFJ1bklkOiBuZXh0VGVzdFJ1bkluZm8udGVzdFJ1bklkLFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICAgICAgIG5leHRUZXN0UnVuSW5mby51cmwsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjbWQ6ICAgICAgIENPTU1BTkQuaWRsZSxcbiAgICAgICAgICAgIHVybDogICAgICAgdGhpcy5pZGxlVXJsLFxuICAgICAgICAgICAgdGVzdFJ1bklkOiBudWxsLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYWN0aXZlV2luZG93SWQgKCk6IG51bGwgfCBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm92aWRlci5nZXRBY3RpdmVXaW5kb3dJZCh0aGlzLmlkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGFjdGl2ZVdpbmRvd0lkICh2YWwpIHtcbiAgICAgICAgdGhpcy5wcmV2aW91c0FjdGl2ZVdpbmRvd0lkID0gdGhpcy5hY3RpdmVXaW5kb3dJZDtcblxuICAgICAgICB0aGlzLnByb3ZpZGVyLnNldEFjdGl2ZVdpbmRvd0lkKHRoaXMuaWQsIHZhbCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIG9wZW5GaWxlUHJvdG9jb2wgKHVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3ZpZGVyLm9wZW5GaWxlUHJvdG9jb2wodGhpcy5pZCwgdXJsKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZGlzcGF0Y2hQcm94eWxlc3NFdmVudCAodHlwZTogRXZlbnRUeXBlLCBvcHRpb25zOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvdmlkZXIuZGlzcGF0Y2hQcm94eWxlc3NFdmVudCh0aGlzLmlkLCB0eXBlLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZGlzcGF0Y2hQcm94eWxlc3NFdmVudFNlcXVlbmNlIChldmVudFNlcXVlbmNlOiBbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm92aWRlci5kaXNwYXRjaFByb3h5bGVzc0V2ZW50U2VxdWVuY2UodGhpcy5pZCwgZXZlbnRTZXF1ZW5jZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNhblVzZURlZmF1bHRXaW5kb3dBY3Rpb25zICgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvdmlkZXIuY2FuVXNlRGVmYXVsdFdpbmRvd0FjdGlvbnModGhpcy5pZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzUmVhZHkgKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0dXMgPT09IEJyb3dzZXJDb25uZWN0aW9uU3RhdHVzLnJlYWR5IHx8XG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9PT0gQnJvd3NlckNvbm5lY3Rpb25TdGF0dXMub3BlbmVkIHx8XG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9PT0gQnJvd3NlckNvbm5lY3Rpb25TdGF0dXMuY2xvc2luZztcbiAgICB9XG59XG4iXX0=
@@ -14,6 +14,8 @@ exports.default = {
14
14
  serviceWorker: '/service-worker.js',
15
15
  openFileProtocol: '/browser/open-file-protocol',
16
16
  dispatchProxylessEvent: '/browser/dispatch-proxyless-event',
17
+ dispatchProxylessEventSequence: '/browser/dispatch-proxyless-event-sequence',
18
+ parseSelector: '/parse-selector',
17
19
  assets: {
18
20
  index: '/browser/assets/index.js',
19
21
  styles: '/browser/assets/styles.css',
@@ -21,4 +23,4 @@ exports.default = {
21
23
  },
22
24
  };
23
25
  module.exports = exports.default;
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1yb3V0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYnJvd3Nlci9jb25uZWN0aW9uL3NlcnZpY2Utcm91dGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsa0JBQWU7SUFDWCxPQUFPLEVBQW1CLGtCQUFrQjtJQUM1Qyx3QkFBd0IsRUFBRSxtQkFBbUI7SUFDN0MsU0FBUyxFQUFpQixvQkFBb0I7SUFDOUMsTUFBTSxFQUFvQixpQkFBaUI7SUFDM0MsVUFBVSxFQUFnQixzQkFBc0I7SUFDaEQsVUFBVSxFQUFnQixzQkFBc0I7SUFDaEQsSUFBSSxFQUFzQixlQUFlO0lBQ3pDLFVBQVUsRUFBZ0Isc0JBQXNCO0lBQ2hELGNBQWMsRUFBWSwyQkFBMkI7SUFDckQsV0FBVyxFQUFlLHVCQUF1QjtJQUNqRCxhQUFhLEVBQWEsb0JBQW9CO0lBQzlDLGdCQUFnQixFQUFVLDZCQUE2QjtJQUN2RCxzQkFBc0IsRUFBSSxtQ0FBbUM7SUFFN0QsTUFBTSxFQUFFO1FBQ0osS0FBSyxFQUFHLDBCQUEwQjtRQUNsQyxNQUFNLEVBQUUsNEJBQTRCO1FBQ3BDLElBQUksRUFBSSwwQkFBMEI7S0FDckM7Q0FDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQge1xuICAgIGNvbm5lY3Q6ICAgICAgICAgICAgICAgICAgJy9icm93c2VyL2Nvbm5lY3QnLFxuICAgIGNvbm5lY3RXaXRoVHJhaWxpbmdTbGFzaDogJy9icm93c2VyL2Nvbm5lY3QvJyxcbiAgICBoZWFydGJlYXQ6ICAgICAgICAgICAgICAgICcvYnJvd3Nlci9oZWFydGJlYXQnLFxuICAgIHN0YXR1czogICAgICAgICAgICAgICAgICAgJy9icm93c2VyL3N0YXR1cycsXG4gICAgc3RhdHVzRG9uZTogICAgICAgICAgICAgICAnL2Jyb3dzZXIvc3RhdHVzLWRvbmUnLFxuICAgIGluaXRTY3JpcHQ6ICAgICAgICAgICAgICAgJy9icm93c2VyL2luaXQtc2NyaXB0JyxcbiAgICBpZGxlOiAgICAgICAgICAgICAgICAgICAgICcvYnJvd3Nlci9pZGxlJyxcbiAgICBpZGxlRm9yY2VkOiAgICAgICAgICAgICAgICcvYnJvd3Nlci9pZGxlLWZvcmNlZCcsXG4gICAgYWN0aXZlV2luZG93SWQ6ICAgICAgICAgICAnL2Jyb3dzZXIvYWN0aXZlLXdpbmRvdy1pZCcsXG4gICAgY2xvc2VXaW5kb3c6ICAgICAgICAgICAgICAnL2Jyb3dzZXIvY2xvc2Utd2luZG93JyxcbiAgICBzZXJ2aWNlV29ya2VyOiAgICAgICAgICAgICcvc2VydmljZS13b3JrZXIuanMnLFxuICAgIG9wZW5GaWxlUHJvdG9jb2w6ICAgICAgICAgJy9icm93c2VyL29wZW4tZmlsZS1wcm90b2NvbCcsXG4gICAgZGlzcGF0Y2hQcm94eWxlc3NFdmVudDogICAnL2Jyb3dzZXIvZGlzcGF0Y2gtcHJveHlsZXNzLWV2ZW50JyxcblxuICAgIGFzc2V0czoge1xuICAgICAgICBpbmRleDogICcvYnJvd3Nlci9hc3NldHMvaW5kZXguanMnLFxuICAgICAgICBzdHlsZXM6ICcvYnJvd3Nlci9hc3NldHMvc3R5bGVzLmNzcycsXG4gICAgICAgIGxvZ286ICAgJy9icm93c2VyL2Fzc2V0cy9sb2dvLnN2ZycsXG4gICAgfSxcbn07XG4iXX0=
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1yb3V0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYnJvd3Nlci9jb25uZWN0aW9uL3NlcnZpY2Utcm91dGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsa0JBQWU7SUFDWCxPQUFPLEVBQXlCLGtCQUFrQjtJQUNsRCx3QkFBd0IsRUFBUSxtQkFBbUI7SUFDbkQsU0FBUyxFQUF1QixvQkFBb0I7SUFDcEQsTUFBTSxFQUEwQixpQkFBaUI7SUFDakQsVUFBVSxFQUFzQixzQkFBc0I7SUFDdEQsVUFBVSxFQUFzQixzQkFBc0I7SUFDdEQsSUFBSSxFQUE0QixlQUFlO0lBQy9DLFVBQVUsRUFBc0Isc0JBQXNCO0lBQ3RELGNBQWMsRUFBa0IsMkJBQTJCO0lBQzNELFdBQVcsRUFBcUIsdUJBQXVCO0lBQ3ZELGFBQWEsRUFBbUIsb0JBQW9CO0lBQ3BELGdCQUFnQixFQUFnQiw2QkFBNkI7SUFDN0Qsc0JBQXNCLEVBQVUsbUNBQW1DO0lBQ25FLDhCQUE4QixFQUFFLDRDQUE0QztJQUM1RSxhQUFhLEVBQW1CLGlCQUFpQjtJQUVqRCxNQUFNLEVBQUU7UUFDSixLQUFLLEVBQUcsMEJBQTBCO1FBQ2xDLE1BQU0sRUFBRSw0QkFBNEI7UUFDcEMsSUFBSSxFQUFJLDBCQUEwQjtLQUNyQztDQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCB7XG4gICAgY29ubmVjdDogICAgICAgICAgICAgICAgICAgICAgICAnL2Jyb3dzZXIvY29ubmVjdCcsXG4gICAgY29ubmVjdFdpdGhUcmFpbGluZ1NsYXNoOiAgICAgICAnL2Jyb3dzZXIvY29ubmVjdC8nLFxuICAgIGhlYXJ0YmVhdDogICAgICAgICAgICAgICAgICAgICAgJy9icm93c2VyL2hlYXJ0YmVhdCcsXG4gICAgc3RhdHVzOiAgICAgICAgICAgICAgICAgICAgICAgICAnL2Jyb3dzZXIvc3RhdHVzJyxcbiAgICBzdGF0dXNEb25lOiAgICAgICAgICAgICAgICAgICAgICcvYnJvd3Nlci9zdGF0dXMtZG9uZScsXG4gICAgaW5pdFNjcmlwdDogICAgICAgICAgICAgICAgICAgICAnL2Jyb3dzZXIvaW5pdC1zY3JpcHQnLFxuICAgIGlkbGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJy9icm93c2VyL2lkbGUnLFxuICAgIGlkbGVGb3JjZWQ6ICAgICAgICAgICAgICAgICAgICAgJy9icm93c2VyL2lkbGUtZm9yY2VkJyxcbiAgICBhY3RpdmVXaW5kb3dJZDogICAgICAgICAgICAgICAgICcvYnJvd3Nlci9hY3RpdmUtd2luZG93LWlkJyxcbiAgICBjbG9zZVdpbmRvdzogICAgICAgICAgICAgICAgICAgICcvYnJvd3Nlci9jbG9zZS13aW5kb3cnLFxuICAgIHNlcnZpY2VXb3JrZXI6ICAgICAgICAgICAgICAgICAgJy9zZXJ2aWNlLXdvcmtlci5qcycsXG4gICAgb3BlbkZpbGVQcm90b2NvbDogICAgICAgICAgICAgICAnL2Jyb3dzZXIvb3Blbi1maWxlLXByb3RvY29sJyxcbiAgICBkaXNwYXRjaFByb3h5bGVzc0V2ZW50OiAgICAgICAgICcvYnJvd3Nlci9kaXNwYXRjaC1wcm94eWxlc3MtZXZlbnQnLFxuICAgIGRpc3BhdGNoUHJveHlsZXNzRXZlbnRTZXF1ZW5jZTogJy9icm93c2VyL2Rpc3BhdGNoLXByb3h5bGVzcy1ldmVudC1zZXF1ZW5jZScsXG4gICAgcGFyc2VTZWxlY3RvcjogICAgICAgICAgICAgICAgICAnL3BhcnNlLXNlbGVjdG9yJyxcblxuICAgIGFzc2V0czoge1xuICAgICAgICBpbmRleDogICcvYnJvd3Nlci9hc3NldHMvaW5kZXguanMnLFxuICAgICAgICBzdHlsZXM6ICcvYnJvd3Nlci9hc3NldHMvc3R5bGVzLmNzcycsXG4gICAgICAgIGxvZ286ICAgJy9icm93c2VyL2Fzc2V0cy9sb2dvLnN2ZycsXG4gICAgfSxcbn07XG4iXX0=
@@ -14,10 +14,17 @@ const cdp_client_1 = require("./cdp-client");
14
14
  const cdp_1 = require("../../../../../proxyless/utils/cdp");
15
15
  const proxyless_1 = __importDefault(require("../../../../../proxyless"));
16
16
  const debug_loggers_1 = require("../../../../../utils/debug-loggers");
17
+ const types_1 = require("../../../../../proxyless/types");
18
+ const delay_1 = __importDefault(require("../../../../../utils/delay"));
17
19
  const MIN_AVAILABLE_DIMENSION = 50;
18
20
  exports.default = Object.assign(Object.assign({}, base_1.default), { getConfig(name) {
19
21
  return (0, config_1.default)(name);
20
22
  },
23
+ async _getActiveCDPClient(browserId) {
24
+ const { browserClient } = this.openedBrowsers[browserId];
25
+ const cdpClient = await browserClient.getActiveClient();
26
+ return cdpClient;
27
+ },
21
28
  _getBrowserProtocolClient(runtimeInfo) {
22
29
  return runtimeInfo.browserClient;
23
30
  },
@@ -128,14 +135,21 @@ exports.default = Object.assign(Object.assign({}, base_1.default), { getConfig(n
128
135
  }
129
136
  },
130
137
  async openFileProtocol(browserId, url) {
131
- const { browserClient } = this.openedBrowsers[browserId];
132
- const cdpClient = await browserClient.getActiveClient();
138
+ const cdpClient = await this._getActiveCDPClient(browserId);
133
139
  await (0, cdp_1.navigateTo)(cdpClient, url);
134
140
  },
135
141
  async dispatchProxylessEvent(browserId, type, options) {
136
- const { browserClient } = this.openedBrowsers[browserId];
137
- const cdpClient = await browserClient.getActiveClient();
142
+ const cdpClient = await this._getActiveCDPClient(browserId);
138
143
  await (0, cdp_1.dispatchEvent)(cdpClient, type, options);
144
+ },
145
+ async dispatchProxylessEventSequence(browserId, eventSequence) {
146
+ const cdpClient = await this._getActiveCDPClient(browserId);
147
+ for (const event of eventSequence) {
148
+ if (event.type === types_1.EventType.Delay)
149
+ await (0, delay_1.default)(event.options.delay);
150
+ else
151
+ await (0, cdp_1.dispatchEvent)(cdpClient, event.type, event.options);
152
+ }
139
153
  } });
140
154
  module.exports = exports.default;
141
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYnJvd3Nlci9wcm92aWRlci9idWlsdC1pbi9kZWRpY2F0ZWQvY2hyb21lL2luZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsMERBQTJCO0FBQzNCLDZCQUF3QztBQUN4QyxtREFBNEM7QUFDNUMsa0VBQStDO0FBQy9DLHNEQUFpQztBQUNqQyxpREFJd0I7QUFDeEIsc0VBQW9GO0FBQ3BGLDZDQUE2QztBQUM3Qyw0REFBeUc7QUFDekcseUVBQWlEO0FBQ2pELHNFQUFpRjtBQUVqRixNQUFNLHVCQUF1QixHQUFHLEVBQUUsQ0FBQztBQUVuQyxrREFDTyxjQUFxQixLQUV4QixTQUFTLENBQUUsSUFBSTtRQUNYLE9BQU8sSUFBQSxnQkFBUyxFQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCx5QkFBeUIsQ0FBRSxXQUFXO1FBQ2xDLE9BQU8sV0FBVyxDQUFDLGFBQWEsQ0FBQztJQUNyQyxDQUFDO0lBRUQsS0FBSyxDQUFDLGtCQUFrQixDQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsc0JBQXNCO1FBQzlELE9BQU8sc0JBQWlCLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRUQsdUNBQXVDLENBQUUsU0FBUyxFQUFFLE1BQU07UUFDdEQsTUFBTSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFDekMsTUFBTSxpQkFBaUIsR0FBVyxTQUFTLElBQUksVUFBVSxDQUFDO1FBRTFELElBQUksQ0FBQyxpQkFBaUI7WUFDbEIsT0FBTztRQUVYLE1BQU0sUUFBUSxHQUFHLGFBQWEsVUFBVSxFQUFFLENBQUM7UUFDM0MsTUFBTSxPQUFPLEdBQUk7WUFDYixpQkFBaUIsRUFBRSxJQUFJO1NBQzFCLENBQUM7UUFFRixJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsS0FBSyxDQUFDLGVBQWUsQ0FBRSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFO1FBQzlFLE1BQU0sU0FBUyxHQUFHLE1BQU0sYUFBYSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hELE1BQU0sU0FBUyxHQUFHLElBQUksbUJBQVMsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFdEQsTUFBTSxTQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFdkMsV0FBVyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFDdEMsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXLENBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxzQkFBc0IsRUFBRSxTQUFTLEVBQUU7UUFDaEYsTUFBTSxhQUFhLEdBQUcsSUFBQSxXQUFRLEVBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEMsTUFBTSxXQUFXLEdBQUssTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztRQUU1RyxXQUFXLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNqRCxXQUFXLENBQUMsU0FBUyxHQUFLLFNBQVMsQ0FBQztRQUVwQyxXQUFXLENBQUMsZUFBZSxHQUFHO1lBQzFCLHdCQUF3QixFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUM3RSxhQUFhLEVBQWEsQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUM7U0FDaEYsQ0FBQztRQUVGLHVHQUF1RztRQUN2RyxJQUFJLFdBQVcsQ0FBQyxlQUFlO1lBQzNCLE1BQU0sSUFBQSw0QkFBd0IsRUFBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7O1lBRXJELE1BQU0sSUFBQSxvQkFBZ0IsRUFBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFakQsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFN0MsV0FBVyxDQUFDLFlBQVksR0FBUSxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLG9EQUFpQyxDQUFDLENBQUM7UUFDdkcsV0FBVyxDQUFDLGNBQWMsR0FBTSxJQUFJLENBQUM7UUFDckMsV0FBVyxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUVuQyxJQUFJLENBQUMsc0JBQXNCO1lBQ3ZCLFdBQVcsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFFMUQsTUFBTSxhQUFhLEdBQUcsSUFBSSwwQkFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRXJELElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLEdBQUcsV0FBVyxDQUFDO1FBRTdDLE1BQU0sYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRTNCLE1BQU0sSUFBSSxDQUFDLHVCQUF1QixDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFeEUsSUFBSSxDQUFDLHVDQUF1QyxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFNUUsSUFBSSxTQUFTO1lBQ1QsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUV2RyxJQUFBLDJDQUEyQixFQUFDLG1CQUFtQixFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxLQUFLLENBQUMsWUFBWSxDQUFFLFNBQVMsRUFBRSxXQUFXLEdBQUcsRUFBRTtRQUMzQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRW5ELElBQUksV0FBVyxDQUFDLFNBQVM7WUFDckIsTUFBTSxXQUFXLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRTFDLElBQUksV0FBVyxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUU7WUFDekMsTUFBTSxXQUFXLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDOztZQUUzQyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU1QyxJQUFJLG1CQUFFLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsUUFBUTtZQUNyQyxNQUFNLElBQUEsbUJBQWUsRUFBQyxXQUFXLENBQUMsQ0FBQztRQUV2QyxJQUFJLFdBQVcsQ0FBQyxjQUFjLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWTtZQUN2RCxNQUFNLFdBQVcsQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFL0MsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXRDLElBQUEsMkNBQTJCLEVBQUMsbUJBQW1CLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZLENBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLGFBQWE7UUFDckUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVuRCxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTTtZQUN6QixNQUFNLFdBQVcsQ0FBQyxhQUFhLENBQUMsd0JBQXdCLEVBQUUsQ0FBQzthQUMxRDtZQUNELFdBQVcsQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFJLFlBQVksQ0FBQztZQUMvQyxXQUFXLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxhQUFhLENBQUM7U0FDbkQ7UUFFRCxNQUFNLFdBQVcsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVELEtBQUssQ0FBQyxtQkFBbUIsQ0FBRSxTQUFTO1FBQ2hDLE1BQU0sRUFBRSxhQUFhLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXpELE1BQU0sYUFBYSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDOUMsQ0FBQztJQUVELEtBQUssQ0FBQyxrQkFBa0IsQ0FBRSxTQUFTO1FBQy9CLE1BQU0sRUFBRSxhQUFhLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXpELE1BQU0sYUFBYSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVELEtBQUssQ0FBQyxpQkFBaUIsQ0FBRSxTQUFTO1FBQzlCLE1BQU0sRUFBRSxhQUFhLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXpELE9BQU8sYUFBYSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVELEtBQUssQ0FBQyx5QkFBeUIsQ0FBRSxTQUFTO1FBQ3RDLE1BQU0sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNqRSxNQUFNLE1BQU0sR0FBc0IsTUFBTSxhQUFhLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFeEUsT0FBTztZQUNILGVBQWUsRUFBaUIsSUFBSTtZQUNwQyxlQUFlLEVBQWlCLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUM7WUFDakYsaUJBQWlCLEVBQWUsQ0FBQyxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsUUFBUTtZQUMzRCxpQkFBaUIsRUFBZSxDQUFDLENBQUMsTUFBTTtZQUN4Qyx3QkFBd0IsRUFBUSxDQUFDLENBQUMsTUFBTTtZQUN4QyxvQkFBb0IsRUFBWSxDQUFDLENBQUMsTUFBTTtZQUN4Qyw4QkFBOEIsRUFBRSxLQUFLO1NBQ3hDLENBQUM7SUFDTixDQUFDO0lBRUQsS0FBSyxDQUFDLHVCQUF1QixDQUFFLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFO1FBQ2pILElBQUksTUFBTSxHQUFHLHVCQUF1QixJQUFJLEtBQUssR0FBRyx1QkFBdUIsRUFBRTtZQUNyRSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1lBQ3JFLE1BQU0sUUFBUSxHQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztZQUVwRixNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQ3BGO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxnQkFBZ0IsQ0FBRSxTQUFTLEVBQUUsR0FBRztRQUNsQyxNQUFNLEVBQUUsYUFBYSxFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6RCxNQUFNLFNBQVMsR0FBVyxNQUFNLGFBQWEsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUVoRSxNQUFNLElBQUEsZ0JBQVUsRUFBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELEtBQUssQ0FBQyxzQkFBc0IsQ0FBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU87UUFDbEQsTUFBTSxFQUFFLGFBQWEsRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekQsTUFBTSxTQUFTLEdBQVcsTUFBTSxhQUFhLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFaEUsTUFBTSxJQUFBLG1CQUFzQixFQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDM0QsQ0FBQyxJQUNIIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE9TIGZyb20gJ29zLWZhbWlseSc7XG5pbXBvcnQgeyBwYXJzZSBhcyBwYXJzZVVybCB9IGZyb20gJ3VybCc7XG5pbXBvcnQgZGVkaWNhdGVkUHJvdmlkZXJCYXNlIGZyb20gJy4uL2Jhc2UnO1xuaW1wb3J0IENocm9tZVJ1blRpbWVJbmZvIGZyb20gJy4vcnVudGltZS1pbmZvJztcbmltcG9ydCBnZXRDb25maWcgZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHtcbiAgICBzdGFydCBhcyBzdGFydExvY2FsQ2hyb21lLFxuICAgIHN0YXJ0T25Eb2NrZXIgYXMgc3RhcnRMb2NhbENocm9tZU9uRG9ja2VyLFxuICAgIHN0b3AgYXMgc3RvcExvY2FsQ2hyb21lLFxufSBmcm9tICcuL2xvY2FsLWNocm9tZSc7XG5pbXBvcnQgeyBHRVRfV0lORE9XX0RJTUVOU0lPTlNfSU5GT19TQ1JJUFQgfSBmcm9tICcuLi8uLi8uLi91dGlscy9jbGllbnQtZnVuY3Rpb25zJztcbmltcG9ydCB7IEJyb3dzZXJDbGllbnQgfSBmcm9tICcuL2NkcC1jbGllbnQnO1xuaW1wb3J0IHsgZGlzcGF0Y2hFdmVudCBhcyBkaXNwYXRjaFByb3h5bGVzc0V2ZW50LCBuYXZpZ2F0ZVRvIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vcHJveHlsZXNzL3V0aWxzL2NkcCc7XG5pbXBvcnQgUHJveHlsZXNzIGZyb20gJy4uLy4uLy4uLy4uLy4uL3Byb3h5bGVzcyc7XG5pbXBvcnQgeyBjaHJvbWVCcm93c2VyUHJvdmlkZXJMb2dnZXIgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi91dGlscy9kZWJ1Zy1sb2dnZXJzJztcblxuY29uc3QgTUlOX0FWQUlMQUJMRV9ESU1FTlNJT04gPSA1MDtcblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIC4uLmRlZGljYXRlZFByb3ZpZGVyQmFzZSxcblxuICAgIGdldENvbmZpZyAobmFtZSkge1xuICAgICAgICByZXR1cm4gZ2V0Q29uZmlnKG5hbWUpO1xuICAgIH0sXG5cbiAgICBfZ2V0QnJvd3NlclByb3RvY29sQ2xpZW50IChydW50aW1lSW5mbykge1xuICAgICAgICByZXR1cm4gcnVudGltZUluZm8uYnJvd3NlckNsaWVudDtcbiAgICB9LFxuXG4gICAgYXN5bmMgX2NyZWF0ZVJ1blRpbWVJbmZvIChob3N0TmFtZSwgY29uZmlnLCBkaXNhYmxlTXVsdGlwbGVXaW5kb3dzKSB7XG4gICAgICAgIHJldHVybiBDaHJvbWVSdW5UaW1lSW5mby5jcmVhdGUoaG9zdE5hbWUsIGNvbmZpZywgZGlzYWJsZU11bHRpcGxlV2luZG93cyk7XG4gICAgfSxcblxuICAgIF9zZXRVc2VyQWdlbnRNZXRhSW5mb0ZvckVtdWxhdGluZ0RldmljZSAoYnJvd3NlcklkLCBjb25maWcpIHtcbiAgICAgICAgY29uc3QgeyBlbXVsYXRpb24sIGRldmljZU5hbWUgfSA9IGNvbmZpZztcbiAgICAgICAgY29uc3QgaXNEZXZpY2VFbXVsYXRpb24gICAgICAgICA9IGVtdWxhdGlvbiAmJiBkZXZpY2VOYW1lO1xuXG4gICAgICAgIGlmICghaXNEZXZpY2VFbXVsYXRpb24pXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3QgbWV0YUluZm8gPSBgRW11bGF0aW5nICR7ZGV2aWNlTmFtZX1gO1xuICAgICAgICBjb25zdCBvcHRpb25zICA9IHtcbiAgICAgICAgICAgIGFwcGVuZFRvVXNlckFnZW50OiB0cnVlLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuc2V0VXNlckFnZW50TWV0YUluZm8oYnJvd3NlcklkLCBtZXRhSW5mbywgb3B0aW9ucyk7XG4gICAgfSxcblxuICAgIGFzeW5jIF9zZXR1cFByb3h5bGVzcyAoeyBicm93c2VySWQsIGJyb3dzZXJDbGllbnQsIHJ1bnRpbWVJbmZvLCBwcm94eWxlc3NPcHRpb25zIH0pIHtcbiAgICAgICAgY29uc3QgY2RwQ2xpZW50ID0gYXdhaXQgYnJvd3NlckNsaWVudC5nZXRBY3RpdmVDbGllbnQoKTtcbiAgICAgICAgY29uc3QgcHJveHlsZXNzID0gbmV3IFByb3h5bGVzcyhicm93c2VySWQsIGNkcENsaWVudCk7XG5cbiAgICAgICAgYXdhaXQgcHJveHlsZXNzLmluaXQocHJveHlsZXNzT3B0aW9ucyk7XG5cbiAgICAgICAgcnVudGltZUluZm8ucHJveHlsZXNzID0gcHJveHlsZXNzO1xuICAgIH0sXG5cbiAgICBhc3luYyBvcGVuQnJvd3NlciAoYnJvd3NlcklkLCBwYWdlVXJsLCBjb25maWcsIHsgZGlzYWJsZU11bHRpcGxlV2luZG93cywgcHJveHlsZXNzIH0pIHtcbiAgICAgICAgY29uc3QgcGFyc2VkUGFnZVVybCA9IHBhcnNlVXJsKHBhZ2VVcmwpO1xuICAgICAgICBjb25zdCBydW50aW1lSW5mbyAgID0gYXdhaXQgdGhpcy5fY3JlYXRlUnVuVGltZUluZm8ocGFyc2VkUGFnZVVybC5ob3N0bmFtZSwgY29uZmlnLCBkaXNhYmxlTXVsdGlwbGVXaW5kb3dzKTtcblxuICAgICAgICBydW50aW1lSW5mby5icm93c2VyTmFtZSA9IHRoaXMuX2dldEJyb3dzZXJOYW1lKCk7XG4gICAgICAgIHJ1bnRpbWVJbmZvLmJyb3dzZXJJZCAgID0gYnJvd3NlcklkO1xuXG4gICAgICAgIHJ1bnRpbWVJbmZvLnByb3ZpZGVyTWV0aG9kcyA9IHtcbiAgICAgICAgICAgIHJlc2l6ZUxvY2FsQnJvd3NlcldpbmRvdzogKC4uLmFyZ3MpID0+IHRoaXMucmVzaXplTG9jYWxCcm93c2VyV2luZG93KC4uLmFyZ3MpLFxuICAgICAgICAgICAgcmVwb3J0V2FybmluZzogICAgICAgICAgICAoLi4uYXJncykgPT4gdGhpcy5yZXBvcnRXYXJuaW5nKGJyb3dzZXJJZCwgLi4uYXJncyksXG4gICAgICAgIH07XG5cbiAgICAgICAgLy9OT1RFOiBBIG5vdC13b3JraW5nIHRhYiBpcyBvcGVuZWQgd2hlbiB0aGUgYnJvd3NlciBzdGFydCBpbiB0aGUgZG9ja2VyIHNvIHdlIHNob3VsZCBjcmVhdGUgYSBuZXcgdGFiLlxuICAgICAgICBpZiAocnVudGltZUluZm8uaXNDb250YWluZXJpemVkKVxuICAgICAgICAgICAgYXdhaXQgc3RhcnRMb2NhbENocm9tZU9uRG9ja2VyKHBhZ2VVcmwsIHJ1bnRpbWVJbmZvKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgYXdhaXQgc3RhcnRMb2NhbENocm9tZShwYWdlVXJsLCBydW50aW1lSW5mbyk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yQ29ubmVjdGlvblJlYWR5KGJyb3dzZXJJZCk7XG5cbiAgICAgICAgcnVudGltZUluZm8udmlld3BvcnRTaXplICAgICAgPSBhd2FpdCB0aGlzLnJ1bkluaXRTY3JpcHQoYnJvd3NlcklkLCBHRVRfV0lORE9XX0RJTUVOU0lPTlNfSU5GT19TQ1JJUFQpO1xuICAgICAgICBydW50aW1lSW5mby5hY3RpdmVXaW5kb3dJZCAgICA9IG51bGw7XG4gICAgICAgIHJ1bnRpbWVJbmZvLndpbmRvd0Rlc2NyaXB0b3JzID0ge307XG5cbiAgICAgICAgaWYgKCFkaXNhYmxlTXVsdGlwbGVXaW5kb3dzKVxuICAgICAgICAgICAgcnVudGltZUluZm8uYWN0aXZlV2luZG93SWQgPSB0aGlzLmNhbGN1bGF0ZVdpbmRvd0lkKCk7XG5cbiAgICAgICAgY29uc3QgYnJvd3NlckNsaWVudCA9IG5ldyBCcm93c2VyQ2xpZW50KHJ1bnRpbWVJbmZvKTtcblxuICAgICAgICB0aGlzLm9wZW5lZEJyb3dzZXJzW2Jyb3dzZXJJZF0gPSBydW50aW1lSW5mbztcblxuICAgICAgICBhd2FpdCBicm93c2VyQ2xpZW50LmluaXQoKTtcblxuICAgICAgICBhd2FpdCB0aGlzLl9lbnN1cmVXaW5kb3dJc0V4cGFuZGVkKGJyb3dzZXJJZCwgcnVudGltZUluZm8udmlld3BvcnRTaXplKTtcblxuICAgICAgICB0aGlzLl9zZXRVc2VyQWdlbnRNZXRhSW5mb0ZvckVtdWxhdGluZ0RldmljZShicm93c2VySWQsIHJ1bnRpbWVJbmZvLmNvbmZpZyk7XG5cbiAgICAgICAgaWYgKHByb3h5bGVzcylcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NldHVwUHJveHlsZXNzKHsgYnJvd3NlcklkLCBicm93c2VyQ2xpZW50LCBydW50aW1lSW5mbywgcHJveHlsZXNzT3B0aW9uczogcHJveHlsZXNzIH0pO1xuXG4gICAgICAgIGNocm9tZUJyb3dzZXJQcm92aWRlckxvZ2dlcignYnJvd3NlciBvcGVuZWQgJXMnLCBicm93c2VySWQpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjbG9zZUJyb3dzZXIgKGJyb3dzZXJJZCwgY2xvc2luZ0luZm8gPSB7fSkge1xuICAgICAgICBjb25zdCBydW50aW1lSW5mbyA9IHRoaXMub3BlbmVkQnJvd3NlcnNbYnJvd3NlcklkXTtcblxuICAgICAgICBpZiAocnVudGltZUluZm8ucHJveHlsZXNzKVxuICAgICAgICAgICAgYXdhaXQgcnVudGltZUluZm8ucHJveHlsZXNzLmRpc3Bvc2UoKTtcblxuICAgICAgICBpZiAocnVudGltZUluZm8uYnJvd3NlckNsaWVudC5pc0hlYWRsZXNzVGFiKCkpXG4gICAgICAgICAgICBhd2FpdCBydW50aW1lSW5mby5icm93c2VyQ2xpZW50LmNsb3NlVGFiKCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2xvc2VMb2NhbEJyb3dzZXIoYnJvd3NlcklkKTtcblxuICAgICAgICBpZiAoT1MubWFjIHx8IHJ1bnRpbWVJbmZvLmNvbmZpZy5oZWFkbGVzcylcbiAgICAgICAgICAgIGF3YWl0IHN0b3BMb2NhbENocm9tZShydW50aW1lSW5mbyk7XG5cbiAgICAgICAgaWYgKHJ1bnRpbWVJbmZvLnRlbXBQcm9maWxlRGlyICYmICFjbG9zaW5nSW5mby5pc1Jlc3RhcnRpbmcpXG4gICAgICAgICAgICBhd2FpdCBydW50aW1lSW5mby50ZW1wUHJvZmlsZURpci5kaXNwb3NlKCk7XG5cbiAgICAgICAgZGVsZXRlIHRoaXMub3BlbmVkQnJvd3NlcnNbYnJvd3NlcklkXTtcblxuICAgICAgICBjaHJvbWVCcm93c2VyUHJvdmlkZXJMb2dnZXIoJ2Jyb3dzZXIgY2xvc2VkICVzJywgYnJvd3NlcklkKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVzaXplV2luZG93IChicm93c2VySWQsIHdpZHRoLCBoZWlnaHQsIGN1cnJlbnRXaWR0aCwgY3VycmVudEhlaWdodCkge1xuICAgICAgICBjb25zdCBydW50aW1lSW5mbyA9IHRoaXMub3BlbmVkQnJvd3NlcnNbYnJvd3NlcklkXTtcblxuICAgICAgICBpZiAocnVudGltZUluZm8uY29uZmlnLm1vYmlsZSlcbiAgICAgICAgICAgIGF3YWl0IHJ1bnRpbWVJbmZvLmJyb3dzZXJDbGllbnQudXBkYXRlTW9iaWxlVmlld3BvcnRTaXplKCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcnVudGltZUluZm8udmlld3BvcnRTaXplLndpZHRoICA9IGN1cnJlbnRXaWR0aDtcbiAgICAgICAgICAgIHJ1bnRpbWVJbmZvLnZpZXdwb3J0U2l6ZS5oZWlnaHQgPSBjdXJyZW50SGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgcnVudGltZUluZm8uYnJvd3NlckNsaWVudC5yZXNpemVXaW5kb3coeyB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBzdGFydENhcHR1cmluZ1ZpZGVvIChicm93c2VySWQpIHtcbiAgICAgICAgY29uc3QgeyBicm93c2VyQ2xpZW50IH0gPSB0aGlzLm9wZW5lZEJyb3dzZXJzW2Jyb3dzZXJJZF07XG5cbiAgICAgICAgYXdhaXQgYnJvd3NlckNsaWVudC5zdGFydENhcHR1cmluZ1ZpZGVvKCk7XG4gICAgfSxcblxuICAgIGFzeW5jIHN0b3BDYXB0dXJpbmdWaWRlbyAoYnJvd3NlcklkKSB7XG4gICAgICAgIGNvbnN0IHsgYnJvd3NlckNsaWVudCB9ID0gdGhpcy5vcGVuZWRCcm93c2Vyc1ticm93c2VySWRdO1xuXG4gICAgICAgIGF3YWl0IGJyb3dzZXJDbGllbnQuc3RvcENhcHR1cmluZ1ZpZGVvKCk7XG4gICAgfSxcblxuICAgIGFzeW5jIGdldFZpZGVvRnJhbWVEYXRhIChicm93c2VySWQpIHtcbiAgICAgICAgY29uc3QgeyBicm93c2VyQ2xpZW50IH0gPSB0aGlzLm9wZW5lZEJyb3dzZXJzW2Jyb3dzZXJJZF07XG5cbiAgICAgICAgcmV0dXJuIGJyb3dzZXJDbGllbnQuZ2V0VmlkZW9GcmFtZURhdGEoKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgaGFzQ3VzdG9tQWN0aW9uRm9yQnJvd3NlciAoYnJvd3NlcklkKSB7XG4gICAgICAgIGNvbnN0IHsgY29uZmlnLCBicm93c2VyQ2xpZW50IH0gPSB0aGlzLm9wZW5lZEJyb3dzZXJzW2Jyb3dzZXJJZF07XG4gICAgICAgIGNvbnN0IGNsaWVudCAgICAgICAgICAgICAgICAgICAgPSBhd2FpdCBicm93c2VyQ2xpZW50LmdldEFjdGl2ZUNsaWVudCgpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBoYXNDbG9zZUJyb3dzZXI6ICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICBoYXNSZXNpemVXaW5kb3c6ICAgICAgICAgICAgICAgICEhY2xpZW50ICYmIChjb25maWcuZW11bGF0aW9uIHx8IGNvbmZpZy5oZWFkbGVzcyksXG4gICAgICAgICAgICBoYXNNYXhpbWl6ZVdpbmRvdzogICAgICAgICAgICAgICEhY2xpZW50ICYmIGNvbmZpZy5oZWFkbGVzcyxcbiAgICAgICAgICAgIGhhc1Rha2VTY3JlZW5zaG90OiAgICAgICAgICAgICAgISFjbGllbnQsXG4gICAgICAgICAgICBoYXNDaHJvbWVsZXNzU2NyZWVuc2hvdHM6ICAgICAgICEhY2xpZW50LFxuICAgICAgICAgICAgaGFzR2V0VmlkZW9GcmFtZURhdGE6ICAgICAgICAgICAhIWNsaWVudCxcbiAgICAgICAgICAgIGhhc0NhblJlc2l6ZVdpbmRvd1RvRGltZW5zaW9uczogZmFsc2UsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIF9lbnN1cmVXaW5kb3dJc0V4cGFuZGVkIChicm93c2VySWQsIHsgaGVpZ2h0LCB3aWR0aCwgYXZhaWxhYmxlSGVpZ2h0LCBhdmFpbGFibGVXaWR0aCwgb3V0ZXJXaWR0aCwgb3V0ZXJIZWlnaHQgfSkge1xuICAgICAgICBpZiAoaGVpZ2h0IDwgTUlOX0FWQUlMQUJMRV9ESU1FTlNJT04gfHwgd2lkdGggPCBNSU5fQVZBSUxBQkxFX0RJTUVOU0lPTikge1xuICAgICAgICAgICAgY29uc3QgbmV3SGVpZ2h0ID0gTWF0aC5tYXgoYXZhaWxhYmxlSGVpZ2h0LCBNSU5fQVZBSUxBQkxFX0RJTUVOU0lPTik7XG4gICAgICAgICAgICBjb25zdCBuZXdXaWR0aCAgPSBNYXRoLm1heChNYXRoLmZsb29yKGF2YWlsYWJsZVdpZHRoIC8gMiksIE1JTl9BVkFJTEFCTEVfRElNRU5TSU9OKTtcblxuICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXNpemVXaW5kb3coYnJvd3NlcklkLCBuZXdXaWR0aCwgbmV3SGVpZ2h0LCBvdXRlcldpZHRoLCBvdXRlckhlaWdodCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgb3BlbkZpbGVQcm90b2NvbCAoYnJvd3NlcklkLCB1cmwpIHtcbiAgICAgICAgY29uc3QgeyBicm93c2VyQ2xpZW50IH0gPSB0aGlzLm9wZW5lZEJyb3dzZXJzW2Jyb3dzZXJJZF07XG4gICAgICAgIGNvbnN0IGNkcENsaWVudCAgICAgICAgID0gYXdhaXQgYnJvd3NlckNsaWVudC5nZXRBY3RpdmVDbGllbnQoKTtcblxuICAgICAgICBhd2FpdCBuYXZpZ2F0ZVRvKGNkcENsaWVudCwgdXJsKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZGlzcGF0Y2hQcm94eWxlc3NFdmVudCAoYnJvd3NlcklkLCB0eXBlLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHsgYnJvd3NlckNsaWVudCB9ID0gdGhpcy5vcGVuZWRCcm93c2Vyc1ticm93c2VySWRdO1xuICAgICAgICBjb25zdCBjZHBDbGllbnQgICAgICAgICA9IGF3YWl0IGJyb3dzZXJDbGllbnQuZ2V0QWN0aXZlQ2xpZW50KCk7XG5cbiAgICAgICAgYXdhaXQgZGlzcGF0Y2hQcm94eWxlc3NFdmVudChjZHBDbGllbnQsIHR5cGUsIG9wdGlvbnMpO1xuICAgIH0sXG59O1xuIl19
155
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYnJvd3Nlci9wcm92aWRlci9idWlsdC1pbi9kZWRpY2F0ZWQvY2hyb21lL2luZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsMERBQTJCO0FBQzNCLDZCQUF3QztBQUN4QyxtREFBNEM7QUFDNUMsa0VBQStDO0FBQy9DLHNEQUFpQztBQUNqQyxpREFJd0I7QUFDeEIsc0VBQW9GO0FBQ3BGLDZDQUE2QztBQUM3Qyw0REFBeUc7QUFDekcseUVBQWlEO0FBQ2pELHNFQUFpRjtBQUNqRiwwREFBMkQ7QUFDM0QsdUVBQStDO0FBRS9DLE1BQU0sdUJBQXVCLEdBQUcsRUFBRSxDQUFDO0FBRW5DLGtEQUNPLGNBQXFCLEtBRXhCLFNBQVMsQ0FBRSxJQUFJO1FBQ1gsT0FBTyxJQUFBLGdCQUFTLEVBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELEtBQUssQ0FBQyxtQkFBbUIsQ0FBRSxTQUFTO1FBQ2hDLE1BQU0sRUFBRSxhQUFhLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sU0FBUyxHQUFXLE1BQU0sYUFBYSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRWhFLE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7SUFFRCx5QkFBeUIsQ0FBRSxXQUFXO1FBQ2xDLE9BQU8sV0FBVyxDQUFDLGFBQWEsQ0FBQztJQUNyQyxDQUFDO0lBRUQsS0FBSyxDQUFDLGtCQUFrQixDQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsc0JBQXNCO1FBQzlELE9BQU8sc0JBQWlCLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRUQsdUNBQXVDLENBQUUsU0FBUyxFQUFFLE1BQU07UUFDdEQsTUFBTSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVB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SSxFQUFFLE9BQU87UUFDbEQsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFNUQsTUFBTSxJQUFBLG1CQUFzQixFQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELEtBQUssQ0FBQyw4QkFBOEIsQ0FBRSxTQUFTLEVBQUUsYUFBYTtRQUMxRCxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU1RCxLQUFLLE1BQU0sS0FBSyxJQUFJLGFBQWEsRUFBRTtZQUMvQixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssaUJBQVMsQ0FBQyxLQUFLO2dCQUM5QixNQUFNLElBQUEsZUFBSyxFQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7O2dCQUVqQyxNQUFNLElBQUEsbUJBQXNCLEVBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzFFO0lBQ0wsQ0FBQyxJQUNIIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE9TIGZyb20gJ29zLWZhbWlseSc7XG5pbXBvcnQgeyBwYXJzZSBhcyBwYXJzZVVybCB9IGZyb20gJ3VybCc7XG5pbXBvcnQgZGVkaWNhdGVkUHJvdmlkZXJCYXNlIGZyb20gJy4uL2Jhc2UnO1xuaW1wb3J0IENocm9tZVJ1blRpbWVJbmZvIGZyb20gJy4vcnVudGltZS1pbmZvJztcbmltcG9ydCBnZXRDb25maWcgZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHtcbiAgICBzdGFydCBhcyBzdGFydExvY2FsQ2hyb21lLFxuICAgIHN0YXJ0T25Eb2NrZXIgYXMgc3RhcnRMb2NhbENocm9tZU9uRG9ja2VyLFxuICAgIHN0b3AgYXMgc3RvcExvY2FsQ2hyb21lLFxufSBmcm9tICcuL2xvY2FsLWNocm9tZSc7XG5pbXBvcnQgeyBHRVRfV0lORE9XX0RJTUVOU0lPTlNfSU5GT19TQ1JJUFQgfSBmcm9tICcuLi8uLi8uLi91dGlscy9jbGllbnQtZnVuY3Rpb25zJztcbmltcG9ydCB7IEJyb3dzZXJDbGllbnQgfSBmcm9tICcuL2NkcC1jbGllbnQnO1xuaW1wb3J0IHsgZGlzcGF0Y2hFdmVudCBhcyBkaXNwYXRjaFByb3h5bGVzc0V2ZW50LCBuYXZpZ2F0ZVRvIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vcHJveHlsZXNzL3V0aWxzL2NkcCc7XG5pbXBvcnQgUHJveHlsZXNzIGZyb20gJy4uLy4uLy4uLy4uLy4uL3Byb3h5bGVzcyc7XG5pbXBvcnQgeyBjaHJvbWVCcm93c2VyUHJvdmlkZXJMb2dnZXIgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi91dGlscy9kZWJ1Zy1sb2dnZXJzJztcbmltcG9ydCB7IEV2ZW50VHlwZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3Byb3h5bGVzcy90eXBlcyc7XG5pbXBvcnQgZGVsYXkgZnJvbSAnLi4vLi4vLi4vLi4vLi4vdXRpbHMvZGVsYXknO1xuXG5jb25zdCBNSU5fQVZBSUxBQkxFX0RJTUVOU0lPTiA9IDUwO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgLi4uZGVkaWNhdGVkUHJvdmlkZXJCYXNlLFxuXG4gICAgZ2V0Q29uZmlnIChuYW1lKSB7XG4gICAgICAgIHJldHVybiBnZXRDb25maWcobmFtZSk7XG4gICAgfSxcblxuICAgIGFzeW5jIF9nZXRBY3RpdmVDRFBDbGllbnQgKGJyb3dzZXJJZCkge1xuICAgICAgICBjb25zdCB7IGJyb3dzZXJDbGllbnQgfSA9IHRoaXMub3BlbmVkQnJvd3NlcnNbYnJvd3NlcklkXTtcbiAgICAgICAgY29uc3QgY2RwQ2xpZW50ICAgICAgICAgPSBhd2FpdCBicm93c2VyQ2xpZW50LmdldEFjdGl2ZUNsaWVudCgpO1xuXG4gICAgICAgIHJldHVybiBjZHBDbGllbnQ7XG4gICAgfSxcblxuICAgIF9nZXRCcm93c2VyUHJvdG9jb2xDbGllbnQgKHJ1bnRpbWVJbmZvKSB7XG4gICAgICAgIHJldHVybiBydW50aW1lSW5mby5icm93c2VyQ2xpZW50O1xuICAgIH0sXG5cbiAgICBhc3luYyBfY3JlYXRlUnVuVGltZUluZm8gKGhvc3ROYW1lLCBjb25maWcsIGRpc2FibGVNdWx0aXBsZVdpbmRvd3MpIHtcbiAgICAgICAgcmV0dXJuIENocm9tZVJ1blRpbWVJbmZvLmNyZWF0ZShob3N0TmFtZSwgY29uZmlnLCBkaXNhYmxlTXVsdGlwbGVXaW5kb3dzKTtcbiAgICB9LFxuXG4gICAgX3NldFVzZXJBZ2VudE1ldGFJbmZvRm9yRW11bGF0aW5nRGV2aWNlIChicm93c2VySWQsIGNvbmZpZykge1xuICAgICAgICBjb25zdCB7IGVtdWxhdGlvbiwgZGV2aWNlTmFtZSB9ID0gY29uZmlnO1xuICAgICAgICBjb25zdCBpc0RldmljZUVtdWxhdGlvbiAgICAgICAgID0gZW11bGF0aW9uICYmIGRldmljZU5hbWU7XG5cbiAgICAgICAgaWYgKCFpc0RldmljZUVtdWxhdGlvbilcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCBtZXRhSW5mbyA9IGBFbXVsYXRpbmcgJHtkZXZpY2VOYW1lfWA7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgID0ge1xuICAgICAgICAgICAgYXBwZW5kVG9Vc2VyQWdlbnQ6IHRydWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5zZXRVc2VyQWdlbnRNZXRhSW5mbyhicm93c2VySWQsIG1ldGFJbmZvLCBvcHRpb25zKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgX3NldHVwUHJveHlsZXNzICh7IGJyb3dzZXJJZCwgYnJvd3NlckNsaWVudCwgcnVudGltZUluZm8sIHByb3h5bGVzc09wdGlvbnMgfSkge1xuICAgICAgICBjb25zdCBjZHBDbGllbnQgPSBhd2FpdCBicm93c2VyQ2xpZW50LmdldEFjdGl2ZUNsaWVudCgpO1xuICAgICAgICBjb25zdCBwcm94eWxlc3MgPSBuZXcgUHJveHlsZXNzKGJyb3dzZXJJZCwgY2RwQ2xpZW50KTtcblxuICAgICAgICBhd2FpdCBwcm94eWxlc3MuaW5pdChwcm94eWxlc3NPcHRpb25zKTtcblxuICAgICAgICBydW50aW1lSW5mby5wcm94eWxlc3MgPSBwcm94eWxlc3M7XG4gICAgfSxcblxuICAgIGFzeW5jIG9wZW5Ccm93c2VyIChicm93c2VySWQsIHBhZ2VVcmwsIGNvbmZpZywgeyBkaXNhYmxlTXVsdGlwbGVXaW5kb3dzLCBwcm94eWxlc3MgfSkge1xuICAgICAgICBjb25zdCBwYXJzZWRQYWdlVXJsID0gcGFyc2VVcmwocGFnZVVybCk7XG4gICAgICAgIGNvbnN0IHJ1bnRpbWVJbmZvICAgPSBhd2FpdCB0aGlzLl9jcmVhdGVSdW5UaW1lSW5mbyhwYXJzZWRQYWdlVXJsLmhvc3RuYW1lLCBjb25maWcsIGRpc2FibGVNdWx0aXBsZVdpbmRvd3MpO1xuXG4gICAgICAgIHJ1bnRpbWVJbmZvLmJyb3dzZXJOYW1lID0gdGhpcy5fZ2V0QnJvd3Nlck5hbWUoKTtcbiAgICAgICAgcnVudGltZUluZm8uYnJvd3NlcklkICAgPSBicm93c2VySWQ7XG5cbiAgICAgICAgcnVudGltZUluZm8ucHJvdmlkZXJNZXRob2RzID0ge1xuICAgICAgICAgICAgcmVzaXplTG9jYWxCcm93c2VyV2luZG93OiAoLi4uYXJncykgPT4gdGhpcy5yZXNpemVMb2NhbEJyb3dzZXJXaW5kb3coLi4uYXJncyksXG4gICAgICAgICAgICByZXBvcnRXYXJuaW5nOiAgICAgICAgICAgICguLi5hcmdzKSA9PiB0aGlzLnJlcG9ydFdhcm5pbmcoYnJvd3NlcklkLCAuLi5hcmdzKSxcbiAgICAgICAgfTtcblxuICAgICAgICAvL05PVEU6IEEgbm90LXdvcmtpbmcgdGFiIGlzIG9wZW5lZCB3aGVuIHRoZSBicm93c2VyIHN0YXJ0IGluIHRoZSBkb2NrZXIgc28gd2Ugc2hvdWxkIGNyZWF0ZSBhIG5ldyB0YWIuXG4gICAgICAgIGlmIChydW50aW1lSW5mby5pc0NvbnRhaW5lcml6ZWQpXG4gICAgICAgICAgICBhd2FpdCBzdGFydExvY2FsQ2hyb21lT25Eb2NrZXIocGFnZVVybCwgcnVudGltZUluZm8pO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBhd2FpdCBzdGFydExvY2FsQ2hyb21lKHBhZ2VVcmwsIHJ1bnRpbWVJbmZvKTtcblxuICAgICAgICBhd2FpdCB0aGlzLndhaXRGb3JDb25uZWN0aW9uUmVhZHkoYnJvd3NlcklkKTtcblxuICAgICAgICBydW50aW1lSW5mby52aWV3cG9ydFNpemUgICAgICA9IGF3YWl0IHRoaXMucnVuSW5pdFNjcmlwdChicm93c2VySWQsIEdFVF9XSU5ET1dfRElNRU5TSU9OU19JTkZPX1NDUklQVCk7XG4gICAgICAgIHJ1bnRpbWVJbmZvLmFjdGl2ZVdpbmRvd0lkICAgID0gbnVsbDtcbiAgICAgICAgcnVudGltZUluZm8ud2luZG93RGVzY3JpcHRvcnMgPSB7fTtcblxuICAgICAgICBpZiAoIWRpc2FibGVNdWx0aXBsZVdpbmRvd3MpXG4gICAgICAgICAgICBydW50aW1lSW5mby5hY3RpdmVXaW5kb3dJZCA9IHRoaXMuY2FsY3VsYXRlV2luZG93SWQoKTtcblxuICAgICAgICBjb25zdCBicm93c2VyQ2xpZW50ID0gbmV3IEJyb3dzZXJDbGllbnQocnVudGltZUluZm8pO1xuXG4gICAgICAgIHRoaXMub3BlbmVkQnJvd3NlcnNbYnJvd3NlcklkXSA9IHJ1bnRpbWVJbmZvO1xuXG4gICAgICAgIGF3YWl0IGJyb3dzZXJDbGllbnQuaW5pdCgpO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuX2Vuc3VyZVdpbmRvd0lzRXhwYW5kZWQoYnJvd3NlcklkLCBydW50aW1lSW5mby52aWV3cG9ydFNpemUpO1xuXG4gICAgICAgIHRoaXMuX3NldFVzZXJBZ2VudE1ldGFJbmZvRm9yRW11bGF0aW5nRGV2aWNlKGJyb3dzZXJJZCwgcnVudGltZUluZm8uY29uZmlnKTtcblxuICAgICAgICBpZiAocHJveHlsZXNzKVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fc2V0dXBQcm94eWxlc3MoeyBicm93c2VySWQsIGJyb3dzZXJDbGllbnQsIHJ1bnRpbWVJbmZvLCBwcm94eWxlc3NPcHRpb25zOiBwcm94eWxlc3MgfSk7XG5cbiAgICAgICAgY2hyb21lQnJvd3NlclByb3ZpZGVyTG9nZ2VyKCdicm93c2VyIG9wZW5lZCAlcycsIGJyb3dzZXJJZCk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNsb3NlQnJvd3NlciAoYnJvd3NlcklkLCBjbG9zaW5nSW5mbyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHJ1bnRpbWVJbmZvID0gdGhpcy5vcGVuZWRCcm93c2Vyc1ticm93c2VySWRdO1xuXG4gICAgICAgIGlmIChydW50aW1lSW5mby5wcm94eWxlc3MpXG4gICAgICAgICAgICBhd2FpdCBydW50aW1lSW5mby5wcm94eWxlc3MuZGlzcG9zZSgpO1xuXG4gICAgICAgIGlmIChydW50aW1lSW5mby5icm93c2VyQ2xpZW50LmlzSGVhZGxlc3NUYWIoKSlcbiAgICAgICAgICAgIGF3YWl0IHJ1bnRpbWVJbmZvLmJyb3dzZXJDbGllbnQuY2xvc2VUYWIoKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5jbG9zZUxvY2FsQnJvd3Nlcihicm93c2VySWQpO1xuXG4gICAgICAgIGlmIChPUy5tYWMgfHwgcnVudGltZUluZm8uY29uZmlnLmhlYWRsZXNzKVxuICAgICAgICAgICAgYXdhaXQgc3RvcExvY2FsQ2hyb21lKHJ1bnRpbWVJbmZvKTtcblxuICAgICAgICBpZiAocnVudGltZUluZm8udGVtcFByb2ZpbGVEaXIgJiYgIWNsb3NpbmdJbmZvLmlzUmVzdGFydGluZylcbiAgICAgICAgICAgIGF3YWl0IHJ1bnRpbWVJbmZvLnRlbXBQcm9maWxlRGlyLmRpc3Bvc2UoKTtcblxuICAgICAgICBkZWxldGUgdGhpcy5vcGVuZWRCcm93c2Vyc1ticm93c2VySWRdO1xuXG4gICAgICAgIGNocm9tZUJyb3dzZXJQcm92aWRlckxvZ2dlcignYnJvd3NlciBjbG9zZWQgJXMnLCBicm93c2VySWQpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXNpemVXaW5kb3cgKGJyb3dzZXJJZCwgd2lkdGgsIGhlaWdodCwgY3VycmVudFdpZHRoLCBjdXJyZW50SGVpZ2h0KSB7XG4gICAgICAgIGNvbnN0IHJ1bnRpbWVJbmZvID0gdGhpcy5vcGVuZWRCcm93c2Vyc1ticm93c2VySWRdO1xuXG4gICAgICAgIGlmIChydW50aW1lSW5mby5jb25maWcubW9iaWxlKVxuICAgICAgICAgICAgYXdhaXQgcnVudGltZUluZm8uYnJvd3NlckNsaWVudC51cGRhdGVNb2JpbGVWaWV3cG9ydFNpemUoKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBydW50aW1lSW5mby52aWV3cG9ydFNpemUud2lkdGggID0gY3VycmVudFdpZHRoO1xuICAgICAgICAgICAgcnVudGltZUluZm8udmlld3BvcnRTaXplLmhlaWdodCA9IGN1cnJlbnRIZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBydW50aW1lSW5mby5icm93c2VyQ2xpZW50LnJlc2l6ZVdpbmRvdyh7IHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHN0YXJ0Q2FwdHVyaW5nVmlkZW8gKGJyb3dzZXJJZCkge1xuICAgICAgICBjb25zdCB7IGJyb3dzZXJDbGllbnQgfSA9IHRoaXMub3BlbmVkQnJvd3NlcnNbYnJvd3NlcklkXTtcblxuICAgICAgICBhd2FpdCBicm93c2VyQ2xpZW50LnN0YXJ0Q2FwdHVyaW5nVmlkZW8oKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgc3RvcENhcHR1cmluZ1ZpZGVvIChicm93c2VySWQpIHtcbiAgICAgICAgY29uc3QgeyBicm93c2VyQ2xpZW50IH0gPSB0aGlzLm9wZW5lZEJyb3dzZXJzW2Jyb3dzZXJJZF07XG5cbiAgICAgICAgYXdhaXQgYnJvd3NlckNsaWVudC5zdG9wQ2FwdHVyaW5nVmlkZW8oKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VmlkZW9GcmFtZURhdGEgKGJyb3dzZXJJZCkge1xuICAgICAgICBjb25zdCB7IGJyb3dzZXJDbGllbnQgfSA9IHRoaXMub3BlbmVkQnJvd3NlcnNbYnJvd3NlcklkXTtcblxuICAgICAgICByZXR1cm4gYnJvd3NlckNsaWVudC5nZXRWaWRlb0ZyYW1lRGF0YSgpO1xuICAgIH0sXG5cbiAgICBhc3luYyBoYXNDdXN0b21BY3Rpb25Gb3JCcm93c2VyIChicm93c2VySWQpIHtcbiAgICAgICAgY29uc3QgeyBjb25maWcsIGJyb3dzZXJDbGllbnQgfSA9IHRoaXMub3BlbmVkQnJvd3NlcnNbYnJvd3NlcklkXTtcbiAgICAgICAgY29uc3QgY2xpZW50ICAgICAgICAgICAgICAgICAgICA9IGF3YWl0IGJyb3dzZXJDbGllbnQuZ2V0QWN0aXZlQ2xpZW50KCk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhhc0Nsb3NlQnJvd3NlcjogICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgIGhhc1Jlc2l6ZVdpbmRvdzogICAgICAgICAgICAgICAgISFjbGllbnQgJiYgKGNvbmZpZy5lbXVsYXRpb24gfHwgY29uZmlnLmhlYWRsZXNzKSxcbiAgICAgICAgICAgIGhhc01heGltaXplV2luZG93OiAgICAgICAgICAgICAgISFjbGllbnQgJiYgY29uZmlnLmhlYWRsZXNzLFxuICAgICAgICAgICAgaGFzVGFrZVNjcmVlbnNob3Q6ICAgICAgICAgICAgICAhIWNsaWVudCxcbiAgICAgICAgICAgIGhhc0Nocm9tZWxlc3NTY3JlZW5zaG90czogICAgICAgISFjbGllbnQsXG4gICAgICAgICAgICBoYXNHZXRWaWRlb0ZyYW1lRGF0YTogICAgICAgICAgICEhY2xpZW50LFxuICAgICAgICAgICAgaGFzQ2FuUmVzaXplV2luZG93VG9EaW1lbnNpb25zOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgX2Vuc3VyZVdpbmRvd0lzRXhwYW5kZWQgKGJyb3dzZXJJZCwgeyBoZWlnaHQsIHdpZHRoLCBhdmFpbGFibGVIZWlnaHQsIGF2YWlsYWJsZVdpZHRoLCBvdXRlcldpZHRoLCBvdXRlckhlaWdodCB9KSB7XG4gICAgICAgIGlmIChoZWlnaHQgPCBNSU5fQVZBSUxBQkxFX0RJTUVOU0lPTiB8fCB3aWR0aCA8IE1JTl9BVkFJTEFCTEVfRElNRU5TSU9OKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdIZWlnaHQgPSBNYXRoLm1heChhdmFpbGFibGVIZWlnaHQsIE1JTl9BVkFJTEFCTEVfRElNRU5TSU9OKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld1dpZHRoICA9IE1hdGgubWF4KE1hdGguZmxvb3IoYXZhaWxhYmxlV2lkdGggLyAyKSwgTUlOX0FWQUlMQUJMRV9ESU1FTlNJT04pO1xuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlc2l6ZVdpbmRvdyhicm93c2VySWQsIG5ld1dpZHRoLCBuZXdIZWlnaHQsIG91dGVyV2lkdGgsIG91dGVySGVpZ2h0KTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBvcGVuRmlsZVByb3RvY29sIChicm93c2VySWQsIHVybCkge1xuICAgICAgICBjb25zdCBjZHBDbGllbnQgPSBhd2FpdCB0aGlzLl9nZXRBY3RpdmVDRFBDbGllbnQoYnJvd3NlcklkKTtcblxuICAgICAgICBhd2FpdCBuYXZpZ2F0ZVRvKGNkcENsaWVudCwgdXJsKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZGlzcGF0Y2hQcm94eWxlc3NFdmVudCAoYnJvd3NlcklkLCB0eXBlLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGNkcENsaWVudCA9IGF3YWl0IHRoaXMuX2dldEFjdGl2ZUNEUENsaWVudChicm93c2VySWQpO1xuXG4gICAgICAgIGF3YWl0IGRpc3BhdGNoUHJveHlsZXNzRXZlbnQoY2RwQ2xpZW50LCB0eXBlLCBvcHRpb25zKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZGlzcGF0Y2hQcm94eWxlc3NFdmVudFNlcXVlbmNlIChicm93c2VySWQsIGV2ZW50U2VxdWVuY2UpIHtcbiAgICAgICAgY29uc3QgY2RwQ2xpZW50ID0gYXdhaXQgdGhpcy5fZ2V0QWN0aXZlQ0RQQ2xpZW50KGJyb3dzZXJJZCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBldmVudCBvZiBldmVudFNlcXVlbmNlKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gRXZlbnRUeXBlLkRlbGF5KVxuICAgICAgICAgICAgICAgIGF3YWl0IGRlbGF5KGV2ZW50Lm9wdGlvbnMuZGVsYXkpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGF3YWl0IGRpc3BhdGNoUHJveHlsZXNzRXZlbnQoY2RwQ2xpZW50LCBldmVudC50eXBlLCBldmVudC5vcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuIl19