@pipeline-builder/pipeline-core 4.1.23 → 4.1.25

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.
@@ -2,6 +2,11 @@ import type { AppConfig } from './config-types.js';
2
2
  /**
3
3
  * Core constants — configurable via environment variables with sensible defaults.
4
4
  */
5
+ /**
6
+ * Re-exported from api-core so the API schema and {@link PipelineBuilder} refuse
7
+ * the SAME tag keys; see `types/reserved-tags.ts` for why both checks exist.
8
+ */
9
+ export { RESERVED_TAG_KEYS, RESERVED_TAG_PREFIXES, isReservedTagKey } from '@pipeline-builder/api-core';
5
10
  export declare class CoreConstants {
6
11
  static readonly NAME_PATTERN: RegExp;
7
12
  static readonly HANDLER_TIMEOUT_MS = 25000;
@@ -7,6 +7,11 @@ import { loadServerConfig, loadAuthConfig, loadRateLimitConfig, validateServerCo
7
7
  /**
8
8
  * Core constants — configurable via environment variables with sensible defaults.
9
9
  */
10
+ /**
11
+ * Re-exported from api-core so the API schema and {@link PipelineBuilder} refuse
12
+ * the SAME tag keys; see `types/reserved-tags.ts` for why both checks exist.
13
+ */
14
+ export { RESERVED_TAG_KEYS, RESERVED_TAG_PREFIXES, isReservedTagKey } from '@pipeline-builder/api-core';
10
15
  export class CoreConstants {
11
16
  static NAME_PATTERN = /^[a-z0-9-]+$/;
12
17
  // Custom Resource Handler configuration (must be less than Lambda timeout of 30s to allow response handling).
@@ -189,4 +194,4 @@ export class Config {
189
194
  return this.get(section);
190
195
  }
191
196
  }
192
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWcvYXBwLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLGNBQWMsSUFBSSxxQkFBcUIsRUFBRSxrQkFBa0IsSUFBSSx5QkFBeUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXRKLE9BQU8sS0FBSyxnQkFBZ0IsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRCxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLHFCQUFxQixFQUNyQixnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLHVCQUF1QixFQUN2QixvQkFBb0IsRUFDcEIsYUFBYSxHQUNkLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixjQUFjLEVBQ2QsbUJBQW1CLEVBQ25CLG9CQUFvQixFQUNwQixrQkFBa0IsR0FDbkIsTUFBTSxvQkFBb0IsQ0FBQztBQUU1Qjs7R0FFRztBQUNILE1BQU0sT0FBTyxhQUFhO0lBQ3hCLE1BQU0sQ0FBVSxZQUFZLEdBQUcsY0FBYyxDQUFDO0lBRTlDLDhHQUE4RztJQUM5Ryx3R0FBd0c7SUFDeEcsc0dBQXNHO0lBQ3RHLE1BQU0sQ0FBVSxrQkFBa0IsR0FBRyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQztJQUN6RSx1RUFBdUU7SUFDdkUsTUFBTSxDQUFVLG9CQUFvQixHQUFHLGdCQUFnQixDQUFDLG9CQUFvQixDQUFDO0lBRTdFLE1BQU0sQ0FBVSx3QkFBd0IsR0FBRyxnQkFBZ0IsQ0FBQyx3QkFBd0IsQ0FBQztJQUNyRixNQUFNLENBQVUsbUJBQW1CLEdBQUcsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUM7SUFDM0UsTUFBTSxDQUFVLHNCQUFzQixHQUFHLGdCQUFnQixDQUFDLHNCQUFzQixDQUFDO0lBRWpGLG9DQUFvQztJQUNwQyxp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QUMsT0FBMEIsQ0FBQyxDQUFDO0lBQzlDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBlbnZJbnQsIGVudlN0ciwgTUFYX1BBR0VfTElNSVQgYXMgU0hBUkVEX01BWF9QQUdFX0xJTUlULCBERUZBVUxUX1BBR0VfTElNSVQgYXMgU0hBUkVEX0RFRkFVTFRfUEFHRV9MSU1JVCB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB0eXBlIHsgQXBwQ29uZmlnIH0gZnJvbSAnLi9jb25maWctdHlwZXMuanMnO1xuaW1wb3J0ICogYXMgSGFuZGxlckNvbnN0YW50cyBmcm9tICcuL2hhbmRsZXItY29uc3RhbnRzLmpzJztcbmltcG9ydCB7XG4gIGxvYWRSZWdpc3RyeUNvbmZpZyxcbiAgbG9hZFBsdWdpbkJ1aWxkQ29uZmlnLFxuICBsb2FkRG9ja2VyQ29uZmlnLFxuICBsb2FkRGF0YWJhc2VDb25maWcsXG4gIGxvYWRPYnNlcnZhYmlsaXR5Q29uZmlnLFxuICBsb2FkQ29tcGxpYW5jZUNvbmZpZyxcbiAgbG9hZEFXU0NvbmZpZyxcbn0gZnJvbSAnLi9pbmZyYXN0cnVjdHVyZS1jb25maWcuanMnO1xuaW1wb3J0IHtcbiAgbG9hZFNlcnZlckNvbmZpZyxcbiAgbG9hZEF1dGhDb25maWcsXG4gIGxvYWRSYXRlTGltaXRDb25maWcsXG4gIHZhbGlkYXRlU2VydmVyQ29uZmlnLFxuICB2YWxpZGF0ZUF1dGhDb25maWcsXG59IGZyb20gJy4vc2VydmVyLWNvbmZpZy5qcyc7XG5cbi8qKlxuICogQ29yZSBjb25zdGFudHMg4oCUIGNvbmZpZ3VyYWJsZSB2aWEgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdpdGggc2Vuc2libGUgZGVmYXVsdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb3JlQ29uc3RhbnRzIHtcbiAgc3RhdGljIHJlYWRvbmx5IE5BTUVfUEFUVEVSTiA9IC9eW2EtejAtOS1dKyQvO1xuXG4gIC8vIEN1c3RvbSBSZXNvdXJjZSBIYW5kbGVyIGNvbmZpZ3VyYXRpb24gKG11c3QgYmUgbGVzcyB0aGFuIExhbWJkYSB0aW1lb3V0IG9mIDMwcyB0byBhbGxvdyByZXNwb25zZSBoYW5kbGluZykuXG4gIC8vIFNvdXJjZWQgZnJvbSB0aGUgZGVwZW5kZW5jeS1mcmVlIGBoYW5kbGVyLWNvbnN0YW50cy50c2AgbGVhZiDigJQgdGhlIExhbWJkYSBoYW5kbGVyIGltcG9ydHMgdGhhdCBtb2R1bGVcbiAgLy8gZGlyZWN0bHkgKG5vdCB0aGlzIG9uZSkgc28gaXRzIGVzYnVpbGQgYnVuZGxlIG5ldmVyIHB1bGxzIGluIGF3cy1jZGstbGliIHZpYSBpbmZyYXN0cnVjdHVyZS1jb25maWcuXG4gIHN0YXRpYyByZWFkb25seSBIQU5ETEVSX1RJTUVPVVRfTVMgPSBIYW5kbGVyQ29uc3RhbnRzLkhBTkRMRVJfVElNRU9VVF9NUztcbiAgLyoqIERlZmF1bHQgcGxhdGZvcm0gVVJMIGZhbGxiYWNrIHdoZW4gUExBVEZPUk1fQkFTRV9VUkwgaXMgbm90IHNldC4gKi9cbiAgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfUExBVEZPUk1fVVJMID0gSGFuZGxlckNvbnN0YW50cy5ERUZBVUxUX1BMQVRGT1JNX1VSTDtcblxuICBzdGF0aWMgcmVhZG9ubHkgSEFORExFUl9ERUZBVUxUX0JBU0VfVVJMID0gSGFuZGxlckNvbnN0YW50cy5IQU5ETEVSX0RFRkFVTFRfQkFTRV9VUkw7XG4gIHN0YXRpYyByZWFkb25seSBIQU5ETEVSX01BWF9SRVRSSUVTID0gSGFuZGxlckNvbnN0YW50cy5IQU5ETEVSX01BWF9SRVRSSUVTO1xuICBzdGF0aWMgcmVhZG9ubHkgSEFORExFUl9SRVRSWV9ERUxBWV9NUyA9IEhhbmRsZXJDb25zdGFudHMuSEFORExFUl9SRVRSWV9ERUxBWV9NUztcblxuICAvLyBQbHVnaW4gYnVpbGQgcXVldWUgY29uZmlndXJhdGlvbi5cbiAgLy8gTk9URTogbWF4QXR0ZW1wdHMgLyBiYWNrb2ZmRGVsYXlNcyAvIHdvcmtlclRpbWVvdXRNcyBhcmUgTk9UIGR1cGxpY2F0ZWQgaGVyZSDigJRcbiAgLy8gYGxvYWRQbHVnaW5CdWlsZENvbmZpZ2AgKGluZnJhc3RydWN0dXJlLWNvbmZpZy50cykgaXMgdGhlaXIgc2luZ2xlIHNvdXJjZSBvZlxuICAvLyB0cnV0aCwgcmVhZCB2aWEgYENvbmZpZy5nZXQoJ3BsdWdpbkJ1aWxkJylgLlxuICBzdGF0aWMgcmVhZG9ubHkgUExVR0lOX0JVSUxEX1FVRVVFX05BTUUgPSBlbnZTdHIoJ1BMVUdJTl9CVUlMRF9RVUVVRV9OQU1FJywgJ3BsdWdpbi1idWlsZCcpO1xuICBzdGF0aWMgcmVhZG9ubHkgUExVR0lOX0JVSUxEX0NPTVBMRVRFRF9SRVRFTlRJT05fU0VDUyA9IGVudkludCgnUExVR0lOX0JVSUxEX0NPTVBMRVRFRF9SRVRFTlRJT05fU0VDUycsIDNfNjAwKTsgLy8gMSBoclxuICBzdGF0aWMgcmVhZG9ubHkgUExVR0lOX0JVSUxEX0ZBSUxFRF9SRVRFTlRJT05fU0VDUyA9IGVudkludCgnUExVR0lOX0JVSUxEX0ZBSUxFRF9SRVRFTlRJT05fU0VDUycsIDg2XzQwMCk7IC8vIDI0IGhyXG5cbiAgLy8gUGFnaW5hdGlvbiBhbmQgbGltaXRzIOKAlCBzaW5nbGUgc291cmNlIGluIGFwaS1jb3JlICh2YWxpZGF0aW9uL2NvbW1vbi1zY2hlbWFzKVxuICAvLyBzbyB0aGUgdmFsaWRhdGlvbiBsYXllciwgdGhpcyBjb25maWcsIGFuZCBwaXBlbGluZS1kYXRhJ3MgQ3J1ZFNlcnZpY2UgbmV2ZXIgZHJpZnQuXG4gIHN0YXRpYyByZWFkb25seSBNQVhfUEFHRV9MSU1JVCA9IFNIQVJFRF9NQVhfUEFHRV9MSU1JVDtcbiAgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfUEFHRV9MSU1JVCA9IFNIQVJFRF9ERUZBVUxUX1BBR0VfTElNSVQ7XG4gIHN0YXRpYyByZWFkb25seSBNQVhfUFJPTVBUX0xFTkdUSCA9IGVudkludCgnTUFYX1BST01QVF9MRU5HVEgnLCA1XzAwMCk7XG4gIHN0YXRpYyByZWFkb25seSBQTFVHSU5fTUFYX1VQTE9BRF9NQiA9IGVudkludCgnUExVR0lOX01BWF9VUExPQURfTUInLCA0XzA5Nik7XG4gIHN0YXRpYyByZWFkb25seSBQSVBFTElORV9OQU1FX01BWF9MRU5HVEggPSBlbnZJbnQoJ1BJUEVMSU5FX05BTUVfTUFYX0xFTkdUSCcsIDEwMCk7XG4gIHN0YXRpYyByZWFkb25seSBERUZBVUxUX1BMVUdJTl9WRVJTSU9OID0gZW52U3RyKCdERUZBVUxUX1BMVUdJTl9WRVJTSU9OJywgJzEuMC4wJyk7XG5cbiAgLy8gU1NFIHN0cmVhbSB0aW1lb3V0IGZvciBBSSBnZW5lcmF0aW9uIGVuZHBvaW50c1xuICBzdGF0aWMgcmVhZG9ubHkgU1NFX1NUUkVBTV9USU1FT1VUX01TID0gZW52SW50KCdTU0VfU1RSRUFNX1RJTUVPVVRfTVMnLCAzMDBfMDAwKTsgLy8gNSBtaW5cblxuICAvLyBHaXQgcHJvdmlkZXIgQVBJIGJhc2UgVVJMcyAoY29uZmlndXJhYmxlIGZvciBlbnRlcnByaXNlIGluc3RhbmNlcylcbiAgc3RhdGljIHJlYWRvbmx5IEdJVEhVQl9BUElfQkFTRV9VUkwgPSBlbnZTdHIoJ0dJVEhVQl9BUElfQkFTRV9VUkwnLCAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbScpO1xuICBzdGF0aWMgcmVhZG9ubHkgQklUQlVDS0VUX0FQSV9CQVNFX1VSTCA9IGVudlN0cignQklUQlVDS0VUX0FQSV9CQVNFX1VSTCcsICdodHRwczovL2FwaS5iaXRidWNrZXQub3JnLzIuMCcpO1xuXG4gIC8vIEJ1bGsgb3BlcmF0aW9ucyBhbmQgZXZlbnQgaW5nZXN0aW9uXG4gIHN0YXRpYyByZWFkb25seSBNQVhfQlVMS19JVEVNUyA9IGVudkludCgnTUFYX0JVTEtfSVRFTVMnLCAxMDApO1xuICBzdGF0aWMgcmVhZG9ubHkgTUFYX0VWRU5UU19QRVJfQkFUQ0ggPSBlbnZJbnQoJ01BWF9FVkVOVFNfUEVSX0JBVENIJywgMTAwKTtcblxuICAvLyBTZWNyZXRzIE1hbmFnZXIgcGF0aCBwcmVmaXggZm9yIG9yZy1zY29wZWQgc2VjcmV0c1xuICBzdGF0aWMgcmVhZG9ubHkgU0VDUkVUU19QQVRIX1BSRUZJWCA9IGVudlN0cignU0VDUkVUU19QQVRIX1BSRUZJWCcsICdwaXBlbGluZS1idWlsZGVyJyk7XG5cbiAgLyoqIEJ1aWxkIGEgU2VjcmV0cyBNYW5hZ2VyIHBhdGg6IHtwcmVmaXh9L3tvcmdJZH0ve25hbWV9ICovXG4gIHN0YXRpYyBzZWNyZXRQYXRoKG9yZ0lkOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke0NvcmVDb25zdGFudHMuU0VDUkVUU19QQVRIX1BSRUZJWH0vJHtvcmdJZH0vJHtuYW1lfWA7XG4gIH1cblxuICAvLyBEYXRhYmFzZSBjb25uZWN0aW9uXG4gIHN0YXRpYyByZWFkb25seSBEQl9NQVhfUkVUUklFUyA9IGVudkludCgnREJfTUFYX1JFVFJJRVMnLCAzKTtcbiAgc3RhdGljIHJlYWRvbmx5IERCX1JFVFJZX0RFTEFZX01TID0gZW52SW50KCdEQl9SRVRSWV9ERUxBWV9NUycsIDFfMDAwKTsgLy8gMXNcblxuICAvLyBSZXNwb25zZSBjb21wcmVzc2lvblxuICBzdGF0aWMgcmVhZG9ubHkgQ09NUFJFU1NJT05fVEhSRVNIT0xEX0JZVEVTID0gZW52SW50KCdDT01QUkVTU0lPTl9USFJFU0hPTERfQllURVMnLCAxXzAyNCk7XG5cbiAgLy8gSWRlbXBvdGVuY3lcbiAgc3RhdGljIHJlYWRvbmx5IElERU1QT1RFTkNZX1RUTF9NUyA9IGVudkludCgnSURFTVBPVEVOQ1lfVFRMX01TJywgMzAwXzAwMCk7IC8vIDUgbWluXG4gIC8vIExpZmV0aW1lIG9mIGFuIElOLUZMSUdIVCByZXNlcnZhdGlvbiAobm8gcmVzcG9uc2UgeWV0KS4gQm91bmRzIGhvdyBsb25nIGFcbiAgLy8ga2V5IHN0YXlzIGxvY2tlZCAoNDA5KSB3aGVuIHRoZSBwcm9jZXNzIGRpZXMgbWlkLWhhbmRsZXI7IG11c3QgZXhjZWVkIHRoZVxuICAvLyBsb25nZXN0IGxlZ2l0aW1hdGUgaGFuZGxlciBydW4sIHNpbmNlIGFuIGV4cGlyZWQgcmVzZXJ2YXRpb24gbGV0cyBhXG4gIC8vIGR1cGxpY2F0ZSB0aHJvdWdoLlxuICBzdGF0aWMgcmVhZG9ubHkgSURFTVBPVEVOQ1lfUEVORElOR19UVExfTVMgPSBlbnZJbnQoJ0lERU1QT1RFTkNZX1BFTkRJTkdfVFRMX01TJywgMTIwXzAwMCk7IC8vIDIgbWluXG4gIHN0YXRpYyByZWFkb25seSBJREVNUE9URU5DWV9NQVhfU1RPUkVfU0laRSA9IGVudkludCgnSURFTVBPVEVOQ1lfTUFYX1NUT1JFX1NJWkUnLCAxMF8wMDApO1xuICBzdGF0aWMgcmVhZG9ubHkgSURFTVBPVEVOQ1lfQ0xFQU5VUF9JTlRFUlZBTF9NUyA9IGVudkludCgnSURFTVBPVEVOQ1lfQ0xFQU5VUF9JTlRFUlZBTF9NUycsIDYwXzAwMCk7IC8vIDEgbWluXG5cblxuICAvLyBTZXJ2ZXItc2lkZSBjYWNoZSBUVExzIChzZWNvbmRzKVxuICBzdGF0aWMgcmVhZG9ubHkgQ0FDSEVfVFRMX0VOVElUWSA9IGVudkludCgnQ0FDSEVfVFRMX0VOVElUWScsIDYwKTsgLy8gcGx1Z2luL3BpcGVsaW5lIGZpbmRCeUlkXG4gIHN0YXRpYyByZWFkb25seSBDQUNIRV9UVExfTUVTU0FHRSA9IGVudkludCgnQ0FDSEVfVFRMX01FU1NBR0UnLCAzMDApOyAvLyBhbm5vdW5jZW1lbnRzL2NvbnZlcnNhdGlvbnMgKDUgbWluKVxuICBzdGF0aWMgcmVhZG9ubHkgQ0FDSEVfVFRMX1JFUE9SVF9JTlZFTlRPUlkgPSBlbnZJbnQoJ0NBQ0hFX1RUTF9SRVBPUlRfSU5WRU5UT1JZJywgMzAwKTsgLy8gcGx1Z2luIHN1bW1hcnkvZGlzdHJpYnV0aW9uICg1IG1pbilcbiAgc3RhdGljIHJlYWRvbmx5IENBQ0hFX1RUTF9SRVBPUlRfVElNRVNFUklFUyA9IGVudkludCgnQ0FDSEVfVFRMX1JFUE9SVF9USU1FU0VSSUVTJywgMTIwKTsgLy8gZXhlY3V0aW9uL2J1aWxkIG1ldHJpY3MgKDIgbWluKVxuICBzdGF0aWMgcmVhZG9ubHkgQ0FDSEVfVFRMX0NPTVBMSUFOQ0VfUlVMRVMgPSBlbnZJbnQoJ0NBQ0hFX1RUTF9DT01QTElBTkNFX1JVTEVTJywgNjApOyAvLyBhY3RpdmUgY29tcGxpYW5jZSBydWxlc1xuICBzdGF0aWMgcmVhZG9ubHkgQ0FDSEVfVFRMX0JJTExJTkdfUExBTlMgPSBlbnZJbnQoJ0NBQ0hFX1RUTF9CSUxMSU5HX1BMQU5TJywgMTRfNDAwKTsgLy8gYmlsbGluZyBwbGFucyAoNCBob3VycylcblxuICAvLyBTU0UgYmFja3ByZXNzdXJlXG4gIHN0YXRpYyByZWFkb25seSBTU0VfQkFDS1BSRVNTVVJFX1RIUkVTSE9MRCA9IGVudkludCgnU1NFX0JBQ0tQUkVTU1VSRV9USFJFU0hPTEQnLCAxMCk7XG5cbiAgLy8gSFRUUCBDYWNoZS1Db250cm9sIGhlYWRlcnNcbiAgc3RhdGljIHJlYWRvbmx5IENBQ0hFX0NPTlRST0xfTElTVCA9IGVudlN0cignQ0FDSEVfQ09OVFJPTF9MSVNUJywgJ3ByaXZhdGUsIG1heC1hZ2U9MzAsIHN0YWxlLXdoaWxlLXJldmFsaWRhdGU9NjAnKTtcbiAgc3RhdGljIHJlYWRvbmx5IENBQ0hFX0NPTlRST0xfREVUQUlMID0gZW52U3RyKCdDQUNIRV9DT05UUk9MX0RFVEFJTCcsICdwcml2YXRlLCBtYXgtYWdlPTYwLCBzdGFsZS13aGlsZS1yZXZhbGlkYXRlPTEyMCcpO1xufVxuXG4vKipcbiAqIFBlci1zZWN0aW9uIGxvYWRlciBtYXAg4oCUIGVhY2ggc2VjdGlvbiBpcyBsb2FkZWQgbGF6aWx5IG9uIGZpcnN0IGFjY2Vzcy5cbiAqIFRoaXMgYXZvaWRzIGxvYWRpbmcgYWxsIGNvbmZpZyBzZWN0aW9ucyAoYW5kIHRoZWlyIHJlcXVpcmVkIGVudiB2YXJzKVxuICogd2hlbiBvbmx5IG9uZSBzZWN0aW9uIGlzIG5lZWRlZCAoZS5nLiBDREsgc3ludGhlc2lzIG9ubHkgbmVlZHMgJ2F3cycpLlxuICovXG5jb25zdCBzZWN0aW9uTG9hZGVyczogeyBbSyBpbiBrZXlvZiBBcHBDb25maWddOiAoKSA9PiBBcHBDb25maWdbS10gfSA9IHtcbiAgc2VydmVyOiBsb2FkU2VydmVyQ29uZmlnLFxuICBhdXRoOiBsb2FkQXV0aENvbmZpZyxcbiAgZGF0YWJhc2U6IGxvYWREYXRhYmFzZUNvbmZpZyxcbiAgcmVnaXN0cnk6IGxvYWRSZWdpc3RyeUNvbmZpZyxcbiAgcGx1Z2luQnVpbGQ6IGxvYWRQbHVnaW5CdWlsZENvbmZpZyxcbiAgZG9ja2VyQ29uZmlnOiBsb2FkRG9ja2VyQ29uZmlnLFxuICBvYnNlcnZhYmlsaXR5OiBsb2FkT2JzZXJ2YWJpbGl0eUNvbmZpZyxcbiAgY29tcGxpYW5jZTogbG9hZENvbXBsaWFuY2VDb25maWcsXG4gIGF3czogbG9hZEFXU0NvbmZpZyxcbiAgcmF0ZUxpbWl0OiBsb2FkUmF0ZUxpbWl0Q29uZmlnLFxufTtcblxuLyoqIFBlci1zZWN0aW9uIHZhbGlkYXRvcnMg4oCUIG9ubHkgcnVuIGZvciBzZWN0aW9ucyB0aGF0IGhhdmUgdmFsaWRhdGlvbiBsb2dpYy4gKi9cbmNvbnN0IHNlY3Rpb25WYWxpZGF0b3JzOiBQYXJ0aWFsPHsgW0sgaW4ga2V5b2YgQXBwQ29uZmlnXTogKGNvbmZpZzogQXBwQ29uZmlnW0tdKSA9PiB2b2lkIH0+ID0ge1xuICBzZXJ2ZXI6IHZhbGlkYXRlU2VydmVyQ29uZmlnLFxufTtcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZhY2FkZSB3aXRoIGxhenkgcGVyLXNlY3Rpb24gbG9hZGluZy5cbiAqXG4gKiBFYWNoIHNlY3Rpb24gaXMgbG9hZGVkIGFuZCB2YWxpZGF0ZWQgaW5kZXBlbmRlbnRseSBvbiBmaXJzdCBhY2Nlc3MsXG4gKiBzbyByZXF1ZXN0aW5nIGBDb25maWcuZ2V0KCdhd3MnKWAgZG9lcyBub3QgdHJpZ2dlciBsb2FkaW5nIG9mXG4gKiBzZXJ2ZXIgb3IgYXV0aCBjb25maWcgKGFuZCB0aGVpciBlbnYgdmFyIHJlcXVpcmVtZW50cykuXG4gKlxuICogVXNhZ2U6IGBDb25maWcuZ2V0KCdzZXJ2ZXInKWAsIGBDb25maWcuZ2V0KCdhdXRoJylgLCBldGMuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb25maWcge1xuICBwcml2YXRlIHN0YXRpYyBjYWNoZSA9IG5ldyBNYXA8a2V5b2YgQXBwQ29uZmlnLCB1bmtub3duPigpO1xuXG4gIC8qKlxuICAgKiBHZXQgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHNlY3Rpb24gKGxvYWRlZCBsYXppbHkgb24gZmlyc3QgYWNjZXNzKS5cbiAgICovXG4gIHN0YXRpYyBnZXQ8SyBleHRlbmRzIGtleW9mIEFwcENvbmZpZz4oc2VjdGlvbjogSyk6IEFwcENvbmZpZ1tLXSB7XG4gICAgaWYgKCF0aGlzLmNhY2hlLmhhcyhzZWN0aW9uKSkge1xuICAgICAgY29uc3QgbG9hZGVyID0gc2VjdGlvbkxvYWRlcnNbc2VjdGlvbl07XG4gICAgICBjb25zdCB2YWx1ZSA9IGxvYWRlcigpO1xuICAgICAgY29uc3QgdmFsaWRhdG9yID0gc2VjdGlvblZhbGlkYXRvcnNbc2VjdGlvbl07XG4gICAgICBpZiAodmFsaWRhdG9yKSAodmFsaWRhdG9yIGFzICh2OiBBcHBDb25maWdbS10pID0+IHZvaWQpKHZhbHVlKTtcbiAgICAgIHRoaXMuY2FjaGUuc2V0KHNlY3Rpb24sIHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2FjaGUuZ2V0KHNlY3Rpb24pIGFzIEFwcENvbmZpZ1tLXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXJnZSBhIHBhcnRpYWwgb3ZlcnJpZGUgaW50byBhIGNvbmZpZyBzZWN0aW9uLCB0YWtpbmcgcHJlY2VkZW5jZSBvdmVyIHRoZVxuICAgKiBlbnYtbG9hZGVkIHZhbHVlcyBmb3IgYWxsIHN1YnNlcXVlbnQgYENvbmZpZy5nZXQoc2VjdGlvbilgIGNhbGxzLlxuICAgKlxuICAgKiBVc2VkIGF0IENESyBzeW50aCBzdGFydCB0byBpbmplY3QgcGxhdGZvcm0tc291cmNlZCBpbmZyYXN0cnVjdHVyZSBjb25maWdcbiAgICogKGUuZy4gdGhlIHJlZ2lzdHJ5IHB1bGwgaG9zdCBkZXJpdmVkIGZyb20gdGhlIHBsYXRmb3JtJ3MgcHVibGljIFVSTCkgc28gdGhlXG4gICAqIHN5bnRoIGRvZXMgbm90IHNpbGVudGx5IGRlcGVuZCBvbiB0aGUgb3BlcmF0b3IncyBsb2NhbCBgcHJvY2Vzcy5lbnZgLlxuICAgKiBgdW5kZWZpbmVkYCBmaWVsZHMgaW4gYHBhcnRpYWxgIGFyZSBpZ25vcmVkIHNvIHRoZXkgbmV2ZXIgY2xvYmJlciBhIGxvYWRlZFxuICAgKiB2YWx1ZS4gTG9hZHMgKGFuZCB2YWxpZGF0ZXMpIHRoZSBzZWN0aW9uIGZpcnN0IHNvIHRoZSBvdmVycmlkZSBtZXJnZXMgb250b1xuICAgKiB0aGUgcmVhbCBkZWZhdWx0cy5cbiAgICovXG4gIHN0YXRpYyBvdmVycmlkZTxLIGV4dGVuZHMga2V5b2YgQXBwQ29uZmlnPihzZWN0aW9uOiBLLCBwYXJ0aWFsOiBQYXJ0aWFsPEFwcENvbmZpZ1tLXT4pOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5nZXQoc2VjdGlvbik7XG4gICAgY29uc3QgZGVmaW5lZCA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIE9iamVjdC5lbnRyaWVzKHBhcnRpYWwpLmZpbHRlcigoWywgdl0pID0+IHYgIT09IHVuZGVmaW5lZCksXG4gICAgKSBhcyBQYXJ0aWFsPEFwcENvbmZpZ1tLXT47XG4gICAgdGhpcy5jYWNoZS5zZXQoc2VjdGlvbiwgeyAuLi5jdXJyZW50LCAuLi5kZWZpbmVkIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIExpa2Uge0BsaW5rIG92ZXJyaWRlfSwgYnV0IHNjb3BlZDogc25hcHNob3RzIHRoZSBjdXJyZW50IGNhY2hlIHN0YXRlIGZvclxuICAgKiBgc2VjdGlvbmAgYW5kIHJldHVybnMgYSByZXN0b3JlIGZ1bmN0aW9uIHRoYXQgcmV2ZXJ0cyBpdC4gVXNlIGFyb3VuZCBhXG4gICAqIHNpbmdsZSB1bml0IG9mIHdvcmsgKGUuZy4gb25lIENESyBQaXBlbGluZUJ1aWxkZXIncyBzeW50aCkgc28gYSBwZXItYnVpbGRlclxuICAgKiBvdmVycmlkZSBkb2VzIE5PVCBsZWFrIGludG8gdGhlIHByb2Nlc3Mtd2lkZSBjYWNoZSBhbmQgYmxlZWQgaW50byBzaWJsaW5nXG4gICAqIGJ1aWxkZXJzIGluIGEgbXVsdGktcGlwZWxpbmUgQ0RLIGFwcC4gQ2FsbGluZyB0aGUgcmV0dXJuZWQgZnVuY3Rpb24gcmVzdG9yZXNcbiAgICogdGhlIGV4YWN0IHByaW9yIHN0YXRlIOKAlCB0aGUgcHJldmlvdXNseSBjYWNoZWQgdmFsdWUsIG9yIGFuIHVubG9hZGVkIHNlY3Rpb25cbiAgICogaWYgaXQgaGFkIG5vdCBiZWVuIGNhY2hlZCB5ZXQgKHNvIHRoZSBuZXh0IGBnZXQoKWAgcmUtbG9hZHMgZnJvbSBlbnYpLlxuICAgKi9cbiAgc3RhdGljIG92ZXJyaWRlU2NvcGVkPEsgZXh0ZW5kcyBrZXlvZiBBcHBDb25maWc+KFxuICAgIHNlY3Rpb246IEssXG4gICAgcGFydGlhbDogUGFydGlhbDxBcHBDb25maWdbS10+LFxuICApOiAoKSA9PiB2b2lkIHtcbiAgICBjb25zdCBoYWRDYWNoZWQgPSB0aGlzLmNhY2hlLmhhcyhzZWN0aW9uKTtcbiAgICBjb25zdCBwcmV2aW91cyA9IGhhZENhY2hlZCA/IHRoaXMuY2FjaGUuZ2V0KHNlY3Rpb24pIDogdW5kZWZpbmVkO1xuICAgIHRoaXMub3ZlcnJpZGUoc2VjdGlvbiwgcGFydGlhbCk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChoYWRDYWNoZWQpIHRoaXMuY2FjaGUuc2V0KHNlY3Rpb24sIHByZXZpb3VzKTtcbiAgICAgIGVsc2UgdGhpcy5jYWNoZS5kZWxldGUoc2VjdGlvbik7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgY2FjaGVkIGNvbmZpZyBzZWN0aW9ucyBzbyB0aGUgbmV4dCBgQ29uZmlnLmdldCgpYCByZS1yZWFkcyB0aGVtXG4gICAqIGZyb20gdGhlIGN1cnJlbnQgYHByb2Nlc3MuZW52YCAocmUtcnVubmluZyBlYWNoIHNlY3Rpb24ncyBsb2FkZXIgKyB2YWxpZGF0b3IpLlxuICAgKlxuICAgKiBVc2Ugd2hlbiBlbnYgaGFzIGJlZW4gbXV0YXRlZCBpbi1wcm9jZXNzIGFuZCB0aGUgY2FjaGUgaXMgbm93IHN0YWxlIOKAlCBlLmcuIGFcbiAgICogbG9uZy1ydW5uaW5nIENMSSB0aGF0IHJlY29uZmlndXJlcyBiZXR3ZWVuIG9wZXJhdGlvbnMuIENESyBzeW50aCBydW5zIGluIGFcbiAgICogZnJlc2ggc3VicHJvY2VzcyB0aGF0IGFscmVhZHkgcmVhZHMgZW52IG9uIGZpcnN0IGFjY2Vzcywgc28gaXQgZG9lcyBub3QgbmVlZFxuICAgKiB0aGlzLiBOb3RlOiB0aGlzIGFsc28gZHJvcHMgYW55IHZhbHVlcyBzZXQgdmlhIHtAbGluayBvdmVycmlkZX0uXG4gICAqL1xuICBzdGF0aWMgcmVsb2FkKCk6IHZvaWQge1xuICAgIHRoaXMuY2FjaGUuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWwgUmVzZXQgY29uZmlndXJhdGlvbiAoZm9yIHRlc3Rpbmcgb25seSkuIEFsaWFzIGZvciB7QGxpbmsgcmVsb2FkfS5cbiAgICovXG4gIHN0YXRpYyBfcmVzZXRGb3JUZXN0aW5nKCk6IHZvaWQge1xuICAgIHRoaXMucmVsb2FkKCk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgYXV0aCBjb25maWd1cmF0aW9uIChKV1Qgc2VjcmV0cywgYWxnb3JpdGhtcywgZXhwaXJhdGlvbikuXG4gICAqIENhbGwgdGhpcyBhdCBzZXJ2ZXIgc3RhcnR1cCwgbm90IGR1cmluZyBDREsgc3ludGhlc2lzLlxuICAgKi9cbiAgc3RhdGljIHZhbGlkYXRlQXV0aCgpOiB2b2lkIHtcbiAgICB2YWxpZGF0ZUF1dGhDb25maWcodGhpcy5nZXQoJ2F1dGgnKSk7XG4gIH1cblxuICAvKipcbiAgICogVW50eXBlZCBjb25maWcgYWNjZXNzIOKAlCB1c2Ugd2hlbiB0aGUgcHVibGlzaGVkIHBhY2thZ2UgdHlwZXMgZG9uJ3QgaW5jbHVkZSBhIG5ldyBzZWN0aW9uIHlldC5cbiAgICogQXZvaWRzIHRoZSBgKENvbmZpZyBhcyB1bmtub3duIGFzIC4uLikuZ2V0KC4uLilgIGNhc3QgcGF0dGVybiBpbiBjb25zdW1lcnMuXG4gICAqL1xuICBzdGF0aWMgZ2V0QW55KHNlY3Rpb246IHN0cmluZyk6IHVua25vd24ge1xuICAgIHJldHVybiB0aGlzLmdldChzZWN0aW9uIGFzIGtleW9mIEFwcENvbmZpZyk7XG4gIH1cbn1cbiJdfQ==
197
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWcvYXBwLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLGNBQWMsSUFBSSxxQkFBcUIsRUFBRSxrQkFBa0IsSUFBSSx5QkFBeUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXRKLE9BQU8sS0FBSyxnQkFBZ0IsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRCxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLHFCQUFxQixFQUNyQixnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLHVCQUF1QixFQUN2QixvQkFBb0IsRUFDcEIsYUFBYSxHQUNkLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixjQUFjLEVBQ2QsbUJBQW1CLEVBQ25CLG9CQUFvQixFQUNwQixrQkFBa0IsR0FDbkIsTUFBTSxvQkFBb0IsQ0FBQztBQUU1Qjs7R0FFRztBQUNIOzs7R0FHRztBQUNILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXhHLE1BQU0sT0FBTyxhQUFhO0lBQ3hCLE1BQU0sQ0FBVSxZQUFZLEdBQUcsY0FBYyxDQUFDO0lBRTlDLDhHQUE4RztJQUM5Ryx3R0FBd0c7SUFDeEcsc0dBQXNHO0lBQ3RHLE1BQU0sQ0FBVSxrQkFBa0IsR0FBRyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQztJQUN6RSx1RUFBdUU7SUFDdkUsTUFBTSxDQUFVLG9CQUFvQixHQUFHLGdCQUFnQixDQUFDLG9CQUFvQixDQUFDO0lBRTdFLE1BQU0sQ0FBVSx3QkFBd0IsR0FBRyxnQkFBZ0IsQ0FBQyx3QkFBd0IsQ0FBQztJQUNyRixNQUFNLENBQVUsbUJBQW1CLEdBQUcsZ0JBQWdCLENBQUMsbUJB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SUFDdkMsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBZTtRQUMzQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBMEIsQ0FBQyxDQUFDO0lBQzlDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBlbnZJbnQsIGVudlN0ciwgTUFYX1BBR0VfTElNSVQgYXMgU0hBUkVEX01BWF9QQUdFX0xJTUlULCBERUZBVUxUX1BBR0VfTElNSVQgYXMgU0hBUkVEX0RFRkFVTFRfUEFHRV9MSU1JVCB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB0eXBlIHsgQXBwQ29uZmlnIH0gZnJvbSAnLi9jb25maWctdHlwZXMuanMnO1xuaW1wb3J0ICogYXMgSGFuZGxlckNvbnN0YW50cyBmcm9tICcuL2hhbmRsZXItY29uc3RhbnRzLmpzJztcbmltcG9ydCB7XG4gIGxvYWRSZWdpc3RyeUNvbmZpZyxcbiAgbG9hZFBsdWdpbkJ1aWxkQ29uZmlnLFxuICBsb2FkRG9ja2VyQ29uZmlnLFxuICBsb2FkRGF0YWJhc2VDb25maWcsXG4gIGxvYWRPYnNlcnZhYmlsaXR5Q29uZmlnLFxuICBsb2FkQ29tcGxpYW5jZUNvbmZpZyxcbiAgbG9hZEFXU0NvbmZpZyxcbn0gZnJvbSAnLi9pbmZyYXN0cnVjdHVyZS1jb25maWcuanMnO1xuaW1wb3J0IHtcbiAgbG9hZFNlcnZlckNvbmZpZyxcbiAgbG9hZEF1dGhDb25maWcsXG4gIGxvYWRSYXRlTGltaXRDb25maWcsXG4gIHZhbGlkYXRlU2VydmVyQ29uZmlnLFxuICB2YWxpZGF0ZUF1dGhDb25maWcsXG59IGZyb20gJy4vc2VydmVyLWNvbmZpZy5qcyc7XG5cbi8qKlxuICogQ29yZSBjb25zdGFudHMg4oCUIGNvbmZpZ3VyYWJsZSB2aWEgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdpdGggc2Vuc2libGUgZGVmYXVsdHMuXG4gKi9cbi8qKlxuICogUmUtZXhwb3J0ZWQgZnJvbSBhcGktY29yZSBzbyB0aGUgQVBJIHNjaGVtYSBhbmQge0BsaW5rIFBpcGVsaW5lQnVpbGRlcn0gcmVmdXNlXG4gKiB0aGUgU0FNRSB0YWcga2V5czsgc2VlIGB0eXBlcy9yZXNlcnZlZC10YWdzLnRzYCBmb3Igd2h5IGJvdGggY2hlY2tzIGV4aXN0LlxuICovXG5leHBvcnQgeyBSRVNFUlZFRF9UQUdfS0VZUywgUkVTRVJWRURfVEFHX1BSRUZJWEVTLCBpc1Jlc2VydmVkVGFnS2V5IH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuXG5leHBvcnQgY2xhc3MgQ29yZUNvbnN0YW50cyB7XG4gIHN0YXRpYyByZWFkb25seSBOQU1FX1BBVFRFUk4gPSAvXlthLXowLTktXSskLztcblxuICAvLyBDdXN0b20gUmVzb3VyY2UgSGFuZGxlciBjb25maWd1cmF0aW9uIChtdXN0IGJlIGxlc3MgdGhhbiBMYW1iZGEgdGltZW91dCBvZiAzMHMgdG8gYWxsb3cgcmVzcG9uc2UgaGFuZGxpbmcpLlxuICAvLyBTb3VyY2VkIGZyb20gdGhlIGRlcGVuZGVuY3ktZnJlZSBgaGFuZGxlci1jb25zdGFudHMudHNgIGxlYWYg4oCUIHRoZSBMYW1iZGEgaGFuZGxlciBpbXBvcnRzIHRoYXQgbW9kdWxlXG4gIC8vIGRpcmVjdGx5IChub3QgdGhpcyBvbmUpIHNvIGl0cyBlc2J1aWxkIGJ1bmRsZSBuZXZlciBwdWxscyBpbiBhd3MtY2RrLWxpYiB2aWEgaW5mcmFzdHJ1Y3R1cmUtY29uZmlnLlxuICBzdGF0aWMgcmVhZG9ubHkgSEFORExFUl9USU1FT1VUX01TID0gSGFuZGxlckNvbnN0YW50cy5IQU5ETEVSX1RJTUVPVVRfTVM7XG4gIC8qKiBEZWZhdWx0IHBsYXRmb3JtIFVSTCBmYWxsYmFjayB3aGVuIFBMQVRGT1JNX0JBU0VfVVJMIGlzIG5vdCBzZXQuICovXG4gIHN0YXRpYyByZWFkb25seSBERUZBVUxUX1BMQVRGT1JNX1VSTCA9IEhhbmRsZXJDb25zdGFudHMuREVGQVVMVF9QTEFURk9STV9VUkw7XG5cbiAgc3RhdGljIHJlYWRvbmx5IEhBTkRMRVJfREVGQVVMVF9CQVNFX1VSTCA9IEhhbmRsZXJDb25zdGFudHMuSEFORExFUl9ERUZBVUxUX0JBU0VfVVJMO1xuICBzdGF0aWMgcmVhZG9ubHkgSEFORExFUl9NQVhfUkVUUklFUyA9IEhhbmRsZXJDb25zdGFudHMuSEFORExFUl9NQVhfUkVUUklFUztcbiAgc3RhdGljIHJlYWRvbmx5IEhBTkRMRVJfUkVUUllfREVMQVlfTVMgPSBIYW5kbGVyQ29uc3RhbnRzLkhBTkRMRVJfUkVUUllfREVMQVlfTVM7XG5cbiAgLy8gUGx1Z2luIGJ1aWxkIHF1ZXVlIGNvbmZpZ3VyYXRpb24uXG4gIC8vIE5PVEU6IG1heEF0dGVtcHRzIC8gYmFja29mZkRlbGF5TXMgLyB3b3JrZXJUaW1lb3V0TXMgYXJlIE5PVCBkdXBsaWNhdGVkIGhlcmUg4oCUXG4gIC8vIGBsb2FkUGx1Z2luQnVpbGRDb25maWdgIChpbmZyYXN0cnVjdHVyZS1jb25maWcudHMpIGlzIHRoZWlyIHNpbmdsZSBzb3VyY2Ugb2ZcbiAgLy8gdHJ1dGgsIHJlYWQgdmlhIGBDb25maWcuZ2V0KCdwbHVnaW5CdWlsZCcpYC5cbiAgc3RhdGljIHJlYWRvbmx5IFBMVUdJTl9CVUlMRF9RVUVVRV9OQU1FID0gZW52U3RyKCdQTFVHSU5fQlVJTERfUVVFVUVfTkFNRScsICdwbHVnaW4tYnVpbGQnKTtcbiAgc3RhdGljIHJlYWRvbmx5IFBMVUdJTl9CVUlMRF9DT01QTEVURURfUkVURU5USU9OX1NFQ1MgPSBlbnZJbnQoJ1BMVUdJTl9CVUlMRF9DT01QTEVURURfUkVURU5USU9OX1NFQ1MnLCAzXzYwMCk7IC8vIDEgaHJcbiAgc3RhdGljIHJlYWRvbmx5IFBMVUdJTl9CVUlMRF9GQUlMRURfUkVURU5USU9OX1NFQ1MgPSBlbnZJbnQoJ1BMVUdJTl9CVUlMRF9GQUlMRURfUkVURU5USU9OX1NFQ1MnLCA4Nl80MDApOyAvLyAyNCBoclxuXG4gIC8vIFBhZ2luYXRpb24gYW5kIGxpbWl0cyDigJQgc2luZ2xlIHNvdXJjZSBpbiBhcGktY29yZSAodmFsaWRhdGlvbi9jb21tb24tc2NoZW1hcylcbiAgLy8gc28gdGhlIHZhbGlkYXRpb24gbGF5ZXIsIHRoaXMgY29uZmlnLCBhbmQgcGlwZWxpbmUtZGF0YSdzIENydWRTZXJ2aWNlIG5ldmVyIGRyaWZ0LlxuICBzdGF0aWMgcmVhZG9ubHkgTUFYX1BBR0VfTElNSVQgPSBTSEFSRURfTUFYX1BBR0VfTElNSVQ7XG4gIHN0YXRpYyByZWFkb25seSBERUZBVUxUX1BBR0VfTElNSVQgPSBTSEFSRURfREVGQVVMVF9QQUdFX0xJTUlUO1xuICBzdGF0aWMgcmVhZG9ubHkgTUFYX1BST01QVF9MRU5HVEggPSBlbnZJbnQoJ01BWF9QUk9NUFRfTEVOR1RIJywgNV8wMDApO1xuICBzdGF0aWMgcmVhZG9ubHkgUExVR0lOX01BWF9VUExPQURfTUIgPSBlbnZJbnQoJ1BMVUdJTl9NQVhfVVBMT0FEX01CJywgNF8wOTYpO1xuICBzdGF0aWMgcmVhZG9ubHkgUElQRUxJTkVfTkFNRV9NQVhfTEVOR1RIID0gZW52SW50KCdQSVBFTElORV9OQU1FX01BWF9MRU5HVEgnLCAxMDApO1xuICBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9QTFVHSU5fVkVSU0lPTiA9IGVudlN0cignREVGQVVMVF9QTFVHSU5fVkVSU0lPTicsICcxLjAuMCcpO1xuXG4gIC8vIFNTRSBzdHJlYW0gdGltZW91dCBmb3IgQUkgZ2VuZXJhdGlvbiBlbmRwb2ludHNcbiAgc3RhdGljIHJlYWRvbmx5IFNTRV9TVFJFQU1fVElNRU9VVF9NUyA9IGVudkludCgnU1NFX1NUUkVBTV9USU1FT1VUX01TJywgMzAwXzAwMCk7IC8vIDUgbWluXG5cbiAgLy8gR2l0IHByb3ZpZGVyIEFQSSBiYXNlIFVSTHMgKGNvbmZpZ3VyYWJsZSBmb3IgZW50ZXJwcmlzZSBpbnN0YW5jZXMpXG4gIHN0YXRpYyByZWFkb25seSBHSVRIVUJfQVBJX0JBU0VfVVJMID0gZW52U3RyKCdHSVRIVUJfQVBJX0JBU0VfVVJMJywgJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20nKTtcbiAgc3RhdGljIHJlYWRvbmx5IEJJVEJVQ0tFVF9BUElfQkFTRV9VUkwgPSBlbnZTdHIoJ0JJVEJVQ0tFVF9BUElfQkFTRV9VUkwnLCAnaHR0cHM6Ly9hcGkuYml0YnVja2V0Lm9yZy8yLjAnKTtcblxuICAvLyBCdWxrIG9wZXJhdGlvbnMgYW5kIGV2ZW50IGluZ2VzdGlvblxuICBzdGF0aWMgcmVhZG9ubHkgTUFYX0JVTEtfSVRFTVMgPSBlbnZJbnQoJ01BWF9CVUxLX0lURU1TJywgMTAwKTtcbiAgc3RhdGljIHJlYWRvbmx5IE1BWF9FVkVOVFNfUEVSX0JBVENIID0gZW52SW50KCdNQVhfRVZFTlRTX1BFUl9CQVRDSCcsIDEwMCk7XG5cbiAgLy8gU2VjcmV0cyBNYW5hZ2VyIHBhdGggcHJlZml4IGZvciBvcmctc2NvcGVkIHNlY3JldHNcbiAgc3RhdGljIHJlYWRvbmx5IFNFQ1JFVFNfUEFUSF9QUkVGSVggPSBlbnZTdHIoJ1NFQ1JFVFNfUEFUSF9QUkVGSVgnLCAncGlwZWxpbmUtYnVpbGRlcicpO1xuXG4gIC8qKiBCdWlsZCBhIFNlY3JldHMgTWFuYWdlciBwYXRoOiB7cHJlZml4fS97b3JnSWR9L3tuYW1lfSAqL1xuICBzdGF0aWMgc2VjcmV0UGF0aChvcmdJZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtDb3JlQ29uc3RhbnRzLlNFQ1JFVFNfUEFUSF9QUkVGSVh9LyR7b3JnSWR9LyR7bmFtZX1gO1xuICB9XG5cbiAgLy8gRGF0YWJhc2UgY29ubmVjdGlvblxuICBzdGF0aWMgcmVhZG9ubHkgREJfTUFYX1JFVFJJRVMgPSBlbnZJbnQoJ0RCX01BWF9SRVRSSUVTJywgMyk7XG4gIHN0YXRpYyByZWFkb25seSBEQl9SRVRSWV9ERUxBWV9NUyA9IGVudkludCgnREJfUkVUUllfREVMQVlfTVMnLCAxXzAwMCk7IC8vIDFzXG5cbiAgLy8gUmVzcG9uc2UgY29tcHJlc3Npb25cbiAgc3RhdGljIHJlYWRvbmx5IENPTVBSRVNTSU9OX1RIUkVTSE9MRF9CWVRFUyA9IGVudkludCgnQ09NUFJFU1NJT05fVEhSRVNIT0xEX0JZVEVTJywgMV8wMjQpO1xuXG4gIC8vIElkZW1wb3RlbmN5XG4gIHN0YXRpYyByZWFkb25seSBJREVNUE9URU5DWV9UVExfTVMgPSBlbnZJbnQoJ0lERU1QT1RFTkNZX1RUTF9NUycsIDMwMF8wMDApOyAvLyA1IG1pblxuICAvLyBMaWZldGltZSBvZiBhbiBJTi1GTElHSFQgcmVzZXJ2YXRpb24gKG5vIHJlc3BvbnNlIHlldCkuIEJvdW5kcyBob3cgbG9uZyBhXG4gIC8vIGtleSBzdGF5cyBsb2NrZWQgKDQwOSkgd2hlbiB0aGUgcHJvY2VzcyBkaWVzIG1pZC1oYW5kbGVyOyBtdXN0IGV4Y2VlZCB0aGVcbiAgLy8gbG9uZ2VzdCBsZWdpdGltYXRlIGhhbmRsZXIgcnVuLCBzaW5jZSBhbiBleHBpcmVkIHJlc2VydmF0aW9uIGxldHMgYVxuICAvLyBkdXBsaWNhdGUgdGhyb3VnaC5cbiAgc3RhdGljIHJlYWRvbmx5IElERU1QT1RFTkNZX1BFTkRJTkdfVFRMX01TID0gZW52SW50KCdJREVNUE9URU5DWV9QRU5ESU5HX1RUTF9NUycsIDEyMF8wMDApOyAvLyAyIG1pblxuICBzdGF0aWMgcmVhZG9ubHkgSURFTVBPVEVOQ1lfTUFYX1NUT1JFX1NJWkUgPSBlbnZJbnQoJ0lERU1QT1RFTkNZX01BWF9TVE9SRV9TSVpFJywgMTBfMDAwKTtcbiAgc3RhdGljIHJlYWRvbmx5IElERU1QT1RFTkNZX0NMRUFOVVBfSU5URVJWQUxfTVMgPSBlbnZJbnQoJ0lERU1QT1RFTkNZX0NMRUFOVVBfSU5URVJWQUxfTVMnLCA2MF8wMDApOyAvLyAxIG1pblxuXG5cbiAgLy8gU2VydmVyLXNpZGUgY2FjaGUgVFRMcyAoc2Vjb25kcylcbiAgc3RhdGljIHJlYWRvbmx5IENBQ0hFX1RUTF9FTlRJVFkgPSBlbnZJbnQoJ0NBQ0hFX1RUTF9FTlRJVFknLCA2MCk7IC8vIHBsdWdpbi9waXBlbGluZSBmaW5kQnlJZFxuICBzdGF0aWMgcmVhZG9ubHkgQ0FDSEVfVFRMX01FU1NBR0UgPSBlbnZJbnQoJ0NBQ0hFX1RUTF9NRVNTQUdFJywgMzAwKTsgLy8gYW5ub3VuY2VtZW50cy9jb252ZXJzYXRpb25zICg1IG1pbilcbiAgc3RhdGljIHJlYWRvbmx5IENBQ0hFX1RUTF9SRVBPUlRfSU5WRU5UT1JZID0gZW52SW50KCdDQUNIRV9UVExfUkVQT1JUX0lOVkVOVE9SWScsIDMwMCk7IC8vIHBsdWdpbiBzdW1tYXJ5L2Rpc3RyaWJ1dGlvbiAoNSBtaW4pXG4gIHN0YXRpYyByZWFkb25seSBDQUNIRV9UVExfUkVQT1JUX1RJTUVTRVJJRVMgPSBlbnZJbnQoJ0NBQ0hFX1RUTF9SRVBPUlRfVElNRVNFUklFUycsIDEyMCk7IC8vIGV4ZWN1dGlvbi9idWlsZCBtZXRyaWNzICgyIG1pbilcbiAgc3RhdGljIHJlYWRvbmx5IENBQ0hFX1RUTF9DT01QTElBTkNFX1JVTEVTID0gZW52SW50KCdDQUNIRV9UVExfQ09NUExJQU5DRV9SVUxFUycsIDYwKTsgLy8gYWN0aXZlIGNvbXBsaWFuY2UgcnVsZXNcbiAgc3RhdGljIHJlYWRvbmx5IENBQ0hFX1RUTF9CSUxMSU5HX1BMQU5TID0gZW52SW50KCdDQUNIRV9UVExfQklMTElOR19QTEFOUycsIDE0XzQwMCk7IC8vIGJpbGxpbmcgcGxhbnMgKDQgaG91cnMpXG5cbiAgLy8gU1NFIGJhY2twcmVzc3VyZVxuICBzdGF0aWMgcmVhZG9ubHkgU1NFX0JBQ0tQUkVTU1VSRV9USFJFU0hPTEQgPSBlbnZJbnQoJ1NTRV9CQUNLUFJFU1NVUkVfVEhSRVNIT0xEJywgMTApO1xuXG4gIC8vIEhUVFAgQ2FjaGUtQ29udHJvbCBoZWFkZXJzXG4gIHN0YXRpYyByZWFkb25seSBDQUNIRV9DT05UUk9MX0xJU1QgPSBlbnZTdHIoJ0NBQ0hFX0NPTlRST0xfTElTVCcsICdwcml2YXRlLCBtYXgtYWdlPTMwLCBzdGFsZS13aGlsZS1yZXZhbGlkYXRlPTYwJyk7XG4gIHN0YXRpYyByZWFkb25seSBDQUNIRV9DT05UUk9MX0RFVEFJTCA9IGVudlN0cignQ0FDSEVfQ09OVFJPTF9ERVRBSUwnLCAncHJpdmF0ZSwgbWF4LWFnZT02MCwgc3RhbGUtd2hpbGUtcmV2YWxpZGF0ZT0xMjAnKTtcbn1cblxuLyoqXG4gKiBQZXItc2VjdGlvbiBsb2FkZXIgbWFwIOKAlCBlYWNoIHNlY3Rpb24gaXMgbG9hZGVkIGxhemlseSBvbiBmaXJzdCBhY2Nlc3MuXG4gKiBUaGlzIGF2b2lkcyBsb2FkaW5nIGFsbCBjb25maWcgc2VjdGlvbnMgKGFuZCB0aGVpciByZXF1aXJlZCBlbnYgdmFycylcbiAqIHdoZW4gb25seSBvbmUgc2VjdGlvbiBpcyBuZWVkZWQgKGUuZy4gQ0RLIHN5bnRoZXNpcyBvbmx5IG5lZWRzICdhd3MnKS5cbiAqL1xuY29uc3Qgc2VjdGlvbkxvYWRlcnM6IHsgW0sgaW4ga2V5b2YgQXBwQ29uZmlnXTogKCkgPT4gQXBwQ29uZmlnW0tdIH0gPSB7XG4gIHNlcnZlcjogbG9hZFNlcnZlckNvbmZpZyxcbiAgYXV0aDogbG9hZEF1dGhDb25maWcsXG4gIGRhdGFiYXNlOiBsb2FkRGF0YWJhc2VDb25maWcsXG4gIHJlZ2lzdHJ5OiBsb2FkUmVnaXN0cnlDb25maWcsXG4gIHBsdWdpbkJ1aWxkOiBsb2FkUGx1Z2luQnVpbGRDb25maWcsXG4gIGRvY2tlckNvbmZpZzogbG9hZERvY2tlckNvbmZpZyxcbiAgb2JzZXJ2YWJpbGl0eTogbG9hZE9ic2VydmFiaWxpdHlDb25maWcsXG4gIGNvbXBsaWFuY2U6IGxvYWRDb21wbGlhbmNlQ29uZmlnLFxuICBhd3M6IGxvYWRBV1NDb25maWcsXG4gIHJhdGVMaW1pdDogbG9hZFJhdGVMaW1pdENvbmZpZyxcbn07XG5cbi8qKiBQZXItc2VjdGlvbiB2YWxpZGF0b3JzIOKAlCBvbmx5IHJ1biBmb3Igc2VjdGlvbnMgdGhhdCBoYXZlIHZhbGlkYXRpb24gbG9naWMuICovXG5jb25zdCBzZWN0aW9uVmFsaWRhdG9yczogUGFydGlhbDx7IFtLIGluIGtleW9mIEFwcENvbmZpZ106IChjb25maWc6IEFwcENvbmZpZ1tLXSkgPT4gdm9pZCB9PiA9IHtcbiAgc2VydmVyOiB2YWxpZGF0ZVNlcnZlckNvbmZpZyxcbn07XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmYWNhZGUgd2l0aCBsYXp5IHBlci1zZWN0aW9uIGxvYWRpbmcuXG4gKlxuICogRWFjaCBzZWN0aW9uIGlzIGxvYWRlZCBhbmQgdmFsaWRhdGVkIGluZGVwZW5kZW50bHkgb24gZmlyc3QgYWNjZXNzLFxuICogc28gcmVxdWVzdGluZyBgQ29uZmlnLmdldCgnYXdzJylgIGRvZXMgbm90IHRyaWdnZXIgbG9hZGluZyBvZlxuICogc2VydmVyIG9yIGF1dGggY29uZmlnIChhbmQgdGhlaXIgZW52IHZhciByZXF1aXJlbWVudHMpLlxuICpcbiAqIFVzYWdlOiBgQ29uZmlnLmdldCgnc2VydmVyJylgLCBgQ29uZmlnLmdldCgnYXV0aCcpYCwgZXRjLlxuICovXG5leHBvcnQgY2xhc3MgQ29uZmlnIHtcbiAgcHJpdmF0ZSBzdGF0aWMgY2FjaGUgPSBuZXcgTWFwPGtleW9mIEFwcENvbmZpZywgdW5rbm93bj4oKTtcblxuICAvKipcbiAgICogR2V0IGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBzZWN0aW9uIChsb2FkZWQgbGF6aWx5IG9uIGZpcnN0IGFjY2VzcykuXG4gICAqL1xuICBzdGF0aWMgZ2V0PEsgZXh0ZW5kcyBrZXlvZiBBcHBDb25maWc+KHNlY3Rpb246IEspOiBBcHBDb25maWdbS10ge1xuICAgIGlmICghdGhpcy5jYWNoZS5oYXMoc2VjdGlvbikpIHtcbiAgICAgIGNvbnN0IGxvYWRlciA9IHNlY3Rpb25Mb2FkZXJzW3NlY3Rpb25dO1xuICAgICAgY29uc3QgdmFsdWUgPSBsb2FkZXIoKTtcbiAgICAgIGNvbnN0IHZhbGlkYXRvciA9IHNlY3Rpb25WYWxpZGF0b3JzW3NlY3Rpb25dO1xuICAgICAgaWYgKHZhbGlkYXRvcikgKHZhbGlkYXRvciBhcyAodjogQXBwQ29uZmlnW0tdKSA9PiB2b2lkKSh2YWx1ZSk7XG4gICAgICB0aGlzLmNhY2hlLnNldChzZWN0aW9uLCB2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNhY2hlLmdldChzZWN0aW9uKSBhcyBBcHBDb25maWdbS107XG4gIH1cblxuICAvKipcbiAgICogTWVyZ2UgYSBwYXJ0aWFsIG92ZXJyaWRlIGludG8gYSBjb25maWcgc2VjdGlvbiwgdGFraW5nIHByZWNlZGVuY2Ugb3ZlciB0aGVcbiAgICogZW52LWxvYWRlZCB2YWx1ZXMgZm9yIGFsbCBzdWJzZXF1ZW50IGBDb25maWcuZ2V0KHNlY3Rpb24pYCBjYWxscy5cbiAgICpcbiAgICogVXNlZCBhdCBDREsgc3ludGggc3RhcnQgdG8gaW5qZWN0IHBsYXRmb3JtLXNvdXJjZWQgaW5mcmFzdHJ1Y3R1cmUgY29uZmlnXG4gICAqIChlLmcuIHRoZSByZWdpc3RyeSBwdWxsIGhvc3QgZGVyaXZlZCBmcm9tIHRoZSBwbGF0Zm9ybSdzIHB1YmxpYyBVUkwpIHNvIHRoZVxuICAgKiBzeW50aCBkb2VzIG5vdCBzaWxlbnRseSBkZXBlbmQgb24gdGhlIG9wZXJhdG9yJ3MgbG9jYWwgYHByb2Nlc3MuZW52YC5cbiAgICogYHVuZGVmaW5lZGAgZmllbGRzIGluIGBwYXJ0aWFsYCBhcmUgaWdub3JlZCBzbyB0aGV5IG5ldmVyIGNsb2JiZXIgYSBsb2FkZWRcbiAgICogdmFsdWUuIExvYWRzIChhbmQgdmFsaWRhdGVzKSB0aGUgc2VjdGlvbiBmaXJzdCBzbyB0aGUgb3ZlcnJpZGUgbWVyZ2VzIG9udG9cbiAgICogdGhlIHJlYWwgZGVmYXVsdHMuXG4gICAqL1xuICBzdGF0aWMgb3ZlcnJpZGU8SyBleHRlbmRzIGtleW9mIEFwcENvbmZpZz4oc2VjdGlvbjogSywgcGFydGlhbDogUGFydGlhbDxBcHBDb25maWdbS10+KTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuZ2V0KHNlY3Rpb24pO1xuICAgIGNvbnN0IGRlZmluZWQgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBPYmplY3QuZW50cmllcyhwYXJ0aWFsKS5maWx0ZXIoKFssIHZdKSA9PiB2ICE9PSB1bmRlZmluZWQpLFxuICAgICkgYXMgUGFydGlhbDxBcHBDb25maWdbS10+O1xuICAgIHRoaXMuY2FjaGUuc2V0KHNlY3Rpb24sIHsgLi4uY3VycmVudCwgLi4uZGVmaW5lZCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaWtlIHtAbGluayBvdmVycmlkZX0sIGJ1dCBzY29wZWQ6IHNuYXBzaG90cyB0aGUgY3VycmVudCBjYWNoZSBzdGF0ZSBmb3JcbiAgICogYHNlY3Rpb25gIGFuZCByZXR1cm5zIGEgcmVzdG9yZSBmdW5jdGlvbiB0aGF0IHJldmVydHMgaXQuIFVzZSBhcm91bmQgYVxuICAgKiBzaW5nbGUgdW5pdCBvZiB3b3JrIChlLmcuIG9uZSBDREsgUGlwZWxpbmVCdWlsZGVyJ3Mgc3ludGgpIHNvIGEgcGVyLWJ1aWxkZXJcbiAgICogb3ZlcnJpZGUgZG9lcyBOT1QgbGVhayBpbnRvIHRoZSBwcm9jZXNzLXdpZGUgY2FjaGUgYW5kIGJsZWVkIGludG8gc2libGluZ1xuICAgKiBidWlsZGVycyBpbiBhIG11bHRpLXBpcGVsaW5lIENESyBhcHAuIENhbGxpbmcgdGhlIHJldHVybmVkIGZ1bmN0aW9uIHJlc3RvcmVzXG4gICAqIHRoZSBleGFjdCBwcmlvciBzdGF0ZSDigJQgdGhlIHByZXZpb3VzbHkgY2FjaGVkIHZhbHVlLCBvciBhbiB1bmxvYWRlZCBzZWN0aW9uXG4gICAqIGlmIGl0IGhhZCBub3QgYmVlbiBjYWNoZWQgeWV0IChzbyB0aGUgbmV4dCBgZ2V0KClgIHJlLWxvYWRzIGZyb20gZW52KS5cbiAgICovXG4gIHN0YXRpYyBvdmVycmlkZVNjb3BlZDxLIGV4dGVuZHMga2V5b2YgQXBwQ29uZmlnPihcbiAgICBzZWN0aW9uOiBLLFxuICAgIHBhcnRpYWw6IFBhcnRpYWw8QXBwQ29uZmlnW0tdPixcbiAgKTogKCkgPT4gdm9pZCB7XG4gICAgY29uc3QgaGFkQ2FjaGVkID0gdGhpcy5jYWNoZS5oYXMoc2VjdGlvbik7XG4gICAgY29uc3QgcHJldmlvdXMgPSBoYWRDYWNoZWQgPyB0aGlzLmNhY2hlLmdldChzZWN0aW9uKSA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLm92ZXJyaWRlKHNlY3Rpb24sIHBhcnRpYWwpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAoaGFkQ2FjaGVkKSB0aGlzLmNhY2hlLnNldChzZWN0aW9uLCBwcmV2aW91cyk7XG4gICAgICBlbHNlIHRoaXMuY2FjaGUuZGVsZXRlKHNlY3Rpb24pO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIGNhY2hlZCBjb25maWcgc2VjdGlvbnMgc28gdGhlIG5leHQgYENvbmZpZy5nZXQoKWAgcmUtcmVhZHMgdGhlbVxuICAgKiBmcm9tIHRoZSBjdXJyZW50IGBwcm9jZXNzLmVudmAgKHJlLXJ1bm5pbmcgZWFjaCBzZWN0aW9uJ3MgbG9hZGVyICsgdmFsaWRhdG9yKS5cbiAgICpcbiAgICogVXNlIHdoZW4gZW52IGhhcyBiZWVuIG11dGF0ZWQgaW4tcHJvY2VzcyBhbmQgdGhlIGNhY2hlIGlzIG5vdyBzdGFsZSDigJQgZS5nLiBhXG4gICAqIGxvbmctcnVubmluZyBDTEkgdGhhdCByZWNvbmZpZ3VyZXMgYmV0d2VlbiBvcGVyYXRpb25zLiBDREsgc3ludGggcnVucyBpbiBhXG4gICAqIGZyZXNoIHN1YnByb2Nlc3MgdGhhdCBhbHJlYWR5IHJlYWRzIGVudiBvbiBmaXJzdCBhY2Nlc3MsIHNvIGl0IGRvZXMgbm90IG5lZWRcbiAgICogdGhpcy4gTm90ZTogdGhpcyBhbHNvIGRyb3BzIGFueSB2YWx1ZXMgc2V0IHZpYSB7QGxpbmsgb3ZlcnJpZGV9LlxuICAgKi9cbiAgc3RhdGljIHJlbG9hZCgpOiB2b2lkIHtcbiAgICB0aGlzLmNhY2hlLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsIFJlc2V0IGNvbmZpZ3VyYXRpb24gKGZvciB0ZXN0aW5nIG9ubHkpLiBBbGlhcyBmb3Ige0BsaW5rIHJlbG9hZH0uXG4gICAqL1xuICBzdGF0aWMgX3Jlc2V0Rm9yVGVzdGluZygpOiB2b2lkIHtcbiAgICB0aGlzLnJlbG9hZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGF1dGggY29uZmlndXJhdGlvbiAoSldUIHNlY3JldHMsIGFsZ29yaXRobXMsIGV4cGlyYXRpb24pLlxuICAgKiBDYWxsIHRoaXMgYXQgc2VydmVyIHN0YXJ0dXAsIG5vdCBkdXJpbmcgQ0RLIHN5bnRoZXNpcy5cbiAgICovXG4gIHN0YXRpYyB2YWxpZGF0ZUF1dGgoKTogdm9pZCB7XG4gICAgdmFsaWRhdGVBdXRoQ29uZmlnKHRoaXMuZ2V0KCdhdXRoJykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVudHlwZWQgY29uZmlnIGFjY2VzcyDigJQgdXNlIHdoZW4gdGhlIHB1Ymxpc2hlZCBwYWNrYWdlIHR5cGVzIGRvbid0IGluY2x1ZGUgYSBuZXcgc2VjdGlvbiB5ZXQuXG4gICAqIEF2b2lkcyB0aGUgYChDb25maWcgYXMgdW5rbm93biBhcyAuLi4pLmdldCguLi4pYCBjYXN0IHBhdHRlcm4gaW4gY29uc3VtZXJzLlxuICAgKi9cbiAgc3RhdGljIGdldEFueShzZWN0aW9uOiBzdHJpbmcpOiB1bmtub3duIHtcbiAgICByZXR1cm4gdGhpcy5nZXQoc2VjdGlvbiBhcyBrZXlvZiBBcHBDb25maWcpO1xuICB9XG59XG4iXX0=
@@ -108,9 +108,10 @@ export function loadComplianceConfig() {
108
108
  return {
109
109
  scanSchedulerIntervalMs: envInt('SCAN_SCHEDULER_INTERVAL_MS', 60_000),
110
110
  systemOrgScansEnabled: envBool('SYSTEM_ORG_SCANS_ENABLED', false),
111
- scanLockTtlMs: envInt('SCAN_LOCK_TTL_MS', 300_000),
111
+ // Crash-recovery window, not a run-duration cover: the lock heartbeats.
112
+ scanLockTtlMs: envInt('SCAN_LOCK_TTL_MS', 120_000),
112
113
  digestSchedulerIntervalMs: envInt('DIGEST_SCHEDULER_INTERVAL_MS', 3_600_000),
113
- digestLockTtlMs: envInt('DIGEST_LOCK_TTL_MS', 300_000),
114
+ digestLockTtlMs: envInt('DIGEST_LOCK_TTL_MS', 120_000),
114
115
  };
115
116
  }
116
117
  /**
@@ -168,4 +169,4 @@ export function loadAWSConfig() {
168
169
  },
169
170
  };
170
171
  }
171
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mcmFzdHJ1Y3R1cmUtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy9pbmZyYXN0cnVjdHVyZS1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNyRSxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFHeEI7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCO0lBQ2hDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN2RCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMscUJBQXFCLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbEQsNEVBQTRFO0lBQzVFLHdFQUF3RTtJQUN4RSw4RUFBOEU7SUFDOUUsNEVBQTRFO0lBQzVFLE1BQU0sUUFBUSxHQUFHLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNyRSxPQUFPO1FBQ0wsSUFBSTtRQUNKLElBQUk7UUFDSixRQUFRLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsSUFBSSxRQUFRLEVBQUUsSUFBSSxJQUFJLElBQUk7UUFDeEUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsd0JBQXdCO1lBQzVDLENBQUMsQ0FBQyxNQUFNLENBQUMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDO1lBQzFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDO1FBQzVCLE9BQU8sRUFBRSxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDO1FBQ3JDLElBQUksRUFBRSxPQUFPLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDO0tBQzNDLENBQUM7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T0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTztZQUMvRSw0QkFBNEIsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQjtnQkFDbkUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyw2QkFBNkIsRUFBRSxDQUFDLENBQUM7Z0JBQzFDLENBQUMsQ0FBQyxTQUFTO1NBQ2Q7UUFFRCxPQUFPLEVBQUU7WUFDUCxTQUFTLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixFQUFFLHdCQUF3QixDQUFDO1NBQzlEO1FBRUQsU0FBUyxFQUFFO1lBQ1QsV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLHdCQUF3QixFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFO1lBQ3RFLFlBQVksRUFBRSxNQUFNLENBQUMseUJBQXlCLEVBQUUsd0JBQXdCLENBQUM7U0FDMUU7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBlbnZCb29sLCBlbnZJbnQsIGVudlN0ciB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHR5cGUgeyBBV1NDb25maWcsIEJ1aWxkQ29uZmlnLCBDb21wbGlhbmNlQ29uZmlnLCBEYXRhYmFzZUNvbmZpZywgT2JzZXJ2YWJpbGl0eUNvbmZpZywgUGx1Z2luQnVpbGRDb25maWcsIFJlZ2lzdHJ5Q29uZmlnIH0gZnJvbSAnLi9jb25maWctdHlwZXMuanMnO1xuXG4vKipcbiAqIExvYWQgRG9ja2VyIHJlZ2lzdHJ5IGNvbmZpZ3VyYXRpb24gZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gKlxuICogRW52aXJvbm1lbnQgdmFyaWFibGVzOlxuICogLSBgSU1BR0VfUkVHSVNUUllfSE9TVGAg4oCUIFJlZ2lzdHJ5IGhvc3RuYW1lIChkZWZhdWx0OiBgJ3JlZ2lzdHJ5J2ApXG4gKiAtIGBJTUFHRV9SRUdJU1RSWV9QT1JUYCDigJQgUmVnaXN0cnkgcG9ydCAoZGVmYXVsdDogYDUwMDBgKVxuICogLSBgSU1BR0VfUkVHSVNUUllfUFVMTF9IT1NUYCDigJQgSG9zdCBhbiBvdXQtb2YtY2x1c3RlciBjbGllbnQgKENvZGVCdWlsZClcbiAqICAgdXNlcyB0byBwdWxsIHBsdWdpbiBpbWFnZXMuIFdoZW4gdW5zZXQsIGRlcml2ZWQgZnJvbSBgUExBVEZPUk1fQkFTRV9VUkxgJ3NcbiAqICAgaG9zdCAodGhlIHB1YmxpYyBlbmRwb2ludCBDb2RlQnVpbGQgY2FuIHJlc29sdmUpLCB0aGVuIGBJTUFHRV9SRUdJU1RSWV9IT1NUYC5cbiAqIC0gYElNQUdFX1JFR0lTVFJZX1BVTExfUE9SVGAg4oCUIFBvcnQgZm9yIHRoZSBhYm92ZS4gV2hlbiB1bnNldCwgZGVyaXZlZCBmcm9tXG4gKiAgIGBQTEFURk9STV9CQVNFX1VSTGAncyBwb3J0LCB0aGVuIGBJTUFHRV9SRUdJU1RSWV9QT1JUYC5cbiAqIC0gYERPQ0tFUl9ORVRXT1JLYCDigJQgRG9ja2VyIG5ldHdvcmsgZm9yIGJ1aWxkL3B1c2ggKGRlZmF1bHQ6IGAnJ2ApXG4gKiAtIGBJTUFHRV9SRUdJU1RSWV9IVFRQYCDigJQgVXNlIHBsYWluIEhUVFAgaW5zdGVhZCBvZiBIVFRQUyAoZGVmYXVsdDogYHRydWVgLFxuICogICB0aGUgaW4tY2x1c3RlciByZWdpc3RyeSBoYXMgbm8gVExTKS5cbiAqXG4gKiBAcmV0dXJucyBSZWdpc3RyeSBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkUmVnaXN0cnlDb25maWcoKTogUmVnaXN0cnlDb25maWcge1xuICBjb25zdCBob3N0ID0gZW52U3RyKCdJTUFHRV9SRUdJU1RSWV9IT1NUJywgJ3JlZ2lzdHJ5Jyk7XG4gIGNvbnN0IHBvcnQgPSBlbnZJbnQoJ0lNQUdFX1JFR0lTVFJZX1BPUlQnLCA1XzAwMCk7XG4gIC8vIFdoZW4gbm8gZXhwbGljaXQgcHVsbCBob3N0IGlzIHNldCwgZGVyaXZlIGl0IGZyb20gUExBVEZPUk1fQkFTRV9VUkwg4oCUIHRoZVxuICAvLyBwdWJsaWMgcGxhdGZvcm0gZW5kcG9pbnQgYW4gb3V0LW9mLWNsdXN0ZXIgY2xpZW50IChBV1MgQ29kZUJ1aWxkKSBjYW5cbiAgLy8gcmVzb2x2ZSwgdW5saWtlIHRoZSBpbi1jbHVzdGVyIGByZWdpc3RyeWAgQ2x1c3RlcklQLiBPbmx5IGZhbGxzIGJhY2sgdG8gdGhlXG4gIC8vIGluLWNsdXN0ZXIgaG9zdCB3aGVuIFBMQVRGT1JNX0JBU0VfVVJMIGlzIHVuc2V0L3VucGFyc2VhYmxlIChlLmcuIGxvY2FsKS5cbiAgY29uc3QgcGxhdGZvcm0gPSBwYXJzZVBsYXRmb3JtQmFzZVVybChwcm9jZXNzLmVudi5QTEFURk9STV9CQVNFX1VSTCk7XG4gIHJldHVybiB7XG4gICAgaG9zdCxcbiAgICBwb3J0LFxuICAgIHB1bGxIb3N0OiBwcm9jZXNzLmVudi5JTUFHRV9SRUdJU1RSWV9QVUxMX0hPU1QgfHwgcGxhdGZvcm0/Lmhvc3QgfHwgaG9zdCxcbiAgICBwdWxsUG9ydDogcHJvY2Vzcy5lbnYuSU1BR0VfUkVHSVNUUllfUFVMTF9QT1JUXG4gICAgICA/IGVudkludCgnSU1BR0VfUkVHSVNUUllfUFVMTF9QT1JUJywgcG9ydClcbiAgICAgIDogKHBsYXRmb3JtPy5wb3J0ID8/IHBvcnQpLFxuICAgIG5ldHdvcms6IGVudlN0cignRE9DS0VSX05FVFdPUksnLCAnJyksXG4gICAgaHR0cDogZW52Qm9vbCgnSU1BR0VfUkVHSVNUUllfSFRUUCcsIHRydWUpLFxuICB9O1xufVxuXG4vKiogRXh0cmFjdCBob3N0ICsgcG9ydCBmcm9tIFBMQVRGT1JNX0JBU0VfVVJMIChlLmcuIGBodHRwczovL3BpcGVsaW5lLWJ1aWxkZXIuY29tYFxuICogIOKGkiBgeyBob3N0OiAncGlwZWxpbmUtYnVpbGRlci5jb20nLCBwb3J0OiA0NDMgfWApLiBSZXR1cm5zIG51bGwgd2hlbiB0aGUgdmFsdWVcbiAqICBpcyB1bnNldCBvciBub3QgYSB2YWxpZCBVUkwuIEV4cG9ydGVkIHNvIHRoZSBDTEkgKHBpcGVsaW5lLW1hbmFnZXIpIGRlcml2ZXNcbiAqICB0aGUgcmVnaXN0cnkgcHVsbCB0YXJnZXQgd2l0aCB0aGUgU0FNRSBwYXJzaW5nLCBpbnN0ZWFkIG9mIGR1cGxpY2F0aW5nIGl0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUGxhdGZvcm1CYXNlVXJsKHJhdz86IHN0cmluZyk6IHsgaG9zdDogc3RyaW5nOyBwb3J0OiBudW1iZXIgfSB8IG51bGwge1xuICBpZiAoIXJhdykgcmV0dXJuIG51bGw7XG4gIHRyeSB7XG4gICAgY29uc3QgdSA9IG5ldyBVUkwocmF3KTtcbiAgICAvLyBBIHNjaGVtZS1sZXNzIHZhbHVlIGxpa2UgYGhvc3Q6ODQ0M2AgcGFyc2VzIHdpdGggYSBjdXN0b20gcHJvdG9jb2wgYW5kIGFuXG4gICAgLy8gRU1QVFkgaG9zdG5hbWUg4oCUIHJlamVjdCBpdCBzbyBjYWxsZXJzIGZhbGwgYmFjayByYXRoZXIgdGhhbiBkZXJpdmUgYVxuICAgIC8vIGhvc3QtbGVzcyBlbmRwb2ludC5cbiAgICBpZiAoIXUuaG9zdG5hbWUpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHBvcnQgPSB1LnBvcnQgPyBwYXJzZUludCh1LnBvcnQsIDEwKSA6ICh1LnByb3RvY29sID09PSAnaHR0cHM6JyA/IDQ0MyA6IDgwKTtcbiAgICByZXR1cm4geyBob3N0OiB1Lmhvc3RuYW1lLCBwb3J0IH07XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qKlxuICogTG9hZCBwbHVnaW4gYnVpbGQgcXVldWUgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBFbnZpcm9ubWVudCB2YXJpYWJsZXM6XG4gKiAtIGBQTFVHSU5fQlVJTERfQ09OQ1VSUkVOQ1lgIOKAlCBNYXggY29uY3VycmVudCBwbHVnaW4gYnVpbGRzIChkZWZhdWx0OiBgMWApXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkUGx1Z2luQnVpbGRDb25maWcoKTogUGx1Z2luQnVpbGRDb25maWcge1xuICByZXR1cm4ge1xuICAgIGNvbmN1cnJlbmN5OiBlbnZJbnQoJ1BMVUdJTl9CVUlMRF9DT05DVVJSRU5DWScsIDEpLFxuICAgIG1heEF0dGVtcHRzOiBlbnZJbnQoJ1BMVUdJTl9CVUlMRF9NQVhfQVRURU1QVFMnLCAyKSxcbiAgICBiYWNrb2ZmRGVsYXlNczogZW52SW50KCdQTFVHSU5fQlVJTERfQkFDS09GRl9ERUxBWV9NUycsIDVfMDAwKSxcbiAgICB3b3JrZXJUaW1lb3V0TXM6IGVudkludCgnUExVR0lOX0JVSUxEX1dPUktFUl9USU1FT1VUX01TJywgMTBfMDAwKSxcbiAgICB0ZW1wRGlyTWF4QWdlTXM6IGVudkludCgnVEVNUF9ESVJfTUFYX0FHRV9NUycsIDE0XzQwMF8wMDApLFxuICAgIGRscU1heEF0dGVtcHRzOiBlbnZJbnQoJ1BMVUdJTl9ETFFfTUFYX0FUVEVNUFRTJywgMyksXG4gICAgZGxxQmFja29mZkJhc2VNczogZW52SW50KCdQTFVHSU5fRExRX0JBQ0tPRkZfQkFTRV9NUycsIDMwMF8wMDApLFxuICAgIGRscU1heFNpemU6IGVudkludCgnUExVR0lOX0RMUV9NQVhfU0laRScsIDIwKSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWREYXRhYmFzZUNvbmZpZygpOiBEYXRhYmFzZUNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgcG9zdGdyZXM6IHtcbiAgICAgIGhvc3Q6IGVudlN0cignREJfSE9TVCcsICdwb3N0Z3JlcycpLFxuICAgICAgcG9ydDogZW52SW50KCdEQl9QT1JUJywgNV80MzIpLFxuICAgICAgZGF0YWJhc2U6IGVudlN0cignREFUQUJBU0UnLCAncGlwZWxpbmVfYnVpbGRlcicpLFxuICAgICAgdXNlcjogZW52U3RyKCdEQl9VU0VSJywgJ3Bvc3RncmVzJyksXG4gICAgICBwYXNzd29yZDogZW52U3RyKCdEQl9QQVNTV09SRCcsICcnKSxcbiAgICB9LFxuICAgIGRyaXp6bGU6IHtcbiAgICAgIG1heFBvb2xTaXplOiBlbnZJbnQoJ0RSSVpaTEVfTUFYX1BPT0xfU0laRScsIDIwKSxcbiAgICAgIGlkbGVUaW1lb3V0TWlsbGlzOiBlbnZJbnQoJ0RSSVpaTEVfSURMRV9USU1FT1VUX01JTExJUycsIDMwXzAwMCksXG4gICAgICBjb25uZWN0aW9uVGltZW91dE1pbGxpczogZW52SW50KCdEUklaWkxFX0NPTk5FQ1RJT05fVElNRU9VVF9NSUxMSVMnLCAxMF8wMDApLFxuICAgIH0sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkT2JzZXJ2YWJpbGl0eUNvbmZpZygpOiBPYnNlcnZhYmlsaXR5Q29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICBsb2dMZXZlbDogZW52U3RyKCdMT0dfTEVWRUwnLCAnaW5mbycpLFxuICAgIGxvZ0Zvcm1hdDogZW52U3RyKCdMT0dfRk9STUFUJywgJ2pzb24nKSxcbiAgICBzZXJ2aWNlTmFtZTogZW52U3RyKCdTRVJWSUNFX05BTUUnLCAnYXBpJyksXG4gICAgdHJhY2luZzoge1xuICAgICAgZW5hYmxlZDogZW52Qm9vbCgnT1RFTF9UUkFDSU5HX0VOQUJMRUQnLCBmYWxzZSksXG4gICAgICBlbmRwb2ludDogZW52U3RyKCdPVEVMX0VYUE9SVEVSX09UTFBfRU5EUE9JTlQnLCAnaHR0cDovL2xvY2FsaG9zdDo0MzE4L3YxL3RyYWNlcycpLFxuICAgIH0sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQ29tcGxpYW5jZUNvbmZpZygpOiBDb21wbGlhbmNlQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICBzY2FuU2NoZWR1bGVySW50ZXJ2YWxNczogZW52SW50KCdTQ0FOX1NDSEVEVUxFUl9JTlRFUlZBTF9NUycsIDYwXzAwMCksXG4gICAgc3lzdGVtT3JnU2NhbnNFbmFibGVkOiBlbnZCb29sKCdTWVNURU1fT1JHX1NDQU5TX0VOQUJMRUQnLCBmYWxzZSksXG4gICAgc2NhbkxvY2tUdGxNczogZW52SW50KCdTQ0FOX0xPQ0tfVFRMX01TJywgMzAwXzAwMCksXG4gICAgZGlnZXN0U2NoZWR1bGVySW50ZXJ2YWxNczogZW52SW50KCdESUdFU1RfU0NIRURVTEVSX0lOVEVSVkFMX01TJywgM182MDBfMDAwKSxcbiAgICBkaWdlc3RMb2NrVHRsTXM6IGVudkludCgnRElHRVNUX0xPQ0tfVFRMX01TJywgMzAwXzAwMCksXG4gIH07XG59XG5cbi8qKlxuICogTG9hZCBwbHVnaW4gYnVpbGQgY29uZmlndXJhdGlvbi4gQnVpbGRzIHJ1biBhZ2FpbnN0IGEgcm9vdGxlc3MgYG1vYnkvYnVpbGRraXRgXG4gKiBzaWRlY2FyIOKAlCBzZWUgYEJVSUxES0lUX0hPU1RgLlxuICpcbiAqIEVudmlyb25tZW50IHZhcmlhYmxlczpcbiAqIC0gYERPQ0tFUl9CVUlMRF9URU1QX1JPT1RgIOKAlCBUZW1wIGRpcmVjdG9yeSBmb3IgYnVpbGQgY29udGV4dHMgKGRlZmF1bHQ6IGA8Y3dkPi90bXBgKVxuICogLSBgRE9DS0VSX0JVSUxEX1RJTUVPVVRfTVNgIOKAlCBCdWlsZCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyAoZGVmYXVsdDogYDkwMDAwMGAgLyAxNSBtaW4pXG4gKiAtIGBET0NLRVJfUFVTSF9USU1FT1VUX01TYCDigJQgUHVzaCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyAoZGVmYXVsdDogYDMwMDAwMGAgLyA1IG1pbilcbiAqIC0gYEJVSUxES0lUX0hPU1RgIOKAlCBidWlsZGN0bCBgLS1hZGRyYCB2YWx1ZSBmb3IgdGhlIGJ1aWxka2l0ZCBzaWRlY2FyXG4gKiAgIChkZWZhdWx0OiBgdW5peDovLy9ydW4vYnVpbGRraXQvYnVpbGRraXRkLnNvY2tgKVxuICogLSBgUExVR0lOX1NJR05JTkdfUFVCTElDX0tFWV9GSUxFYCDigJQgUEVNIHB1YmxpYyBrZXkgcGx1Z2luIGltYWdlcyBhcmUgdmVyaWZpZWRcbiAqICAgYWdhaW5zdCAoZGVmYXVsdDogYC9ldGMvcGlwZWxpbmUtYnVpbGRlci9wbHVnaW4tc2lnbmluZy9wbHVnaW4tc2lnbmluZy5wdWJgKVxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZERvY2tlckNvbmZpZygpOiBCdWlsZENvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgdGVtcFJvb3Q6IHByb2Nlc3MuZW52LkRPQ0tFUl9CVUlMRF9URU1QX1JPT1QgfHwgcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICd0bXAnKSxcbiAgICB0aW1lb3V0TXM6IGVudkludCgnRE9DS0VSX0JVSUxEX1RJTUVPVVRfTVMnLCA5MDBfMDAwKSxcbiAgICBwdXNoVGltZW91dE1zOiBlbnZJbnQoJ0RPQ0tFUl9QVVNIX1RJTUVPVVRfTVMnLCAzMDBfMDAwKSxcbiAgICBidWlsZGtpdEFkZHI6IGVudlN0cignQlVJTERLSVRfSE9TVCcsICd1bml4Oi8vL3J1bi9idWlsZGtpdC9idWlsZGtpdGQuc29jaycpLFxuICAgIHNpZ25pbmdQdWJsaWNLZXlGaWxlOiBlbnZTdHIoJ1BMVUdJTl9TSUdOSU5HX1BVQkxJQ19LRVlfRklMRScsICcvZXRjL3BpcGVsaW5lLWJ1aWxkZXIvcGx1Z2luLXNpZ25pbmcvcGx1Z2luLXNpZ25pbmcucHViJyksXG4gIH07XG59XG5cbi8qKlxuICogTG9hZCBBV1MgaW5mcmFzdHJ1Y3R1cmUgY29uZmlndXJhdGlvbiBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAqXG4gKiBFbnZpcm9ubWVudCB2YXJpYWJsZXM6XG4gKiAtIGBMQU1CREFfUlVOVElNRWAg4oCUIExhbWJkYSBydW50aW1lIChkZWZhdWx0OiBgJ25vZGVqczI0LngnYDsgdW5rbm93biB2YWx1ZXMgZmFsbCBiYWNrIHRvIGl0KVxuICogLSBgTEFNQkRBX1RJTUVPVVRgIOKAlCBMYW1iZGEgdGltZW91dCBpbiBzZWNvbmRzIChkZWZhdWx0OiBgOTAwYClcbiAqIC0gYExBTUJEQV9NRU1PUllfU0laRWAg4oCUIExhbWJkYSBtZW1vcnkgaW4gTUIgKGRlZmF1bHQ6IGA1MTJgKVxuICogLSBgTEFNQkRBX0FSQ0hJVEVDVFVSRWAg4oCUIGAneDg2XzY0J2Agb3IgQVJNIChkZWZhdWx0OiBBUk1fNjQpXG4gKiAtIGBMT0dfR1JPVVBfTkFNRWAg4oCUIENsb3VkV2F0Y2ggbG9nIGdyb3VwIChkZWZhdWx0OiBgJy9waXBlbGluZS1idWlsZGVyL2xvZ3MnYClcbiAqIC0gYENPREVCVUlMRF9DT01QVVRFX1RZUEVgIOKAlCBDb2RlQnVpbGQgY29tcHV0ZSB0eXBlIChkZWZhdWx0OiBgJ1NNQUxMJ2ApXG4gKlxuICogQHJldHVybnMgQVdTIGluZnJhc3RydWN0dXJlIGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRBV1NDb25maWcoKTogQVdTQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICBsYW1iZGE6IHtcbiAgICAgIHJ1bnRpbWU6IGVudlN0cignTEFNQkRBX1JVTlRJTUUnLCAnbm9kZWpzMjQueCcpLFxuICAgICAgdGltZW91dFNlY29uZHM6IGVudkludCgnTEFNQkRBX1RJTUVPVVQnLCA5MDApLFxuICAgICAgbWVtb3J5U2l6ZTogZW52SW50KCdMQU1CREFfTUVNT1JZX1NJWkUnLCA1MTIpLFxuICAgICAgYXJjaGl0ZWN0dXJlOiBwcm9jZXNzLmVudi5MQU1CREFfQVJDSElURUNUVVJFID09PSAneDg2XzY0JyA/ICd4ODZfNjQnIDogJ2FybTY0JyxcbiAgICAgIHJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnM6IHByb2Nlc3MuZW52LkxBTUJEQV9SRVNFUlZFRF9DT05DVVJSRU5DWVxuICAgICAgICA/IGVudkludCgnTEFNQkRBX1JFU0VSVkVEX0NPTkNVUlJFTkNZJywgMClcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfSxcblxuICAgIGxvZ2dpbmc6IHtcbiAgICAgIGdyb3VwTmFtZTogZW52U3RyKCdMT0dfR1JPVVBfTkFNRScsICcvcGlwZWxpbmUtYnVpbGRlci9sb2dzJyksXG4gICAgfSxcblxuICAgIGNvZGVCdWlsZDoge1xuICAgICAgY29tcHV0ZVR5cGU6IChlbnZTdHIoJ0NPREVCVUlMRF9DT01QVVRFX1RZUEUnLCAnU01BTEwnKSkudG9VcHBlckNhc2UoKSxcbiAgICAgIGRlZmF1bHRJbWFnZTogZW52U3RyKCdDT0RFQlVJTERfREVGQVVMVF9JTUFHRScsICdwaXBlbGluZS1ib290c3RyYXA6MS4wJyksXG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==
172
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mcmFzdHJ1Y3R1cmUtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy9pbmZyYXN0cnVjdHVyZS1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNyRSxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFHeEI7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCO0lBQ2hDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN2RCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMscUJBQXFCLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbEQsNEVBQTRFO0lBQzVFLHdFQUF3RTtJQUN4RSw4RUFBOEU7SUFDOUUsNEVBQTRFO0lBQzVFLE1BQU0sUUFBUSxHQUFHLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNyRSxPQUFPO1FBQ0wsSUFBSTtRQUNKLElBQUk7UUFDSixRQUFRLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsSUFBSSxRQUFRLEVBQUUsSUFBSSxJQUFJLElBQUk7UUFDeEUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsd0JBQXdCO1lBQzVDLENBQUMsQ0FBQyxNQUFNLENBQUMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDO1lBQzFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDO1FBQzVCLE9BQU8sRUFBRSxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDO1FBQ3JDLElBQUksRUFBRSxPQUFPLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDO0tBQzNDLENBQUM7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N0MsWUFBWSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU87WUFDL0UsNEJBQTRCLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkI7Z0JBQ25FLENBQUMsQ0FBQyxNQUFNLENBQUMsNkJBQTZCLEVBQUUsQ0FBQyxDQUFDO2dCQUMxQyxDQUFDLENBQUMsU0FBUztTQUNkO1FBRUQsT0FBTyxFQUFFO1lBQ1AsU0FBUyxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSx3QkFBd0IsQ0FBQztTQUM5RDtRQUVELFNBQVMsRUFBRTtZQUNULFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRTtZQUN0RSxZQUFZLEVBQUUsTUFBTSxDQUFDLHlCQUF5QixFQUFFLHdCQUF3QixDQUFDO1NBQzFFO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgZW52Qm9vbCwgZW52SW50LCBlbnZTdHIgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB0eXBlIHsgQVdTQ29uZmlnLCBCdWlsZENvbmZpZywgQ29tcGxpYW5jZUNvbmZpZywgRGF0YWJhc2VDb25maWcsIE9ic2VydmFiaWxpdHlDb25maWcsIFBsdWdpbkJ1aWxkQ29uZmlnLCBSZWdpc3RyeUNvbmZpZyB9IGZyb20gJy4vY29uZmlnLXR5cGVzLmpzJztcblxuLyoqXG4gKiBMb2FkIERvY2tlciByZWdpc3RyeSBjb25maWd1cmF0aW9uIGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICpcbiAqIEVudmlyb25tZW50IHZhcmlhYmxlczpcbiAqIC0gYElNQUdFX1JFR0lTVFJZX0hPU1RgIOKAlCBSZWdpc3RyeSBob3N0bmFtZSAoZGVmYXVsdDogYCdyZWdpc3RyeSdgKVxuICogLSBgSU1BR0VfUkVHSVNUUllfUE9SVGAg4oCUIFJlZ2lzdHJ5IHBvcnQgKGRlZmF1bHQ6IGA1MDAwYClcbiAqIC0gYElNQUdFX1JFR0lTVFJZX1BVTExfSE9TVGAg4oCUIEhvc3QgYW4gb3V0LW9mLWNsdXN0ZXIgY2xpZW50IChDb2RlQnVpbGQpXG4gKiAgIHVzZXMgdG8gcHVsbCBwbHVnaW4gaW1hZ2VzLiBXaGVuIHVuc2V0LCBkZXJpdmVkIGZyb20gYFBMQVRGT1JNX0JBU0VfVVJMYCdzXG4gKiAgIGhvc3QgKHRoZSBwdWJsaWMgZW5kcG9pbnQgQ29kZUJ1aWxkIGNhbiByZXNvbHZlKSwgdGhlbiBgSU1BR0VfUkVHSVNUUllfSE9TVGAuXG4gKiAtIGBJTUFHRV9SRUdJU1RSWV9QVUxMX1BPUlRgIOKAlCBQb3J0IGZvciB0aGUgYWJvdmUuIFdoZW4gdW5zZXQsIGRlcml2ZWQgZnJvbVxuICogICBgUExBVEZPUk1fQkFTRV9VUkxgJ3MgcG9ydCwgdGhlbiBgSU1BR0VfUkVHSVNUUllfUE9SVGAuXG4gKiAtIGBET0NLRVJfTkVUV09SS2Ag4oCUIERvY2tlciBuZXR3b3JrIGZvciBidWlsZC9wdXNoIChkZWZhdWx0OiBgJydgKVxuICogLSBgSU1BR0VfUkVHSVNUUllfSFRUUGAg4oCUIFVzZSBwbGFpbiBIVFRQIGluc3RlYWQgb2YgSFRUUFMgKGRlZmF1bHQ6IGB0cnVlYCxcbiAqICAgdGhlIGluLWNsdXN0ZXIgcmVnaXN0cnkgaGFzIG5vIFRMUykuXG4gKlxuICogQHJldHVybnMgUmVnaXN0cnkgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZFJlZ2lzdHJ5Q29uZmlnKCk6IFJlZ2lzdHJ5Q29uZmlnIHtcbiAgY29uc3QgaG9zdCA9IGVudlN0cignSU1BR0VfUkVHSVNUUllfSE9TVCcsICdyZWdpc3RyeScpO1xuICBjb25zdCBwb3J0ID0gZW52SW50KCdJTUFHRV9SRUdJU1RSWV9QT1JUJywgNV8wMDApO1xuICAvLyBXaGVuIG5vIGV4cGxpY2l0IHB1bGwgaG9zdCBpcyBzZXQsIGRlcml2ZSBpdCBmcm9tIFBMQVRGT1JNX0JBU0VfVVJMIOKAlCB0aGVcbiAgLy8gcHVibGljIHBsYXRmb3JtIGVuZHBvaW50IGFuIG91dC1vZi1jbHVzdGVyIGNsaWVudCAoQVdTIENvZGVCdWlsZCkgY2FuXG4gIC8vIHJlc29sdmUsIHVubGlrZSB0aGUgaW4tY2x1c3RlciBgcmVnaXN0cnlgIENsdXN0ZXJJUC4gT25seSBmYWxscyBiYWNrIHRvIHRoZVxuICAvLyBpbi1jbHVzdGVyIGhvc3Qgd2hlbiBQTEFURk9STV9CQVNFX1VSTCBpcyB1bnNldC91bnBhcnNlYWJsZSAoZS5nLiBsb2NhbCkuXG4gIGNvbnN0IHBsYXRmb3JtID0gcGFyc2VQbGF0Zm9ybUJhc2VVcmwocHJvY2Vzcy5lbnYuUExBVEZPUk1fQkFTRV9VUkwpO1xuICByZXR1cm4ge1xuICAgIGhvc3QsXG4gICAgcG9ydCxcbiAgICBwdWxsSG9zdDogcHJvY2Vzcy5lbnYuSU1BR0VfUkVHSVNUUllfUFVMTF9IT1NUIHx8IHBsYXRmb3JtPy5ob3N0IHx8IGhvc3QsXG4gICAgcHVsbFBvcnQ6IHByb2Nlc3MuZW52LklNQUdFX1JFR0lTVFJZX1BVTExfUE9SVFxuICAgICAgPyBlbnZJbnQoJ0lNQUdFX1JFR0lTVFJZX1BVTExfUE9SVCcsIHBvcnQpXG4gICAgICA6IChwbGF0Zm9ybT8ucG9ydCA/PyBwb3J0KSxcbiAgICBuZXR3b3JrOiBlbnZTdHIoJ0RPQ0tFUl9ORVRXT1JLJywgJycpLFxuICAgIGh0dHA6IGVudkJvb2woJ0lNQUdFX1JFR0lTVFJZX0hUVFAnLCB0cnVlKSxcbiAgfTtcbn1cblxuLyoqIEV4dHJhY3QgaG9zdCArIHBvcnQgZnJvbSBQTEFURk9STV9CQVNFX1VSTCAoZS5nLiBgaHR0cHM6Ly9waXBlbGluZS1idWlsZGVyLmNvbWBcbiAqICDihpIgYHsgaG9zdDogJ3BpcGVsaW5lLWJ1aWxkZXIuY29tJywgcG9ydDogNDQzIH1gKS4gUmV0dXJucyBudWxsIHdoZW4gdGhlIHZhbHVlXG4gKiAgaXMgdW5zZXQgb3Igbm90IGEgdmFsaWQgVVJMLiBFeHBvcnRlZCBzbyB0aGUgQ0xJIChwaXBlbGluZS1tYW5hZ2VyKSBkZXJpdmVzXG4gKiAgdGhlIHJlZ2lzdHJ5IHB1bGwgdGFyZ2V0IHdpdGggdGhlIFNBTUUgcGFyc2luZywgaW5zdGVhZCBvZiBkdXBsaWNhdGluZyBpdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBsYXRmb3JtQmFzZVVybChyYXc/OiBzdHJpbmcpOiB7IGhvc3Q6IHN0cmluZzsgcG9ydDogbnVtYmVyIH0gfCBudWxsIHtcbiAgaWYgKCFyYXcpIHJldHVybiBudWxsO1xuICB0cnkge1xuICAgIGNvbnN0IHUgPSBuZXcgVVJMKHJhdyk7XG4gICAgLy8gQSBzY2hlbWUtbGVzcyB2YWx1ZSBsaWtlIGBob3N0Ojg0NDNgIHBhcnNlcyB3aXRoIGEgY3VzdG9tIHByb3RvY29sIGFuZCBhblxuICAgIC8vIEVNUFRZIGhvc3RuYW1lIOKAlCByZWplY3QgaXQgc28gY2FsbGVycyBmYWxsIGJhY2sgcmF0aGVyIHRoYW4gZGVyaXZlIGFcbiAgICAvLyBob3N0LWxlc3MgZW5kcG9pbnQuXG4gICAgaWYgKCF1Lmhvc3RuYW1lKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBwb3J0ID0gdS5wb3J0ID8gcGFyc2VJbnQodS5wb3J0LCAxMCkgOiAodS5wcm90b2NvbCA9PT0gJ2h0dHBzOicgPyA0NDMgOiA4MCk7XG4gICAgcmV0dXJuIHsgaG9zdDogdS5ob3N0bmFtZSwgcG9ydCB9O1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIExvYWQgcGx1Z2luIGJ1aWxkIHF1ZXVlIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogRW52aXJvbm1lbnQgdmFyaWFibGVzOlxuICogLSBgUExVR0lOX0JVSUxEX0NPTkNVUlJFTkNZYCDigJQgTWF4IGNvbmN1cnJlbnQgcGx1Z2luIGJ1aWxkcyAoZGVmYXVsdDogYDFgKVxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZFBsdWdpbkJ1aWxkQ29uZmlnKCk6IFBsdWdpbkJ1aWxkQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICBjb25jdXJyZW5jeTogZW52SW50KCdQTFVHSU5fQlVJTERfQ09OQ1VSUkVOQ1knLCAxKSxcbiAgICBtYXhBdHRlbXB0czogZW52SW50KCdQTFVHSU5fQlVJTERfTUFYX0FUVEVNUFRTJywgMiksXG4gICAgYmFja29mZkRlbGF5TXM6IGVudkludCgnUExVR0lOX0JVSUxEX0JBQ0tPRkZfREVMQVlfTVMnLCA1XzAwMCksXG4gICAgd29ya2VyVGltZW91dE1zOiBlbnZJbnQoJ1BMVUdJTl9CVUlMRF9XT1JLRVJfVElNRU9VVF9NUycsIDEwXzAwMCksXG4gICAgdGVtcERpck1heEFnZU1zOiBlbnZJbnQoJ1RFTVBfRElSX01BWF9BR0VfTVMnLCAxNF80MDBfMDAwKSxcbiAgICBkbHFNYXhBdHRlbXB0czogZW52SW50KCdQTFVHSU5fRExRX01BWF9BVFRFTVBUUycsIDMpLFxuICAgIGRscUJhY2tvZmZCYXNlTXM6IGVudkludCgnUExVR0lOX0RMUV9CQUNLT0ZGX0JBU0VfTVMnLCAzMDBfMDAwKSxcbiAgICBkbHFNYXhTaXplOiBlbnZJbnQoJ1BMVUdJTl9ETFFfTUFYX1NJWkUnLCAyMCksXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRGF0YWJhc2VDb25maWcoKTogRGF0YWJhc2VDb25maWcge1xuICByZXR1cm4ge1xuICAgIHBvc3RncmVzOiB7XG4gICAgICBob3N0OiBlbnZTdHIoJ0RCX0hPU1QnLCAncG9zdGdyZXMnKSxcbiAgICAgIHBvcnQ6IGVudkludCgnREJfUE9SVCcsIDVfNDMyKSxcbiAgICAgIGRhdGFiYXNlOiBlbnZTdHIoJ0RBVEFCQVNFJywgJ3BpcGVsaW5lX2J1aWxkZXInKSxcbiAgICAgIHVzZXI6IGVudlN0cignREJfVVNFUicsICdwb3N0Z3JlcycpLFxuICAgICAgcGFzc3dvcmQ6IGVudlN0cignREJfUEFTU1dPUkQnLCAnJyksXG4gICAgfSxcbiAgICBkcml6emxlOiB7XG4gICAgICBtYXhQb29sU2l6ZTogZW52SW50KCdEUklaWkxFX01BWF9QT09MX1NJWkUnLCAyMCksXG4gICAgICBpZGxlVGltZW91dE1pbGxpczogZW52SW50KCdEUklaWkxFX0lETEVfVElNRU9VVF9NSUxMSVMnLCAzMF8wMDApLFxuICAgICAgY29ubmVjdGlvblRpbWVvdXRNaWxsaXM6IGVudkludCgnRFJJWlpMRV9DT05ORUNUSU9OX1RJTUVPVVRfTUlMTElTJywgMTBfMDAwKSxcbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZE9ic2VydmFiaWxpdHlDb25maWcoKTogT2JzZXJ2YWJpbGl0eUNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgbG9nTGV2ZWw6IGVudlN0cignTE9HX0xFVkVMJywgJ2luZm8nKSxcbiAgICBsb2dGb3JtYXQ6IGVudlN0cignTE9HX0ZPUk1BVCcsICdqc29uJyksXG4gICAgc2VydmljZU5hbWU6IGVudlN0cignU0VSVklDRV9OQU1FJywgJ2FwaScpLFxuICAgIHRyYWNpbmc6IHtcbiAgICAgIGVuYWJsZWQ6IGVudkJvb2woJ09URUxfVFJBQ0lOR19FTkFCTEVEJywgZmFsc2UpLFxuICAgICAgZW5kcG9pbnQ6IGVudlN0cignT1RFTF9FWFBPUlRFUl9PVExQX0VORFBPSU5UJywgJ2h0dHA6Ly9sb2NhbGhvc3Q6NDMxOC92MS90cmFjZXMnKSxcbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZENvbXBsaWFuY2VDb25maWcoKTogQ29tcGxpYW5jZUNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgc2NhblNjaGVkdWxlckludGVydmFsTXM6IGVudkludCgnU0NBTl9TQ0hFRFVMRVJfSU5URVJWQUxfTVMnLCA2MF8wMDApLFxuICAgIHN5c3RlbU9yZ1NjYW5zRW5hYmxlZDogZW52Qm9vbCgnU1lTVEVNX09SR19TQ0FOU19FTkFCTEVEJywgZmFsc2UpLFxuICAgIC8vIENyYXNoLXJlY292ZXJ5IHdpbmRvdywgbm90IGEgcnVuLWR1cmF0aW9uIGNvdmVyOiB0aGUgbG9jayBoZWFydGJlYXRzLlxuICAgIHNjYW5Mb2NrVHRsTXM6IGVudkludCgnU0NBTl9MT0NLX1RUTF9NUycsIDEyMF8wMDApLFxuICAgIGRpZ2VzdFNjaGVkdWxlckludGVydmFsTXM6IGVudkludCgnRElHRVNUX1NDSEVEVUxFUl9JTlRFUlZBTF9NUycsIDNfNjAwXzAwMCksXG4gICAgZGlnZXN0TG9ja1R0bE1zOiBlbnZJbnQoJ0RJR0VTVF9MT0NLX1RUTF9NUycsIDEyMF8wMDApLFxuICB9O1xufVxuXG4vKipcbiAqIExvYWQgcGx1Z2luIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEJ1aWxkcyBydW4gYWdhaW5zdCBhIHJvb3RsZXNzIGBtb2J5L2J1aWxka2l0YFxuICogc2lkZWNhciDigJQgc2VlIGBCVUlMREtJVF9IT1NUYC5cbiAqXG4gKiBFbnZpcm9ubWVudCB2YXJpYWJsZXM6XG4gKiAtIGBET0NLRVJfQlVJTERfVEVNUF9ST09UYCDigJQgVGVtcCBkaXJlY3RvcnkgZm9yIGJ1aWxkIGNvbnRleHRzIChkZWZhdWx0OiBgPGN3ZD4vdG1wYClcbiAqIC0gYERPQ0tFUl9CVUlMRF9USU1FT1VUX01TYCDigJQgQnVpbGQgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgKGRlZmF1bHQ6IGA5MDAwMDBgIC8gMTUgbWluKVxuICogLSBgRE9DS0VSX1BVU0hfVElNRU9VVF9NU2Ag4oCUIFB1c2ggdGltZW91dCBpbiBtaWxsaXNlY29uZHMgKGRlZmF1bHQ6IGAzMDAwMDBgIC8gNSBtaW4pXG4gKiAtIGBCVUlMREtJVF9IT1NUYCDigJQgYnVpbGRjdGwgYC0tYWRkcmAgdmFsdWUgZm9yIHRoZSBidWlsZGtpdGQgc2lkZWNhclxuICogICAoZGVmYXVsdDogYHVuaXg6Ly8vcnVuL2J1aWxka2l0L2J1aWxka2l0ZC5zb2NrYClcbiAqIC0gYFBMVUdJTl9TSUdOSU5HX1BVQkxJQ19LRVlfRklMRWAg4oCUIFBFTSBwdWJsaWMga2V5IHBsdWdpbiBpbWFnZXMgYXJlIHZlcmlmaWVkXG4gKiAgIGFnYWluc3QgKGRlZmF1bHQ6IGAvZXRjL3BpcGVsaW5lLWJ1aWxkZXIvcGx1Z2luLXNpZ25pbmcvcGx1Z2luLXNpZ25pbmcucHViYClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWREb2NrZXJDb25maWcoKTogQnVpbGRDb25maWcge1xuICByZXR1cm4ge1xuICAgIHRlbXBSb290OiBwcm9jZXNzLmVudi5ET0NLRVJfQlVJTERfVEVNUF9ST09UIHx8IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAndG1wJyksXG4gICAgdGltZW91dE1zOiBlbnZJbnQoJ0RPQ0tFUl9CVUlMRF9USU1FT1VUX01TJywgOTAwXzAwMCksXG4gICAgcHVzaFRpbWVvdXRNczogZW52SW50KCdET0NLRVJfUFVTSF9USU1FT1VUX01TJywgMzAwXzAwMCksXG4gICAgYnVpbGRraXRBZGRyOiBlbnZTdHIoJ0JVSUxES0lUX0hPU1QnLCAndW5peDovLy9ydW4vYnVpbGRraXQvYnVpbGRraXRkLnNvY2snKSxcbiAgICBzaWduaW5nUHVibGljS2V5RmlsZTogZW52U3RyKCdQTFVHSU5fU0lHTklOR19QVUJMSUNfS0VZX0ZJTEUnLCAnL2V0Yy9waXBlbGluZS1idWlsZGVyL3BsdWdpbi1zaWduaW5nL3BsdWdpbi1zaWduaW5nLnB1YicpLFxuICB9O1xufVxuXG4vKipcbiAqIExvYWQgQVdTIGluZnJhc3RydWN0dXJlIGNvbmZpZ3VyYXRpb24gZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gKlxuICogRW52aXJvbm1lbnQgdmFyaWFibGVzOlxuICogLSBgTEFNQkRBX1JVTlRJTUVgIOKAlCBMYW1iZGEgcnVudGltZSAoZGVmYXVsdDogYCdub2RlanMyNC54J2A7IHVua25vd24gdmFsdWVzIGZhbGwgYmFjayB0byBpdClcbiAqIC0gYExBTUJEQV9USU1FT1VUYCDigJQgTGFtYmRhIHRpbWVvdXQgaW4gc2Vjb25kcyAoZGVmYXVsdDogYDkwMGApXG4gKiAtIGBMQU1CREFfTUVNT1JZX1NJWkVgIOKAlCBMYW1iZGEgbWVtb3J5IGluIE1CIChkZWZhdWx0OiBgNTEyYClcbiAqIC0gYExBTUJEQV9BUkNISVRFQ1RVUkVgIOKAlCBgJ3g4Nl82NCdgIG9yIEFSTSAoZGVmYXVsdDogQVJNXzY0KVxuICogLSBgTE9HX0dST1VQX05BTUVgIOKAlCBDbG91ZFdhdGNoIGxvZyBncm91cCAoZGVmYXVsdDogYCcvcGlwZWxpbmUtYnVpbGRlci9sb2dzJ2ApXG4gKiAtIGBDT0RFQlVJTERfQ09NUFVURV9UWVBFYCDigJQgQ29kZUJ1aWxkIGNvbXB1dGUgdHlwZSAoZGVmYXVsdDogYCdTTUFMTCdgKVxuICpcbiAqIEByZXR1cm5zIEFXUyBpbmZyYXN0cnVjdHVyZSBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQVdTQ29uZmlnKCk6IEFXU0NvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgbGFtYmRhOiB7XG4gICAgICBydW50aW1lOiBlbnZTdHIoJ0xBTUJEQV9SVU5USU1FJywgJ25vZGVqczI0LngnKSxcbiAgICAgIHRpbWVvdXRTZWNvbmRzOiBlbnZJbnQoJ0xBTUJEQV9USU1FT1VUJywgOTAwKSxcbiAgICAgIG1lbW9yeVNpemU6IGVudkludCgnTEFNQkRBX01FTU9SWV9TSVpFJywgNTEyKSxcbiAgICAgIGFyY2hpdGVjdHVyZTogcHJvY2Vzcy5lbnYuTEFNQkRBX0FSQ0hJVEVDVFVSRSA9PT0gJ3g4Nl82NCcgPyAneDg2XzY0JyA6ICdhcm02NCcsXG4gICAgICByZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zOiBwcm9jZXNzLmVudi5MQU1CREFfUkVTRVJWRURfQ09OQ1VSUkVOQ1lcbiAgICAgICAgPyBlbnZJbnQoJ0xBTUJEQV9SRVNFUlZFRF9DT05DVVJSRU5DWScsIDApXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH0sXG5cbiAgICBsb2dnaW5nOiB7XG4gICAgICBncm91cE5hbWU6IGVudlN0cignTE9HX0dST1VQX05BTUUnLCAnL3BpcGVsaW5lLWJ1aWxkZXIvbG9ncycpLFxuICAgIH0sXG5cbiAgICBjb2RlQnVpbGQ6IHtcbiAgICAgIGNvbXB1dGVUeXBlOiAoZW52U3RyKCdDT0RFQlVJTERfQ09NUFVURV9UWVBFJywgJ1NNQUxMJykpLnRvVXBwZXJDYXNlKCksXG4gICAgICBkZWZhdWx0SW1hZ2U6IGVudlN0cignQ09ERUJVSUxEX0RFRkFVTFRfSU1BR0UnLCAncGlwZWxpbmUtYm9vdHN0cmFwOjEuMCcpLFxuICAgIH0sXG4gIH07XG59XG4iXX0=
package/lib/index.d.ts CHANGED
@@ -39,6 +39,8 @@ export { replaceNonAlphanumeric, extractMetadataEnv, resolveFailureBehavior, wra
39
39
  export * from './core/step-manifest.js';
40
40
  export { type ContractValueType, type PluginContract, type ContractScope, type ContractIssue, type ContractScopeProps, pipelineScopeMetadata, pipelineContractScope, contractScopeFromTemplateScope, isContractValueOfType, checkPluginContract, type PluginStepRef, collectPluginSteps, pluginLookupFilter, pluginArtifactAlias, type PluginRefIdentity, sanitizePublisher, } from './core/plugin-contract.js';
41
41
  export { unwrapLookup } from './core/plugin-lookup-envelope.js';
42
+ export * from './pipeline/deploy-attribution.js';
43
+ export * from './pipeline/structure-preview.js';
42
44
  export * from './pipeline/plugin-spec.js';
43
45
  export { tokenize, hasTemplate, MAX_FIELD_SIZE_BYTES, MAX_PATH_DEPTH, type Token, type LiteralToken, type ExprToken, type SourcePosition, resolve, dependencies, type Scope, type FieldPredicate, validateTemplates, detectCycles, allowedScopeRoots, type TemplateError, type TemplateValidationResult, type ResolveResult, resolveSelfReferencing, validateTemplateDraft, formatTemplateDraftProblems, type TemplateDraftInput, type TemplateDraftLike, type TemplateDraftProblem, type TemplateDraftProblemKind, type TemplateDraftValidation, } from './template/index.js';
44
46
  export { resolvePluginTemplates } from './template/plugin-resolver.js';
package/lib/index.js CHANGED
@@ -44,9 +44,15 @@ export * from './core/step-manifest.js';
44
44
  export { pipelineScopeMetadata, pipelineContractScope, contractScopeFromTemplateScope, isContractValueOfType, checkPluginContract, collectPluginSteps, pluginLookupFilter, pluginArtifactAlias, sanitizePublisher, } from './core/plugin-contract.js';
45
45
  export { unwrapLookup } from './core/plugin-lookup-envelope.js';
46
46
  // Plugin domain type (the synth-time authoring types live in the `/cdk` entry)
47
+ // CDK-free: the DORA deploy attribution the API reports in create/validate
48
+ // responses. The construct that stamps the tag reads the same function.
49
+ export * from './pipeline/deploy-attribution.js';
50
+ // CDK-free: the stage/plugin/IAM projection the create + validate responses return
51
+ // so a reviewer approves something concrete rather than raw props JSON.
52
+ export * from './pipeline/structure-preview.js';
47
53
  export * from './pipeline/plugin-spec.js';
48
54
  // Template engine — synth-time scripting for pipeline config + plugin specs
49
55
  export { tokenize, hasTemplate, MAX_FIELD_SIZE_BYTES, MAX_PATH_DEPTH, resolve, dependencies, validateTemplates, detectCycles, allowedScopeRoots, resolveSelfReferencing, validateTemplateDraft, formatTemplateDraftProblems, } from './template/index.js';
50
56
  // A plugin's `{{ … }}` resolution against a pipeline scope (synth, `plugin test`)
51
57
  export { resolvePluginTemplates } from './template/plugin-resolver.js';
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7QUFFSCxnQkFBZ0I7QUFDaEIsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFekUsOEJBQThCO0FBQzlCLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFzQyxXQUFXLEVBQUUsWUFBWSxFQUFvQixNQUFNLDBCQUEwQixDQUFDO0FBQ3BKLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsa0JBQWtCLEVBQUUsc0JBQXNCLEVBQUUsOEJBQThCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwSyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLE9BQU8sRUFNTCxxQkFBcUIsRUFDckIscUJBQXFCLEVBQ3JCLDhCQUE4QixFQUM5QixxQkFBcUIsRUFDckIsbUJBQW1CLEVBRW5CLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIsbUJBQW1CLEVBRW5CLGlCQUFpQixHQUNsQixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVoRSwrRUFBK0U7QUFDL0UsY0FBYywyQkFBMkIsQ0FBQztBQUUxQyw0RUFBNEU7QUFDNUUsT0FBTyxFQUNMLFFBQVEsRUFDUixXQUFXLEVBQ1gsb0JBQW9CLEVBQ3BCLGNBQWMsRUFLZCxPQUFPLEVBQ1AsWUFBWSxFQUdaLGlCQUFpQixFQUNqQixZQUFZLEVBQ1osaUJBQWlCLEVBSWpCLHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIsMkJBQTJCLEdBTTVCLE1BQU0scUJBQXFCLENBQUM7QUFDN0Isa0ZBQWtGO0FBQ2xGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLCtCQUErQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogQG1vZHVsZSBAcGlwZWxpbmUtYnVpbGRlci9waXBlbGluZS1jb3JlXG4gKlxuICogQXBwbGljYXRpb24gY29uZmlndXJhdGlvbiwgcGlwZWxpbmUgZG9tYWluIHR5cGVzLCBhbmQgdGhlIHRlbXBsYXRlIGVuZ2luZS5cbiAqXG4gKiBUaGlzIGVudHJ5IHBvaW50IGlzIGRlbGliZXJhdGVseSBGUkVFIG9mIGBhd3MtY2RrLWxpYmAuIFRoZSBDREsgY29uc3RydWN0cyBsaXZlXG4gKiBiZWhpbmQgYSBzZXBhcmF0ZSBzdWJwYXRoIOKAlCBgQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtY29yZS9jZGtgIOKAlCBiZWNhdXNlIHRoZVxuICogQVBJIHNlcnZpY2VzIGNvbnN1bWUgdGhpcyBwYWNrYWdlIGZvciBjb25maWcgYW5kIGRvbWFpbiB0eXBlcyBvbmx5LCBhbmQgYW5cbiAqIGBleHBvcnQgKmAgb2YgdGhlIGNvbnN0cnVjdHMgZnJvbSBoZXJlIHB1dCB0aGUgd2hvbGUgb2YgYGF3cy1jZGstbGliYCBvbiB0aGVcbiAqIGltcG9ydCBncmFwaCBvZiBldmVyeSBzZXJ2aWNlIHRoYXQgcmVhZCBzbyBtdWNoIGFzIGEgcG9ydCBudW1iZXIuIEFueXRoaW5nIHRoYXRcbiAqIGltcG9ydHMgYGF3cy1jZGstbGliYCwgYXQgdHlwZSBsZXZlbCBvciB2YWx1ZSBsZXZlbCwgYmVsb25ncyBpbiBgY2RrLnRzYC5cbiAqXG4gKiAqKkNvbmZpZyoqXG4gKiAtIENvbmZpZyDigJQgYXBwbGljYXRpb24gY29uZmlndXJhdGlvbiBzaW5nbGV0b24gKGVudmlyb25tZW50LWRyaXZlbilcbiAqIC0gQ29uZmlnVHlwZXMg4oCUIHR5cGVkIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlc1xuICpcbiAqICoqVHlwZXMqKlxuICogLSBQaXBlbGluZVR5cGUsIENvbXB1dGVUeXBlLCBQbHVnaW5UeXBlLCBWaXNpYmlsaXR5IOKAlCBwaXBlbGluZSBkb21haW4gZW51bXNcbiAqIC0gUm9sZVR5cGVzLCBTZWN1cml0eUdyb3VwVHlwZXMg4oCUIGluZnJhc3RydWN0dXJlIHR5cGUgZGVmaW5pdGlvbnNcbiAqIC0gUGx1Z2luU3BlYyDigJQgYSBwbHVnaW4ncyBkZWNsYXJlZCBjb250cmFjdFxuICogLSBJZEdlbmVyYXRvciDigJQgZGV0ZXJtaW5pc3RpYyBJRCBnZW5lcmF0aW9uXG4gKlxuICogKipIZWxwZXJzKipcbiAqIC0gcmVwbGFjZU5vbkFscGhhbnVtZXJpYywgZXh0cmFjdE1ldGFkYXRhRW52IOKAlCBzdHJpbmcgYW5kIG1ldGFkYXRhIHV0aWxpdGllc1xuICogLSByZXNvbHZlRmFpbHVyZUJlaGF2aW9yLCB3cmFwQ29tbWFuZHNGb3JGYWlsdXJlQmVoYXZpb3Ig4oCUIGEgc3RlcCdzIGZhaWx1cmVCZWhhdmlvciwgYXMgQ29kZUJ1aWxkIHJ1bnMgaXRcbiAqXG4gKiBUaGUgUG9zdGdyZXMvRHJpenpsZSBkYXRhIGxheWVyIChkYiwgc2NoZW1hLCBDcnVkU2VydmljZSwgcXVlcnkgYnVpbGRlcnMsXG4gKiBmaWx0ZXIvY29tcGxpYW5jZSB0eXBlcywgZXRjLikgaXMgTk9UIHJlLWV4cG9ydGVkIGhlcmUg4oCUIGltcG9ydCB0aG9zZVxuICogZGlyZWN0bHkgZnJvbSBgQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtZGF0YWAuXG4gKi9cblxuLy8gQ29uZmlndXJhdGlvblxuZXhwb3J0ICogZnJvbSAnLi9jb25maWcvYXBwLWNvbmZpZy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbmZpZy9jb25maWctdHlwZXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25maWcvc2VydmljZS1jbGllbnQuanMnO1xuZXhwb3J0IHsgcGFyc2VQbGF0Zm9ybUJhc2VVcmwgfSBmcm9tICcuL2NvbmZpZy9pbmZyYXN0cnVjdHVyZS1jb25maWcuanMnO1xuXG4vLyBDb3JlIHR5cGVzIChwdWJsaWMgc3VyZmFjZSlcbmV4cG9ydCB7IENvbXB1dGVUeXBlLCBQbHVnaW5UeXBlLCB0eXBlIE1ldGFEYXRhVHlwZSwgdHlwZSBWaXNpYmlsaXR5LCBUcmlnZ2VyVHlwZSwgTWV0YWRhdGFLZXlzLCB0eXBlIE1ldGFkYXRhS2V5IH0gZnJvbSAnLi9jb3JlL3BpcGVsaW5lLXR5cGVzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29yZS9yb2xlLXR5cGVzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29yZS9zZWN1cml0eS1ncm91cC10eXBlcy5qcyc7XG5leHBvcnQgeyByZXBsYWNlTm9uQWxwaGFudW1lcmljLCBleHRyYWN0TWV0YWRhdGFFbnYsIHJlc29sdmVGYWlsdXJlQmVoYXZpb3IsIHdyYXBDb21tYW5kc0ZvckZhaWx1cmVCZWhhdmlvciwgU1RFUF9CT09UU1RSQVBfQ01EIH0gZnJvbSAnLi9jb3JlL21ldGFkYXRhLWhlbHBlcnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb3JlL3N0ZXAtbWFuaWZlc3QuanMnO1xuZXhwb3J0IHtcbiAgdHlwZSBDb250cmFjdFZhbHVlVHlwZSxcbiAgdHlwZSBQbHVnaW5Db250cmFjdCxcbiAgdHlwZSBDb250cmFjdFNjb3BlLFxuICB0eXBlIENvbnRyYWN0SXNzdWUsXG4gIHR5cGUgQ29udHJhY3RTY29wZVByb3BzLFxuICBwaXBlbGluZVNjb3BlTWV0YWRhdGEsXG4gIHBpcGVsaW5lQ29udHJhY3RTY29wZSxcbiAgY29udHJhY3RTY29wZUZyb21UZW1wbGF0ZVNjb3BlLFxuICBpc0NvbnRyYWN0VmFsdWVPZlR5cGUsXG4gIGNoZWNrUGx1Z2luQ29udHJhY3QsXG4gIHR5cGUgUGx1Z2luU3RlcFJlZixcbiAgY29sbGVjdFBsdWdpblN0ZXBzLFxuICBwbHVnaW5Mb29rdXBGaWx0ZXIsXG4gIHBsdWdpbkFydGlmYWN0QWxpYXMsXG4gIHR5cGUgUGx1Z2luUmVmSWRlbnRpdHksXG4gIHNhbml0aXplUHVibGlzaGVyLFxufSBmcm9tICcuL2NvcmUvcGx1Z2luLWNvbnRyYWN0LmpzJztcbmV4cG9ydCB7IHVud3JhcExvb2t1cCB9IGZyb20gJy4vY29yZS9wbHVnaW4tbG9va3VwLWVudmVsb3BlLmpzJztcblxuLy8gUGx1Z2luIGRvbWFpbiB0eXBlICh0aGUgc3ludGgtdGltZSBhdXRob3JpbmcgdHlwZXMgbGl2ZSBpbiB0aGUgYC9jZGtgIGVudHJ5KVxuZXhwb3J0ICogZnJvbSAnLi9waXBlbGluZS9wbHVnaW4tc3BlYy5qcyc7XG5cbi8vIFRlbXBsYXRlIGVuZ2luZSDigJQgc3ludGgtdGltZSBzY3JpcHRpbmcgZm9yIHBpcGVsaW5lIGNvbmZpZyArIHBsdWdpbiBzcGVjc1xuZXhwb3J0IHtcbiAgdG9rZW5pemUsXG4gIGhhc1RlbXBsYXRlLFxuICBNQVhfRklFTERfU0laRV9CWVRFUyxcbiAgTUFYX1BBVEhfREVQVEgsXG4gIHR5cGUgVG9rZW4sXG4gIHR5cGUgTGl0ZXJhbFRva2VuLFxuICB0eXBlIEV4cHJUb2tlbixcbiAgdHlwZSBTb3VyY2VQb3NpdGlvbixcbiAgcmVzb2x2ZSxcbiAgZGVwZW5kZW5jaWVzLFxuICB0eXBlIFNjb3BlLFxuICB0eXBlIEZpZWxkUHJlZGljYXRlLFxuICB2YWxpZGF0ZVRlbXBsYXRlcyxcbiAgZGV0ZWN0Q3ljbGVzLFxuICBhbGxvd2VkU2NvcGVSb290cyxcbiAgdHlwZSBUZW1wbGF0ZUVycm9yLFxuICB0eXBlIFRlbXBsYXRlVmFsaWRhdGlvblJlc3VsdCxcbiAgdHlwZSBSZXNvbHZlUmVzdWx0LFxuICByZXNvbHZlU2VsZlJlZmVyZW5jaW5nLFxuICB2YWxpZGF0ZVRlbXBsYXRlRHJhZnQsXG4gIGZvcm1hdFRlbXBsYXRlRHJhZnRQcm9ibGVtcyxcbiAgdHlwZSBUZW1wbGF0ZURyYWZ0SW5wdXQsXG4gIHR5cGUgVGVtcGxhdGVEcmFmdExpa2UsXG4gIHR5cGUgVGVtcGxhdGVEcmFmdFByb2JsZW0sXG4gIHR5cGUgVGVtcGxhdGVEcmFmdFByb2JsZW1LaW5kLFxuICB0eXBlIFRlbXBsYXRlRHJhZnRWYWxpZGF0aW9uLFxufSBmcm9tICcuL3RlbXBsYXRlL2luZGV4LmpzJztcbi8vIEEgcGx1Z2luJ3MgYHt7IOKApiB9fWAgcmVzb2x1dGlvbiBhZ2FpbnN0IGEgcGlwZWxpbmUgc2NvcGUgKHN5bnRoLCBgcGx1Z2luIHRlc3RgKVxuZXhwb3J0IHsgcmVzb2x2ZVBsdWdpblRlbXBsYXRlcyB9IGZyb20gJy4vdGVtcGxhdGUvcGx1Z2luLXJlc29sdmVyLmpzJztcbiJdfQ==
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7QUFFSCxnQkFBZ0I7QUFDaEIsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFekUsOEJBQThCO0FBQzlCLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFzQyxXQUFXLEVBQUUsWUFBWSxFQUFvQixNQUFNLDBCQUEwQixDQUFDO0FBQ3BKLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsa0JBQWtCLEVBQUUsc0JBQXNCLEVBQUUsOEJBQThCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwSyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLE9BQU8sRUFNTCxxQkFBcUIsRUFDckIscUJBQXFCLEVBQ3JCLDhCQUE4QixFQUM5QixxQkFBcUIsRUFDckIsbUJBQW1CLEVBRW5CLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIsbUJBQW1CLEVBRW5CLGlCQUFpQixHQUNsQixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVoRSwrRUFBK0U7QUFDL0UsMkVBQTJFO0FBQzNFLHdFQUF3RTtBQUN4RSxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELG1GQUFtRjtBQUNuRix3RUFBd0U7QUFDeEUsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLDJCQUEyQixDQUFDO0FBRTFDLDRFQUE0RTtBQUM1RSxPQUFPLEVBQ0wsUUFBUSxFQUNSLFdBQVcsRUFDWCxvQkFBb0IsRUFDcEIsY0FBYyxFQUtkLE9BQU8sRUFDUCxZQUFZLEVBR1osaUJBQWlCLEVBQ2pCLFlBQVksRUFDWixpQkFBaUIsRUFJakIsc0JBQXNCLEVBQ3RCLHFCQUFxQixFQUNyQiwyQkFBMkIsR0FNNUIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixrRkFBa0Y7QUFDbEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sK0JBQStCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBAbW9kdWxlIEBwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWNvcmVcbiAqXG4gKiBBcHBsaWNhdGlvbiBjb25maWd1cmF0aW9uLCBwaXBlbGluZSBkb21haW4gdHlwZXMsIGFuZCB0aGUgdGVtcGxhdGUgZW5naW5lLlxuICpcbiAqIFRoaXMgZW50cnkgcG9pbnQgaXMgZGVsaWJlcmF0ZWx5IEZSRUUgb2YgYGF3cy1jZGstbGliYC4gVGhlIENESyBjb25zdHJ1Y3RzIGxpdmVcbiAqIGJlaGluZCBhIHNlcGFyYXRlIHN1YnBhdGgg4oCUIGBAcGlwZWxpbmUtYnVpbGRlci9waXBlbGluZS1jb3JlL2Nka2Ag4oCUIGJlY2F1c2UgdGhlXG4gKiBBUEkgc2VydmljZXMgY29uc3VtZSB0aGlzIHBhY2thZ2UgZm9yIGNvbmZpZyBhbmQgZG9tYWluIHR5cGVzIG9ubHksIGFuZCBhblxuICogYGV4cG9ydCAqYCBvZiB0aGUgY29uc3RydWN0cyBmcm9tIGhlcmUgcHV0IHRoZSB3aG9sZSBvZiBgYXdzLWNkay1saWJgIG9uIHRoZVxuICogaW1wb3J0IGdyYXBoIG9mIGV2ZXJ5IHNlcnZpY2UgdGhhdCByZWFkIHNvIG11Y2ggYXMgYSBwb3J0IG51bWJlci4gQW55dGhpbmcgdGhhdFxuICogaW1wb3J0cyBgYXdzLWNkay1saWJgLCBhdCB0eXBlIGxldmVsIG9yIHZhbHVlIGxldmVsLCBiZWxvbmdzIGluIGBjZGsudHNgLlxuICpcbiAqICoqQ29uZmlnKipcbiAqIC0gQ29uZmlnIOKAlCBhcHBsaWNhdGlvbiBjb25maWd1cmF0aW9uIHNpbmdsZXRvbiAoZW52aXJvbm1lbnQtZHJpdmVuKVxuICogLSBDb25maWdUeXBlcyDigJQgdHlwZWQgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VzXG4gKlxuICogKipUeXBlcyoqXG4gKiAtIFBpcGVsaW5lVHlwZSwgQ29tcHV0ZVR5cGUsIFBsdWdpblR5cGUsIFZpc2liaWxpdHkg4oCUIHBpcGVsaW5lIGRvbWFpbiBlbnVtc1xuICogLSBSb2xlVHlwZXMsIFNlY3VyaXR5R3JvdXBUeXBlcyDigJQgaW5mcmFzdHJ1Y3R1cmUgdHlwZSBkZWZpbml0aW9uc1xuICogLSBQbHVnaW5TcGVjIOKAlCBhIHBsdWdpbidzIGRlY2xhcmVkIGNvbnRyYWN0XG4gKiAtIElkR2VuZXJhdG9yIOKAlCBkZXRlcm1pbmlzdGljIElEIGdlbmVyYXRpb25cbiAqXG4gKiAqKkhlbHBlcnMqKlxuICogLSByZXBsYWNlTm9uQWxwaGFudW1lcmljLCBleHRyYWN0TWV0YWRhdGFFbnYg4oCUIHN0cmluZyBhbmQgbWV0YWRhdGEgdXRpbGl0aWVzXG4gKiAtIHJlc29sdmVGYWlsdXJlQmVoYXZpb3IsIHdyYXBDb21tYW5kc0ZvckZhaWx1cmVCZWhhdmlvciDigJQgYSBzdGVwJ3MgZmFpbHVyZUJlaGF2aW9yLCBhcyBDb2RlQnVpbGQgcnVucyBpdFxuICpcbiAqIFRoZSBQb3N0Z3Jlcy9Ecml6emxlIGRhdGEgbGF5ZXIgKGRiLCBzY2hlbWEsIENydWRTZXJ2aWNlLCBxdWVyeSBidWlsZGVycyxcbiAqIGZpbHRlci9jb21wbGlhbmNlIHR5cGVzLCBldGMuKSBpcyBOT1QgcmUtZXhwb3J0ZWQgaGVyZSDigJQgaW1wb3J0IHRob3NlXG4gKiBkaXJlY3RseSBmcm9tIGBAcGlwZWxpbmUtYnVpbGRlci9waXBlbGluZS1kYXRhYC5cbiAqL1xuXG4vLyBDb25maWd1cmF0aW9uXG5leHBvcnQgKiBmcm9tICcuL2NvbmZpZy9hcHAtY29uZmlnLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uZmlnL2NvbmZpZy10eXBlcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbmZpZy9zZXJ2aWNlLWNsaWVudC5qcyc7XG5leHBvcnQgeyBwYXJzZVBsYXRmb3JtQmFzZVVybCB9IGZyb20gJy4vY29uZmlnL2luZnJhc3RydWN0dXJlLWNvbmZpZy5qcyc7XG5cbi8vIENvcmUgdHlwZXMgKHB1YmxpYyBzdXJmYWNlKVxuZXhwb3J0IHsgQ29tcHV0ZVR5cGUsIFBsdWdpblR5cGUsIHR5cGUgTWV0YURhdGFUeXBlLCB0eXBlIFZpc2liaWxpdHksIFRyaWdnZXJUeXBlLCBNZXRhZGF0YUtleXMsIHR5cGUgTWV0YWRhdGFLZXkgfSBmcm9tICcuL2NvcmUvcGlwZWxpbmUtdHlwZXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb3JlL3JvbGUtdHlwZXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb3JlL3NlY3VyaXR5LWdyb3VwLXR5cGVzLmpzJztcbmV4cG9ydCB7IHJlcGxhY2VOb25BbHBoYW51bWVyaWMsIGV4dHJhY3RNZXRhZGF0YUVudiwgcmVzb2x2ZUZhaWx1cmVCZWhhdmlvciwgd3JhcENvbW1hbmRzRm9yRmFpbHVyZUJlaGF2aW9yLCBTVEVQX0JPT1RTVFJBUF9DTUQgfSBmcm9tICcuL2NvcmUvbWV0YWRhdGEtaGVscGVycy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvcmUvc3RlcC1tYW5pZmVzdC5qcyc7XG5leHBvcnQge1xuICB0eXBlIENvbnRyYWN0VmFsdWVUeXBlLFxuICB0eXBlIFBsdWdpbkNvbnRyYWN0LFxuICB0eXBlIENvbnRyYWN0U2NvcGUsXG4gIHR5cGUgQ29udHJhY3RJc3N1ZSxcbiAgdHlwZSBDb250cmFjdFNjb3BlUHJvcHMsXG4gIHBpcGVsaW5lU2NvcGVNZXRhZGF0YSxcbiAgcGlwZWxpbmVDb250cmFjdFNjb3BlLFxuICBjb250cmFjdFNjb3BlRnJvbVRlbXBsYXRlU2NvcGUsXG4gIGlzQ29udHJhY3RWYWx1ZU9mVHlwZSxcbiAgY2hlY2tQbHVnaW5Db250cmFjdCxcbiAgdHlwZSBQbHVnaW5TdGVwUmVmLFxuICBjb2xsZWN0UGx1Z2luU3RlcHMsXG4gIHBsdWdpbkxvb2t1cEZpbHRlcixcbiAgcGx1Z2luQXJ0aWZhY3RBbGlhcyxcbiAgdHlwZSBQbHVnaW5SZWZJZGVudGl0eSxcbiAgc2FuaXRpemVQdWJsaXNoZXIsXG59IGZyb20gJy4vY29yZS9wbHVnaW4tY29udHJhY3QuanMnO1xuZXhwb3J0IHsgdW53cmFwTG9va3VwIH0gZnJvbSAnLi9jb3JlL3BsdWdpbi1sb29rdXAtZW52ZWxvcGUuanMnO1xuXG4vLyBQbHVnaW4gZG9tYWluIHR5cGUgKHRoZSBzeW50aC10aW1lIGF1dGhvcmluZyB0eXBlcyBsaXZlIGluIHRoZSBgL2Nka2AgZW50cnkpXG4vLyBDREstZnJlZTogdGhlIERPUkEgZGVwbG95IGF0dHJpYnV0aW9uIHRoZSBBUEkgcmVwb3J0cyBpbiBjcmVhdGUvdmFsaWRhdGVcbi8vIHJlc3BvbnNlcy4gVGhlIGNvbnN0cnVjdCB0aGF0IHN0YW1wcyB0aGUgdGFnIHJlYWRzIHRoZSBzYW1lIGZ1bmN0aW9uLlxuZXhwb3J0ICogZnJvbSAnLi9waXBlbGluZS9kZXBsb3ktYXR0cmlidXRpb24uanMnO1xuLy8gQ0RLLWZyZWU6IHRoZSBzdGFnZS9wbHVnaW4vSUFNIHByb2plY3Rpb24gdGhlIGNyZWF0ZSArIHZhbGlkYXRlIHJlc3BvbnNlcyByZXR1cm5cbi8vIHNvIGEgcmV2aWV3ZXIgYXBwcm92ZXMgc29tZXRoaW5nIGNvbmNyZXRlIHJhdGhlciB0aGFuIHJhdyBwcm9wcyBKU09OLlxuZXhwb3J0ICogZnJvbSAnLi9waXBlbGluZS9zdHJ1Y3R1cmUtcHJldmlldy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3BpcGVsaW5lL3BsdWdpbi1zcGVjLmpzJztcblxuLy8gVGVtcGxhdGUgZW5naW5lIOKAlCBzeW50aC10aW1lIHNjcmlwdGluZyBmb3IgcGlwZWxpbmUgY29uZmlnICsgcGx1Z2luIHNwZWNzXG5leHBvcnQge1xuICB0b2tlbml6ZSxcbiAgaGFzVGVtcGxhdGUsXG4gIE1BWF9GSUVMRF9TSVpFX0JZVEVTLFxuICBNQVhfUEFUSF9ERVBUSCxcbiAgdHlwZSBUb2tlbixcbiAgdHlwZSBMaXRlcmFsVG9rZW4sXG4gIHR5cGUgRXhwclRva2VuLFxuICB0eXBlIFNvdXJjZVBvc2l0aW9uLFxuICByZXNvbHZlLFxuICBkZXBlbmRlbmNpZXMsXG4gIHR5cGUgU2NvcGUsXG4gIHR5cGUgRmllbGRQcmVkaWNhdGUsXG4gIHZhbGlkYXRlVGVtcGxhdGVzLFxuICBkZXRlY3RDeWNsZXMsXG4gIGFsbG93ZWRTY29wZVJvb3RzLFxuICB0eXBlIFRlbXBsYXRlRXJyb3IsXG4gIHR5cGUgVGVtcGxhdGVWYWxpZGF0aW9uUmVzdWx0LFxuICB0eXBlIFJlc29sdmVSZXN1bHQsXG4gIHJlc29sdmVTZWxmUmVmZXJlbmNpbmcsXG4gIHZhbGlkYXRlVGVtcGxhdGVEcmFmdCxcbiAgZm9ybWF0VGVtcGxhdGVEcmFmdFByb2JsZW1zLFxuICB0eXBlIFRlbXBsYXRlRHJhZnRJbnB1dCxcbiAgdHlwZSBUZW1wbGF0ZURyYWZ0TGlrZSxcbiAgdHlwZSBUZW1wbGF0ZURyYWZ0UHJvYmxlbSxcbiAgdHlwZSBUZW1wbGF0ZURyYWZ0UHJvYmxlbUtpbmQsXG4gIHR5cGUgVGVtcGxhdGVEcmFmdFZhbGlkYXRpb24sXG59IGZyb20gJy4vdGVtcGxhdGUvaW5kZXguanMnO1xuLy8gQSBwbHVnaW4ncyBge3sg4oCmIH19YCByZXNvbHV0aW9uIGFnYWluc3QgYSBwaXBlbGluZSBzY29wZSAoc3ludGgsIGBwbHVnaW4gdGVzdGApXG5leHBvcnQgeyByZXNvbHZlUGx1Z2luVGVtcGxhdGVzIH0gZnJvbSAnLi90ZW1wbGF0ZS9wbHVnaW4tcmVzb2x2ZXIuanMnO1xuIl19
@@ -0,0 +1,75 @@
1
+ /**
2
+ * What DORA deploy signal a pipeline's configuration will produce — derived
3
+ * WITHOUT synthesizing, and WITHOUT importing `aws-cdk-lib`.
4
+ *
5
+ * CDK-free on purpose. `pipeline-builder.ts` is only reachable through the
6
+ * `/cdk` subpath, so an API route that wanted to tell an author "this deploy was
7
+ * attributed to a stage you didn't name" would have had to pull the whole CDK
8
+ * type graph into the service. The derivation lives here, the construct imports
9
+ * it, and `POST /pipelines` and `POST /pipelines/validate` answer from the same
10
+ * code that stamps the tag.
11
+ */
12
+ /** AWS's hard limit on a tag VALUE. */
13
+ export declare const MAX_TAG_VALUE_LENGTH = 256;
14
+ /** One `<stage>:<environment>` pair, kept with its raw env for cap prioritization. */
15
+ export interface DeployPair {
16
+ readonly str: string;
17
+ readonly env: string;
18
+ }
19
+ /** The fields of a stage this derivation reads. */
20
+ export interface DeployAttributionStage {
21
+ readonly stageName: string;
22
+ readonly alias?: string;
23
+ readonly environment?: string;
24
+ }
25
+ /** The slice of `BuilderProps` this derivation reads. */
26
+ export interface DeployAttributionInput {
27
+ readonly stages?: readonly DeployAttributionStage[];
28
+ readonly environment?: string;
29
+ }
30
+ /** A DORA deploy the pipeline will report: which stage, to which environment. */
31
+ export interface DeployAttribution {
32
+ /** CodePipeline stage name the deploy is attributed to. */
33
+ readonly stage: string;
34
+ /** Environment that stage deploys to. */
35
+ readonly environment: string;
36
+ /**
37
+ * Whether the environment came from a per-stage `environment` (precise) or was
38
+ * inferred from the pipeline-level one (a guess worth warning about).
39
+ */
40
+ readonly inferred: boolean;
41
+ }
42
+ /** Why a deploy signal may be wrong or missing, for the create/validate response. */
43
+ export interface DeployAttributionWarning {
44
+ readonly code: 'inferred-stage' | 'pairs-dropped';
45
+ readonly message: string;
46
+ }
47
+ /** The full answer: the tag value, the deploys it encodes, and the caveats. */
48
+ export interface DeployAttributionReport {
49
+ /** The `pb.deploys` tag value, or undefined when nothing declares an environment. */
50
+ readonly deploysTag?: string;
51
+ readonly deploys: readonly DeployAttribution[];
52
+ readonly warnings: readonly DeployAttributionWarning[];
53
+ }
54
+ /**
55
+ * The name CodePipeline gives a configured stage: the wave id, i.e. the stage's
56
+ * `alias`, else `<stageName>-alias`. This — not `stageName` — is what appears as
57
+ * `detail.stage` in CodePipeline events, so anything that must MATCH those
58
+ * events (the `pb.deploys` DORA tag) has to be built from this one function.
59
+ */
60
+ export declare function codePipelineStageName(stage: Pick<DeployAttributionStage, 'stageName' | 'alias'>): string;
61
+ /**
62
+ * Derive the `pb.deploys` tag and the deploys it encodes.
63
+ *
64
+ * A stage is a deploy iff it declares an `environment`. Precedence:
65
+ * - Multi-env: any stage with a per-stage `environment` — list each such stage.
66
+ * - Single-env: no per-stage environment but a pipeline-level `environment` —
67
+ * attribute it to the sole stage, the LAST stage of a multi-stage pipeline
68
+ * (deploys are conventionally final — reported as `inferred`, with a warning
69
+ * recommending explicit per-stage `environment`), or a literal `Deploy:<env>`
70
+ * when there are no stages to name.
71
+ *
72
+ * `deploysTag` is undefined when nothing declares an environment: such pipelines
73
+ * produce no DORA deploy signal at all.
74
+ */
75
+ export declare function describeDeployAttribution(props: DeployAttributionInput): DeployAttributionReport;
@@ -0,0 +1,122 @@
1
+ // Copyright 2026 Pipeline Builder Contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ /**
4
+ * What DORA deploy signal a pipeline's configuration will produce — derived
5
+ * WITHOUT synthesizing, and WITHOUT importing `aws-cdk-lib`.
6
+ *
7
+ * CDK-free on purpose. `pipeline-builder.ts` is only reachable through the
8
+ * `/cdk` subpath, so an API route that wanted to tell an author "this deploy was
9
+ * attributed to a stage you didn't name" would have had to pull the whole CDK
10
+ * type graph into the service. The derivation lives here, the construct imports
11
+ * it, and `POST /pipelines` and `POST /pipelines/validate` answer from the same
12
+ * code that stamps the tag.
13
+ */
14
+ /** AWS's hard limit on a tag VALUE. */
15
+ export const MAX_TAG_VALUE_LENGTH = 256;
16
+ /**
17
+ * The name CodePipeline gives a configured stage: the wave id, i.e. the stage's
18
+ * `alias`, else `<stageName>-alias`. This — not `stageName` — is what appears as
19
+ * `detail.stage` in CodePipeline events, so anything that must MATCH those
20
+ * events (the `pb.deploys` DORA tag) has to be built from this one function.
21
+ */
22
+ export function codePipelineStageName(stage) {
23
+ return stage.alias ?? `${stage.stageName}-alias`;
24
+ }
25
+ /** Strip characters AWS rejects in a tag value, and the `+`/`:` this format uses. */
26
+ function tagSafeToken(value) {
27
+ return value.replace(/[^A-Za-z0-9._/@=-]/g, '-');
28
+ }
29
+ /**
30
+ * Join `pb.deploys` pairs with `+`, capped at {@link MAX_TAG_VALUE_LENGTH}. When
31
+ * the full value would exceed the cap, the headline/production pair is placed
32
+ * first and only the leading pairs that fit are kept; the trailing overflow pairs
33
+ * are returned in `dropped` for the caller to warn about. Never emits more than
34
+ * 256 chars.
35
+ */
36
+ function capDeploysValue(pairs) {
37
+ const full = pairs.map(p => p.str).join('+');
38
+ if (full.length <= MAX_TAG_VALUE_LENGTH)
39
+ return { value: full, dropped: [] };
40
+ // Prioritize the headline pair — the production deploy if present, else the
41
+ // first pair — so a cap never drops the most operationally-significant deploy.
42
+ const headlineIdx = pairs.findIndex(p => p.env.toLowerCase() === 'production');
43
+ const ordered = headlineIdx > 0
44
+ ? [pairs[headlineIdx], ...pairs.filter((_, i) => i !== headlineIdx)]
45
+ : pairs;
46
+ const kept = [];
47
+ const dropped = [];
48
+ for (const p of ordered) {
49
+ const candidate = kept.length === 0 ? p.str : `${kept.join('+')}+${p.str}`;
50
+ if (candidate.length <= MAX_TAG_VALUE_LENGTH) {
51
+ kept.push(p.str);
52
+ }
53
+ else {
54
+ dropped.push(p.str);
55
+ }
56
+ }
57
+ return { value: kept.join('+'), dropped };
58
+ }
59
+ /**
60
+ * Derive the `pb.deploys` tag and the deploys it encodes.
61
+ *
62
+ * A stage is a deploy iff it declares an `environment`. Precedence:
63
+ * - Multi-env: any stage with a per-stage `environment` — list each such stage.
64
+ * - Single-env: no per-stage environment but a pipeline-level `environment` —
65
+ * attribute it to the sole stage, the LAST stage of a multi-stage pipeline
66
+ * (deploys are conventionally final — reported as `inferred`, with a warning
67
+ * recommending explicit per-stage `environment`), or a literal `Deploy:<env>`
68
+ * when there are no stages to name.
69
+ *
70
+ * `deploysTag` is undefined when nothing declares an environment: such pipelines
71
+ * produce no DORA deploy signal at all.
72
+ */
73
+ export function describeDeployAttribution(props) {
74
+ const stages = props.stages ?? [];
75
+ const stagesWithEnv = stages.filter(s => typeof s.environment === 'string' && s.environment.length > 0);
76
+ const warnings = [];
77
+ let deploys;
78
+ if (stagesWithEnv.length > 0) {
79
+ deploys = stagesWithEnv.map(s => ({
80
+ stage: codePipelineStageName(s), environment: s.environment, inferred: false,
81
+ }));
82
+ }
83
+ else if (props.environment) {
84
+ let stageName;
85
+ let inferred = false;
86
+ if (stages.length === 1) {
87
+ stageName = codePipelineStageName(stages[0]);
88
+ }
89
+ else if (stages.length > 1) {
90
+ // Pipeline-level environment on a multi-stage pipeline: attribute it to the
91
+ // LAST stage (deploys are conventionally final) rather than an unmatched
92
+ // literal `Deploy`. Warn so authors move to explicit per-stage `environment`.
93
+ stageName = codePipelineStageName(stages[stages.length - 1]);
94
+ inferred = true;
95
+ warnings.push({
96
+ code: 'inferred-stage',
97
+ message: `Pipeline-level environment "${props.environment}" attributed to the last stage `
98
+ + `"${stageName}" of a ${stages.length}-stage pipeline. Declare a per-stage `
99
+ + '`environment` on the actual deploy stage(s) for precise DORA attribution.',
100
+ });
101
+ }
102
+ else {
103
+ stageName = 'Deploy';
104
+ }
105
+ deploys = [{ stage: stageName, environment: props.environment, inferred }];
106
+ }
107
+ else {
108
+ return { deploys: [], warnings };
109
+ }
110
+ const { value, dropped } = capDeploysValue(deploys.map(d => ({ str: `${tagSafeToken(d.stage)}:${tagSafeToken(d.environment)}`, env: d.environment })));
111
+ if (dropped.length > 0) {
112
+ warnings.push({
113
+ code: 'pairs-dropped',
114
+ message: `pb.deploys tag value exceeded the ${MAX_TAG_VALUE_LENGTH}-char AWS tag-value limit; `
115
+ + `dropped ${dropped.length} deploy pair(s): ${dropped.join(', ')}. `
116
+ + 'These environments will not produce DORA deploy signals — reduce stage/environment '
117
+ + 'name lengths or split into separate pipelines.',
118
+ });
119
+ }
120
+ return { deploysTag: value, deploys, warnings };
121
+ }
122
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LWF0dHJpYnV0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BpcGVsaW5lL2RlcGxveS1hdHRyaWJ1dGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7O0dBVUc7QUFFSCx1Q0FBdUM7QUFDdkMsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxDQUFDO0FBZ0R4Qzs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxLQUEwRDtJQUM5RixPQUFPLEtBQUssQ0FBQyxLQUFLLElBQUksR0FBRyxLQUFLLENBQUMsU0FBUyxRQUFRLENBQUM7QUFDbkQsQ0FBQztBQUVELHFGQUFxRjtBQUNyRixTQUFTLFlBQVksQ0FBQyxLQUFhO0lBQ2pDLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNuRCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyxlQUFlLENBQUMsS0FBNEI7SUFDbkQsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0MsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLG9CQUFvQjtRQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUU3RSw0RUFBNEU7SUFDNUUsK0VBQStFO0lBQy9FLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxLQUFLLFlBQVksQ0FBQyxDQUFDO0lBQy9FLE1BQU0sT0FBTyxHQUFHLFdBQVcsR0FBRyxDQUFDO1FBQzdCLENBQUMs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QUFHLFFBQVEsQ0FBQztRQUN2QixDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDN0UsQ0FBQztTQUFNLENBQUM7UUFDTixPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsR0FBRyxlQUFlLENBQ3hDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQzNHLENBQUM7SUFDRixJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDdkIsUUFBUSxDQUFDLElBQUksQ0FBQztZQUNaLElBQUksRUFBRSxlQUFlO1lBQ3JCLE9BQU8sRUFDTCxxQ0FBcUMsb0JBQW9CLDZCQUE2QjtrQkFDcEYsV0FBVyxPQUFPLENBQUMsTUFBTSxvQkFBb0IsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSTtrQkFDbkUscUZBQXFGO2tCQUNyRixnREFBZ0Q7U0FDckQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsQ0FBQztBQUNsRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogV2hhdCBET1JBIGRlcGxveSBzaWduYWwgYSBwaXBlbGluZSdzIGNvbmZpZ3VyYXRpb24gd2lsbCBwcm9kdWNlIOKAlCBkZXJpdmVkXG4gKiBXSVRIT1VUIHN5bnRoZXNpemluZywgYW5kIFdJVEhPVVQgaW1wb3J0aW5nIGBhd3MtY2RrLWxpYmAuXG4gKlxuICogQ0RLLWZyZWUgb24gcHVycG9zZS4gYHBpcGVsaW5lLWJ1aWxkZXIudHNgIGlzIG9ubHkgcmVhY2hhYmxlIHRocm91Z2ggdGhlXG4gKiBgL2Nka2Agc3VicGF0aCwgc28gYW4gQVBJIHJvdXRlIHRoYXQgd2FudGVkIHRvIHRlbGwgYW4gYXV0aG9yIFwidGhpcyBkZXBsb3kgd2FzXG4gKiBhdHRyaWJ1dGVkIHRvIGEgc3RhZ2UgeW91IGRpZG4ndCBuYW1lXCIgd291bGQgaGF2ZSBoYWQgdG8gcHVsbCB0aGUgd2hvbGUgQ0RLXG4gKiB0eXBlIGdyYXBoIGludG8gdGhlIHNlcnZpY2UuIFRoZSBkZXJpdmF0aW9uIGxpdmVzIGhlcmUsIHRoZSBjb25zdHJ1Y3QgaW1wb3J0c1xuICogaXQsIGFuZCBgUE9TVCAvcGlwZWxpbmVzYCBhbmQgYFBPU1QgL3BpcGVsaW5lcy92YWxpZGF0ZWAgYW5zd2VyIGZyb20gdGhlIHNhbWVcbiAqIGNvZGUgdGhhdCBzdGFtcHMgdGhlIHRhZy5cbiAqL1xuXG4vKiogQVdTJ3MgaGFyZCBsaW1pdCBvbiBhIHRhZyBWQUxVRS4gKi9cbmV4cG9ydCBjb25zdCBNQVhfVEFHX1ZBTFVFX0xFTkdUSCA9IDI1NjtcblxuLyoqIE9uZSBgPHN0YWdlPjo8ZW52aXJvbm1lbnQ+YCBwYWlyLCBrZXB0IHdpdGggaXRzIHJhdyBlbnYgZm9yIGNhcCBwcmlvcml0aXphdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95UGFpciB7XG4gIHJlYWRvbmx5IHN0cjogc3RyaW5nO1xuICByZWFkb25seSBlbnY6IHN0cmluZztcbn1cblxuLyoqIFRoZSBmaWVsZHMgb2YgYSBzdGFnZSB0aGlzIGRlcml2YXRpb24gcmVhZHMuICovXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveUF0dHJpYnV0aW9uU3RhZ2Uge1xuICByZWFkb25seSBzdGFnZU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgYWxpYXM/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGVudmlyb25tZW50Pzogc3RyaW5nO1xufVxuXG4vKiogVGhlIHNsaWNlIG9mIGBCdWlsZGVyUHJvcHNgIHRoaXMgZGVyaXZhdGlvbiByZWFkcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95QXR0cmlidXRpb25JbnB1dCB7XG4gIHJlYWRvbmx5IHN0YWdlcz86IHJlYWRvbmx5IERlcGxveUF0dHJpYnV0aW9uU3RhZ2VbXTtcbiAgcmVhZG9ubHkgZW52aXJvbm1lbnQ/OiBzdHJpbmc7XG59XG5cbi8qKiBBIERPUkEgZGVwbG95IHRoZSBwaXBlbGluZSB3aWxsIHJlcG9ydDogd2hpY2ggc3RhZ2UsIHRvIHdoaWNoIGVudmlyb25tZW50LiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXBsb3lBdHRyaWJ1dGlvbiB7XG4gIC8qKiBDb2RlUGlwZWxpbmUgc3RhZ2UgbmFtZSB0aGUgZGVwbG95IGlzIGF0dHJpYnV0ZWQgdG8uICovXG4gIHJlYWRvbmx5IHN0YWdlOiBzdHJpbmc7XG4gIC8qKiBFbnZpcm9ubWVudCB0aGF0IHN0YWdlIGRlcGxveXMgdG8uICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBlbnZpcm9ubWVudCBjYW1lIGZyb20gYSBwZXItc3RhZ2UgYGVudmlyb25tZW50YCAocHJlY2lzZSkgb3Igd2FzXG4gICAqIGluZmVycmVkIGZyb20gdGhlIHBpcGVsaW5lLWxldmVsIG9uZSAoYSBndWVzcyB3b3J0aCB3YXJuaW5nIGFib3V0KS5cbiAgICovXG4gIHJlYWRvbmx5IGluZmVycmVkOiBib29sZWFuO1xufVxuXG4vKiogV2h5IGEgZGVwbG95IHNpZ25hbCBtYXkgYmUgd3Jvbmcgb3IgbWlzc2luZywgZm9yIHRoZSBjcmVhdGUvdmFsaWRhdGUgcmVzcG9uc2UuICovXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveUF0dHJpYnV0aW9uV2FybmluZyB7XG4gIHJlYWRvbmx5IGNvZGU6ICdpbmZlcnJlZC1zdGFnZScgfCAncGFpcnMtZHJvcHBlZCc7XG4gIHJlYWRvbmx5IG1lc3NhZ2U6IHN0cmluZztcbn1cblxuLyoqIFRoZSBmdWxsIGFuc3dlcjogdGhlIHRhZyB2YWx1ZSwgdGhlIGRlcGxveXMgaXQgZW5jb2RlcywgYW5kIHRoZSBjYXZlYXRzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXBsb3lBdHRyaWJ1dGlvblJlcG9ydCB7XG4gIC8qKiBUaGUgYHBiLmRlcGxveXNgIHRhZyB2YWx1ZSwgb3IgdW5kZWZpbmVkIHdoZW4gbm90aGluZyBkZWNsYXJlcyBhbiBlbnZpcm9ubWVudC4gKi9cbiAgcmVhZG9ubHkgZGVwbG95c1RhZz86IHN0cmluZztcbiAgcmVhZG9ubHkgZGVwbG95czogcmVhZG9ubHkgRGVwbG95QXR0cmlidXRpb25bXTtcbiAgcmVhZG9ubHkgd2FybmluZ3M6IHJlYWRvbmx5IERlcGxveUF0dHJpYnV0aW9uV2FybmluZ1tdO1xufVxuXG4vKipcbiAqIFRoZSBuYW1lIENvZGVQaXBlbGluZSBnaXZlcyBhIGNvbmZpZ3VyZWQgc3RhZ2U6IHRoZSB3YXZlIGlkLCBpLmUuIHRoZSBzdGFnZSdzXG4gKiBgYWxpYXNgLCBlbHNlIGA8c3RhZ2VOYW1lPi1hbGlhc2AuIFRoaXMg4oCUIG5vdCBgc3RhZ2VOYW1lYCDigJQgaXMgd2hhdCBhcHBlYXJzIGFzXG4gKiBgZGV0YWlsLnN0YWdlYCBpbiBDb2RlUGlwZWxpbmUgZXZlbnRzLCBzbyBhbnl0aGluZyB0aGF0IG11c3QgTUFUQ0ggdGhvc2VcbiAqIGV2ZW50cyAodGhlIGBwYi5kZXBsb3lzYCBET1JBIHRhZykgaGFzIHRvIGJlIGJ1aWx0IGZyb20gdGhpcyBvbmUgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2RlUGlwZWxpbmVTdGFnZU5hbWUoc3RhZ2U6IFBpY2s8RGVwbG95QXR0cmlidXRpb25TdGFnZSwgJ3N0YWdlTmFtZScgfCAnYWxpYXMnPik6IHN0cmluZyB7XG4gIHJldHVybiBzdGFnZS5hbGlhcyA/PyBgJHtzdGFnZS5zdGFnZU5hbWV9LWFsaWFzYDtcbn1cblxuLyoqIFN0cmlwIGNoYXJhY3RlcnMgQVdTIHJlamVjdHMgaW4gYSB0YWcgdmFsdWUsIGFuZCB0aGUgYCtgL2A6YCB0aGlzIGZvcm1hdCB1c2VzLiAqL1xuZnVuY3Rpb24gdGFnU2FmZVRva2VuKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdmFsdWUucmVwbGFjZSgvW15BLVphLXowLTkuXy9APS1dL2csICctJyk7XG59XG5cbi8qKlxuICogSm9pbiBgcGIuZGVwbG95c2AgcGFpcnMgd2l0aCBgK2AsIGNhcHBlZCBhdCB7QGxpbmsgTUFYX1RBR19WQUxVRV9MRU5HVEh9LiBXaGVuXG4gKiB0aGUgZnVsbCB2YWx1ZSB3b3VsZCBleGNlZWQgdGhlIGNhcCwgdGhlIGhlYWRsaW5lL3Byb2R1Y3Rpb24gcGFpciBpcyBwbGFjZWRcbiAqIGZpcnN0IGFuZCBvbmx5IHRoZSBsZWFkaW5nIHBhaXJzIHRoYXQgZml0IGFyZSBrZXB0OyB0aGUgdHJhaWxpbmcgb3ZlcmZsb3cgcGFpcnNcbiAqIGFyZSByZXR1cm5lZCBpbiBgZHJvcHBlZGAgZm9yIHRoZSBjYWxsZXIgdG8gd2FybiBhYm91dC4gTmV2ZXIgZW1pdHMgbW9yZSB0aGFuXG4gKiAyNTYgY2hhcnMuXG4gKi9cbmZ1bmN0aW9uIGNhcERlcGxveXNWYWx1ZShwYWlyczogcmVhZG9ubHkgRGVwbG95UGFpcltdKTogeyB2YWx1ZTogc3RyaW5nOyBkcm9wcGVkOiBzdHJpbmdbXSB9IHtcbiAgY29uc3QgZnVsbCA9IHBhaXJzLm1hcChwID0+IHAuc3RyKS5qb2luKCcrJyk7XG4gIGlmIChmdWxsLmxlbmd0aCA8PSBNQVhfVEFHX1ZBTFVFX0xFTkdUSCkgcmV0dXJuIHsgdmFsdWU6IGZ1bGwsIGRyb3BwZWQ6IFtdIH07XG5cbiAgLy8gUHJpb3JpdGl6ZSB0aGUgaGVhZGxpbmUgcGFpciDigJQgdGhlIHByb2R1Y3Rpb24gZGVwbG95IGlmIHByZXNlbnQsIGVsc2UgdGhlXG4gIC8vIGZpcnN0IHBhaXIg4oCUIHNvIGEgY2FwIG5ldmVyIGRyb3BzIHRoZSBtb3N0IG9wZXJhdGlvbmFsbHktc2lnbmlmaWNhbnQgZGVwbG95LlxuICBjb25zdCBoZWFkbGluZUlkeCA9IHBhaXJzLmZpbmRJbmRleChwID0+IHAuZW52LnRvTG93ZXJDYXNlKCkgPT09ICdwcm9kdWN0aW9uJyk7XG4gIGNvbnN0IG9yZGVyZWQgPSBoZWFkbGluZUlkeCA+IDBcbiAgICA/IFtwYWlyc1toZWFkbGluZUlkeF0sIC4uLnBhaXJzLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gaGVhZGxpbmVJZHgpXVxuICAgIDogcGFpcnM7XG5cbiAgY29uc3Qga2VwdDogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgZHJvcHBlZDogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBwIG9mIG9yZGVyZWQpIHtcbiAgICBjb25zdCBjYW5kaWRhdGUgPSBrZXB0Lmxlbmd0aCA9PT0gMCA/IHAuc3RyIDogYCR7a2VwdC5qb2luKCcrJyl9KyR7cC5zdHJ9YDtcbiAgICBpZiAoY2FuZGlkYXRlLmxlbmd0aCA8PSBNQVhfVEFHX1ZBTFVFX0xFTkdUSCkge1xuICAgICAga2VwdC5wdXNoKHAuc3RyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZHJvcHBlZC5wdXNoKHAuc3RyKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgdmFsdWU6IGtlcHQuam9pbignKycpLCBkcm9wcGVkIH07XG59XG5cbi8qKlxuICogRGVyaXZlIHRoZSBgcGIuZGVwbG95c2AgdGFnIGFuZCB0aGUgZGVwbG95cyBpdCBlbmNvZGVzLlxuICpcbiAqIEEgc3RhZ2UgaXMgYSBkZXBsb3kgaWZmIGl0IGRlY2xhcmVzIGFuIGBlbnZpcm9ubWVudGAuIFByZWNlZGVuY2U6XG4gKiAgLSBNdWx0aS1lbnY6IGFueSBzdGFnZSB3aXRoIGEgcGVyLXN0YWdlIGBlbnZpcm9ubWVudGAg4oCUIGxpc3QgZWFjaCBzdWNoIHN0YWdlLlxuICogIC0gU2luZ2xlLWVudjogbm8gcGVyLXN0YWdlIGVudmlyb25tZW50IGJ1dCBhIHBpcGVsaW5lLWxldmVsIGBlbnZpcm9ubWVudGAg4oCUXG4gKiAgICBhdHRyaWJ1dGUgaXQgdG8gdGhlIHNvbGUgc3RhZ2UsIHRoZSBMQVNUIHN0YWdlIG9mIGEgbXVsdGktc3RhZ2UgcGlwZWxpbmVcbiAqICAgIChkZXBsb3lzIGFyZSBjb252ZW50aW9uYWxseSBmaW5hbCDigJQgcmVwb3J0ZWQgYXMgYGluZmVycmVkYCwgd2l0aCBhIHdhcm5pbmdcbiAqICAgIHJlY29tbWVuZGluZyBleHBsaWNpdCBwZXItc3RhZ2UgYGVudmlyb25tZW50YCksIG9yIGEgbGl0ZXJhbCBgRGVwbG95OjxlbnY+YFxuICogICAgd2hlbiB0aGVyZSBhcmUgbm8gc3RhZ2VzIHRvIG5hbWUuXG4gKlxuICogYGRlcGxveXNUYWdgIGlzIHVuZGVmaW5lZCB3aGVuIG5vdGhpbmcgZGVjbGFyZXMgYW4gZW52aXJvbm1lbnQ6IHN1Y2ggcGlwZWxpbmVzXG4gKiBwcm9kdWNlIG5vIERPUkEgZGVwbG95IHNpZ25hbCBhdCBhbGwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXNjcmliZURlcGxveUF0dHJpYnV0aW9uKHByb3BzOiBEZXBsb3lBdHRyaWJ1dGlvbklucHV0KTogRGVwbG95QXR0cmlidXRpb25SZXBvcnQge1xuICBjb25zdCBzdGFnZXMgPSBwcm9wcy5zdGFnZXMgPz8gW107XG4gIGNvbnN0IHN0YWdlc1dpdGhFbnYgPSBzdGFnZXMuZmlsdGVyKHMgPT4gdHlwZW9mIHMuZW52aXJvbm1lbnQgPT09ICdzdHJpbmcnICYmIHMuZW52aXJvbm1lbnQubGVuZ3RoID4gMCk7XG4gIGNvbnN0IHdhcm5pbmdzOiBEZXBsb3lBdHRyaWJ1dGlvbldhcm5pbmdbXSA9IFtdO1xuXG4gIGxldCBkZXBsb3lzOiBEZXBsb3lBdHRyaWJ1dGlvbltdO1xuICBpZiAoc3RhZ2VzV2l0aEVudi5sZW5ndGggPiAwKSB7XG4gICAgZGVwbG95cyA9IHN0YWdlc1dpdGhFbnYubWFwKHMgPT4gKHtcbiAgICAgIHN0YWdlOiBjb2RlUGlwZWxpbmVTdGFnZU5hbWUocyksIGVudmlyb25tZW50OiBzLmVudmlyb25tZW50IGFzIHN0cmluZywgaW5mZXJyZWQ6IGZhbHNlLFxuICAgIH0pKTtcbiAgfSBlbHNlIGlmIChwcm9wcy5lbnZpcm9ubWVudCkge1xuICAgIGxldCBzdGFnZU5hbWU6IHN0cmluZztcbiAgICBsZXQgaW5mZXJyZWQgPSBmYWxzZTtcbiAgICBpZiAoc3RhZ2VzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgc3RhZ2VOYW1lID0gY29kZVBpcGVsaW5lU3RhZ2VOYW1lKHN0YWdlc1swXSk7XG4gICAgfSBlbHNlIGlmIChzdGFnZXMubGVuZ3RoID4gMSkge1xuICAgICAgLy8gUGlwZWxpbmUtbGV2ZWwgZW52aXJvbm1lbnQgb24gYSBtdWx0aS1zdGFnZSBwaXBlbGluZTogYXR0cmlidXRlIGl0IHRvIHRoZVxuICAgICAgLy8gTEFTVCBzdGFnZSAoZGVwbG95cyBhcmUgY29udmVudGlvbmFsbHkgZmluYWwpIHJhdGhlciB0aGFuIGFuIHVubWF0Y2hlZFxuICAgICAgLy8gbGl0ZXJhbCBgRGVwbG95YC4gV2FybiBzbyBhdXRob3JzIG1vdmUgdG8gZXhwbGljaXQgcGVyLXN0YWdlIGBlbnZpcm9ubWVudGAuXG4gICAgICBzdGFnZU5hbWUgPSBjb2RlUGlwZWxpbmVTdGFnZU5hbWUoc3RhZ2VzW3N0YWdlcy5sZW5ndGggLSAxXSk7XG4gICAgICBpbmZlcnJlZCA9IHRydWU7XG4gICAgICB3YXJuaW5ncy5wdXNoKHtcbiAgICAgICAgY29kZTogJ2luZmVycmVkLXN0YWdlJyxcbiAgICAgICAgbWVzc2FnZTpcbiAgICAgICAgICBgUGlwZWxpbmUtbGV2ZWwgZW52aXJvbm1lbnQgXCIke3Byb3BzLmVudmlyb25tZW50fVwiIGF0dHJpYnV0ZWQgdG8gdGhlIGxhc3Qgc3RhZ2UgYFxuICAgICAgICAgICsgYFwiJHtzdGFnZU5hbWV9XCIgb2YgYSAke3N0YWdlcy5sZW5ndGh9LXN0YWdlIHBpcGVsaW5lLiBEZWNsYXJlIGEgcGVyLXN0YWdlIGBcbiAgICAgICAgICArICdgZW52aXJvbm1lbnRgIG9uIHRoZSBhY3R1YWwgZGVwbG95IHN0YWdlKHMpIGZvciBwcmVjaXNlIERPUkEgYXR0cmlidXRpb24uJyxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGFnZU5hbWUgPSAnRGVwbG95JztcbiAgICB9XG4gICAgZGVwbG95cyA9IFt7IHN0YWdlOiBzdGFnZU5hbWUsIGVudmlyb25tZW50OiBwcm9wcy5lbnZpcm9ubWVudCwgaW5mZXJyZWQgfV07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHsgZGVwbG95czogW10sIHdhcm5pbmdzIH07XG4gIH1cblxuICBjb25zdCB7IHZhbHVlLCBkcm9wcGVkIH0gPSBjYXBEZXBsb3lzVmFsdWUoXG4gICAgZGVwbG95cy5tYXAoZCA9PiAoeyBzdHI6IGAke3RhZ1NhZmVUb2tlbihkLnN0YWdlKX06JHt0YWdTYWZlVG9rZW4oZC5lbnZpcm9ubWVudCl9YCwgZW52OiBkLmVudmlyb25tZW50IH0pKSxcbiAgKTtcbiAgaWYgKGRyb3BwZWQubGVuZ3RoID4gMCkge1xuICAgIHdhcm5pbmdzLnB1c2goe1xuICAgICAgY29kZTogJ3BhaXJzLWRyb3BwZWQnLFxuICAgICAgbWVzc2FnZTpcbiAgICAgICAgYHBiLmRlcGxveXMgdGFnIHZhbHVlIGV4Y2VlZGVkIHRoZSAke01BWF9UQUdfVkFMVUVfTEVOR1RIfS1jaGFyIEFXUyB0YWctdmFsdWUgbGltaXQ7IGBcbiAgICAgICAgKyBgZHJvcHBlZCAke2Ryb3BwZWQubGVuZ3RofSBkZXBsb3kgcGFpcihzKTogJHtkcm9wcGVkLmpvaW4oJywgJyl9LiBgXG4gICAgICAgICsgJ1RoZXNlIGVudmlyb25tZW50cyB3aWxsIG5vdCBwcm9kdWNlIERPUkEgZGVwbG95IHNpZ25hbHMg4oCUIHJlZHVjZSBzdGFnZS9lbnZpcm9ubWVudCAnXG4gICAgICAgICsgJ25hbWUgbGVuZ3RocyBvciBzcGxpdCBpbnRvIHNlcGFyYXRlIHBpcGVsaW5lcy4nLFxuICAgIH0pO1xuICB9XG4gIHJldHVybiB7IGRlcGxveXNUYWc6IHZhbHVlLCBkZXBsb3lzLCB3YXJuaW5ncyB9O1xufVxuIl19