@odigos/aws-cdk 0.0.10 → 0.0.12

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,7 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ENV_LOGS_EXPORTER = exports.ENV_METRICS_EXPORTER = exports.ENV_TRACES_EXPORTER = exports.EXPORTER_NONE = exports.ENV_COLLECTOR_CONFIG_URI = void 0;
3
+ exports.SIGNAL_DEFAULTS = exports.ENV_LOGS_EXPORTER = exports.ENV_METRICS_EXPORTER = exports.ENV_TRACES_EXPORTER = exports.EXPORTER_NONE = exports.ENV_COLLECTOR_CONFIG_URI = void 0;
4
4
  exports.signalEnabled = signalEnabled;
5
+ exports.resolvedSignals = resolvedSignals;
5
6
  exports.exporterNameFor = exporterNameFor;
6
7
  exports.exporterOverrideFor = exporterOverrideFor;
7
8
  exports.renderCollectorConfig = renderCollectorConfig;
@@ -69,9 +70,35 @@ exports.EXPORTER_NONE = 'none';
69
70
  exports.ENV_TRACES_EXPORTER = 'OTEL_TRACES_EXPORTER';
70
71
  exports.ENV_METRICS_EXPORTER = 'OTEL_METRICS_EXPORTER';
71
72
  exports.ENV_LOGS_EXPORTER = 'OTEL_LOGS_EXPORTER';
