velocious 1.0.347 → 1.0.348

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.
@@ -1 +1 @@
1
- {"version":3,"file":"resource-definition.d.ts","sourceRoot":"","sources":["../../../src/frontend-models/resource-definition.js"],"names":[],"mappings":"AAOA;;;GAGG;AACH,wEAHW,OAAO,2BAA2B,EAAE,2BAA2B,GAC7D,MAAM,CAAC,MAAM,EAAE,OAAO,yBAAyB,CAAC,CAc5D;AAED;;;GAGG;AACH,8DAHW,OAAO,GACL,KAAK,IAAI,OAAO,yBAAyB,CAIrD;AAED;;;GAGG;AACH,6EAHW,OAAO,GACL,OAAO,yBAAyB,GAAG,IAAI,CAInD;AAED;;;GAGG;AACH,qFAHW,OAAO,GACL,OAAO,2BAA2B,EAAE,4CAA4C,GAAG,IAAI,CAMnG;AAkND;;;;GAIG;AACH,qDAJW,MAAM,sBACN,OAAO,GACL,MAAM,CAUlB;AAED;;;;;;GAMG;AACH,8FALG;IAAqB,WAAW,EAAxB,MAAM;IACO,SAAS,EAAtB,MAAM;IACQ,kBAAkB,EAAhC,OAAO;CACf,GAAU,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,KAAK,GAAG,IAAI,CA2BrG;AAED;;;;;GAKG;AACH,oFAJG;IAAgF,eAAe,EAAvF,OAAO,2BAA2B,EAAE,2BAA2B,EAAE;IACpD,WAAW,EAAxB,MAAM;CACd,GAAU;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,YAAY,GAAG,QAAQ,CAAA;CAAC,GAAG,IAAI,CA8DxJ;sCAnXqC,6CAA6C"}
1
+ {"version":3,"file":"resource-definition.d.ts","sourceRoot":"","sources":["../../../src/frontend-models/resource-definition.js"],"names":[],"mappings":"AAOA;;;GAGG;AACH,wEAHW,OAAO,2BAA2B,EAAE,2BAA2B,GAC7D,MAAM,CAAC,MAAM,EAAE,OAAO,yBAAyB,CAAC,CAc5D;AAED;;;GAGG;AACH,8DAHW,OAAO,GACL,KAAK,IAAI,OAAO,yBAAyB,CAIrD;AAED;;;GAGG;AACH,6EAHW,OAAO,GACL,OAAO,yBAAyB,GAAG,IAAI,CAInD;AAED;;;GAGG;AACH,qFAHW,OAAO,GACL,OAAO,2BAA2B,EAAE,4CAA4C,GAAG,IAAI,CAMnG;AAuLD;;;;GAIG;AACH,qDAJW,MAAM,sBACN,OAAO,GACL,MAAM,CAUlB;AAED;;;;;;GAMG;AACH,8FALG;IAAqB,WAAW,EAAxB,MAAM;IACO,SAAS,EAAtB,MAAM;IACQ,kBAAkB,EAAhC,OAAO;CACf,GAAU,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,KAAK,GAAG,IAAI,CA2BrG;AAED;;;;;GAKG;AACH,oFAJG;IAAgF,eAAe,EAAvF,OAAO,2BAA2B,EAAE,2BAA2B,EAAE;IACpD,WAAW,EAAxB,MAAM;CACd,GAAU;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,YAAY,GAAG,QAAQ,CAAA;CAAC,GAAG,IAAI,CA8DxJ;sCAxVqC,6CAA6C"}
@@ -74,7 +74,7 @@ function normalizeFrontendModelResourceConfiguration(resourceConfiguration) {
74
74
  };
75
75
  }
76
76
  /**
77
- * @param {Record<string, string> | string[] | undefined} abilities - Resource abilities config.
77
+ * @param {string[] | undefined} abilities - Resource abilities config (camelCase action list).
78
78
  * @returns {Record<string, string>} - Normalized abilities config.
79
79
  */
