@pipeline-builder/pipeline-core 4.1.24 → 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.
@@ -306,6 +306,7 @@ export class PluginLookup extends Construct {
306
306
  vulnCriticalFixable: null,
307
307
  vulnHighFixable: null,
308
308
  scannedAt: null,
309
+ scanSummary: null,
309
310
  scanFlaggedAt: null,
310
311
  scanFlag: null,
311
312
  runAsRoot: null,
@@ -366,4 +367,4 @@ export class PluginLookup extends Construct {
366
367
  };
367
368
  }
368
369
  }
369
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWxvb2t1cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9waXBlbGluZS9wbHVnaW4tbG9va3VwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUNwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXpFLE9BQU8sRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlELE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUV2QyxPQUFPLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNyRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVqRSxNQUFNLEdBQUcsR0FBRyxZQUFZLENBQUMsZUFBZSxDQUFDLENBQUM7QUFFMUMsMkVBQTJFO0FBQzNFLGlD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ZixhQUFhLEVBQUUsSUFBSTtZQUNuQixRQUFRLEVBQUUsSUFBSTtZQUNkLFNBQVMsRUFBRSxJQUFJO1lBQ2YsUUFBUSxFQUFFLEtBQUs7WUFDZixRQUFRLEVBQUUsSUFBSTtZQUNkLFFBQVEsRUFBRSxJQUFJO1lBQ2QsVUFBVSxFQUFFLElBQUk7WUFDaEIsWUFBWSxFQUFFLElBQUk7WUFDbEIsa0JBQWtCLEVBQUUsSUFBSTtTQUN6QixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0ssUUFBUTtRQUNkLE9BQU87WUFDTCxHQUFHLFlBQVksQ0FBQyxVQUFVLEVBQUU7WUFDNUIsUUFBUSxFQUFFO2dCQUNSLHVJQUF1STtnQkFDdkksb0lBQW9JO2dCQUNwSSwyR0FBMkc7Z0JBQzNHLFFBQVE7YUFDVDtTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7O09BY0c7SUFDSSxTQUFTO1FBQ2QsT0FBTztZQUNMLEdBQUcsWUFBWSxDQUFDLFVBQVUsRUFBRTtZQUM1QixJQUFJLEVBQUUsV0FBVztZQUNqQixzQkFBc0IsRUFBRSxTQUFTO1lBQ2pDLFFBQVEsRUFBRTtnQkFDUix5R0FBeUc7YUFDMUc7U0FDRixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICd1cmwnO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyLCBTWVNURU1fT1JHX0lEIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW5GaWx0ZXIsIFBsdWdpbiB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWRhdGEnO1xuaW1wb3J0IHsgQ3VzdG9tUmVzb3VyY2UsIFRva2VuLCBEdXJhdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IFBvbGljeVN0YXRlbWVudCwgRWZmZWN0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBSdW50aW1lLCBBcmNoaXRlY3R1cmUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IE5vZGVqc0Z1bmN0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ub2RlanMnO1xuaW1wb3J0IHsgTG9nR3JvdXAgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gJ2F3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgdHlwZSB7IFBsdWdpbk9wdGlvbnMgfSBmcm9tICcuL3N0ZXAtdHlwZXMuanMnO1xuaW1wb3J0IHsgQ29uZmlnLCBDb3JlQ29uc3RhbnRzIH0gZnJvbSAnLi4vY29uZmlnL2FwcC1jb25maWcuanMnO1xuaW1wb3J0IHsgVW5pcXVlSWQgfSBmcm9tICcuLi9jb3JlL2lkLWdlbmVyYXRvci5qcyc7XG5pbXBvcnQgeyBwbHVnaW5BcnRpZmFjdEFsaWFzLCBwbHVnaW5Mb29rdXBGaWx0ZXIgfSBmcm9tICcuLi9jb3JlL3BsdWdpbi1jb250cmFjdC5qcyc7XG5pbXBvcnQgeyBQTEFDRUhPTERFUl9QTFVHSU5fSUQgfSBmcm9tICcuLi9jb3JlL3N0ZXAtbWFuaWZlc3QuanMnO1xuXG5jb25zdCBsb2cgPSBjcmVhdGVMb2dnZXIoJ3BsdWdpbi1sb29rdXAnKTtcblxuLy8gRVNNLXNhZmUgbW9kdWxlIGRpcmVjdG9yeSAodGhlIHBhY2thZ2UgaXMgYHR5cGU6IG1vZHVsZWA7IGBfX2Rpcm5hbWVgIGlzXG4vLyBub3QgZGVmaW5lZCB1bmRlciBFUyBtb2R1bGVzKS5cbmNvbnN0IE1PRFVMRV9ESVIgPSBkaXJuYW1lKGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKSk7XG5cbmludGVyZmFjZSBJbnB1dFByb3BzIHtcbiAgcmVhZG9ubHkgYmFzZVVSTDogc3RyaW5nO1xuICByZWFkb25seSBwbHVnaW5GaWx0ZXI6IFBsdWdpbkZpbHRlcjtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBQbHVnaW5Mb29rdXAgY29uc3RydWN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luTG9va3VwUHJvcHMge1xuICByZWFkb25seSBvcmdhbml6YXRpb246IHN0cmluZztcbiAgcmVhZG9ubHkgcHJvamVjdDogc3RyaW5nO1xuICByZWFkb25seSBwbGF0Zm9ybVVybDogc3RyaW5nO1xuICByZWFkb25seSB1bmlxdWVJZDogVW5pcXVlSWQ7XG4gIC8qKiBPcmdhbml6YXRpb24gSUQgZm9yIHJlc29sdmluZyBwZXItb3JnIHNlY3JldHMgZnJvbSBTZWNyZXRzIE1hbmFnZXIgKi9cbiAgcmVhZG9ubHkgb3JnSWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJ1bnRpbWU/OiBSdW50aW1lO1xuICAvKiogTGFtYmRhIHRpbWVvdXQgKGRlZmF1bHQ6IDMwcykgKi9cbiAgcmVhZG9ubHkgdGltZW91dD86IER1cmF0aW9uO1xuICAvKiogTGFtYmRhIG1lbW9yeSBpbiBNQiAoZGVmYXVsdDogNTEyKSAqL1xuICByZWFkb25seSBtZW1vcnlTaXplPzogbnVtYmVyO1xuICAvKiogTGFtYmRhIENQVSBhcmNoaXRlY3R1cmUgKGRlZmF1bHQ6IEFSTV82NCkgKi9cbiAgcmVhZG9ubHkgYXJjaGl0ZWN0dXJlPzogQXJjaGl0ZWN0dXJlO1xuICAvKiogUmVzZXJ2ZWQgY29uY3VycmVudCBleGVjdXRpb25zIGZvciB0aGUgbG9va3VwIExhbWJkYSAoZGVmYXVsdDogMzApICovXG4gIHJlYWRvbmx5IHJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBQbHVnaW5zIHByZS1yZXNvbHZlZCBieSBgcGlwZWxpbmUtbWFuYWdlciBwaXBlbGluZSBzeW50aGAgZnJvbSB0aGUgcGxhdGZvcm0gQVBJLlxuICAgKiBLZXllZCBieSBgYWxpYXMgfHwgbmFtZWAgKG1hdGNoZXMgdGhlIGNvbnN0cnVjdCdzIG5vcm1hbGl6ZSgpIG91dHB1dCkuXG4gICAqIFdoZW4gYSBsb29rdXAgaGl0cyB0aGlzIG1hcCwgYHBsdWdpbigpYCByZXR1cm5zIHRoZSByZXNvbHZlZCBQbHVnaW5cbiAgICogZGlyZWN0bHkg4oCUIG5vIGN1c3RvbSByZXNvdXJjZSBpcyBjcmVhdGVkLiBUaGlzIGlzIHdoYXQgbWFrZXMgdGhlXG4gICAqIG5hbWUsIHZlcnNpb24sIGNvbW1hbmRzLCBlbnYsIGV0Yy4gYXZhaWxhYmxlIGF0IHN5bnRoIHRpbWUgc28gdGhlIHJlc3VsdGluZ1xuICAgKiBDRk4gdGVtcGxhdGUgc2hpcHMgd2l0aCB0aGUgcmVhbCB2YWx1ZXMgYmFrZWQgaW4uXG4gICAqL1xuICByZWFkb25seSByZXNvbHZlZFBsdWdpbnM/OiBSZWNvcmQ8c3RyaW5nLCBQbHVnaW4+O1xufVxuXG4vKipcbiAqIENESyBDb25zdHJ1Y3QgcmVzcG9uc2libGUgZm9yIGxvb2tpbmcgdXAgcGx1Z2luIGNvbmZpZ3VyYXRpb25zIGZyb20gYW4gZXh0ZXJuYWwgcGxhdGZvcm1cbiAqIHVzaW5nIEFXUyBDbG91ZEZvcm1hdGlvbiBDdXN0b20gUmVzb3VyY2VzIGJhY2tlZCBieSBhIExhbWJkYSBmdW5jdGlvbi5cbiAqXG4gKiBUaGlzIGNvbnN0cnVjdCBjcmVhdGVzOlxuICogLSBBIExhbWJkYSBmdW5jdGlvbiAocGx1Z2luLWxvb2t1cC1oYW5kbGVyKSB0aGF0IGZldGNoZXMgcGx1Z2luIGNvbmZpZ3NcbiAqIC0gQSBDbG91ZFdhdGNoIExvZyBHcm91cCBmb3IgdGhlIExhbWJkYVxuICogLSBBIEN1c3RvbSBSZXNvdXJjZSBQcm92aWRlciB0aGF0IGludm9rZXMgdGhlIExhbWJkYVxuICogLSBBbiBJQU0gcG9saWN5IGdyYW50aW5nIHRoZSBMYW1iZGEgYWNjZXNzIHRvIHRoZSBjcmVkZW50aWFscyBzZWNyZXRcbiAqXG4gKiAjIyBQcmVyZXF1aXNpdGVzXG4gKlxuICogQmVmb3JlIGRlcGxveWluZywgc3RvcmUgYSBKV1QgdG9rZW4gaW4gU2VjcmV0cyBNYW5hZ2VyOlxuICogYGBgc2hcbiAqIHBpcGVsaW5lLW1hbmFnZXIgaW5mcmEgc3RvcmUtdG9rZW4gLS1kYXlzIDMwIC0tcmVnaW9uIDxyZWdpb24+XG4gKiBgYGBcbiAqXG4gKiBUaGUgTGFtYmRhIHJlc29sdmVzIHRoZSBzZWNyZXQgYnkgbmFtZSBhdCBydW50aW1lOlxuICogYHtTRUNSRVRTX1BBVEhfUFJFRklYfS97b3JnSWR9L3BsYXRmb3JtYFxuICpcbiAqIEBzZWUgaGFuZGxlcnMvcGx1Z2luLWxvb2t1cC1oYW5kbGVyLnRzIGZvciB0aGUgTGFtYmRhIGltcGxlbWVudGF0aW9uXG4gKi9cbmV4cG9ydCBjbGFzcyBQbHVnaW5Mb29rdXAgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IF91bmlxdWVJZDogVW5pcXVlSWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Byb3ZpZGVyOiBQcm92aWRlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGxhdGZvcm1Vcmw6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfcnVudGltZTogUnVudGltZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGltZW91dDogRHVyYXRpb247XG4gIHByaXZhdGUgcmVhZG9ubHkgX21lbW9yeVNpemU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfYXJjaGl0ZWN0dXJlOiBBcmNoaXRlY3R1cmU7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Jlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnM/OiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29yZ0lkPzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZXNvbHZlZFBsdWdpbnM/OiBSZWNvcmQ8c3RyaW5nLCBQbHVnaW4+O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBQbHVnaW5Mb29rdXBQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBpZiAoIXByb3BzLm9yZ2FuaXphdGlvbiB8fCAhcHJvcHMucHJvamVjdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdCb3RoIG9yZ2FuaXphdGlvbiBhbmQgcHJvamVjdCBhcmUgcmVxdWlyZWQuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fdW5pcXVlSWQgPSBwcm9wcy51bmlxdWVJZDtcbiAgICB0aGlzLl9wbGF0Zm9ybVVybCA9IHByb3BzLnBsYXRmb3JtVXJsO1xuICAgIHRoaXMuX29yZ0lkID0gcHJvcHMub3JnSWQ7XG4gICAgdGhpcy5fcnVudGltZSA9IHByb3BzLnJ1bnRpbWUgPz8gUnVudGltZS5OT0RFSlNfMjRfWDtcbiAgICB0aGlzLl90aW1lb3V0ID0gcHJvcHMudGltZW91dCA/PyBEdXJhdGlvbi5zZWNvbmRzKDMwKTtcbiAgICB0aGlzLl9tZW1vcnlTaXplID0gcHJvcHMubWVtb3J5U2l6ZSA/PyBDb25maWcuZ2V0KCdhd3MnKS5sYW1iZGEubWVtb3J5U2l6ZTtcbiAgICB0aGlzLl9hcmNoaXRlY3R1cmUgPSBwcm9wcy5hcmNoaXRlY3R1cmUgPz8gQXJjaGl0ZWN0dXJlLkFSTV82NDtcbiAgICB0aGlzLl9yZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zID0gcHJvcHMucmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9ucztcbiAgICB0aGlzLl9yZXNvbHZlZFBsdWdpbnMgPSBwcm9wcy5yZXNvbHZlZFBsdWdpbnM7XG5cbiAgICBjb25zdCBvbkV2ZW50SGFuZGxlciA9IHRoaXMuY3JlYXRlTGFtYmRhRnVuY3Rpb24oKTtcblxuICAgIC8vIExvZy1ncm91cCBzdHJhdGVneTpcbiAgICAvLyAgIFByZXZpb3VzIGNvZGUgY3JlYXRlZCBhbiBgQVdTOjpMb2dzOjpMb2dHcm91cGAgcmVzb3VyY2Ugd2l0aCBhblxuICAgIC8vICAgRVhQTElDSVQgbmFtZSAoYC9hd3MvbGFtYmRhL3BsdWdpbi1sb29rdXAtTmApLiBUaGF0IGJyZWFrcyBldmVyeVxuICAgIC8vICAgcmUtZGVwbG95IGFmdGVyIGEgcm9sbGVkLWJhY2sgc3RhY2s6IEFXUyBhdXRvLWNyZWF0ZXMgdGhlIGdyb3VwIG9uXG4gICAgLy8gICBmaXJzdCBMYW1iZGEgaW52b2NhdGlvbiwgdGhlIHJvbGxiYWNrIGxlYXZlcyBpdCBhcyBhbiBvcnBoYW4sIGFuZFxuICAgIC8vICAgdGhlIG5leHQgQ0RLIHJ1biBmYWlscyB3aXRoIFwiUmVzb3VyY2UgLi4uIGFscmVhZHkgZXhpc3RzXCIgYmVjYXVzZVxuICAgIC8vICAgdGhlIGV4cGxpY2l0IG5hbWUgY29sbGlkZXMgd2l0aCB0aGUgb3JwaGFuLlxuICAgIC8vXG4gICAgLy8gICBGaXg6IHVzZSBgTG9nR3JvdXAuZnJvbUxvZ0dyb3VwTmFtZSgpYCB0byBhZG9wdC1vci1wYXNzLXRocm91Z2guXG4gICAgLy8gICBJZiB0aGUgZ3JvdXAgZXhpc3RzLCBDREsgcmVmZXJlbmNlcyBpdCB3aXRob3V0IHRyeWluZyB0byByZWNyZWF0ZS5cbiAgICAvLyAgIElmIGl0IGRvZXNuJ3QsIEFXUyBMYW1iZGEgYXV0by1jcmVhdGVzIGl0IG9uIGZpcnN0IGludm9jYXRpb24uXG4gICAgLy8gICBSZXRlbnRpb24gaXMgdGhlbiBzZXQgdmlhIGEgc2VwYXJhdGUgcmV0ZW50aW9uLXBvbGljeSBjdXN0b21cbiAgICAvLyAgIHJlc291cmNlIHdoaWNoIGlzIGlkZW1wb3RlbnQgKHNhZmUgdG8gYXBwbHkgdG8gZXhpc3RpbmcgZ3JvdXBzKS5cbiAgICBjb25zdCBsb2dHcm91cE5hbWUgPSBgL2F3cy9sYW1iZGEvJHt0aGlzLl91bmlxdWVJZC5nZW5lcmF0ZSgncGx1Z2luOmxvb2t1cCcpLnJlcGxhY2UoLzovZywgJy0nKX1gO1xuICAgIGNvbnN0IGxvZ0dyb3VwID0gTG9nR3JvdXAuZnJvbUxvZ0dyb3VwTmFtZShcbiAgICAgIHRoaXMsXG4gICAgICB0aGlzLl91bmlxdWVJZC5nZW5lcmF0ZSgnbG9nOmdyb3VwJyksXG4gICAgICBsb2dHcm91cE5hbWUsXG4gICAgKTtcblxuICAgIHRoaXMuX3Byb3ZpZGVyID0gbmV3IFByb3ZpZGVyKHRoaXMsIHRoaXMuX3VuaXF1ZUlkLmdlbmVyYXRlKCdyZXNvdXJjZTpwcm92aWRlcicpLCB7XG4gICAgICBvbkV2ZW50SGFuZGxlcixcbiAgICAgIGxvZ0dyb3VwLFxuICAgIH0pO1xuXG4gICAgbG9nLmRlYnVnKGBQbHVnaW5Mb29rdXAgaW5pdGlhbGl6ZWQgZm9yICR7cHJvcHMub3JnYW5pemF0aW9ufS8ke3Byb3BzLnByb2plY3R9YCk7XG4gIH1cblxuICAvKipcbiAgICogTG9va3MgdXAgYW5kIHJlc29sdmVzIHBsdWdpbiBjb25maWd1cmF0aW9uIHVzaW5nIGVpdGhlciBhIHNpbXBsZSBuYW1lIG9yIGZ1bGwgUGx1Z2luT3B0aW9ucyBvYmplY3RcbiAgICogRHVyaW5nIHN5bnRoZXNpcywgaWYgdGhlIHZhbHVlIGlzIHVucmVzb2x2ZWQgKHRva2VuKSwgcmV0dXJucyBmYWxsYmFjayBwbHVnaW5cbiAgICogRHVyaW5nIGRlcGxveW1lbnQsIGF0dGVtcHRzIHRvIHBhcnNlIHRoZSBhY3R1YWwgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGN1c3RvbSByZXNvdXJjZVxuICAgKiBAcGFyYW0gcGx1Z2luIC0gUGx1Z2luIG5hbWUgKHN0cmluZykgb3IgY29tcGxldGUgUGx1Z2luT3B0aW9ucyBjb25maWd1cmF0aW9uXG4gICAqIEByZXR1cm5zIFJlc29sdmVkIFBsdWdpbiBvYmplY3Qgb3IgZmFsbGJhY2sgZGVmYXVsdCBjb25maWd1cmF0aW9uXG4gICAqL1xuICBwdWJsaWMgcGx1Z2luKHBsdWdpbjogc3RyaW5nIHwgUGx1Z2luT3B0aW9ucyk6IFBsdWdpbiB7XG4gICAgY29uc3QgcHJvcHMgPSB0aGlzLm5vcm1hbGl6ZShwbHVnaW4pO1xuXG4gICAgLy8gUHJlLXJlc29sdmVkIGJ5IGBwaXBlbGluZS1tYW5hZ2VyIHBpcGVsaW5lIHN5bnRoYCBmcm9tIHRoZSBwbGF0Zm9ybSBBUEkuXG4gICAgLy8gU2tpcCB0aGUgY3VzdG9tIHJlc291cmNlIGVudGlyZWx5IOKAlCB3ZSBhbHJlYWR5IGtub3cgdGhlIHBsdWdpbidzXG4gICAgLy8gbmFtZSwgdmVyc2lvbiwgY29tbWFuZHMsIGVudiwgZXRjLiBhdCBzeW50aCB0aW1lLCBzbyB0aGUgcmVzdWx0aW5nIENGTlxuICAgIC8vIHRlbXBsYXRlIGNhbiBzaGlwIHdpdGggdGhlIHJlYWwgQ29kZUJ1aWxkIGltYWdlIGJha2VkIGluLlxuICAgIGNvbnN0IGNhY2hlS2V5ID0gcHJvcHMuYWxpYXMgfHwgcHJvcHMubmFtZTtcbiAgICBjb25zdCBwcmVSZXNvbHZlZCA9IHRoaXMuX3Jlc29sdmVkUGx1Z2lucz8uW2NhY2hlS2V5XSBhcyAoUGx1Z2luICYgeyBwdWJsaXNoZXI/OiBzdHJpbmcgfCBudWxsIH0pIHwgdW5kZWZpbmVkO1xuICAgIC8vIFRoZSBtYXAgaXMga2V5ZWQgYnkgQUxJQVMsIHNvIGNoZWNrIGl0IGFjdHVhbGx5IGhvbGRzIFRISVMgcGx1Z2luLiBUd29cbiAgICAvLyBzdGVwcyBzaGFyaW5nIGFuIGFsaWFzIGFjcm9zcyBkaWZmZXJlbnQgcGx1Z2lucyB3b3VsZCBvdGhlcndpc2UgZ2V0IHRoZVxuICAgIC8vIGZpcnN0IG9uZSdzIHJlY29yZCBiYWNrIOKAlCB0aGUgc2Vjb25kIHN0ZXAgc2lsZW50bHkgcnVubmluZyB0aGUgd3JvbmdcbiAgICAvLyBpbWFnZSBhbmQgY29tbWFuZHMuIFRoZSBDTEkgcmVmdXNlcyBzdWNoIGEgcGlwZWxpbmUgdG9vOyB0aGlzIGNvdmVycyBhbnkgb3RoZXJcbiAgICAvLyBjYWxsZXIgdGhhdCBzdXBwbGllcyBgcmVzb2x2ZWRQbHVnaW5zYC5cbiAgICAvLyBDb21wYXJlIGFnYWluc3QgdGhlIG5hbWUgdGhlIGxvb2t1cCBhY3R1YWxseSBUQVJHRVRFRDogYW4gZXhwbGljaXRcbiAgICAvLyBgZmlsdGVyLm5hbWVgIG92ZXJyaWRlcyB0aGUgcmVmJ3MgYG5hbWVgIGJ5IGRlc2lnbiwgYW5kIHRoYXQgaXMgbm90IGFcbiAgICAvLyBjb2xsaXNpb24uXG4gICAgY29uc3QgdGFyZ2V0TmFtZSA9IChwcm9wcy5maWx0ZXIgYXMgeyBuYW1lPzogc3RyaW5nIH0gfCB1bmRlZmluZWQpPy5uYW1lID8/IHByb3BzLm5hbWU7XG4gICAgaWYgKHByZVJlc29sdmVkICYmIHByZVJlc29sdmVkLm5hbWUgIT09IHRhcmdldE5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFBsdWdpbiBhbGlhcyBcIiR7Y2FjaGVLZXl9XCIgcmVzb2x2ZXMgdG8gXCIke3ByZVJlc29sdmVkLm5hbWV9XCIsIG5vdCBcIiR7dGFyZ2V0TmFtZX1cIi4gYFxuICAgICAgICArICdFYWNoIGFsaWFzIG11c3QgbmFtZSBleGFjdGx5IG9uZSBwbHVnaW4uJyxcbiAgICAgICk7XG4gICAgfVxuICAgIC8vIEEgcXVhbGlmaWVkIHJlZmVyZW5jZSBtdXN0IGhhdmUgcmVzb2x2ZWQgdG8gVEhBVCBwdWJsaXNoZXIncyBsaXN0aW5nXG4gICAgLy8gKGFuIHVucXVhbGlmaWVkIG9uZSBtYXkgcmVzb2x2ZSB0byB0aGUgb3JnJ3Mgb3duIHBsdWdpbiBvciB0aGUgT2ZmaWNpYWxcbiAgICAvLyBsaXN0aW5nKS5cbiAgICBpZiAocHJlUmVzb2x2ZWQgJiYgcHJvcHMucHVibGlzaGVyICYmIHByZVJlc29sdmVkLnB1Ymxpc2hlciAhPT0gcHJvcHMucHVibGlzaGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBQbHVnaW4gYWxpYXMgXCIke2NhY2hlS2V5fVwiIHJlc29sdmVzIHRvICR7cHJlUmVzb2x2ZWQucHVibGlzaGVyID8gYCR7cHJlUmVzb2x2ZWQucHVibGlzaGVyfS9gIDogJ3lvdXIgb3JnYW5pemF0aW9uXFwncyAnfSR7cHJlUmVzb2x2ZWQubmFtZX0sIGBcbiAgICAgICAgKyBgbm90ICR7cHJvcHMucHVibGlzaGVyfS8ke3RhcmdldE5hbWV9LiBFYWNoIGFsaWFzIG11c3QgbmFtZSBleGFjdGx5IG9uZSBwbHVnaW4uYCxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChwcmVSZXNvbHZlZCkge1xuICAgICAgbG9nLmRlYnVnKGBQbHVnaW4gXCIke3Byb3BzLm5hbWV9XCIgcHJlLXJlc29sdmVkIChhbGlhcz0ke2NhY2hlS2V5fSkg4oCUIHNraXBwaW5nIGN1c3RvbSByZXNvdXJjZWApO1xuICAgICAgcmV0dXJuIHByZVJlc29sdmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGN1c3RvbSA9IHRoaXMuY3JlYXRlQ3VzdG9tUmVzb3VyY2UocHJvcHMpO1xuICAgIGNvbnN0IGVuY29kZWQgPSBjdXN0b20uZ2V0QXR0U3RyaW5nKCdSZXN1bHRWYWx1ZScpO1xuXG4gICAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZChlbmNvZGVkKSkge1xuICAgICAgbG9nLmRlYnVnKGBQbHVnaW4gXCIke3Byb3BzLm5hbWV9XCIgdmFsdWUgaXMgdW5yZXNvbHZlZCAodG9rZW4pIGR1cmluZyBzeW50aGVzaXMg4oCUIHVzaW5nIGZhbGxiYWNrLiBUaGUgYWN0dWFsIHBsdWdpbiB3aWxsIGJlIHJlc29sdmVkIGF0IGRlcGxveW1lbnQgdGltZS5gKTtcbiAgICAgIHJldHVybiB0aGlzLmZhbGxiYWNrKCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlY29kZWQgPSBCdWZmZXIuZnJvbShlbmNvZGVkLCAnYmFzZTY0JykudG9TdHJpbmcoJ3V0Zi04Jyk7XG4gICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShkZWNvZGVkKTtcblxuICAgICAgaWYgKCFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0JyB8fCAhZGF0YS5uYW1lIHx8ICFBcnJheS5pc0FycmF5KGRhdGEuY29tbWFuZHMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBwbHVnaW4gcmVzcG9uc2U6IG1pc3NpbmcgcmVxdWlyZWQgZmllbGRzIChuYW1lLCBjb21tYW5kcyknKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRhdGEgYXMgUGx1Z2luO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBlcnJvck1zZyA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gcGFyc2UgcGx1Z2luIFwiJHtwcm9wcy5uYW1lfVwiIGRhdGE6ICR7ZXJyb3JNc2d9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIExhbWJkYSBmdW5jdGlvbiB0aGF0IHNlcnZlcyBhcyB0aGUgZXZlbnQgaGFuZGxlciBmb3IgdGhlIGN1c3RvbSByZXNvdXJjZSBwcm92aWRlci5cbiAgICpcbiAgICogSldUIHRva2VuIGlzIHN0b3JlZCBpbiBhIHByZS1leGlzdGluZyBTZWNyZXRzIE1hbmFnZXIgc2VjcmV0IGF0XG4gICAqIGB7U0VDUkVUU19QQVRIX1BSRUZJWH0ve29yZ0lkfS9wbGF0Zm9ybWAuIFRoZSBMYW1iZGEgcmVzb2x2ZXMgdGhlXG4gICAqIHNlY3JldCBieSBuYW1lIGF0IHJ1bnRpbWUgdXNpbmcgYENvcmVDb25zdGFudHMuU0VDUkVUU19QQVRIX1BSRUZJWGAuXG4gICAqXG4gICAqIENyZWF0ZSB0aGUgc2VjcmV0IGJlZm9yZSBkZXBsb3lpbmcgd2l0aDpcbiAgICogICBwaXBlbGluZS1tYW5hZ2VyIGluZnJhIHN0b3JlLXRva2VuIC0tZGF5cyAzMCAtLXJlZ2lvbiA8cmVnaW9uPlxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVMYW1iZGFGdW5jdGlvbigpOiBOb2RlanNGdW5jdGlvbiB7XG4gICAgaWYgKCF0aGlzLl9vcmdJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdvcmdJZCBpcyByZXF1aXJlZCBmb3IgUGx1Z2luTG9va3VwIOKAlCBuZWVkZWQgdG8gcmVzb2x2ZSB0aGUgcGVyLW9yZyBwbGF0Zm9ybSBzZWNyZXQnKTtcbiAgICB9XG4gICAgY29uc3Qgc2VjcmV0TmFtZSA9IENvcmVDb25zdGFudHMuc2VjcmV0UGF0aCh0aGlzLl9vcmdJZCwgJ3BsYXRmb3JtJyk7XG5cbiAgICBjb25zdCBmbiA9IG5ldyBOb2RlanNGdW5jdGlvbih0aGlzLCB0aGlzLl91bmlxdWVJZC5nZW5lcmF0ZSgnb25ldmVudDpoYW5kbGVyJyksIHtcbiAgICAgIHJ1bnRpbWU6IHRoaXMuX3J1bnRpbWUsXG4gICAgICB0aW1lb3V0OiB0aGlzLl90aW1lb3V0LFxuICAgICAgbWVtb3J5U2l6ZTogdGhpcy5fbWVtb3J5U2l6ZSxcbiAgICAgIGFyY2hpdGVjdHVyZTogdGhpcy5fYXJjaGl0ZWN0dXJlLFxuICAgICAgZW50cnk6IGpvaW4oTU9EVUxFX0RJUiwgJy8uLi9oYW5kbGVycy9wbHVnaW4tbG9va3VwLWhhbmRsZXIuanMnKSxcbiAgICAgIGRlcHNMb2NrRmlsZVBhdGg6IGpvaW4oTU9EVUxFX0RJUiwgJy8uLi9oYW5kbGVycy9wbnBtLWxvY2sueWFtbCcpLFxuICAgICAgcmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9uczogdGhpcy5fcmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9ucyxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIFBMQVRGT1JNX1NFQ1JFVF9OQU1FOiBzZWNyZXROYW1lLFxuICAgICAgICAvLyBBbGxvdyBzZWxmLXNpZ25lZCBjZXJ0cyB3aGVuIHBsYXRmb3JtIHVzZXMgSFRUUFMgd2l0aG91dCBhIENBLXNpZ25lZCBjZXJ0aWZpY2F0ZVxuICAgICAgICAuLi4ocHJvY2Vzcy5lbnYuTk9ERV9UTFNfUkVKRUNUX1VOQVVUSE9SSVpFRCA9PT0gJzAnICYmIHtcbiAgICAgICAgICBOT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEOiAnMCcsXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgIG1pbmlmeTogdHJ1ZSxcbiAgICAgICAgc291cmNlTWFwOiBmYWxzZSxcbiAgICAgICAgdGFyZ2V0OiAnZXMyMDIyJyxcbiAgICAgICAgZXh0ZXJuYWxNb2R1bGVzOiBbXG4gICAgICAgICAgLy8gUHJvdmlkZWQgYnkgdGhlIExhbWJkYSBOb2RlLmpzIHJ1bnRpbWUg4oCUIG5ldmVyIGJ1bmRsZS5cbiAgICAgICAgICAnQGF3cy1zZGsvKicsXG4gICAgICAgICAgLy8gU3ludGgtb25seSBsaWJyYXJpZXMgdGhhdCBtdXN0IE5FVkVSIGVuZCB1cCBpbiBhIExhbWJkYSBidW5kbGUuXG4gICAgICAgICAgLy8gVGhlIGhhbmRsZXIgZG9lc24ndCB1c2UgdGhlbTsgdGhpcyBpcyBhIGd1YXJkIHNvIGEgc3RyYXkgdHJhbnNpdGl2ZVxuICAgICAgICAgIC8vIGltcG9ydCAoZS5nLiB2aWEgYSBjb25maWcgbW9kdWxlIHRoYXQgcHVsbHMgaW5mcmFzdHJ1Y3R1cmUtY29uZmlnIOKGklxuICAgICAgICAgIC8vIGF3cy1jZGstbGliKSBjYW4ndCBkcmFnIHRoZSBlbnRpcmUgfmh1bmRyZWRzLW9mLU1CIENESyBpbnRvIHRoZVxuICAgICAgICAgIC8vIGJ1bmRsZSBhbmQgT09NLWtpbGwgZXNidWlsZCBkdXJpbmcgY29sZC1zdGFydCBzeW50aC4gSWYgb25lIG9mIHRoZXNlXG4gICAgICAgICAgLy8gaXMgZXZlciBnZW51aW5lbHkgcmVhY2hlZCBhdCBydW50aW1lIHRoZSBMYW1iZGEgd2lsbCBmYWlsIGxvdWRseSBhdFxuICAgICAgICAgIC8vIGluaXQgKG1vZHVsZSBub3QgZm91bmQpIHJhdGhlciB0aGFuIHNpbGVudGx5IE9PTSBhdCBzeW50aCDigJQgd2hpY2ggaXNcbiAgICAgICAgICAvLyB0aGUgY29ycmVjdCBzaWduYWwsIHNpbmNlIENESyBoYXMgbm8gYnVzaW5lc3MgcnVubmluZyBpbiB0aGlzIExhbWJkYS5cbiAgICAgICAgICAnYXdzLWNkay1saWInLFxuICAgICAgICAgICdhd3MtY2RrLWxpYi8qJyxcbiAgICAgICAgICAnY29uc3RydWN0cycsXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gR3JhbnQgdGhlIExhbWJkYSBwZXJtaXNzaW9uIHRvIHJlYWQgdGhlIHBlci1vcmcgcGxhdGZvcm0gc2VjcmV0LlxuICAgIC8vIFRoZSB3aWxkY2FyZCBzdWZmaXggaGFuZGxlcyB0aGUgNi1jaGFyIHJhbmRvbSBJRCB0aGF0IFNlY3JldHMgTWFuYWdlciBhcHBlbmRzLlxuICAgIGZuLmFkZFRvUm9sZVBvbGljeShuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogWydzZWNyZXRzbWFuYWdlcjpHZXRTZWNyZXRWYWx1ZSddLFxuICAgICAgcmVzb3VyY2VzOiBbYGFybjphd3M6c2VjcmV0c21hbmFnZXI6KjoqOnNlY3JldDoke3NlY3JldE5hbWV9LSpgXSxcbiAgICB9KSk7XG5cbiAgICByZXR1cm4gZm47XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgdGhlIGRlZmF1bHQgcGx1Z2luIGZpbHRlci5cbiAgICogQWNjZXNzIGNvbnRyb2wgKG9yZ0lkIHNjb3BpbmcsIHB1YmxpYy9wcml2YXRlIHZpc2liaWxpdHkpIGlzIGhhbmRsZWQgYnlcbiAgICogdGhlIHBsYXRmb3JtJ3MgYWNjZXNzIGNvbnRyb2wgcXVlcnkgYnVpbGRlciBiYXNlZCBvbiB0aGUgSldUJ3Mgb3JnYW5pemF0aW9uSWQuXG4gICAqL1xuICBwcml2YXRlIG5vcm1hbGl6ZShwbHVnaW46IHN0cmluZyB8IFBsdWdpbk9wdGlvbnMpOiBQbHVnaW5PcHRpb25zIHtcbiAgICBjb25zdCByZWY6IFBsdWdpbk9wdGlvbnMgPSB0eXBlb2YgcGx1Z2luID09PSAnc3RyaW5nJyA/IHsgbmFtZTogcGx1Z2luIH0gOiBwbHVnaW47XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IHJlZi5uYW1lLFxuICAgICAgLi4uKHJlZi5wdWJsaXNoZXIgPyB7IHB1Ymxpc2hlcjogcmVmLnB1Ymxpc2hlciB9IDoge30pLFxuICAgICAgLy8gVGhlIHJlc29sdmVyIGNhY2hlIGtleTogdGhlIGV4cGxpY2l0IGFsaWFzLCBlbHNlIGBbPHB1Ymxpc2hlcj4tXTxuYW1lPi1hbGlhc2AuXG4gICAgICBhbGlhczogcGx1Z2luQXJ0aWZhY3RBbGlhcyhyZWYpLFxuICAgICAgLy8gVGhlIHNhbWUgZmlsdGVyIHRoZSBDTEkgcHJlLXJlc29sdmVyIGFuZCB0aGUgcGlwZWxpbmUgc2VydmljZSdzXG4gICAgICAvLyBjb250cmFjdCBjaGVjayBzZW5kIChgcGx1Z2luTG9va3VwRmlsdGVyYCk6IG5hbWUgKyBwdWJsaXNoZXIsIHRoZW5cbiAgICAgIC8vIHRoZSByZWZlcmVuY2UncyBvd24gZmlsdGVyLCBlbHNlIHRoZSBkZWZhdWx0IHZlcnNpb24uXG4gICAgICBmaWx0ZXI6IHBsdWdpbkxvb2t1cEZpbHRlcih7IG5hbWU6IHJlZi5uYW1lLCBwdWJsaXNoZXI6IHJlZi5wdWJsaXNoZXIsIGZpbHRlcjogcmVmLmZpbHRlciBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCB9KSBhcyBQbHVnaW5GaWx0ZXIsXG4gICAgICBtZXRhZGF0YTogcmVmLm1ldGFkYXRhLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIEN1c3RvbVJlc291cmNlIGluc3RhbmNlIHRoYXQgdHJpZ2dlcnMgcGx1Z2luIGxvb2t1cCBkdXJpbmcgZGVwbG95bWVudFxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVDdXN0b21SZXNvdXJjZShwcm9wczogUGx1Z2luT3B0aW9ucyk6IEN1c3RvbVJlc291cmNlIHtcbiAgICBjb25zdCByZXNvdXJjZUlkID0gdGhpcy5fdW5pcXVlSWQuZ2VuZXJhdGUocHJvcHMuYWxpYXMgfHwgcHJvcHMubmFtZSk7XG5cbiAgICByZXR1cm4gbmV3IEN1c3RvbVJlc291cmNlKHRoaXMsIHJlc291cmNlSWQsIHtcbiAgICAgIHNlcnZpY2VUb2tlbjogdGhpcy5fcHJvdmlkZXIuc2VydmljZVRva2VuLFxuICAgICAgcmVzb3VyY2VUeXBlOiAnQ3VzdG9tOjpQbHVnaW5Mb29rdXAnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBiYXNlVVJMOiB0aGlzLl9wbGF0Zm9ybVVybCxcbiAgICAgICAgcGx1Z2luRmlsdGVyOiBwcm9wcy5maWx0ZXIsXG4gICAgICB9IGFzIElucHV0UHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICAvKiogQmFzZSBwbHVnaW4gc2hhcGUgd2l0aCBuby1vcCBkZWZhdWx0cyBmb3IgZmllbGRzIENESyBkb2Vzbid0IHVzZS4gKi9cbiAgcHJpdmF0ZSBzdGF0aWMgYmFzZVBsdWdpbigpOiBQbHVnaW4ge1xuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBQTEFDRUhPTERFUl9QTFVHSU5fSUQsXG4gICAgICBvcmdJZDogU1lTVEVNX09SR19JRCxcbiAgICAgIGNyZWF0ZWRCeTogJ3N5c3RlbScsXG4gICAgICBjcmVhdGVkQXQ6IG5vdyxcbiAgICAgIHVwZGF0ZWRCeTogJ3N5c3RlbScsXG4gICAgICB1cGRhdGVkQXQ6IG5vdyxcbiAgICAgIG5hbWU6ICdmYWxsYmFjaycsXG4gICAgICBkZXNjcmlwdGlvbjogbnVsbCxcbiAgICAgIGtleXdvcmRzOiBbXSxcbiAgICAgIGNhdGVnb3J5OiAndW5rbm93bicsXG4gICAgICB2ZXJzaW9uOiAnMS4wLjAnLFxuICAgICAgbWV0YWRhdGE6IHt9LFxuICAgICAgcGx1Z2luVHlwZTogJ0NvZGVCdWlsZFN0ZXAnLFxuICAgICAgY29tcHV0ZVR5cGU6ICdTTUFMTCcsXG4gICAgICB0aW1lb3V0OiBudWxsLFxuICAgICAgZmFpbHVyZUJlaGF2aW9yOiAnZmFpbCcsXG4gICAgICBzZWNyZXRzOiBbXSxcbiAgICAgIHByaW1hcnlPdXRwdXREaXJlY3Rvcnk6ICdjZGsub3V0JyxcbiAgICAgIGVudjoge30sXG4gICAgICBidWlsZEFyZ3M6IHt9LFxuICAgICAgaW5zdGFsbENvbW1hbmRzOiBbXSxcbiAgICAgIGNvbW1hbmRzOiBbXSxcbiAgICAgIGRvY2tlcmZpbGU6IG51bGwsXG4gICAgICBidWlsZFR5cGU6ICdtZXRhZGF0YV9vbmx5JyxcbiAgICAgIGltYWdlRGlnZXN0OiBudWxsLFxuICAgICAgaW1hZ2VTb3VyY2U6IG51bGwsXG4gICAgICBvd25lcklkOiBudWxsLFxuICAgICAgb3duZXJUeXBlOiBudWxsLFxuICAgICAgbGlmZWN5Y2xlOiAncHJvZHVjdGlvbicsXG4gICAgICBjcml0aWNhbGl0eTogbnVsbCxcbiAgICAgIGxhYmVsczoge30sXG4gICAgICBsaW5rczogW10sXG4gICAgICB2aXNpYmlsaXR5OiAncHVibGljJyxcbiAgICAgIGlzRGVmYXVsdDogZmFsc2UsXG4gICAgICBpc0FjdGl2ZTogdHJ1ZSxcbiAgICAgIGRlbGV0ZWRBdDogbnVsbCxcbiAgICAgIGRlbGV0ZWRCeTogbnVsbCxcbiAgICAgIHB1cmdlQWZ0ZXI6IG51bGwsXG4gICAgICBxdW90YVJlc2V0QXQ6IG51bGwsXG4gICAgICBzdW1tYXJ5OiBudWxsLFxuICAgICAgZGlzcGxheU5hbWU6IG51bGwsXG4gICAgICBkb2N1bWVudGF0aW9uVXJsOiBudWxsLFxuICAgICAgbWV0YWRhdGFTb3VyY2VzOiB7fSxcbiAgICAgIHJlcXVpcmVkTWV0YWRhdGE6IFtdLFxuICAgICAgcmVxdWlyZWRWYXJzOiBbXSxcbiAgICAgIG1ldGFkYXRhVHlwZXM6IHt9LFxuICAgICAgdmFyc1R5cGVzOiB7fSxcbiAgICAgIHNtb2tlVGVzdDogbnVsbCxcbiAgICAgIG5ldHdvcmtFZ3Jlc3M6IFtdLFxuICAgICAgcmVhZG1lTWQ6IG51bGwsXG4gICAgICByZWFkbWVIdG1sOiBudWxsLFxuICAgICAgbGljZW5zZTogbnVsbCxcbiAgICAgIGNoYW5nZWxvZzogbnVsbCxcbiAgICAgIGhvbWVwYWdlVXJsOiBudWxsLFxuICAgICAgc291cmNlVXJsOiBudWxsLFxuICAgICAgaWNvbjogbnVsbCxcbiAgICAgIHVwbG9hZGVkSWNvbjogbnVsbCxcbiAgICAgIHZ1bG5Dcml0aWNhbDogbnVsbCxcbiAgICAgIHZ1bG5IaWdoOiBudWxsLFxuICAgICAgdnVsbk1lZGl1bTogbnVsbCxcbiAgICAgIHZ1bG5Mb3c6IG51bGwsXG4gICAgICB2dWxuQ3JpdGljYWxGaXhhYmxlOiBudWxsLFxuICAgICAgdnVsbkhpZ2hGaXhhYmxlOiBudWxsLFxuICAgICAgc2Nhbm5lZEF0OiBudWxsLFxuICAgICAgc2NhbkZsYWdnZWRBdDogbnVsbCxcbiAgICAgIHNjYW5GbGFnOiBudWxsLFxuICAgICAgcnVuQXNSb290OiBudWxsLFxuICAgICAgYnJlYWtpbmc6IGZhbHNlLFxuICAgICAgZnJvemVuQXQ6IG51bGwsXG4gICAgICB5YW5rZWRBdDogbnVsbCxcbiAgICAgIHlhbmtSZWFzb246IG51bGwsXG4gICAgICBkZXByZWNhdGVkQXQ6IG51bGwsXG4gICAgICBkZXByZWNhdGlvbk1lc3NhZ2U6IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGYWxsYmFjayBmb3IgYSBwbHVnaW4gd2hvc2UgbG9va3VwIHJldHVybmVkIG5vIHJlY29yZCAobm90IGluIHRoZSBwbGF0Zm9ybVxuICAgKiBjYXRhbG9nIGZvciB0aGlzIG9yZykgYW5kIHNvIGNvdWxkIG5vdCBiZSBwcmUtcmVzb2x2ZWQgYXQgc3ludGguXG4gICAqXG4gICAqIFRoaXMgc3RlcCBGQUlMUyB0aGUgYnVpbGQgKGV4aXQgMSkgb24gcHVycG9zZS4gVGhlIHByZXZpb3VzIGJlaGF2aW91ciDigJRcbiAgICogYGVjaG8gXCLigKZcIiAmJiBleGl0IDBgIOKAlCB3YXMgYSBmYWxzZSBwb3NpdGl2ZTogYW4gdW5yZXNvbHZlZCBzZWN1cml0eS9xdWFsaXR5XG4gICAqIHN0ZXAgKGRlcGVuZGVuY3ktY2hlY2ssIHNlbWdyZXAsIHNwb3RidWdzLCDigKYpIHJlcG9ydGVkIHRoZSBzdGFnZSBncmVlbiB3aGlsZVxuICAgKiBydW5uaW5nIG5vdGhpbmcsIGdpdmluZyBmYWxzZSBhc3N1cmFuY2UgdGhhdCBzY2Fucy9idWlsZHMgaGFkIHBhc3NlZC4gQVxuICAgKiBwbHVnaW4gc3RlcCB0aGF0IGNhbid0IHJ1biBpdHMgcGx1Z2luIG11c3QgZ28gcmVkLCBjb25zaXN0ZW50IHdpdGhcbiAgICogYGJhc2VQbHVnaW4oKS5mYWlsdXJlQmVoYXZpb3IgPT09ICdmYWlsJ2AuIFRoZSBtZXNzYWdlIGlzIGFjdGlvbmFibGUgc28gdGhlXG4gICAqIG9wZXJhdG9yIGtub3dzIHRoZSBjYXRhbG9nIGlzIGVtcHR5L2luY29tcGxldGUsIG5vdCB0aGF0IHRoZSB0b29sIGNyYXNoZWQuXG4gICAqL1xuICBwcml2YXRlIGZhbGxiYWNrKCk6IFBsdWdpbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLlBsdWdpbkxvb2t1cC5iYXNlUGx1Z2luKCksXG4gICAgICBjb21tYW5kczogW1xuICAgICAgICAnZWNobyBcIkVSUk9SOiBwbHVnaW4gbG9va3VwIHJldHVybmVkIG5vIHJlY29yZCDigJQgdGhpcyBwbHVnaW4gaXMgbm90IGluIHRoZSBwbGF0Zm9ybSBjYXRhbG9nIGZvciB0aGlzIG9yZywgc28gdGhlIHN0ZXAgY2Fubm90IHJ1bi5cIiA+JjInLFxuICAgICAgICAnZWNobyBcIlRoaXMgc3RlcCBmYWlscyBpbnN0ZWFkIG9mIHBhc3NpbmcgYXMgYSBuby1vcCAoYW4gdW5yZXNvbHZlZCBwbHVnaW4gcmVwb3J0aW5nIHN1Y2Nlc3Mgd291bGQgYmUgYSBmYWxzZS1wb3NpdGl2ZSBncmVlbikuXCIgPiYyJyxcbiAgICAgICAgJ2VjaG8gXCJGaXg6IGxvYWQgdGhlIHBsdWdpbiBpbnRvIHRoZSBwbGF0Zm9ybSAoZGVwbG95L2Jpbi9sb2FkLXBsdWdpbnMuc2gpLCB0aGVuIHJlLXJ1biB0aGUgcGlwZWxpbmUuXCIgPiYyJyxcbiAgICAgICAgJ2V4aXQgMScsXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU3ludGggcGx1Z2luIHdpdGggcGlwZWxpbmUtbWFuYWdlciBjb21tYW5kcy4gQ29sZC1zdGFydCBib290c3RyYXAgZm9yXG4gICAqIHRoZSBzeW50aCBzdGVwIHdoZW4gcHJlLXJlc29sdXRpb24gYnkgYHBpcGVsaW5lLW1hbmFnZXIgcGlwZWxpbmUgc3ludGgvZGVwbG95YFxuICAgKiBkaWRuJ3QgcG9wdWxhdGUgYHJlc29sdmVkUGx1Z2luc2AgZm9yIHRoZSBzeW50aCBwbHVnaW4uIFJ1bnMgb24gdGhlXG4gICAqIGNvbmZpZ3VyZWQgYENPREVCVUlMRF9ERUZBVUxUX0lNQUdFYCAoZGVmYXVsdCBgcGlwZWxpbmUtYm9vdHN0cmFwOjEuMGApXG4gICAqIGFuZCBzZWxmLWJvb3RzdHJhcHMgdGhlIHJlYWwgc3ludGggdmlhXG4gICAqIGBwaXBlbGluZS1tYW5hZ2VyIHBpcGVsaW5lIHN5bnRoIC0taWQgJHtQSVBFTElORV9JRH1gLlxuICAgKlxuICAgKiBObyBgaW5zdGFsbENvbW1hbmRzYDogdGhlIGRlZmF1bHQgaW1hZ2UgYWxyZWFkeSBoYXMgYHBpcGVsaW5lLW1hbmFnZXJgXG4gICAqIGJha2VkIGluICh0aGF0J3MgdGhlIHdob2xlIHBvaW50IG9mIGBwaXBlbGluZS1ib290c3RyYXA6MS4wYCkuIElmIHRoZVxuICAgKiBvcGVyYXRvciBwb2ludHMgQ09ERUJVSUxEX0RFRkFVTFRfSU1BR0UgYXQgYW4gaW1hZ2UgbGFja2luZyBpdCAoZS5nLlxuICAgKiB2YW5pbGxhIGF3cy9jb2RlYnVpbGQvc3RhbmRhcmQ6Ny4wKSwgdGhpcyBzdGVwIGV4aXRzIDEyNyDigJQgZml4IHRoYXRcbiAgICogYnkgdXNpbmcgYW4gaW1hZ2Ugd2l0aCBwaXBlbGluZS1tYW5hZ2VyIHJhdGhlciB0aGFuIHBhcGVyaW5nIG92ZXIgaXRcbiAgICogd2l0aCBhIHBlci1idWlsZCBgbnBtIGluc3RhbGwgLWdgLlxuICAgKi9cbiAgcHVibGljIGJvb3RzdHJhcCgpOiBQbHVnaW4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5QbHVnaW5Mb29rdXAuYmFzZVBsdWdpbigpLFxuICAgICAgbmFtZTogJ2Nkay1zeW50aCcsXG4gICAgICBwcmltYXJ5T3V0cHV0RGlyZWN0b3J5OiAnY2RrLm91dCcsXG4gICAgICBjb21tYW5kczogW1xuICAgICAgICAncGlwZWxpbmUtbWFuYWdlciBwaXBlbGluZSBzeW50aCAtLWlkICR7UElQRUxJTkVfSUR9IC0tc3RvcmUtdG9rZW5zIC0tcXVpZXQgLS1uby1ub3RpY2VzIC0tbm8tdmVyaWZ5LXNzbCcsXG4gICAgICBdLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
370
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWxvb2t1cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9waXBlbGluZS9wbHVnaW4tbG9va3VwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUNwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXpFLE9BQU8sRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlELE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUV2QyxPQUFPLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNyRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVqRSxNQUFNLEdBQUcsR0FBRyxZQUFZLENBQUMsZUFBZSxDQUFDLENBQUM7QUFFMUMsMkVBQTJFO0FBQzNFLGlD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ZixXQUFXLEVBQUUsSUFBSTtZQUNqQixhQUFhLEVBQUUsSUFBSTtZQUNuQixRQUFRLEVBQUUsSUFBSTtZQUNkLFNBQVMsRUFBRSxJQUFJO1lBQ2YsUUFBUSxFQUFFLEtBQUs7WUFDZixRQUFRLEVBQUUsSUFBSTtZQUNkLFFBQVEsRUFBRSxJQUFJO1lBQ2QsVUFBVSxFQUFFLElBQUk7WUFDaEIsWUFBWSxFQUFFLElBQUk7WUFDbEIsa0JBQWtCLEVBQUUsSUFBSTtTQUN6QixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0ssUUFBUTtRQUNkLE9BQU87WUFDTCxHQUFHLFlBQVksQ0FBQyxVQUFVLEVBQUU7WUFDNUIsUUFBUSxFQUFFO2dCQUNSLHVJQUF1STtnQkFDdkksb0lBQW9JO2dCQUNwSSwyR0FBMkc7Z0JBQzNHLFFBQVE7YUFDVDtTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7O09BY0c7SUFDSSxTQUFTO1FBQ2QsT0FBTztZQUNMLEdBQUcsWUFBWSxDQUFDLFVBQVUsRUFBRTtZQUM1QixJQUFJLEVBQUUsV0FBVztZQUNqQixzQkFBc0IsRUFBRSxTQUFTO1lBQ2pDLFFBQVEsRUFBRTtnQkFDUix5R0FBeUc7YUFDMUc7U0FDRixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICd1cmwnO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyLCBTWVNURU1fT1JHX0lEIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW5GaWx0ZXIsIFBsdWdpbiB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWRhdGEnO1xuaW1wb3J0IHsgQ3VzdG9tUmVzb3VyY2UsIFRva2VuLCBEdXJhdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IFBvbGljeVN0YXRlbWVudCwgRWZmZWN0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBSdW50aW1lLCBBcmNoaXRlY3R1cmUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IE5vZGVqc0Z1bmN0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ub2RlanMnO1xuaW1wb3J0IHsgTG9nR3JvdXAgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gJ2F3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgdHlwZSB7IFBsdWdpbk9wdGlvbnMgfSBmcm9tICcuL3N0ZXAtdHlwZXMuanMnO1xuaW1wb3J0IHsgQ29uZmlnLCBDb3JlQ29uc3RhbnRzIH0gZnJvbSAnLi4vY29uZmlnL2FwcC1jb25maWcuanMnO1xuaW1wb3J0IHsgVW5pcXVlSWQgfSBmcm9tICcuLi9jb3JlL2lkLWdlbmVyYXRvci5qcyc7XG5pbXBvcnQgeyBwbHVnaW5BcnRpZmFjdEFsaWFzLCBwbHVnaW5Mb29rdXBGaWx0ZXIgfSBmcm9tICcuLi9jb3JlL3BsdWdpbi1jb250cmFjdC5qcyc7XG5pbXBvcnQgeyBQTEFDRUhPTERFUl9QTFVHSU5fSUQgfSBmcm9tICcuLi9jb3JlL3N0ZXAtbWFuaWZlc3QuanMnO1xuXG5jb25zdCBsb2cgPSBjcmVhdGVMb2dnZXIoJ3BsdWdpbi1sb29rdXAnKTtcblxuLy8gRVNNLXNhZmUgbW9kdWxlIGRpcmVjdG9yeSAodGhlIHBhY2thZ2UgaXMgYHR5cGU6IG1vZHVsZWA7IGBfX2Rpcm5hbWVgIGlzXG4vLyBub3QgZGVmaW5lZCB1bmRlciBFUyBtb2R1bGVzKS5cbmNvbnN0IE1PRFVMRV9ESVIgPSBkaXJuYW1lKGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKSk7XG5cbmludGVyZmFjZSBJbnB1dFByb3BzIHtcbiAgcmVhZG9ubHkgYmFzZVVSTDogc3RyaW5nO1xuICByZWFkb25seSBwbHVnaW5GaWx0ZXI6IFBsdWdpbkZpbHRlcjtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBQbHVnaW5Mb29rdXAgY29uc3RydWN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luTG9va3VwUHJvcHMge1xuICByZWFkb25seSBvcmdhbml6YXRpb246IHN0cmluZztcbiAgcmVhZG9ubHkgcHJvamVjdDogc3RyaW5nO1xuICByZWFkb25seSBwbGF0Zm9ybVVybDogc3RyaW5nO1xuICByZWFkb25seSB1bmlxdWVJZDogVW5pcXVlSWQ7XG4gIC8qKiBPcmdhbml6YXRpb24gSUQgZm9yIHJlc29sdmluZyBwZXItb3JnIHNlY3JldHMgZnJvbSBTZWNyZXRzIE1hbmFnZXIgKi9cbiAgcmVhZG9ubHkgb3JnSWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJ1bnRpbWU/OiBSdW50aW1lO1xuICAvKiogTGFtYmRhIHRpbWVvdXQgKGRlZmF1bHQ6IDMwcykgKi9cbiAgcmVhZG9ubHkgdGltZW91dD86IER1cmF0aW9uO1xuICAvKiogTGFtYmRhIG1lbW9yeSBpbiBNQiAoZGVmYXVsdDogNTEyKSAqL1xuICByZWFkb25seSBtZW1vcnlTaXplPzogbnVtYmVyO1xuICAvKiogTGFtYmRhIENQVSBhcmNoaXRlY3R1cmUgKGRlZmF1bHQ6IEFSTV82NCkgKi9cbiAgcmVhZG9ubHkgYXJjaGl0ZWN0dXJlPzogQXJjaGl0ZWN0dXJlO1xuICAvKiogUmVzZXJ2ZWQgY29uY3VycmVudCBleGVjdXRpb25zIGZvciB0aGUgbG9va3VwIExhbWJkYSAoZGVmYXVsdDogMzApICovXG4gIHJlYWRvbmx5IHJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBQbHVnaW5zIHByZS1yZXNvbHZlZCBieSBgcGlwZWxpbmUtbWFuYWdlciBwaXBlbGluZSBzeW50aGAgZnJvbSB0aGUgcGxhdGZvcm0gQVBJLlxuICAgKiBLZXllZCBieSBgYWxpYXMgfHwgbmFtZWAgKG1hdGNoZXMgdGhlIGNvbnN0cnVjdCdzIG5vcm1hbGl6ZSgpIG91dHB1dCkuXG4gICAqIFdoZW4gYSBsb29rdXAgaGl0cyB0aGlzIG1hcCwgYHBsdWdpbigpYCByZXR1cm5zIHRoZSByZXNvbHZlZCBQbHVnaW5cbiAgICogZGlyZWN0bHkg4oCUIG5vIGN1c3RvbSByZXNvdXJjZSBpcyBjcmVhdGVkLiBUaGlzIGlzIHdoYXQgbWFrZXMgdGhlXG4gICAqIG5hbWUsIHZlcnNpb24sIGNvbW1hbmRzLCBlbnYsIGV0Yy4gYXZhaWxhYmxlIGF0IHN5bnRoIHRpbWUgc28gdGhlIHJlc3VsdGluZ1xuICAgKiBDRk4gdGVtcGxhdGUgc2hpcHMgd2l0aCB0aGUgcmVhbCB2YWx1ZXMgYmFrZWQgaW4uXG4gICAqL1xuICByZWFkb25seSByZXNvbHZlZFBsdWdpbnM/OiBSZWNvcmQ8c3RyaW5nLCBQbHVnaW4+O1xufVxuXG4vKipcbiAqIENESyBDb25zdHJ1Y3QgcmVzcG9uc2libGUgZm9yIGxvb2tpbmcgdXAgcGx1Z2luIGNvbmZpZ3VyYXRpb25zIGZyb20gYW4gZXh0ZXJuYWwgcGxhdGZvcm1cbiAqIHVzaW5nIEFXUyBDbG91ZEZvcm1hdGlvbiBDdXN0b20gUmVzb3VyY2VzIGJhY2tlZCBieSBhIExhbWJkYSBmdW5jdGlvbi5cbiAqXG4gKiBUaGlzIGNvbnN0cnVjdCBjcmVhdGVzOlxuICogLSBBIExhbWJkYSBmdW5jdGlvbiAocGx1Z2luLWxvb2t1cC1oYW5kbGVyKSB0aGF0IGZldGNoZXMgcGx1Z2luIGNvbmZpZ3NcbiAqIC0gQSBDbG91ZFdhdGNoIExvZyBHcm91cCBmb3IgdGhlIExhbWJkYVxuICogLSBBIEN1c3RvbSBSZXNvdXJjZSBQcm92aWRlciB0aGF0IGludm9rZXMgdGhlIExhbWJkYVxuICogLSBBbiBJQU0gcG9saWN5IGdyYW50aW5nIHRoZSBMYW1iZGEgYWNjZXNzIHRvIHRoZSBjcmVkZW50aWFscyBzZWNyZXRcbiAqXG4gKiAjIyBQcmVyZXF1aXNpdGVzXG4gKlxuICogQmVmb3JlIGRlcGxveWluZywgc3RvcmUgYSBKV1QgdG9rZW4gaW4gU2VjcmV0cyBNYW5hZ2VyOlxuICogYGBgc2hcbiAqIHBpcGVsaW5lLW1hbmFnZXIgaW5mcmEgc3RvcmUtdG9rZW4gLS1kYXlzIDMwIC0tcmVnaW9uIDxyZWdpb24+XG4gKiBgYGBcbiAqXG4gKiBUaGUgTGFtYmRhIHJlc29sdmVzIHRoZSBzZWNyZXQgYnkgbmFtZSBhdCBydW50aW1lOlxuICogYHtTRUNSRVRTX1BBVEhfUFJFRklYfS97b3JnSWR9L3BsYXRmb3JtYFxuICpcbiAqIEBzZWUgaGFuZGxlcnMvcGx1Z2luLWxvb2t1cC1oYW5kbGVyLnRzIGZvciB0aGUgTGFtYmRhIGltcGxlbWVudGF0aW9uXG4gKi9cbmV4cG9ydCBjbGFzcyBQbHVnaW5Mb29rdXAgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IF91bmlxdWVJZDogVW5pcXVlSWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Byb3ZpZGVyOiBQcm92aWRlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGxhdGZvcm1Vcmw6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfcnVudGltZTogUnVudGltZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGltZW91dDogRHVyYXRpb247XG4gIHByaXZhdGUgcmVhZG9ubHkgX21lbW9yeVNpemU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfYXJjaGl0ZWN0dXJlOiBBcmNoaXRlY3R1cmU7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Jlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnM/OiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29yZ0lkPzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZXNvbHZlZFBsdWdpbnM/OiBSZWNvcmQ8c3RyaW5nLCBQbHVnaW4+O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBQbHVnaW5Mb29rdXBQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBpZiAoIXByb3BzLm9yZ2FuaXphdGlvbiB8fCAhcHJvcHMucHJvamVjdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdCb3RoIG9yZ2FuaXphdGlvbiBhbmQgcHJvamVjdCBhcmUgcmVxdWlyZWQuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fdW5pcXVlSWQgPSBwcm9wcy51bmlxdWVJZDtcbiAgICB0aGlzLl9wbGF0Zm9ybVVybCA9IHByb3BzLnBsYXRmb3JtVXJsO1xuICAgIHRoaXMuX29yZ0lkID0gcHJvcHMub3JnSWQ7XG4gICAgdGhpcy5fcnVudGltZSA9IHByb3BzLnJ1bnRpbWUgPz8gUnVudGltZS5OT0RFSlNfMjRfWDtcbiAgICB0aGlzLl90aW1lb3V0ID0gcHJvcHMudGltZW91dCA/PyBEdXJhdGlvbi5zZWNvbmRzKDMwKTtcbiAgICB0aGlzLl9tZW1vcnlTaXplID0gcHJvcHMubWVtb3J5U2l6ZSA/PyBDb25maWcuZ2V0KCdhd3MnKS5sYW1iZGEubWVtb3J5U2l6ZTtcbiAgICB0aGlzLl9hcmNoaXRlY3R1cmUgPSBwcm9wcy5hcmNoaXRlY3R1cmUgPz8gQXJjaGl0ZWN0dXJlLkFSTV82NDtcbiAgICB0aGlzLl9yZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zID0gcHJvcHMucmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9ucztcbiAgICB0aGlzLl9yZXNvbHZlZFBsdWdpbnMgPSBwcm9wcy5yZXNvbHZlZFBsdWdpbnM7XG5cbiAgICBjb25zdCBvbkV2ZW50SGFuZGxlciA9IHRoaXMuY3JlYXRlTGFtYmRhRnVuY3Rpb24oKTtcblxuICAgIC8vIExvZy1ncm91cCBzdHJhdGVneTpcbiAgICAvLyAgIFByZXZpb3VzIGNvZGUgY3JlYXRlZCBhbiBgQVdTOjpMb2dzOjpMb2dHcm91cGAgcmVzb3VyY2Ugd2l0aCBhblxuICAgIC8vICAgRVhQTElDSVQgbmFtZSAoYC9hd3MvbGFtYmRhL3BsdWdpbi1sb29rdXAtTmApLiBUaGF0IGJyZWFrcyBldmVyeVxuICAgIC8vICAgcmUtZGVwbG95IGFmdGVyIGEgcm9sbGVkLWJhY2sgc3RhY2s6IEFXUyBhdXRvLWNyZWF0ZXMgdGhlIGdyb3VwIG9uXG4gICAgLy8gICBmaXJzdCBMYW1iZGEgaW52b2NhdGlvbiwgdGhlIHJvbGxiYWNrIGxlYXZlcyBpdCBhcyBhbiBvcnBoYW4sIGFuZFxuICAgIC8vICAgdGhlIG5leHQgQ0RLIHJ1biBmYWlscyB3aXRoIFwiUmVzb3VyY2UgLi4uIGFscmVhZHkgZXhpc3RzXCIgYmVjYXVzZVxuICAgIC8vICAgdGhlIGV4cGxpY2l0IG5hbWUgY29sbGlkZXMgd2l0aCB0aGUgb3JwaGFuLlxuICAgIC8vXG4gICAgLy8gICBGaXg6IHVzZSBgTG9nR3JvdXAuZnJvbUxvZ0dyb3VwTmFtZSgpYCB0byBhZG9wdC1vci1wYXNzLXRocm91Z2guXG4gICAgLy8gICBJZiB0aGUgZ3JvdXAgZXhpc3RzLCBDREsgcmVmZXJlbmNlcyBpdCB3aXRob3V0IHRyeWluZyB0byByZWNyZWF0ZS5cbiAgICAvLyAgIElmIGl0IGRvZXNuJ3QsIEFXUyBMYW1iZGEgYXV0by1jcmVhdGVzIGl0IG9uIGZpcnN0IGludm9jYXRpb24uXG4gICAgLy8gICBSZXRlbnRpb24gaXMgdGhlbiBzZXQgdmlhIGEgc2VwYXJhdGUgcmV0ZW50aW9uLXBvbGljeSBjdXN0b21cbiAgICAvLyAgIHJlc291cmNlIHdoaWNoIGlzIGlkZW1wb3RlbnQgKHNhZmUgdG8gYXBwbHkgdG8gZXhpc3RpbmcgZ3JvdXBzKS5cbiAgICBjb25zdCBsb2dHcm91cE5hbWUgPSBgL2F3cy9sYW1iZGEvJHt0aGlzLl91bmlxdWVJZC5nZW5lcmF0ZSgncGx1Z2luOmxvb2t1cCcpLnJlcGxhY2UoLzovZywgJy0nKX1gO1xuICAgIGNvbnN0IGxvZ0dyb3VwID0gTG9nR3JvdXAuZnJvbUxvZ0dyb3VwTmFtZShcbiAgICAgIHRoaXMsXG4gICAgICB0aGlzLl91bmlxdWVJZC5nZW5lcmF0ZSgnbG9nOmdyb3VwJyksXG4gICAgICBsb2dHcm91cE5hbWUsXG4gICAgKTtcblxuICAgIHRoaXMuX3Byb3ZpZGVyID0gbmV3IFByb3ZpZGVyKHRoaXMsIHRoaXMuX3VuaXF1ZUlkLmdlbmVyYXRlKCdyZXNvdXJjZTpwcm92aWRlcicpLCB7XG4gICAgICBvbkV2ZW50SGFuZGxlcixcbiAgICAgIGxvZ0dyb3VwLFxuICAgIH0pO1xuXG4gICAgbG9nLmRlYnVnKGBQbHVnaW5Mb29rdXAgaW5pdGlhbGl6ZWQgZm9yICR7cHJvcHMub3JnYW5pemF0aW9ufS8ke3Byb3BzLnByb2plY3R9YCk7XG4gIH1cblxuICAvKipcbiAgICogTG9va3MgdXAgYW5kIHJlc29sdmVzIHBsdWdpbiBjb25maWd1cmF0aW9uIHVzaW5nIGVpdGhlciBhIHNpbXBsZSBuYW1lIG9yIGZ1bGwgUGx1Z2luT3B0aW9ucyBvYmplY3RcbiAgICogRHVyaW5nIHN5bnRoZXNpcywgaWYgdGhlIHZhbHVlIGlzIHVucmVzb2x2ZWQgKHRva2VuKSwgcmV0dXJucyBmYWxsYmFjayBwbHVnaW5cbiAgICogRHVyaW5nIGRlcGxveW1lbnQsIGF0dGVtcHRzIHRvIHBhcnNlIHRoZSBhY3R1YWwgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGN1c3RvbSByZXNvdXJjZVxuICAgKiBAcGFyYW0gcGx1Z2luIC0gUGx1Z2luIG5hbWUgKHN0cmluZykgb3IgY29tcGxldGUgUGx1Z2luT3B0aW9ucyBjb25maWd1cmF0aW9uXG4gICAqIEByZXR1cm5zIFJlc29sdmVkIFBsdWdpbiBvYmplY3Qgb3IgZmFsbGJhY2sgZGVmYXVsdCBjb25maWd1cmF0aW9uXG4gICAqL1xuICBwdWJsaWMgcGx1Z2luKHBsdWdpbjogc3RyaW5nIHwgUGx1Z2luT3B0aW9ucyk6IFBsdWdpbiB7XG4gICAgY29uc3QgcHJvcHMgPSB0aGlzLm5vcm1hbGl6ZShwbHVnaW4pO1xuXG4gICAgLy8gUHJlLXJlc29sdmVkIGJ5IGBwaXBlbGluZS1tYW5hZ2VyIHBpcGVsaW5lIHN5bnRoYCBmcm9tIHRoZSBwbGF0Zm9ybSBBUEkuXG4gICAgLy8gU2tpcCB0aGUgY3VzdG9tIHJlc291cmNlIGVudGlyZWx5IOKAlCB3ZSBhbHJlYWR5IGtub3cgdGhlIHBsdWdpbidzXG4gICAgLy8gbmFtZSwgdmVyc2lvbiwgY29tbWFuZHMsIGVudiwgZXRjLiBhdCBzeW50aCB0aW1lLCBzbyB0aGUgcmVzdWx0aW5nIENGTlxuICAgIC8vIHRlbXBsYXRlIGNhbiBzaGlwIHdpdGggdGhlIHJlYWwgQ29kZUJ1aWxkIGltYWdlIGJha2VkIGluLlxuICAgIGNvbnN0IGNhY2hlS2V5ID0gcHJvcHMuYWxpYXMgfHwgcHJvcHMubmFtZTtcbiAgICBjb25zdCBwcmVSZXNvbHZlZCA9IHRoaXMuX3Jlc29sdmVkUGx1Z2lucz8uW2NhY2hlS2V5XSBhcyAoUGx1Z2luICYgeyBwdWJsaXNoZXI/OiBzdHJpbmcgfCBudWxsIH0pIHwgdW5kZWZpbmVkO1xuICAgIC8vIFRoZSBtYXAgaXMga2V5ZWQgYnkgQUxJQVMsIHNvIGNoZWNrIGl0IGFjdHVhbGx5IGhvbGRzIFRISVMgcGx1Z2luLiBUd29cbiAgICAvLyBzdGVwcyBzaGFyaW5nIGFuIGFsaWFzIGFjcm9zcyBkaWZmZXJlbnQgcGx1Z2lucyB3b3VsZCBvdGhlcndpc2UgZ2V0IHRoZVxuICAgIC8vIGZpcnN0IG9uZSdzIHJlY29yZCBiYWNrIOKAlCB0aGUgc2Vjb25kIHN0ZXAgc2lsZW50bHkgcnVubmluZyB0aGUgd3JvbmdcbiAgICAvLyBpbWFnZSBhbmQgY29tbWFuZHMuIFRoZSBDTEkgcmVmdXNlcyBzdWNoIGEgcGlwZWxpbmUgdG9vOyB0aGlzIGNvdmVycyBhbnkgb3RoZXJcbiAgICAvLyBjYWxsZXIgdGhhdCBzdXBwbGllcyBgcmVzb2x2ZWRQbHVnaW5zYC5cbiAgICAvLyBDb21wYXJlIGFnYWluc3QgdGhlIG5hbWUgdGhlIGxvb2t1cCBhY3R1YWxseSBUQVJHRVRFRDogYW4gZXhwbGljaXRcbiAgICAvLyBgZmlsdGVyLm5hbWVgIG92ZXJyaWRlcyB0aGUgcmVmJ3MgYG5hbWVgIGJ5IGRlc2lnbiwgYW5kIHRoYXQgaXMgbm90IGFcbiAgICAvLyBjb2xsaXNpb24uXG4gICAgY29uc3QgdGFyZ2V0TmFtZSA9IChwcm9wcy5maWx0ZXIgYXMgeyBuYW1lPzogc3RyaW5nIH0gfCB1bmRlZmluZWQpPy5uYW1lID8/IHByb3BzLm5hbWU7XG4gICAgaWYgKHByZVJlc29sdmVkICYmIHByZVJlc29sdmVkLm5hbWUgIT09IHRhcmdldE5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFBsdWdpbiBhbGlhcyBcIiR7Y2FjaGVLZXl9XCIgcmVzb2x2ZXMgdG8gXCIke3ByZVJlc29sdmVkLm5hbWV9XCIsIG5vdCBcIiR7dGFyZ2V0TmFtZX1cIi4gYFxuICAgICAgICArICdFYWNoIGFsaWFzIG11c3QgbmFtZSBleGFjdGx5IG9uZSBwbHVnaW4uJyxcbiAgICAgICk7XG4gICAgfVxuICAgIC8vIEEgcXVhbGlmaWVkIHJlZmVyZW5jZSBtdXN0IGhhdmUgcmVzb2x2ZWQgdG8gVEhBVCBwdWJsaXNoZXIncyBsaXN0aW5nXG4gICAgLy8gKGFuIHVucXVhbGlmaWVkIG9uZSBtYXkgcmVzb2x2ZSB0byB0aGUgb3JnJ3Mgb3duIHBsdWdpbiBvciB0aGUgT2ZmaWNpYWxcbiAgICAvLyBsaXN0aW5nKS5cbiAgICBpZiAocHJlUmVzb2x2ZWQgJiYgcHJvcHMucHVibGlzaGVyICYmIHByZVJlc29sdmVkLnB1Ymxpc2hlciAhPT0gcHJvcHMucHVibGlzaGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBQbHVnaW4gYWxpYXMgXCIke2NhY2hlS2V5fVwiIHJlc29sdmVzIHRvICR7cHJlUmVzb2x2ZWQucHVibGlzaGVyID8gYCR7cHJlUmVzb2x2ZWQucHVibGlzaGVyfS9gIDogJ3lvdXIgb3JnYW5pemF0aW9uXFwncyAnfSR7cHJlUmVzb2x2ZWQubmFtZX0sIGBcbiAgICAgICAgKyBgbm90ICR7cHJvcHMucHVibGlzaGVyfS8ke3RhcmdldE5hbWV9LiBFYWNoIGFsaWFzIG11c3QgbmFtZSBleGFjdGx5IG9uZSBwbHVnaW4uYCxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChwcmVSZXNvbHZlZCkge1xuICAgICAgbG9nLmRlYnVnKGBQbHVnaW4gXCIke3Byb3BzLm5hbWV9XCIgcHJlLXJlc29sdmVkIChhbGlhcz0ke2NhY2hlS2V5fSkg4oCUIHNraXBwaW5nIGN1c3RvbSByZXNvdXJjZWApO1xuICAgICAgcmV0dXJuIHByZVJlc29sdmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGN1c3RvbSA9IHRoaXMuY3JlYXRlQ3VzdG9tUmVzb3VyY2UocHJvcHMpO1xuICAgIGNvbnN0IGVuY29kZWQgPSBjdXN0b20uZ2V0QXR0U3RyaW5nKCdSZXN1bHRWYWx1ZScpO1xuXG4gICAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZChlbmNvZGVkKSkge1xuICAgICAgbG9nLmRlYnVnKGBQbHVnaW4gXCIke3Byb3BzLm5hbWV9XCIgdmFsdWUgaXMgdW5yZXNvbHZlZCAodG9rZW4pIGR1cmluZyBzeW50aGVzaXMg4oCUIHVzaW5nIGZhbGxiYWNrLiBUaGUgYWN0dWFsIHBsdWdpbiB3aWxsIGJlIHJlc29sdmVkIGF0IGRlcGxveW1lbnQgdGltZS5gKTtcbiAgICAgIHJldHVybiB0aGlzLmZhbGxiYWNrKCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlY29kZWQgPSBCdWZmZXIuZnJvbShlbmNvZGVkLCAnYmFzZTY0JykudG9TdHJpbmcoJ3V0Zi04Jyk7XG4gICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShkZWNvZGVkKTtcblxuICAgICAgaWYgKCFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0JyB8fCAhZGF0YS5uYW1lIHx8ICFBcnJheS5pc0FycmF5KGRhdGEuY29tbWFuZHMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBwbHVnaW4gcmVzcG9uc2U6IG1pc3NpbmcgcmVxdWlyZWQgZmllbGRzIChuYW1lLCBjb21tYW5kcyknKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRhdGEgYXMgUGx1Z2luO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBlcnJvck1zZyA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gcGFyc2UgcGx1Z2luIFwiJHtwcm9wcy5uYW1lfVwiIGRhdGE6ICR7ZXJyb3JNc2d9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIExhbWJkYSBmdW5jdGlvbiB0aGF0IHNlcnZlcyBhcyB0aGUgZXZlbnQgaGFuZGxlciBmb3IgdGhlIGN1c3RvbSByZXNvdXJjZSBwcm92aWRlci5cbiAgICpcbiAgICogSldUIHRva2VuIGlzIHN0b3JlZCBpbiBhIHByZS1leGlzdGluZyBTZWNyZXRzIE1hbmFnZXIgc2VjcmV0IGF0XG4gICAqIGB7U0VDUkVUU19QQVRIX1BSRUZJWH0ve29yZ0lkfS9wbGF0Zm9ybWAuIFRoZSBMYW1iZGEgcmVzb2x2ZXMgdGhlXG4gICAqIHNlY3JldCBieSBuYW1lIGF0IHJ1bnRpbWUgdXNpbmcgYENvcmVDb25zdGFudHMuU0VDUkVUU19QQVRIX1BSRUZJWGAuXG4gICAqXG4gICAqIENyZWF0ZSB0aGUgc2VjcmV0IGJlZm9yZSBkZXBsb3lpbmcgd2l0aDpcbiAgICogICBwaXBlbGluZS1tYW5hZ2VyIGluZnJhIHN0b3JlLXRva2VuIC0tZGF5cyAzMCAtLXJlZ2lvbiA8cmVnaW9uPlxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVMYW1iZGFGdW5jdGlvbigpOiBOb2RlanNGdW5jdGlvbiB7XG4gICAgaWYgKCF0aGlzLl9vcmdJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdvcmdJZCBpcyByZXF1aXJlZCBmb3IgUGx1Z2luTG9va3VwIOKAlCBuZWVkZWQgdG8gcmVzb2x2ZSB0aGUgcGVyLW9yZyBwbGF0Zm9ybSBzZWNyZXQnKTtcbiAgICB9XG4gICAgY29uc3Qgc2VjcmV0TmFtZSA9IENvcmVDb25zdGFudHMuc2VjcmV0UGF0aCh0aGlzLl9vcmdJZCwgJ3BsYXRmb3JtJyk7XG5cbiAgICBjb25zdCBmbiA9IG5ldyBOb2RlanNGdW5jdGlvbih0aGlzLCB0aGlzLl91bmlxdWVJZC5nZW5lcmF0ZSgnb25ldmVudDpoYW5kbGVyJyksIHtcbiAgICAgIHJ1bnRpbWU6IHRoaXMuX3J1bnRpbWUsXG4gICAgICB0aW1lb3V0OiB0aGlzLl90aW1lb3V0LFxuICAgICAgbWVtb3J5U2l6ZTogdGhpcy5fbWVtb3J5U2l6ZSxcbiAgICAgIGFyY2hpdGVjdHVyZTogdGhpcy5fYXJjaGl0ZWN0dXJlLFxuICAgICAgZW50cnk6IGpvaW4oTU9EVUxFX0RJUiwgJy8uLi9oYW5kbGVycy9wbHVnaW4tbG9va3VwLWhhbmRsZXIuanMnKSxcbiAgICAgIGRlcHNMb2NrRmlsZVBhdGg6IGpvaW4oTU9EVUxFX0RJUiwgJy8uLi9oYW5kbGVycy9wbnBtLWxvY2sueWFtbCcpLFxuICAgICAgcmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9uczogdGhpcy5fcmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9ucyxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIFBMQVRGT1JNX1NFQ1JFVF9OQU1FOiBzZWNyZXROYW1lLFxuICAgICAgICAvLyBBbGxvdyBzZWxmLXNpZ25lZCBjZXJ0cyB3aGVuIHBsYXRmb3JtIHVzZXMgSFRUUFMgd2l0aG91dCBhIENBLXNpZ25lZCBjZXJ0aWZpY2F0ZVxuICAgICAgICAuLi4ocHJvY2Vzcy5lbnYuTk9ERV9UTFNfUkVKRUNUX1VOQVVUSE9SSVpFRCA9PT0gJzAnICYmIHtcbiAgICAgICAgICBOT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEOiAnMCcsXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgIG1pbmlmeTogdHJ1ZSxcbiAgICAgICAgc291cmNlTWFwOiBmYWxzZSxcbiAgICAgICAgdGFyZ2V0OiAnZXMyMDIyJyxcbiAgICAgICAgZXh0ZXJuYWxNb2R1bGVzOiBbXG4gICAgICAgICAgLy8gUHJvdmlkZWQgYnkgdGhlIExhbWJkYSBOb2RlLmpzIHJ1bnRpbWUg4oCUIG5ldmVyIGJ1bmRsZS5cbiAgICAgICAgICAnQGF3cy1zZGsvKicsXG4gICAgICAgICAgLy8gU3ludGgtb25seSBsaWJyYXJpZXMgdGhhdCBtdXN0IE5FVkVSIGVuZCB1cCBpbiBhIExhbWJkYSBidW5kbGUuXG4gICAgICAgICAgLy8gVGhlIGhhbmRsZXIgZG9lc24ndCB1c2UgdGhlbTsgdGhpcyBpcyBhIGd1YXJkIHNvIGEgc3RyYXkgdHJhbnNpdGl2ZVxuICAgICAgICAgIC8vIGltcG9ydCAoZS5nLiB2aWEgYSBjb25maWcgbW9kdWxlIHRoYXQgcHVsbHMgaW5mcmFzdHJ1Y3R1cmUtY29uZmlnIOKGklxuICAgICAgICAgIC8vIGF3cy1jZGstbGliKSBjYW4ndCBkcmFnIHRoZSBlbnRpcmUgfmh1bmRyZWRzLW9mLU1CIENESyBpbnRvIHRoZVxuICAgICAgICAgIC8vIGJ1bmRsZSBhbmQgT09NLWtpbGwgZXNidWlsZCBkdXJpbmcgY29sZC1zdGFydCBzeW50aC4gSWYgb25lIG9mIHRoZXNlXG4gICAgICAgICAgLy8gaXMgZXZlciBnZW51aW5lbHkgcmVhY2hlZCBhdCBydW50aW1lIHRoZSBMYW1iZGEgd2lsbCBmYWlsIGxvdWRseSBhdFxuICAgICAgICAgIC8vIGluaXQgKG1vZHVsZSBub3QgZm91bmQpIHJhdGhlciB0aGFuIHNpbGVudGx5IE9PTSBhdCBzeW50aCDigJQgd2hpY2ggaXNcbiAgICAgICAgICAvLyB0aGUgY29ycmVjdCBzaWduYWwsIHNpbmNlIENESyBoYXMgbm8gYnVzaW5lc3MgcnVubmluZyBpbiB0aGlzIExhbWJkYS5cbiAgICAgICAgICAnYXdzLWNkay1saWInLFxuICAgICAgICAgICdhd3MtY2RrLWxpYi8qJyxcbiAgICAgICAgICAnY29uc3RydWN0cycsXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gR3JhbnQgdGhlIExhbWJkYSBwZXJtaXNzaW9uIHRvIHJlYWQgdGhlIHBlci1vcmcgcGxhdGZvcm0gc2VjcmV0LlxuICAgIC8vIFRoZSB3aWxkY2FyZCBzdWZmaXggaGFuZGxlcyB0aGUgNi1jaGFyIHJhbmRvbSBJRCB0aGF0IFNlY3JldHMgTWFuYWdlciBhcHBlbmRzLlxuICAgIGZuLmFkZFRvUm9sZVBvbGljeShuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogWydzZWNyZXRzbWFuYWdlcjpHZXRTZWNyZXRWYWx1ZSddLFxuICAgICAgcmVzb3VyY2VzOiBbYGFybjphd3M6c2VjcmV0c21hbmFnZXI6KjoqOnNlY3JldDoke3NlY3JldE5hbWV9LSpgXSxcbiAgICB9KSk7XG5cbiAgICByZXR1cm4gZm47XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgdGhlIGRlZmF1bHQgcGx1Z2luIGZpbHRlci5cbiAgICogQWNjZXNzIGNvbnRyb2wgKG9yZ0lkIHNjb3BpbmcsIHB1YmxpYy9wcml2YXRlIHZpc2liaWxpdHkpIGlzIGhhbmRsZWQgYnlcbiAgICogdGhlIHBsYXRmb3JtJ3MgYWNjZXNzIGNvbnRyb2wgcXVlcnkgYnVpbGRlciBiYXNlZCBvbiB0aGUgSldUJ3Mgb3JnYW5pemF0aW9uSWQuXG4gICAqL1xuICBwcml2YXRlIG5vcm1hbGl6ZShwbHVnaW46IHN0cmluZyB8IFBsdWdpbk9wdGlvbnMpOiBQbHVnaW5PcHRpb25zIHtcbiAgICBjb25zdCByZWY6IFBsdWdpbk9wdGlvbnMgPSB0eXBlb2YgcGx1Z2luID09PSAnc3RyaW5nJyA/IHsgbmFtZTogcGx1Z2luIH0gOiBwbHVnaW47XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IHJlZi5uYW1lLFxuICAgICAgLi4uKHJlZi5wdWJsaXNoZXIgPyB7IHB1Ymxpc2hlcjogcmVmLnB1Ymxpc2hlciB9IDoge30pLFxuICAgICAgLy8gVGhlIHJlc29sdmVyIGNhY2hlIGtleTogdGhlIGV4cGxpY2l0IGFsaWFzLCBlbHNlIGBbPHB1Ymxpc2hlcj4tXTxuYW1lPi1hbGlhc2AuXG4gICAgICBhbGlhczogcGx1Z2luQXJ0aWZhY3RBbGlhcyhyZWYpLFxuICAgICAgLy8gVGhlIHNhbWUgZmlsdGVyIHRoZSBDTEkgcHJlLXJlc29sdmVyIGFuZCB0aGUgcGlwZWxpbmUgc2VydmljZSdzXG4gICAgICAvLyBjb250cmFjdCBjaGVjayBzZW5kIChgcGx1Z2luTG9va3VwRmlsdGVyYCk6IG5hbWUgKyBwdWJsaXNoZXIsIHRoZW5cbiAgICAgIC8vIHRoZSByZWZlcmVuY2UncyBvd24gZmlsdGVyLCBlbHNlIHRoZSBkZWZhdWx0IHZlcnNpb24uXG4gICAgICBmaWx0ZXI6IHBsdWdpbkxvb2t1cEZpbHRlcih7IG5hbWU6IHJlZi5uYW1lLCBwdWJsaXNoZXI6IHJlZi5wdWJsaXNoZXIsIGZpbHRlcjogcmVmLmZpbHRlciBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCB9KSBhcyBQbHVnaW5GaWx0ZXIsXG4gICAgICBtZXRhZGF0YTogcmVmLm1ldGFkYXRhLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIEN1c3RvbVJlc291cmNlIGluc3RhbmNlIHRoYXQgdHJpZ2dlcnMgcGx1Z2luIGxvb2t1cCBkdXJpbmcgZGVwbG95bWVudFxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVDdXN0b21SZXNvdXJjZShwcm9wczogUGx1Z2luT3B0aW9ucyk6IEN1c3RvbVJlc291cmNlIHtcbiAgICBjb25zdCByZXNvdXJjZUlkID0gdGhpcy5fdW5pcXVlSWQuZ2VuZXJhdGUocHJvcHMuYWxpYXMgfHwgcHJvcHMubmFtZSk7XG5cbiAgICByZXR1cm4gbmV3IEN1c3RvbVJlc291cmNlKHRoaXMsIHJlc291cmNlSWQsIHtcbiAgICAgIHNlcnZpY2VUb2tlbjogdGhpcy5fcHJvdmlkZXIuc2VydmljZVRva2VuLFxuICAgICAgcmVzb3VyY2VUeXBlOiAnQ3VzdG9tOjpQbHVnaW5Mb29rdXAnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBiYXNlVVJMOiB0aGlzLl9wbGF0Zm9ybVVybCxcbiAgICAgICAgcGx1Z2luRmlsdGVyOiBwcm9wcy5maWx0ZXIsXG4gICAgICB9IGFzIElucHV0UHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICAvKiogQmFzZSBwbHVnaW4gc2hhcGUgd2l0aCBuby1vcCBkZWZhdWx0cyBmb3IgZmllbGRzIENESyBkb2Vzbid0IHVzZS4gKi9cbiAgcHJpdmF0ZSBzdGF0aWMgYmFzZVBsdWdpbigpOiBQbHVnaW4ge1xuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBQTEFDRUhPTERFUl9QTFVHSU5fSUQsXG4gICAgICBvcmdJZDogU1lTVEVNX09SR19JRCxcbiAgICAgIGNyZWF0ZWRCeTogJ3N5c3RlbScsXG4gICAgICBjcmVhdGVkQXQ6IG5vdyxcbiAgICAgIHVwZGF0ZWRCeTogJ3N5c3RlbScsXG4gICAgICB1cGRhdGVkQXQ6IG5vdyxcbiAgICAgIG5hbWU6ICdmYWxsYmFjaycsXG4gICAgICBkZXNjcmlwdGlvbjogbnVsbCxcbiAgICAgIGtleXdvcmRzOiBbXSxcbiAgICAgIGNhdGVnb3J5OiAndW5rbm93bicsXG4gICAgICB2ZXJzaW9uOiAnMS4wLjAnLFxuICAgICAgbWV0YWRhdGE6IHt9LFxuICAgICAgcGx1Z2luVHlwZTogJ0NvZGVCdWlsZFN0ZXAnLFxuICAgICAgY29tcHV0ZVR5cGU6ICdTTUFMTCcsXG4gICAgICB0aW1lb3V0OiBudWxsLFxuICAgICAgZmFpbHVyZUJlaGF2aW9yOiAnZmFpbCcsXG4gICAgICBzZWNyZXRzOiBbXSxcbiAgICAgIHByaW1hcnlPdXRwdXREaXJlY3Rvcnk6ICdjZGsub3V0JyxcbiAgICAgIGVudjoge30sXG4gICAgICBidWlsZEFyZ3M6IHt9LFxuICAgICAgaW5zdGFsbENvbW1hbmRzOiBbXSxcbiAgICAgIGNvbW1hbmRzOiBbXSxcbiAgICAgIGRvY2tlcmZpbGU6IG51bGwsXG4gICAgICBidWlsZFR5cGU6ICdtZXRhZGF0YV9vbmx5JyxcbiAgICAgIGltYWdlRGlnZXN0OiBudWxsLFxuICAgICAgaW1hZ2VTb3VyY2U6IG51bGwsXG4gICAgICBvd25lcklkOiBudWxsLFxuICAgICAgb3duZXJUeXBlOiBudWxsLFxuICAgICAgbGlmZWN5Y2xlOiAncHJvZHVjdGlvbicsXG4gICAgICBjcml0aWNhbGl0eTogbnVsbCxcbiAgICAgIGxhYmVsczoge30sXG4gICAgICBsaW5rczogW10sXG4gICAgICB2aXNpYmlsaXR5OiAncHVibGljJyxcbiAgICAgIGlzRGVmYXVsdDogZmFsc2UsXG4gICAgICBpc0FjdGl2ZTogdHJ1ZSxcbiAgICAgIGRlbGV0ZWRBdDogbnVsbCxcbiAgICAgIGRlbGV0ZWRCeTogbnVsbCxcbiAgICAgIHB1cmdlQWZ0ZXI6IG51bGwsXG4gICAgICBxdW90YVJlc2V0QXQ6IG51bGwsXG4gICAgICBzdW1tYXJ5OiBudWxsLFxuICAgICAgZGlzcGxheU5hbWU6IG51bGwsXG4gICAgICBkb2N1bWVudGF0aW9uVXJsOiBudWxsLFxuICAgICAgbWV0YWRhdGFTb3VyY2VzOiB7fSxcbiAgICAgIHJlcXVpcmVkTWV0YWRhdGE6IFtdLFxuICAgICAgcmVxdWlyZWRWYXJzOiBbXSxcbiAgICAgIG1ldGFkYXRhVHlwZXM6IHt9LFxuICAgICAgdmFyc1R5cGVzOiB7fSxcbiAgICAgIHNtb2tlVGVzdDogbnVsbCxcbiAgICAgIG5ldHdvcmtFZ3Jlc3M6IFtdLFxuICAgICAgcmVhZG1lTWQ6IG51bGwsXG4gICAgICByZWFkbWVIdG1sOiBudWxsLFxuICAgICAgbGljZW5zZTogbnVsbCxcbiAgICAgIGNoYW5nZWxvZzogbnVsbCxcbiAgICAgIGhvbWVwYWdlVXJsOiBudWxsLFxuICAgICAgc291cmNlVXJsOiBudWxsLFxuICAgICAgaWNvbjogbnVsbCxcbiAgICAgIHVwbG9hZGVkSWNvbjogbnVsbCxcbiAgICAgIHZ1bG5Dcml0aWNhbDogbnVsbCxcbiAgICAgIHZ1bG5IaWdoOiBudWxsLFxuICAgICAgdnVsbk1lZGl1bTogbnVsbCxcbiAgICAgIHZ1bG5Mb3c6IG51bGwsXG4gICAgICB2dWxuQ3JpdGljYWxGaXhhYmxlOiBudWxsLFxuICAgICAgdnVsbkhpZ2hGaXhhYmxlOiBudWxsLFxuICAgICAgc2Nhbm5lZEF0OiBudWxsLFxuICAgICAgc2NhblN1bW1hcnk6IG51bGwsXG4gICAgICBzY2FuRmxhZ2dlZEF0OiBudWxsLFxuICAgICAgc2NhbkZsYWc6IG51bGwsXG4gICAgICBydW5Bc1Jvb3Q6IG51bGwsXG4gICAgICBicmVha2luZzogZmFsc2UsXG4gICAgICBmcm96ZW5BdDogbnVsbCxcbiAgICAgIHlhbmtlZEF0OiBudWxsLFxuICAgICAgeWFua1JlYXNvbjogbnVsbCxcbiAgICAgIGRlcHJlY2F0ZWRBdDogbnVsbCxcbiAgICAgIGRlcHJlY2F0aW9uTWVzc2FnZTogbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEZhbGxiYWNrIGZvciBhIHBsdWdpbiB3aG9zZSBsb29rdXAgcmV0dXJuZWQgbm8gcmVjb3JkIChub3QgaW4gdGhlIHBsYXRmb3JtXG4gICAqIGNhdGFsb2cgZm9yIHRoaXMgb3JnKSBhbmQgc28gY291bGQgbm90IGJlIHByZS1yZXNvbHZlZCBhdCBzeW50aC5cbiAgICpcbiAgICogVGhpcyBzdGVwIEZBSUxTIHRoZSBidWlsZCAoZXhpdCAxKSBvbiBwdXJwb3NlLiBUaGUgcHJldmlvdXMgYmVoYXZpb3VyIOKAlFxuICAgKiBgZWNobyBcIuKAplwiICYmIGV4aXQgMGAg4oCUIHdhcyBhIGZhbHNlIHBvc2l0aXZlOiBhbiB1bnJlc29sdmVkIHNlY3VyaXR5L3F1YWxpdHlcbiAgICogc3RlcCAoZGVwZW5kZW5jeS1jaGVjaywgc2VtZ3JlcCwgc3BvdGJ1Z3MsIOKApikgcmVwb3J0ZWQgdGhlIHN0YWdlIGdyZWVuIHdoaWxlXG4gICAqIHJ1bm5pbmcgbm90aGluZywgZ2l2aW5nIGZhbHNlIGFzc3VyYW5jZSB0aGF0IHNjYW5zL2J1aWxkcyBoYWQgcGFzc2VkLiBBXG4gICAqIHBsdWdpbiBzdGVwIHRoYXQgY2FuJ3QgcnVuIGl0cyBwbHVnaW4gbXVzdCBnbyByZWQsIGNvbnNpc3RlbnQgd2l0aFxuICAgKiBgYmFzZVBsdWdpbigpLmZhaWx1cmVCZWhhdmlvciA9PT0gJ2ZhaWwnYC4gVGhlIG1lc3NhZ2UgaXMgYWN0aW9uYWJsZSBzbyB0aGVcbiAgICogb3BlcmF0b3Iga25vd3MgdGhlIGNhdGFsb2cgaXMgZW1wdHkvaW5jb21wbGV0ZSwgbm90IHRoYXQgdGhlIHRvb2wgY3Jhc2hlZC5cbiAgICovXG4gIHByaXZhdGUgZmFsbGJhY2soKTogUGx1Z2luIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uUGx1Z2luTG9va3VwLmJhc2VQbHVnaW4oKSxcbiAgICAgIGNvbW1hbmRzOiBbXG4gICAgICAgICdlY2hvIFwiRVJST1I6IHBsdWdpbiBsb29rdXAgcmV0dXJuZWQgbm8gcmVjb3JkIOKAlCB0aGlzIHBsdWdpbiBpcyBub3QgaW4gdGhlIHBsYXRmb3JtIGNhdGFsb2cgZm9yIHRoaXMgb3JnLCBzbyB0aGUgc3RlcCBjYW5ub3QgcnVuLlwiID4mMicsXG4gICAgICAgICdlY2hvIFwiVGhpcyBzdGVwIGZhaWxzIGluc3RlYWQgb2YgcGFzc2luZyBhcyBhIG5vLW9wIChhbiB1bnJlc29sdmVkIHBsdWdpbiByZXBvcnRpbmcgc3VjY2VzcyB3b3VsZCBiZSBhIGZhbHNlLXBvc2l0aXZlIGdyZWVuKS5cIiA+JjInLFxuICAgICAgICAnZWNobyBcIkZpeDogbG9hZCB0aGUgcGx1Z2luIGludG8gdGhlIHBsYXRmb3JtIChkZXBsb3kvYmluL2xvYWQtcGx1Z2lucy5zaCksIHRoZW4gcmUtcnVuIHRoZSBwaXBlbGluZS5cIiA+JjInLFxuICAgICAgICAnZXhpdCAxJyxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTeW50aCBwbHVnaW4gd2l0aCBwaXBlbGluZS1tYW5hZ2VyIGNvbW1hbmRzLiBDb2xkLXN0YXJ0IGJvb3RzdHJhcCBmb3JcbiAgICogdGhlIHN5bnRoIHN0ZXAgd2hlbiBwcmUtcmVzb2x1dGlvbiBieSBgcGlwZWxpbmUtbWFuYWdlciBwaXBlbGluZSBzeW50aC9kZXBsb3lgXG4gICAqIGRpZG4ndCBwb3B1bGF0ZSBgcmVzb2x2ZWRQbHVnaW5zYCBmb3IgdGhlIHN5bnRoIHBsdWdpbi4gUnVucyBvbiB0aGVcbiAgICogY29uZmlndXJlZCBgQ09ERUJVSUxEX0RFRkFVTFRfSU1BR0VgIChkZWZhdWx0IGBwaXBlbGluZS1ib290c3RyYXA6MS4wYClcbiAgICogYW5kIHNlbGYtYm9vdHN0cmFwcyB0aGUgcmVhbCBzeW50aCB2aWFcbiAgICogYHBpcGVsaW5lLW1hbmFnZXIgcGlwZWxpbmUgc3ludGggLS1pZCAke1BJUEVMSU5FX0lEfWAuXG4gICAqXG4gICAqIE5vIGBpbnN0YWxsQ29tbWFuZHNgOiB0aGUgZGVmYXVsdCBpbWFnZSBhbHJlYWR5IGhhcyBgcGlwZWxpbmUtbWFuYWdlcmBcbiAgICogYmFrZWQgaW4gKHRoYXQncyB0aGUgd2hvbGUgcG9pbnQgb2YgYHBpcGVsaW5lLWJvb3RzdHJhcDoxLjBgKS4gSWYgdGhlXG4gICAqIG9wZXJhdG9yIHBvaW50cyBDT0RFQlVJTERfREVGQVVMVF9JTUFHRSBhdCBhbiBpbWFnZSBsYWNraW5nIGl0IChlLmcuXG4gICAqIHZhbmlsbGEgYXdzL2NvZGVidWlsZC9zdGFuZGFyZDo3LjApLCB0aGlzIHN0ZXAgZXhpdHMgMTI3IOKAlCBmaXggdGhhdFxuICAgKiBieSB1c2luZyBhbiBpbWFnZSB3aXRoIHBpcGVsaW5lLW1hbmFnZXIgcmF0aGVyIHRoYW4gcGFwZXJpbmcgb3ZlciBpdFxuICAgKiB3aXRoIGEgcGVyLWJ1aWxkIGBucG0gaW5zdGFsbCAtZ2AuXG4gICAqL1xuICBwdWJsaWMgYm9vdHN0cmFwKCk6IFBsdWdpbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLlBsdWdpbkxvb2t1cC5iYXNlUGx1Z2luKCksXG4gICAgICBuYW1lOiAnY2RrLXN5bnRoJyxcbiAgICAgIHByaW1hcnlPdXRwdXREaXJlY3Rvcnk6ICdjZGsub3V0JyxcbiAgICAgIGNvbW1hbmRzOiBbXG4gICAgICAgICdwaXBlbGluZS1tYW5hZ2VyIHBpcGVsaW5lIHN5bnRoIC0taWQgJHtQSVBFTElORV9JRH0gLS1zdG9yZS10b2tlbnMgLS1xdWlldCAtLW5vLW5vdGljZXMgLS1uby12ZXJpZnktc3NsJyxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -1,6 +1,7 @@
1
1
  import type { ComputeType as CdkComputeType } from 'aws-cdk-lib/aws-codebuild';