72
- /** Whether a signal is enabled, defaulting to on. */
73
- function signalEnabled(value) {
74
- return value !== false;
73
+ /**
74
+ * Whether a signal is enabled, given the caller's value and the signal's own default.
75
+ *
76
+ * The defaults are NOT uniform: traces are on, metrics and logs are off (see `SIGNAL_DEFAULTS`). So the
77
+ * default has to travel with the signal rather than being folded into one "unset means on" rule.
78
+ */
79
+ function signalEnabled(value, defaultEnabled) {
80
+ return value ?? defaultEnabled;
81
+ }
82
+ /**
83
+ * Which signals a destination carries when the caller says nothing.
84
+ *
85
+ * TRACES ONLY. Metrics and logs are opt-in because the cost of having them on by default falls on people
86
+ * who never asked for them: a destination that does not implement a signal refuses every batch of it, and
87
+ * the in-Lambda collector then retries on an exponential backoff inside billed duration. Traces are what
88
+ * almost every destination accepts and what almost everyone instruments for; the other two are a
89
+ * deliberate choice about the destination, so they are made deliberately.
90
+ *
91
+ * Turning one on is `metrics: true`. Enabling a signal also drops the `OTEL_*_EXPORTER=none` override, so
92
+ * the SDK starts producing it again.
93
+ */
94
+ exports.SIGNAL_DEFAULTS = { traces: true, metrics: false, logs: false };
95
+ /** The three signals resolved against their defaults — the single place that pairing is decided. */
96
+ function resolvedSignals(dest) {
97
+ return {
98
+ traces: signalEnabled(dest.traces, exports.SIGNAL_DEFAULTS.traces),
99
+ metrics: signalEnabled(dest.metrics, exports.SIGNAL_DEFAULTS.metrics),
100
+ logs: signalEnabled(dest.logs, exports.SIGNAL_DEFAULTS.logs),
101
+ };
75
102
  }
76
103
  /**
77
104
  * Renders a double-quoted YAML scalar.
@@ -136,10 +163,11 @@ function renderExporter(dest) {
136
163
  */
137
164
  function renderPipelines(dest, exporterName) {
138
165
  const parts = [];
166
+ const enabled = resolvedSignals(dest);
139
167
  const signals = [
140
- ['traces', signalEnabled(dest.traces)],
141
- ['metrics', signalEnabled(dest.metrics)],
142
- ['logs', signalEnabled(dest.logs)],
168
+ ['traces', enabled.traces],
169
+ ['metrics', enabled.metrics],
170
+ ['logs', enabled.logs],
143
171
  ];
144
172
  for (const [name, enabled] of signals) {
145
173
  if (!enabled) {
@@ -170,11 +198,24 @@ function renderCollectorConfig(dest) {
170
198
  throw new Error('Odigos destination sets both `endpoint` (OTLP/gRPC) and `httpEndpoint` (OTLP/HTTP); ' +
171
199
  'they select different collector exporters, so exactly one must be set.');
172
200
  }
201
+ // The two fields have different endpoint GRAMMARS, and getting them wrong is the worst failure mode this
202
+ // package has: the collector accepts the configuration, fails to build its exporter, and exits — leaving
203
+ // the function instrumented, reporting healthy, and exporting nothing. Both checks are therefore synth
204
+ // errors rather than documentation.
205
+ if (dest.endpoint && dest.endpoint.includes('://')) {
206
+ throw new Error(`Odigos destination \`endpoint\` is "${dest.endpoint}", but the gRPC exporter takes host:port with ` +
207
+ 'no scheme. Use `httpEndpoint` for a scheme-qualified OTLP/HTTP URL.');
208
+ }
209
+ if (dest.httpEndpoint && !/^https?:\/\//.test(dest.httpEndpoint)) {
210
+ throw new Error(`Odigos destination \`httpEndpoint\` is "${dest.httpEndpoint}", but the OTLP/HTTP exporter takes a ` +
211
+ 'scheme-qualified URL (http:// or https://). Use `endpoint` for a bare gRPC host:port.');
212
+ }
173
213
  const exporter = renderExporter(dest);
174
214
  const pipelines = renderPipelines(dest, exporterNameFor(dest));
175
215
  if (pipelines === '') {
176
- throw new Error('Odigos destination accepts no telemetry signals (traces, metrics and logs are all false), ' +
177
- 'so the collector would have no pipeline to build and would fail to start.');
216
+ throw new Error('Odigos destination accepts no telemetry signals, so the collector would have no pipeline to build ' +
217
+ 'and would fail to start. Note that metrics and logs are OFF by default — with `traces: false` the ' +
218
+ 'destination has nothing left unless you also pass `metrics: true` or `logs: true`.');
178
219
  }
179
220
  return (COLLECTOR_CONFIG_SCHEME +
180
221
  '{receivers: {otlp: {protocols: ' +
@@ -189,4 +230,4 @@ function renderCollectorConfig(dest) {
189
230
  pipelines +
190
231
  '}}');
191
232
  }
192
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdG9yLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb2xsZWN0b3ItY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTBFQSxzQ0FFQztBQW1CRCwwQ0FFQztBQXdFRCxrREFFQztBQU9ELHNEQStCQztBQS9NRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7QUFFSDs7Ozs7O0dBTUc7QUFDVSxRQUFBLHdCQUF3QixHQUFHLG9DQUFvQyxDQUFDO0FBRTdFOzs7O0dBSUc7QUFDSCxNQUFNLHVCQUF1QixHQUFHLE9BQU8sQ0FBQztBQUV4Qzs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sb0JBQW9CLEdBQ3hCLDJGQUEyRjtJQUMzRixnRUFBZ0UsQ0FBQztBQUVuRSxpRUFBaUU7QUFDcEQsUUFBQSxhQUFhLEdBQUcsTUFBTSxDQUFDO0FBRXBDLHFGQUFxRjtBQUN4RSxRQUFBLG1CQUFtQixHQUFHLHNCQUFzQixDQUFDO0FBQzdDLFFBQUEsb0JBQW9CLEdBQUcsdUJBQXVCLENBQUM7QUFDL0MsUUFBQSxpQkFBaUIsR0FBRyxvQkFBb0IsQ0FBQztBQUV0RCxxREFBcUQ7QUFDckQsU0FBZ0IsYUFBYSxDQUFDLEtBQTBCO0lBQ3RELE9BQU8sS0FBSyxLQUFLLEtBQUssQ0FBQztBQUN6QixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQVMsVUFBVSxDQUFDLENBQVM7SUFDM0IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsZUFBZSxDQUFDLElBQXVCO0lBQ3JELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7QUFDN0MsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFTLGFBQWEsQ0FBQyxPQUFtQztJQUN4RCxJQUFJLENBQUMs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QUFJLENBQUMsQ0FBQztJQUN0QyxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQy9ELElBQUksU0FBUyxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQ2IsNEZBQTRGO1lBQzFGLDJFQUEyRSxDQUM5RSxDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sQ0FDTCx1QkFBdUI7UUFDdkIsaUNBQWlDO1FBQ2pDLHFHQUFxRztRQUNyRyx1RUFBdUU7UUFDdkUsOEVBQThFO1FBQzlFLGNBQWM7UUFDZCxvQkFBb0I7UUFDcEIsZUFBZTtRQUNmLFFBQVE7UUFDUiw4REFBOEQ7UUFDOUQsU0FBUztRQUNULElBQUksQ0FDTCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9kaWdvc0Rlc3RpbmF0aW9uIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgaW4tTGFtYmRhIGNvbGxlY3RvcidzIGNvbXBsZXRlIGNvbmZpZ3VyYXRpb24gYXMgYW4gaW5saW5lXG4gKiBgT1BFTlRFTEVNRVRSWV9DT0xMRUNUT1JfQ09ORklHX1VSSWAgdmFsdWUuXG4gKlxuICogVGhpcyBpcyBhIFBPUlQgb2YgYHJlbmRlckNvbGxlY3RvckNvbmZpZ2AgaW4gdGhlIGNvbm5lY3RvclxuICogKGNvbm5lY3RvcnMvcHJvdmlkZXJzL2F3cy9wa2cvd29ya2xvYWQvaW5zdHJ1bWVudG9yL2NvbGxlY3Rvcl9jb25maWcuZ28pIGFuZCBpcyBkZWxpYmVyYXRlbHlcbiAqIGJ5dGUtZm9yLWJ5dGUgY29tcGF0aWJsZSB3aXRoIGl0LiBUaGF0IGVxdWl2YWxlbmNlIGlzIG5vdCBjb3NtZXRpYzogYSBmdW5jdGlvbiBpbnN0cnVtZW50ZWQgaGVyZSBhbmRcbiAqIGxhdGVyIGVuYWJsZWQgYXMgYSBjb25uZWN0b3Igc291cmNlIGlzIGNvbXBhcmVkIGFnYWluc3QgdGhlIGNvbm5lY3RvcidzIHJlbmRlcmluZyB0byBkZWNpZGUgd2hldGhlciBpdFxuICogbmVlZHMgY29udmVyZ2luZy4gQSBzdHJheSBzcGFjZSB3b3VsZCBtYWtlIGV2ZXJ5IHJlY29uY2lsZSBzZWUgZHJpZnQgYW5kIGNodXJuIGEgbmV3IGZ1bmN0aW9uIHZlcnNpb25cbiAqIGZvcmV2ZXIuXG4gKlxuICogV0hZIFRIRSBXSE9MRSBET0NVTUVOVCwgUkFUSEVSIFRIQU4gQSBGRVcgVkFSSUFCTEVTLiBUaGUgbGF5ZXIgc2hpcHMgYSBiYWtlZFxuICogL29wdC9jb2xsZWN0b3ItY29uZmlnL2NvbmZpZy55YW1sLCBidXQgdGhhdCBmaWxlIGlzIE9ORSBkb2N1bWVudCBzaGFyZWQgYnkgZXZlcnkgZnVuY3Rpb24sIHNvIGl0IGNhblxuICogb25seSByZWFjaCBhIGRlc3RpbmF0aW9uIHRocm91Z2ggZW52IGluZGlyZWN0aW9uIOKAlCBgJHtlbnY6U09NRVRISU5HfWAuIFRoYXQgbWFkZSB0aHJlZSB0aGluZ3NcbiAqIGltcG9zc2libGUgYXQgb25jZTpcbiAqXG4gKiAgIC0gQVVUSC4gQSBjcmVkZW50aWFsIGlzIGEgaGVhZGVycyBtYXAsIG5vdCBhIHNjYWxhci4gQSBiYWtlZCBmaWxlIGNhbiBzdWJzdGl0dXRlIGEgdmFsdWUgYnV0IGNhbm5vdFxuICogICAgIGNvbmRpdGlvbmFsbHkgZ3JvdyBhIGBoZWFkZXJzOmAgYmxvY2ssIHNvIGFuIGF1dGhlbnRpY2F0ZWQgZGVzdGluYXRpb24gd2FzIHVucmVhY2hhYmxlLlxuICogICAtIE9UTFAvSFRUUCBERVNUSU5BVElPTlMuIFRoZSBiYWtlZCBmaWxlIGhhcmRjb2RlcyBhIGdSUEMgYG90bHBgIGV4cG9ydGVyLiBBbiBvdGxwaHR0cC1vbmx5XG4gKiAgICAgZGVzdGluYXRpb24gcmVzb2x2ZXMgd2l0aCBhbiBlbXB0eSBnUlBDIGVuZHBvaW50LCBhbmQgdGhlIGNvbGxlY3RvciBkb2VzIG5vdCBkZWdyYWRlIOKAlCBpdCBmYWlscyB0b1xuICogICAgIGJ1aWxkIHRoZSBwaXBlbGluZSBhbmQgZXhpdHMsIHNvIHRoZSBmdW5jdGlvbiBpcyBpbnN0cnVtZW50ZWQsIGxvb2tzIGhlYWx0aHksIGFuZCBleHBvcnRzIG5vdGhpbmcuXG4gKiAgIC0gUEVSLVNJR05BTCBQSVBFTElORVMuIFRoZSBiYWtlZCBmaWxlIGRlY2xhcmVzIGFsbCB0aHJlZSBwaXBlbGluZXMgdW5jb25kaXRpb25hbGx5LCBzbyBhIHNpZ25hbCB0aGVcbiAqICAgICBkZXN0aW5hdGlvbiBkb2VzIG5vdCBhY2NlcHQgaXMgcmVjZWl2ZWQgYW5kIHRoZW4gZmFpbHMgb24gZXhwb3J0IHJhdGhlciB0aGFuIG5ldmVyIGJlaW5nIGJ1aWx0LlxuICpcbiAqIEZMT1cgU1RZTEUgSVMgTE9BRC1CRUFSSU5HLiBUaGUgZG9jdW1lbnQgaXMgZW1pdHRlZCBvbiBhIHNpbmdsZSBsaW5lIGJlY2F1c2UgaXQgaGFzIHRvIHN1cnZpdmUgYXMgYW5cbiAqIGVudmlyb25tZW50IHZhcmlhYmxlIHZhbHVlLiBJbiBhIFlBTUwgZmxvdyBtYXBwaW5nIGEgY29sb24gbXVzdCBiZSBmb2xsb3dlZCBieSBhIHNwYWNlLCBvciB0aGUgcGFyc2VyXG4gKiByZWFkcyBgYTpiYCBhcyB0aGUgcGxhaW4gc2NhbGFyIGBcImE6YlwiYCByYXRoZXIgdGhhbiBhIG1hcHBpbmcuIFdyaXR0ZW4gd2l0aG91dCB0aGUgc3BhY2VzIHRoZSBjb2xsZWN0b3JcbiAqIGFjY2VwdHMgdGhlIHZhcmlhYmxlLCByZXBvcnRzIHRoZSBVUkkgaXQgcmVhZCwgYW5kIHRoZW4gZmFpbHMgdG8gc3RhcnQgd2l0aCBhIGJhcmVcbiAqIGBvdGVsY29sIHN0YXRlIGlzIENsb3NlZGAg4oCUIG5vIHBhcnNlIGVycm9yLCBubyBtZW50aW9uIG9mIHRoZSBjb25maWcuIEV2ZXJ5IGA6IGAgYmVsb3cgZWFybnMgaXRzIHBsYWNlLlxuICovXG5cbi8qKlxuICogVGhlIGNvbGxlY3RvciBsYXllcidzIG93biBjb25maWctc291cmNlIHZhcmlhYmxlIOKAlCB1cHN0cmVhbSdzIG5hbWUsIG5vdCBvdXJzLiBQb2ludGVkIGF0IGEgYHlhbWw6YCBVUklcbiAqIGl0IGNhcnJpZXMgdGhlIGVudGlyZSBjb25maWd1cmF0aW9uIGlubGluZSwgc28gbm8gc2Vjb25kIHZhcmlhYmxlIGlzIG5lZWRlZCB0byBob2xkIGl0LlxuICpcbiAqIFVwc3RyZWFtIGFsc28gcmVhZHMgdGhlIG9sZGVyIGBPUEVOVEVMRU1FVFJZX0NPTExFQ1RPUl9DT05GSUdfRklMRWAgYW5kIGxvZ3MgYSBkZXByZWNhdGlvbiB3YXJuaW5nIGZvclxuICogaXQ7IHRoaXMgaXMgdGhlIGN1cnJlbnQgbmFtZS5cbiAqL1xuZXhwb3J0IGNvbnN0IEVOVl9DT0xMRUNUT1JfQ09ORklHX1VSSSA9ICdPUEVOVEVMRU1FVFJZX0NPTExFQ1RPUl9DT05GSUdfVVJJJztcblxuLyoqXG4gKiBUaGUgY29uZm1hcCBwcm92aWRlciB0aGF0IHJlYWRzIGEgY29uZmlndXJhdGlvbiBvdXQgb2YgdGhlIFVSSSBpdHNlbGYuIFRoZSBjb2xsZWN0b3IgcmVnaXN0ZXJzXG4gKiBlbnYvZmlsZS95YW1sL2h0dHAvaHR0cHMvczMgcHJvdmlkZXJzOyBgeWFtbDpgIGlzIHRoZSBvbmx5IG9uZSB0aGF0IG5lZWRzIG5vIHNlY29uZCB2YXJpYWJsZSBhbmQgbm9cbiAqIG5ldHdvcmsgcmVhZCBvbiBhIGNvbGQgc3RhcnQuXG4gKi9cbmNvbnN0IENPTExFQ1RPUl9DT05GSUdfU0NIRU1FID0gJ3lhbWw6JztcblxuLyoqXG4gKiBNaXJyb3JzIHRoZSBiYWtlZCBjb25maWcncyBwcm9jZXNzb3Igc2V0LCBhbmQgdGhlIE9SREVSIGlzIHRoZSBjb250cmFjdDpcbiAqXG4gKiAgIC0gYG1lbW9yeV9saW1pdGVyYCBmaXJzdCwgc28gYW4gZXhwb3J0IGJhY2tsb2cgaXMgc2hlZCBiZWZvcmUgaXQgaXMgY2hhcmdlZCB0byB0aGUgc2FtZSBtZW1vcnkgYnVkZ2V0XG4gKiAgICAgdGhlIGN1c3RvbWVyJ3MgaGFuZGxlciBhbGxvY2F0ZXMgZnJvbS4gUGVyY2VudGFnZXMsIG5vdCBgbGltaXRfbWliYCwgYmVjYXVzZSBvbmUgbGF5ZXIgc2VydmVzXG4gKiAgICAgZnVuY3Rpb25zIGZyb20gMTI4TUIgdG8gMTBHQi5cbiAqICAgLSBgZGVjb3VwbGVgIExBU1QuIExhbWJkYSBmcmVlemVzIHRoZSBzYW5kYm94IG9uY2UgdGhlIGhhbmRsZXIgcmV0dXJucyBhbmQgZXZlcnkgZXh0ZW5zaW9uIGhhcyBjYWxsZWRcbiAqICAgICAvbmV4dDsgYSBmcm96ZW4gc2FuZGJveCBydW5zIG5vIHRpbWVycywgc28gYSBiYXRjaCBzaXR0aW5nIGJlaGluZCBpdHMgdGltZW91dCBpcyBmbHVzaGVkIG9uIGEgbGF0ZXJcbiAqICAgICBpbnZvY2F0aW9uIG9yIGRyb3BwZWQgd2hlbiB0aGUgc2FuZGJveCBpcyByZWFwZWQuIGBkZWNvdXBsZWAgYWNrbm93bGVkZ2VzIHRoZSByZWNlaXZlIHBhdGhcbiAqICAgICBpbW1lZGlhdGVseSBhbmQgdHJhY2tzIGluLWZsaWdodCBleHBvcnRzLCB3aGljaCBpcyB3aGF0IGxldHMgdGhlIGV4dGVuc2lvbiBob2xkIC9uZXh0IG9wZW4gdW50aWwgdGhlXG4gKiAgICAgcXVldWUgZHJhaW5zIOKAlCBhZnRlciB0aGUgY2FsbGVyIGFscmVhZHkgaGFzIGl0cyByZXNwb25zZS5cbiAqL1xuY29uc3QgQ09MTEVDVE9SX1BST0NFU1NPUlMgPVxuICAne21lbW9yeV9saW1pdGVyOiB7Y2hlY2tfaW50ZXJ2YWw6IDFzLCBsaW1pdF9wZXJjZW50YWdlOiA1MCwgc3Bpa2VfbGltaXRfcGVyY2VudGFnZTogMjB9LCAnICtcbiAgJ2JhdGNoOiB7c2VuZF9iYXRjaF9zaXplOiA1MTIsIHRpbWVvdXQ6IDIwMG1zfSwgZGVjb3VwbGU6IG51bGx9JztcblxuLyoqIFZhbHVlIGFuIHVuc3VwcG9ydGVkIHNpZ25hbCdzIGBPVEVMXypfRVhQT1JURVJgIGlzIHNldCB0by4gKi9cbmV4cG9ydCBjb25zdCBFWFBPUlRFUl9OT05FID0gJ25vbmUnO1xuXG4vKiogVGhlIHRocmVlIGBPVEVMXypfRVhQT1JURVJgIHZhcmlhYmxlcywgaW4gdGhlIG9yZGVyIHRoZSBjb25uZWN0b3Igd3JpdGVzIHRoZW0uICovXG5leHBvcnQgY29uc3QgRU5WX1RSQUNFU19FWFBPUlRFUiA9ICdPVEVMX1RSQUNFU19FWFBPUlRFUic7XG5leHBvcnQgY29uc3QgRU5WX01FVFJJQ1NfRVhQT1JURVIgPSAnT1RFTF9NRVRSSUNTX0VYUE9SVEVSJztcbmV4cG9ydCBjb25zdCBFTlZfTE9HU19FWFBPUlRFUiA9ICdPVEVMX0xPR1NfRVhQT1JURVInO1xuXG4vKiogV2hldGhlciBhIHNpZ25hbCBpcyBlbmFibGVkLCBkZWZhdWx0aW5nIHRvIG9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hbEVuYWJsZWQodmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIHZhbHVlICE9PSBmYWxzZTtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGEgZG91YmxlLXF1b3RlZCBZQU1MIHNjYWxhci5cbiAqXG4gKiBRdW90aW5nIHVuY29uZGl0aW9uYWxseSBpcyB3aGF0IGtlZXBzIGEgdmFsdWUgc3VjaCBhcyBhIGJhcmUgYGhvc3Q6NDMxN2AgZnJvbSBiZWluZyByZS1yZWFkIGFzIGEgbmVzdGVkXG4gKiBtYXBwaW5nIGluIGZsb3cgY29udGV4dC4gYEpTT04uc3RyaW5naWZ5YCBpcyB0aGUgVHlwZVNjcmlwdCBlcXVpdmFsZW50IG9mIHRoZSBjb25uZWN0b3Inc1xuICogYHN0cmNvbnYuUXVvdGVgIGZvciB0aGUgdm9jYWJ1bGFyeSB0aGF0IG1hdHRlcnMgaGVyZSAoYFxcXCJgIGFuZCBgXFxcXGApOyBib3RoIHByb2R1Y2UgdGhlIHNhbWUgb3V0cHV0IGZvclxuICogdGhlIEFTQ0lJIGVuZHBvaW50cywgaGVhZGVyIG5hbWVzIGFuZCBjcmVkZW50aWFscyB0aGlzIGV2ZXIgc2Vlcy5cbiAqL1xuZnVuY3Rpb24geWFtbFN0cmluZyhzOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocyk7XG59XG5cbi8qKlxuICogUGlja3MgdGhlIGV4cG9ydGVyIGJ5IHRoZSB0cmFuc3BvcnQgdGhlIGRlc3RpbmF0aW9uIGNvbmZpZ3VyZWQuIEEgZGVzdGluYXRpb24gY2FycmllcyBhIGdSUEMgZW5kcG9pbnRcbiAqICh0eXBlIGBvdGxwYCkgb3IgYW4gT1RMUC9IVFRQIG9uZSAodHlwZSBgb3RscGh0dHBgKTsgdGhlIHR3byBhcmUgZGlmZmVyZW50IGNvbGxlY3RvciBjb21wb25lbnRzIHdpdGhcbiAqIGRpZmZlcmVudCBlbmRwb2ludCBncmFtbWFycywgc28gdGhpcyBpcyBhIGdlbnVpbmUgYnJhbmNoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhwb3J0ZXJOYW1lRm9yKGRlc3Q6IE9kaWdvc0Rlc3RpbmF0aW9uKTogc3RyaW5nIHtcbiAgcmV0dXJuIGRlc3QuZW5kcG9pbnQgPyAnb3RscCcgOiAnb3RscGh0dHAnO1xufVxuXG4vKipcbiAqIEVtaXRzIHRoZSBkZXN0aW5hdGlvbidzIHBlci1yZXF1ZXN0IGhlYWRlcnMg4oCUIGluIHByYWN0aWNlIGl0cyBjcmVkZW50aWFsLiBFbXB0eSB3aGVuIHRoZSBkZXN0aW5hdGlvblxuICogbmVlZHMgbm9uZSwgc28gbm8gaGVhZGVyIGJsb2NrIGlzIHdyaXR0ZW4gYXQgYWxsIHJhdGhlciB0aGFuIGFuIGVtcHR5IG9uZS5cbiAqXG4gKiBLZXlzIGFyZSBzb3J0ZWQgc28gdGhlIHJlbmRlcmVkIGNvbmZpZyBpcyBieXRlLWlkZW50aWNhbCBhY3Jvc3Mgc3ludGhzLiBUaGUgc3RyaW5nIGlzIGNvbXBhcmVkIGFnYWluc3RcbiAqIHRoZSBsaXZlIGZ1bmN0aW9uJ3MgZW52aXJvbm1lbnQgdG8gZGVjaWRlIHdoZXRoZXIgYW4gdXBkYXRlIGlzIG5lZWRlZCwgYW5kIG1hcCBvcmRlciB3b3VsZCBvdGhlcndpc2VcbiAqIG1ha2UgZXZlcnkgZGVwbG95IGxvb2sgbGlrZSBhIGNoYW5nZS5cbiAqL1xuZnVuY3Rpb24gcmVuZGVySGVhZGVycyhoZWFkZXJzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSk6IHN0cmluZyB7XG4gIGlmICghaGVhZGVycykge1xuICAgIHJldHVybiAnJztcbiAgfVxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaGVhZGVycykuc29ydCgpO1xuICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgY29uc3QgcmVuZGVyZWQgPSBrZXlzLm1hcCgoaykgPT4gYCR7eWFtbFN0cmluZyhrKX06ICR7eWFtbFN0cmluZyhoZWFkZXJzW2tdKX1gKS5qb2luKCcsICcpO1xuICByZXR1cm4gYCwgaGVhZGVyczogeyR7cmVuZGVyZWR9fWA7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckV4cG9ydGVyKGRlc3Q6IE9kaWdvc0Rlc3RpbmF0aW9uKTogc3RyaW5nIHtcbiAgbGV0IG91dDogc3RyaW5nO1xuICBpZiAoZGVzdC5lbmRwb2ludCkge1xuICAgIC8vIHRscy5pbnNlY3VyZSBhcHBsaWVzIHRvIHRoZSBnUlBDIGV4cG9ydGVyIG9ubHk7IHRoZSBIVFRQIGV4cG9ydGVyIHRha2VzIHRoZSBzY2hlbWUgZnJvbSB0aGUgVVJMLlxuICAgIG91dCA9IGB7b3RscDoge2VuZHBvaW50OiAke3lhbWxTdHJpbmcoZGVzdC5lbmRwb2ludCl9LCB0bHM6IHtpbnNlY3VyZTogJHtkZXN0Lmluc2VjdXJlID09PSB0cnVlfX1gO1xuICB9IGVsc2UgaWYgKGRlc3QuaHR0cEVuZHBvaW50KSB7XG4gICAgb3V0ID0gYHtvdGxwaHR0cDoge2VuZHBvaW50OiAke3lhbWxTdHJpbmcoZGVzdC5odHRwRW5kcG9pbnQpfWA7XG4gIH0gZWxzZSB7XG4gICAgLy8gUmVhY2hlZCB3aGVuIGEgZGVzdGluYXRpb24gY2FycmllcyBuZWl0aGVyIHRyYW5zcG9ydC4gRmFpbGluZyBoZXJlIGlzIHRoZSB3aG9sZSBwb2ludDogdGhlXG4gICAgLy8gYWx0ZXJuYXRpdmUgaXMgYSBjb2xsZWN0b3IgdGhhdCBleGl0cyBvbiBzdGFydHVwIHdoaWxlIHRoZSBmdW5jdGlvbiBpcyByZXBvcnRlZCBoZWFsdGh5LlxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdPZGlnb3MgZGVzdGluYXRpb24gaGFzIG5laXRoZXIgYGVuZHBvaW50YCAoT1RMUC9nUlBDKSBub3IgYGh0dHBFbmRwb2ludGAgKE9UTFAvSFRUUCksICcgK1xuICAgICAgICAnc28gdGhlIGluLUxhbWJkYSBjb2xsZWN0b3Igd291bGQgaGF2ZSBub3doZXJlIHRvIGV4cG9ydC4nLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGAke291dH0ke3JlbmRlckhlYWRlcnMoZGVzdC5oZWFkZXJzKX19fWA7XG59XG5cbi8qKlxuICogQnVpbGRzIGEgcGlwZWxpbmUgb25seSBmb3IgdGhlIHNpZ25hbHMgdGhlIGRlc3RpbmF0aW9uIGFjY2VwdHMuIEEgc2lnbmFsIHdpdGggbm8gcGlwZWxpbmUgaXMgcmVmdXNlZCBhdFxuICogdGhlIHJlY2VpdmVyLCB3aGljaCBpcyB0aGUgYmVoYXZpb3VyIHdlIHdhbnQ6IHRoZSBTREsgaXMgdG9sZCBub3QgdG8gcHJvZHVjZSBpdCBlaXRoZXIgKHNlZVxuICogYGV4cG9ydGVyT3ZlcnJpZGVGb3JgKSwgYW5kIHRoZSB0d28gdG9nZXRoZXIgbWVhbiBhbiB1bmFjY2VwdGVkIHNpZ25hbCBpcyBuZXZlciBnZW5lcmF0ZWQsIG5ldmVyXG4gKiBleHBvcnRlZCwgYW5kIG5ldmVyIGEgcGVyLWJhdGNoIGVycm9yIGFnYWluc3QgYSBiYWNrZW5kIHRoYXQgZG9lcyBub3QgaW1wbGVtZW50IGl0LlxuICovXG5mdW5jdGlvbiByZW5kZXJQaXBlbGluZXMoZGVzdDogT2RpZ29zRGVzdGluYXRpb24sIGV4cG9ydGVyTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IHNpZ25hbHM6IEFycmF5PFtzdHJpbmcsIGJvb2xlYW5dPiA9IFtcbiAgICBbJ3RyYWNlcycsIHNpZ25hbEVuYWJsZWQoZGVzdC50cmFjZXMpXSxcbiAgICBbJ21ldHJpY3MnLCBzaWduYWxFbmFibGVkKGRlc3QubWV0cmljcyldLFxuICAgIFsnbG9ncycsIHNpZ25hbEVuYWJsZWQoZGVzdC5sb2dzKV0sXG4gIF07XG4gIGZvciAoY29uc3QgW25hbWUsIGVuYWJsZWRdIG9mIHNpZ25hbHMpIHtcbiAgICBpZiAoIWVuYWJsZWQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgYCR7bmFtZX06IHtyZWNlaXZlcnM6IFtvdGxwXSwgcHJvY2Vzc29yczogW21lbW9yeV9saW1pdGVyLCBiYXRjaCwgZGVjb3VwbGVdLCBleHBvcnRlcnM6IFske2V4cG9ydGVyTmFtZX1dfWAsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gcGFydHMubGVuZ3RoID09PSAwID8gJycgOiBgeyR7cGFydHMuam9pbignLCAnKX19YDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB2YWx1ZSBhIHNpZ25hbCdzIGBPVEVMXypfRVhQT1JURVJgIG11c3QgaG9sZDogYG5vbmVgIHRvIHN1cHByZXNzIGEgc2lnbmFsIHRoZSBkZXN0aW5hdGlvblxuICogZG9lcyBub3QgYWNjZXB0LCBvciBgdW5kZWZpbmVkYCBtZWFuaW5nIHRoZSB2YXJpYWJsZSBtdXN0IGJlIEFCU0VOVCBiZWNhdXNlIHRoZSBTREsncyBvd24gZGVmYXVsdCBpc1xuICogYWxyZWFkeSB3aGF0IHdlIHdhbnQuXG4gKlxuICogT25seSB0aGUgXCJub25lXCIgc2lkZSBpcyB3cml0dGVuLCBiZWNhdXNlIGBvdGxwYCBpcyBhbHJlYWR5IGV2ZXJ5IE9wZW5UZWxlbWV0cnkgU0RLJ3MgZGVmYXVsdCBmb3IgYWxsXG4gKiB0aHJlZSBzaWduYWxzIOKAlCBzZXR0aW5nIGl0IHdvdWxkIHJlc3RhdGUgdGhlIGRlZmF1bHQgaW4gdGhyZWUgdmFyaWFibGVzIG9uIGV2ZXJ5IGZ1bmN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhwb3J0ZXJPdmVycmlkZUZvcihzdXBwb3J0ZWQ6IGJvb2xlYW4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gc3VwcG9ydGVkID8gdW5kZWZpbmVkIDogRVhQT1JURVJfTk9ORTtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBjb21wbGV0ZSBjb2xsZWN0b3IgY29uZmlndXJhdGlvbiBmb3Igb25lIGRlc3RpbmF0aW9uLlxuICpcbiAqIEB0aHJvd3MgaWYgdGhlIGRlc3RpbmF0aW9uIG5hbWVzIG5laXRoZXIgdHJhbnNwb3J0LCBib3RoIHRyYW5zcG9ydHMsIG9yIG5vIHNpZ25hbHMgYXQgYWxsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyQ29sbGVjdG9yQ29uZmlnKGRlc3Q6IE9kaWdvc0Rlc3RpbmF0aW9uKTogc3RyaW5nIHtcbiAgaWYgKGRlc3QuZW5kcG9pbnQgJiYgZGVzdC5odHRwRW5kcG9pbnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnT2RpZ29zIGRlc3RpbmF0aW9uIHNldHMgYm90aCBgZW5kcG9pbnRgIChPVExQL2dSUEMpIGFuZCBgaHR0cEVuZHBvaW50YCAoT1RMUC9IVFRQKTsgJyArXG4gICAgICAgICd0aGV5IHNlbGVjdCBkaWZmZXJlbnQgY29sbGVjdG9yIGV4cG9ydGVycywgc28gZXhhY3RseSBvbmUgbXVzdCBiZSBzZXQuJyxcbiAgICApO1xuICB9XG5cbiAgY29uc3QgZXhwb3J0ZXIgPSByZW5kZXJFeHBvcnRlcihkZXN0KTtcbiAgY29uc3QgcGlwZWxpbmVzID0gcmVuZGVyUGlwZWxpbmVzKGRlc3QsIGV4cG9ydGVyTmFtZUZvcihkZXN0KSk7XG4gIGlmIChwaXBlbGluZXMgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ09kaWdvcyBkZXN0aW5hdGlvbiBhY2NlcHRzIG5vIHRlbGVtZXRyeSBzaWduYWxzICh0cmFjZXMsIG1ldHJpY3MgYW5kIGxvZ3MgYXJlIGFsbCBmYWxzZSksICcgK1xuICAgICAgICAnc28gdGhlIGNvbGxlY3RvciB3b3VsZCBoYXZlIG5vIHBpcGVsaW5lIHRvIGJ1aWxkIGFuZCB3b3VsZCBmYWlsIHRvIHN0YXJ0LicsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgQ09MTEVDVE9SX0NPTkZJR19TQ0hFTUUgK1xuICAgICd7cmVjZWl2ZXJzOiB7b3RscDoge3Byb3RvY29sczogJyArXG4gICAgLy8gQm91bmQgdG8gbG9jYWxob3N0OiB0aGUgcmVjZWl2ZXIgZXhpc3RzIG9ubHkgZm9yIHRoZSBpbi1wcm9jZXNzIFNESy4gQmluZGluZyBpdCB3aWRlciB3b3VsZCBleHBvc2VcbiAgICAvLyBhbiB1bmF1dGhlbnRpY2F0ZWQgT1RMUCBlbmRwb2ludCBvbiB0aGUgc2FuZGJveCdzIG5ldHdvcmsgaW50ZXJmYWNlLlxuICAgICd7Z3JwYzoge2VuZHBvaW50OiBcImxvY2FsaG9zdDo0MzE3XCJ9LCBodHRwOiB7ZW5kcG9pbnQ6IFwibG9jYWxob3N0OjQzMThcIn19fX0sICcgK1xuICAgICdwcm9jZXNzb3JzOiAnICtcbiAgICBDT0xMRUNUT1JfUFJPQ0VTU09SUyArXG4gICAgJywgZXhwb3J0ZXJzOiAnICtcbiAgICBleHBvcnRlciArXG4gICAgJywgc2VydmljZToge3RlbGVtZXRyeToge21ldHJpY3M6IHtsZXZlbDogbm9uZX19LCBwaXBlbGluZXM6ICcgK1xuICAgIHBpcGVsaW5lcyArXG4gICAgJ319J1xuICApO1xufVxuIl19
233
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdG9yLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb2xsZWN0b3ItY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQStFQSxzQ0FFQztBQWlCRCwwQ0FNQztBQW1CRCwwQ0FFQztBQXlFRCxrREFFQztBQU9ELHNEQWlEQztBQTlQRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7QUFFSDs7Ozs7O0dBTUc7QUFDVSxRQUFBLHdCQUF3QixHQUFHLG9DQUFvQyxDQUFDO0FBRTdFOzs7O0dBSUc7QUFDSCxNQUFNLHVCQUF1QixHQUFHLE9BQU8sQ0FBQztBQUV4Qzs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sb0JBQW9CLEdBQ3hCLDJGQUEyRjtJQUMzRixnRUFBZ0UsQ0FBQztBQUVuRSxpRUFBaUU7QUFDcEQsUUFBQSxhQUFhLEdBQUcsTUFBTSxDQUFDO0FBRXBDLHFGQUFxRjtBQUN4RSxRQUFBLG1CQUFtQixHQUFHLHNCQUFzQixDQUFDO0FBQzdDLFFBQUEsb0JBQW9CLEdBQUcsdUJBQXVCLENBQUM7QUFDL0MsUUFBQSxpQkFBaUIsR0FBRyxvQkFBb0IsQ0FBQztBQUV0RDs7Ozs7R0FLRztBQUNILFNBQWdCLGFBQWEsQ0FBQyxLQUEwQixFQUFFLGNBQXVCO0lBQy9FLE9BQU8sS0FBSyxJQUFJLGNBQWMsQ0FBQztBQUNqQyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDVSxRQUFBLGVBQWUsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFFN0Usb0dBQW9HO0FBQ3BHLFNBQWdCLGVBQWUsQ0FBQyxJQUF1QjtJQUNyRCxPQUFPO1FBQ0wsTUFBTSxFQUFFLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLHVCQUFlLENBQUMsTUFBTSxDQUFDO1FBQzFELE9BQU8sRUFBRSxhQUFhLENBQUMs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QUFTLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDckIsTUFBTSxJQUFJLEtBQUssQ0FDYixvR0FBb0c7WUFDbEcsb0dBQW9HO1lBQ3BHLG9GQUFvRixDQUN2RixDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sQ0FDTCx1QkFBdUI7UUFDdkIsaUNBQWlDO1FBQ2pDLHFHQUFxRztRQUNyRyx1RUFBdUU7UUFDdkUsOEVBQThFO1FBQzlFLGNBQWM7UUFDZCxvQkFBb0I7UUFDcEIsZUFBZTtRQUNmLFFBQVE7UUFDUiw4REFBOEQ7UUFDOUQsU0FBUztRQUNULElBQUksQ0FDTCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9kaWdvc0Rlc3RpbmF0aW9uIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgaW4tTGFtYmRhIGNvbGxlY3RvcidzIGNvbXBsZXRlIGNvbmZpZ3VyYXRpb24gYXMgYW4gaW5saW5lXG4gKiBgT1BFTlRFTEVNRVRSWV9DT0xMRUNUT1JfQ09ORklHX1VSSWAgdmFsdWUuXG4gKlxuICogVGhpcyBpcyBhIFBPUlQgb2YgYHJlbmRlckNvbGxlY3RvckNvbmZpZ2AgaW4gdGhlIGNvbm5lY3RvclxuICogKGNvbm5lY3RvcnMvcHJvdmlkZXJzL2F3cy9wa2cvd29ya2xvYWQvaW5zdHJ1bWVudG9yL2NvbGxlY3Rvcl9jb25maWcuZ28pIGFuZCBpcyBkZWxpYmVyYXRlbHlcbiAqIGJ5dGUtZm9yLWJ5dGUgY29tcGF0aWJsZSB3aXRoIGl0LiBUaGF0IGVxdWl2YWxlbmNlIGlzIG5vdCBjb3NtZXRpYzogYSBmdW5jdGlvbiBpbnN0cnVtZW50ZWQgaGVyZSBhbmRcbiAqIGxhdGVyIGVuYWJsZWQgYXMgYSBjb25uZWN0b3Igc291cmNlIGlzIGNvbXBhcmVkIGFnYWluc3QgdGhlIGNvbm5lY3RvcidzIHJlbmRlcmluZyB0byBkZWNpZGUgd2hldGhlciBpdFxuICogbmVlZHMgY29udmVyZ2luZy4gQSBzdHJheSBzcGFjZSB3b3VsZCBtYWtlIGV2ZXJ5IHJlY29uY2lsZSBzZWUgZHJpZnQgYW5kIGNodXJuIGEgbmV3IGZ1bmN0aW9uIHZlcnNpb25cbiAqIGZvcmV2ZXIuXG4gKlxuICogV0hZIFRIRSBXSE9MRSBET0NVTUVOVCwgUkFUSEVSIFRIQU4gQSBGRVcgVkFSSUFCTEVTLiBUaGUgbGF5ZXIgc2hpcHMgYSBiYWtlZFxuICogL29wdC9jb2xsZWN0b3ItY29uZmlnL2NvbmZpZy55YW1sLCBidXQgdGhhdCBmaWxlIGlzIE9ORSBkb2N1bWVudCBzaGFyZWQgYnkgZXZlcnkgZnVuY3Rpb24sIHNvIGl0IGNhblxuICogb25seSByZWFjaCBhIGRlc3RpbmF0aW9uIHRocm91Z2ggZW52IGluZGlyZWN0aW9uIOKAlCBgJHtlbnY6U09NRVRISU5HfWAuIFRoYXQgbWFkZSB0aHJlZSB0aGluZ3NcbiAqIGltcG9zc2libGUgYXQgb25jZTpcbiAqXG4gKiAgIC0gQVVUSC4gQSBjcmVkZW50aWFsIGlzIGEgaGVhZGVycyBtYXAsIG5vdCBhIHNjYWxhci4gQSBiYWtlZCBmaWxlIGNhbiBzdWJzdGl0dXRlIGEgdmFsdWUgYnV0IGNhbm5vdFxuICogICAgIGNvbmRpdGlvbmFsbHkgZ3JvdyBhIGBoZWFkZXJzOmAgYmxvY2ssIHNvIGFuIGF1dGhlbnRpY2F0ZWQgZGVzdGluYXRpb24gd2FzIHVucmVhY2hhYmxlLlxuICogICAtIE9UTFAvSFRUUCBERVNUSU5BVElPTlMuIFRoZSBiYWtlZCBmaWxlIGhhcmRjb2RlcyBhIGdSUEMgYG90bHBgIGV4cG9ydGVyLiBBbiBvdGxwaHR0cC1vbmx5XG4gKiAgICAgZGVzdGluYXRpb24gcmVzb2x2ZXMgd2l0aCBhbiBlbXB0eSBnUlBDIGVuZHBvaW50LCBhbmQgdGhlIGNvbGxlY3RvciBkb2VzIG5vdCBkZWdyYWRlIOKAlCBpdCBmYWlscyB0b1xuICogICAgIGJ1aWxkIHRoZSBwaXBlbGluZSBhbmQgZXhpdHMsIHNvIHRoZSBmdW5jdGlvbiBpcyBpbnN0cnVtZW50ZWQsIGxvb2tzIGhlYWx0aHksIGFuZCBleHBvcnRzIG5vdGhpbmcuXG4gKiAgIC0gUEVSLVNJR05BTCBQSVBFTElORVMuIFRoZSBiYWtlZCBmaWxlIGRlY2xhcmVzIGFsbCB0aHJlZSBwaXBlbGluZXMgdW5jb25kaXRpb25hbGx5LCBzbyBhIHNpZ25hbCB0aGVcbiAqICAgICBkZXN0aW5hdGlvbiBkb2VzIG5vdCBhY2NlcHQgaXMgcmVjZWl2ZWQgYW5kIHRoZW4gZmFpbHMgb24gZXhwb3J0IHJhdGhlciB0aGFuIG5ldmVyIGJlaW5nIGJ1aWx0LlxuICpcbiAqIEZMT1cgU1RZTEUgSVMgTE9BRC1CRUFSSU5HLiBUaGUgZG9jdW1lbnQgaXMgZW1pdHRlZCBvbiBhIHNpbmdsZSBsaW5lIGJlY2F1c2UgaXQgaGFzIHRvIHN1cnZpdmUgYXMgYW5cbiAqIGVudmlyb25tZW50IHZhcmlhYmxlIHZhbHVlLiBJbiBhIFlBTUwgZmxvdyBtYXBwaW5nIGEgY29sb24gbXVzdCBiZSBmb2xsb3dlZCBieSBhIHNwYWNlLCBvciB0aGUgcGFyc2VyXG4gKiByZWFkcyBgYTpiYCBhcyB0aGUgcGxhaW4gc2NhbGFyIGBcImE6YlwiYCByYXRoZXIgdGhhbiBhIG1hcHBpbmcuIFdyaXR0ZW4gd2l0aG91dCB0aGUgc3BhY2VzIHRoZSBjb2xsZWN0b3JcbiAqIGFjY2VwdHMgdGhlIHZhcmlhYmxlLCByZXBvcnRzIHRoZSBVUkkgaXQgcmVhZCwgYW5kIHRoZW4gZmFpbHMgdG8gc3RhcnQgd2l0aCBhIGJhcmVcbiAqIGBvdGVsY29sIHN0YXRlIGlzIENsb3NlZGAg4oCUIG5vIHBhcnNlIGVycm9yLCBubyBtZW50aW9uIG9mIHRoZSBjb25maWcuIEV2ZXJ5IGA6IGAgYmVsb3cgZWFybnMgaXRzIHBsYWNlLlxuICovXG5cbi8qKlxuICogVGhlIGNvbGxlY3RvciBsYXllcidzIG93biBjb25maWctc291cmNlIHZhcmlhYmxlIOKAlCB1cHN0cmVhbSdzIG5hbWUsIG5vdCBvdXJzLiBQb2ludGVkIGF0IGEgYHlhbWw6YCBVUklcbiAqIGl0IGNhcnJpZXMgdGhlIGVudGlyZSBjb25maWd1cmF0aW9uIGlubGluZSwgc28gbm8gc2Vjb25kIHZhcmlhYmxlIGlzIG5lZWRlZCB0byBob2xkIGl0LlxuICpcbiAqIFVwc3RyZWFtIGFsc28gcmVhZHMgdGhlIG9sZGVyIGBPUEVOVEVMRU1FVFJZX0NPTExFQ1RPUl9DT05GSUdfRklMRWAgYW5kIGxvZ3MgYSBkZXByZWNhdGlvbiB3YXJuaW5nIGZvclxuICogaXQ7IHRoaXMgaXMgdGhlIGN1cnJlbnQgbmFtZS5cbiAqL1xuZXhwb3J0IGNvbnN0IEVOVl9DT0xMRUNUT1JfQ09ORklHX1VSSSA9ICdPUEVOVEVMRU1FVFJZX0NPTExFQ1RPUl9DT05GSUdfVVJJJztcblxuLyoqXG4gKiBUaGUgY29uZm1hcCBwcm92aWRlciB0aGF0IHJlYWRzIGEgY29uZmlndXJhdGlvbiBvdXQgb2YgdGhlIFVSSSBpdHNlbGYuIFRoZSBjb2xsZWN0b3IgcmVnaXN0ZXJzXG4gKiBlbnYvZmlsZS95YW1sL2h0dHAvaHR0cHMvczMgcHJvdmlkZXJzOyBgeWFtbDpgIGlzIHRoZSBvbmx5IG9uZSB0aGF0IG5lZWRzIG5vIHNlY29uZCB2YXJpYWJsZSBhbmQgbm9cbiAqIG5ldHdvcmsgcmVhZCBvbiBhIGNvbGQgc3RhcnQuXG4gKi9cbmNvbnN0IENPTExFQ1RPUl9DT05GSUdfU0NIRU1FID0gJ3lhbWw6JztcblxuLyoqXG4gKiBNaXJyb3JzIHRoZSBiYWtlZCBjb25maWcncyBwcm9jZXNzb3Igc2V0LCBhbmQgdGhlIE9SREVSIGlzIHRoZSBjb250cmFjdDpcbiAqXG4gKiAgIC0gYG1lbW9yeV9saW1pdGVyYCBmaXJzdCwgc28gYW4gZXhwb3J0IGJhY2tsb2cgaXMgc2hlZCBiZWZvcmUgaXQgaXMgY2hhcmdlZCB0byB0aGUgc2FtZSBtZW1vcnkgYnVkZ2V0XG4gKiAgICAgdGhlIGN1c3RvbWVyJ3MgaGFuZGxlciBhbGxvY2F0ZXMgZnJvbS4gUGVyY2VudGFnZXMsIG5vdCBgbGltaXRfbWliYCwgYmVjYXVzZSBvbmUgbGF5ZXIgc2VydmVzXG4gKiAgICAgZnVuY3Rpb25zIGZyb20gMTI4TUIgdG8gMTBHQi5cbiAqICAgLSBgZGVjb3VwbGVgIExBU1QuIExhbWJkYSBmcmVlemVzIHRoZSBzYW5kYm94IG9uY2UgdGhlIGhhbmRsZXIgcmV0dXJucyBhbmQgZXZlcnkgZXh0ZW5zaW9uIGhhcyBjYWxsZWRcbiAqICAgICAvbmV4dDsgYSBmcm96ZW4gc2FuZGJveCBydW5zIG5vIHRpbWVycywgc28gYSBiYXRjaCBzaXR0aW5nIGJlaGluZCBpdHMgdGltZW91dCBpcyBmbHVzaGVkIG9uIGEgbGF0ZXJcbiAqICAgICBpbnZvY2F0aW9uIG9yIGRyb3BwZWQgd2hlbiB0aGUgc2FuZGJveCBpcyByZWFwZWQuIGBkZWNvdXBsZWAgYWNrbm93bGVkZ2VzIHRoZSByZWNlaXZlIHBhdGhcbiAqICAgICBpbW1lZGlhdGVseSBhbmQgdHJhY2tzIGluLWZsaWdodCBleHBvcnRzLCB3aGljaCBpcyB3aGF0IGxldHMgdGhlIGV4dGVuc2lvbiBob2xkIC9uZXh0IG9wZW4gdW50aWwgdGhlXG4gKiAgICAgcXVldWUgZHJhaW5zIOKAlCBhZnRlciB0aGUgY2FsbGVyIGFscmVhZHkgaGFzIGl0cyByZXNwb25zZS5cbiAqL1xuY29uc3QgQ09MTEVDVE9SX1BST0NFU1NPUlMgPVxuICAne21lbW9yeV9saW1pdGVyOiB7Y2hlY2tfaW50ZXJ2YWw6IDFzLCBsaW1pdF9wZXJjZW50YWdlOiA1MCwgc3Bpa2VfbGltaXRfcGVyY2VudGFnZTogMjB9LCAnICtcbiAgJ2JhdGNoOiB7c2VuZF9iYXRjaF9zaXplOiA1MTIsIHRpbWVvdXQ6IDIwMG1zfSwgZGVjb3VwbGU6IG51bGx9JztcblxuLyoqIFZhbHVlIGFuIHVuc3VwcG9ydGVkIHNpZ25hbCdzIGBPVEVMXypfRVhQT1JURVJgIGlzIHNldCB0by4gKi9cbmV4cG9ydCBjb25zdCBFWFBPUlRFUl9OT05FID0gJ25vbmUnO1xuXG4vKiogVGhlIHRocmVlIGBPVEVMXypfRVhQT1JURVJgIHZhcmlhYmxlcywgaW4gdGhlIG9yZGVyIHRoZSBjb25uZWN0b3Igd3JpdGVzIHRoZW0uICovXG5leHBvcnQgY29uc3QgRU5WX1RSQUNFU19FWFBPUlRFUiA9ICdPVEVMX1RSQUNFU19FWFBPUlRFUic7XG5leHBvcnQgY29uc3QgRU5WX01FVFJJQ1NfRVhQT1JURVIgPSAnT1RFTF9NRVRSSUNTX0VYUE9SVEVSJztcbmV4cG9ydCBjb25zdCBFTlZfTE9HU19FWFBPUlRFUiA9ICdPVEVMX0xPR1NfRVhQT1JURVInO1xuXG4vKipcbiAqIFdoZXRoZXIgYSBzaWduYWwgaXMgZW5hYmxlZCwgZ2l2ZW4gdGhlIGNhbGxlcidzIHZhbHVlIGFuZCB0aGUgc2lnbmFsJ3Mgb3duIGRlZmF1bHQuXG4gKlxuICogVGhlIGRlZmF1bHRzIGFyZSBOT1QgdW5pZm9ybTogdHJhY2VzIGFyZSBvbiwgbWV0cmljcyBhbmQgbG9ncyBhcmUgb2ZmIChzZWUgYFNJR05BTF9ERUZBVUxUU2ApLiBTbyB0aGVcbiAqIGRlZmF1bHQgaGFzIHRvIHRyYXZlbCB3aXRoIHRoZSBzaWduYWwgcmF0aGVyIHRoYW4gYmVpbmcgZm9sZGVkIGludG8gb25lIFwidW5zZXQgbWVhbnMgb25cIiBydWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2lnbmFsRW5hYmxlZCh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCwgZGVmYXVsdEVuYWJsZWQ6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgcmV0dXJuIHZhbHVlID8/IGRlZmF1bHRFbmFibGVkO1xufVxuXG4vKipcbiAqIFdoaWNoIHNpZ25hbHMgYSBkZXN0aW5hdGlvbiBjYXJyaWVzIHdoZW4gdGhlIGNhbGxlciBzYXlzIG5vdGhpbmcuXG4gKlxuICogVFJBQ0VTIE9OTFkuIE1ldHJpY3MgYW5kIGxvZ3MgYXJlIG9wdC1pbiBiZWNhdXNlIHRoZSBjb3N0IG9mIGhhdmluZyB0aGVtIG9uIGJ5IGRlZmF1bHQgZmFsbHMgb24gcGVvcGxlXG4gKiB3aG8gbmV2ZXIgYXNrZWQgZm9yIHRoZW06IGEgZGVzdGluYXRpb24gdGhhdCBkb2VzIG5vdCBpbXBsZW1lbnQgYSBzaWduYWwgcmVmdXNlcyBldmVyeSBiYXRjaCBvZiBpdCwgYW5kXG4gKiB0aGUgaW4tTGFtYmRhIGNvbGxlY3RvciB0aGVuIHJldHJpZXMgb24gYW4gZXhwb25lbnRpYWwgYmFja29mZiBpbnNpZGUgYmlsbGVkIGR1cmF0aW9uLiBUcmFjZXMgYXJlIHdoYXRcbiAqIGFsbW9zdCBldmVyeSBkZXN0aW5hdGlvbiBhY2NlcHRzIGFuZCB3aGF0IGFsbW9zdCBldmVyeW9uZSBpbnN0cnVtZW50cyBmb3I7IHRoZSBvdGhlciB0d28gYXJlIGFcbiAqIGRlbGliZXJhdGUgY2hvaWNlIGFib3V0IHRoZSBkZXN0aW5hdGlvbiwgc28gdGhleSBhcmUgbWFkZSBkZWxpYmVyYXRlbHkuXG4gKlxuICogVHVybmluZyBvbmUgb24gaXMgYG1ldHJpY3M6IHRydWVgLiBFbmFibGluZyBhIHNpZ25hbCBhbHNvIGRyb3BzIHRoZSBgT1RFTF8qX0VYUE9SVEVSPW5vbmVgIG92ZXJyaWRlLCBzb1xuICogdGhlIFNESyBzdGFydHMgcHJvZHVjaW5nIGl0IGFnYWluLlxuICovXG5leHBvcnQgY29uc3QgU0lHTkFMX0RFRkFVTFRTID0geyB0cmFjZXM6IHRydWUsIG1ldHJpY3M6IGZhbHNlLCBsb2dzOiBmYWxzZSB9O1xuXG4vKiogVGhlIHRocmVlIHNpZ25hbHMgcmVzb2x2ZWQgYWdhaW5zdCB0aGVpciBkZWZhdWx0cyDigJQgdGhlIHNpbmdsZSBwbGFjZSB0aGF0IHBhaXJpbmcgaXMgZGVjaWRlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlZFNpZ25hbHMoZGVzdDogT2RpZ29zRGVzdGluYXRpb24pOiB7IHRyYWNlczogYm9vbGVhbjsgbWV0cmljczogYm9vbGVhbjsgbG9nczogYm9vbGVhbiB9IHtcbiAgcmV0dXJuIHtcbiAgICB0cmFjZXM6IHNpZ25hbEVuYWJsZWQoZGVzdC50cmFjZXMsIFNJR05BTF9ERUZBVUxUUy50cmFjZXMpLFxuICAgIG1ldHJpY3M6IHNpZ25hbEVuYWJsZWQoZGVzdC5tZXRyaWNzLCBTSUdOQUxfREVGQVVMVFMubWV0cmljcyksXG4gICAgbG9nczogc2lnbmFsRW5hYmxlZChkZXN0LmxvZ3MsIFNJR05BTF9ERUZBVUxUUy5sb2dzKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGEgZG91YmxlLXF1b3RlZCBZQU1MIHNjYWxhci5cbiAqXG4gKiBRdW90aW5nIHVuY29uZGl0aW9uYWxseSBpcyB3aGF0IGtlZXBzIGEgdmFsdWUgc3VjaCBhcyBhIGJhcmUgYGhvc3Q6NDMxN2AgZnJvbSBiZWluZyByZS1yZWFkIGFzIGEgbmVzdGVkXG4gKiBtYXBwaW5nIGluIGZsb3cgY29udGV4dC4gYEpTT04uc3RyaW5naWZ5YCBpcyB0aGUgVHlwZVNjcmlwdCBlcXVpdmFsZW50IG9mIHRoZSBjb25uZWN0b3Inc1xuICogYHN0cmNvbnYuUXVvdGVgIGZvciB0aGUgdm9jYWJ1bGFyeSB0aGF0IG1hdHRlcnMgaGVyZSAoYFxcXCJgIGFuZCBgXFxcXGApOyBib3RoIHByb2R1Y2UgdGhlIHNhbWUgb3V0cHV0IGZvclxuICogdGhlIEFTQ0lJIGVuZHBvaW50cywgaGVhZGVyIG5hbWVzIGFuZCBjcmVkZW50aWFscyB0aGlzIGV2ZXIgc2Vlcy5cbiAqL1xuZnVuY3Rpb24geWFtbFN0cmluZyhzOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocyk7XG59XG5cbi8qKlxuICogUGlja3MgdGhlIGV4cG9ydGVyIGJ5IHRoZSB0cmFuc3BvcnQgdGhlIGRlc3RpbmF0aW9uIGNvbmZpZ3VyZWQuIEEgZGVzdGluYXRpb24gY2FycmllcyBhIGdSUEMgZW5kcG9pbnRcbiAqICh0eXBlIGBvdGxwYCkgb3IgYW4gT1RMUC9IVFRQIG9uZSAodHlwZSBgb3RscGh0dHBgKTsgdGhlIHR3byBhcmUgZGlmZmVyZW50IGNvbGxlY3RvciBjb21wb25lbnRzIHdpdGhcbiAqIGRpZmZlcmVudCBlbmRwb2ludCBncmFtbWFycywgc28gdGhpcyBpcyBhIGdlbnVpbmUgYnJhbmNoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhwb3J0ZXJOYW1lRm9yKGRlc3Q6IE9kaWdvc0Rlc3RpbmF0aW9uKTogc3RyaW5nIHtcbiAgcmV0dXJuIGRlc3QuZW5kcG9pbnQgPyAnb3RscCcgOiAnb3RscGh0dHAnO1xufVxuXG4vKipcbiAqIEVtaXRzIHRoZSBkZXN0aW5hdGlvbidzIHBlci1yZXF1ZXN0IGhlYWRlcnMg4oCUIGluIHByYWN0aWNlIGl0cyBjcmVkZW50aWFsLiBFbXB0eSB3aGVuIHRoZSBkZXN0aW5hdGlvblxuICogbmVlZHMgbm9uZSwgc28gbm8gaGVhZGVyIGJsb2NrIGlzIHdyaXR0ZW4gYXQgYWxsIHJhdGhlciB0aGFuIGFuIGVtcHR5IG9uZS5cbiAqXG4gKiBLZXlzIGFyZSBzb3J0ZWQgc28gdGhlIHJlbmRlcmVkIGNvbmZpZyBpcyBieXRlLWlkZW50aWNhbCBhY3Jvc3Mgc3ludGhzLiBUaGUgc3RyaW5nIGlzIGNvbXBhcmVkIGFnYWluc3RcbiAqIHRoZSBsaXZlIGZ1bmN0aW9uJ3MgZW52aXJvbm1lbnQgdG8gZGVjaWRlIHdoZXRoZXIgYW4gdXBkYXRlIGlzIG5lZWRlZCwgYW5kIG1hcCBvcmRlciB3b3VsZCBvdGhlcndpc2VcbiAqIG1ha2UgZXZlcnkgZGVwbG95IGxvb2sgbGlrZSBhIGNoYW5nZS5cbiAqL1xuZnVuY3Rpb24gcmVuZGVySGVhZGVycyhoZWFkZXJzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSk6IHN0cmluZyB7XG4gIGlmICghaGVhZGVycykge1xuICAgIHJldHVybiAnJztcbiAgfVxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaGVhZGVycykuc29ydCgpO1xuICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgY29uc3QgcmVuZGVyZWQgPSBrZXlzLm1hcCgoaykgPT4gYCR7eWFtbFN0cmluZyhrKX06ICR7eWFtbFN0cmluZyhoZWFkZXJzW2tdKX1gKS5qb2luKCcsICcpO1xuICByZXR1cm4gYCwgaGVhZGVyczogeyR7cmVuZGVyZWR9fWA7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckV4cG9ydGVyKGRlc3Q6IE9kaWdvc0Rlc3RpbmF0aW9uKTogc3RyaW5nIHtcbiAgbGV0IG91dDogc3RyaW5nO1xuICBpZiAoZGVzdC5lbmRwb2ludCkge1xuICAgIC8vIHRscy5pbnNlY3VyZSBhcHBsaWVzIHRvIHRoZSBnUlBDIGV4cG9ydGVyIG9ubHk7IHRoZSBIVFRQIGV4cG9ydGVyIHRha2VzIHRoZSBzY2hlbWUgZnJvbSB0aGUgVVJMLlxuICAgIG91dCA9IGB7b3RscDoge2VuZHBvaW50OiAke3lhbWxTdHJpbmcoZGVzdC5lbmRwb2ludCl9LCB0bHM6IHtpbnNlY3VyZTogJHtkZXN0Lmluc2VjdXJlID09PSB0cnVlfX1gO1xuICB9IGVsc2UgaWYgKGRlc3QuaHR0cEVuZHBvaW50KSB7XG4gICAgb3V0ID0gYHtvdGxwaHR0cDoge2VuZHBvaW50OiAke3lhbWxTdHJpbmcoZGVzdC5odHRwRW5kcG9pbnQpfWA7XG4gIH0gZWxzZSB7XG4gICAgLy8gUmVhY2hlZCB3aGVuIGEgZGVzdGluYXRpb24gY2FycmllcyBuZWl0aGVyIHRyYW5zcG9ydC4gRmFpbGluZyBoZXJlIGlzIHRoZSB3aG9sZSBwb2ludDogdGhlXG4gICAgLy8gYWx0ZXJuYXRpdmUgaXMgYSBjb2xsZWN0b3IgdGhhdCBleGl0cyBvbiBzdGFydHVwIHdoaWxlIHRoZSBmdW5jdGlvbiBpcyByZXBvcnRlZCBoZWFsdGh5LlxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdPZGlnb3MgZGVzdGluYXRpb24gaGFzIG5laXRoZXIgYGVuZHBvaW50YCAoT1RMUC9nUlBDKSBub3IgYGh0dHBFbmRwb2ludGAgKE9UTFAvSFRUUCksICcgK1xuICAgICAgICAnc28gdGhlIGluLUxhbWJkYSBjb2xsZWN0b3Igd291bGQgaGF2ZSBub3doZXJlIHRvIGV4cG9ydC4nLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGAke291dH0ke3JlbmRlckhlYWRlcnMoZGVzdC5oZWFkZXJzKX19fWA7XG59XG5cbi8qKlxuICogQnVpbGRzIGEgcGlwZWxpbmUgb25seSBmb3IgdGhlIHNpZ25hbHMgdGhlIGRlc3RpbmF0aW9uIGFjY2VwdHMuIEEgc2lnbmFsIHdpdGggbm8gcGlwZWxpbmUgaXMgcmVmdXNlZCBhdFxuICogdGhlIHJlY2VpdmVyLCB3aGljaCBpcyB0aGUgYmVoYXZpb3VyIHdlIHdhbnQ6IHRoZSBTREsgaXMgdG9sZCBub3QgdG8gcHJvZHVjZSBpdCBlaXRoZXIgKHNlZVxuICogYGV4cG9ydGVyT3ZlcnJpZGVGb3JgKSwgYW5kIHRoZSB0d28gdG9nZXRoZXIgbWVhbiBhbiB1bmFjY2VwdGVkIHNpZ25hbCBpcyBuZXZlciBnZW5lcmF0ZWQsIG5ldmVyXG4gKiBleHBvcnRlZCwgYW5kIG5ldmVyIGEgcGVyLWJhdGNoIGVycm9yIGFnYWluc3QgYSBiYWNrZW5kIHRoYXQgZG9lcyBub3QgaW1wbGVtZW50IGl0LlxuICovXG5mdW5jdGlvbiByZW5kZXJQaXBlbGluZXMoZGVzdDogT2RpZ29zRGVzdGluYXRpb24sIGV4cG9ydGVyTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGVuYWJsZWQgPSByZXNvbHZlZFNpZ25hbHMoZGVzdCk7XG4gIGNvbnN0IHNpZ25hbHM6IEFycmF5PFtzdHJpbmcsIGJvb2xlYW5dPiA9IFtcbiAgICBbJ3RyYWNlcycsIGVuYWJsZWQudHJhY2VzXSxcbiAgICBbJ21ldHJpY3MnLCBlbmFibGVkLm1ldHJpY3NdLFxuICAgIFsnbG9ncycsIGVuYWJsZWQubG9nc10sXG4gIF07XG4gIGZvciAoY29uc3QgW25hbWUsIGVuYWJsZWRdIG9mIHNpZ25hbHMpIHtcbiAgICBpZiAoIWVuYWJsZWQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgYCR7bmFtZX06IHtyZWNlaXZlcnM6IFtvdGxwXSwgcHJvY2Vzc29yczogW21lbW9yeV9saW1pdGVyLCBiYXRjaCwgZGVjb3VwbGVdLCBleHBvcnRlcnM6IFske2V4cG9ydGVyTmFtZX1dfWAsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gcGFydHMubGVuZ3RoID09PSAwID8gJycgOiBgeyR7cGFydHMuam9pbignLCAnKX19YDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB2YWx1ZSBhIHNpZ25hbCdzIGBPVEVMXypfRVhQT1JURVJgIG11c3QgaG9sZDogYG5vbmVgIHRvIHN1cHByZXNzIGEgc2lnbmFsIHRoZSBkZXN0aW5hdGlvblxuICogZG9lcyBub3QgYWNjZXB0LCBvciBgdW5kZWZpbmVkYCBtZWFuaW5nIHRoZSB2YXJpYWJsZSBtdXN0IGJlIEFCU0VOVCBiZWNhdXNlIHRoZSBTREsncyBvd24gZGVmYXVsdCBpc1xuICogYWxyZWFkeSB3aGF0IHdlIHdhbnQuXG4gKlxuICogT25seSB0aGUgXCJub25lXCIgc2lkZSBpcyB3cml0dGVuLCBiZWNhdXNlIGBvdGxwYCBpcyBhbHJlYWR5IGV2ZXJ5IE9wZW5UZWxlbWV0cnkgU0RLJ3MgZGVmYXVsdCBmb3IgYWxsXG4gKiB0aHJlZSBzaWduYWxzIOKAlCBzZXR0aW5nIGl0IHdvdWxkIHJlc3RhdGUgdGhlIGRlZmF1bHQgaW4gdGhyZWUgdmFyaWFibGVzIG9uIGV2ZXJ5IGZ1bmN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhwb3J0ZXJPdmVycmlkZUZvcihzdXBwb3J0ZWQ6IGJvb2xlYW4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gc3VwcG9ydGVkID8gdW5kZWZpbmVkIDogRVhQT1JURVJfTk9ORTtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBjb21wbGV0ZSBjb2xsZWN0b3IgY29uZmlndXJhdGlvbiBmb3Igb25lIGRlc3RpbmF0aW9uLlxuICpcbiAqIEB0aHJvd3MgaWYgdGhlIGRlc3RpbmF0aW9uIG5hbWVzIG5laXRoZXIgdHJhbnNwb3J0LCBib3RoIHRyYW5zcG9ydHMsIG9yIG5vIHNpZ25hbHMgYXQgYWxsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyQ29sbGVjdG9yQ29uZmlnKGRlc3Q6IE9kaWdvc0Rlc3RpbmF0aW9uKTogc3RyaW5nIHtcbiAgaWYgKGRlc3QuZW5kcG9pbnQgJiYgZGVzdC5odHRwRW5kcG9pbnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnT2RpZ29zIGRlc3RpbmF0aW9uIHNldHMgYm90aCBgZW5kcG9pbnRgIChPVExQL2dSUEMpIGFuZCBgaHR0cEVuZHBvaW50YCAoT1RMUC9IVFRQKTsgJyArXG4gICAgICAgICd0aGV5IHNlbGVjdCBkaWZmZXJlbnQgY29sbGVjdG9yIGV4cG9ydGVycywgc28gZXhhY3RseSBvbmUgbXVzdCBiZSBzZXQuJyxcbiAgICApO1xuICB9XG5cbiAgLy8gVGhlIHR3byBmaWVsZHMgaGF2ZSBkaWZmZXJlbnQgZW5kcG9pbnQgR1JBTU1BUlMsIGFuZCBnZXR0aW5nIHRoZW0gd3JvbmcgaXMgdGhlIHdvcnN0IGZhaWx1cmUgbW9kZSB0aGlzXG4gIC8vIHBhY2thZ2UgaGFzOiB0aGUgY29sbGVjdG9yIGFjY2VwdHMgdGhlIGNvbmZpZ3VyYXRpb24sIGZhaWxzIHRvIGJ1aWxkIGl0cyBleHBvcnRlciwgYW5kIGV4aXRzIOKAlCBsZWF2aW5nXG4gIC8vIHRoZSBmdW5jdGlvbiBpbnN0cnVtZW50ZWQsIHJlcG9ydGluZyBoZWFsdGh5LCBhbmQgZXhwb3J0aW5nIG5vdGhpbmcuIEJvdGggY2hlY2tzIGFyZSB0aGVyZWZvcmUgc3ludGhcbiAgLy8gZXJyb3JzIHJhdGhlciB0aGFuIGRvY3VtZW50YXRpb24uXG4gIGlmIChkZXN0LmVuZHBvaW50ICYmIGRlc3QuZW5kcG9pbnQuaW5jbHVkZXMoJzovLycpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYE9kaWdvcyBkZXN0aW5hdGlvbiBcXGBlbmRwb2ludFxcYCBpcyBcIiR7ZGVzdC5lbmRwb2ludH1cIiwgYnV0IHRoZSBnUlBDIGV4cG9ydGVyIHRha2VzIGhvc3Q6cG9ydCB3aXRoIGAgK1xuICAgICAgICAnbm8gc2NoZW1lLiBVc2UgYGh0dHBFbmRwb2ludGAgZm9yIGEgc2NoZW1lLXF1YWxpZmllZCBPVExQL0hUVFAgVVJMLicsXG4gICAgKTtcbiAgfVxuICBpZiAoZGVzdC5odHRwRW5kcG9pbnQgJiYgIS9eaHR0cHM/OlxcL1xcLy8udGVzdChkZXN0Lmh0dHBFbmRwb2ludCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgT2RpZ29zIGRlc3RpbmF0aW9uIFxcYGh0dHBFbmRwb2ludFxcYCBpcyBcIiR7ZGVzdC5odHRwRW5kcG9pbnR9XCIsIGJ1dCB0aGUgT1RMUC9IVFRQIGV4cG9ydGVyIHRha2VzIGEgYCArXG4gICAgICAgICdzY2hlbWUtcXVhbGlmaWVkIFVSTCAoaHR0cDovLyBvciBodHRwczovLykuIFVzZSBgZW5kcG9pbnRgIGZvciBhIGJhcmUgZ1JQQyBob3N0OnBvcnQuJyxcbiAgICApO1xuICB9XG5cbiAgY29uc3QgZXhwb3J0ZXIgPSByZW5kZXJFeHBvcnRlcihkZXN0KTtcbiAgY29uc3QgcGlwZWxpbmVzID0gcmVuZGVyUGlwZWxpbmVzKGRlc3QsIGV4cG9ydGVyTmFtZUZvcihkZXN0KSk7XG4gIGlmIChwaXBlbGluZXMgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ09kaWdvcyBkZXN0aW5hdGlvbiBhY2NlcHRzIG5vIHRlbGVtZXRyeSBzaWduYWxzLCBzbyB0aGUgY29sbGVjdG9yIHdvdWxkIGhhdmUgbm8gcGlwZWxpbmUgdG8gYnVpbGQgJyArXG4gICAgICAgICdhbmQgd291bGQgZmFpbCB0byBzdGFydC4gTm90ZSB0aGF0IG1ldHJpY3MgYW5kIGxvZ3MgYXJlIE9GRiBieSBkZWZhdWx0IOKAlCB3aXRoIGB0cmFjZXM6IGZhbHNlYCB0aGUgJyArXG4gICAgICAgICdkZXN0aW5hdGlvbiBoYXMgbm90aGluZyBsZWZ0IHVubGVzcyB5b3UgYWxzbyBwYXNzIGBtZXRyaWNzOiB0cnVlYCBvciBgbG9nczogdHJ1ZWAuJyxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBDT0xMRUNUT1JfQ09ORklHX1NDSEVNRSArXG4gICAgJ3tyZWNlaXZlcnM6IHtvdGxwOiB7cHJvdG9jb2xzOiAnICtcbiAgICAvLyBCb3VuZCB0byBsb2NhbGhvc3Q6IHRoZSByZWNlaXZlciBleGlzdHMgb25seSBmb3IgdGhlIGluLXByb2Nlc3MgU0RLLiBCaW5kaW5nIGl0IHdpZGVyIHdvdWxkIGV4cG9zZVxuICAgIC8vIGFuIHVuYXV0aGVudGljYXRlZCBPVExQIGVuZHBvaW50IG9uIHRoZSBzYW5kYm94J3MgbmV0d29yayBpbnRlcmZhY2UuXG4gICAgJ3tncnBjOiB7ZW5kcG9pbnQ6IFwibG9jYWxob3N0OjQzMTdcIn0sIGh0dHA6IHtlbmRwb2ludDogXCJsb2NhbGhvc3Q6NDMxOFwifX19fSwgJyArXG4gICAgJ3Byb2Nlc3NvcnM6ICcgK1xuICAgIENPTExFQ1RPUl9QUk9DRVNTT1JTICtcbiAgICAnLCBleHBvcnRlcnM6ICcgK1xuICAgIGV4cG9ydGVyICtcbiAgICAnLCBzZXJ2aWNlOiB7dGVsZW1ldHJ5OiB7bWV0cmljczoge2xldmVsOiBub25lfX0sIHBpcGVsaW5lczogJyArXG4gICAgcGlwZWxpbmVzICtcbiAgICAnfX0nXG4gICk7XG59XG4iXX0=
@@ -4,12 +4,12 @@
4
4
  * Produced by cdk/scripts/generate-layers.ts from artifacts.json and manifest/layers.json.
5
5
  * Run `npm run generate` (or `npm run build`) to refresh it.
6
6
  *
7
- * Odigos artifact version: v0.0.10
7
+ * Odigos artifact version: v0.0.12
8
8
  */
9
9
  /** Release this table was generated from. Empty before the first release. */
10
- export declare const ODIGOS_VERSION = "v0.0.10";
10
+ export declare const ODIGOS_VERSION = "v0.0.12";
11
11
  /** SAR semantic version matching ODIGOS_VERSION (no leading "v"). */
12
- export declare const SAR_SEMANTIC_VERSION = "0.0.10";
12
+ export declare const SAR_SEMANTIC_VERSION = "0.0.12";
13
13
  /** Public layer ARNs, keyed "<region>/<language>/<architecture>". */
14
14
  export declare const LAYER_ARNS: {
15
15
  [key: string]: string;