80
80
  function normalizeFrontendModelResourceAbilities(abilities) {
@@ -82,7 +82,7 @@ function normalizeFrontendModelResourceAbilities(abilities) {
82
82
  return { find: "read", index: "read" };
83
83
  }
84
84
  if (!Array.isArray(abilities)) {
85
- return abilities;
85
+ throw new Error("Resource abilities must be an array of action names. Object form is no longer supported.");
86
86
  }
87
87
  /** @type {Record<string, string>} */
88
88
  const normalized = {};
@@ -145,7 +145,7 @@ function normalizeFrontendModelResourceCommands(resourceConfiguration) {
145
145
  /**
146
146
  * @param {object} args - Arguments.
147
147
  * @param {Record<string, string>} args.commandDefaults - Built-in default command names.
148
- * @param {Record<string, string> | string[] | undefined} args.commandsConfig - Built-in commands config.
148
+ * @param {string[] | undefined} args.commandsConfig - Built-in commands config (camelCase command type list).
149
149
  * @param {string} args.modelName - Diagnostic model name.
150
150
  * @returns {Record<string, string>} - Normalized built-in command config.
151
151
  */
@@ -153,31 +153,19 @@ function normalizeFrontendModelBuiltInCommands({ commandDefaults, commandsConfig
153
153
  if (!commandsConfig) {
154
154
  return commandDefaults;
155
155
  }
156
- if (Array.isArray(commandsConfig)) {
157
- /** @type {Record<string, string>} */
158
- const normalizedCommands = {};
159
- for (const commandType of commandsConfig) {
160
- const defaultCommandName = commandDefaults[commandType];
161
- if (!defaultCommandName) {
162
- throw new Error(`Unknown built-in frontend model command '${commandType}' for ${modelName}`);
163
- }
164
- normalizedCommands[commandType] = validateFrontendModelResourceCommandName({
165
- commandName: defaultCommandName,
166
- commandType: defaultCommandName,
167
- modelName
168
- });
169
- }
170
- return normalizedCommands;
156
+ if (!Array.isArray(commandsConfig)) {
157
+ throw new Error(`${modelName} configuration must use the array form. Object form is no longer supported.`);
171
158
  }
172
159
  /** @type {Record<string, string>} */
173
160
  const normalizedCommands = {};
174
- for (const [commandType, commandName] of Object.entries(commandsConfig)) {
175
- if (!commandDefaults[commandType]) {
161
+ for (const commandType of commandsConfig) {
162
+ const defaultCommandName = commandDefaults[commandType];
163
+ if (!defaultCommandName) {
176
164
  throw new Error(`Unknown built-in frontend model command '${commandType}' for ${modelName}`);
177
165
  }
178
166
  normalizedCommands[commandType] = validateFrontendModelResourceCommandName({
179
- commandName,
180
- commandType: /** @type {string} */ (commandType),
167
+ commandName: defaultCommandName,
168
+ commandType: defaultCommandName,
181
169
  modelName
182
170
  });
183
171
  }
@@ -185,36 +173,27 @@ function normalizeFrontendModelBuiltInCommands({ commandDefaults, commandsConfig
185
173
  }
186
174
  /**
187
175
  * @param {object} args - Arguments.
188
- * @param {Record<string, string> | string[] | undefined} args.commandsConfig - Custom commands config.
176
+ * @param {string[] | undefined} args.commandsConfig - Custom commands config (camelCase method-name list).
189
177
  * @param {string} args.modelName - Diagnostic model name.
190
- * @returns {Record<string, string>} - Normalized custom command config.
178
+ * @returns {Record<string, string>} - Normalized custom command config (camelCase method name → kebab-case command slug).
191
179
  */
192
180
  function normalizeFrontendModelCustomCommands({ commandsConfig, modelName }) {
193
181
  if (!commandsConfig) {
194
182
  return {};
195
183
  }
196
- if (Array.isArray(commandsConfig)) {
197
- /** @type {Record<string, string>} */
198
- const normalizedCommands = {};
199
- for (const commandName of commandsConfig) {
200
- const validatedCommandName = validateFrontendModelResourceCommandName({
201
- commandName,
202
- commandType: commandName,
203
- modelName
204
- });
205
- normalizedCommands[inflection.camelize(validatedCommandName, true)] = validatedCommandName;
206
- }
207
- return normalizedCommands;
184
+ if (!Array.isArray(commandsConfig)) {
185
+ throw new Error(`${modelName} configuration must use the array form. Object form is no longer supported.`);
208
186
  }
209
187
  /** @type {Record<string, string>} */
210
188
  const normalizedCommands = {};
211
- for (const methodName of Object.keys(commandsConfig)) {
212
- const commandName = commandsConfig[methodName];
213
- normalizedCommands[methodName] = validateFrontendModelResourceCommandName({
214
- commandName,
215
- commandType: commandName,
189
+ for (const methodName of commandsConfig) {
190
+ const validatedMethodName = validateFrontendModelResourceCommandName({
191
+ commandName: methodName,
192
+ commandType: methodName,
216
193
  modelName
217
194
  });
195
+ const commandSlug = inflection.dasherize(inflection.underscore(validatedMethodName));
196
+ normalizedCommands[validatedMethodName] = commandSlug;
218
197
  }
219
198
  return normalizedCommands;
220
199
  }
@@ -326,4 +305,4 @@ function normalizeFrontendModelResourcePathForMatch(path) {
326
305
  }
327
306
  return withLeadingSlash;
328
307
  }
329
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtZGVmaW5pdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mcm9udGVuZC1tb2RlbHMvcmVzb3VyY2UtZGVmaW5pdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxLQUFLLFVBQVUsTUFBTSxZQUFZLENBQUE7QUFDeEMsT0FBTyx5QkFBeUIsTUFBTSw2Q0FBNkMsQ0FBQTtBQUNuRixPQUFPLGFBQWEsTUFBTSw2QkFBNkIsQ0FBQTtBQUN2RCxPQUFPLEVBQUMsd0NBQXdDLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQTtBQUV4Rjs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsdUNBQXVDLENBQUMsY0FBYztJQUNwRSxNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUMsY0FBYyxDQUFBO0lBRS9DLElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxTQUFTLElBQUksT0FBTyxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDaEQsTUFBTSxJQUFJLEtBQUssQ0FBQywyREFBMkQsU0FBUyxFQUFFLENBQUMsQ0FBQTtRQUN6RixDQUFDO1FBRUQsT0FBTyxTQUFTLENBQUE7SUFDbEIsQ0FBQztJQUVELE9BQU8sRUFBRSxDQUFBO0FBQ1gsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxzQ0FBc0MsQ0FBQyxLQUFLO0lBQzFELE9BQU8sT0FBTyxLQUFLLEtBQUssVUFBVSxJQUFJLENBQUMsS0FBSyxLQUFLLHlCQUF5QixJQUFJLEtBQUssQ0FBQyxTQUFTLFlBQVkseUJBQXlCLENBQUMsQ0FBQTtBQUNySSxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLHdDQUF3QyxDQUFDLGtCQUFrQjtJQUN6RSxPQUFPLHNDQUFzQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7QUFDL0YsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxnREFBZ0QsQ0FBQyxrQkFBa0I7SUFDakYsSUFBSSxDQUFDLHNDQUFzQyxDQUFDLGtCQUFrQixDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUE7SUFFNUUsT0FBTywyQ0FBMkMsQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFBO0FBQ3pGLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLDJDQUEyQyxDQUFDLHFCQUFxQjtJQUN4RSxNQUFNLFFBQVEsR0FBRyxrQ0FBa0MsQ0FBQyxDQUFDLEVBQUMsR0FBRyxxQkFBcUIsRUFBQyxDQUFDLENBQUE7SUFFaEYsS0FBSyxNQUFNLEdBQUcsSUFBSTtRQUNoQixXQUFXO1FBQ1gsWUFBWTtRQUNaLGFBQWE7UUFDYiwyQkFBMkI7UUFDM0IsdUJBQXVCO1FBQ3ZCLG9CQUFvQjtRQUNwQixVQUFVO1FBQ1YsZ0JBQWdCO1FBQ2hCLFdBQVc7UUFDWCxZQUFZO1FBQ1osZUFBZTtRQUNmLFFBQVE7S0FDVCxFQUFFLENBQUM7UUFDRixPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUN0QixDQUFDO0lBRUQsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBRXZCLE1BQU0sa0JBQWtCLEdBQUcsc0NBQXNDLENBQUMscUJBQXFCLENBQUMsQ0FBQTtJQUV4RixPQUFPO1FBQ0wsR0FBRyxxQkFBcUI7UUFDeEIsU0FBUyxFQUFFLHVDQUF1QyxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQztRQUNuRix5QkFBeUIsRUFBRSxrQkFBa0IsQ0FBQyx5QkFBeUI7UUFDdkUscUJBQXFCLEVBQUUsa0JBQWtCLENBQUMscUJBQXFCO1FBQy9ELGtCQUFrQixFQUFFLGtCQUFrQixDQUFDLGtCQUFrQjtRQUN6RCxjQUFjLEVBQUUsa0JBQWtCLENBQUMsY0FBYztLQUNsRCxDQUFBO0FBQ0gsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsdUNBQXVDLENBQUMsU0FBUztJQUN4RCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDZixPQUFPLEVBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFDLENBQUE7SUFDdEMsQ0FBQztJQUVELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDOUIsT0FBTyxTQUFTLENBQUE7SUFDbEIsQ0FBQztJQUVELHFDQUFxQztJQUNyQyxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUE7SUFFckIsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDakMsVUFBVSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUE7UUFDNUIsVUFBVSxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUE7UUFDN0IsVUFBVSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUE7UUFDMUIsVUFBVSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUE7UUFDM0IsVUFBVSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUE7UUFFNUIsT0FBTyxVQUFVLENBQUE7SUFDbkIsQ0FBQztJQUVELElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFBRSxVQUFVLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQTtJQUM5RCxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO1FBQUUsVUFBVSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUE7SUFDakUsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDL0IsVUFBVSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUE7UUFDeEIsVUFBVSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUE7SUFDM0IsQ0FBQztJQUNELElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFBRSxVQUFVLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQTtJQUU5RCxPQUFPLFVBQVUsQ0FBQTtBQUNuQixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxzQ0FBc0MsQ0FBQyxxQkFBcUI7SUFDbkUsTUFBTSx5QkFBeUIsR0FBRyxxQkFBcUIsQ0FBQyx5QkFBeUIsQ0FBQTtJQUNqRixNQUFNLHFCQUFxQixHQUFHLHFCQUFxQixDQUFDLHFCQUFxQixDQUFBO0lBQ3pFLE1BQU0sd0JBQXdCLEdBQUcscUJBQXFCLENBQUMsa0JBQWtCLENBQUE7SUFDekUsTUFBTSxvQkFBb0IsR0FBRyxxQkFBcUIsQ0FBQyxjQUFjLENBQUE7SUFDakUsTUFBTSxtQ0FBbUMsR0FBRyxxQ0FBcUMsQ0FBQztRQUNoRixlQUFlLEVBQUU7WUFDZixNQUFNLEVBQUUsUUFBUTtZQUNoQixLQUFLLEVBQUUsT0FBTztTQUNmO1FBQ0QsY0FBYyxFQUFFLHlCQUF5QjtRQUN6QyxTQUFTLEVBQUUsbUJBQW1CO0tBQy9CLENBQUMsQ0FBQTtJQUNGLE1BQU0sK0JBQStCLEdBQUcscUNBQXFDLENBQUM7UUFDNUUsZUFBZSxFQUFFO1lBQ2YsTUFBTSxFQUFFLFFBQVE7WUFDaEIsT0FBTyxFQUFFLFNBQVM7WUFDbEIsUUFBUSxFQUFFLFVBQVU7WUFDcEIsSUFBSSxFQUFFLE1BQU07WUFDWixNQUFNLEVBQUUsUUFBUTtZQUNoQixHQUFHLEVBQUUsS0FBSztTQUNYO1FBQ0QsY0FBYyxFQUFFLHFCQUFxQjtRQUNyQyxTQUFTLEVBQUUsZUFBZTtLQUMzQixDQUFDLENBQUE7SUFFRixPQUFPO1FBQ0wseUJBQXlCLEVBQUUsbUNBQW1DO1FBQzlELHFCQUFxQixFQUFFLCtCQUErQjtRQUN0RCxrQkFBa0IsRUFBRSxvQ0FBb0MsQ0FBQyxFQUFDLGNBQWMsRUFBRSx3QkFBd0IsRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUMsQ0FBQztRQUNwSSxjQUFjLEVBQUUsb0NBQW9DLENBQUMsRUFBQyxjQUFjLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBQyxDQUFDO0tBQ3pILENBQUE7QUFDSCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyxxQ0FBcUMsQ0FBQyxFQUFDLGVBQWUsRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFDO0lBQ3pGLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNwQixPQUFPLGVBQWUsQ0FBQTtJQUN4QixDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7UUFDbEMscUNBQXFDO1FBQ3JDLE1BQU0sa0JBQWtCLEdBQUcsRUFBRSxDQUFBO1FBRTdCLEtBQUssTUFBTSxXQUFXLElBQUksY0FBYyxFQUFFLENBQUM7WUFDekMsTUFBTSxrQkFBa0IsR0FBRyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUE7WUFFdkQsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLFdBQVcsU0FBUyxTQUFTLEVBQUUsQ0FBQyxDQUFBO1lBQzlGLENBQUM7WUFFRCxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsR0FBRyx3Q0FBd0MsQ0FBQztnQkFDekUsV0FBVyxFQUFFLGtCQUFrQjtnQkFDL0IsV0FBVyxFQUFFLGtCQUFrQjtnQkFDL0IsU0FBUzthQUNWLENBQUMsQ0FBQTtRQUNKLENBQUM7UUFFRCxPQUFPLGtCQUFrQixDQUFBO0lBQzNCLENBQUM7SUFFRCxxQ0FBcUM7SUFDckMsTUFBTSxrQkFBa0IsR0FBRyxFQUFFLENBQUE7SUFFN0IsS0FBSyxNQUFNLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztRQUN4RSxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsV0FBVyxTQUFTLFNBQVMsRUFBRSxDQUFDLENBQUE7UUFDOUYsQ0FBQztRQUVELGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxHQUFHLHdDQUF3QyxDQUFDO1lBQ3pFLFdBQVc7WUFDWCxXQUFXLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxXQUFXLENBQUM7WUFDaEQsU0FBUztTQUNWLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxPQUFPLGtCQUFrQixDQUFBO0FBQzNCLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsb0NBQW9DLENBQUMsRUFBQyxjQUFjLEVBQUUsU0FBUyxFQUFDO0lBQ3ZFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNwQixPQUFPLEVBQUUsQ0FBQTtJQUNYLENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztRQUNsQyxxQ0FBcUM7UUFDckMsTUFBTSxrQkFBa0IsR0FBRyxFQUFFLENBQUE7UUFFN0IsS0FBSyxNQUFNLFdBQVcsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUN6QyxNQUFNLG9CQUFvQixHQUFHLHdDQUF3QyxDQUFDO2dCQUNwRSxXQUFXO2dCQUNYLFdBQVcsRUFBRSxXQUFXO2dCQUN4QixTQUFTO2FBQ1YsQ0FBQyxDQUFBO1lBRUYsa0JBQWtCLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLG9CQUFvQixDQUFBO1FBQzVGLENBQUM7UUFFRCxPQUFPLGtCQUFrQixDQUFBO0lBQzNCLENBQUM7SUFFRCxxQ0FBcUM7SUFDckMsTUFBTSxrQkFBa0IsR0FBRyxFQUFFLENBQUE7SUFFN0IsS0FBSyxNQUFNLFVBQVUsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7UUFDckQsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBRTlDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxHQUFHLHdDQUF3QyxDQUFDO1lBQ3hFLFdBQVc7WUFDWCxXQUFXLEVBQUUsV0FBVztZQUN4QixTQUFTO1NBQ1YsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELE9BQU8sa0JBQWtCLENBQUE7QUFDM0IsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUseUJBQXlCLENBQUMsU0FBUyxFQUFFLGtCQUFrQjtJQUNyRSxNQUFNLHFCQUFxQixHQUFHLGdEQUFnRCxDQUFDLGtCQUFrQixDQUFDLENBQUE7SUFFbEcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxrREFBa0QsU0FBUyxFQUFFLENBQUMsQ0FBQTtJQUNoRixDQUFDO0lBRUQsT0FBTyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO0FBQzNGLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsNkJBQTZCLENBQUMsRUFBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFDO0lBQ3hGLE1BQU0scUJBQXFCLEdBQUcsZ0RBQWdELENBQUMsa0JBQWtCLENBQUMsQ0FBQTtJQUVsRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLGtEQUFrRCxTQUFTLEVBQUUsQ0FBQyxDQUFBO0lBQ2hGLENBQUM7SUFFRCxLQUFLLE1BQU0sQ0FBQyxNQUFNLEVBQUUscUJBQXFCLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQzNELEdBQUcscUJBQXFCLENBQUMseUJBQXlCO1FBQ2xELEdBQUcscUJBQXFCLENBQUMscUJBQXFCO0tBQy9DLENBQUMsRUFBRSxDQUFDO1FBQ0gsSUFBSSxxQkFBcUIsS0FBSyxTQUFTO1lBQUUsU0FBUTtRQUVqRCxNQUFNLG9CQUFvQixHQUFHLHdDQUF3QyxDQUFDO1lBQ3BFLFdBQVcsRUFBRSxxQkFBcUI7WUFDbEMsV0FBVyxFQUFFLGlHQUFpRyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQ3ZILFNBQVM7U0FDVixDQUFDLENBQUE7UUFFRixJQUFJLFdBQVcsS0FBSyxvQkFBb0IsRUFBRSxDQUFDO1lBQ3pDLE9BQU8saUdBQWlHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNuSCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGlDQUFpQyxDQUFDLEVBQUMsZUFBZSxFQUFFLFdBQVcsRUFBQztJQUM5RSxNQUFNLHFCQUFxQixHQUFHLDBDQUEwQyxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBRXJGLEtBQUssTUFBTSxjQUFjLElBQUksZUFBZSxFQUFFLENBQUM7UUFDN0MsTUFBTSxTQUFTLEdBQUcsdUNBQXVDLENBQUMsY0FBYyxDQUFDLENBQUE7UUFFekUsS0FBSyxNQUFNLFNBQVMsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNsQyxNQUFNLGtCQUFrQixHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQTtZQUMvQyxNQUFNLHFCQUFxQixHQUFHLGdEQUFnRCxDQUFDLGtCQUFrQixDQUFDLENBQUE7WUFFbEcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7Z0JBQzNCLFNBQVE7WUFDVixDQUFDO1lBRUQsTUFBTSxZQUFZLEdBQUcsMENBQTBDLENBQUMseUJBQXlCLENBQUMsU0FBUyxFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQTtZQUN6SCxNQUFNLGNBQWMsR0FBRyxHQUFHLFlBQVksR0FBRyxDQUFBO1lBRXpDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztnQkFDdEQsU0FBUTtZQUNWLENBQUM7WUFFRCxNQUFNLFlBQVksR0FBRyxxQkFBcUI7aUJBQ3ZDLEtBQUssQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO2lCQUM1QixLQUFLLENBQUMsR0FBRyxDQUFDO2lCQUNWLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUVsQixJQUFJLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLE1BQU0sd0JBQXdCLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxrQkFBa0IsQ0FBQztxQkFDdEYsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxXQUFXLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7Z0JBRTdELElBQUksd0JBQXdCLEVBQUUsQ0FBQztvQkFDN0IsT0FBTzt3QkFDTCxXQUFXLEVBQUUsd0JBQXdCLENBQUMsQ0FBQyxDQUFDO3dCQUN4QyxVQUFVLEVBQUUsd0JBQXdCLENBQUMsQ0FBQyxDQUFDO3dCQUN2QyxTQUFTO3dCQUNULFlBQVk7d0JBQ1osS0FBSyxFQUFFLFlBQVk7cUJBQ3BCLENBQUE7Z0JBQ0gsQ0FBQztZQUNILENBQUM7WUFFRCxJQUFJLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxjQUFjLENBQUM7cUJBQzlFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxFQUFFLENBQUMsV0FBVyxLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUU3RCxJQUFJLG9CQUFvQixFQUFFLENBQUM7b0JBQ3pCLE9BQU87d0JBQ0wsV0FBVyxFQUFFLG9CQUFvQixDQUFDLENBQUMsQ0FBQzt3QkFDcEMsUUFBUSxFQUFFLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDN0MsVUFBVSxFQUFFLG9CQUFvQixDQUFDLENBQUMsQ0FBQzt3QkFDbkMsU0FBUzt3QkFDVCxZQUFZO3dCQUNaLEtBQUssRUFBRSxRQUFRO3FCQUNoQixDQUFBO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQTtBQUNiLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLDBDQUEwQyxDQUFDLElBQUk7SUFDdEQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUE7SUFFakUsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDaEMsT0FBTyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQzdDLENBQUM7SUFFRCxPQUFPLGdCQUFnQixDQUFBO0FBQ3pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0ICogYXMgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiXG5pbXBvcnQgRnJvbnRlbmRNb2RlbEJhc2VSZXNvdXJjZSBmcm9tIFwiLi4vZnJvbnRlbmQtbW9kZWwtcmVzb3VyY2UvYmFzZS1yZXNvdXJjZS5qc1wiXG5pbXBvcnQgcmVzdEFyZ3NFcnJvciBmcm9tIFwiLi4vdXRpbHMvcmVzdC1hcmdzLWVycm9yLmpzXCJcbmltcG9ydCB7dmFsaWRhdGVGcm9udGVuZE1vZGVsUmVzb3VyY2VDb21tYW5kTmFtZX0gZnJvbSBcIi4vcmVzb3VyY2UtY29uZmlnLXZhbGlkYXRpb24uanNcIlxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5CYWNrZW5kUHJvamVjdENvbmZpZ3VyYXRpb259IGJhY2tlbmRQcm9qZWN0IC0gQmFja2VuZCBwcm9qZWN0IGNvbmZpZy5cbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCB0eXBlb2YgRnJvbnRlbmRNb2RlbEJhc2VSZXNvdXJjZT59IC0gUmVzb3VyY2UgZGVmaW5pdGlvbnMga2V5ZWQgYnkgbW9kZWwgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb250ZW5kTW9kZWxSZXNvdXJjZXNGb3JCYWNrZW5kUHJvamVjdChiYWNrZW5kUHJvamVjdCkge1xuICBjb25zdCByZXNvdXJjZXMgPSBiYWNrZW5kUHJvamVjdC5mcm9udGVuZE1vZGVsc1xuXG4gIGlmIChyZXNvdXJjZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICghcmVzb3VyY2VzIHx8IHR5cGVvZiByZXNvdXJjZXMgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYmFja2VuZCBwcm9qZWN0IGZyb250ZW5kTW9kZWxzIG9iamVjdCBidXQgZ290OiAke3Jlc291cmNlc31gKVxuICAgIH1cblxuICAgIHJldHVybiByZXNvdXJjZXNcbiAgfVxuXG4gIHJldHVybiB7fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBDYW5kaWRhdGUgcmVzb3VyY2UgZGVmaW5pdGlvbi5cbiAqIEByZXR1cm5zIHt2YWx1ZSBpcyB0eXBlb2YgRnJvbnRlbmRNb2RlbEJhc2VSZXNvdXJjZX0gLSBXaGV0aGVyIHZhbHVlIGlzIGEgcmVzb3VyY2UgY2xhc3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9udGVuZE1vZGVsUmVzb3VyY2VEZWZpbml0aW9uSXNDbGFzcyh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIgJiYgKHZhbHVlID09PSBGcm9udGVuZE1vZGVsQmFzZVJlc291cmNlIHx8IHZhbHVlLnByb3RvdHlwZSBpbnN0YW5jZW9mIEZyb250ZW5kTW9kZWxCYXNlUmVzb3VyY2UpXG59XG5cbi8qKlxuICogQHBhcmFtIHt1bmtub3dufSByZXNvdXJjZURlZmluaXRpb24gLSBSZXNvdXJjZSBkZWZpbml0aW9uLlxuICogQHJldHVybnMge3R5cGVvZiBGcm9udGVuZE1vZGVsQmFzZVJlc291cmNlIHwgbnVsbH0gLSBSZXNvdXJjZSBjbGFzcyB3aGVuIGRlZmluaXRpb24gaXMgY2xhc3MtYmFzZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9udGVuZE1vZGVsUmVzb3VyY2VDbGFzc0Zyb21EZWZpbml0aW9uKHJlc291cmNlRGVmaW5pdGlvbikge1xuICByZXR1cm4gZnJvbnRlbmRNb2RlbFJlc291cmNlRGVmaW5pdGlvbklzQ2xhc3MocmVzb3VyY2VEZWZpbml0aW9uKSA/IHJlc291cmNlRGVmaW5pdGlvbiA6IG51bGxcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3Vua25vd259IHJlc291cmNlRGVmaW5pdGlvbiAtIFJlc291cmNlIGRlZmluaXRpb24uXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Ob3JtYWxpemVkRnJvbnRlbmRNb2RlbFJlc291cmNlQ29uZmlndXJhdGlvbiB8IG51bGx9IC0gTm9ybWFsaXplZCByZXNvdXJjZSBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbnRlbmRNb2RlbFJlc291cmNlQ29uZmlndXJhdGlvbkZyb21EZWZpbml0aW9uKHJlc291cmNlRGVmaW5pdGlvbikge1xuICBpZiAoIWZyb250ZW5kTW9kZWxSZXNvdXJjZURlZmluaXRpb25Jc0NsYXNzKHJlc291cmNlRGVmaW5pdGlvbikpIHJldHVybiBudWxsXG5cbiAgcmV0dXJuIG5vcm1hbGl6ZUZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZ3VyYXRpb24ocmVzb3VyY2VEZWZpbml0aW9uLnJlc291cmNlQ29uZmlnKCkpXG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZ3VyYXRpb259IHJlc291cmNlQ29uZmlndXJhdGlvbiAtIFJhdyByZXNvdXJjZSBjb25maWd1cmF0aW9uLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuTm9ybWFsaXplZEZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZ3VyYXRpb259IC0gTm9ybWFsaXplZCByZXNvdXJjZSBjb25maWd1cmF0aW9uLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVGcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWd1cmF0aW9uKHJlc291cmNlQ29uZmlndXJhdGlvbikge1xuICBjb25zdCByZXN0QXJncyA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgYW55Pn0gKi8gKHsuLi5yZXNvdXJjZUNvbmZpZ3VyYXRpb259KVxuXG4gIGZvciAoY29uc3Qga2V5IG9mIFtcbiAgICBcImFiaWxpdGllc1wiLFxuICAgIFwiYXR0cmlidXRlc1wiLFxuICAgIFwiYXR0YWNobWVudHNcIixcbiAgICBcImJ1aWx0SW5Db2xsZWN0aW9uQ29tbWFuZHNcIixcbiAgICBcImJ1aWx0SW5NZW1iZXJDb21tYW5kc1wiLFxuICAgIFwiY29sbGVjdGlvbkNvbW1hbmRzXCIsXG4gICAgXCJjb21tYW5kc1wiLFxuICAgIFwibWVtYmVyQ29tbWFuZHNcIixcbiAgICBcIm1vZGVsTmFtZVwiLFxuICAgIFwicHJpbWFyeUtleVwiLFxuICAgIFwicmVsYXRpb25zaGlwc1wiLFxuICAgIFwic2VydmVyXCJcbiAgXSkge1xuICAgIGRlbGV0ZSByZXN0QXJnc1trZXldXG4gIH1cblxuICByZXN0QXJnc0Vycm9yKHJlc3RBcmdzKVxuXG4gIGNvbnN0IG5vcm1hbGl6ZWRDb21tYW5kcyA9IG5vcm1hbGl6ZUZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbW1hbmRzKHJlc291cmNlQ29uZmlndXJhdGlvbilcblxuICByZXR1cm4ge1xuICAgIC4uLnJlc291cmNlQ29uZmlndXJhdGlvbixcbiAgICBhYmlsaXRpZXM6IG5vcm1hbGl6ZUZyb250ZW5kTW9kZWxSZXNvdXJjZUFiaWxpdGllcyhyZXNvdXJjZUNvbmZpZ3VyYXRpb24uYWJpbGl0aWVzKSxcbiAgICBidWlsdEluQ29sbGVjdGlvbkNvbW1hbmRzOiBub3JtYWxpemVkQ29tbWFuZHMuYnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kcyxcbiAgICBidWlsdEluTWVtYmVyQ29tbWFuZHM6IG5vcm1hbGl6ZWRDb21tYW5kcy5idWlsdEluTWVtYmVyQ29tbWFuZHMsXG4gICAgY29sbGVjdGlvbkNvbW1hbmRzOiBub3JtYWxpemVkQ29tbWFuZHMuY29sbGVjdGlvbkNvbW1hbmRzLFxuICAgIG1lbWJlckNvbW1hbmRzOiBub3JtYWxpemVkQ29tbWFuZHMubWVtYmVyQ29tbWFuZHNcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkfSBhYmlsaXRpZXMgLSBSZXNvdXJjZSBhYmlsaXRpZXMgY29uZmlnLlxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IC0gTm9ybWFsaXplZCBhYmlsaXRpZXMgY29uZmlnLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVGcm9udGVuZE1vZGVsUmVzb3VyY2VBYmlsaXRpZXMoYWJpbGl0aWVzKSB7XG4gIGlmICghYWJpbGl0aWVzKSB7XG4gICAgcmV0dXJuIHtmaW5kOiBcInJlYWRcIiwgaW5kZXg6IFwicmVhZFwifVxuICB9XG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KGFiaWxpdGllcykpIHtcbiAgICByZXR1cm4gYWJpbGl0aWVzXG4gIH1cblxuICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHN0cmluZz59ICovXG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSB7fVxuXG4gIGlmIChhYmlsaXRpZXMuaW5jbHVkZXMoXCJtYW5hZ2VcIikpIHtcbiAgICBub3JtYWxpemVkLmNyZWF0ZSA9IFwibWFuYWdlXCJcbiAgICBub3JtYWxpemVkLmRlc3Ryb3kgPSBcIm1hbmFnZVwiXG4gICAgbm9ybWFsaXplZC5maW5kID0gXCJtYW5hZ2VcIlxuICAgIG5vcm1hbGl6ZWQuaW5kZXggPSBcIm1hbmFnZVwiXG4gICAgbm9ybWFsaXplZC51cGRhdGUgPSBcIm1hbmFnZVwiXG5cbiAgICByZXR1cm4gbm9ybWFsaXplZFxuICB9XG5cbiAgaWYgKGFiaWxpdGllcy5pbmNsdWRlcyhcImNyZWF0ZVwiKSkgbm9ybWFsaXplZC5jcmVhdGUgPSBcImNyZWF0ZVwiXG4gIGlmIChhYmlsaXRpZXMuaW5jbHVkZXMoXCJkZXN0cm95XCIpKSBub3JtYWxpemVkLmRlc3Ryb3kgPSBcImRlc3Ryb3lcIlxuICBpZiAoYWJpbGl0aWVzLmluY2x1ZGVzKFwicmVhZFwiKSkge1xuICAgIG5vcm1hbGl6ZWQuZmluZCA9IFwicmVhZFwiXG4gICAgbm9ybWFsaXplZC5pbmRleCA9IFwicmVhZFwiXG4gIH1cbiAgaWYgKGFiaWxpdGllcy5pbmNsdWRlcyhcInVwZGF0ZVwiKSkgbm9ybWFsaXplZC51cGRhdGUgPSBcInVwZGF0ZVwiXG5cbiAgcmV0dXJuIG5vcm1hbGl6ZWRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuRnJvbnRlbmRNb2RlbFJlc291cmNlQ29uZmlndXJhdGlvbn0gcmVzb3VyY2VDb25maWd1cmF0aW9uIC0gUmF3IHJlc291cmNlIGNvbmZpZ3VyYXRpb24uXG4gKiBAcmV0dXJucyB7e2J1aWx0SW5Db2xsZWN0aW9uQ29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIGJ1aWx0SW5NZW1iZXJDb21tYW5kczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgY29sbGVjdGlvbkNvbW1hbmRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBtZW1iZXJDb21tYW5kczogUmVjb3JkPHN0cmluZywgc3RyaW5nPn19IC0gTm9ybWFsaXplZCBjb21tYW5kIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbW1hbmRzKHJlc291cmNlQ29uZmlndXJhdGlvbikge1xuICBjb25zdCBidWlsdEluQ29sbGVjdGlvbkNvbW1hbmRzID0gcmVzb3VyY2VDb25maWd1cmF0aW9uLmJ1aWx0SW5Db2xsZWN0aW9uQ29tbWFuZHNcbiAgY29uc3QgYnVpbHRJbk1lbWJlckNvbW1hbmRzID0gcmVzb3VyY2VDb25maWd1cmF0aW9uLmJ1aWx0SW5NZW1iZXJDb21tYW5kc1xuICBjb25zdCBjdXN0b21Db2xsZWN0aW9uQ29tbWFuZHMgPSByZXNvdXJjZUNvbmZpZ3VyYXRpb24uY29sbGVjdGlvbkNvbW1hbmRzXG4gIGNvbnN0IGN1c3RvbU1lbWJlckNvbW1hbmRzID0gcmVzb3VyY2VDb25maWd1cmF0aW9uLm1lbWJlckNvbW1hbmRzXG4gIGNvbnN0IG5vcm1hbGl6ZWRCdWlsdEluQ29sbGVjdGlvbkNvbW1hbmRzID0gbm9ybWFsaXplRnJvbnRlbmRNb2RlbEJ1aWx0SW5Db21tYW5kcyh7XG4gICAgY29tbWFuZERlZmF1bHRzOiB7XG4gICAgICBjcmVhdGU6IFwiY3JlYXRlXCIsXG4gICAgICBpbmRleDogXCJpbmRleFwiXG4gICAgfSxcbiAgICBjb21tYW5kc0NvbmZpZzogYnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kcyxcbiAgICBtb2RlbE5hbWU6IFwiQ29sbGVjdGlvbkNvbW1hbmRcIlxuICB9KVxuICBjb25zdCBub3JtYWxpemVkQnVpbHRJbk1lbWJlckNvbW1hbmRzID0gbm9ybWFsaXplRnJvbnRlbmRNb2RlbEJ1aWx0SW5Db21tYW5kcyh7XG4gICAgY29tbWFuZERlZmF1bHRzOiB7XG4gICAgICBhdHRhY2g6IFwiYXR0YWNoXCIsXG4gICAgICBkZXN0cm95OiBcImRlc3Ryb3lcIixcbiAgICAgIGRvd25sb2FkOiBcImRvd25sb2FkXCIsXG4gICAgICBmaW5kOiBcImZpbmRcIixcbiAgICAgIHVwZGF0ZTogXCJ1cGRhdGVcIixcbiAgICAgIHVybDogXCJ1cmxcIlxuICAgIH0sXG4gICAgY29tbWFuZHNDb25maWc6IGJ1aWx0SW5NZW1iZXJDb21tYW5kcyxcbiAgICBtb2RlbE5hbWU6IFwiTWVtYmVyQ29tbWFuZFwiXG4gIH0pXG5cbiAgcmV0dXJuIHtcbiAgICBidWlsdEluQ29sbGVjdGlvbkNvbW1hbmRzOiBub3JtYWxpemVkQnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kcyxcbiAgICBidWlsdEluTWVtYmVyQ29tbWFuZHM6IG5vcm1hbGl6ZWRCdWlsdEluTWVtYmVyQ29tbWFuZHMsXG4gICAgY29sbGVjdGlvbkNvbW1hbmRzOiBub3JtYWxpemVGcm9udGVuZE1vZGVsQ3VzdG9tQ29tbWFuZHMoe2NvbW1hbmRzQ29uZmlnOiBjdXN0b21Db2xsZWN0aW9uQ29tbWFuZHMsIG1vZGVsTmFtZTogXCJDb2xsZWN0aW9uQ29tbWFuZFwifSksXG4gICAgbWVtYmVyQ29tbWFuZHM6IG5vcm1hbGl6ZUZyb250ZW5kTW9kZWxDdXN0b21Db21tYW5kcyh7Y29tbWFuZHNDb25maWc6IGN1c3RvbU1lbWJlckNvbW1hbmRzLCBtb2RlbE5hbWU6IFwiTWVtYmVyQ29tbWFuZFwifSlcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBhcmdzLmNvbW1hbmREZWZhdWx0cyAtIEJ1aWx0LWluIGRlZmF1bHQgY29tbWFuZCBuYW1lcy5cbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkfSBhcmdzLmNvbW1hbmRzQ29uZmlnIC0gQnVpbHQtaW4gY29tbWFuZHMgY29uZmlnLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubW9kZWxOYW1lIC0gRGlhZ25vc3RpYyBtb2RlbCBuYW1lLlxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IC0gTm9ybWFsaXplZCBidWlsdC1pbiBjb21tYW5kIGNvbmZpZy5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRnJvbnRlbmRNb2RlbEJ1aWx0SW5Db21tYW5kcyh7Y29tbWFuZERlZmF1bHRzLCBjb21tYW5kc0NvbmZpZywgbW9kZWxOYW1lfSkge1xuICBpZiAoIWNvbW1hbmRzQ29uZmlnKSB7XG4gICAgcmV0dXJuIGNvbW1hbmREZWZhdWx0c1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoY29tbWFuZHNDb25maWcpKSB7XG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRDb21tYW5kcyA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IGNvbW1hbmRUeXBlIG9mIGNvbW1hbmRzQ29uZmlnKSB7XG4gICAgICBjb25zdCBkZWZhdWx0Q29tbWFuZE5hbWUgPSBjb21tYW5kRGVmYXVsdHNbY29tbWFuZFR5cGVdXG5cbiAgICAgIGlmICghZGVmYXVsdENvbW1hbmROYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBidWlsdC1pbiBmcm9udGVuZCBtb2RlbCBjb21tYW5kICcke2NvbW1hbmRUeXBlfScgZm9yICR7bW9kZWxOYW1lfWApXG4gICAgICB9XG5cbiAgICAgIG5vcm1hbGl6ZWRDb21tYW5kc1tjb21tYW5kVHlwZV0gPSB2YWxpZGF0ZUZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbW1hbmROYW1lKHtcbiAgICAgICAgY29tbWFuZE5hbWU6IGRlZmF1bHRDb21tYW5kTmFtZSxcbiAgICAgICAgY29tbWFuZFR5cGU6IGRlZmF1bHRDb21tYW5kTmFtZSxcbiAgICAgICAgbW9kZWxOYW1lXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiBub3JtYWxpemVkQ29tbWFuZHNcbiAgfVxuXG4gIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gKi9cbiAgY29uc3Qgbm9ybWFsaXplZENvbW1hbmRzID0ge31cblxuICBmb3IgKGNvbnN0IFtjb21tYW5kVHlwZSwgY29tbWFuZE5hbWVdIG9mIE9iamVjdC5lbnRyaWVzKGNvbW1hbmRzQ29uZmlnKSkge1xuICAgIGlmICghY29tbWFuZERlZmF1bHRzW2NvbW1hbmRUeXBlXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGJ1aWx0LWluIGZyb250ZW5kIG1vZGVsIGNvbW1hbmQgJyR7Y29tbWFuZFR5cGV9JyBmb3IgJHttb2RlbE5hbWV9YClcbiAgICB9XG5cbiAgICBub3JtYWxpemVkQ29tbWFuZHNbY29tbWFuZFR5cGVdID0gdmFsaWRhdGVGcm9udGVuZE1vZGVsUmVzb3VyY2VDb21tYW5kTmFtZSh7XG4gICAgICBjb21tYW5kTmFtZSxcbiAgICAgIGNvbW1hbmRUeXBlOiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGNvbW1hbmRUeXBlKSxcbiAgICAgIG1vZGVsTmFtZVxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gbm9ybWFsaXplZENvbW1hbmRzXG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMuXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZz4gfCBzdHJpbmdbXSB8IHVuZGVmaW5lZH0gYXJncy5jb21tYW5kc0NvbmZpZyAtIEN1c3RvbSBjb21tYW5kcyBjb25maWcuXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5tb2RlbE5hbWUgLSBEaWFnbm9zdGljIG1vZGVsIG5hbWUuXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gLSBOb3JtYWxpemVkIGN1c3RvbSBjb21tYW5kIGNvbmZpZy5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRnJvbnRlbmRNb2RlbEN1c3RvbUNvbW1hbmRzKHtjb21tYW5kc0NvbmZpZywgbW9kZWxOYW1lfSkge1xuICBpZiAoIWNvbW1hbmRzQ29uZmlnKSB7XG4gICAgcmV0dXJuIHt9XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShjb21tYW5kc0NvbmZpZykpIHtcbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHN0cmluZz59ICovXG4gICAgY29uc3Qgbm9ybWFsaXplZENvbW1hbmRzID0ge31cblxuICAgIGZvciAoY29uc3QgY29tbWFuZE5hbWUgb2YgY29tbWFuZHNDb25maWcpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRlZENvbW1hbmROYW1lID0gdmFsaWRhdGVGcm9udGVuZE1vZGVsUmVzb3VyY2VDb21tYW5kTmFtZSh7XG4gICAgICAgIGNvbW1hbmROYW1lLFxuICAgICAgICBjb21tYW5kVHlwZTogY29tbWFuZE5hbWUsXG4gICAgICAgIG1vZGVsTmFtZVxuICAgICAgfSlcblxuICAgICAgbm9ybWFsaXplZENvbW1hbmRzW2luZmxlY3Rpb24uY2FtZWxpemUodmFsaWRhdGVkQ29tbWFuZE5hbWUsIHRydWUpXSA9IHZhbGlkYXRlZENvbW1hbmROYW1lXG4gICAgfVxuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZWRDb21tYW5kc1xuICB9XG5cbiAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICBjb25zdCBub3JtYWxpemVkQ29tbWFuZHMgPSB7fVxuXG4gIGZvciAoY29uc3QgbWV0aG9kTmFtZSBvZiBPYmplY3Qua2V5cyhjb21tYW5kc0NvbmZpZykpIHtcbiAgICBjb25zdCBjb21tYW5kTmFtZSA9IGNvbW1hbmRzQ29uZmlnW21ldGhvZE5hbWVdXG5cbiAgICBub3JtYWxpemVkQ29tbWFuZHNbbWV0aG9kTmFtZV0gPSB2YWxpZGF0ZUZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbW1hbmROYW1lKHtcbiAgICAgIGNvbW1hbmROYW1lLFxuICAgICAgY29tbWFuZFR5cGU6IGNvbW1hbmROYW1lLFxuICAgICAgbW9kZWxOYW1lXG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiBub3JtYWxpemVkQ29tbWFuZHNcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lIC0gTW9kZWwgY2xhc3MgbmFtZS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gcmVzb3VyY2VEZWZpbml0aW9uIC0gUmVzb3VyY2UgZGVmaW5pdGlvbi5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gTm9ybWFsaXplZCByZXNvdXJjZSBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbnRlbmRNb2RlbFJlc291cmNlUGF0aChtb2RlbE5hbWUsIHJlc291cmNlRGVmaW5pdGlvbikge1xuICBjb25zdCByZXNvdXJjZUNvbmZpZ3VyYXRpb24gPSBmcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWd1cmF0aW9uRnJvbURlZmluaXRpb24ocmVzb3VyY2VEZWZpbml0aW9uKVxuXG4gIGlmICghcmVzb3VyY2VDb25maWd1cmF0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGZyb250ZW5kIG1vZGVsIHJlc291cmNlIGRlZmluaXRpb24gZm9yICR7bW9kZWxOYW1lfWApXG4gIH1cblxuICByZXR1cm4gYC8ke2luZmxlY3Rpb24uZGFzaGVyaXplKGluZmxlY3Rpb24ucGx1cmFsaXplKGluZmxlY3Rpb24udW5kZXJzY29yZShtb2RlbE5hbWUpKSl9YFxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuY29tbWFuZE5hbWUgLSBDb21tYW5kIHBhdGggc2VnbWVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLm1vZGVsTmFtZSAtIE1vZGVsIGNsYXNzIG5hbWUuXG4gKiBAcGFyYW0ge3Vua25vd259IGFyZ3MucmVzb3VyY2VEZWZpbml0aW9uIC0gUmVzb3VyY2UgZGVmaW5pdGlvbi5cbiAqIEByZXR1cm5zIHtcImRlc3Ryb3lcIiB8IFwiZmluZFwiIHwgXCJpbmRleFwiIHwgXCJjcmVhdGVcIiB8IFwidXBkYXRlXCIgfCBcImF0dGFjaFwiIHwgXCJkb3dubG9hZFwiIHwgXCJ1cmxcIiB8IG51bGx9IC0gRnJvbnRlbmQgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbnRlbmRNb2RlbEFjdGlvbkZvckNvbW1hbmQoe2NvbW1hbmROYW1lLCBtb2RlbE5hbWUsIHJlc291cmNlRGVmaW5pdGlvbn0pIHtcbiAgY29uc3QgcmVzb3VyY2VDb25maWd1cmF0aW9uID0gZnJvbnRlbmRNb2RlbFJlc291cmNlQ29uZmlndXJhdGlvbkZyb21EZWZpbml0aW9uKHJlc291cmNlRGVmaW5pdGlvbilcblxuICBpZiAoIXJlc291cmNlQ29uZmlndXJhdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBmcm9udGVuZCBtb2RlbCByZXNvdXJjZSBkZWZpbml0aW9uIGZvciAke21vZGVsTmFtZX1gKVxuICB9XG5cbiAgZm9yIChjb25zdCBbYWN0aW9uLCBjb25maWd1cmVkQ29tbWFuZE5hbWVdIG9mIE9iamVjdC5lbnRyaWVzKHtcbiAgICAuLi5yZXNvdXJjZUNvbmZpZ3VyYXRpb24uYnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kcyxcbiAgICAuLi5yZXNvdXJjZUNvbmZpZ3VyYXRpb24uYnVpbHRJbk1lbWJlckNvbW1hbmRzXG4gIH0pKSB7XG4gICAgaWYgKGNvbmZpZ3VyZWRDb21tYW5kTmFtZSA9PT0gdW5kZWZpbmVkKSBjb250aW51ZVxuXG4gICAgY29uc3QgdmFsaWRhdGVkQ29tbWFuZE5hbWUgPSB2YWxpZGF0ZUZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbW1hbmROYW1lKHtcbiAgICAgIGNvbW1hbmROYW1lOiBjb25maWd1cmVkQ29tbWFuZE5hbWUsXG4gICAgICBjb21tYW5kVHlwZTogLyoqIEB0eXBlIHtcImF0dGFjaFwiIHwgXCJjcmVhdGVcIiB8IFwiZGVzdHJveVwiIHwgXCJkb3dubG9hZFwiIHwgXCJmaW5kXCIgfCBcImluZGV4XCIgfCBcInVwZGF0ZVwiIHwgXCJ1cmxcIn0gKi8gKGFjdGlvbiksXG4gICAgICBtb2RlbE5hbWVcbiAgICB9KVxuXG4gICAgaWYgKGNvbW1hbmROYW1lID09PSB2YWxpZGF0ZWRDb21tYW5kTmFtZSkge1xuICAgICAgcmV0dXJuIC8qKiBAdHlwZSB7XCJhdHRhY2hcIiB8IFwiY3JlYXRlXCIgfCBcImRlc3Ryb3lcIiB8IFwiZG93bmxvYWRcIiB8IFwiZmluZFwiIHwgXCJpbmRleFwiIHwgXCJ1cGRhdGVcIiB8IFwidXJsXCJ9ICovIChhY3Rpb24pXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5CYWNrZW5kUHJvamVjdENvbmZpZ3VyYXRpb25bXX0gYXJncy5iYWNrZW5kUHJvamVjdHMgLSBCYWNrZW5kIHByb2plY3RzIHRvIHNjYW4uXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5jdXJyZW50UGF0aCAtIFJlcXVlc3QgcGF0aCB3aXRob3V0IHF1ZXJ5LlxuICogQHJldHVybnMge3tjb21tYW5kTmFtZTogc3RyaW5nLCBtZW1iZXJJZD86IHN0cmluZywgbWV0aG9kTmFtZTogc3RyaW5nLCBtb2RlbE5hbWU6IHN0cmluZywgcmVzb3VyY2VQYXRoOiBzdHJpbmcsIHNjb3BlOiBcImNvbGxlY3Rpb25cIiB8IFwibWVtYmVyXCJ9IHwgbnVsbH0gLSBNYXRjaGVkIGN1c3RvbSBjb21tYW5kIG1ldGFkYXRhLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbnRlbmRNb2RlbEN1c3RvbUNvbW1hbmRGb3JQYXRoKHtiYWNrZW5kUHJvamVjdHMsIGN1cnJlbnRQYXRofSkge1xuICBjb25zdCBub3JtYWxpemVkQ3VycmVudFBhdGggPSBub3JtYWxpemVGcm9udGVuZE1vZGVsUmVzb3VyY2VQYXRoRm9yTWF0Y2goY3VycmVudFBhdGgpXG5cbiAgZm9yIChjb25zdCBiYWNrZW5kUHJvamVjdCBvZiBiYWNrZW5kUHJvamVjdHMpIHtcbiAgICBjb25zdCByZXNvdXJjZXMgPSBmcm9udGVuZE1vZGVsUmVzb3VyY2VzRm9yQmFja2VuZFByb2plY3QoYmFja2VuZFByb2plY3QpXG5cbiAgICBmb3IgKGNvbnN0IG1vZGVsTmFtZSBpbiByZXNvdXJjZXMpIHtcbiAgICAgIGNvbnN0IHJlc291cmNlRGVmaW5pdGlvbiA9IHJlc291cmNlc1ttb2RlbE5hbWVdXG4gICAgICBjb25zdCByZXNvdXJjZUNvbmZpZ3VyYXRpb24gPSBmcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWd1cmF0aW9uRnJvbURlZmluaXRpb24ocmVzb3VyY2VEZWZpbml0aW9uKVxuXG4gICAgICBpZiAoIXJlc291cmNlQ29uZmlndXJhdGlvbikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCByZXNvdXJjZVBhdGggPSBub3JtYWxpemVGcm9udGVuZE1vZGVsUmVzb3VyY2VQYXRoRm9yTWF0Y2goZnJvbnRlbmRNb2RlbFJlc291cmNlUGF0aChtb2RlbE5hbWUsIHJlc291cmNlRGVmaW5pdGlvbikpXG4gICAgICBjb25zdCBleHBlY3RlZFByZWZpeCA9IGAke3Jlc291cmNlUGF0aH0vYFxuXG4gICAgICBpZiAoIW5vcm1hbGl6ZWRDdXJyZW50UGF0aC5zdGFydHNXaXRoKGV4cGVjdGVkUHJlZml4KSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBwYXRoU2VnbWVudHMgPSBub3JtYWxpemVkQ3VycmVudFBhdGhcbiAgICAgICAgLnNsaWNlKGV4cGVjdGVkUHJlZml4Lmxlbmd0aClcbiAgICAgICAgLnNwbGl0KFwiL1wiKVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG5cbiAgICAgIGlmIChwYXRoU2VnbWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoZWRDb2xsZWN0aW9uQ29tbWFuZCA9IE9iamVjdC5lbnRyaWVzKHJlc291cmNlQ29uZmlndXJhdGlvbi5jb2xsZWN0aW9uQ29tbWFuZHMpXG4gICAgICAgICAgLmZpbmQoKFssIGNvbW1hbmROYW1lXSkgPT4gY29tbWFuZE5hbWUgPT09IHBhdGhTZWdtZW50c1swXSlcblxuICAgICAgICBpZiAobWF0Y2hlZENvbGxlY3Rpb25Db21tYW5kKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbW1hbmROYW1lOiBtYXRjaGVkQ29sbGVjdGlvbkNvbW1hbmRbMV0sXG4gICAgICAgICAgICBtZXRob2ROYW1lOiBtYXRjaGVkQ29sbGVjdGlvbkNvbW1hbmRbMF0sXG4gICAgICAgICAgICBtb2RlbE5hbWUsXG4gICAgICAgICAgICByZXNvdXJjZVBhdGgsXG4gICAgICAgICAgICBzY29wZTogXCJjb2xsZWN0aW9uXCJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHBhdGhTZWdtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlZE1lbWJlckNvbW1hbmQgPSBPYmplY3QuZW50cmllcyhyZXNvdXJjZUNvbmZpZ3VyYXRpb24ubWVtYmVyQ29tbWFuZHMpXG4gICAgICAgICAgLmZpbmQoKFssIGNvbW1hbmROYW1lXSkgPT4gY29tbWFuZE5hbWUgPT09IHBhdGhTZWdtZW50c1sxXSlcblxuICAgICAgICBpZiAobWF0Y2hlZE1lbWJlckNvbW1hbmQpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29tbWFuZE5hbWU6IG1hdGNoZWRNZW1iZXJDb21tYW5kWzFdLFxuICAgICAgICAgICAgbWVtYmVySWQ6IGRlY29kZVVSSUNvbXBvbmVudChwYXRoU2VnbWVudHNbMF0pLFxuICAgICAgICAgICAgbWV0aG9kTmFtZTogbWF0Y2hlZE1lbWJlckNvbW1hbmRbMF0sXG4gICAgICAgICAgICBtb2RlbE5hbWUsXG4gICAgICAgICAgICByZXNvdXJjZVBhdGgsXG4gICAgICAgICAgICBzY29wZTogXCJtZW1iZXJcIlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBQYXRoIHZhbHVlLlxuICogQHJldHVybnMge3N0cmluZ30gLSBOb3JtYWxpemVkIHBhdGggd2l0aCBsZWFkaW5nIHNsYXNoIGFuZCBubyB0cmFpbGluZyBzbGFzaC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRnJvbnRlbmRNb2RlbFJlc291cmNlUGF0aEZvck1hdGNoKHBhdGgpIHtcbiAgY29uc3Qgd2l0aExlYWRpbmdTbGFzaCA9IHBhdGguc3RhcnRzV2l0aChcIi9cIikgPyBwYXRoIDogYC8ke3BhdGh9YFxuXG4gIGlmICh3aXRoTGVhZGluZ1NsYXNoLmxlbmd0aCA+IDEpIHtcbiAgICByZXR1cm4gd2l0aExlYWRpbmdTbGFzaC5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpXG4gIH1cblxuICByZXR1cm4gd2l0aExlYWRpbmdTbGFzaFxufVxuIl19
308
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtZGVmaW5pdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mcm9udGVuZC1tb2RlbHMvcmVzb3VyY2UtZGVmaW5pdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxLQUFLLFVBQVUsTUFBTSxZQUFZLENBQUE7QUFDeEMsT0FBTyx5QkFBeUIsTUFBTSw2Q0FBNkMsQ0FBQTtBQUNuRixPQUFPLGFBQWEsTUFBTSw2QkFBNkIsQ0FBQTtBQUN2RCxPQUFPLEVBQUMsd0NBQXdDLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQTtBQUV4Rjs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsdUNBQXVDLENBQUMsY0FBYztJQUNwRSxNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUMsY0FBYyxDQUFBO0lBRS9DLElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxTQUFTLElBQUksT0FBTyxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDaEQsTUFBTSxJQUFJLEtBQUssQ0FBQywyREFBMkQsU0FBUyxFQUFFLENBQUMsQ0FBQTtRQUN6RixDQUFDO1FBRUQsT0FBTyxTQUFTLENBQUE7SUFDbEIsQ0FBQztJQUVELE9BQU8sRUFBRSxDQUFBO0FBQ1gsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxzQ0FBc0MsQ0FBQyxLQUFLO0lBQzFELE9BQU8sT0FBTyxLQUFLLEtBQUssVUFBVSxJQUFJLENBQUMsS0FBSyxLQUFLLHlCQUF5QixJQUFJLEtBQUssQ0FBQyxTQUFTLFlBQVkseUJBQXlCLENBQUMsQ0FBQTtBQUNySSxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLHdDQUF3QyxDQUFDLGtCQUFrQjtJQUN6RSxPQUFPLHNDQUFzQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7QUFDL0Ys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Q0FBQyxDQUFDO3dCQUNwQyxRQUFRLEVBQUUsa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUM3QyxVQUFVLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO3dCQUNuQyxTQUFTO3dCQUNULFlBQVk7d0JBQ1osS0FBSyxFQUFFLFFBQVE7cUJBQ2hCLENBQUE7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsMENBQTBDLENBQUMsSUFBSTtJQUN0RCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQTtJQUVqRSxJQUFJLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNoQyxPQUFPLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFDN0MsQ0FBQztJQUVELE9BQU8sZ0JBQWdCLENBQUE7QUFDekIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcbmltcG9ydCBGcm9udGVuZE1vZGVsQmFzZVJlc291cmNlIGZyb20gXCIuLi9mcm9udGVuZC1tb2RlbC1yZXNvdXJjZS9iYXNlLXJlc291cmNlLmpzXCJcbmltcG9ydCByZXN0QXJnc0Vycm9yIGZyb20gXCIuLi91dGlscy9yZXN0LWFyZ3MtZXJyb3IuanNcIlxuaW1wb3J0IHt2YWxpZGF0ZUZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbW1hbmROYW1lfSBmcm9tIFwiLi9yZXNvdXJjZS1jb25maWctdmFsaWRhdGlvbi5qc1wiXG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkJhY2tlbmRQcm9qZWN0Q29uZmlndXJhdGlvbn0gYmFja2VuZFByb2plY3QgLSBCYWNrZW5kIHByb2plY3QgY29uZmlnLlxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHR5cGVvZiBGcm9udGVuZE1vZGVsQmFzZVJlc291cmNlPn0gLSBSZXNvdXJjZSBkZWZpbml0aW9ucyBrZXllZCBieSBtb2RlbCBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbnRlbmRNb2RlbFJlc291cmNlc0ZvckJhY2tlbmRQcm9qZWN0KGJhY2tlbmRQcm9qZWN0KSB7XG4gIGNvbnN0IHJlc291cmNlcyA9IGJhY2tlbmRQcm9qZWN0LmZyb250ZW5kTW9kZWxzXG5cbiAgaWYgKHJlc291cmNlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFyZXNvdXJjZXMgfHwgdHlwZW9mIHJlc291cmNlcyAhPT0gXCJvYmplY3RcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBiYWNrZW5kIHByb2plY3QgZnJvbnRlbmRNb2RlbHMgb2JqZWN0IGJ1dCBnb3Q6ICR7cmVzb3VyY2VzfWApXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc291cmNlc1xuICB9XG5cbiAgcmV0dXJuIHt9XG59XG5cbi8qKlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIENhbmRpZGF0ZSByZXNvdXJjZSBkZWZpbml0aW9uLlxuICogQHJldHVybnMge3ZhbHVlIGlzIHR5cGVvZiBGcm9udGVuZE1vZGVsQmFzZVJlc291cmNlfSAtIFdoZXRoZXIgdmFsdWUgaXMgYSByZXNvdXJjZSBjbGFzcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb250ZW5kTW9kZWxSZXNvdXJjZURlZmluaXRpb25Jc0NsYXNzKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIiAmJiAodmFsdWUgPT09IEZyb250ZW5kTW9kZWxCYXNlUmVzb3VyY2UgfHwgdmFsdWUucHJvdG90eXBlIGluc3RhbmNlb2YgRnJvbnRlbmRNb2RlbEJhc2VSZXNvdXJjZSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3Vua25vd259IHJlc291cmNlRGVmaW5pdGlvbiAtIFJlc291cmNlIGRlZmluaXRpb24uXG4gKiBAcmV0dXJucyB7dHlwZW9mIEZyb250ZW5kTW9kZWxCYXNlUmVzb3VyY2UgfCBudWxsfSAtIFJlc291cmNlIGNsYXNzIHdoZW4gZGVmaW5pdGlvbiBpcyBjbGFzcy1iYXNlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb250ZW5kTW9kZWxSZXNvdXJjZUNsYXNzRnJvbURlZmluaXRpb24ocmVzb3VyY2VEZWZpbml0aW9uKSB7XG4gIHJldHVybiBmcm9udGVuZE1vZGVsUmVzb3VyY2VEZWZpbml0aW9uSXNDbGFzcyhyZXNvdXJjZURlZmluaXRpb24pID8gcmVzb3VyY2VEZWZpbml0aW9uIDogbnVsbFxufVxuXG4vKipcbiAqIEBwYXJhbSB7dW5rbm93bn0gcmVzb3VyY2VEZWZpbml0aW9uIC0gUmVzb3VyY2UgZGVmaW5pdGlvbi5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLk5vcm1hbGl6ZWRGcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWd1cmF0aW9uIHwgbnVsbH0gLSBOb3JtYWxpemVkIHJlc291cmNlIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWd1cmF0aW9uRnJvbURlZmluaXRpb24ocmVzb3VyY2VEZWZpbml0aW9uKSB7XG4gIGlmICghZnJvbnRlbmRNb2RlbFJlc291cmNlRGVmaW5pdGlvbklzQ2xhc3MocmVzb3VyY2VEZWZpbml0aW9uKSkgcmV0dXJuIG51bGxcblxuICByZXR1cm4gbm9ybWFsaXplRnJvbnRlbmRNb2RlbFJlc291cmNlQ29uZmlndXJhdGlvbihyZXNvdXJjZURlZmluaXRpb24ucmVzb3VyY2VDb25maWcoKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuRnJvbnRlbmRNb2RlbFJlc291cmNlQ29uZmlndXJhdGlvbn0gcmVzb3VyY2VDb25maWd1cmF0aW9uIC0gUmF3IHJlc291cmNlIGNvbmZpZ3VyYXRpb24uXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Ob3JtYWxpemVkRnJvbnRlbmRNb2RlbFJlc291cmNlQ29uZmlndXJhdGlvbn0gLSBOb3JtYWxpemVkIHJlc291cmNlIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZ3VyYXRpb24ocmVzb3VyY2VDb25maWd1cmF0aW9uKSB7XG4gIGNvbnN0IHJlc3RBcmdzID0gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSAqLyAoey4uLnJlc291cmNlQ29uZmlndXJhdGlvbn0pXG5cbiAgZm9yIChjb25zdCBrZXkgb2YgW1xuICAgIFwiYWJpbGl0aWVzXCIsXG4gICAgXCJhdHRyaWJ1dGVzXCIsXG4gICAgXCJhdHRhY2htZW50c1wiLFxuICAgIFwiYnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kc1wiLFxuICAgIFwiYnVpbHRJbk1lbWJlckNvbW1hbmRzXCIsXG4gICAgXCJjb2xsZWN0aW9uQ29tbWFuZHNcIixcbiAgICBcImNvbW1hbmRzXCIsXG4gICAgXCJtZW1iZXJDb21tYW5kc1wiLFxuICAgIFwibW9kZWxOYW1lXCIsXG4gICAgXCJwcmltYXJ5S2V5XCIsXG4gICAgXCJyZWxhdGlvbnNoaXBzXCIsXG4gICAgXCJzZXJ2ZXJcIlxuICBdKSB7XG4gICAgZGVsZXRlIHJlc3RBcmdzW2tleV1cbiAgfVxuXG4gIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3MpXG5cbiAgY29uc3Qgbm9ybWFsaXplZENvbW1hbmRzID0gbm9ybWFsaXplRnJvbnRlbmRNb2RlbFJlc291cmNlQ29tbWFuZHMocmVzb3VyY2VDb25maWd1cmF0aW9uKVxuXG4gIHJldHVybiB7XG4gICAgLi4ucmVzb3VyY2VDb25maWd1cmF0aW9uLFxuICAgIGFiaWxpdGllczogbm9ybWFsaXplRnJvbnRlbmRNb2RlbFJlc291cmNlQWJpbGl0aWVzKHJlc291cmNlQ29uZmlndXJhdGlvbi5hYmlsaXRpZXMpLFxuICAgIGJ1aWx0SW5Db2xsZWN0aW9uQ29tbWFuZHM6IG5vcm1hbGl6ZWRDb21tYW5kcy5idWlsdEluQ29sbGVjdGlvbkNvbW1hbmRzLFxuICAgIGJ1aWx0SW5NZW1iZXJDb21tYW5kczogbm9ybWFsaXplZENvbW1hbmRzLmJ1aWx0SW5NZW1iZXJDb21tYW5kcyxcbiAgICBjb2xsZWN0aW9uQ29tbWFuZHM6IG5vcm1hbGl6ZWRDb21tYW5kcy5jb2xsZWN0aW9uQ29tbWFuZHMsXG4gICAgbWVtYmVyQ29tbWFuZHM6IG5vcm1hbGl6ZWRDb21tYW5kcy5tZW1iZXJDb21tYW5kc1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmdbXSB8IHVuZGVmaW5lZH0gYWJpbGl0aWVzIC0gUmVzb3VyY2UgYWJpbGl0aWVzIGNvbmZpZyAoY2FtZWxDYXNlIGFjdGlvbiBsaXN0KS5cbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAtIE5vcm1hbGl6ZWQgYWJpbGl0aWVzIGNvbmZpZy5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRnJvbnRlbmRNb2RlbFJlc291cmNlQWJpbGl0aWVzKGFiaWxpdGllcykge1xuICBpZiAoIWFiaWxpdGllcykge1xuICAgIHJldHVybiB7ZmluZDogXCJyZWFkXCIsIGluZGV4OiBcInJlYWRcIn1cbiAgfVxuXG4gIGlmICghQXJyYXkuaXNBcnJheShhYmlsaXRpZXMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiUmVzb3VyY2UgYWJpbGl0aWVzIG11c3QgYmUgYW4gYXJyYXkgb2YgYWN0aW9uIG5hbWVzLiBPYmplY3QgZm9ybSBpcyBubyBsb25nZXIgc3VwcG9ydGVkLlwiKVxuICB9XG5cbiAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICBjb25zdCBub3JtYWxpemVkID0ge31cblxuICBpZiAoYWJpbGl0aWVzLmluY2x1ZGVzKFwibWFuYWdlXCIpKSB7XG4gICAgbm9ybWFsaXplZC5jcmVhdGUgPSBcIm1hbmFnZVwiXG4gICAgbm9ybWFsaXplZC5kZXN0cm95ID0gXCJtYW5hZ2VcIlxuICAgIG5vcm1hbGl6ZWQuZmluZCA9IFwibWFuYWdlXCJcbiAgICBub3JtYWxpemVkLmluZGV4ID0gXCJtYW5hZ2VcIlxuICAgIG5vcm1hbGl6ZWQudXBkYXRlID0gXCJtYW5hZ2VcIlxuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZWRcbiAgfVxuXG4gIGlmIChhYmlsaXRpZXMuaW5jbHVkZXMoXCJjcmVhdGVcIikpIG5vcm1hbGl6ZWQuY3JlYXRlID0gXCJjcmVhdGVcIlxuICBpZiAoYWJpbGl0aWVzLmluY2x1ZGVzKFwiZGVzdHJveVwiKSkgbm9ybWFsaXplZC5kZXN0cm95ID0gXCJkZXN0cm95XCJcbiAgaWYgKGFiaWxpdGllcy5pbmNsdWRlcyhcInJlYWRcIikpIHtcbiAgICBub3JtYWxpemVkLmZpbmQgPSBcInJlYWRcIlxuICAgIG5vcm1hbGl6ZWQuaW5kZXggPSBcInJlYWRcIlxuICB9XG4gIGlmIChhYmlsaXRpZXMuaW5jbHVkZXMoXCJ1cGRhdGVcIikpIG5vcm1hbGl6ZWQudXBkYXRlID0gXCJ1cGRhdGVcIlxuXG4gIHJldHVybiBub3JtYWxpemVkXG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZ3VyYXRpb259IHJlc291cmNlQ29uZmlndXJhdGlvbiAtIFJhdyByZXNvdXJjZSBjb25maWd1cmF0aW9uLlxuICogQHJldHVybnMge3tidWlsdEluQ29sbGVjdGlvbkNvbW1hbmRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBidWlsdEluTWVtYmVyQ29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIGNvbGxlY3Rpb25Db21tYW5kczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgbWVtYmVyQ29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz59fSAtIE5vcm1hbGl6ZWQgY29tbWFuZCBjb25maWd1cmF0aW9uLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVGcm9udGVuZE1vZGVsUmVzb3VyY2VDb21tYW5kcyhyZXNvdXJjZUNvbmZpZ3VyYXRpb24pIHtcbiAgY29uc3QgYnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kcyA9IHJlc291cmNlQ29uZmlndXJhdGlvbi5idWlsdEluQ29sbGVjdGlvbkNvbW1hbmRzXG4gIGNvbnN0IGJ1aWx0SW5NZW1iZXJDb21tYW5kcyA9IHJlc291cmNlQ29uZmlndXJhdGlvbi5idWlsdEluTWVtYmVyQ29tbWFuZHNcbiAgY29uc3QgY3VzdG9tQ29sbGVjdGlvbkNvbW1hbmRzID0gcmVzb3VyY2VDb25maWd1cmF0aW9uLmNvbGxlY3Rpb25Db21tYW5kc1xuICBjb25zdCBjdXN0b21NZW1iZXJDb21tYW5kcyA9IHJlc291cmNlQ29uZmlndXJhdGlvbi5tZW1iZXJDb21tYW5kc1xuICBjb25zdCBub3JtYWxpemVkQnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kcyA9IG5vcm1hbGl6ZUZyb250ZW5kTW9kZWxCdWlsdEluQ29tbWFuZHMoe1xuICAgIGNvbW1hbmREZWZhdWx0czoge1xuICAgICAgY3JlYXRlOiBcImNyZWF0ZVwiLFxuICAgICAgaW5kZXg6IFwiaW5kZXhcIlxuICAgIH0sXG4gICAgY29tbWFuZHNDb25maWc6IGJ1aWx0SW5Db2xsZWN0aW9uQ29tbWFuZHMsXG4gICAgbW9kZWxOYW1lOiBcIkNvbGxlY3Rpb25Db21tYW5kXCJcbiAgfSlcbiAgY29uc3Qgbm9ybWFsaXplZEJ1aWx0SW5NZW1iZXJDb21tYW5kcyA9IG5vcm1hbGl6ZUZyb250ZW5kTW9kZWxCdWlsdEluQ29tbWFuZHMoe1xuICAgIGNvbW1hbmREZWZhdWx0czoge1xuICAgICAgYXR0YWNoOiBcImF0dGFjaFwiLFxuICAgICAgZGVzdHJveTogXCJkZXN0cm95XCIsXG4gICAgICBkb3dubG9hZDogXCJkb3dubG9hZFwiLFxuICAgICAgZmluZDogXCJmaW5kXCIsXG4gICAgICB1cGRhdGU6IFwidXBkYXRlXCIsXG4gICAgICB1cmw6IFwidXJsXCJcbiAgICB9LFxuICAgIGNvbW1hbmRzQ29uZmlnOiBidWlsdEluTWVtYmVyQ29tbWFuZHMsXG4gICAgbW9kZWxOYW1lOiBcIk1lbWJlckNvbW1hbmRcIlxuICB9KVxuXG4gIHJldHVybiB7XG4gICAgYnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kczogbm9ybWFsaXplZEJ1aWx0SW5Db2xsZWN0aW9uQ29tbWFuZHMsXG4gICAgYnVpbHRJbk1lbWJlckNvbW1hbmRzOiBub3JtYWxpemVkQnVpbHRJbk1lbWJlckNvbW1hbmRzLFxuICAgIGNvbGxlY3Rpb25Db21tYW5kczogbm9ybWFsaXplRnJvbnRlbmRNb2RlbEN1c3RvbUNvbW1hbmRzKHtjb21tYW5kc0NvbmZpZzogY3VzdG9tQ29sbGVjdGlvbkNvbW1hbmRzLCBtb2RlbE5hbWU6IFwiQ29sbGVjdGlvbkNvbW1hbmRcIn0pLFxuICAgIG1lbWJlckNvbW1hbmRzOiBub3JtYWxpemVGcm9udGVuZE1vZGVsQ3VzdG9tQ29tbWFuZHMoe2NvbW1hbmRzQ29uZmlnOiBjdXN0b21NZW1iZXJDb21tYW5kcywgbW9kZWxOYW1lOiBcIk1lbWJlckNvbW1hbmRcIn0pXG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gYXJncy5jb21tYW5kRGVmYXVsdHMgLSBCdWlsdC1pbiBkZWZhdWx0IGNvbW1hbmQgbmFtZXMuXG4gKiBAcGFyYW0ge3N0cmluZ1tdIHwgdW5kZWZpbmVkfSBhcmdzLmNvbW1hbmRzQ29uZmlnIC0gQnVpbHQtaW4gY29tbWFuZHMgY29uZmlnIChjYW1lbENhc2UgY29tbWFuZCB0eXBlIGxpc3QpLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubW9kZWxOYW1lIC0gRGlhZ25vc3RpYyBtb2RlbCBuYW1lLlxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IC0gTm9ybWFsaXplZCBidWlsdC1pbiBjb21tYW5kIGNvbmZpZy5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRnJvbnRlbmRNb2RlbEJ1aWx0SW5Db21tYW5kcyh7Y29tbWFuZERlZmF1bHRzLCBjb21tYW5kc0NvbmZpZywgbW9kZWxOYW1lfSkge1xuICBpZiAoIWNvbW1hbmRzQ29uZmlnKSB7XG4gICAgcmV0dXJuIGNvbW1hbmREZWZhdWx0c1xuICB9XG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KGNvbW1hbmRzQ29uZmlnKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHttb2RlbE5hbWV9IGNvbmZpZ3VyYXRpb24gbXVzdCB1c2UgdGhlIGFycmF5IGZvcm0uIE9iamVjdCBmb3JtIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuYClcbiAgfVxuXG4gIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gKi9cbiAgY29uc3Qgbm9ybWFsaXplZENvbW1hbmRzID0ge31cblxuICBmb3IgKGNvbnN0IGNvbW1hbmRUeXBlIG9mIGNvbW1hbmRzQ29uZmlnKSB7XG4gICAgY29uc3QgZGVmYXVsdENvbW1hbmROYW1lID0gY29tbWFuZERlZmF1bHRzW2NvbW1hbmRUeXBlXVxuXG4gICAgaWYgKCFkZWZhdWx0Q29tbWFuZE5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBidWlsdC1pbiBmcm9udGVuZCBtb2RlbCBjb21tYW5kICcke2NvbW1hbmRUeXBlfScgZm9yICR7bW9kZWxOYW1lfWApXG4gICAgfVxuXG4gICAgbm9ybWFsaXplZENvbW1hbmRzW2NvbW1hbmRUeXBlXSA9IHZhbGlkYXRlRnJvbnRlbmRNb2RlbFJlc291cmNlQ29tbWFuZE5hbWUoe1xuICAgICAgY29tbWFuZE5hbWU6IGRlZmF1bHRDb21tYW5kTmFtZSxcbiAgICAgIGNvbW1hbmRUeXBlOiBkZWZhdWx0Q29tbWFuZE5hbWUsXG4gICAgICBtb2RlbE5hbWVcbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZWRDb21tYW5kc1xufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICogQHBhcmFtIHtzdHJpbmdbXSB8IHVuZGVmaW5lZH0gYXJncy5jb21tYW5kc0NvbmZpZyAtIEN1c3RvbSBjb21tYW5kcyBjb25maWcgKGNhbWVsQ2FzZSBtZXRob2QtbmFtZSBsaXN0KS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLm1vZGVsTmFtZSAtIERpYWdub3N0aWMgbW9kZWwgbmFtZS5cbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAtIE5vcm1hbGl6ZWQgY3VzdG9tIGNvbW1hbmQgY29uZmlnIChjYW1lbENhc2UgbWV0aG9kIG5hbWUg4oaSIGtlYmFiLWNhc2UgY29tbWFuZCBzbHVnKS5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRnJvbnRlbmRNb2RlbEN1c3RvbUNvbW1hbmRzKHtjb21tYW5kc0NvbmZpZywgbW9kZWxOYW1lfSkge1xuICBpZiAoIWNvbW1hbmRzQ29uZmlnKSB7XG4gICAgcmV0dXJuIHt9XG4gIH1cblxuICBpZiAoIUFycmF5LmlzQXJyYXkoY29tbWFuZHNDb25maWcpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke21vZGVsTmFtZX0gY29uZmlndXJhdGlvbiBtdXN0IHVzZSB0aGUgYXJyYXkgZm9ybS4gT2JqZWN0IGZvcm0gaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC5gKVxuICB9XG5cbiAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICBjb25zdCBub3JtYWxpemVkQ29tbWFuZHMgPSB7fVxuXG4gIGZvciAoY29uc3QgbWV0aG9kTmFtZSBvZiBjb21tYW5kc0NvbmZpZykge1xuICAgIGNvbnN0IHZhbGlkYXRlZE1ldGhvZE5hbWUgPSB2YWxpZGF0ZUZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbW1hbmROYW1lKHtcbiAgICAgIGNvbW1hbmROYW1lOiBtZXRob2ROYW1lLFxuICAgICAgY29tbWFuZFR5cGU6IG1ldGhvZE5hbWUsXG4gICAgICBtb2RlbE5hbWVcbiAgICB9KVxuICAgIGNvbnN0IGNvbW1hbmRTbHVnID0gaW5mbGVjdGlvbi5kYXNoZXJpemUoaW5mbGVjdGlvbi51bmRlcnNjb3JlKHZhbGlkYXRlZE1ldGhvZE5hbWUpKVxuXG4gICAgbm9ybWFsaXplZENvbW1hbmRzW3ZhbGlkYXRlZE1ldGhvZE5hbWVdID0gY29tbWFuZFNsdWdcbiAgfVxuXG4gIHJldHVybiBub3JtYWxpemVkQ29tbWFuZHNcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lIC0gTW9kZWwgY2xhc3MgbmFtZS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gcmVzb3VyY2VEZWZpbml0aW9uIC0gUmVzb3VyY2UgZGVmaW5pdGlvbi5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gTm9ybWFsaXplZCByZXNvdXJjZSBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbnRlbmRNb2RlbFJlc291cmNlUGF0aChtb2RlbE5hbWUsIHJlc291cmNlRGVmaW5pdGlvbikge1xuICBjb25zdCByZXNvdXJjZUNvbmZpZ3VyYXRpb24gPSBmcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWd1cmF0aW9uRnJvbURlZmluaXRpb24ocmVzb3VyY2VEZWZpbml0aW9uKVxuXG4gIGlmICghcmVzb3VyY2VDb25maWd1cmF0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGZyb250ZW5kIG1vZGVsIHJlc291cmNlIGRlZmluaXRpb24gZm9yICR7bW9kZWxOYW1lfWApXG4gIH1cblxuICByZXR1cm4gYC8ke2luZmxlY3Rpb24uZGFzaGVyaXplKGluZmxlY3Rpb24ucGx1cmFsaXplKGluZmxlY3Rpb24udW5kZXJzY29yZShtb2RlbE5hbWUpKSl9YFxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuY29tbWFuZE5hbWUgLSBDb21tYW5kIHBhdGggc2VnbWVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLm1vZGVsTmFtZSAtIE1vZGVsIGNsYXNzIG5hbWUuXG4gKiBAcGFyYW0ge3Vua25vd259IGFyZ3MucmVzb3VyY2VEZWZpbml0aW9uIC0gUmVzb3VyY2UgZGVmaW5pdGlvbi5cbiAqIEByZXR1cm5zIHtcImRlc3Ryb3lcIiB8IFwiZmluZFwiIHwgXCJpbmRleFwiIHwgXCJjcmVhdGVcIiB8IFwidXBkYXRlXCIgfCBcImF0dGFjaFwiIHwgXCJkb3dubG9hZFwiIHwgXCJ1cmxcIiB8IG51bGx9IC0gRnJvbnRlbmQgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbnRlbmRNb2RlbEFjdGlvbkZvckNvbW1hbmQoe2NvbW1hbmROYW1lLCBtb2RlbE5hbWUsIHJlc291cmNlRGVmaW5pdGlvbn0pIHtcbiAgY29uc3QgcmVzb3VyY2VDb25maWd1cmF0aW9uID0gZnJvbnRlbmRNb2RlbFJlc291cmNlQ29uZmlndXJhdGlvbkZyb21EZWZpbml0aW9uKHJlc291cmNlRGVmaW5pdGlvbilcblxuICBpZiAoIXJlc291cmNlQ29uZmlndXJhdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBmcm9udGVuZCBtb2RlbCByZXNvdXJjZSBkZWZpbml0aW9uIGZvciAke21vZGVsTmFtZX1gKVxuICB9XG5cbiAgZm9yIChjb25zdCBbYWN0aW9uLCBjb25maWd1cmVkQ29tbWFuZE5hbWVdIG9mIE9iamVjdC5lbnRyaWVzKHtcbiAgICAuLi5yZXNvdXJjZUNvbmZpZ3VyYXRpb24uYnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kcyxcbiAgICAuLi5yZXNvdXJjZUNvbmZpZ3VyYXRpb24uYnVpbHRJbk1lbWJlckNvbW1hbmRzXG4gIH0pKSB7XG4gICAgaWYgKGNvbmZpZ3VyZWRDb21tYW5kTmFtZSA9PT0gdW5kZWZpbmVkKSBjb250aW51ZVxuXG4gICAgY29uc3QgdmFsaWRhdGVkQ29tbWFuZE5hbWUgPSB2YWxpZGF0ZUZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbW1hbmROYW1lKHtcbiAgICAgIGNvbW1hbmROYW1lOiBjb25maWd1cmVkQ29tbWFuZE5hbWUsXG4gICAgICBjb21tYW5kVHlwZTogLyoqIEB0eXBlIHtcImF0dGFjaFwiIHwgXCJjcmVhdGVcIiB8IFwiZGVzdHJveVwiIHwgXCJkb3dubG9hZFwiIHwgXCJmaW5kXCIgfCBcImluZGV4XCIgfCBcInVwZGF0ZVwiIHwgXCJ1cmxcIn0gKi8gKGFjdGlvbiksXG4gICAgICBtb2RlbE5hbWVcbiAgICB9KVxuXG4gICAgaWYgKGNvbW1hbmROYW1lID09PSB2YWxpZGF0ZWRDb21tYW5kTmFtZSkge1xuICAgICAgcmV0dXJuIC8qKiBAdHlwZSB7XCJhdHRhY2hcIiB8IFwiY3JlYXRlXCIgfCBcImRlc3Ryb3lcIiB8IFwiZG93bmxvYWRcIiB8IFwiZmluZFwiIHwgXCJpbmRleFwiIHwgXCJ1cGRhdGVcIiB8IFwidXJsXCJ9ICovIChhY3Rpb24pXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5CYWNrZW5kUHJvamVjdENvbmZpZ3VyYXRpb25bXX0gYXJncy5iYWNrZW5kUHJvamVjdHMgLSBCYWNrZW5kIHByb2plY3RzIHRvIHNjYW4uXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5jdXJyZW50UGF0aCAtIFJlcXVlc3QgcGF0aCB3aXRob3V0IHF1ZXJ5LlxuICogQHJldHVybnMge3tjb21tYW5kTmFtZTogc3RyaW5nLCBtZW1iZXJJZD86IHN0cmluZywgbWV0aG9kTmFtZTogc3RyaW5nLCBtb2RlbE5hbWU6IHN0cmluZywgcmVzb3VyY2VQYXRoOiBzdHJpbmcsIHNjb3BlOiBcImNvbGxlY3Rpb25cIiB8IFwibWVtYmVyXCJ9IHwgbnVsbH0gLSBNYXRjaGVkIGN1c3RvbSBjb21tYW5kIG1ldGFkYXRhLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbnRlbmRNb2RlbEN1c3RvbUNvbW1hbmRGb3JQYXRoKHtiYWNrZW5kUHJvamVjdHMsIGN1cnJlbnRQYXRofSkge1xuICBjb25zdCBub3JtYWxpemVkQ3VycmVudFBhdGggPSBub3JtYWxpemVGcm9udGVuZE1vZGVsUmVzb3VyY2VQYXRoRm9yTWF0Y2goY3VycmVudFBhdGgpXG5cbiAgZm9yIChjb25zdCBiYWNrZW5kUHJvamVjdCBvZiBiYWNrZW5kUHJvamVjdHMpIHtcbiAgICBjb25zdCByZXNvdXJjZXMgPSBmcm9udGVuZE1vZGVsUmVzb3VyY2VzRm9yQmFja2VuZFByb2plY3QoYmFja2VuZFByb2plY3QpXG5cbiAgICBmb3IgKGNvbnN0IG1vZGVsTmFtZSBpbiByZXNvdXJjZXMpIHtcbiAgICAgIGNvbnN0IHJlc291cmNlRGVmaW5pdGlvbiA9IHJlc291cmNlc1ttb2RlbE5hbWVdXG4gICAgICBjb25zdCByZXNvdXJjZUNvbmZpZ3VyYXRpb24gPSBmcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWd1cmF0aW9uRnJvbURlZmluaXRpb24ocmVzb3VyY2VEZWZpbml0aW9uKVxuXG4gICAgICBpZiAoIXJlc291cmNlQ29uZmlndXJhdGlvbikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCByZXNvdXJjZVBhdGggPSBub3JtYWxpemVGcm9udGVuZE1vZGVsUmVzb3VyY2VQYXRoRm9yTWF0Y2goZnJvbnRlbmRNb2RlbFJlc291cmNlUGF0aChtb2RlbE5hbWUsIHJlc291cmNlRGVmaW5pdGlvbikpXG4gICAgICBjb25zdCBleHBlY3RlZFByZWZpeCA9IGAke3Jlc291cmNlUGF0aH0vYFxuXG4gICAgICBpZiAoIW5vcm1hbGl6ZWRDdXJyZW50UGF0aC5zdGFydHNXaXRoKGV4cGVjdGVkUHJlZml4KSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBwYXRoU2VnbWVudHMgPSBub3JtYWxpemVkQ3VycmVudFBhdGhcbiAgICAgICAgLnNsaWNlKGV4cGVjdGVkUHJlZml4Lmxlbmd0aClcbiAgICAgICAgLnNwbGl0KFwiL1wiKVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG5cbiAgICAgIGlmIChwYXRoU2VnbWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoZWRDb2xsZWN0aW9uQ29tbWFuZCA9IE9iamVjdC5lbnRyaWVzKHJlc291cmNlQ29uZmlndXJhdGlvbi5jb2xsZWN0aW9uQ29tbWFuZHMpXG4gICAgICAgICAgLmZpbmQoKFssIGNvbW1hbmROYW1lXSkgPT4gY29tbWFuZE5hbWUgPT09IHBhdGhTZWdtZW50c1swXSlcblxuICAgICAgICBpZiAobWF0Y2hlZENvbGxlY3Rpb25Db21tYW5kKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbW1hbmROYW1lOiBtYXRjaGVkQ29sbGVjdGlvbkNvbW1hbmRbMV0sXG4gICAgICAgICAgICBtZXRob2ROYW1lOiBtYXRjaGVkQ29sbGVjdGlvbkNvbW1hbmRbMF0sXG4gICAgICAgICAgICBtb2RlbE5hbWUsXG4gICAgICAgICAgICByZXNvdXJjZVBhdGgsXG4gICAgICAgICAgICBzY29wZTogXCJjb2xsZWN0aW9uXCJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHBhdGhTZWdtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlZE1lbWJlckNvbW1hbmQgPSBPYmplY3QuZW50cmllcyhyZXNvdXJjZUNvbmZpZ3VyYXRpb24ubWVtYmVyQ29tbWFuZHMpXG4gICAgICAgICAgLmZpbmQoKFssIGNvbW1hbmROYW1lXSkgPT4gY29tbWFuZE5hbWUgPT09IHBhdGhTZWdtZW50c1sxXSlcblxuICAgICAgICBpZiAobWF0Y2hlZE1lbWJlckNvbW1hbmQpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29tbWFuZE5hbWU6IG1hdGNoZWRNZW1iZXJDb21tYW5kWzFdLFxuICAgICAgICAgICAgbWVtYmVySWQ6IGRlY29kZVVSSUNvbXBvbmVudChwYXRoU2VnbWVudHNbMF0pLFxuICAgICAgICAgICAgbWV0aG9kTmFtZTogbWF0Y2hlZE1lbWJlckNvbW1hbmRbMF0sXG4gICAgICAgICAgICBtb2RlbE5hbWUsXG4gICAgICAgICAgICByZXNvdXJjZVBhdGgsXG4gICAgICAgICAgICBzY29wZTogXCJtZW1iZXJcIlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBQYXRoIHZhbHVlLlxuICogQHJldHVybnMge3N0cmluZ30gLSBOb3JtYWxpemVkIHBhdGggd2l0aCBsZWFkaW5nIHNsYXNoIGFuZCBubyB0cmFpbGluZyBzbGFzaC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRnJvbnRlbmRNb2RlbFJlc291cmNlUGF0aEZvck1hdGNoKHBhdGgpIHtcbiAgY29uc3Qgd2l0aExlYWRpbmdTbGFzaCA9IHBhdGguc3RhcnRzV2l0aChcIi9cIikgPyBwYXRoIDogYC8ke3BhdGh9YFxuXG4gIGlmICh3aXRoTGVhZGluZ1NsYXNoLmxlbmd0aCA+IDEpIHtcbiAgICByZXR1cm4gd2l0aExlYWRpbmdTbGFzaC5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpXG4gIH1cblxuICByZXR1cm4gd2l0aExlYWRpbmdTbGFzaFxufVxuIl19
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "velocious": "build/bin/velocious.js"
4
4
  },
5
5
  "name": "velocious",
6
- "version": "1.0.347",
6
+ "version": "1.0.348",
7
7
  "main": "build/index.js",
8
8
  "types": "build/index.d.ts",
9
9
  "files": [