2
2
  import { CodePipeline } from 'aws-cdk-lib/pipelines';
3
3
  import { Construct } from 'constructs';
4
+ import { codePipelineStageName } from './deploy-attribution.js';
4
5
  import { PluginLookup } from './plugin-lookup.js';
5
6
  import type { StepManifestRecorder } from './step-manifest-recorder.js';
6
7
  import type { StageOptions } from './step-types.js';
@@ -34,13 +35,7 @@ export interface StageBuilderProps {
34
35
  /** Records each step's resolved plugin for the step manifest. */
35
36
  readonly stepManifest?: StepManifestRecorder;
36
37
  }
37
- /**
38
- * The name CodePipeline gives a configured stage: the wave id, i.e. the stage's
39
- * `alias`, else `<stageName>-alias`. This — not `stageName` — is what appears as
40
- * `detail.stage` in CodePipeline events, so anything that must MATCH those
41
- * events (the `pb.deploys` DORA tag) has to be built from this one function.
42
- */
43
- export declare function codePipelineStageName(stage: Pick<StageOptions, 'stageName' | 'alias'>): string;
38
+ export { codePipelineStageName };
44
39
  /**
45
40
  * Builds and adds pipeline stages (waves) to a CodePipeline.
46
41
  *
@@ -2,21 +2,17 @@
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
  import { CodePipeline } from 'aws-cdk-lib/pipelines';
4
4
  import { Construct } from 'constructs';
5
+ import { codePipelineStageName } from './deploy-attribution.js';
5
6
  import { PluginLookup } from './plugin-lookup.js';
6
7
  import {} from '../core/artifact-manager.js';
7
8
  import { UniqueId } from '../core/id-generator.js';
8
9
  import { merge, resolveFailureBehavior } from '../core/metadata-helpers.js';
9
10
  import { createCodeBuildStep } from '../core/pipeline-helpers.js';
10
11
  import { assertPluginContract, contractScopeFromTemplateScope, pluginArtifactAlias, pluginStepIdAlias } from '../core/plugin-contract.js';
11
- /**
12
- * The name CodePipeline gives a configured stage: the wave id, i.e. the stage's
13
- * `alias`, else `<stageName>-alias`. This — not `stageName` — is what appears as
14
- * `detail.stage` in CodePipeline events, so anything that must MATCH those
15
- * events (the `pb.deploys` DORA tag) has to be built from this one function.
16
- */
17
- export function codePipelineStageName(stage) {
18
- return stage.alias ?? `${stage.stageName}-alias`;
19
- }
12
+ // `codePipelineStageName` moved to the CDK-free `deploy-attribution.ts` so the API
13
+ // can derive `pb.deploys` without pulling aws-cdk-lib; re-exported here because
14
+ // stage construction is where callers expect to find it.
15
+ export { codePipelineStageName };
20
16
  /**
21
17
  * Builds and adds pipeline stages (waves) to a CodePipeline.
22
18
  *
@@ -156,4 +152,4 @@ export class StageBuilder {
156
152
  }
157
153
  }
158
154
  }
159
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhZ2UtYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9waXBlbGluZS9zdGFnZS1idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFHdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDdkMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBR2xELE9BQU8sRUFBd0IsTUFBTSw2QkFBNkIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRWxFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSw4QkFBOEIsRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBc0MxSTs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxLQUFnRDtJQUNwRixPQUFPLEtBQUssQ0FBQyxLQUFLLElBQUksR0FBRyxLQUFLLENBQUMsU0FBUyxRQUFRLENBQUM7QUFDbkQsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILE1BQU0sT0FBTyxZQUFZO0lBQ04sS0FBSyxDQUFZO0lBQ2pCLFlBQVksQ0FBZTtJQUMzQixRQUFRLENBQVc7SUFDbkIsY0FBYyxDQUFlO0lBQzdCLGtCQUFrQixDQUFrQjtJQUNwQyxlQUFlLENBQW1CO0lBQ2xDLEtBQUssQ0FBVTtJQUNmLGFBQWEsQ0FBMEI7SUFDdkMsWUFBWSxDQUF3QjtJQUVyRCxZQUFZLEtBQXdCO1FBQ2xDLElBQUksQ0FBQyxLQUFLLEdB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RiIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgdHlwZSB7IENvbXB1dGVUeXBlIGFzIENka0NvbXB1dGVUeXBlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNvZGVidWlsZCc7XG5pbXBvcnQgeyBDb2RlUGlwZWxpbmUgfSBmcm9tICdhd3MtY2RrLWxpYi9waXBlbGluZXMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBQbHVnaW5Mb29rdXAgfSBmcm9tICcuL3BsdWdpbi1sb29rdXAuanMnO1xuaW1wb3J0IHR5cGUgeyBTdGVwTWFuaWZlc3RSZWNvcmRlciB9IGZyb20gJy4vc3RlcC1tYW5pZmVzdC1yZWNvcmRlci5qcyc7XG5pbXBvcnQgdHlwZSB7IFN0YWdlT3B0aW9ucyB9IGZyb20gJy4vc3RlcC10eXBlcy5qcyc7XG5pbXBvcnQgeyB0eXBlIEFydGlmYWN0TWFuYWdlciB9IGZyb20gJy4uL2NvcmUvYXJ0aWZhY3QtbWFuYWdlci5qcyc7XG5pbXBvcnQgeyBVbmlxdWVJZCB9IGZyb20gJy4uL2NvcmUvaWQtZ2VuZXJhdG9yLmpzJztcbmltcG9ydCB7IG1lcmdlLCByZXNvbHZlRmFpbHVyZUJlaGF2aW9yIH0gZnJvbSAnLi4vY29yZS9tZXRhZGF0YS1oZWxwZXJzLmpzJztcbmltcG9ydCB7IGNyZWF0ZUNvZGVCdWlsZFN0ZXAgfSBmcm9tICcuLi9jb3JlL3BpcGVsaW5lLWhlbHBlcnMuanMnO1xuaW1wb3J0IHR5cGUgeyBNZXRhRGF0YVR5cGUgfSBmcm9tICcuLi9jb3JlL3BpcGVsaW5lLXR5cGVzLmpzJztcbmltcG9ydCB7IGFzc2VydFBsdWdpbkNvbnRyYWN0LCBjb250cmFjdFNjb3BlRnJvbVRlbXBsYXRlU2NvcGUsIHBsdWdpbkFydGlmYWN0QWxpYXMsIHBsdWdpblN0ZXBJZEFsaWFzIH0gZnJvbSAnLi4vY29yZS9wbHVnaW4tY29udHJhY3QuanMnO1xuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBmb3IgdGhlIFN0YWdlQnVpbGRlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0YWdlQnVpbGRlclByb3BzIHtcbiAgLyoqIENESyBjb25zdHJ1Y3Qgc2NvcGUgZm9yIGNyZWF0aW5nIGNoaWxkIGNvbnN0cnVjdHMgKi9cbiAgcmVhZG9ubHkgc2NvcGU6IENvbnN0cnVjdDtcblxuICAvKiogUGx1Z2luIGxvb2t1cCBzZXJ2aWNlIGZvciByZXNvbHZpbmcgcGx1Z2luIHJlZmVyZW5jZXMgdG8gQ0RLIGNvbnN0cnVjdHMgKi9cbiAgcmVhZG9ubHkgcGx1Z2luTG9va3VwOiBQbHVnaW5Mb29rdXA7XG5cbiAgLyoqIFVuaXF1ZSBJRCBnZW5lcmF0b3IgZm9yIGNyZWF0aW5nIGRldGVybWluaXN0aWMgY29uc3RydWN0IElEcyAqL1xuICByZWFkb25seSB1bmlxdWVJZDogVW5pcXVlSWQ7XG5cbiAgLyoqIEdsb2JhbCBtZXRhZGF0YSBpbmhlcml0ZWQgYnkgYWxsIHN0YWdlIHN0ZXBzICovXG4gIHJlYWRvbmx5IGdsb2JhbE1ldGFkYXRhOiBNZXRhRGF0YVR5cGU7XG5cbiAgLyoqIERlZmF1bHQgQ29kZUJ1aWxkIGNvbXB1dGUgdHlwZSBmb3Igc3RlcHMgdGhhdCBkb24ndCBzcGVjaWZ5IG9uZSAqL1xuICByZWFkb25seSBkZWZhdWx0Q29tcHV0ZVR5cGU/OiBDZGtDb21wdXRlVHlwZTtcblxuICAvKiogQXJ0aWZhY3QgbWFuYWdlciBmb3IgcmVzb2x2aW5nIGlucHV0IGFydGlmYWN0IGtleXMgdG8gRmlsZVNldHMgKi9cbiAgcmVhZG9ubHkgYXJ0aWZhY3RNYW5hZ2VyPzogQXJ0aWZhY3RNYW5hZ2VyO1xuXG4gIC8qKiBUZW5hbnQgaWRlbnRpZmllciBmb3IgcmVzb2x2aW5nIHBlci1vcmcgc2VjcmV0cyBmcm9tIEFXUyBTZWNyZXRzIE1hbmFnZXIgKi9cbiAgcmVhZG9ubHkgb3JnSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBpcGVsaW5lLWxldmVsIHNjb3BlIHVzZWQgdG8gcmVzb2x2ZSBge3sgcGlwZWxpbmUuKiB9fWAgdGVtcGxhdGUgdG9rZW5zXG4gICAqIGluc2lkZSBwbHVnaW4gc3BlY3MuIFJlcXVpcmVkIOKAlCBwYXNzZWQgdGhyb3VnaCB0byBgY3JlYXRlQ29kZUJ1aWxkU3RlcGBcbiAgICogb24gZXZlcnkgc3RlcC5cbiAgICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lU2NvcGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIC8qKiBSZWNvcmRzIGVhY2ggc3RlcCdzIHJlc29sdmVkIHBsdWdpbiBmb3IgdGhlIHN0ZXAgbWFuaWZlc3QuICovXG4gIHJlYWRvbmx5IHN0ZXBNYW5pZmVzdD86IFN0ZXBNYW5pZmVzdFJlY29yZGVyO1xufVxuXG4vKipcbiAqIFRoZSBuYW1lIENvZGVQaXBlbGluZSBnaXZlcyBhIGNvbmZpZ3VyZWQgc3RhZ2U6IHRoZSB3YXZlIGlkLCBpLmUuIHRoZSBzdGFnZSdzXG4gKiBgYWxpYXNgLCBlbHNlIGA8c3RhZ2VOYW1lPi1hbGlhc2AuIFRoaXMg4oCUIG5vdCBgc3RhZ2VOYW1lYCDigJQgaXMgd2hhdCBhcHBlYXJzIGFzXG4gKiBgZGV0YWlsLnN0YWdlYCBpbiBDb2RlUGlwZWxpbmUgZXZlbnRzLCBzbyBhbnl0aGluZyB0aGF0IG11c3QgTUFUQ0ggdGhvc2VcbiAqIGV2ZW50cyAodGhlIGBwYi5kZXBsb3lzYCBET1JBIHRhZykgaGFzIHRvIGJlIGJ1aWx0IGZyb20gdGhpcyBvbmUgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2RlUGlwZWxpbmVTdGFnZU5hbWUoc3RhZ2U6IFBpY2s8U3RhZ2VPcHRpb25zLCAnc3RhZ2VOYW1lJyB8ICdhbGlhcyc+KTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0YWdlLmFsaWFzID8/IGAke3N0YWdlLnN0YWdlTmFtZX0tYWxpYXNgO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBhbmQgYWRkcyBwaXBlbGluZSBzdGFnZXMgKHdhdmVzKSB0byBhIENvZGVQaXBlbGluZS5cbiAqXG4gKiBFYWNoIHN0YWdlIGlzIHJlc29sdmVkIGZyb20gaGlnaC1sZXZlbCBjb25maWd1cmF0aW9uIChwbHVnaW4gbmFtZXMpXG4gKiBpbnRvIENESyBDb2RlQnVpbGQgc3RlcHMgdmlhIFBsdWdpbkxvb2t1cCwgdGhlbiBhZGRlZCBhcyBhIHdhdmUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHN0YWdlQnVpbGRlciA9IG5ldyBTdGFnZUJ1aWxkZXIoe1xuICogICBzY29wZTogdGhpcyxcbiAqICAgcGx1Z2luTG9va3VwLFxuICogICB1bmlxdWVJZCxcbiAqICAgZ2xvYmFsTWV0YWRhdGE6IG1lcmdlZE1ldGFkYXRhLFxuICogfSk7XG4gKiBzdGFnZUJ1aWxkZXIuYWRkU3RhZ2UocGlwZWxpbmUsIHtcbiAqICAgc3RhZ2VOYW1lOiAnSW50ZWdyYXRpb24gVGVzdHMnLFxuICogICBhbGlhczogJ2ludGVncmF0aW9uJyxcbiAqICAgc3RlcHM6IFtcbiAqICAgICB7IHBsdWdpbjogeyBuYW1lOiAnamVzdC1pbnRlZ3JhdGlvbicgfSB9LFxuICogICAgIHsgcGx1Z2luOiB7IG5hbWU6ICdlMmUtdGVzdHMnLCBhbGlhczogJ2N5cHJlc3MnIH0gfSxcbiAqICAgXSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBTdGFnZUJ1aWxkZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IHNjb3BlOiBDb25zdHJ1Y3Q7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luTG9va3VwOiBQbHVnaW5Mb29rdXA7XG4gIHByaXZhdGUgcmVhZG9ubHkgdW5pcXVlSWQ6IFVuaXF1ZUlkO1xuICBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbE1ldGFkYXRhOiBNZXRhRGF0YVR5cGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdENvbXB1dGVUeXBlPzogQ2RrQ29tcHV0ZVR5cGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXJ0aWZhY3RNYW5hZ2VyPzogQXJ0aWZhY3RNYW5hZ2VyO1xuICBwcml2YXRlIHJlYWRvbmx5IG9yZ0lkPzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHBpcGVsaW5lU2NvcGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBwcml2YXRlIHJlYWRvbmx5IHN0ZXBNYW5pZmVzdD86IFN0ZXBNYW5pZmVzdFJlY29yZGVyO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBTdGFnZUJ1aWxkZXJQcm9wcykge1xuICAgIHRoaXMuc2NvcGUgPSBwcm9wcy5zY29wZTtcbiAgICB0aGlzLnBsdWdpbkxvb2t1cCA9IHByb3BzLnBsdWdpbkxvb2t1cDtcbiAgICB0aGlzLnVuaXF1ZUlkID0gcHJvcHMudW5pcXVlSWQ7XG4gICAgdGhpcy5nbG9iYWxNZXRhZGF0YSA9IHByb3BzLmdsb2JhbE1ldGFkYXRhO1xuICAgIHRoaXMuZGVmYXVsdENvbXB1dGVUeXBlID0gcHJvcHMuZGVmYXVsdENvbXB1dGVUeXBlO1xuICAgIHRoaXMuYXJ0aWZhY3RNYW5hZ2VyID0gcHJvcHMuYXJ0aWZhY3RNYW5hZ2VyO1xuICAgIHRoaXMub3JnSWQgPSBwcm9wcy5vcmdJZDtcbiAgICB0aGlzLnBpcGVsaW5lU2NvcGUgPSBwcm9wcy5waXBlbGluZVNjb3BlO1xuICAgIHRoaXMuc3RlcE1hbmlmZXN0ID0gcHJvcHMuc3RlcE1hbmlmZXN0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIGEgc3RhZ2UncyBwbHVnaW4tYmFzZWQgc3RlcCBjb25maWdzIGludG8gQ29kZUJ1aWxkIHN0ZXBzXG4gICAqIGFuZCBhZGRzIHRoZW0gYXMgYSB3YXZlIHRvIHRoZSBwaXBlbGluZS5cbiAgICovXG4gIGFkZFN0YWdlKHBpcGVsaW5lOiBDb2RlUGlwZWxpbmUsIHN0YWdlOiBTdGFnZU9wdGlvbnMpOiB2b2lkIHtcbiAgICBjb25zdCBzdGFnZUFsaWFzID0gY29kZVBpcGVsaW5lU3RhZ2VOYW1lKHN0YWdlKTtcblxuICAgIGNvbnN0IHByZVN0ZXBzID0gc3RhZ2Uuc3RlcHNcbiAgICAgIC5maWx0ZXIocyA9PiAocy5wb3NpdGlvbiA/PyAncHJlJykgPT09ICdwcmUnKVxuICAgICAgLm1hcChzID0+IHRoaXMucmVzb2x2ZVN0ZXAocywgc3RhZ2Uuc3RhZ2VOYW1lLCBzdGFnZUFsaWFzKSk7XG4gICAgY29uc3QgcG9zdFN0ZXBzID0gc3RhZ2Uuc3RlcHNcbiAgICAgIC5maWx0ZXIocyA9PiBzLnBvc2l0aW9uID09PSAncG9zdCcpXG4gICAgICAubWFwKHMgPT4gdGhpcy5yZXNvbHZlU3RlcChzLCBzdGFnZS5zdGFnZU5hbWUsIHN0YWdlQWxpYXMpKTtcblxuICAgIHBpcGVsaW5lLmFkZFdhdmUoc3RhZ2VBbGlhcywge1xuICAgICAgLi4uKHByZVN0ZXBzLmxlbmd0aCA+IDAgJiYgeyBwcmU6IHByZVN0ZXBzIH0pLFxuICAgICAgLi4uKHBvc3RTdGVwcy5sZW5ndGggPiAwICYmIHsgcG9zdDogcG9zdFN0ZXBzIH0pLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlU3RlcChzdGVwQ29uZmlnOiBTdGFnZU9wdGlvbnNbJ3N0ZXBzJ11bbnVtYmVyXSwgc3RhZ2VOYW1lOiBzdHJpbmcsIHN0YWdlQWxpYXM6IHN0cmluZykge1xuICAgIGNvbnN0IHBsdWdpbiA9IHRoaXMucGx1Z2luTG9va3VwLnBsdWdpbihzdGVwQ29uZmlnLnBsdWdpbik7XG4gICAgLy8gQ29udHJhY3Q6IHRoZSBwaXBlbGluZSBtdXN0IHN1cHBseSB0aGUgcGx1Z2luJ3MgcmVxdWlyZWRcbiAgICAvLyBtZXRhZGF0YS92YXJzIHdpdGggdGhlIGRlY2xhcmVkIHR5cGVzLiBUaGUgQVBJIHJlZnVzZXMgc3VjaCBhIHBpcGVsaW5lXG4gICAgLy8gYXQgY3JlYXRlL3VwZGF0ZTsgdGhpcyBzdG9wcyBvbmUgdGhhdCByZWFjaGVkIHN5bnRoIGFub3RoZXIgd2F5LlxuICAgIGFzc2VydFBsdWdpbkNvbnRyYWN0KHBsdWdpbiwgY29udHJhY3RTY29wZUZyb21UZW1wbGF0ZVNjb3BlKHRoaXMucGlwZWxpbmVTY29wZSksXG4gICAgICBgJHtzdGFnZU5hbWV9LyR7cGx1Z2luU3RlcElkQWxpYXMoc3RlcENvbmZpZy5wbHVnaW4pfWApO1xuICAgIC8vIFBlci1zdGVwIHBsdWdpbiBjb25maWcgbGl2ZXMgb24gdGhlIHBsdWdpbiByZWZlcmVuY2UgKGBwbHVnaW4ubWV0YWRhdGFgIOKAlFxuICAgIC8vIGUuZy4gSkFWQV9WRVJTSU9OL0tPVExJTl9WRVJTSU9OL2NvbXB1dGV0eXBlIG92ZXJyaWRlcykuIHBsdWdpbkxvb2t1cC5wbHVnaW4oKVxuICAgIC8vIHJldHVybnMgdGhlIHJlc29sdmVkIENBVEFMT0cgcGx1Z2luIGFuZCBkcm9wcyB0aGUgcmVmZXJlbmNlIG1ldGFkYXRhIGluIHRoZVxuICAgIC8vIHByZS1yZXNvbHZlZCBwYXRoLCBzbyBtZXJnZSBpdCBoZXJlIHRvbyDigJQgb3RoZXJ3aXNlIHBlci1zdGVwIG92ZXJyaWRlcyBhcmVcbiAgICAvLyBzaWxlbnRseSBpZ25vcmVkIGFuZCB0aGUgYnVpbGQgZmFsbHMgYmFjayB0byBwbHVnaW4gZGVmYXVsdHMuXG4gICAgLy8gT3JkZXIgKGxhc3Qgd2lucyk6IGdsb2JhbCA8IHBsdWdpbi1yZWYgbWV0YWRhdGEgPCBzdGVwLWxldmVsIG1ldGFkYXRhLlxuICAgIGNvbnN0IHN0ZXBNZXRhZGF0YSA9IG1lcmdlKHRoaXMuZ2xvYmFsTWV0YWRhdGEsIHN0ZXBDb25maWcucGx1Z2luLm1ldGFkYXRhID8/IHt9LCBzdGVwQ29uZmlnLm1ldGFkYXRhID8/IHt9KTtcbiAgICAvLyBUV08gZGlmZmVyZW50IGlkZW50aXRpZXMsIGRlbGliZXJhdGVseSBrZXB0IGFwYXJ0OlxuICAgIC8vICAtIGBzdGVwSWRBbGlhc2AgbmFtZXMgdGhlIENESyBjb25zdHJ1Y3QuIEZvciBhbiB1bnF1YWxpZmllZCByZWZlcmVuY2VcbiAgICAvLyAgICBpdCBzdGF5cyBhcyBpdCBhbHdheXMgd2FzIChgYWxpYXMgPz8gbmFtZWApLCBiZWNhdXNlIGNoYW5naW5nIGl0XG4gICAgLy8gICAgcmVuYW1lcyB0aGUgQ29kZUJ1aWxkIHByb2plY3QncyBsb2dpY2FsIGlkIGFuZCBDbG91ZEZvcm1hdGlvbiB3b3VsZFxuICAgIC8vICAgIFJFUExBQ0UgZXZlcnkgdW5hbGlhc2VkIHN0ZXAncyBwcm9qZWN0IG9uIHRoZSBuZXh0IGRlcGxveSDigJQgZm9yIG5vXG4gICAgLy8gICAgYmVuZWZpdC4gQSBgcHVibGlzaGVyYCByZWZlcmVuY2UgYWRkcyB0aGUgcHVibGlzaGVyLlxuICAgIC8vICAtIGBwbHVnaW5BbGlhc2AgaXMgdGhlIEFSVElGQUNULUtFWSBzZWdtZW50IGFuZCBtdXN0IGZvbGxvdyB0aGUgb25lIHJ1bGVcbiAgICAvLyAgICBldmVyeSBrZXkgY29uc3VtZXIgdXNlcyAoYHBsdWdpbkFydGlmYWN0QWxpYXNgKS4gUmV1c2luZyB0aGUgY29uc3RydWN0XG4gICAgLy8gICAgdmFsdWUgd291bGQgcmVnaXN0ZXIgYOKApjpub2RlanMtYnVpbGQ6ZGlzdGAgZm9yIGFuIHVuYWxpYXNlZCBzdGVwIHdoaWxlXG4gICAgLy8gICAgdGhlIFVJIGFza3MgZm9yIGDigKY6bm9kZWpzLWJ1aWxkLWFsaWFzOmRpc3RgLCBhbmQgc3ludGggd291bGQgZmFpbC5cbiAgICBjb25zdCBzdGVwSWRBbGlhcyA9IHBsdWdpblN0ZXBJZEFsaWFzKHN0ZXBDb25maWcucGx1Z2luKTtcbiAgICBjb25zdCBwbHVnaW5BbGlhcyA9IHBsdWdpbkFydGlmYWN0QWxpYXMoc3RlcENvbmZpZy5wbHVnaW4pO1xuXG4gICAgaWYgKHN0ZXBDb25maWcuaW5wdXRBcnRpZmFjdCAmJiAhdGhpcy5hcnRpZmFjdE1hbmFnZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFN0ZXAgXCIke3N0ZXBJZEFsaWFzfVwiIHJlcXVpcmVzIGlucHV0QXJ0aWZhY3QgYnV0IG5vIGFydGlmYWN0TWFuYWdlciBpcyBjb25maWd1cmVkLmAsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoc3RlcENvbmZpZy5hZGRpdGlvbmFsSW5wdXRBcnRpZmFjdHM/Lmxlbmd0aCAmJiAhdGhpcy5hcnRpZmFjdE1hbmFnZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFN0ZXAgXCIke3N0ZXBJZEFsaWFzfVwiIHJlcXVpcmVzIGFkZGl0aW9uYWxJbnB1dEFydGlmYWN0cyBidXQgbm8gYXJ0aWZhY3RNYW5hZ2VyIGlzIGNvbmZpZ3VyZWQuYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXQgPSBzdGVwQ29uZmlnLmlucHV0QXJ0aWZhY3QgJiYgdGhpcy5hcnRpZmFjdE1hbmFnZXJcbiAgICAgID8gdGhpcy5hcnRpZmFjdE1hbmFnZXIuZ2V0T3V0cHV0KHN0ZXBDb25maWcuaW5wdXRBcnRpZmFjdClcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgYWRkaXRpb25hbElucHV0cyA9IHN0ZXBDb25maWcuYWRkaXRpb25hbElucHV0QXJ0aWZhY3RzPy5sZW5ndGggJiYgdGhpcy5hcnRpZmFjdE1hbmFnZXJcbiAgICAgID8gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBzdGVwQ29uZmlnLmFkZGl0aW9uYWxJbnB1dEFydGlmYWN0cy5tYXAoKHsgYXJ0aWZhY3QsIGRpcmVjdG9yeSB9KSA9PiBbXG4gICAgICAgICAgZGlyZWN0b3J5IHx8IGFydGlmYWN0Lm91dHB1dERpcmVjdG9yeSxcbiAgICAgICAgICB0aGlzLmFydGlmYWN0TWFuYWdlciEuZ2V0T3V0cHV0KGFydGlmYWN0KSxcbiAgICAgICAgXSksXG4gICAgICApXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IHN0ZXAgPSBjcmVhdGVDb2RlQnVpbGRTdGVwKHtcbiAgICAgIGlkOiB0aGlzLnVuaXF1ZUlkLmdlbmVyYXRlKGBzdGFnZToke3N0YWdlQWxpYXN9OiR7c3RlcElkQWxpYXN9YCksXG4gICAgICB1bmlxdWVJZDogdGhpcy51bmlxdWVJZCxcbiAgICAgIHBsdWdpbixcbiAgICAgIG1ldGFkYXRhOiBzdGVwTWV0YWRhdGEsXG4gICAgICBuZXR3b3JrOiBzdGVwQ29uZmlnLm5ldHdvcmssXG4gICAgICBzY29wZTogdGhpcy5zY29wZSxcbiAgICAgIGRlZmF1bHRDb21wdXRlVHlwZTogdGhpcy5kZWZhdWx0Q29tcHV0ZVR5cGUsXG4gICAgICBpbnB1dCxcbiAgICAgIGFkZGl0aW9uYWxJbnB1dHMsXG4gICAgICBhcnRpZmFjdE1hbmFnZXI6IHRoaXMuYXJ0aWZhY3RNYW5hZ2VyLFxuICAgICAgc3RhZ2VOYW1lLFxuICAgICAgc3RhZ2VBbGlhcyxcbiAgICAgIHBsdWdpbkFsaWFzLFxuICAgICAgcHJlSW5zdGFsbENvbW1hbmRzOiBzdGVwQ29uZmlnLnByZUluc3RhbGxDb21tYW5kcyxcbiAgICAgIHBvc3RJbnN0YWxsQ29tbWFuZHM6IHN0ZXBDb25maWcucG9zdEluc3RhbGxDb21tYW5kcyxcbiAgICAgIHByZUNvbW1hbmRzOiBzdGVwQ29uZmlnLnByZUNvbW1hbmRzLFxuICAgICAgcG9zdENvbW1hbmRzOiBzdGVwQ29uZmlnLnBvc3RDb21tYW5kcyxcbiAgICAgIGVudjogc3RlcENvbmZpZy5lbnYsXG4gICAgICB0aW1lb3V0OiBzdGVwQ29uZmlnLnRpbWVvdXQgPz8gcGx1Z2luLnRpbWVvdXQgPz8gdW5kZWZpbmVkLFxuICAgICAgLy8gQSBzY2FuL3NlY3VyaXR5LWNhdGVnb3J5IHBsdWdpbiBjYW4gbmV2ZXIgYmUgZG93bmdyYWRlZCBmcm9tICdmYWlsJyDigJQgc2VlIHJlc29sdmVGYWlsdXJlQmVoYXZpb3IuXG4gICAgICBmYWlsdXJlQmVoYXZpb3I6IHJlc29sdmVGYWlsdXJlQmVoYXZpb3IocGx1Z2luLmNhdGVnb3J5LCBzdGVwQ29uZmlnLmZhaWx1cmVCZWhhdmlvciA/PyBwbHVnaW4uZmFpbHVyZUJlaGF2aW9yKSxcbiAgICAgIG9yZ0lkOiB0aGlzLm9yZ0lkLFxuICAgICAgcGlwZWxpbmVTY29wZTogdGhpcy5waXBlbGluZVNjb3BlLFxuICAgIH0pO1xuICAgIHRoaXMuc3RlcE1hbmlmZXN0Py5yZWNvcmQoc3RlcCwgcGx1Z2luKTtcbiAgICByZXR1cm4gc3RlcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBhbmQgYWRkcyBtdWx0aXBsZSBzdGFnZXMgYXMgd2F2ZXMgdG8gdGhlIHBpcGVsaW5lLCBpbiBvcmRlci5cbiAgICovXG4gIGFkZFN0YWdlcyhwaXBlbGluZTogQ29kZVBpcGVsaW5lLCBzdGFnZXM6IFN0YWdlT3B0aW9uc1tdKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBzdGFnZSBvZiBzdGFnZXMpIHtcbiAgICAgIHRoaXMuYWRkU3RhZ2UocGlwZWxpbmUsIHN0YWdlKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
155
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhZ2UtYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9waXBlbGluZS9zdGFnZS1idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFHdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDdkMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBR2xELE9BQU8sRUFBd0IsTUFBTSw2QkFBNkIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRWxFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSw4QkFBOEIsRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBc0MxSSxtRkFBbUY7QUFDbkYsZ0ZBQWdGO0FBQ2hGLHlEQUF5RDtBQUN6RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsQ0FBQztBQUVqQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFDSCxNQUFNLE9BQU8sWUFBWTtJQUNOLEtBQUssQ0FBWTtJQUNqQixZQUFZLENBQWU7SUFDM0IsUUFBUSxDQUFXO0lBQ25CLGNBQWMsQ0FBZTtJQUM3QixrQkFBa0IsQ0FBa0I7SUFDcEMsZUFBZSxDQUFtQjtJQUNsQyxLQUFLLENBQVU7SUFDZixhQUFhLENBQTBCO0lBQ3ZDLFlBQVksQ0FBd0I7SUFFckQsWUFBWSxLQUF3QjtRQUNsQyxJQUFJLENBQUMsS0FBSyxHQUFH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LCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHR5cGUgeyBDb21wdXRlVHlwZSBhcyBDZGtDb21wdXRlVHlwZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2RlYnVpbGQnO1xuaW1wb3J0IHsgQ29kZVBpcGVsaW5lIH0gZnJvbSAnYXdzLWNkay1saWIvcGlwZWxpbmVzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgY29kZVBpcGVsaW5lU3RhZ2VOYW1lIH0gZnJvbSAnLi9kZXBsb3ktYXR0cmlidXRpb24uanMnO1xuaW1wb3J0IHsgUGx1Z2luTG9va3VwIH0gZnJvbSAnLi9wbHVnaW4tbG9va3VwLmpzJztcbmltcG9ydCB0eXBlIHsgU3RlcE1hbmlmZXN0UmVjb3JkZXIgfSBmcm9tICcuL3N0ZXAtbWFuaWZlc3QtcmVjb3JkZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBTdGFnZU9wdGlvbnMgfSBmcm9tICcuL3N0ZXAtdHlwZXMuanMnO1xuaW1wb3J0IHsgdHlwZSBBcnRpZmFjdE1hbmFnZXIgfSBmcm9tICcuLi9jb3JlL2FydGlmYWN0LW1hbmFnZXIuanMnO1xuaW1wb3J0IHsgVW5pcXVlSWQgfSBmcm9tICcuLi9jb3JlL2lkLWdlbmVyYXRvci5qcyc7XG5pbXBvcnQgeyBtZXJnZSwgcmVzb2x2ZUZhaWx1cmVCZWhhdmlvciB9IGZyb20gJy4uL2NvcmUvbWV0YWRhdGEtaGVscGVycy5qcyc7XG5pbXBvcnQgeyBjcmVhdGVDb2RlQnVpbGRTdGVwIH0gZnJvbSAnLi4vY29yZS9waXBlbGluZS1oZWxwZXJzLmpzJztcbmltcG9ydCB0eXBlIHsgTWV0YURhdGFUeXBlIH0gZnJvbSAnLi4vY29yZS9waXBlbGluZS10eXBlcy5qcyc7XG5pbXBvcnQgeyBhc3NlcnRQbHVnaW5Db250cmFjdCwgY29udHJhY3RTY29wZUZyb21UZW1wbGF0ZVNjb3BlLCBwbHVnaW5BcnRpZmFjdEFsaWFzLCBwbHVnaW5TdGVwSWRBbGlhcyB9IGZyb20gJy4uL2NvcmUvcGx1Z2luLWNvbnRyYWN0LmpzJztcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgZm9yIHRoZSBTdGFnZUJ1aWxkZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGFnZUJ1aWxkZXJQcm9wcyB7XG4gIC8qKiBDREsgY29uc3RydWN0IHNjb3BlIGZvciBjcmVhdGluZyBjaGlsZCBjb25zdHJ1Y3RzICovXG4gIHJlYWRvbmx5IHNjb3BlOiBDb25zdHJ1Y3Q7XG5cbiAgLyoqIFBsdWdpbiBsb29rdXAgc2VydmljZSBmb3IgcmVzb2x2aW5nIHBsdWdpbiByZWZlcmVuY2VzIHRvIENESyBjb25zdHJ1Y3RzICovXG4gIHJlYWRvbmx5IHBsdWdpbkxvb2t1cDogUGx1Z2luTG9va3VwO1xuXG4gIC8qKiBVbmlxdWUgSUQgZ2VuZXJhdG9yIGZvciBjcmVhdGluZyBkZXRlcm1pbmlzdGljIGNvbnN0cnVjdCBJRHMgKi9cbiAgcmVhZG9ubHkgdW5pcXVlSWQ6IFVuaXF1ZUlkO1xuXG4gIC8qKiBHbG9iYWwgbWV0YWRhdGEgaW5oZXJpdGVkIGJ5IGFsbCBzdGFnZSBzdGVwcyAqL1xuICByZWFkb25seSBnbG9iYWxNZXRhZGF0YTogTWV0YURhdGFUeXBlO1xuXG4gIC8qKiBEZWZhdWx0IENvZGVCdWlsZCBjb21wdXRlIHR5cGUgZm9yIHN0ZXBzIHRoYXQgZG9uJ3Qgc3BlY2lmeSBvbmUgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdENvbXB1dGVUeXBlPzogQ2RrQ29tcHV0ZVR5cGU7XG5cbiAgLyoqIEFydGlmYWN0IG1hbmFnZXIgZm9yIHJlc29sdmluZyBpbnB1dCBhcnRpZmFjdCBrZXlzIHRvIEZpbGVTZXRzICovXG4gIHJlYWRvbmx5IGFydGlmYWN0TWFuYWdlcj86IEFydGlmYWN0TWFuYWdlcjtcblxuICAvKiogVGVuYW50IGlkZW50aWZpZXIgZm9yIHJlc29sdmluZyBwZXItb3JnIHNlY3JldHMgZnJvbSBBV1MgU2VjcmV0cyBNYW5hZ2VyICovXG4gIHJlYWRvbmx5IG9yZ0lkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQaXBlbGluZS1sZXZlbCBzY29wZSB1c2VkIHRvIHJlc29sdmUgYHt7IHBpcGVsaW5lLiogfX1gIHRlbXBsYXRlIHRva2Vuc1xuICAgKiBpbnNpZGUgcGx1Z2luIHNwZWNzLiBSZXF1aXJlZCDigJQgcGFzc2VkIHRocm91Z2ggdG8gYGNyZWF0ZUNvZGVCdWlsZFN0ZXBgXG4gICAqIG9uIGV2ZXJ5IHN0ZXAuXG4gICAqL1xuICByZWFkb25seSBwaXBlbGluZVNjb3BlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAvKiogUmVjb3JkcyBlYWNoIHN0ZXAncyByZXNvbHZlZCBwbHVnaW4gZm9yIHRoZSBzdGVwIG1hbmlmZXN0LiAqL1xuICByZWFkb25seSBzdGVwTWFuaWZlc3Q/OiBTdGVwTWFuaWZlc3RSZWNvcmRlcjtcbn1cblxuLy8gYGNvZGVQaXBlbGluZVN0YWdlTmFtZWAgbW92ZWQgdG8gdGhlIENESy1mcmVlIGBkZXBsb3ktYXR0cmlidXRpb24udHNgIHNvIHRoZSBBUElcbi8vIGNhbiBkZXJpdmUgYHBiLmRlcGxveXNgIHdpdGhvdXQgcHVsbGluZyBhd3MtY2RrLWxpYjsgcmUtZXhwb3J0ZWQgaGVyZSBiZWNhdXNlXG4vLyBzdGFnZSBjb25zdHJ1Y3Rpb24gaXMgd2hlcmUgY2FsbGVycyBleHBlY3QgdG8gZmluZCBpdC5cbmV4cG9ydCB7IGNvZGVQaXBlbGluZVN0YWdlTmFtZSB9O1xuXG4vKipcbiAqIEJ1aWxkcyBhbmQgYWRkcyBwaXBlbGluZSBzdGFnZXMgKHdhdmVzKSB0byBhIENvZGVQaXBlbGluZS5cbiAqXG4gKiBFYWNoIHN0YWdlIGlzIHJlc29sdmVkIGZyb20gaGlnaC1sZXZlbCBjb25maWd1cmF0aW9uIChwbHVnaW4gbmFtZXMpXG4gKiBpbnRvIENESyBDb2RlQnVpbGQgc3RlcHMgdmlhIFBsdWdpbkxvb2t1cCwgdGhlbiBhZGRlZCBhcyBhIHdhdmUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHN0YWdlQnVpbGRlciA9IG5ldyBTdGFnZUJ1aWxkZXIoe1xuICogICBzY29wZTogdGhpcyxcbiAqICAgcGx1Z2luTG9va3VwLFxuICogICB1bmlxdWVJZCxcbiAqICAgZ2xvYmFsTWV0YWRhdGE6IG1lcmdlZE1ldGFkYXRhLFxuICogfSk7XG4gKiBzdGFnZUJ1aWxkZXIuYWRkU3RhZ2UocGlwZWxpbmUsIHtcbiAqICAgc3RhZ2VOYW1lOiAnSW50ZWdyYXRpb24gVGVzdHMnLFxuICogICBhbGlhczogJ2ludGVncmF0aW9uJyxcbiAqICAgc3RlcHM6IFtcbiAqICAgICB7IHBsdWdpbjogeyBuYW1lOiAnamVzdC1pbnRlZ3JhdGlvbicgfSB9LFxuICogICAgIHsgcGx1Z2luOiB7IG5hbWU6ICdlMmUtdGVzdHMnLCBhbGlhczogJ2N5cHJlc3MnIH0gfSxcbiAqICAgXSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBTdGFnZUJ1aWxkZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IHNjb3BlOiBDb25zdHJ1Y3Q7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luTG9va3VwOiBQbHVnaW5Mb29rdXA7XG4gIHByaXZhdGUgcmVhZG9ubHkgdW5pcXVlSWQ6IFVuaXF1ZUlkO1xuICBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbE1ldGFkYXRhOiBNZXRhRGF0YVR5cGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdENvbXB1dGVUeXBlPzogQ2RrQ29tcHV0ZVR5cGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXJ0aWZhY3RNYW5hZ2VyPzogQXJ0aWZhY3RNYW5hZ2VyO1xuICBwcml2YXRlIHJlYWRvbmx5IG9yZ0lkPzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHBpcGVsaW5lU2NvcGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBwcml2YXRlIHJlYWRvbmx5IHN0ZXBNYW5pZmVzdD86IFN0ZXBNYW5pZmVzdFJlY29yZGVyO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBTdGFnZUJ1aWxkZXJQcm9wcykge1xuICAgIHRoaXMuc2NvcGUgPSBwcm9wcy5zY29wZTtcbiAgICB0aGlzLnBsdWdpbkxvb2t1cCA9IHByb3BzLnBsdWdpbkxvb2t1cDtcbiAgICB0aGlzLnVuaXF1ZUlkID0gcHJvcHMudW5pcXVlSWQ7XG4gICAgdGhpcy5nbG9iYWxNZXRhZGF0YSA9IHByb3BzLmdsb2JhbE1ldGFkYXRhO1xuICAgIHRoaXMuZGVmYXVsdENvbXB1dGVUeXBlID0gcHJvcHMuZGVmYXVsdENvbXB1dGVUeXBlO1xuICAgIHRoaXMuYXJ0aWZhY3RNYW5hZ2VyID0gcHJvcHMuYXJ0aWZhY3RNYW5hZ2VyO1xuICAgIHRoaXMub3JnSWQgPSBwcm9wcy5vcmdJZDtcbiAgICB0aGlzLnBpcGVsaW5lU2NvcGUgPSBwcm9wcy5waXBlbGluZVNjb3BlO1xuICAgIHRoaXMuc3RlcE1hbmlmZXN0ID0gcHJvcHMuc3RlcE1hbmlmZXN0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIGEgc3RhZ2UncyBwbHVnaW4tYmFzZWQgc3RlcCBjb25maWdzIGludG8gQ29kZUJ1aWxkIHN0ZXBzXG4gICAqIGFuZCBhZGRzIHRoZW0gYXMgYSB3YXZlIHRvIHRoZSBwaXBlbGluZS5cbiAgICovXG4gIGFkZFN0YWdlKHBpcGVsaW5lOiBDb2RlUGlwZWxpbmUsIHN0YWdlOiBTdGFnZU9wdGlvbnMpOiB2b2lkIHtcbiAgICBjb25zdCBzdGFnZUFsaWFzID0gY29kZVBpcGVsaW5lU3RhZ2VOYW1lKHN0YWdlKTtcblxuICAgIGNvbnN0IHByZVN0ZXBzID0gc3RhZ2Uuc3RlcHNcbiAgICAgIC5maWx0ZXIocyA9PiAocy5wb3NpdGlvbiA/PyAncHJlJykgPT09ICdwcmUnKVxuICAgICAgLm1hcChzID0+IHRoaXMucmVzb2x2ZVN0ZXAocywgc3RhZ2Uuc3RhZ2VOYW1lLCBzdGFnZUFsaWFzKSk7XG4gICAgY29uc3QgcG9zdFN0ZXBzID0gc3RhZ2Uuc3RlcHNcbiAgICAgIC5maWx0ZXIocyA9PiBzLnBvc2l0aW9uID09PSAncG9zdCcpXG4gICAgICAubWFwKHMgPT4gdGhpcy5yZXNvbHZlU3RlcChzLCBzdGFnZS5zdGFnZU5hbWUsIHN0YWdlQWxpYXMpKTtcblxuICAgIHBpcGVsaW5lLmFkZFdhdmUoc3RhZ2VBbGlhcywge1xuICAgICAgLi4uKHByZVN0ZXBzLmxlbmd0aCA+IDAgJiYgeyBwcmU6IHByZVN0ZXBzIH0pLFxuICAgICAgLi4uKHBvc3RTdGVwcy5sZW5ndGggPiAwICYmIHsgcG9zdDogcG9zdFN0ZXBzIH0pLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlU3RlcChzdGVwQ29uZmlnOiBTdGFnZU9wdGlvbnNbJ3N0ZXBzJ11bbnVtYmVyXSwgc3RhZ2VOYW1lOiBzdHJpbmcsIHN0YWdlQWxpYXM6IHN0cmluZykge1xuICAgIGNvbnN0IHBsdWdpbiA9IHRoaXMucGx1Z2luTG9va3VwLnBsdWdpbihzdGVwQ29uZmlnLnBsdWdpbik7XG4gICAgLy8gQ29udHJhY3Q6IHRoZSBwaXBlbGluZSBtdXN0IHN1cHBseSB0aGUgcGx1Z2luJ3MgcmVxdWlyZWRcbiAgICAvLyBtZXRhZGF0YS92YXJzIHdpdGggdGhlIGRlY2xhcmVkIHR5cGVzLiBUaGUgQVBJIHJlZnVzZXMgc3VjaCBhIHBpcGVsaW5lXG4gICAgLy8gYXQgY3JlYXRlL3VwZGF0ZTsgdGhpcyBzdG9wcyBvbmUgdGhhdCByZWFjaGVkIHN5bnRoIGFub3RoZXIgd2F5LlxuICAgIGFzc2VydFBsdWdpbkNvbnRyYWN0KHBsdWdpbiwgY29udHJhY3RTY29wZUZyb21UZW1wbGF0ZVNjb3BlKHRoaXMucGlwZWxpbmVTY29wZSksXG4gICAgICBgJHtzdGFnZU5hbWV9LyR7cGx1Z2luU3RlcElkQWxpYXMoc3RlcENvbmZpZy5wbHVnaW4pfWApO1xuICAgIC8vIFBlci1zdGVwIHBsdWdpbiBjb25maWcgbGl2ZXMgb24gdGhlIHBsdWdpbiByZWZlcmVuY2UgKGBwbHVnaW4ubWV0YWRhdGFgIOKAlFxuICAgIC8vIGUuZy4gSkFWQV9WRVJTSU9OL0tPVExJTl9WRVJTSU9OL2NvbXB1dGV0eXBlIG92ZXJyaWRlcykuIHBsdWdpbkxvb2t1cC5wbHVnaW4oKVxuICAgIC8vIHJldHVybnMgdGhlIHJlc29sdmVkIENBVEFMT0cgcGx1Z2luIGFuZCBkcm9wcyB0aGUgcmVmZXJlbmNlIG1ldGFkYXRhIGluIHRoZVxuICAgIC8vIHByZS1yZXNvbHZlZCBwYXRoLCBzbyBtZXJnZSBpdCBoZXJlIHRvbyDigJQgb3RoZXJ3aXNlIHBlci1zdGVwIG92ZXJyaWRlcyBhcmVcbiAgICAvLyBzaWxlbnRseSBpZ25vcmVkIGFuZCB0aGUgYnVpbGQgZmFsbHMgYmFjayB0byBwbHVnaW4gZGVmYXVsdHMuXG4gICAgLy8gT3JkZXIgKGxhc3Qgd2lucyk6IGdsb2JhbCA8IHBsdWdpbi1yZWYgbWV0YWRhdGEgPCBzdGVwLWxldmVsIG1ldGFkYXRhLlxuICAgIGNvbnN0IHN0ZXBNZXRhZGF0YSA9IG1lcmdlKHRoaXMuZ2xvYmFsTWV0YWRhdGEsIHN0ZXBDb25maWcucGx1Z2luLm1ldGFkYXRhID8/IHt9LCBzdGVwQ29uZmlnLm1ldGFkYXRhID8/IHt9KTtcbiAgICAvLyBUV08gZGlmZmVyZW50IGlkZW50aXRpZXMsIGRlbGliZXJhdGVseSBrZXB0IGFwYXJ0OlxuICAgIC8vICAtIGBzdGVwSWRBbGlhc2AgbmFtZXMgdGhlIENESyBjb25zdHJ1Y3QuIEZvciBhbiB1bnF1YWxpZmllZCByZWZlcmVuY2VcbiAgICAvLyAgICBpdCBzdGF5cyBhcyBpdCBhbHdheXMgd2FzIChgYWxpYXMgPz8gbmFtZWApLCBiZWNhdXNlIGNoYW5naW5nIGl0XG4gICAgLy8gICAgcmVuYW1lcyB0aGUgQ29kZUJ1aWxkIHByb2plY3QncyBsb2dpY2FsIGlkIGFuZCBDbG91ZEZvcm1hdGlvbiB3b3VsZFxuICAgIC8vICAgIFJFUExBQ0UgZXZlcnkgdW5hbGlhc2VkIHN0ZXAncyBwcm9qZWN0IG9uIHRoZSBuZXh0IGRlcGxveSDigJQgZm9yIG5vXG4gICAgLy8gICAgYmVuZWZpdC4gQSBgcHVibGlzaGVyYCByZWZlcmVuY2UgYWRkcyB0aGUgcHVibGlzaGVyLlxuICAgIC8vICAtIGBwbHVnaW5BbGlhc2AgaXMgdGhlIEFSVElGQUNULUtFWSBzZWdtZW50IGFuZCBtdXN0IGZvbGxvdyB0aGUgb25lIHJ1bGVcbiAgICAvLyAgICBldmVyeSBrZXkgY29uc3VtZXIgdXNlcyAoYHBsdWdpbkFydGlmYWN0QWxpYXNgKS4gUmV1c2luZyB0aGUgY29uc3RydWN0XG4gICAgLy8gICAgdmFsdWUgd291bGQgcmVnaXN0ZXIgYOKApjpub2RlanMtYnVpbGQ6ZGlzdGAgZm9yIGFuIHVuYWxpYXNlZCBzdGVwIHdoaWxlXG4gICAgLy8gICAgdGhlIFVJIGFza3MgZm9yIGDigKY6bm9kZWpzLWJ1aWxkLWFsaWFzOmRpc3RgLCBhbmQgc3ludGggd291bGQgZmFpbC5cbiAgICBjb25zdCBzdGVwSWRBbGlhcyA9IHBsdWdpblN0ZXBJZEFsaWFzKHN0ZXBDb25maWcucGx1Z2luKTtcbiAgICBjb25zdCBwbHVnaW5BbGlhcyA9IHBsdWdpbkFydGlmYWN0QWxpYXMoc3RlcENvbmZpZy5wbHVnaW4pO1xuXG4gICAgaWYgKHN0ZXBDb25maWcuaW5wdXRBcnRpZmFjdCAmJiAhdGhpcy5hcnRpZmFjdE1hbmFnZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFN0ZXAgXCIke3N0ZXBJZEFsaWFzfVwiIHJlcXVpcmVzIGlucHV0QXJ0aWZhY3QgYnV0IG5vIGFydGlmYWN0TWFuYWdlciBpcyBjb25maWd1cmVkLmAsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoc3RlcENvbmZpZy5hZGRpdGlvbmFsSW5wdXRBcnRpZmFjdHM/Lmxlbmd0aCAmJiAhdGhpcy5hcnRpZmFjdE1hbmFnZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFN0ZXAgXCIke3N0ZXBJZEFsaWFzfVwiIHJlcXVpcmVzIGFkZGl0aW9uYWxJbnB1dEFydGlmYWN0cyBidXQgbm8gYXJ0aWZhY3RNYW5hZ2VyIGlzIGNvbmZpZ3VyZWQuYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXQgPSBzdGVwQ29uZmlnLmlucHV0QXJ0aWZhY3QgJiYgdGhpcy5hcnRpZmFjdE1hbmFnZXJcbiAgICAgID8gdGhpcy5hcnRpZmFjdE1hbmFnZXIuZ2V0T3V0cHV0KHN0ZXBDb25maWcuaW5wdXRBcnRpZmFjdClcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgYWRkaXRpb25hbElucHV0cyA9IHN0ZXBDb25maWcuYWRkaXRpb25hbElucHV0QXJ0aWZhY3RzPy5sZW5ndGggJiYgdGhpcy5hcnRpZmFjdE1hbmFnZXJcbiAgICAgID8gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBzdGVwQ29uZmlnLmFkZGl0aW9uYWxJbnB1dEFydGlmYWN0cy5tYXAoKHsgYXJ0aWZhY3QsIGRpcmVjdG9yeSB9KSA9PiBbXG4gICAgICAgICAgZGlyZWN0b3J5IHx8IGFydGlmYWN0Lm91dHB1dERpcmVjdG9yeSxcbiAgICAgICAgICB0aGlzLmFydGlmYWN0TWFuYWdlciEuZ2V0T3V0cHV0KGFydGlmYWN0KSxcbiAgICAgICAgXSksXG4gICAgICApXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IHN0ZXAgPSBjcmVhdGVDb2RlQnVpbGRTdGVwKHtcbiAgICAgIGlkOiB0aGlzLnVuaXF1ZUlkLmdlbmVyYXRlKGBzdGFnZToke3N0YWdlQWxpYXN9OiR7c3RlcElkQWxpYXN9YCksXG4gICAgICB1bmlxdWVJZDogdGhpcy51bmlxdWVJZCxcbiAgICAgIHBsdWdpbixcbiAgICAgIG1ldGFkYXRhOiBzdGVwTWV0YWRhdGEsXG4gICAgICBuZXR3b3JrOiBzdGVwQ29uZmlnLm5ldHdvcmssXG4gICAgICBzY29wZTogdGhpcy5zY29wZSxcbiAgICAgIGRlZmF1bHRDb21wdXRlVHlwZTogdGhpcy5kZWZhdWx0Q29tcHV0ZVR5cGUsXG4gICAgICBpbnB1dCxcbiAgICAgIGFkZGl0aW9uYWxJbnB1dHMsXG4gICAgICBhcnRpZmFjdE1hbmFnZXI6IHRoaXMuYXJ0aWZhY3RNYW5hZ2VyLFxuICAgICAgc3RhZ2VOYW1lLFxuICAgICAgc3RhZ2VBbGlhcyxcbiAgICAgIHBsdWdpbkFsaWFzLFxuICAgICAgcHJlSW5zdGFsbENvbW1hbmRzOiBzdGVwQ29uZmlnLnByZUluc3RhbGxDb21tYW5kcyxcbiAgICAgIHBvc3RJbnN0YWxsQ29tbWFuZHM6IHN0ZXBDb25maWcucG9zdEluc3RhbGxDb21tYW5kcyxcbiAgICAgIHByZUNvbW1hbmRzOiBzdGVwQ29uZmlnLnByZUNvbW1hbmRzLFxuICAgICAgcG9zdENvbW1hbmRzOiBzdGVwQ29uZmlnLnBvc3RDb21tYW5kcyxcbiAgICAgIGVudjogc3RlcENvbmZpZy5lbnYsXG4gICAgICB0aW1lb3V0OiBzdGVwQ29uZmlnLnRpbWVvdXQgPz8gcGx1Z2luLnRpbWVvdXQgPz8gdW5kZWZpbmVkLFxuICAgICAgLy8gQSBzY2FuL3NlY3VyaXR5LWNhdGVnb3J5IHBsdWdpbiBjYW4gbmV2ZXIgYmUgZG93bmdyYWRlZCBmcm9tICdmYWlsJyDigJQgc2VlIHJlc29sdmVGYWlsdXJlQmVoYXZpb3IuXG4gICAgICBmYWlsdXJlQmVoYXZpb3I6IHJlc29sdmVGYWlsdXJlQmVoYXZpb3IocGx1Z2luLmNhdGVnb3J5LCBzdGVwQ29uZmlnLmZhaWx1cmVCZWhhdmlvciA/PyBwbHVnaW4uZmFpbHVyZUJlaGF2aW9yKSxcbiAgICAgIG9yZ0lkOiB0aGlzLm9yZ0lkLFxuICAgICAgcGlwZWxpbmVTY29wZTogdGhpcy5waXBlbGluZVNjb3BlLFxuICAgIH0pO1xuICAgIHRoaXMuc3RlcE1hbmlmZXN0Py5yZWNvcmQoc3RlcCwgcGx1Z2luKTtcbiAgICByZXR1cm4gc3RlcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBhbmQgYWRkcyBtdWx0aXBsZSBzdGFnZXMgYXMgd2F2ZXMgdG8gdGhlIHBpcGVsaW5lLCBpbiBvcmRlci5cbiAgICovXG4gIGFkZFN0YWdlcyhwaXBlbGluZTogQ29kZVBpcGVsaW5lLCBzdGFnZXM6IFN0YWdlT3B0aW9uc1tdKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBzdGFnZSBvZiBzdGFnZXMpIHtcbiAgICAgIHRoaXMuYWRkU3RhZ2UocGlwZWxpbmUsIHN0YWdlKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,108 @@
1
+ /**
2
+ * The concrete shape a pipeline configuration will synthesize to — stages, the
3
+ * plugins each one runs, the deploys, and how its IAM role is obtained —
4
+ * WITHOUT importing `aws-cdk-lib` or synthesizing anything.
5
+ *
6
+ * Exists so a reviewer approves something concrete. `POST /pipelines/validate`
7
+ * and the create response previously answered only "valid/invalid": a reviewer
8
+ * asked to sign off on a pipeline had to read raw `props` JSON and work out what
9
+ * it would build, and an update gave no indication of what it CHANGED. This is
10
+ * the summary those responses carry, plus {@link diffStructure} for the update
11
+ * case.
12
+ *
13
+ * It is a projection of the config, not a CloudFormation diff: the API has no CDK
14
+ * and cannot know synthesized logical ids. What it does cover is what reviewers
15
+ * actually ask about — which stages exist, in what order, running which plugin
16
+ * versions, which stages deploy where, and whether the pipeline takes a
17
+ * caller-supplied IAM role.
18
+ */
19
+ import { type DeployAttribution, type DeployAttributionInput } from './deploy-attribution.js';
20
+ /** One plugin step, as a reviewer reads it. */
21
+ export interface PreviewStep {
22
+ /** `publisher/name` when a publisher is declared, else the bare name. */
23
+ readonly plugin: string;
24
+ /** Declared version or range; `latest` when unpinned. */
25
+ readonly version: string;
26
+ /** `pre` (before the deploy) or `post`. */
27
+ readonly position: 'pre' | 'post';
28
+ }
29
+ /** One stage of the pipeline, in declaration order. */
30
+ export interface PreviewStage {
31
+ /** The author's display name. */
32
+ readonly stageName: string;
33
+ /** The name CodePipeline will use — what its events report as `detail.stage`. */
34
+ readonly codePipelineStage: string;
35
+ /** Environment this stage deploys to, when it declares one. */
36
+ readonly environment?: string;
37
+ readonly steps: readonly PreviewStep[];
38
+ }
39
+ /**
40
+ * How the pipeline obtains its IAM role, and whether that is the caller's choice.
41
+ * `caller-supplied` is the reviewable case: the pipeline assumes a role the config
42
+ * names, so its permissions are whatever that role already holds.
43
+ */
44
+ export interface PreviewIam {
45
+ /** The declared `role.type`, or `default` when none is declared. */
46
+ readonly roleType: string;
47
+ /** True when the config names an existing role/ARN rather than taking the default. */
48
+ readonly callerSupplied: boolean;
49
+ /** The named role or ARN, when the config declares one. */
50
+ readonly roleRef?: string;
51
+ }
52
+ /** Everything the preview reports. */
53
+ export interface StructurePreview {
54
+ readonly stages: readonly PreviewStage[];
55
+ readonly deploys: readonly DeployAttribution[];
56
+ readonly iam: PreviewIam;
57
+ /** Distinct `plugin@version` across every stage — the supply-chain surface. */
58
+ readonly plugins: readonly string[];
59
+ }
60
+ /** The config fields this projection reads. */
61
+ interface PreviewInput extends DeployAttributionInput {
62
+ readonly stages?: readonly {
63
+ readonly stageName: string;
64
+ readonly alias?: string;
65
+ readonly environment?: string;
66
+ readonly steps?: readonly {
67
+ readonly plugin?: {
68
+ readonly name?: string;
69
+ readonly publisher?: string;
70
+ readonly filter?: {
71
+ readonly version?: string;
72
+ };
73
+ };
74
+ readonly position?: string;
75
+ }[];
76
+ }[];
77
+ readonly role?: {
78
+ readonly type?: string;
79
+ readonly options?: Record<string, unknown>;
80
+ };
81
+ }
82
+ /** Project a pipeline configuration into the structure it will produce. */
83
+ export declare function previewStructure(props: PreviewInput): StructurePreview;
84
+ /** What an update would change, relative to the stored configuration. */
85
+ export interface StructureDiff {
86
+ /** Stage display names added / removed / kept, in the new config's order. */
87
+ readonly stagesAdded: readonly string[];
88
+ readonly stagesRemoved: readonly string[];
89
+ /** Stages whose step list or environment changed. */
90
+ readonly stagesChanged: readonly string[];
91
+ /** `plugin@version` entries added / removed. */
92
+ readonly pluginsAdded: readonly string[];
93
+ readonly pluginsRemoved: readonly string[];
94
+ /** Set when the IAM role changes — the change most worth a second pair of eyes. */
95
+ readonly iamChanged?: {
96
+ readonly from: PreviewIam;
97
+ readonly to: PreviewIam;
98
+ };
99
+ /** True when nothing in the projection differs. */
100
+ readonly unchanged: boolean;
101
+ }
102
+ /**
103
+ * Diff two projections. Keyed on the author's `stageName`, because that is what a
104
+ * reviewer recognizes — a renamed stage reads as one removed and one added, which
105
+ * is the honest summary (CodePipeline replaces the stage either way).
106
+ */
107
+ export declare function diffStructure(before: StructurePreview, after: StructurePreview): StructureDiff;
108
+ export {};
@@ -0,0 +1,107 @@
1
+ // Copyright 2026 Pipeline Builder Contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ /**
4
+ * The concrete shape a pipeline configuration will synthesize to — stages, the
5
+ * plugins each one runs, the deploys, and how its IAM role is obtained —
6
+ * WITHOUT importing `aws-cdk-lib` or synthesizing anything.
7
+ *
8
+ * Exists so a reviewer approves something concrete. `POST /pipelines/validate`
9
+ * and the create response previously answered only "valid/invalid": a reviewer
10
+ * asked to sign off on a pipeline had to read raw `props` JSON and work out what
11
+ * it would build, and an update gave no indication of what it CHANGED. This is
12
+ * the summary those responses carry, plus {@link diffStructure} for the update
13
+ * case.
14
+ *
15
+ * It is a projection of the config, not a CloudFormation diff: the API has no CDK
16
+ * and cannot know synthesized logical ids. What it does cover is what reviewers
17
+ * actually ask about — which stages exist, in what order, running which plugin
18
+ * versions, which stages deploy where, and whether the pipeline takes a
19
+ * caller-supplied IAM role.
20
+ */
21
+ import { codePipelineStageName, describeDeployAttribution } from './deploy-attribution.js';
22
+ /** `publisher/name` when scoped, else the bare name. */
23
+ function pluginRef(plugin) {
24
+ const name = plugin?.name ?? '(unnamed)';
25
+ return plugin?.publisher ? `${plugin.publisher}/${name}` : name;
26
+ }
27
+ /**
28
+ * How the role is obtained. `roleArn`/`roleName`/`oidcRole` all mean the pipeline
29
+ * assumes something the config names; only the absent/default case is the
30
+ * platform's own least-privilege role.
31
+ */
32
+ function describeIam(role) {
33
+ const roleType = role?.type ?? 'default';
34
+ const opts = role?.options ?? {};
35
+ const ref = (opts.roleArn ?? opts.roleName ?? opts.roleArnToAssume);
36
+ return {
37
+ roleType,
38
+ callerSupplied: roleType === 'roleArn' || roleType === 'roleName' || roleType === 'oidcRole',
39
+ ...(ref ? { roleRef: ref } : {}),
40
+ };
41
+ }
42
+ /** Project a pipeline configuration into the structure it will produce. */
43
+ export function previewStructure(props) {
44
+ const stages = (props.stages ?? []).map((s) => ({
45
+ stageName: s.stageName,
46
+ codePipelineStage: codePipelineStageName(s),
47
+ ...(s.environment ? { environment: s.environment } : {}),
48
+ steps: (s.steps ?? []).map((step) => ({
49
+ plugin: pluginRef(step.plugin),
50
+ // An unpinned plugin resolves to whatever is newest AT SYNTH, which is the
51
+ // single most review-worthy fact about a step — say `latest` rather than
52
+ // omitting it, so a reviewer sees the difference from a pinned version.
53
+ version: step.plugin?.filter?.version ?? 'latest',
54
+ position: step.position === 'post' ? 'post' : 'pre',
55
+ })),
56
+ }));
57
+ const plugins = [...new Set(stages.flatMap((s) => s.steps.map((st) => `${st.plugin}@${st.version}`)))].sort();
58
+ return {
59
+ stages,
60
+ deploys: describeDeployAttribution(props).deploys,
61
+ iam: describeIam(props.role),
62
+ plugins,
63
+ };
64
+ }
65
+ /** A stage's comparable identity: its steps in order, plus its environment. */
66
+ function stageFingerprint(stage) {
67
+ return JSON.stringify([
68
+ stage.environment ?? null,
69
+ stage.codePipelineStage,
70
+ stage.steps.map((s) => [s.plugin, s.version, s.position]),
71
+ ]);
72
+ }
73
+ /**
74
+ * Diff two projections. Keyed on the author's `stageName`, because that is what a
75
+ * reviewer recognizes — a renamed stage reads as one removed and one added, which
76
+ * is the honest summary (CodePipeline replaces the stage either way).
77
+ */
78
+ export function diffStructure(before, after) {
79
+ const beforeByName = new Map(before.stages.map((s) => [s.stageName, s]));
80
+ const afterByName = new Map(after.stages.map((s) => [s.stageName, s]));
81
+ const stagesAdded = after.stages.filter((s) => !beforeByName.has(s.stageName)).map((s) => s.stageName);
82
+ const stagesRemoved = before.stages.filter((s) => !afterByName.has(s.stageName)).map((s) => s.stageName);
83
+ const stagesChanged = after.stages
84
+ .filter((s) => {
85
+ const prev = beforeByName.get(s.stageName);
86
+ return prev !== undefined && stageFingerprint(prev) !== stageFingerprint(s);
87
+ })
88
+ .map((s) => s.stageName);
89
+ const beforePlugins = new Set(before.plugins);
90
+ const afterPlugins = new Set(after.plugins);
91
+ const pluginsAdded = after.plugins.filter((p) => !beforePlugins.has(p));
92
+ const pluginsRemoved = before.plugins.filter((p) => !afterPlugins.has(p));
93
+ const iamChanged = JSON.stringify(before.iam) !== JSON.stringify(after.iam)
94
+ ? { from: before.iam, to: after.iam }
95
+ : undefined;
96
+ return {
97
+ stagesAdded,
98
+ stagesRemoved,
99
+ stagesChanged,
100
+ pluginsAdded,
101
+ pluginsRemoved,
102
+ ...(iamChanged ? { iamChanged } : {}),
103
+ unchanged: stagesAdded.length === 0 && stagesRemoved.length === 0 && stagesChanged.length === 0
104
+ && pluginsAdded.length === 0 && pluginsRemoved.length === 0 && iamChanged === undefined,
105
+ };
106
+ }
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RydWN0dXJlLXByZXZpZXcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGlwZWxpbmUvc3RydWN0dXJlLXByZXZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFFSCxPQUFPLEVBQUUscUJBQXFCLEVBQUUseUJBQXlCLEVBQXVELE1BQU0seUJBQXlCLENBQUM7QUE0RGhKLHdEQUF3RDtBQUN4RCxTQUFTLFNBQVMsQ0FBQyxNQUF5RDtJQUMxRSxNQUFNLElBQUksR0FBRyxNQUFNLEVBQUUsSUFBSSxJQUFJLFdBQVcsQ0FBQztJQUN6QyxPQUFPLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLFNBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ2xFLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxXQUFXLENBQUMsSUFBMEI7SUFDN0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxFQUFFLElBQUksSUFBSSxTQUFTLENBQUM7SUFDekMsTUFBTSxJQUFJLEdBQUcsSUFBSSxFQUFFLE9BQU8sSUFBSSxFQUFFLENBQUM7SUFDakMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBdUIsQ0FBQztJQUMxRixPQUFPO1FBQ0wsUUFBUTtRQUNSLGNBQWMsRUFBRSxRQUFRLEtBQUssU0FBUyxJQUFJLFFBQVEsS0FBSyxVQUFVLElBQUksUUFBUSxLQUFLLFVBQVU7UUFDNUYsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUNqQyxDQUFDO0FBQ0osQ0FBQztBQUVELDJFQUEyRTtBQUMzRSxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsS0FBbUI7SUFDbEQsTUFBTSxNQUFNLEdBQW1CLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDOUQsU0FBUyxFQUFFLENBQUMsQ0FBQyxTQUFTO1FBQ3RCLGlCQUFpQixFQUFFLHFCQUFxQixDQUFDLENBQUMsQ0FBQztRQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDeEQsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDcEMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQzlCLDJFQUEyRTtZQUMzRSx5RUFBeUU7WUFDekUsd0VBQXdFO1lBQ3hFLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLElBQUksUUFBUTtZQUNqRCxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSztTQUNwRCxDQUFDLENBQUM7S0FDSixDQUFDLENBQUMsQ0FBQztJQUVKLE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FDekIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUN6RSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFVixPQUFPO1FBQ0wsTUFBTTtRQUNOLE9BQU8sRUFBRSx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPO1FBQ2pELEdBQUcsRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztRQUM1QixPQUFPO0tBQ1IsQ0FBQztBQUNKLENBQUM7QUFrQkQsK0VBQStFO0FBQy9FLFNBQVMsZ0JBQWdCLENBQUMsS0FBbUI7SUFDM0MsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ3BCLEtBQUssQ0FBQyxXQUFXLElBQUksSUFBSTtRQUN6QixLQUFLLENBQUMsaUJBQWlCO1FBQ3ZCLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDMUQsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUFDLE1BQXdCLEVBQUUsS0FBdUI7SUFDN0UsTUFBTSxZQUFZLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekUsTUFBTSxXQUFXLEdBQUcsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFdkUsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN2RyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3pHLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxNQUFNO1NBQy9CLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQ1osTUFBTSxJQUFJLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0MsT0FBTyxJQUFJLEtBQUssU0FBUyxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlFLENBQUMsQ0FBQztTQUNELEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRTNCLE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QyxNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUMsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUUxRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7UUFDekUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUU7UUFDckMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUVkLE9BQU87UUFDTCxXQUFXO1FBQ1gsYUFBYTtRQUNiLGFBQWE7UUFDYixZQUFZO1FBQ1osY0FBYztRQUNkLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNyQyxTQUFTLEVBQUUsV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksYUFBYSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksYUFBYSxDQUFDLE1BQU0sS0FBSyxDQUFDO2VBQzFGLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLGNBQWMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLFVBQVUsS0FBSyxTQUFTO0tBQzFGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogVGhlIGNvbmNyZXRlIHNoYXBlIGEgcGlwZWxpbmUgY29uZmlndXJhdGlvbiB3aWxsIHN5bnRoZXNpemUgdG8g4oCUIHN0YWdlcywgdGhlXG4gKiBwbHVnaW5zIGVhY2ggb25lIHJ1bnMsIHRoZSBkZXBsb3lzLCBhbmQgaG93IGl0cyBJQU0gcm9sZSBpcyBvYnRhaW5lZCDigJRcbiAqIFdJVEhPVVQgaW1wb3J0aW5nIGBhd3MtY2RrLWxpYmAgb3Igc3ludGhlc2l6aW5nIGFueXRoaW5nLlxuICpcbiAqIEV4aXN0cyBzbyBhIHJldmlld2VyIGFwcHJvdmVzIHNvbWV0aGluZyBjb25jcmV0ZS4gYFBPU1QgL3BpcGVsaW5lcy92YWxpZGF0ZWBcbiAqIGFuZCB0aGUgY3JlYXRlIHJlc3BvbnNlIHByZXZpb3VzbHkgYW5zd2VyZWQgb25seSBcInZhbGlkL2ludmFsaWRcIjogYSByZXZpZXdlclxuICogYXNrZWQgdG8gc2lnbiBvZmYgb24gYSBwaXBlbGluZSBoYWQgdG8gcmVhZCByYXcgYHByb3BzYCBKU09OIGFuZCB3b3JrIG91dCB3aGF0XG4gKiBpdCB3b3VsZCBidWlsZCwgYW5kIGFuIHVwZGF0ZSBnYXZlIG5vIGluZGljYXRpb24gb2Ygd2hhdCBpdCBDSEFOR0VELiBUaGlzIGlzXG4gKiB0aGUgc3VtbWFyeSB0aG9zZSByZXNwb25zZXMgY2FycnksIHBsdXMge0BsaW5rIGRpZmZTdHJ1Y3R1cmV9IGZvciB0aGUgdXBkYXRlXG4gKiBjYXNlLlxuICpcbiAqIEl0IGlzIGEgcHJvamVjdGlvbiBvZiB0aGUgY29uZmlnLCBub3QgYSBDbG91ZEZvcm1hdGlvbiBkaWZmOiB0aGUgQVBJIGhhcyBubyBDREtcbiAqIGFuZCBjYW5ub3Qga25vdyBzeW50aGVzaXplZCBsb2dpY2FsIGlkcy4gV2hhdCBpdCBkb2VzIGNvdmVyIGlzIHdoYXQgcmV2aWV3ZXJzXG4gKiBhY3R1YWxseSBhc2sgYWJvdXQg4oCUIHdoaWNoIHN0YWdlcyBleGlzdCwgaW4gd2hhdCBvcmRlciwgcnVubmluZyB3aGljaCBwbHVnaW5cbiAqIHZlcnNpb25zLCB3aGljaCBzdGFnZXMgZGVwbG95IHdoZXJlLCBhbmQgd2hldGhlciB0aGUgcGlwZWxpbmUgdGFrZXMgYVxuICogY2FsbGVyLXN1cHBsaWVkIElBTSByb2xlLlxuICovXG5cbmltcG9ydCB7IGNvZGVQaXBlbGluZVN0YWdlTmFtZSwgZGVzY3JpYmVEZXBsb3lBdHRyaWJ1dGlvbiwgdHlwZSBEZXBsb3lBdHRyaWJ1dGlvbiwgdHlwZSBEZXBsb3lBdHRyaWJ1dGlvbklucHV0IH0gZnJvbSAnLi9kZXBsb3ktYXR0cmlidXRpb24uanMnO1xuXG4vKiogT25lIHBsdWdpbiBzdGVwLCBhcyBhIHJldmlld2VyIHJlYWRzIGl0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmV2aWV3U3RlcCB7XG4gIC8qKiBgcHVibGlzaGVyL25hbWVgIHdoZW4gYSBwdWJsaXNoZXIgaXMgZGVjbGFyZWQsIGVsc2UgdGhlIGJhcmUgbmFtZS4gKi9cbiAgcmVhZG9ubHkgcGx1Z2luOiBzdHJpbmc7XG4gIC8qKiBEZWNsYXJlZCB2ZXJzaW9uIG9yIHJhbmdlOyBgbGF0ZXN0YCB3aGVuIHVucGlubmVkLiAqL1xuICByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmc7XG4gIC8qKiBgcHJlYCAoYmVmb3JlIHRoZSBkZXBsb3kpIG9yIGBwb3N0YC4gKi9cbiAgcmVhZG9ubHkgcG9zaXRpb246ICdwcmUnIHwgJ3Bvc3QnO1xufVxuXG4vKiogT25lIHN0YWdlIG9mIHRoZSBwaXBlbGluZSwgaW4gZGVjbGFyYXRpb24gb3JkZXIuICovXG5leHBvcnQgaW50ZXJmYWNlIFByZXZpZXdTdGFnZSB7XG4gIC8qKiBUaGUgYXV0aG9yJ3MgZGlzcGxheSBuYW1lLiAqL1xuICByZWFkb25seSBzdGFnZU5hbWU6IHN0cmluZztcbiAgLyoqIFRoZSBuYW1lIENvZGVQaXBlbGluZSB3aWxsIHVzZSDigJQgd2hhdCBpdHMgZXZlbnRzIHJlcG9ydCBhcyBgZGV0YWlsLnN0YWdlYC4gKi9cbiAgcmVhZG9ubHkgY29kZVBpcGVsaW5lU3RhZ2U6IHN0cmluZztcbiAgLyoqIEVudmlyb25tZW50IHRoaXMgc3RhZ2UgZGVwbG95cyB0bywgd2hlbiBpdCBkZWNsYXJlcyBvbmUuICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50Pzogc3RyaW5nO1xuICByZWFkb25seSBzdGVwczogcmVhZG9ubHkgUHJldmlld1N0ZXBbXTtcbn1cblxuLyoqXG4gKiBIb3cgdGhlIHBpcGVsaW5lIG9idGFpbnMgaXRzIElBTSByb2xlLCBhbmQgd2hldGhlciB0aGF0IGlzIHRoZSBjYWxsZXIncyBjaG9pY2UuXG4gKiBgY2FsbGVyLXN1cHBsaWVkYCBpcyB0aGUgcmV2aWV3YWJsZSBjYXNlOiB0aGUgcGlwZWxpbmUgYXNzdW1lcyBhIHJvbGUgdGhlIGNvbmZpZ1xuICogbmFtZXMsIHNvIGl0cyBwZXJtaXNzaW9ucyBhcmUgd2hhdGV2ZXIgdGhhdCByb2xlIGFscmVhZHkgaG9sZHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJldmlld0lhbSB7XG4gIC8qKiBUaGUgZGVjbGFyZWQgYHJvbGUudHlwZWAsIG9yIGBkZWZhdWx0YCB3aGVuIG5vbmUgaXMgZGVjbGFyZWQuICovXG4gIHJlYWRvbmx5IHJvbGVUeXBlOiBzdHJpbmc7XG4gIC8qKiBUcnVlIHdoZW4gdGhlIGNvbmZpZyBuYW1lcyBhbiBleGlzdGluZyByb2xlL0FSTiByYXRoZXIgdGhhbiB0YWtpbmcgdGhlIGRlZmF1bHQuICovXG4gIHJlYWRvbmx5IGNhbGxlclN1cHBsaWVkOiBib29sZWFuO1xuICAvKiogVGhlIG5hbWVkIHJvbGUgb3IgQVJOLCB3aGVuIHRoZSBjb25maWcgZGVjbGFyZXMgb25lLiAqL1xuICByZWFkb25seSByb2xlUmVmPzogc3RyaW5nO1xufVxuXG4vKiogRXZlcnl0aGluZyB0aGUgcHJldmlldyByZXBvcnRzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJ1Y3R1cmVQcmV2aWV3IHtcbiAgcmVhZG9ubHkgc3RhZ2VzOiByZWFkb25seSBQcmV2aWV3U3RhZ2VbXTtcbiAgcmVhZG9ubHkgZGVwbG95czogcmVhZG9ubHkgRGVwbG95QXR0cmlidXRpb25bXTtcbiAgcmVhZG9ubHkgaWFtOiBQcmV2aWV3SWFtO1xuICAvKiogRGlzdGluY3QgYHBsdWdpbkB2ZXJzaW9uYCBhY3Jvc3MgZXZlcnkgc3RhZ2Ug4oCUIHRoZSBzdXBwbHktY2hhaW4gc3VyZmFjZS4gKi9cbiAgcmVhZG9ubHkgcGx1Z2luczogcmVhZG9ubHkgc3RyaW5nW107XG59XG5cbi8qKiBUaGUgY29uZmlnIGZpZWxkcyB0aGlzIHByb2plY3Rpb24gcmVhZHMuICovXG5pbnRlcmZhY2UgUHJldmlld0lucHV0IGV4dGVuZHMgRGVwbG95QXR0cmlidXRpb25JbnB1dCB7XG4gIHJlYWRvbmx5IHN0YWdlcz86IHJlYWRvbmx5IHtcbiAgICByZWFkb25seSBzdGFnZU5hbWU6IHN0cmluZztcbiAgICByZWFkb25seSBhbGlhcz86IHN0cmluZztcbiAgICByZWFkb25seSBlbnZpcm9ubWVudD86IHN0cmluZztcbiAgICByZWFkb25seSBzdGVwcz86IHJlYWRvbmx5IHtcbiAgICAgIHJlYWRvbmx5IHBsdWdpbj86IHsgcmVhZG9ubHkgbmFtZT86IHN0cmluZzsgcmVhZG9ubHkgcHVibGlzaGVyPzogc3RyaW5nOyByZWFkb25seSBmaWx0ZXI/OiB7IHJlYWRvbmx5IHZlcnNpb24/OiBzdHJpbmcgfSB9O1xuICAgICAgcmVhZG9ubHkgcG9zaXRpb24/OiBzdHJpbmc7XG4gICAgfVtdO1xuICB9W107XG4gIHJlYWRvbmx5IHJvbGU/OiB7IHJlYWRvbmx5IHR5cGU/OiBzdHJpbmc7IHJlYWRvbmx5IG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9O1xufVxuXG4vKiogYHB1Ymxpc2hlci9uYW1lYCB3aGVuIHNjb3BlZCwgZWxzZSB0aGUgYmFyZSBuYW1lLiAqL1xuZnVuY3Rpb24gcGx1Z2luUmVmKHBsdWdpbjogeyBuYW1lPzogc3RyaW5nOyBwdWJsaXNoZXI/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gIGNvbnN0IG5hbWUgPSBwbHVnaW4/Lm5hbWUgPz8gJyh1bm5hbWVkKSc7XG4gIHJldHVybiBwbHVnaW4/LnB1Ymxpc2hlciA/IGAke3BsdWdpbi5wdWJsaXNoZXJ9LyR7bmFtZX1gIDogbmFtZTtcbn1cblxuLyoqXG4gKiBIb3cgdGhlIHJvbGUgaXMgb2J0YWluZWQuIGByb2xlQXJuYC9gcm9sZU5hbWVgL2BvaWRjUm9sZWAgYWxsIG1lYW4gdGhlIHBpcGVsaW5lXG4gKiBhc3N1bWVzIHNvbWV0aGluZyB0aGUgY29uZmlnIG5hbWVzOyBvbmx5IHRoZSBhYnNlbnQvZGVmYXVsdCBjYXNlIGlzIHRoZVxuICogcGxhdGZvcm0ncyBvd24gbGVhc3QtcHJpdmlsZWdlIHJvbGUuXG4gKi9cbmZ1bmN0aW9uIGRlc2NyaWJlSWFtKHJvbGU6IFByZXZpZXdJbnB1dFsncm9sZSddKTogUHJldmlld0lhbSB7XG4gIGNvbnN0IHJvbGVUeXBlID0gcm9sZT8udHlwZSA/PyAnZGVmYXVsdCc7XG4gIGNvbnN0IG9wdHMgPSByb2xlPy5vcHRpb25zID8/IHt9O1xuICBjb25zdCByZWYgPSAob3B0cy5yb2xlQXJuID8/IG9wdHMucm9sZU5hbWUgPz8gb3B0cy5yb2xlQXJuVG9Bc3N1bWUpIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcmV0dXJuIHtcbiAgICByb2xlVHlwZSxcbiAgICBjYWxsZXJTdXBwbGllZDogcm9sZVR5cGUgPT09ICdyb2xlQXJuJyB8fCByb2xlVHlwZSA9PT0gJ3JvbGVOYW1lJyB8fCByb2xlVHlwZSA9PT0gJ29pZGNSb2xlJyxcbiAgICAuLi4ocmVmID8geyByb2xlUmVmOiByZWYgfSA6IHt9KSxcbiAgfTtcbn1cblxuLyoqIFByb2plY3QgYSBwaXBlbGluZSBjb25maWd1cmF0aW9uIGludG8gdGhlIHN0cnVjdHVyZSBpdCB3aWxsIHByb2R1Y2UuICovXG5leHBvcnQgZnVuY3Rpb24gcHJldmlld1N0cnVjdHVyZShwcm9wczogUHJldmlld0lucHV0KTogU3RydWN0dXJlUHJldmlldyB7XG4gIGNvbnN0IHN0YWdlczogUHJldmlld1N0YWdlW10gPSAocHJvcHMuc3RhZ2VzID8/IFtdKS5tYXAoKHMpID0+ICh7XG4gICAgc3RhZ2VOYW1lOiBzLnN0YWdlTmFtZSxcbiAgICBjb2RlUGlwZWxpbmVTdGFnZTogY29kZVBpcGVsaW5lU3RhZ2VOYW1lKHMpLFxuICAgIC4uLihzLmVudmlyb25tZW50ID8geyBlbnZpcm9ubWVudDogcy5lbnZpcm9ubWVudCB9IDoge30pLFxuICAgIHN0ZXBzOiAocy5zdGVwcyA/PyBbXSkubWFwKChzdGVwKSA9PiAoe1xuICAgICAgcGx1Z2luOiBwbHVnaW5SZWYoc3RlcC5wbHVnaW4pLFxuICAgICAgLy8gQW4gdW5waW5uZWQgcGx1Z2luIHJlc29sdmVzIHRvIHdoYXRldmVyIGlzIG5ld2VzdCBBVCBTWU5USCwgd2hpY2ggaXMgdGhlXG4gICAgICAvLyBzaW5nbGUgbW9zdCByZXZpZXctd29ydGh5IGZhY3QgYWJvdXQgYSBzdGVwIOKAlCBzYXkgYGxhdGVzdGAgcmF0aGVyIHRoYW5cbiAgICAgIC8vIG9taXR0aW5nIGl0LCBzbyBhIHJldmlld2VyIHNlZXMgdGhlIGRpZmZlcmVuY2UgZnJvbSBhIHBpbm5lZCB2ZXJzaW9uLlxuICAgICAgdmVyc2lvbjogc3RlcC5wbHVnaW4/LmZpbHRlcj8udmVyc2lvbiA/PyAnbGF0ZXN0JyxcbiAgICAgIHBvc2l0aW9uOiBzdGVwLnBvc2l0aW9uID09PSAncG9zdCcgPyAncG9zdCcgOiAncHJlJyxcbiAgICB9KSksXG4gIH0pKTtcblxuICBjb25zdCBwbHVnaW5zID0gWy4uLm5ldyBTZXQoXG4gICAgc3RhZ2VzLmZsYXRNYXAoKHMpID0+IHMuc3RlcHMubWFwKChzdCkgPT4gYCR7c3QucGx1Z2lufUAke3N0LnZlcnNpb259YCkpLFxuICApXS5zb3J0KCk7XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFnZXMsXG4gICAgZGVwbG95czogZGVzY3JpYmVEZXBsb3lBdHRyaWJ1dGlvbihwcm9wcykuZGVwbG95cyxcbiAgICBpYW06IGRlc2NyaWJlSWFtKHByb3BzLnJvbGUpLFxuICAgIHBsdWdpbnMsXG4gIH07XG59XG5cbi8qKiBXaGF0IGFuIHVwZGF0ZSB3b3VsZCBjaGFuZ2UsIHJlbGF0aXZlIHRvIHRoZSBzdG9yZWQgY29uZmlndXJhdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RydWN0dXJlRGlmZiB7XG4gIC8qKiBTdGFnZSBkaXNwbGF5IG5hbWVzIGFkZGVkIC8gcmVtb3ZlZCAvIGtlcHQsIGluIHRoZSBuZXcgY29uZmlnJ3Mgb3JkZXIuICovXG4gIHJlYWRvbmx5IHN0YWdlc0FkZGVkOiByZWFkb25seSBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgc3RhZ2VzUmVtb3ZlZDogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKiBTdGFnZXMgd2hvc2Ugc3RlcCBsaXN0IG9yIGVudmlyb25tZW50IGNoYW5nZWQuICovXG4gIHJlYWRvbmx5IHN0YWdlc0NoYW5nZWQ6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKiogYHBsdWdpbkB2ZXJzaW9uYCBlbnRyaWVzIGFkZGVkIC8gcmVtb3ZlZC4gKi9cbiAgcmVhZG9ubHkgcGx1Z2luc0FkZGVkOiByZWFkb25seSBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgcGx1Z2luc1JlbW92ZWQ6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKiogU2V0IHdoZW4gdGhlIElBTSByb2xlIGNoYW5nZXMg4oCUIHRoZSBjaGFuZ2UgbW9zdCB3b3J0aCBhIHNlY29uZCBwYWlyIG9mIGV5ZXMuICovXG4gIHJlYWRvbmx5IGlhbUNoYW5nZWQ/OiB7IHJlYWRvbmx5IGZyb206IFByZXZpZXdJYW07IHJlYWRvbmx5IHRvOiBQcmV2aWV3SWFtIH07XG4gIC8qKiBUcnVlIHdoZW4gbm90aGluZyBpbiB0aGUgcHJvamVjdGlvbiBkaWZmZXJzLiAqL1xuICByZWFkb25seSB1bmNoYW5nZWQ6IGJvb2xlYW47XG59XG5cbi8qKiBBIHN0YWdlJ3MgY29tcGFyYWJsZSBpZGVudGl0eTogaXRzIHN0ZXBzIGluIG9yZGVyLCBwbHVzIGl0cyBlbnZpcm9ubWVudC4gKi9cbmZ1bmN0aW9uIHN0YWdlRmluZ2VycHJpbnQoc3RhZ2U6IFByZXZpZXdTdGFnZSk6IHN0cmluZyB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShbXG4gICAgc3RhZ2UuZW52aXJvbm1lbnQgPz8gbnVsbCxcbiAgICBzdGFnZS5jb2RlUGlwZWxpbmVTdGFnZSxcbiAgICBzdGFnZS5zdGVwcy5tYXAoKHMpID0+IFtzLnBsdWdpbiwgcy52ZXJzaW9uLCBzLnBvc2l0aW9uXSksXG4gIF0pO1xufVxuXG4vKipcbiAqIERpZmYgdHdvIHByb2plY3Rpb25zLiBLZXllZCBvbiB0aGUgYXV0aG9yJ3MgYHN0YWdlTmFtZWAsIGJlY2F1c2UgdGhhdCBpcyB3aGF0IGFcbiAqIHJldmlld2VyIHJlY29nbml6ZXMg4oCUIGEgcmVuYW1lZCBzdGFnZSByZWFkcyBhcyBvbmUgcmVtb3ZlZCBhbmQgb25lIGFkZGVkLCB3aGljaFxuICogaXMgdGhlIGhvbmVzdCBzdW1tYXJ5IChDb2RlUGlwZWxpbmUgcmVwbGFjZXMgdGhlIHN0YWdlIGVpdGhlciB3YXkpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlmZlN0cnVjdHVyZShiZWZvcmU6IFN0cnVjdHVyZVByZXZpZXcsIGFmdGVyOiBTdHJ1Y3R1cmVQcmV2aWV3KTogU3RydWN0dXJlRGlmZiB7XG4gIGNvbnN0IGJlZm9yZUJ5TmFtZSA9IG5ldyBNYXAoYmVmb3JlLnN0YWdlcy5tYXAoKHMpID0+IFtzLnN0YWdlTmFtZSwgc10pKTtcbiAgY29uc3QgYWZ0ZXJCeU5hbWUgPSBuZXcgTWFwKGFmdGVyLnN0YWdlcy5tYXAoKHMpID0+IFtzLnN0YWdlTmFtZSwgc10pKTtcblxuICBjb25zdCBzdGFnZXNBZGRlZCA9IGFmdGVyLnN0YWdlcy5maWx0ZXIoKHMpID0+ICFiZWZvcmVCeU5hbWUuaGFzKHMuc3RhZ2VOYW1lKSkubWFwKChzKSA9PiBzLnN0YWdlTmFtZSk7XG4gIGNvbnN0IHN0YWdlc1JlbW92ZWQgPSBiZWZvcmUuc3RhZ2VzLmZpbHRlcigocykgPT4gIWFmdGVyQnlOYW1lLmhhcyhzLnN0YWdlTmFtZSkpLm1hcCgocykgPT4gcy5zdGFnZU5hbWUpO1xuICBjb25zdCBzdGFnZXNDaGFuZ2VkID0gYWZ0ZXIuc3RhZ2VzXG4gICAgLmZpbHRlcigocykgPT4ge1xuICAgICAgY29uc3QgcHJldiA9IGJlZm9yZUJ5TmFtZS5nZXQocy5zdGFnZU5hbWUpO1xuICAgICAgcmV0dXJuIHByZXYgIT09IHVuZGVmaW5lZCAmJiBzdGFnZUZpbmdlcnByaW50KHByZXYpICE9PSBzdGFnZUZpbmdlcnByaW50KHMpO1xuICAgIH0pXG4gICAgLm1hcCgocykgPT4gcy5zdGFnZU5hbWUpO1xuXG4gIGNvbnN0IGJlZm9yZVBsdWdpbnMgPSBuZXcgU2V0KGJlZm9yZS5wbHVnaW5zKTtcbiAgY29uc3QgYWZ0ZXJQbHVnaW5zID0gbmV3IFNldChhZnRlci5wbHVnaW5zKTtcbiAgY29uc3QgcGx1Z2luc0FkZGVkID0gYWZ0ZXIucGx1Z2lucy5maWx0ZXIoKHApID0+ICFiZWZvcmVQbHVnaW5zLmhhcyhwKSk7XG4gIGNvbnN0IHBsdWdpbnNSZW1vdmVkID0gYmVmb3JlLnBsdWdpbnMuZmlsdGVyKChwKSA9PiAhYWZ0ZXJQbHVnaW5zLmhhcyhwKSk7XG5cbiAgY29uc3QgaWFtQ2hhbmdlZCA9IEpTT04uc3RyaW5naWZ5KGJlZm9yZS5pYW0pICE9PSBKU09OLnN0cmluZ2lmeShhZnRlci5pYW0pXG4gICAgPyB7IGZyb206IGJlZm9yZS5pYW0sIHRvOiBhZnRlci5pYW0gfVxuICAgIDogdW5kZWZpbmVkO1xuXG4gIHJldHVybiB7XG4gICAgc3RhZ2VzQWRkZWQsXG4gICAgc3RhZ2VzUmVtb3ZlZCxcbiAgICBzdGFnZXNDaGFuZ2VkLFxuICAgIHBsdWdpbnNBZGRlZCxcbiAgICBwbHVnaW5zUmVtb3ZlZCxcbiAgICAuLi4oaWFtQ2hhbmdlZCA/IHsgaWFtQ2hhbmdlZCB9IDoge30pLFxuICAgIHVuY2hhbmdlZDogc3RhZ2VzQWRkZWQubGVuZ3RoID09PSAwICYmIHN0YWdlc1JlbW92ZWQubGVuZ3RoID09PSAwICYmIHN0YWdlc0NoYW5nZWQubGVuZ3RoID09PSAwXG4gICAgICAmJiBwbHVnaW5zQWRkZWQubGVuZ3RoID09PSAwICYmIHBsdWdpbnNSZW1vdmVkLmxlbmd0aCA9PT0gMCAmJiBpYW1DaGFuZ2VkID09PSB1bmRlZmluZWQsXG4gIH07XG59XG4iXX0=
@@ -4,6 +4,7 @@
4
4
  ".": {
5
5
  "allowedScopeRoots": "function",
6
6
  "checkPluginContract": "function",
7
+ "codePipelineStageName": "function",
7
8
  "collectPluginSteps": "function",
8
9
  "ComputeType": "value",
9
10
  "Config": "class",
@@ -11,13 +12,17 @@
11
12
  "CoreConstants": "class",
12
13
  "createServiceClient": "function",
13
14
  "dependencies": "function",
15
+ "describeDeployAttribution": "function",
14
16
  "detectCycles": "function",
17
+ "diffStructure": "function",
15
18
  "extractMetadataEnv": "function",
16
19
  "formatTemplateDraftProblems": "function",
17
20
  "hasTemplate": "function",
18
21
  "isContractValueOfType": "function",
22
+ "isReservedTagKey": "function",
19
23
  "MAX_FIELD_SIZE_BYTES": "value",
20
24
  "MAX_PATH_DEPTH": "value",
25
+ "MAX_TAG_VALUE_LENGTH": "value",
21
26
  "MetadataKeys": "value",
22
27
  "parsePlatformBaseUrl": "function",
23
28
  "pipelineContractScope": "function",
@@ -28,7 +33,10 @@
28
33
  "pluginImageRepository": "function",
29
34
  "pluginLookupFilter": "function",
30
35
  "PluginType": "value",
36
+ "previewStructure": "function",
31
37
  "replaceNonAlphanumeric": "function",
38
+ "RESERVED_TAG_KEYS": "value",
39
+ "RESERVED_TAG_PREFIXES": "value",
32
40
  "resolve": "function",
33
41
  "resolveFailureBehavior": "function",
34
42
  "resolvePluginTemplates": "function",