@aws-cdk/toolkit-lib 1.6.0 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -33,10 +33,9 @@ class DriftFormatter {
33
33
  */
34
34
  formatStackDrift() {
35
35
  const formatterOutput = this.formatStackDriftChanges(this.buildLogicalToPathMap());
36
- // we are only interested in actual drifts and always ignore the metadata resource
37
- const actualDrifts = this.resourceDriftResults.filter(d => d.StackResourceDriftStatus === 'MODIFIED' ||
38
- d.StackResourceDriftStatus === 'DELETED' ||
39
- d.ResourceType === 'AWS::CDK::Metadata');
36
+ // we are only interested in actual drifts (and ignore the metadata resource)
37
+ const actualDrifts = this.resourceDriftResults.filter(d => (d.StackResourceDriftStatus === 'MODIFIED' || d.StackResourceDriftStatus === 'DELETED')
38
+ && d.ResourceType !== 'AWS::CDK::Metadata');
40
39
  // must output the stack name if there are drifts
41
40
  const stackHeader = (0, node_util_1.format)(`Stack ${chalk.bold(this.stackName)}\n`);
42
41
  if (actualDrifts.length === 0) {
@@ -45,6 +44,7 @@ class DriftFormatter {
45
44
  numResourcesWithDrift: 0,
46
45
  numResourcesUnchecked: this.allStackResources.size - this.resourceDriftResults.length,
47
46
  stackHeader,
47
+ unchecked: formatterOutput.unchecked,
48
48
  summary: finalResult,
49
49
  };
50
50
  }
@@ -68,11 +68,8 @@ class DriftFormatter {
68
68
  return map;
69
69
  }
70
70
  /**
71
- * Renders stack drift information to the given stream
71
+ * Renders stack drift information
72
72
  *
73
- * @param driftResults - The stack resource drifts from CloudFormation
74
- * @param allStackResources - A map of all stack resources
75
- * @param verbose - Whether to output more verbose text (include undrifted resources)
76
73
  * @param logicalToPathMap - A map from logical ID to construct path
77
74
  */
78
75
  formatStackDriftChanges(logicalToPathMap = {}) {
@@ -91,34 +88,32 @@ class DriftFormatter {
91
88
  for (const drift of unchangedResources) {
92
89
  if (!drift.LogicalResourceId || !drift.ResourceType)
93
90
  continue;
94
- unchanged += `${CONTEXT} ${this.formatValue(drift.ResourceType, chalk.cyan)} ${this.formatLogicalId(logicalToPathMap, drift.LogicalResourceId)}\n`;
91
+ unchanged += `${CONTEXT} ${chalk.cyan(drift.ResourceType)} ${this.formatLogicalId(logicalToPathMap, drift.LogicalResourceId)}\n`;
95
92
  }
96
93
  unchanged += this.printSectionFooter();
97
94
  }
98
- // Process all unchecked resources
99
- if (this.allStackResources) {
100
- const uncheckedResources = Array.from(this.allStackResources.keys()).filter((logicalId) => {
101
- return !drifts.find((drift) => drift.LogicalResourceId === logicalId);
102
- });
103
- if (uncheckedResources.length > 0) {
104
- unchecked = this.printSectionHeader('Unchecked Resources');
105
- for (const logicalId of uncheckedResources) {
106
- const resourceType = this.allStackResources.get(logicalId);
107
- unchecked += `${CONTEXT} ${this.formatValue(resourceType, chalk.cyan)} ${this.formatLogicalId(logicalToPathMap, logicalId)}\n`;
108
- }
109
- unchecked += this.printSectionFooter();
95
+ // Process all unchecked and unknown resources
96
+ const uncheckedResources = Array.from(this.allStackResources.keys()).filter((logicalId) => {
97
+ const drift = drifts.find((d) => d.LogicalResourceId === logicalId);
98
+ return !drift || drift.StackResourceDriftStatus === client_cloudformation_1.StackResourceDriftStatus.UNKNOWN;
99
+ });
100
+ if (uncheckedResources.length > 0) {
101
+ unchecked = this.printSectionHeader('Unchecked Resources');
102
+ for (const logicalId of uncheckedResources) {
103
+ const resourceType = this.allStackResources.get(logicalId);
104
+ unchecked += `${CONTEXT} ${chalk.cyan(resourceType)} ${this.formatLogicalId(logicalToPathMap, logicalId)}\n`;
110
105
  }
106
+ unchecked += this.printSectionFooter();
111
107
  }
112
- // Process modified resources
113
- const modifiedResources = drifts.filter(d => d.StackResourceDriftStatus === client_cloudformation_1.StackResourceDriftStatus.MODIFIED);
108
+ // Process modified resources (exclude AWS::CDK::Metadata)
109
+ const modifiedResources = drifts.filter(d => d.StackResourceDriftStatus === client_cloudformation_1.StackResourceDriftStatus.MODIFIED
110
+ && d.ResourceType !== 'AWS::CDK::Metadata');
114
111
  if (modifiedResources.length > 0) {
115
112
  modified = this.printSectionHeader('Modified Resources');
116
113
  for (const drift of modifiedResources) {
117
114
  if (!drift.LogicalResourceId || !drift.ResourceType)
118
115
  continue;
119
- if (modified === undefined)
120
- modified = '';
121
- modified += `${UPDATE} ${this.formatValue(drift.ResourceType, chalk.cyan)} ${this.formatLogicalId(logicalToPathMap, drift.LogicalResourceId)}\n`;
116
+ modified += `${UPDATE} ${chalk.cyan(drift.ResourceType)} ${this.formatLogicalId(logicalToPathMap, drift.LogicalResourceId)}\n`;
122
117
  if (drift.PropertyDifferences) {
123
118
  const propDiffs = drift.PropertyDifferences;
124
119
  for (let i = 0; i < propDiffs.length; i++) {
@@ -132,14 +127,15 @@ class DriftFormatter {
132
127
  }
133
128
  modified += this.printSectionFooter();
134
129
  }
135
- // Process deleted resources
136
- const deletedResources = drifts.filter(d => d.StackResourceDriftStatus === client_cloudformation_1.StackResourceDriftStatus.DELETED);
130
+ // Process deleted resources (exclude AWS::CDK::Metadata)
131
+ const deletedResources = drifts.filter(d => d.StackResourceDriftStatus === client_cloudformation_1.StackResourceDriftStatus.DELETED
132
+ && d.ResourceType !== 'AWS::CDK::Metadata');
137
133
  if (deletedResources.length > 0) {
138
134
  deleted = this.printSectionHeader('Deleted Resources');
139
135
  for (const drift of deletedResources) {
140
136
  if (!drift.LogicalResourceId || !drift.ResourceType)
141
137
  continue;
142
- deleted += `${REMOVAL} ${this.formatValue(drift.ResourceType, chalk.cyan)} ${this.formatLogicalId(logicalToPathMap, drift.LogicalResourceId)}\n`;
138
+ deleted += `${REMOVAL} ${chalk.cyan(drift.ResourceType)} ${this.formatLogicalId(logicalToPathMap, drift.LogicalResourceId)}\n`;
143
139
  }
144
140
  deleted += this.printSectionFooter();
145
141
  }
@@ -167,15 +163,6 @@ class DriftFormatter {
167
163
  }
168
164
  return `${normalizedPath} ${chalk.gray(logicalId)}`;
169
165
  }
170
- formatValue(value, colorFn) {
171
- if (value == null) {
172
- return '';
173
- }
174
- if (typeof value === 'string') {
175
- return colorFn(value);
176
- }
177
- return colorFn(JSON.stringify(value));
178
- }
179
166
  printSectionHeader(title) {
180
167
  return `${chalk.underline(chalk.bold(title))}\n`;
181
168
  }
@@ -187,8 +174,8 @@ class DriftFormatter {
187
174
  difference.isRemoval ? REMOVAL :
188
175
  UPDATE, propertyPath);
189
176
  if (difference.isUpdate) {
190
- result += (0, node_util_1.format)(' ├─ %s %s\n', REMOVAL, this.formatValue(difference.oldValue, chalk.red));
191
- result += (0, node_util_1.format)(' └─ %s %s\n', ADDITION, this.formatValue(difference.newValue, chalk.green));
177
+ result += (0, node_util_1.format)(' ├─ %s %s\n', REMOVAL, chalk.red(difference.oldValue));
178
+ result += (0, node_util_1.format)(' └─ %s %s\n', ADDITION, chalk.green(difference.newValue));
192
179
  }
193
180
  return result;
194
181
  }
@@ -198,4 +185,4 @@ const ADDITION = chalk.green('[+]');
198
185
  const CONTEXT = chalk.grey('[ ]');
199
186
  const UPDATE = chalk.yellow('[~]');
200
187
  const REMOVAL = chalk.red('[-]');
201
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJpZnQtZm9ybWF0dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZHJpZnQtZm9ybWF0dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlDQUFtQztBQUNuQywyREFBMkQ7QUFDM0Qsc0VBQTBEO0FBRzFELDBFQUEwRTtBQUMxRSwrQkFBK0I7QUE4RC9COztHQUVHO0FBQ0gsTUFBYSxjQUFjO0lBQ1QsU0FBUyxDQUFTO0lBRWpCLEtBQUssQ0FBb0M7SUFDekMsb0JBQW9CLENBQXVCO0lBQzNDLGlCQUFpQixDQUFzQjtJQUV4RCxZQUFZLEtBQTBCO1FBQ3BDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDO1FBRWpELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUNuRCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDNUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25ELHNDQUFzQztZQUN0QyxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssb0JBQW9CLEVBQUUsQ0FBQztnQkFDM0MsT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09B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LElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMvRixNQUFNLElBQUksSUFBQSxrQkFBTSxFQUFDLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDcEcsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7Q0FDRjtBQXBORCx3Q0FvTkM7QUFFRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbEMsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNuQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAnbm9kZTp1dGlsJztcbmltcG9ydCAqIGFzIGN4c2NoZW1hIGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYSc7XG5pbXBvcnQgeyBEaWZmZXJlbmNlIH0gZnJvbSAnQGF3cy1jZGsvY2xvdWRmb3JtYXRpb24tZGlmZic7XG5pbXBvcnQgdHlwZSAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgdHlwZSB7IFN0YWNrUmVzb3VyY2VEcmlmdCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyBTdGFja1Jlc291cmNlRHJpZnRTdGF0dXMgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXR0ZWREcmlmdCB9IGZyb20gJy4uLy4uL2FjdGlvbnMvZHJpZnQnO1xuXG4vKipcbiAqIFByb3BzIGZvciB0aGUgRHJpZnQgRm9ybWF0dGVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRHJpZnRGb3JtYXR0ZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgQ2xvdWRGb3JtYXRpb24gc3RhY2sgYXJ0aWZhY3RcbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3Q7XG5cbiAgLyoqXG4gICAqIFRoZSByZXN1bHRzIG9mIHN0YWNrIGRyaWZ0IGRldGVjdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VEcmlmdHM6IFN0YWNrUmVzb3VyY2VEcmlmdFtdO1xufVxuXG5pbnRlcmZhY2UgRHJpZnRGb3JtYXR0ZXJPdXRwdXQge1xuICAvKipcbiAgICogTnVtYmVyIG9mIHJlc291cmNlcyB3aXRoIGRyaWZ0LiBJZiB1bmRlZmluZWQsIHRoZW4gYW4gZXJyb3Igb2NjdXJyZWRcbiAgICogYW5kIHJlc291cmNlcyB3ZXJlIG5vdCBwcm9wZXJseSBjaGVja2VkIGZvciBkcmlmdC5cbiAgICovXG4gIHJlYWRvbmx5IG51bVJlc291cmNlc1dpdGhEcmlmdDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBIb3cgbWFueSByZXNvdXJjZXMgd2VyZSBub3QgY2hlY2tlZCBmb3IgZHJpZnQuIElmIHVuZGVmaW5lZCwgdGhlbiBhblxuICAgKiBlcnJvciBvY2N1cnJlZCBhbmQgcmVzb3VyY2VzIHdlcmUgbm90IHByb3Blcmx5IGNoZWNrZWQgZm9yIGRyaWZ0LlxuICAgKi9cbiAgcmVhZG9ubHkgbnVtUmVzb3VyY2VzVW5jaGVja2VkOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFJlc291cmNlcyB0aGF0IGhhdmUgbm90IGNoYW5nZWRcbiAgICovXG4gIHJlYWRvbmx5IHVuY2hhbmdlZD86IHN0cmluZztcblxuICAvKipcbiAgICogUmVzb3VyY2VzIHRoYXQgd2VyZSBub3QgY2hlY2tlZCBmb3IgZHJpZnRcbiAgICovXG4gIHJlYWRvbmx5IHVuY2hlY2tlZD86IHN0cmluZztcblxuICAvKipcbiAgICogUmVzb3VyY2VzIHdpdGggZHJpZnRcbiAgICovXG4gIHJlYWRvbmx5IG1vZGlmaWVkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gZGVsZXRlZCAoZHJpZnQpXG4gICAqL1xuICByZWFkb25seSBkZWxldGVkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaGVhZGVyLCBjb250YWluaW5nIHRoZSBzdGFjayBuYW1lXG4gICAqL1xuICByZWFkb25seSBzdGFja0hlYWRlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZmluYWwgcmVzdWx0cyAoc3VtbWFyeSkgb2YgdGhlIGRyaWZ0IHJlc3VsdHNcbiAgICovXG4gIHJlYWRvbmx5IHN1bW1hcnk6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDbGFzcyBmb3IgZm9ybWF0dGluZyBkcmlmdCBkZXRlY3Rpb24gb3V0cHV0XG4gKi9cbmV4cG9ydCBjbGFzcyBEcmlmdEZvcm1hdHRlciB7XG4gIHB1YmxpYyByZWFkb25seSBzdGFja05hbWU6IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3Q7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVzb3VyY2VEcmlmdFJlc3VsdHM6IFN0YWNrUmVzb3VyY2VEcmlmdFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IGFsbFN0YWNrUmVzb3VyY2VzOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBEcmlmdEZvcm1hdHRlclByb3BzKSB7XG4gICAgdGhpcy5zdGFjayA9IHByb3BzLnN0YWNrO1xuICAgIHRoaXMuc3RhY2tOYW1lID0gcHJvcHMuc3RhY2suZGlzcGxheU5hbWUgPz8gcHJvcHMuc3RhY2suc3RhY2tOYW1lO1xuICAgIHRoaXMucmVzb3VyY2VEcmlmdFJlc3VsdHMgPSBwcm9wcy5yZXNvdXJjZURyaWZ0cztcblxuICAgIHRoaXMuYWxsU3RhY2tSZXNvdXJjZXMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAgIE9iamVjdC5rZXlzKHRoaXMuc3RhY2sudGVtcGxhdGUuUmVzb3VyY2VzIHx8IHt9KS5mb3JFYWNoKGlkID0+IHtcbiAgICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5zdGFjay50ZW1wbGF0ZS5SZXNvdXJjZXNbaWRdO1xuICAgICAgLy8gYWx3YXlzIGlnbm9yZSB0aGUgbWV0YWRhdGEgcmVzb3VyY2VcbiAgICAgIGlmIChyZXNvdXJjZS5UeXBlID09PSAnQVdTOjpDREs6Ok1ldGFkYXRhJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmFsbFN0YWNrUmVzb3VyY2VzLnNldChpZCwgcmVzb3VyY2UuVHlwZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IHRoZSBzdGFjayBkcmlmdCBkZXRlY3Rpb24gcmVzdWx0c1xuICAgKi9cbiAgcHVibGljIGZvcm1hdFN0YWNrRHJpZnQoKTogRHJpZnRGb3JtYXR0ZXJPdXRwdXQge1xuICAgIGNvbnN0IGZvcm1hdHRlck91dHB1dCA9IHRoaXMuZm9ybWF0U3RhY2tEcmlmdENoYW5nZXModGhpcy5idWlsZExvZ2ljYWxUb1BhdGhNYXAoKSk7XG5cbiAgICAvLyB3ZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIGFjdHVhbCBkcmlmdHMgYW5kIGFsd2F5cyBpZ25vcmUgdGhlIG1ldGFkYXRhIHJlc291cmNlXG4gICAgY29uc3QgYWN0dWFsRHJpZnRzID0gdGhpcy5yZXNvdXJjZURyaWZ0UmVzdWx0cy5maWx0ZXIoZCA9PlxuICAgICAgZC5TdGFja1Jlc291cmNlRHJpZnRTdGF0dXMgPT09ICdNT0RJRklFRCcgfHxcbiAgICAgIGQuU3RhY2tSZXNvdXJjZURyaWZ0U3RhdHVzID09PSAnREVMRVRFRCcgfHxcbiAgICAgIGQuUmVzb3VyY2VUeXBlID09PSAnQVdTOjpDREs6Ok1ldGFkYXRhJyxcbiAgICApO1xuXG4gICAgLy8gbXVzdCBvdXRwdXQgdGhlIHN0YWNrIG5hbWUgaWYgdGhlcmUgYXJlIGRyaWZ0c1xuICAgIGNvbnN0IHN0YWNrSGVhZGVyID0gZm9ybWF0KGBTdGFjayAke2NoYWxrLmJvbGQodGhpcy5zdGFja05hbWUpfVxcbmApO1xuXG4gICAgaWYgKGFjdHVhbERyaWZ0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN0IGZpbmFsUmVzdWx0ID0gY2hhbGsuZ3JlZW4oJ05vIGRyaWZ0IGRldGVjdGVkXFxuJyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBudW1SZXNvdXJjZXNXaXRoRHJpZnQ6IDAsXG4gICAgICAgIG51bVJlc291cmNlc1VuY2hlY2tlZDogdGhpcy5hbGxTdGFja1Jlc291cmNlcy5zaXplIC0gdGhpcy5yZXNvdXJjZURyaWZ0UmVzdWx0cy5sZW5ndGgsXG4gICAgICAgIHN0YWNrSGVhZGVyLFxuICAgICAgICBzdW1tYXJ5OiBmaW5hbFJlc3VsdCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgZmluYWxSZXN1bHQgPSBjaGFsay55ZWxsb3coYFxcbiR7YWN0dWFsRHJpZnRzLmxlbmd0aH0gcmVzb3VyY2Uke2FjdHVhbERyaWZ0cy5sZW5ndGggPT09IDEgPyAnJyA6ICdzJ30gJHthY3R1YWxEcmlmdHMubGVuZ3RoID09PSAxID8gJ2hhcycgOiAnaGF2ZSd9IGRyaWZ0ZWQgZnJvbSB0aGVpciBleHBlY3RlZCBjb25maWd1cmF0aW9uXFxuYCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIG51bVJlc291cmNlc1dpdGhEcmlmdDogYWN0dWFsRHJpZnRzLmxlbmd0aCxcbiAgICAgIG51bVJlc291cmNlc1VuY2hlY2tlZDogdGhpcy5hbGxTdGFja1Jlc291cmNlcy5zaXplIC0gdGhpcy5yZXNvdXJjZURyaWZ0UmVzdWx0cy5sZW5ndGgsXG4gICAgICBzdGFja0hlYWRlcixcbiAgICAgIHVuY2hhbmdlZDogZm9ybWF0dGVyT3V0cHV0LnVuY2hhbmdlZCxcbiAgICAgIHVuY2hlY2tlZDogZm9ybWF0dGVyT3V0cHV0LnVuY2hlY2tlZCxcbiAgICAgIG1vZGlmaWVkOiBmb3JtYXR0ZXJPdXRwdXQubW9kaWZpZWQsXG4gICAgICBkZWxldGVkOiBmb3JtYXR0ZXJPdXRwdXQuZGVsZXRlZCxcbiAgICAgIHN1bW1hcnk6IGZpbmFsUmVzdWx0LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkTG9naWNhbFRvUGF0aE1hcCgpIHtcbiAgICBjb25zdCBtYXA6IHsgW2lkOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICAgIGZvciAoY29uc3QgbWQgb2YgdGhpcy5zdGFjay5maW5kTWV0YWRhdGFCeVR5cGUoY3hzY2hlbWEuQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZS5MT0dJQ0FMX0lEKSkge1xuICAgICAgbWFwW21kLmRhdGEgYXMgc3RyaW5nXSA9IG1kLnBhdGg7XG4gICAgfVxuICAgIHJldHVybiBtYXA7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyBzdGFjayBkcmlmdCBpbmZvcm1hdGlvbiB0byB0aGUgZ2l2ZW4gc3RyZWFtXG4gICAqXG4gICAqIEBwYXJhbSBkcmlmdFJlc3VsdHMgLSBUaGUgc3RhY2sgcmVzb3VyY2UgZHJpZnRzIGZyb20gQ2xvdWRGb3JtYXRpb25cbiAgICogQHBhcmFtIGFsbFN0YWNrUmVzb3VyY2VzIC0gQSBtYXAgb2YgYWxsIHN0YWNrIHJlc291cmNlc1xuICAgKiBAcGFyYW0gdmVyYm9zZSAtIFdoZXRoZXIgdG8gb3V0cHV0IG1vcmUgdmVyYm9zZSB0ZXh0IChpbmNsdWRlIHVuZHJpZnRlZCByZXNvdXJjZXMpXG4gICAqIEBwYXJhbSBsb2dpY2FsVG9QYXRoTWFwIC0gQSBtYXAgZnJvbSBsb2dpY2FsIElEIHRvIGNvbnN0cnVjdCBwYXRoXG4gICAqL1xuICBwcml2YXRlIGZvcm1hdFN0YWNrRHJpZnRDaGFuZ2VzKFxuICAgIGxvZ2ljYWxUb1BhdGhNYXA6IHsgW2xvZ2ljYWxJZDogc3RyaW5nXTogc3RyaW5nIH0gPSB7fSk6IEZvcm1hdHRlZERyaWZ0IHtcbiAgICBpZiAodGhpcy5yZXNvdXJjZURyaWZ0UmVzdWx0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICBsZXQgdW5jaGFuZ2VkO1xuICAgIGxldCB1bmNoZWNrZWQ7XG4gICAgbGV0IG1vZGlmaWVkO1xuICAgIGxldCBkZWxldGVkO1xuXG4gICAgY29uc3QgZHJpZnRzID0gdGhpcy5yZXNvdXJjZURyaWZ0UmVzdWx0cztcblxuICAgIC8vIFByb2Nlc3MgdW5jaGFuZ2VkIHJlc291cmNlc1xuICAgIGNvbnN0IHVuY2hhbmdlZFJlc291cmNlcyA9IGRyaWZ0cy5maWx0ZXIoZCA9PiBkLlN0YWNrUmVzb3VyY2VEcmlmdFN0YXR1cyA9PT0gU3RhY2tSZXNvdXJjZURyaWZ0U3RhdHVzLklOX1NZTkMpO1xuICAgIGlmICh1bmNoYW5nZWRSZXNvdXJjZXMubGVuZ3RoID4gMCkge1xuICAgICAgdW5jaGFuZ2VkID0gdGhpcy5wcmludFNlY3Rpb25IZWFkZXIoJ1Jlc291cmNlcyBJbiBTeW5jJyk7XG5cbiAgICAgIGZvciAoY29uc3QgZHJpZnQgb2YgdW5jaGFuZ2VkUmVzb3VyY2VzKSB7XG4gICAgICAgIGlmICghZHJpZnQuTG9naWNhbFJlc291cmNlSWQgfHwgIWRyaWZ0LlJlc291cmNlVHlwZSkgY29udGludWU7XG4gICAgICAgIHVuY2hhbmdlZCArPSBgJHtDT05URVhUfSAke3RoaXMuZm9ybWF0VmFsdWUoZHJpZnQuUmVzb3VyY2VUeXBlLCBjaGFsay5jeWFuKX0gJHt0aGlzLmZvcm1hdExvZ2ljYWxJZChsb2dpY2FsVG9QYXRoTWFwLCBkcmlmdC5Mb2dpY2FsUmVzb3VyY2VJZCl9XFxuYDtcbiAgICAgIH1cbiAgICAgIHVuY2hhbmdlZCArPSB0aGlzLnByaW50U2VjdGlvbkZvb3RlcigpO1xuICAgIH1cblxuICAgIC8vIFByb2Nlc3MgYWxsIHVuY2hlY2tlZCByZXNvdXJjZXNcbiAgICBpZiAodGhpcy5hbGxTdGFja1Jlc291cmNlcykge1xuICAgICAgY29uc3QgdW5jaGVja2VkUmVzb3VyY2VzID0gQXJyYXkuZnJvbSh0aGlzLmFsbFN0YWNrUmVzb3VyY2VzLmtleXMoKSkuZmlsdGVyKChsb2dpY2FsSWQpID0+IHtcbiAgICAgICAgcmV0dXJuICFkcmlmdHMuZmluZCgoZHJpZnQpID0+IGRyaWZ0LkxvZ2ljYWxSZXNvdXJjZUlkID09PSBsb2dpY2FsSWQpO1xuICAgICAgfSk7XG4gICAgICBpZiAodW5jaGVja2VkUmVzb3VyY2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdW5jaGVja2VkID0gdGhpcy5wcmludFNlY3Rpb25IZWFkZXIoJ1VuY2hlY2tlZCBSZXNvdXJjZXMnKTtcbiAgICAgICAgZm9yIChjb25zdCBsb2dpY2FsSWQgb2YgdW5jaGVja2VkUmVzb3VyY2VzKSB7XG4gICAgICAgICAgY29uc3QgcmVzb3VyY2VUeXBlID0gdGhpcy5hbGxTdGFja1Jlc291cmNlcy5nZXQobG9naWNhbElkKTtcbiAgICAgICAgICB1bmNoZWNrZWQgKz0gYCR7Q09OVEVYVH0gJHt0aGlzLmZvcm1hdFZhbHVlKHJlc291cmNlVHlwZSwgY2hhbGsuY3lhbil9ICR7dGhpcy5mb3JtYXRMb2dpY2FsSWQobG9naWNhbFRvUGF0aE1hcCwgbG9naWNhbElkKX1cXG5gO1xuICAgICAgICB9XG4gICAgICAgIHVuY2hlY2tlZCArPSB0aGlzLnByaW50U2VjdGlvbkZvb3RlcigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByb2Nlc3MgbW9kaWZpZWQgcmVzb3VyY2VzXG4gICAgY29uc3QgbW9kaWZpZWRSZXNvdXJjZXMgPSBkcmlmdHMuZmlsdGVyKGQgPT4gZC5TdGFja1Jlc291cmNlRHJpZnRTdGF0dXMgPT09IFN0YWNrUmVzb3VyY2VEcmlmdFN0YXR1cy5NT0RJRklFRCk7XG4gICAgaWYgKG1vZGlmaWVkUmVzb3VyY2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIG1vZGlmaWVkID0gdGhpcy5wcmludFNlY3Rpb25IZWFkZXIoJ01vZGlmaWVkIFJlc291cmNlcycpO1xuXG4gICAgICBmb3IgKGNvbnN0IGRyaWZ0IG9mIG1vZGlmaWVkUmVzb3VyY2VzKSB7XG4gICAgICAgIGlmICghZHJpZnQuTG9naWNhbFJlc291cmNlSWQgfHwgIWRyaWZ0LlJlc291cmNlVHlwZSkgY29udGludWU7XG4gICAgICAgIGlmIChtb2RpZmllZCA9PT0gdW5kZWZpbmVkKSBtb2RpZmllZCA9ICcnO1xuICAgICAgICBtb2RpZmllZCArPSBgJHtVUERBVEV9ICR7dGhpcy5mb3JtYXRWYWx1ZShkcmlmdC5SZXNvdXJjZVR5cGUsIGNoYWxrLmN5YW4pfSAke3RoaXMuZm9ybWF0TG9naWNhbElkKGxvZ2ljYWxUb1BhdGhNYXAsIGRyaWZ0LkxvZ2ljYWxSZXNvdXJjZUlkKX1cXG5gO1xuICAgICAgICBpZiAoZHJpZnQuUHJvcGVydHlEaWZmZXJlbmNlcykge1xuICAgICAgICAgIGNvbnN0IHByb3BEaWZmcyA9IGRyaWZ0LlByb3BlcnR5RGlmZmVyZW5jZXM7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wRGlmZnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBwcm9wRGlmZnNbaV07XG4gICAgICAgICAgICBpZiAoIWRpZmYuUHJvcGVydHlQYXRoKSBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbnN0IGRpZmZlcmVuY2UgPSBuZXcgRGlmZmVyZW5jZShkaWZmLkV4cGVjdGVkVmFsdWUsIGRpZmYuQWN0dWFsVmFsdWUpO1xuICAgICAgICAgICAgbW9kaWZpZWQgKz0gdGhpcy5mb3JtYXRUcmVlRGlmZihkaWZmLlByb3BlcnR5UGF0aCwgZGlmZmVyZW5jZSwgaSA9PT0gcHJvcERpZmZzLmxlbmd0aCAtIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbW9kaWZpZWQgKz0gdGhpcy5wcmludFNlY3Rpb25Gb290ZXIoKTtcbiAgICB9XG5cbiAgICAvLyBQcm9jZXNzIGRlbGV0ZWQgcmVzb3VyY2VzXG4gICAgY29uc3QgZGVsZXRlZFJlc291cmNlcyA9IGRyaWZ0cy5maWx0ZXIoZCA9PiBkLlN0YWNrUmVzb3VyY2VEcmlmdFN0YXR1cyA9PT0gU3RhY2tSZXNvdXJjZURyaWZ0U3RhdHVzLkRFTEVURUQpO1xuICAgIGlmIChkZWxldGVkUmVzb3VyY2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIGRlbGV0ZWQgPSB0aGlzLnByaW50U2VjdGlvbkhlYWRlcignRGVsZXRlZCBSZXNvdXJjZXMnKTtcbiAgICAgIGZvciAoY29uc3QgZHJpZnQgb2YgZGVsZXRlZFJlc291cmNlcykge1xuICAgICAgICBpZiAoIWRyaWZ0LkxvZ2ljYWxSZXNvdXJjZUlkIHx8ICFkcmlmdC5SZXNvdXJjZVR5cGUpIGNvbnRpbnVlO1xuICAgICAgICBkZWxldGVkICs9IGAke1JFTU9WQUx9ICR7dGhpcy5mb3JtYXRWYWx1ZShkcmlmdC5SZXNvdXJjZVR5cGUsIGNoYWxrLmN5YW4pfSAke3RoaXMuZm9ybWF0TG9naWNhbElkKGxvZ2ljYWxUb1BhdGhNYXAsIGRyaWZ0LkxvZ2ljYWxSZXNvdXJjZUlkKX1cXG5gO1xuICAgICAgfVxuICAgICAgZGVsZXRlZCArPSB0aGlzLnByaW50U2VjdGlvbkZvb3RlcigpO1xuICAgIH1cblxuICAgIHJldHVybiB7IHVuY2hhbmdlZCwgdW5jaGVja2VkLCBtb2RpZmllZCwgZGVsZXRlZCB9O1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRMb2dpY2FsSWQobG9naWNhbFRvUGF0aE1hcDogeyBbbG9naWNhbElkOiBzdHJpbmddOiBzdHJpbmcgfSwgbG9naWNhbElkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHBhdGggPSBsb2dpY2FsVG9QYXRoTWFwW2xvZ2ljYWxJZF07XG4gICAgaWYgKCFwYXRoKSByZXR1cm4gbG9naWNhbElkO1xuXG4gICAgbGV0IG5vcm1hbGl6ZWRQYXRoID0gcGF0aDtcbiAgICBpZiAobm9ybWFsaXplZFBhdGguc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICBub3JtYWxpemVkUGF0aCA9IG5vcm1hbGl6ZWRQYXRoLnNsaWNlKDEpO1xuICAgIH1cblxuICAgIGxldCBwYXJ0cyA9IG5vcm1hbGl6ZWRQYXRoLnNwbGl0KCcvJyk7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHBhcnRzID0gcGFydHMuc2xpY2UoMSk7XG5cbiAgICAgIC8vIHJlbW92ZSB0aGUgbGFzdCBjb21wb25lbnQgaWYgaXQncyBcIlJlc291cmNlXCIgb3IgXCJEZWZhdWx0XCIgKGlmIHdlIGhhdmUgbW9yZSB0aGFuIGEgc2luZ2xlIGNvbXBvbmVudClcbiAgICAgIGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGNvbnN0IGxhc3QgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKGxhc3QgPT09ICdSZXNvdXJjZScgfHwgbGFzdCA9PT0gJ0RlZmF1bHQnKSB7XG4gICAgICAgICAgcGFydHMgPSBwYXJ0cy5zbGljZSgwLCBwYXJ0cy5sZW5ndGggLSAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBub3JtYWxpemVkUGF0aCA9IHBhcnRzLmpvaW4oJy8nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYCR7bm9ybWFsaXplZFBhdGh9ICR7Y2hhbGsuZ3JheShsb2dpY2FsSWQpfWA7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFZhbHVlKHZhbHVlOiBhbnksIGNvbG9yRm46IChzdHI6IHN0cmluZykgPT4gc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGNvbG9yRm4odmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gY29sb3JGbihKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmludFNlY3Rpb25IZWFkZXIodGl0bGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke2NoYWxrLnVuZGVybGluZShjaGFsay5ib2xkKHRpdGxlKSl9XFxuYDtcbiAgfVxuXG4gIHByaXZhdGUgcHJpbnRTZWN0aW9uRm9vdGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdcXG4nO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRUcmVlRGlmZihwcm9wZXJ0eVBhdGg6IHN0cmluZywgZGlmZmVyZW5jZTogRGlmZmVyZW5jZTxhbnk+LCBpc0xhc3Q6IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgIGxldCByZXN1bHQgPSBmb3JtYXQoJyAlc+KUgCAlcyAlc1xcbicsIGlzTGFzdCA/ICfilJQnIDogJ+KUnCcsXG4gICAgICBkaWZmZXJlbmNlLmlzQWRkaXRpb24gPyBBRERJVElPTiA6XG4gICAgICAgIGRpZmZlcmVuY2UuaXNSZW1vdmFsID8gUkVNT1ZBTCA6XG4gICAgICAgICAgVVBEQVRFLFxuICAgICAgcHJvcGVydHlQYXRoLFxuICAgICk7XG4gICAgaWYgKGRpZmZlcmVuY2UuaXNVcGRhdGUpIHtcbiAgICAgIHJlc3VsdCArPSBmb3JtYXQoJyAgICAg4pSc4pSAICVzICVzXFxuJywgUkVNT1ZBTCwgdGhpcy5mb3JtYXRWYWx1ZShkaWZmZXJlbmNlLm9sZFZhbHVlLCBjaGFsay5yZWQpKTtcbiAgICAgIHJlc3VsdCArPSBmb3JtYXQoJyAgICAg4pSU4pSAICVzICVzXFxuJywgQURESVRJT04sIHRoaXMuZm9ybWF0VmFsdWUoZGlmZmVyZW5jZS5uZXdWYWx1ZSwgY2hhbGsuZ3JlZW4pKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuXG5jb25zdCBBRERJVElPTiA9IGNoYWxrLmdyZWVuKCdbK10nKTtcbmNvbnN0IENPTlRFWFQgPSBjaGFsay5ncmV5KCdbIF0nKTtcbmNvbnN0IFVQREFURSA9IGNoYWxrLnllbGxvdygnW35dJyk7XG5jb25zdCBSRU1PVkFMID0gY2hhbGsucmVkKCdbLV0nKTtcbiJdfQ==
188
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJpZnQtZm9ybWF0dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZHJpZnQtZm9ybWF0dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlDQUFtQztBQUNuQywyREFBMkQ7QUFDM0Qsc0VBQTBEO0FBRzFELDBFQUEwRTtBQUMxRSwrQkFBK0I7QUE4RC9COztHQUVHO0FBQ0gsTUFBYSxjQUFjO0lBQ1QsU0FBUyxDQUFTO0lBRWpCLEtBQUssQ0FBb0M7SUFDekMsb0JBQW9CLENBQXVCO0lBQzNDLGlCQUFpQixDQUFzQjtJQUV4RCxZQUFZLEtBQTBCO1FBQ3BDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDO1FBRWpELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUNuRCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDNUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25ELHNDQUFzQztZQUN0QyxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssb0JBQW9CLEVBQUUsQ0FBQztnQkFDM0MsT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxnQkFBZ0I7UUFDckIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUM7UUFFbkYsNkVBQTZFO1FBQzdFLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDeEQsQ0FBQyxDQUFDLENBQUMsd0JBQXdCLEtBQUssVUFBVSxJQUFJLENBQUMsQ0FBQyx3QkFBd0IsS0FBSyxTQUFTLENBQUM7ZUFDcEYsQ0FBQyxDQUFDLFlBQVksS0FBSyxvQkFBb0IsQ0FBQyxDQUFDO1FBRTlDLGlEQUFpRDtRQUNqRCxNQUFNLFdBQVcsR0FBRyxJQUFBLGtCQUFNLEVBQUMsU0FBUyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFcEUsSUFBSSxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzlCLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUN2RCxPQUFPO2dCQUNMLHFCQUFxQixFQUFFLENBQUM7Z0JBQ3hCLHFCQUFxQixFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU07Z0JBQ3JGLFdBQVc7Z0JBQ1gsU0FBUyxFQUFFLGVBQWUsQ0FBQyxTQUFTO2dCQUNwQyxPQUFPLEVBQUUsV0FBVzthQUNyQixDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxZQUFZLENBQUMsTUFBTSxZQUFZLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLDhDQUE4QyxDQUFDLENBQUM7UUFDdk0sT0FBTztZQUNMLHFCQUFxQixFQUFFLFlBQVksQ0FBQyxNQUFNO1lBQzFDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU07WUFDckYsV0FBVztZQUNYLFNBQVMsRUFBRSxlQUFlLENBQUMsU0FBUztZQUNwQyxTQUFTLEVBQUUsZUFBZSxDQUFDLFNBQVM7WUFDcEMsUUFBUSxFQUFFLGVBQWUsQ0FBQyxRQUFRO1lBQ2xDLE9BQU8sRUFBRSxlQUFlLENBQUMsT0FBTztZQUNoQyxPQUFPLEVBQUUsV0FBVztTQUNyQixDQUFDO0lBQ0osQ0FBQztJQUVPLHFCQUFxQjtRQUMzQixNQUFNLEdBQUcsR0FBNkIsRUFBRSxDQUFDO1FBQ3pDLEtBQUssTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMseUJBQXlCLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUM5RixHQUFHLENBQUMsRUFBRSxDQUFDLElBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFDbkMsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyx1QkFBdUIsQ0FDN0IsbUJBQW9ELEVBQUU7UUFDdEQsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzNDLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELElBQUksU0FBUyxDQUFDO1FBQ2QsSUFBSSxTQUFTLENBQUM7UUFDZCxJQUFJLFFBQVEsQ0FBQztRQUNiLElBQUksT0FBTyxDQUFDO1FBRVosTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDO1FBRXpDLDhCQUE4QjtRQUM5QixNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsd0JBQXdCLEtBQUssZ0RBQXdCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0csSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbEMsU0FBUyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBRXpELEtBQUssTUFBTSxLQUFLLElBQUksa0JBQWtCLEVBQUUsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZO29CQUFFLFNBQVM7Z0JBQzlELFNBQVMsSUFBSSxHQUFHLE9BQU8sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7WUFDbkksQ0FBQztZQUNELFNBQVMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUN6QyxDQUFDO1FBRUQsOENBQThDO1FBQzlDLE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUN4RixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLEtBQUssU0FBUyxDQUFDLENBQUM7WUFDcEUsT0FBTyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsd0JBQXdCLEtBQUssZ0RBQXdCLENBQUMsT0FBTyxDQUFDO1FBQ3ZGLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbEMsU0FBUyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQzNELEtBQUssTUFBTSxTQUFTLElBQUksa0JBQWtCLEVBQUUsQ0FBQztnQkFDM0MsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDM0QsU0FBUyxJQUFJLEdBQUcsT0FBTyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDO1lBQy9HLENBQUM7WUFDRCxTQUFTLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDekMsQ0FBQztRQUVELDBEQUEwRDtRQUMxRCxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDMUMsQ0FBQyxDQUFDLHdCQUF3QixLQUFLLGdEQUF3QixDQUFDLFFBQVE7ZUFDN0QsQ0FBQyxDQUFDLFlBQVksS0FBSyxvQkFBb0IsQ0FBQyxDQUFDO1FBQzlDLElBQUksaUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2pDLFFBQVEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUV6RCxLQUFLLE1BQU0sS0FBSyxJQUFJLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWTtvQkFBRSxTQUFTO2dCQUM5RCxRQUFRLElBQUksR0FBRyxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDO2dCQUMvSCxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO29CQUM5QixNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsbUJBQW1CLENBQUM7b0JBQzVDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7d0JBQzFDLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZOzRCQUFFLFNBQVM7d0JBQ2pDLE1BQU0sVUFBVSxHQUFHLElBQUksZ0NBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzt3QkFDeEUsUUFBUSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxVQUFVLEVBQUUsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQzdGLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7WUFDRCxRQUFRLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDeEMsQ0FBQztRQUVELHlEQUF5RDtRQUN6RCxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDekMsQ0FBQyxDQUFDLHdCQUF3QixLQUFLLGdEQUF3QixDQUFDLE9BQU87ZUFDNUQsQ0FBQyxDQUFDLFlBQVksS0FBSyxvQkFBb0IsQ0FBQyxDQUFDO1FBQzlDLElBQUksZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hDLE9BQU8sR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUN2RCxLQUFLLE1BQU0sS0FBSyxJQUFJLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWTtvQkFBRSxTQUFTO2dCQUM5RCxPQUFPLElBQUksR0FBRyxPQUFPLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDO1lBQ2pJLENBQUM7WUFDRCxPQUFPLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDdkMsQ0FBQztRQUVELE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUNyRCxDQUFDO0lBRU8sZUFBZSxDQUFDLGdCQUFpRCxFQUFFLFNBQWlCO1FBQzFGLE1BQU0sSUFBSSxHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFFNUIsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksY0FBYyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ25DLGNBQWMsR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFFRCxJQUFJLEtBQUssR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNyQixLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUV2QixzR0FBc0c7WUFDdEcsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNyQixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDckMsSUFBSSxJQUFJLEtBQUssVUFBVSxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDOUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQzNDLENBQUM7WUFDSCxDQUFDO1lBRUQsY0FBYyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkMsQ0FBQztRQUVELE9BQU8sR0FBRyxjQUFjLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO0lBQ3RELENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxLQUFhO1FBQ3RDLE9BQU8sR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ25ELENBQUM7SUFFTyxrQkFBa0I7UUFDeEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sY0FBYyxDQUFDLFlBQW9CLEVBQUUsVUFBOEIsRUFBRSxNQUFlO1FBQzFGLElBQUksTUFBTSxHQUFHLElBQUEsa0JBQU0sRUFBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFDcEQsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDaEMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzlCLE1BQU0sRUFDVixZQUFZLENBQ2IsQ0FBQztRQUNGLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sSUFBSSxJQUFBLGtCQUFNLEVBQUMsaUJBQWlCLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDN0UsTUFBTSxJQUFJLElBQUEsa0JBQU0sRUFBQyxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNsRixDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUNGO0FBeE1ELHdDQXdNQztBQUVELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEMsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNsQyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25DLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmb3JtYXQgfSBmcm9tICdub2RlOnV0aWwnO1xuaW1wb3J0ICogYXMgY3hzY2hlbWEgZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktc2NoZW1hJztcbmltcG9ydCB7IERpZmZlcmVuY2UgfSBmcm9tICdAYXdzLWNkay9jbG91ZGZvcm1hdGlvbi1kaWZmJztcbmltcG9ydCB0eXBlICogYXMgY3hhcGkgZnJvbSAnQGF3cy1jZGsvY3gtYXBpJztcbmltcG9ydCB0eXBlIHsgU3RhY2tSZXNvdXJjZURyaWZ0IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IFN0YWNrUmVzb3VyY2VEcmlmdFN0YXR1cyB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgKiBhcyBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdHRlZERyaWZ0IH0gZnJvbSAnLi4vLi4vYWN0aW9ucy9kcmlmdCc7XG5cbi8qKlxuICogUHJvcHMgZm9yIHRoZSBEcmlmdCBGb3JtYXR0ZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEcmlmdEZvcm1hdHRlclByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBDbG91ZEZvcm1hdGlvbiBzdGFjayBhcnRpZmFjdFxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2s6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdDtcblxuICAvKipcbiAgICogVGhlIHJlc3VsdHMgb2Ygc3RhY2sgZHJpZnQgZGV0ZWN0aW9uXG4gICAqL1xuICByZWFkb25seSByZXNvdXJjZURyaWZ0czogU3RhY2tSZXNvdXJjZURyaWZ0W107XG59XG5cbmludGVyZmFjZSBEcmlmdEZvcm1hdHRlck91dHB1dCB7XG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgcmVzb3VyY2VzIHdpdGggZHJpZnQuIElmIHVuZGVmaW5lZCwgdGhlbiBhbiBlcnJvciBvY2N1cnJlZFxuICAgKiBhbmQgcmVzb3VyY2VzIHdlcmUgbm90IHByb3Blcmx5IGNoZWNrZWQgZm9yIGRyaWZ0LlxuICAgKi9cbiAgcmVhZG9ubHkgbnVtUmVzb3VyY2VzV2l0aERyaWZ0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEhvdyBtYW55IHJlc291cmNlcyB3ZXJlIG5vdCBjaGVja2VkIGZvciBkcmlmdC4gSWYgdW5kZWZpbmVkLCB0aGVuIGFuXG4gICAqIGVycm9yIG9jY3VycmVkIGFuZCByZXNvdXJjZXMgd2VyZSBub3QgcHJvcGVybHkgY2hlY2tlZCBmb3IgZHJpZnQuXG4gICAqL1xuICByZWFkb25seSBudW1SZXNvdXJjZXNVbmNoZWNrZWQ6IG51bWJlcjtcblxuICAvKipcbiAgICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBub3QgY2hhbmdlZFxuICAgKi9cbiAgcmVhZG9ubHkgdW5jaGFuZ2VkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXNvdXJjZXMgdGhhdCB3ZXJlIG5vdCBjaGVja2VkIGZvciBkcmlmdCBvciBoYXZlIGFuIFVOS05PV04gZHJpZnQgc3RhdHVzXG4gICAqL1xuICByZWFkb25seSB1bmNoZWNrZWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlc291cmNlcyB3aXRoIGRyaWZ0XG4gICAqL1xuICByZWFkb25seSBtb2RpZmllZD86IHN0cmluZztcblxuICAvKipcbiAgICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIGRlbGV0ZWQgKGRyaWZ0KVxuICAgKi9cbiAgcmVhZG9ubHkgZGVsZXRlZD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGhlYWRlciwgY29udGFpbmluZyB0aGUgc3RhY2sgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2tIZWFkZXI6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGZpbmFsIHJlc3VsdHMgKHN1bW1hcnkpIG9mIHRoZSBkcmlmdCByZXN1bHRzXG4gICAqL1xuICByZWFkb25seSBzdW1tYXJ5OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ2xhc3MgZm9yIGZvcm1hdHRpbmcgZHJpZnQgZGV0ZWN0aW9uIG91dHB1dFxuICovXG5leHBvcnQgY2xhc3MgRHJpZnRGb3JtYXR0ZXIge1xuICBwdWJsaWMgcmVhZG9ubHkgc3RhY2tOYW1lOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzdGFjazogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0O1xuICBwcml2YXRlIHJlYWRvbmx5IHJlc291cmNlRHJpZnRSZXN1bHRzOiBTdGFja1Jlc291cmNlRHJpZnRbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBhbGxTdGFja1Jlc291cmNlczogTWFwPHN0cmluZywgc3RyaW5nPjtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogRHJpZnRGb3JtYXR0ZXJQcm9wcykge1xuICAgIHRoaXMuc3RhY2sgPSBwcm9wcy5zdGFjaztcbiAgICB0aGlzLnN0YWNrTmFtZSA9IHByb3BzLnN0YWNrLmRpc3BsYXlOYW1lID8/IHByb3BzLnN0YWNrLnN0YWNrTmFtZTtcbiAgICB0aGlzLnJlc291cmNlRHJpZnRSZXN1bHRzID0gcHJvcHMucmVzb3VyY2VEcmlmdHM7XG5cbiAgICB0aGlzLmFsbFN0YWNrUmVzb3VyY2VzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgICBPYmplY3Qua2V5cyh0aGlzLnN0YWNrLnRlbXBsYXRlLlJlc291cmNlcyB8fCB7fSkuZm9yRWFjaChpZCA9PiB7XG4gICAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMuc3RhY2sudGVtcGxhdGUuUmVzb3VyY2VzW2lkXTtcbiAgICAgIC8vIGFsd2F5cyBpZ25vcmUgdGhlIG1ldGFkYXRhIHJlc291cmNlXG4gICAgICBpZiAocmVzb3VyY2UuVHlwZSA9PT0gJ0FXUzo6Q0RLOjpNZXRhZGF0YScpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5hbGxTdGFja1Jlc291cmNlcy5zZXQoaWQsIHJlc291cmNlLlR5cGUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCB0aGUgc3RhY2sgZHJpZnQgZGV0ZWN0aW9uIHJlc3VsdHNcbiAgICovXG4gIHB1YmxpYyBmb3JtYXRTdGFja0RyaWZ0KCk6IERyaWZ0Rm9ybWF0dGVyT3V0cHV0IHtcbiAgICBjb25zdCBmb3JtYXR0ZXJPdXRwdXQgPSB0aGlzLmZvcm1hdFN0YWNrRHJpZnRDaGFuZ2VzKHRoaXMuYnVpbGRMb2dpY2FsVG9QYXRoTWFwKCkpO1xuXG4gICAgLy8gd2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiBhY3R1YWwgZHJpZnRzIChhbmQgaWdub3JlIHRoZSBtZXRhZGF0YSByZXNvdXJjZSlcbiAgICBjb25zdCBhY3R1YWxEcmlmdHMgPSB0aGlzLnJlc291cmNlRHJpZnRSZXN1bHRzLmZpbHRlcihkID0+XG4gICAgICAoZC5TdGFja1Jlc291cmNlRHJpZnRTdGF0dXMgPT09ICdNT0RJRklFRCcgfHwgZC5TdGFja1Jlc291cmNlRHJpZnRTdGF0dXMgPT09ICdERUxFVEVEJylcbiAgICAgICYmIGQuUmVzb3VyY2VUeXBlICE9PSAnQVdTOjpDREs6Ok1ldGFkYXRhJyk7XG5cbiAgICAvLyBtdXN0IG91dHB1dCB0aGUgc3RhY2sgbmFtZSBpZiB0aGVyZSBhcmUgZHJpZnRzXG4gICAgY29uc3Qgc3RhY2tIZWFkZXIgPSBmb3JtYXQoYFN0YWNrICR7Y2hhbGsuYm9sZCh0aGlzLnN0YWNrTmFtZSl9XFxuYCk7XG5cbiAgICBpZiAoYWN0dWFsRHJpZnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc3QgZmluYWxSZXN1bHQgPSBjaGFsay5ncmVlbignTm8gZHJpZnQgZGV0ZWN0ZWRcXG4nKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG51bVJlc291cmNlc1dpdGhEcmlmdDogMCxcbiAgICAgICAgbnVtUmVzb3VyY2VzVW5jaGVja2VkOiB0aGlzLmFsbFN0YWNrUmVzb3VyY2VzLnNpemUgLSB0aGlzLnJlc291cmNlRHJpZnRSZXN1bHRzLmxlbmd0aCxcbiAgICAgICAgc3RhY2tIZWFkZXIsXG4gICAgICAgIHVuY2hlY2tlZDogZm9ybWF0dGVyT3V0cHV0LnVuY2hlY2tlZCxcbiAgICAgICAgc3VtbWFyeTogZmluYWxSZXN1bHQsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmFsUmVzdWx0ID0gY2hhbGsueWVsbG93KGBcXG4ke2FjdHVhbERyaWZ0cy5sZW5ndGh9IHJlc291cmNlJHthY3R1YWxEcmlmdHMubGVuZ3RoID09PSAxID8gJycgOiAncyd9ICR7YWN0dWFsRHJpZnRzLmxlbmd0aCA9PT0gMSA/ICdoYXMnIDogJ2hhdmUnfSBkcmlmdGVkIGZyb20gdGhlaXIgZXhwZWN0ZWQgY29uZmlndXJhdGlvblxcbmApO1xuICAgIHJldHVybiB7XG4gICAgICBudW1SZXNvdXJjZXNXaXRoRHJpZnQ6IGFjdHVhbERyaWZ0cy5sZW5ndGgsXG4gICAgICBudW1SZXNvdXJjZXNVbmNoZWNrZWQ6IHRoaXMuYWxsU3RhY2tSZXNvdXJjZXMuc2l6ZSAtIHRoaXMucmVzb3VyY2VEcmlmdFJlc3VsdHMubGVuZ3RoLFxuICAgICAgc3RhY2tIZWFkZXIsXG4gICAgICB1bmNoYW5nZWQ6IGZvcm1hdHRlck91dHB1dC51bmNoYW5nZWQsXG4gICAgICB1bmNoZWNrZWQ6IGZvcm1hdHRlck91dHB1dC51bmNoZWNrZWQsXG4gICAgICBtb2RpZmllZDogZm9ybWF0dGVyT3V0cHV0Lm1vZGlmaWVkLFxuICAgICAgZGVsZXRlZDogZm9ybWF0dGVyT3V0cHV0LmRlbGV0ZWQsXG4gICAgICBzdW1tYXJ5OiBmaW5hbFJlc3VsdCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZExvZ2ljYWxUb1BhdGhNYXAoKSB7XG4gICAgY29uc3QgbWFwOiB7IFtpZDogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgICBmb3IgKGNvbnN0IG1kIG9mIHRoaXMuc3RhY2suZmluZE1ldGFkYXRhQnlUeXBlKGN4c2NoZW1hLkFydGlmYWN0TWV0YWRhdGFFbnRyeVR5cGUuTE9HSUNBTF9JRCkpIHtcbiAgICAgIG1hcFttZC5kYXRhIGFzIHN0cmluZ10gPSBtZC5wYXRoO1xuICAgIH1cbiAgICByZXR1cm4gbWFwO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgc3RhY2sgZHJpZnQgaW5mb3JtYXRpb25cbiAgICpcbiAgICogQHBhcmFtIGxvZ2ljYWxUb1BhdGhNYXAgLSBBIG1hcCBmcm9tIGxvZ2ljYWwgSUQgdG8gY29uc3RydWN0IHBhdGhcbiAgICovXG4gIHByaXZhdGUgZm9ybWF0U3RhY2tEcmlmdENoYW5nZXMoXG4gICAgbG9naWNhbFRvUGF0aE1hcDogeyBbbG9naWNhbElkOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9KTogRm9ybWF0dGVkRHJpZnQge1xuICAgIGlmICh0aGlzLnJlc291cmNlRHJpZnRSZXN1bHRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIGxldCB1bmNoYW5nZWQ7XG4gICAgbGV0IHVuY2hlY2tlZDtcbiAgICBsZXQgbW9kaWZpZWQ7XG4gICAgbGV0IGRlbGV0ZWQ7XG5cbiAgICBjb25zdCBkcmlmdHMgPSB0aGlzLnJlc291cmNlRHJpZnRSZXN1bHRzO1xuXG4gICAgLy8gUHJvY2VzcyB1bmNoYW5nZWQgcmVzb3VyY2VzXG4gICAgY29uc3QgdW5jaGFuZ2VkUmVzb3VyY2VzID0gZHJpZnRzLmZpbHRlcihkID0+IGQuU3RhY2tSZXNvdXJjZURyaWZ0U3RhdHVzID09PSBTdGFja1Jlc291cmNlRHJpZnRTdGF0dXMuSU5fU1lOQyk7XG4gICAgaWYgKHVuY2hhbmdlZFJlc291cmNlcy5sZW5ndGggPiAwKSB7XG4gICAgICB1bmNoYW5nZWQgPSB0aGlzLnByaW50U2VjdGlvbkhlYWRlcignUmVzb3VyY2VzIEluIFN5bmMnKTtcblxuICAgICAgZm9yIChjb25zdCBkcmlmdCBvZiB1bmNoYW5nZWRSZXNvdXJjZXMpIHtcbiAgICAgICAgaWYgKCFkcmlmdC5Mb2dpY2FsUmVzb3VyY2VJZCB8fCAhZHJpZnQuUmVzb3VyY2VUeXBlKSBjb250aW51ZTtcbiAgICAgICAgdW5jaGFuZ2VkICs9IGAke0NPTlRFWFR9ICR7Y2hhbGsuY3lhbihkcmlmdC5SZXNvdXJjZVR5cGUpfSAke3RoaXMuZm9ybWF0TG9naWNhbElkKGxvZ2ljYWxUb1BhdGhNYXAsIGRyaWZ0LkxvZ2ljYWxSZXNvdXJjZUlkKX1cXG5gO1xuICAgICAgfVxuICAgICAgdW5jaGFuZ2VkICs9IHRoaXMucHJpbnRTZWN0aW9uRm9vdGVyKCk7XG4gICAgfVxuXG4gICAgLy8gUHJvY2VzcyBhbGwgdW5jaGVja2VkIGFuZCB1bmtub3duIHJlc291cmNlc1xuICAgIGNvbnN0IHVuY2hlY2tlZFJlc291cmNlcyA9IEFycmF5LmZyb20odGhpcy5hbGxTdGFja1Jlc291cmNlcy5rZXlzKCkpLmZpbHRlcigobG9naWNhbElkKSA9PiB7XG4gICAgICBjb25zdCBkcmlmdCA9IGRyaWZ0cy5maW5kKChkKSA9PiBkLkxvZ2ljYWxSZXNvdXJjZUlkID09PSBsb2dpY2FsSWQpO1xuICAgICAgcmV0dXJuICFkcmlmdCB8fCBkcmlmdC5TdGFja1Jlc291cmNlRHJpZnRTdGF0dXMgPT09IFN0YWNrUmVzb3VyY2VEcmlmdFN0YXR1cy5VTktOT1dOO1xuICAgIH0pO1xuICAgIGlmICh1bmNoZWNrZWRSZXNvdXJjZXMubGVuZ3RoID4gMCkge1xuICAgICAgdW5jaGVja2VkID0gdGhpcy5wcmludFNlY3Rpb25IZWFkZXIoJ1VuY2hlY2tlZCBSZXNvdXJjZXMnKTtcbiAgICAgIGZvciAoY29uc3QgbG9naWNhbElkIG9mIHVuY2hlY2tlZFJlc291cmNlcykge1xuICAgICAgICBjb25zdCByZXNvdXJjZVR5cGUgPSB0aGlzLmFsbFN0YWNrUmVzb3VyY2VzLmdldChsb2dpY2FsSWQpO1xuICAgICAgICB1bmNoZWNrZWQgKz0gYCR7Q09OVEVYVH0gJHtjaGFsay5jeWFuKHJlc291cmNlVHlwZSl9ICR7dGhpcy5mb3JtYXRMb2dpY2FsSWQobG9naWNhbFRvUGF0aE1hcCwgbG9naWNhbElkKX1cXG5gO1xuICAgICAgfVxuICAgICAgdW5jaGVja2VkICs9IHRoaXMucHJpbnRTZWN0aW9uRm9vdGVyKCk7XG4gICAgfVxuXG4gICAgLy8gUHJvY2VzcyBtb2RpZmllZCByZXNvdXJjZXMgKGV4Y2x1ZGUgQVdTOjpDREs6Ok1ldGFkYXRhKVxuICAgIGNvbnN0IG1vZGlmaWVkUmVzb3VyY2VzID0gZHJpZnRzLmZpbHRlcihkID0+XG4gICAgICBkLlN0YWNrUmVzb3VyY2VEcmlmdFN0YXR1cyA9PT0gU3RhY2tSZXNvdXJjZURyaWZ0U3RhdHVzLk1PRElGSUVEXG4gICAgICAmJiBkLlJlc291cmNlVHlwZSAhPT0gJ0FXUzo6Q0RLOjpNZXRhZGF0YScpO1xuICAgIGlmIChtb2RpZmllZFJlc291cmNlcy5sZW5ndGggPiAwKSB7XG4gICAgICBtb2RpZmllZCA9IHRoaXMucHJpbnRTZWN0aW9uSGVhZGVyKCdNb2RpZmllZCBSZXNvdXJjZXMnKTtcblxuICAgICAgZm9yIChjb25zdCBkcmlmdCBvZiBtb2RpZmllZFJlc291cmNlcykge1xuICAgICAgICBpZiAoIWRyaWZ0LkxvZ2ljYWxSZXNvdXJjZUlkIHx8ICFkcmlmdC5SZXNvdXJjZVR5cGUpIGNvbnRpbnVlO1xuICAgICAgICBtb2RpZmllZCArPSBgJHtVUERBVEV9ICR7Y2hhbGsuY3lhbihkcmlmdC5SZXNvdXJjZVR5cGUpfSAke3RoaXMuZm9ybWF0TG9naWNhbElkKGxvZ2ljYWxUb1BhdGhNYXAsIGRyaWZ0LkxvZ2ljYWxSZXNvdXJjZUlkKX1cXG5gO1xuICAgICAgICBpZiAoZHJpZnQuUHJvcGVydHlEaWZmZXJlbmNlcykge1xuICAgICAgICAgIGNvbnN0IHByb3BEaWZmcyA9IGRyaWZ0LlByb3BlcnR5RGlmZmVyZW5jZXM7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wRGlmZnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBwcm9wRGlmZnNbaV07XG4gICAgICAgICAgICBpZiAoIWRpZmYuUHJvcGVydHlQYXRoKSBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbnN0IGRpZmZlcmVuY2UgPSBuZXcgRGlmZmVyZW5jZShkaWZmLkV4cGVjdGVkVmFsdWUsIGRpZmYuQWN0dWFsVmFsdWUpO1xuICAgICAgICAgICAgbW9kaWZpZWQgKz0gdGhpcy5mb3JtYXRUcmVlRGlmZihkaWZmLlByb3BlcnR5UGF0aCwgZGlmZmVyZW5jZSwgaSA9PT0gcHJvcERpZmZzLmxlbmd0aCAtIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbW9kaWZpZWQgKz0gdGhpcy5wcmludFNlY3Rpb25Gb290ZXIoKTtcbiAgICB9XG5cbiAgICAvLyBQcm9jZXNzIGRlbGV0ZWQgcmVzb3VyY2VzIChleGNsdWRlIEFXUzo6Q0RLOjpNZXRhZGF0YSlcbiAgICBjb25zdCBkZWxldGVkUmVzb3VyY2VzID0gZHJpZnRzLmZpbHRlcihkID0+XG4gICAgICBkLlN0YWNrUmVzb3VyY2VEcmlmdFN0YXR1cyA9PT0gU3RhY2tSZXNvdXJjZURyaWZ0U3RhdHVzLkRFTEVURURcbiAgICAgICYmIGQuUmVzb3VyY2VUeXBlICE9PSAnQVdTOjpDREs6Ok1ldGFkYXRhJyk7XG4gICAgaWYgKGRlbGV0ZWRSZXNvdXJjZXMubGVuZ3RoID4gMCkge1xuICAgICAgZGVsZXRlZCA9IHRoaXMucHJpbnRTZWN0aW9uSGVhZGVyKCdEZWxldGVkIFJlc291cmNlcycpO1xuICAgICAgZm9yIChjb25zdCBkcmlmdCBvZiBkZWxldGVkUmVzb3VyY2VzKSB7XG4gICAgICAgIGlmICghZHJpZnQuTG9naWNhbFJlc291cmNlSWQgfHwgIWRyaWZ0LlJlc291cmNlVHlwZSkgY29udGludWU7XG4gICAgICAgIGRlbGV0ZWQgKz0gYCR7UkVNT1ZBTH0gJHtjaGFsay5jeWFuKGRyaWZ0LlJlc291cmNlVHlwZSl9ICR7dGhpcy5mb3JtYXRMb2dpY2FsSWQobG9naWNhbFRvUGF0aE1hcCwgZHJpZnQuTG9naWNhbFJlc291cmNlSWQpfVxcbmA7XG4gICAgICB9XG4gICAgICBkZWxldGVkICs9IHRoaXMucHJpbnRTZWN0aW9uRm9vdGVyKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgdW5jaGFuZ2VkLCB1bmNoZWNrZWQsIG1vZGlmaWVkLCBkZWxldGVkIH07XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdExvZ2ljYWxJZChsb2dpY2FsVG9QYXRoTWFwOiB7IFtsb2dpY2FsSWQ6IHN0cmluZ106IHN0cmluZyB9LCBsb2dpY2FsSWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcGF0aCA9IGxvZ2ljYWxUb1BhdGhNYXBbbG9naWNhbElkXTtcbiAgICBpZiAoIXBhdGgpIHJldHVybiBsb2dpY2FsSWQ7XG5cbiAgICBsZXQgbm9ybWFsaXplZFBhdGggPSBwYXRoO1xuICAgIGlmIChub3JtYWxpemVkUGF0aC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgIG5vcm1hbGl6ZWRQYXRoID0gbm9ybWFsaXplZFBhdGguc2xpY2UoMSk7XG4gICAgfVxuXG4gICAgbGV0IHBhcnRzID0gbm9ybWFsaXplZFBhdGguc3BsaXQoJy8nKTtcbiAgICBpZiAocGFydHMubGVuZ3RoID4gMSkge1xuICAgICAgcGFydHMgPSBwYXJ0cy5zbGljZSgxKTtcblxuICAgICAgLy8gcmVtb3ZlIHRoZSBsYXN0IGNvbXBvbmVudCBpZiBpdCdzIFwiUmVzb3VyY2VcIiBvciBcIkRlZmF1bHRcIiAoaWYgd2UgaGF2ZSBtb3JlIHRoYW4gYSBzaW5nbGUgY29tcG9uZW50KVxuICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgY29uc3QgbGFzdCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAobGFzdCA9PT0gJ1Jlc291cmNlJyB8fCBsYXN0ID09PSAnRGVmYXVsdCcpIHtcbiAgICAgICAgICBwYXJ0cyA9IHBhcnRzLnNsaWNlKDAsIHBhcnRzLmxlbmd0aCAtIDEpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG5vcm1hbGl6ZWRQYXRoID0gcGFydHMuam9pbignLycpO1xuICAgIH1cblxuICAgIHJldHVybiBgJHtub3JtYWxpemVkUGF0aH0gJHtjaGFsay5ncmF5KGxvZ2ljYWxJZCl9YDtcbiAgfVxuXG4gIHByaXZhdGUgcHJpbnRTZWN0aW9uSGVhZGVyKHRpdGxlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtjaGFsay51bmRlcmxpbmUoY2hhbGsuYm9sZCh0aXRsZSkpfVxcbmA7XG4gIH1cblxuICBwcml2YXRlIHByaW50U2VjdGlvbkZvb3RlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiAnXFxuJztcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0VHJlZURpZmYocHJvcGVydHlQYXRoOiBzdHJpbmcsIGRpZmZlcmVuY2U6IERpZmZlcmVuY2U8c3RyaW5nPiwgaXNMYXN0OiBib29sZWFuKTogc3RyaW5nIHtcbiAgICBsZXQgcmVzdWx0ID0gZm9ybWF0KCcgJXPilIAgJXMgJXNcXG4nLCBpc0xhc3QgPyAn4pSUJyA6ICfilJwnLFxuICAgICAgZGlmZmVyZW5jZS5pc0FkZGl0aW9uID8gQURESVRJT04gOlxuICAgICAgICBkaWZmZXJlbmNlLmlzUmVtb3ZhbCA/IFJFTU9WQUwgOlxuICAgICAgICAgIFVQREFURSxcbiAgICAgIHByb3BlcnR5UGF0aCxcbiAgICApO1xuICAgIGlmIChkaWZmZXJlbmNlLmlzVXBkYXRlKSB7XG4gICAgICByZXN1bHQgKz0gZm9ybWF0KCcgICAgIOKUnOKUgCAlcyAlc1xcbicsIFJFTU9WQUwsIGNoYWxrLnJlZChkaWZmZXJlbmNlLm9sZFZhbHVlKSk7XG4gICAgICByZXN1bHQgKz0gZm9ybWF0KCcgICAgIOKUlOKUgCAlcyAlc1xcbicsIEFERElUSU9OLCBjaGFsay5ncmVlbihkaWZmZXJlbmNlLm5ld1ZhbHVlKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cblxuY29uc3QgQURESVRJT04gPSBjaGFsay5ncmVlbignWytdJyk7XG5jb25zdCBDT05URVhUID0gY2hhbGsuZ3JleSgnWyBdJyk7XG5jb25zdCBVUERBVEUgPSBjaGFsay55ZWxsb3coJ1t+XScpO1xuY29uc3QgUkVNT1ZBTCA9IGNoYWxrLnJlZCgnWy1dJyk7XG4iXX0=
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.detectStackDrift = detectStackDrift;
4
- const util_1 = require("util");
4
+ const node_util_1 = require("node:util");
5
5
  const toolkit_error_1 = require("../../toolkit/toolkit-error");
6
+ const string_manipulation_1 = require("../../util/string-manipulation");
6
7
  /**
7
8
  * Detect drift for a CloudFormation stack and wait for the detection to complete
8
9
  *
@@ -16,19 +17,25 @@ async function detectStackDrift(cfn, ioHelper, stackName) {
16
17
  const driftDetection = await cfn.detectStackDrift({
17
18
  StackName: stackName,
18
19
  });
19
- await ioHelper.defaults.trace((0, util_1.format)('Detecting drift with ID %s for stack %s...', driftDetection.StackDriftDetectionId, stackName));
20
+ await ioHelper.defaults.trace((0, node_util_1.format)('Detecting drift with ID %s for stack %s...', driftDetection.StackDriftDetectionId, stackName));
20
21
  // Wait for drift detection to complete
21
22
  const driftStatus = await waitForDriftDetection(cfn, ioHelper, driftDetection.StackDriftDetectionId);
22
- if (!driftStatus) {
23
- throw new toolkit_error_1.ToolkitError('Drift detection took too long to complete. Aborting');
23
+ // Handle UNKNOWN stack drift status
24
+ if (driftStatus?.StackDriftStatus === 'UNKNOWN') {
25
+ await ioHelper.defaults.trace('Stack drift status is UNKNOWN. This may occur when CloudFormation is unable to detect drift for at least one resource and all other resources are IN_SYNC.\n' +
26
+ `Reason: ${(0, string_manipulation_1.formatReason)(driftStatus.DetectionStatusReason)}`);
24
27
  }
25
- if (driftStatus?.DetectionStatus === 'DETECTION_FAILED') {
26
- throw new toolkit_error_1.ToolkitError(`Failed to detect drift: ${driftStatus.DetectionStatusReason || 'No reason provided'}`);
27
- }
28
- // Get the drift results
29
- return cfn.describeStackResourceDrifts({
28
+ // Get the drift results, including resources with UNKNOWN status
29
+ const driftResults = await cfn.describeStackResourceDrifts({
30
30
  StackName: stackName,
31
31
  });
32
+ // Log warning for any resources with UNKNOWN status
33
+ const unknownResources = driftResults.StackResourceDrifts?.filter(drift => drift.StackResourceDriftStatus === 'UNKNOWN');
34
+ if (unknownResources && unknownResources.length > 0) {
35
+ await ioHelper.defaults.trace('Some resources have UNKNOWN drift status. This may be due to insufficient permissions or throttling:\n' +
36
+ unknownResources.map(r => ` - ${r.LogicalResourceId}: ${(0, string_manipulation_1.formatReason)(r.DriftStatusReason)}`).join('\n'));
37
+ }
38
+ return driftResults;
32
39
  }
33
40
  /**
34
41
  * Wait for a drift detection operation to complete
@@ -47,7 +54,7 @@ async function waitForDriftDetection(cfn, ioHelper, driftDetectionId) {
47
54
  return response;
48
55
  }
49
56
  if (response.DetectionStatus === 'DETECTION_FAILED') {
50
- throw new toolkit_error_1.ToolkitError(`Drift detection failed: ${response.DetectionStatusReason}`);
57
+ throw new toolkit_error_1.ToolkitError(`Drift detection failed: ${(0, string_manipulation_1.formatReason)(response.DetectionStatusReason)}`);
51
58
  }
52
59
  if (Date.now() > deadline) {
53
60
  throw new toolkit_error_1.ToolkitError(`Drift detection failed: Timed out after ${maxWaitForDrift / 1000} seconds.`);
@@ -60,4 +67,4 @@ async function waitForDriftDetection(cfn, ioHelper, driftDetectionId) {
60
67
  await new Promise(resolve => setTimeout(resolve, timeBetweenApiCalls));
61
68
  }
62
69
  }
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJpZnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkcmlmdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWNBLDRDQStCQztBQTdDRCwrQkFBOEI7QUFFOUIsK0RBQTJEO0FBSTNEOzs7Ozs7O0dBT0c7QUFDSSxLQUFLLFVBQVUsZ0JBQWdCLENBQ3BDLEdBQTBCLEVBQzFCLFFBQWtCLEVBQ2xCLFNBQWlCO0lBRWpCLHdCQUF3QjtJQUN4QixNQUFNLGNBQWMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQztRQUNoRCxTQUFTLEVBQUUsU0FBUztLQUNyQixDQUFDLENBQUM7SUFFSCxNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUMzQixJQUFBLGFBQU0sRUFBQyw0Q0FBNEMsRUFBRSxjQUFjLENBQUMscUJBQXFCLEVBQUUsU0FBUyxDQUFDLENBQ3RHLENBQUM7SUFFRix1Q0FBdUM7SUFDdkMsTUFBTSxXQUFXLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQyxxQkFBc0IsQ0FBQyxDQUFDO0lBRXRHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqQixNQUFNLElBQUksNEJBQVksQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFRCxJQUFJLFdBQVcsRUFBRSxlQUFlLEtBQUssa0JBQWtCLEVBQUUsQ0FBQztRQUN4RCxNQUFNLElBQUksNEJBQVksQ0FDcEIsMkJBQTJCLFdBQVcsQ0FBQyxxQkFBcUIsSUFBSSxvQkFBb0IsRUFBRSxDQUN2RixDQUFDO0lBQ0osQ0FBQztJQUVELHdCQUF3QjtJQUN4QixPQUFPLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQztRQUNyQyxTQUFTLEVBQUUsU0FBUztLQUNyQixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxLQUFLLFVBQVUscUJBQXFCLENBQ2xDLEdBQTBCLEVBQzFCLFFBQWtCLEVBQ2xCLGdCQUF3QjtJQUV4QixNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsQ0FBQyxrQ0FBa0M7SUFDbkUsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsQ0FBQyw0REFBNEQ7SUFDL0YsTUFBTSxtQkFBbUIsR0FBRyxLQUFLLENBQUMsQ0FBQyx1QkFBdUI7SUFDMUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLGVBQWUsQ0FBQztJQUM5QyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsa0JBQWtCLENBQUM7SUFFOUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUNaLE1BQU0sUUFBUSxHQUFHLE1BQU0sR0FBRyxDQUFDLGlDQUFpQyxDQUFDO1lBQzNELHFCQUFxQixFQUFFLGdCQUFnQjtTQUN4QyxDQUFDLENBQUM7UUFFSCxJQUFJLFFBQVEsQ0FBQyxlQUFlLEtBQUssb0JBQW9CLEVBQUUsQ0FBQztZQUN0RCxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDO1FBRUQsSUFBSSxRQUFRLENBQUMsZUFBZSxLQUFLLGtCQUFrQixFQUFFLENBQUM7WUFDcEQsTUFBTSxJQUFJLDRCQUFZLENBQUMsMkJBQTJCLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUM7UUFDdEYsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFFBQVEsRUFBRSxDQUFDO1lBQzFCLE1BQU0sSUFBSSw0QkFBWSxDQUFDLDJDQUEyQyxlQUFlLEdBQUcsSUFBSSxXQUFXLENBQUMsQ0FBQztRQUN2RyxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUM7WUFDekIsTUFBTSxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1lBQzVFLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsa0JBQWtCLENBQUM7UUFDNUMsQ0FBQztRQUVELGtFQUFrRTtRQUNsRSxNQUFNLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7SUFDekUsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmb3JtYXQgfSBmcm9tICd1dGlsJztcbmltcG9ydCB0eXBlIHsgRGVzY3JpYmVTdGFja0RyaWZ0RGV0ZWN0aW9uU3RhdHVzQ29tbWFuZE91dHB1dCwgRGVzY3JpYmVTdGFja1Jlc291cmNlRHJpZnRzQ29tbWFuZE91dHB1dCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IgfSBmcm9tICcuLi8uLi90b29sa2l0L3Rvb2xraXQtZXJyb3InO1xuaW1wb3J0IHR5cGUgeyBJQ2xvdWRGb3JtYXRpb25DbGllbnQgfSBmcm9tICcuLi9hd3MtYXV0aC9wcml2YXRlJztcbmltcG9ydCB0eXBlIHsgSW9IZWxwZXIgfSBmcm9tICcuLi9pby9wcml2YXRlJztcblxuLyoqXG4gKiBEZXRlY3QgZHJpZnQgZm9yIGEgQ2xvdWRGb3JtYXRpb24gc3RhY2sgYW5kIHdhaXQgZm9yIHRoZSBkZXRlY3Rpb24gdG8gY29tcGxldGVcbiAqXG4gKiBAcGFyYW0gY2ZuIC0gYSBDbG91ZEZvcm1hdGlvbiBjbGllbnRcbiAqIEBwYXJhbSBpb0hlbHBlciAtIGhlbHBlciBmb3IgSU8gb3BlcmF0aW9uc1xuICogQHBhcmFtIHN0YWNrTmFtZSAtIHRoZSBuYW1lIG9mIHRoZSBzdGFjayB0byBjaGVjayBmb3IgZHJpZnRcbiAqIEByZXR1cm5zIHRoZSBDbG91ZEZvcm1hdGlvbiBkZXNjcmlwdGlvbiBvZiB0aGUgZHJpZnQgZGV0ZWN0aW9uIHJlc3VsdHNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRldGVjdFN0YWNrRHJpZnQoXG4gIGNmbjogSUNsb3VkRm9ybWF0aW9uQ2xpZW50LFxuICBpb0hlbHBlcjogSW9IZWxwZXIsXG4gIHN0YWNrTmFtZTogc3RyaW5nLFxuKTogUHJvbWlzZTxEZXNjcmliZVN0YWNrUmVzb3VyY2VEcmlmdHNDb21tYW5kT3V0cHV0PiB7XG4gIC8vIFN0YXJ0IGRyaWZ0IGRldGVjdGlvblxuICBjb25zdCBkcmlmdERldGVjdGlvbiA9IGF3YWl0IGNmbi5kZXRlY3RTdGFja0RyaWZ0KHtcbiAgICBTdGFja05hbWU6IHN0YWNrTmFtZSxcbiAgfSk7XG5cbiAgYXdhaXQgaW9IZWxwZXIuZGVmYXVsdHMudHJhY2UoXG4gICAgZm9ybWF0KCdEZXRlY3RpbmcgZHJpZnQgd2l0aCBJRCAlcyBmb3Igc3RhY2sgJXMuLi4nLCBkcmlmdERldGVjdGlvbi5TdGFja0RyaWZ0RGV0ZWN0aW9uSWQsIHN0YWNrTmFtZSksXG4gICk7XG5cbiAgLy8gV2FpdCBmb3IgZHJpZnQgZGV0ZWN0aW9uIHRvIGNvbXBsZXRlXG4gIGNvbnN0IGRyaWZ0U3RhdHVzID0gYXdhaXQgd2FpdEZvckRyaWZ0RGV0ZWN0aW9uKGNmbiwgaW9IZWxwZXIsIGRyaWZ0RGV0ZWN0aW9uLlN0YWNrRHJpZnREZXRlY3Rpb25JZCEpO1xuXG4gIGlmICghZHJpZnRTdGF0dXMpIHtcbiAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdEcmlmdCBkZXRlY3Rpb24gdG9vayB0b28gbG9uZyB0byBjb21wbGV0ZS4gQWJvcnRpbmcnKTtcbiAgfVxuXG4gIGlmIChkcmlmdFN0YXR1cz8uRGV0ZWN0aW9uU3RhdHVzID09PSAnREVURUNUSU9OX0ZBSUxFRCcpIHtcbiAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKFxuICAgICAgYEZhaWxlZCB0byBkZXRlY3QgZHJpZnQ6ICR7ZHJpZnRTdGF0dXMuRGV0ZWN0aW9uU3RhdHVzUmVhc29uIHx8ICdObyByZWFzb24gcHJvdmlkZWQnfWAsXG4gICAgKTtcbiAgfVxuXG4gIC8vIEdldCB0aGUgZHJpZnQgcmVzdWx0c1xuICByZXR1cm4gY2ZuLmRlc2NyaWJlU3RhY2tSZXNvdXJjZURyaWZ0cyh7XG4gICAgU3RhY2tOYW1lOiBzdGFja05hbWUsXG4gIH0pO1xufVxuXG4vKipcbiAqIFdhaXQgZm9yIGEgZHJpZnQgZGV0ZWN0aW9uIG9wZXJhdGlvbiB0byBjb21wbGV0ZVxuICovXG5hc3luYyBmdW5jdGlvbiB3YWl0Rm9yRHJpZnREZXRlY3Rpb24oXG4gIGNmbjogSUNsb3VkRm9ybWF0aW9uQ2xpZW50LFxuICBpb0hlbHBlcjogSW9IZWxwZXIsXG4gIGRyaWZ0RGV0ZWN0aW9uSWQ6IHN0cmluZyxcbik6IFByb21pc2U8RGVzY3JpYmVTdGFja0RyaWZ0RGV0ZWN0aW9uU3RhdHVzQ29tbWFuZE91dHB1dCB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBtYXhXYWl0Rm9yRHJpZnQgPSAzMDBfMDAwOyAvLyBpZiB0YWtlcyBsb25nZXIgdGhhbiA1bWluLCBmYWlsXG4gIGNvbnN0IHRpbWVCZXR3ZWVuT3V0cHV0cyA9IDEwXzAwMDsgLy8gaG93IGxvbmcgdG8gd2FpdCBiZWZvcmUgdGVsbGluZyB1c2VyIHdlJ3JlIHN0aWxsIGNoZWNraW5nXG4gIGNvbnN0IHRpbWVCZXR3ZWVuQXBpQ2FsbHMgPSAyXzAwMDsgLy8gd2FpdCAycyBwZXIgQVBJIGNhbGxcbiAgY29uc3QgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgbWF4V2FpdEZvckRyaWZ0O1xuICBsZXQgY2hlY2tJbiA9IERhdGUubm93KCkgKyB0aW1lQmV0d2Vlbk91dHB1dHM7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNmbi5kZXNjcmliZVN0YWNrRHJpZnREZXRlY3Rpb25TdGF0dXMoe1xuICAgICAgU3RhY2tEcmlmdERldGVjdGlvbklkOiBkcmlmdERldGVjdGlvbklkLFxuICAgIH0pO1xuXG4gICAgaWYgKHJlc3BvbnNlLkRldGVjdGlvblN0YXR1cyA9PT0gJ0RFVEVDVElPTl9DT01QTEVURScpIHtcbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG5cbiAgICBpZiAocmVzcG9uc2UuRGV0ZWN0aW9uU3RhdHVzID09PSAnREVURUNUSU9OX0ZBSUxFRCcpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoYERyaWZ0IGRldGVjdGlvbiBmYWlsZWQ6ICR7cmVzcG9uc2UuRGV0ZWN0aW9uU3RhdHVzUmVhc29ufWApO1xuICAgIH1cblxuICAgIGlmIChEYXRlLm5vdygpID4gZGVhZGxpbmUpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoYERyaWZ0IGRldGVjdGlvbiBmYWlsZWQ6IFRpbWVkIG91dCBhZnRlciAke21heFdhaXRGb3JEcmlmdCAvIDEwMDB9IHNlY29uZHMuYCk7XG4gICAgfVxuXG4gICAgaWYgKERhdGUubm93KCkgPiBjaGVja0luKSB7XG4gICAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy50cmFjZSgnV2FpdGluZyBmb3IgZHJpZnQgZGV0ZWN0aW9uIHRvIGNvbXBsZXRlLi4uJyk7XG4gICAgICBjaGVja0luID0gRGF0ZS5ub3coKSArIHRpbWVCZXR3ZWVuT3V0cHV0cztcbiAgICB9XG5cbiAgICAvLyBXYWl0IGEgc2hvcnQgd2hpbGUgYmV0d2VlbiBBUEkgY2FsbHMgc28gd2UgZG9uJ3QgY3JlYXRlIGEgZmxvb2RcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgdGltZUJldHdlZW5BcGlDYWxscykpO1xuICB9XG59XG4iXX0=
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJpZnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkcmlmdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWVBLDRDQTZDQztBQTVERCx5Q0FBbUM7QUFFbkMsK0RBQTJEO0FBQzNELHdFQUE4RDtBQUk5RDs7Ozs7OztHQU9HO0FBQ0ksS0FBSyxVQUFVLGdCQUFnQixDQUNwQyxHQUEwQixFQUMxQixRQUFrQixFQUNsQixTQUFpQjtJQUVqQix3QkFBd0I7SUFDeEIsTUFBTSxjQUFjLEdBQUcsTUFBTSxHQUFHLENBQUMsZ0JBQWdCLENBQUM7UUFDaEQsU0FBUyxFQUFFLFNBQVM7S0FDckIsQ0FBQyxDQUFDO0lBRUgsTUFBTSxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FDM0IsSUFBQSxrQkFBTSxFQUFDLDRDQUE0QyxFQUFFLGNBQWMsQ0FBQyxxQkFBcUIsRUFBRSxTQUFTLENBQUMsQ0FDdEcsQ0FBQztJQUVGLHVDQUF1QztJQUN2QyxNQUFNLFdBQVcsR0FBRyxNQUFNLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsY0FBYyxDQUFDLHFCQUFzQixDQUFDLENBQUM7SUFFdEcsb0NBQW9DO0lBQ3BDLElBQUksV0FBVyxFQUFFLGdCQUFnQixLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ2hELE1BQU0sUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQzNCLDhKQUE4SjtZQUM5SixXQUFXLElBQUEsa0NBQVksRUFBQyxXQUFXLENBQUMscUJBQXFCLENBQUMsRUFBRSxDQUM3RCxDQUFDO0lBQ0osQ0FBQztJQUVELGlFQUFpRTtJQUNqRSxNQUFNLFlBQVksR0FBRyxNQUFNLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQztRQUN6RCxTQUFTLEVBQUUsU0FBUztLQUNyQixDQUFDLENBQUM7SUFFSCxvREFBb0Q7SUFDcEQsTUFBTSxnQkFBZ0IsR0FBRyxZQUFZLENBQUMsbUJBQW1CLEVBQUUsTUFBTSxDQUMvRCxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsS0FBSyxTQUFTLENBQ3RELENBQUM7SUFFRixJQUFJLGdCQUFnQixJQUFJLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNwRCxNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUMzQix3R0FBd0c7WUFDeEcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ3ZCLE9BQU8sQ0FBQyxDQUFDLGlCQUFpQixLQUFLLElBQUEsa0NBQVksRUFBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUNuRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FDYixDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sWUFBWSxDQUFDO0FBQ3RCLENBQUM7QUFFRDs7R0FFRztBQUNILEtBQUssVUFBVSxxQkFBcUIsQ0FDbEMsR0FBMEIsRUFDMUIsUUFBa0IsRUFDbEIsZ0JBQXdCO0lBRXhCLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxDQUFDLGtDQUFrQztJQUNuRSxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxDQUFDLDREQUE0RDtJQUMvRixNQUFNLG1CQUFtQixHQUFHLEtBQUssQ0FBQyxDQUFDLHVCQUF1QjtJQUMxRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsZUFBZSxDQUFDO0lBQzlDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxrQkFBa0IsQ0FBQztJQUU5QyxPQUFPLElBQUksRUFBRSxDQUFDO1FBQ1osTUFBTSxRQUFRLEdBQUcsTUFBTSxHQUFHLENBQUMsaUNBQWlDLENBQUM7WUFDM0QscUJBQXFCLEVBQUUsZ0JBQWdCO1NBQ3hDLENBQUMsQ0FBQztRQUVILElBQUksUUFBUSxDQUFDLGVBQWUsS0FBSyxvQkFBb0IsRUFBRSxDQUFDO1lBQ3RELE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7UUFFRCxJQUFJLFFBQVEsQ0FBQyxlQUFlLEtBQUssa0JBQWtCLEVBQUUsQ0FBQztZQUNwRCxNQUFNLElBQUksNEJBQVksQ0FBQywyQkFBMkIsSUFBQSxrQ0FBWSxFQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwRyxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsUUFBUSxFQUFFLENBQUM7WUFDMUIsTUFBTSxJQUFJLDRCQUFZLENBQUMsMkNBQTJDLGVBQWUsR0FBRyxJQUFJLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZHLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQztZQUN6QixNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7WUFDNUUsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxrQkFBa0IsQ0FBQztRQUM1QyxDQUFDO1FBRUQsa0VBQWtFO1FBQ2xFLE1BQU0sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQztJQUN6RSxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZvcm1hdCB9IGZyb20gJ25vZGU6dXRpbCc7XG5pbXBvcnQgdHlwZSB7IERlc2NyaWJlU3RhY2tEcmlmdERldGVjdGlvblN0YXR1c0NvbW1hbmRPdXRwdXQsIERlc2NyaWJlU3RhY2tSZXNvdXJjZURyaWZ0c0NvbW1hbmRPdXRwdXQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgVG9vbGtpdEVycm9yIH0gZnJvbSAnLi4vLi4vdG9vbGtpdC90b29sa2l0LWVycm9yJztcbmltcG9ydCB7IGZvcm1hdFJlYXNvbiB9IGZyb20gJy4uLy4uL3V0aWwvc3RyaW5nLW1hbmlwdWxhdGlvbic7XG5pbXBvcnQgdHlwZSB7IElDbG91ZEZvcm1hdGlvbkNsaWVudCB9IGZyb20gJy4uL2F3cy1hdXRoL3ByaXZhdGUnO1xuaW1wb3J0IHR5cGUgeyBJb0hlbHBlciB9IGZyb20gJy4uL2lvL3ByaXZhdGUnO1xuXG4vKipcbiAqIERldGVjdCBkcmlmdCBmb3IgYSBDbG91ZEZvcm1hdGlvbiBzdGFjayBhbmQgd2FpdCBmb3IgdGhlIGRldGVjdGlvbiB0byBjb21wbGV0ZVxuICpcbiAqIEBwYXJhbSBjZm4gLSBhIENsb3VkRm9ybWF0aW9uIGNsaWVudFxuICogQHBhcmFtIGlvSGVscGVyIC0gaGVscGVyIGZvciBJTyBvcGVyYXRpb25zXG4gKiBAcGFyYW0gc3RhY2tOYW1lIC0gdGhlIG5hbWUgb2YgdGhlIHN0YWNrIHRvIGNoZWNrIGZvciBkcmlmdFxuICogQHJldHVybnMgdGhlIENsb3VkRm9ybWF0aW9uIGRlc2NyaXB0aW9uIG9mIHRoZSBkcmlmdCBkZXRlY3Rpb24gcmVzdWx0c1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGV0ZWN0U3RhY2tEcmlmdChcbiAgY2ZuOiBJQ2xvdWRGb3JtYXRpb25DbGllbnQsXG4gIGlvSGVscGVyOiBJb0hlbHBlcixcbiAgc3RhY2tOYW1lOiBzdHJpbmcsXG4pOiBQcm9taXNlPERlc2NyaWJlU3RhY2tSZXNvdXJjZURyaWZ0c0NvbW1hbmRPdXRwdXQ+IHtcbiAgLy8gU3RhcnQgZHJpZnQgZGV0ZWN0aW9uXG4gIGNvbnN0IGRyaWZ0RGV0ZWN0aW9uID0gYXdhaXQgY2ZuLmRldGVjdFN0YWNrRHJpZnQoe1xuICAgIFN0YWNrTmFtZTogc3RhY2tOYW1lLFxuICB9KTtcblxuICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy50cmFjZShcbiAgICBmb3JtYXQoJ0RldGVjdGluZyBkcmlmdCB3aXRoIElEICVzIGZvciBzdGFjayAlcy4uLicsIGRyaWZ0RGV0ZWN0aW9uLlN0YWNrRHJpZnREZXRlY3Rpb25JZCwgc3RhY2tOYW1lKSxcbiAgKTtcblxuICAvLyBXYWl0IGZvciBkcmlmdCBkZXRlY3Rpb24gdG8gY29tcGxldGVcbiAgY29uc3QgZHJpZnRTdGF0dXMgPSBhd2FpdCB3YWl0Rm9yRHJpZnREZXRlY3Rpb24oY2ZuLCBpb0hlbHBlciwgZHJpZnREZXRlY3Rpb24uU3RhY2tEcmlmdERldGVjdGlvbklkISk7XG5cbiAgLy8gSGFuZGxlIFVOS05PV04gc3RhY2sgZHJpZnQgc3RhdHVzXG4gIGlmIChkcmlmdFN0YXR1cz8uU3RhY2tEcmlmdFN0YXR1cyA9PT0gJ1VOS05PV04nKSB7XG4gICAgYXdhaXQgaW9IZWxwZXIuZGVmYXVsdHMudHJhY2UoXG4gICAgICAnU3RhY2sgZHJpZnQgc3RhdHVzIGlzIFVOS05PV04uIFRoaXMgbWF5IG9jY3VyIHdoZW4gQ2xvdWRGb3JtYXRpb24gaXMgdW5hYmxlIHRvIGRldGVjdCBkcmlmdCBmb3IgYXQgbGVhc3Qgb25lIHJlc291cmNlIGFuZCBhbGwgb3RoZXIgcmVzb3VyY2VzIGFyZSBJTl9TWU5DLlxcbicgK1xuICAgICAgYFJlYXNvbjogJHtmb3JtYXRSZWFzb24oZHJpZnRTdGF0dXMuRGV0ZWN0aW9uU3RhdHVzUmVhc29uKX1gLFxuICAgICk7XG4gIH1cblxuICAvLyBHZXQgdGhlIGRyaWZ0IHJlc3VsdHMsIGluY2x1ZGluZyByZXNvdXJjZXMgd2l0aCBVTktOT1dOIHN0YXR1c1xuICBjb25zdCBkcmlmdFJlc3VsdHMgPSBhd2FpdCBjZm4uZGVzY3JpYmVTdGFja1Jlc291cmNlRHJpZnRzKHtcbiAgICBTdGFja05hbWU6IHN0YWNrTmFtZSxcbiAgfSk7XG5cbiAgLy8gTG9nIHdhcm5pbmcgZm9yIGFueSByZXNvdXJjZXMgd2l0aCBVTktOT1dOIHN0YXR1c1xuICBjb25zdCB1bmtub3duUmVzb3VyY2VzID0gZHJpZnRSZXN1bHRzLlN0YWNrUmVzb3VyY2VEcmlmdHM/LmZpbHRlcihcbiAgICBkcmlmdCA9PiBkcmlmdC5TdGFja1Jlc291cmNlRHJpZnRTdGF0dXMgPT09ICdVTktOT1dOJyxcbiAgKTtcblxuICBpZiAodW5rbm93blJlc291cmNlcyAmJiB1bmtub3duUmVzb3VyY2VzLmxlbmd0aCA+IDApIHtcbiAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy50cmFjZShcbiAgICAgICdTb21lIHJlc291cmNlcyBoYXZlIFVOS05PV04gZHJpZnQgc3RhdHVzLiBUaGlzIG1heSBiZSBkdWUgdG8gaW5zdWZmaWNpZW50IHBlcm1pc3Npb25zIG9yIHRocm90dGxpbmc6XFxuJyArXG4gICAgICB1bmtub3duUmVzb3VyY2VzLm1hcChyID0+XG4gICAgICAgIGAgIC0gJHtyLkxvZ2ljYWxSZXNvdXJjZUlkfTogJHtmb3JtYXRSZWFzb24oci5EcmlmdFN0YXR1c1JlYXNvbil9YCxcbiAgICAgICkuam9pbignXFxuJyksXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBkcmlmdFJlc3VsdHM7XG59XG5cbi8qKlxuICogV2FpdCBmb3IgYSBkcmlmdCBkZXRlY3Rpb24gb3BlcmF0aW9uIHRvIGNvbXBsZXRlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JEcmlmdERldGVjdGlvbihcbiAgY2ZuOiBJQ2xvdWRGb3JtYXRpb25DbGllbnQsXG4gIGlvSGVscGVyOiBJb0hlbHBlcixcbiAgZHJpZnREZXRlY3Rpb25JZDogc3RyaW5nLFxuKTogUHJvbWlzZTxEZXNjcmliZVN0YWNrRHJpZnREZXRlY3Rpb25TdGF0dXNDb21tYW5kT3V0cHV0IHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IG1heFdhaXRGb3JEcmlmdCA9IDMwMF8wMDA7IC8vIGlmIHRha2VzIGxvbmdlciB0aGFuIDVtaW4sIGZhaWxcbiAgY29uc3QgdGltZUJldHdlZW5PdXRwdXRzID0gMTBfMDAwOyAvLyBob3cgbG9uZyB0byB3YWl0IGJlZm9yZSB0ZWxsaW5nIHVzZXIgd2UncmUgc3RpbGwgY2hlY2tpbmdcbiAgY29uc3QgdGltZUJldHdlZW5BcGlDYWxscyA9IDJfMDAwOyAvLyB3YWl0IDJzIHBlciBBUEkgY2FsbFxuICBjb25zdCBkZWFkbGluZSA9IERhdGUubm93KCkgKyBtYXhXYWl0Rm9yRHJpZnQ7XG4gIGxldCBjaGVja0luID0gRGF0ZS5ub3coKSArIHRpbWVCZXR3ZWVuT3V0cHV0cztcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2ZuLmRlc2NyaWJlU3RhY2tEcmlmdERldGVjdGlvblN0YXR1cyh7XG4gICAgICBTdGFja0RyaWZ0RGV0ZWN0aW9uSWQ6IGRyaWZ0RGV0ZWN0aW9uSWQsXG4gICAgfSk7XG5cbiAgICBpZiAocmVzcG9uc2UuRGV0ZWN0aW9uU3RhdHVzID09PSAnREVURUNUSU9OX0NPTVBMRVRFJykge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH1cblxuICAgIGlmIChyZXNwb25zZS5EZXRlY3Rpb25TdGF0dXMgPT09ICdERVRFQ1RJT05fRkFJTEVEJykge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihgRHJpZnQgZGV0ZWN0aW9uIGZhaWxlZDogJHtmb3JtYXRSZWFzb24ocmVzcG9uc2UuRGV0ZWN0aW9uU3RhdHVzUmVhc29uKX1gKTtcbiAgICB9XG5cbiAgICBpZiAoRGF0ZS5ub3coKSA+IGRlYWRsaW5lKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKGBEcmlmdCBkZXRlY3Rpb24gZmFpbGVkOiBUaW1lZCBvdXQgYWZ0ZXIgJHttYXhXYWl0Rm9yRHJpZnQgLyAxMDAwfSBzZWNvbmRzLmApO1xuICAgIH1cblxuICAgIGlmIChEYXRlLm5vdygpID4gY2hlY2tJbikge1xuICAgICAgYXdhaXQgaW9IZWxwZXIuZGVmYXVsdHMudHJhY2UoJ1dhaXRpbmcgZm9yIGRyaWZ0IGRldGVjdGlvbiB0byBjb21wbGV0ZS4uLicpO1xuICAgICAgY2hlY2tJbiA9IERhdGUubm93KCkgKyB0aW1lQmV0d2Vlbk91dHB1dHM7XG4gICAgfVxuXG4gICAgLy8gV2FpdCBhIHNob3J0IHdoaWxlIGJldHdlZW4gQVBJIGNhbGxzIHNvIHdlIGRvbid0IGNyZWF0ZSBhIGZsb29kXG4gICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVCZXR3ZWVuQXBpQ2FsbHMpKTtcbiAgfVxufVxuIl19
package/lib/index_bg.wasm CHANGED
Binary file