igniteui-angular 14.2.23 → 14.2.24

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.
@@ -698,7 +698,7 @@ export class IgxBaseExporter {
698
698
  .length :
699
699
  1;
700
700
  const columnInfo = {
701
- header: columnHeader,
701
+ header: ExportUtilities.sanitizeValue(columnHeader),
702
702
  dataType: column.dataType,
703
703
  field: column.field,
704
704
  skip: !exportColumn,
@@ -884,4 +884,4 @@ export class IgxBaseExporter {
884
884
  this._ownersMap.clear();
885
885
  }
886
886
  }
887
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1leHBvcnQtc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9zZXJ2aWNlcy9leHBvcnRlci1jb21tb24vYmFzZS1leHBvcnQtc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBa0IsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0gsT0FBTyxFQUFzQixRQUFRLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHckQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFFL0YsT0FBTyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBR2xGLE9BQU8sRUFBRSxRQUFRLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUdsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFdEUsTUFBTSxDQUFOLElBQVksZ0JBT1g7QUFQRCxXQUFZLGdCQUFnQjtJQUN4QixtREFBK0IsQ0FBQTtJQUMvQixxREFBaUMsQ0FBQTtJQUNqQyw2Q0FBeUIsQ0FBQTtJQUN6QixxRUFBaUQsQ0FBQTtJQUNqRCxpREFBNkIsQ0FBQTtJQUM3Qix1REFBbUMsQ0FBQTtBQUN2QyxDQUFDLEVBUFcsZ0JBQWdCLEtBQWhCLGdCQUFnQixRQU8zQjtBQUVELE1BQU0sQ0FBTixJQUFZLFVBS1g7QUFMRCxXQUFZLFVBQVU7SUFDbEIscUNBQXVCLENBQUE7SUFDdkIsMkNBQTZCLENBQUE7SUFDN0IsK0NBQWlDLENBQUE7SUFD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Y29yZSc7XG5pbXBvcnQgeyBjbG9uZUFycmF5LCBjbG9uZVZhbHVlLCBmb3JtYXRDdXJyZW5jeSwgSUJhc2VFdmVudEFyZ3MsIHJlc29sdmVOZXN0ZWRQYXRoLCB5aWVsZGluZ0xvb3AgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IEdyaWRDb2x1bW5EYXRhVHlwZSwgRGF0YVV0aWwgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZGF0YS11dGlsJztcbmltcG9ydCB7IEV4cG9ydFV0aWxpdGllcyB9IGZyb20gJy4vZXhwb3J0LXV0aWxpdGllcyc7XG5pbXBvcnQgeyBJZ3hFeHBvcnRlck9wdGlvbnNCYXNlIH0gZnJvbSAnLi9leHBvcnRlci1vcHRpb25zLWJhc2UnO1xuaW1wb3J0IHsgSVRyZWVHcmlkUmVjb3JkIH0gZnJvbSAnLi4vLi4vZ3JpZHMvdHJlZS1ncmlkL3RyZWUtZ3JpZC5pbnRlcmZhY2VzJztcbmltcG9ydCB7IFRyZWVHcmlkRmlsdGVyaW5nU3RyYXRlZ3kgfSBmcm9tICcuLi8uLi9ncmlkcy90cmVlLWdyaWQvdHJlZS1ncmlkLmZpbHRlcmluZy5zdHJhdGVneSc7XG5pbXBvcnQgeyBJR3JvdXBpbmdTdGF0ZSB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9ncm91cGJ5LXN0YXRlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBnZXRIaWVyYXJjaHksIGlzSGllcmFyY2h5TWF0Y2ggfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvb3BlcmF0aW9ucyc7XG5pbXBvcnQgeyBJR3JvdXBCeUV4cGFuZFN0YXRlIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwYnktZXhwYW5kLXN0YXRlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJRmlsdGVyaW5nU3RhdGUgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLXN0YXRlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBEYXRlUGlwZSwgZ2V0TG9jYWxlQ3VycmVuY3lDb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IElHcm91cEJ5UmVjb3JkIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwYnktcmVjb3JkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDb2x1bW5UeXBlLCBHcmlkVHlwZSwgSVBhdGhTZWdtZW50IH0gZnJvbSAnLi4vLi4vZ3JpZHMvY29tbW9uL2dyaWQuaW50ZXJmYWNlJztcbmltcG9ydCB7IEZpbHRlclV0aWwgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLXN0cmF0ZWd5JztcblxuZXhwb3J0IGVudW0gRXhwb3J0UmVjb3JkVHlwZSB7XG4gICAgR3JvdXBlZFJlY29yZCA9ICdHcm91cGVkUmVjb3JkJyxcbiAgICBUcmVlR3JpZFJlY29yZCA9ICdUcmVlR3JpZFJlY29yZCcsXG4gICAgRGF0YVJlY29yZCA9ICdEYXRhUmVjb3JkJyxcbiAgICBIaWVyYXJjaGljYWxHcmlkUmVjb3JkID0gJ0hpZXJhcmNoaWNhbEdyaWRSZWNvcmQnLFxuICAgIEhlYWRlclJlY29yZCA9ICdIZWFkZXJSZWNvcmQnLFxuICAgIFBpdm90R3JpZFJlY29yZCA9ICdQaXZvdEdyaWRSZWNvcmQnXG59XG5cbmV4cG9ydCBlbnVtIEhlYWRlclR5cGUge1xuICAgIFJvd0hlYWRlciA9ICdSb3dIZWFkZXInLFxuICAgIENvbHVtbkhlYWRlciA9ICdDb2x1bW5IZWFkZXInLFxuICAgIE11bHRpUm93SGVhZGVyID0gJ011bHRpUm93SGVhZGVyJyxcbiAgICBNdWx0aUNvbHVtbkhlYWRlciA9ICdNdWx0aUNvbHVtbkhlYWRlcicsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUV4cG9ydFJlY29yZCB7XG4gICAgZGF0YTogYW55O1xuICAgIGxldmVsOiBudW1iZXI7XG4gICAgdHlwZTogRXhwb3J0UmVjb3JkVHlwZTtcbiAgICBvd25lcj86IHN0cmluZyB8IEdyaWRUeXBlO1xuICAgIGhpZGRlbj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbHVtbkxpc3Qge1xuICAgIGNvbHVtbnM6IElDb2x1bW5JbmZvW107XG4gICAgY29sdW1uV2lkdGhzOiBudW1iZXJbXTtcbiAgICBpbmRleE9mTGFzdFBpbm5lZENvbHVtbjogbnVtYmVyO1xuICAgIG1heExldmVsPzogbnVtYmVyO1xuICAgIG1heFJvd0xldmVsPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDb2x1bW5JbmZvIHtcbiAgICBoZWFkZXI6IHN0cmluZztcbiAgICBmaWVsZDogc3RyaW5nO1xuICAgIHNraXA6IGJvb2xlYW47XG4gICAgZGF0YVR5cGU/OiBHcmlkQ29sdW1uRGF0YVR5cGU7XG4gICAgc2tpcEZvcm1hdHRlcj86IGJvb2xlYW47XG4gICAgZm9ybWF0dGVyPzogYW55O1xuICAgIGhlYWRlclR5cGU/OiBIZWFkZXJUeXBlO1xuICAgIHN0YXJ0SW5kZXg/OiBudW1iZXI7XG4gICAgY29sdW1uU3Bhbj86IG51bWJlcjtcbiAgICByb3dTcGFuPzogbnVtYmVyO1xuICAgIGxldmVsPzogbnVtYmVyO1xuICAgIGV4cG9ydEluZGV4PzogbnVtYmVyO1xuICAgIHBpbm5lZEluZGV4PzogbnVtYmVyO1xuICAgIGNvbHVtbkdyb3VwUGFyZW50PzogQ29sdW1uVHlwZSB8IHN0cmluZztcbiAgICBjb2x1bW5Hcm91cD86IENvbHVtblR5cGUgfCBzdHJpbmc7XG4gICAgY3VycmVuY3lDb2RlPzogc3RyaW5nO1xuICAgIGRpc3BsYXlGb3JtYXQ/OiBzdHJpbmc7XG4gICAgZGlnaXRzSW5mbz86IHN0cmluZztcbn1cbi8qKlxuICogcm93RXhwb3J0aW5nIGV2ZW50IGFyZ3VtZW50c1xuICogdGhpcy5leHBvcnRlclNlcnZpY2Uucm93RXhwb3J0aW5nLnN1YnNjcmliZSgoYXJnczogSVJvd0V4cG9ydGluZ0V2ZW50QXJncykgPT4ge1xuICogLy8gc2V0IGFyZ3MgcHJvcGVydGllcyBoZXJlXG4gKiB9KVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElSb3dFeHBvcnRpbmdFdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUV2ZW50QXJncyB7XG4gICAgLyoqXG4gICAgICogQ29udGFpbnMgdGhlIGV4cG9ydGluZyByb3cgZGF0YVxuICAgICAqL1xuICAgIHJvd0RhdGE6IGFueTtcblxuICAgIC8qKlxuICAgICAqIENvbnRhaW5zIHRoZSBleHBvcnRpbmcgcm93IGluZGV4XG4gICAgICovXG4gICAgcm93SW5kZXg6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFNraXAgdGhlIGV4cG9ydGluZyByb3cgd2hlbiBzZXQgdG8gdHJ1ZVxuICAgICAqL1xuICAgIGNhbmNlbDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBjb2x1bW5FeHBvcnRpbmcgZXZlbnQgYXJndW1lbnRzXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiB0aGlzLmV4cG9ydGVyU2VydmljZS5jb2x1bW5FeHBvcnRpbmcuc3Vic2NyaWJlKChhcmdzOiBJQ29sdW1uRXhwb3J0aW5nRXZlbnRBcmdzKSA9PiB7XG4gKiAvLyBzZXQgYXJncyBwcm9wZXJ0aWVzIGhlcmVcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbHVtbkV4cG9ydGluZ0V2ZW50QXJncyBleHRlbmRzIElCYXNlRXZlbnRBcmdzIHtcbiAgICAvKipcbiAgICAgKiBDb250YWlucyB0aGUgZXhwb3J0aW5nIGNvbHVtbiBoZWFkZXJcbiAgICAgKi9cbiAgICBoZWFkZXI6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIENvbnRhaW5zIHRoZSBleHBvcnRpbmcgY29sdW1uIGZpZWxkIG5hbWVcbiAgICAgKi9cbiAgICBmaWVsZDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQ29udGFpbnMgdGhlIGV4cG9ydGluZyBjb2x1bW4gaW5kZXhcbiAgICAgKi9cbiAgICBjb2x1bW5JbmRleDogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogU2tpcCB0aGUgZXhwb3J0aW5nIGNvbHVtbiB3aGVuIHNldCB0byB0cnVlXG4gICAgICovXG4gICAgY2FuY2VsOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogRXhwb3J0IHRoZSBjb2x1bW4ncyBkYXRhIHdpdGhvdXQgYXBwbHlpbmcgaXRzIGZvcm1hdHRlciwgd2hlbiBzZXQgdG8gdHJ1ZVxuICAgICAqL1xuICAgIHNraXBGb3JtYXR0ZXI6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgZ3JpZCBvd25lci5cbiAgICAgKi9cbiAgICBncmlkPzogR3JpZFR5cGU7XG59XG5cbi8qKmhpZGRlblxuICogQSBoZWxwZXIgY2xhc3MgdXNlZCB0byBpZGVudGlmeSB3aGV0aGVyIHRoZSB1c2VyIGhhcyBzZXQgYSBzcGVjaWZpYyBjb2x1bW5JbmRleFxuICogZHVyaW5nIGNvbHVtbkV4cG9ydGluZywgc28gd2UgY2FuIGhvbm9yIGl0IGF0IHRoZSBleHBvcnRlZCBmaWxlLlxuKi9cbmNsYXNzIElneENvbHVtbkV4cG9ydGluZ0V2ZW50QXJncyBpbXBsZW1lbnRzIElDb2x1bW5FeHBvcnRpbmdFdmVudEFyZ3Mge1xuICAgIHB1YmxpYyBoZWFkZXI6IHN0cmluZztcbiAgICBwdWJsaWMgZmllbGQ6IHN0cmluZztcbiAgICBwdWJsaWMgY2FuY2VsOiBib29sZWFuO1xuICAgIHB1YmxpYyBza2lwRm9ybWF0dGVyOiBib29sZWFuO1xuICAgIHB1YmxpYyBncmlkPzogR3JpZFR5cGU7XG4gICAgcHVibGljIG93bmVyPzogYW55O1xuICAgIHB1YmxpYyB1c2VyU2V0SW5kZXg/ID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF9jb2x1bW5JbmRleD86IG51bWJlcjtcblxuICAgIHB1YmxpYyBnZXQgY29sdW1uSW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtbkluZGV4O1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgY29sdW1uSW5kZXgodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9jb2x1bW5JbmRleCA9IHZhbHVlO1xuICAgICAgICB0aGlzLnVzZXJTZXRJbmRleCA9IHRydWU7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Iob3JpZ2luYWw6IElDb2x1bW5FeHBvcnRpbmdFdmVudEFyZ3MpIHtcbiAgICAgICAgdGhpcy5oZWFkZXIgPSBvcmlnaW5hbC5oZWFkZXI7XG4gICAgICAgIHRoaXMuZmllbGQgPSBvcmlnaW5hbC5maWVsZDtcbiAgICAgICAgdGhpcy5jYW5jZWwgPSBvcmlnaW5hbC5jYW5jZWw7XG4gICAgICAgIHRoaXMuc2tpcEZvcm1hdHRlciA9IG9yaWdpbmFsLnNraXBGb3JtYXR0ZXI7XG4gICAgICAgIHRoaXMuZ3JpZCA9IG9yaWdpbmFsLmdyaWQ7XG4gICAgICAgIHRoaXMub3duZXIgPSBvcmlnaW5hbC5vd25lcjtcbiAgICAgICAgdGhpcy5fY29sdW1uSW5kZXggPSBvcmlnaW5hbC5jb2x1bW5JbmRleDtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX09XTkVSID0gJ2RlZmF1bHQnO1xuY29uc3QgREVGQVVMVF9DT0xVTU5fV0lEVEggPSA4LjQzO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgSWd4QmFzZUV4cG9ydGVyIHtcblxuICAgIHB1YmxpYyBleHBvcnRFbmRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SUJhc2VFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGlzIGVtaXR0ZWQgd2hlbiBhIHJvdyBpcyBleHBvcnRlZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5leHBvcnRlclNlcnZpY2Uucm93RXhwb3J0aW5nLnN1YnNjcmliZSgoYXJnczogSVJvd0V4cG9ydGluZ0V2ZW50QXJncykgPT4ge1xuICAgICAqIC8vIHB1dCBldmVudCBoYW5kbGVyIGNvZGUgaGVyZVxuICAgICAqIH0pO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEJhc2VFeHBvcnRlclxuICAgICAqL1xuICAgIHB1YmxpYyByb3dFeHBvcnRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPElSb3dFeHBvcnRpbmdFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGlzIGVtaXR0ZWQgd2hlbiBhIGNvbHVtbiBpcyBleHBvcnRlZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5leHBvcnRlclNlcnZpY2UuY29sdW1uRXhwb3J0aW5nLnN1YnNjcmliZSgoYXJnczogSUNvbHVtbkV4cG9ydGluZ0V2ZW50QXJncykgPT4ge1xuICAgICAqIC8vIHB1dCBldmVudCBoYW5kbGVyIGNvZGUgaGVyZVxuICAgICAqIH0pO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEJhc2VFeHBvcnRlclxuICAgICAqL1xuICAgIHB1YmxpYyBjb2x1bW5FeHBvcnRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPElDb2x1bW5FeHBvcnRpbmdFdmVudEFyZ3M+KCk7XG5cbiAgICBwcm90ZWN0ZWQgX3NvcnQgPSBudWxsO1xuICAgIHByb3RlY3RlZCBwaXZvdEdyaWRGaWx0ZXJGaWVsZHNDb3VudDogbnVtYmVyO1xuICAgIHByb3RlY3RlZCBfb3duZXJzTWFwOiBNYXA8YW55LCBJQ29sdW1uTGlzdD4gPSBuZXcgTWFwPGFueSwgSUNvbHVtbkxpc3Q+KCk7XG5cbiAgICBwcml2YXRlIGxvY2FsZTogc3RyaW5nXG4gICAgcHJpdmF0ZSBpc1Bpdm90R3JpZEV4cG9ydDogYm9vbGVhbjtcbiAgICBwcml2YXRlIG9wdGlvbnM6IElneEV4cG9ydGVyT3B0aW9uc0Jhc2U7XG4gICAgcHJpdmF0ZSBmbGF0UmVjb3JkczogSUV4cG9ydFJlY29yZFtdID0gW107XG4gICAgcHJpdmF0ZSBwaXZvdEdyaWRDb2x1bW5zOiBJQ29sdW1uSW5mb1tdID0gW11cbiAgICBwcml2YXRlIHBpdm90R3JpZFJvd0RpbWVuc2lvbnNNYXA6IE1hcDxzdHJpbmcsIHN0cmluZz47XG4gICAgcHJpdmF0ZSBwaXZvdEdyaWRLZXlWYWx1ZU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgICAvKipcbiAgICAgKiBNZXRob2QgZm9yIGV4cG9ydGluZyBJZ3hHcmlkIGNvbXBvbmVudCdzIGRhdGEuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuZXhwb3J0ZXJTZXJ2aWNlLmV4cG9ydCh0aGlzLmlneEdyaWRGb3JFeHBvcnQsIHRoaXMuZXhwb3J0T3B0aW9ucyk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4QmFzZUV4cG9ydGVyXG4gICAgICovXG4gICAgcHVibGljIGV4cG9ydChncmlkOiBhbnksIG9wdGlvbnM6IElneEV4cG9ydGVyT3B0aW9uc0Jhc2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCB8fCBvcHRpb25zID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignTm8gb3B0aW9ucyBwcm92aWRlZCEnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIHRoaXMubG9jYWxlID0gZ3JpZC5sb2NhbGU7XG4gICAgICAgIGxldCBjb2x1bW5zID0gZ3JpZC5jb2x1bW5zO1xuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlTXVsdGlDb2x1bW5IZWFkZXJzKSB7XG4gICAgICAgICAgICBjb2x1bW5zID0gY29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC5jaGlsZHJlbiA9PT0gdW5kZWZpbmVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbHVtbkxpc3QgPSB0aGlzLmdldENvbHVtbnMoY29sdW1ucyk7XG4gICAgICAgIGNvbnN0IHRhZ05hbWUgPSBncmlkLm5hdGl2ZUVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgIGlmICh0YWdOYW1lID09PSAnaWd4LWhpZXJhcmNoaWNhbC1ncmlkJykge1xuICAgICAgICAgICAgdGhpcy5fb3duZXJzTWFwLnNldChncmlkLCBjb2x1bW5MaXN0KTtcblxuICAgICAgICAgICAgY29uc3QgY2hpbGRMYXlvdXRMaXN0ID0gZ3JpZC5jaGlsZExheW91dExpc3Q7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgaXNsYW5kIG9mIGNoaWxkTGF5b3V0TGlzdCkge1xuICAgICAgICAgICAgICAgIHRoaXMubWFwSGllcmFyY2hpY2FsR3JpZENvbHVtbnMoaXNsYW5kLCBncmlkLmRhdGFbMF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRhZ05hbWUgPT09ICdpZ3gtcGl2b3QtZ3JpZCcpIHtcbiAgICAgICAgICAgIHRoaXMucGl2b3RHcmlkQ29sdW1ucyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5pc1Bpdm90R3JpZEV4cG9ydCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnBpdm90R3JpZEtleVZhbHVlTWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgICAgICAgICAgIHRoaXMucGl2b3RHcmlkUm93RGltZW5zaW9uc01hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgICAgICAgICAgIGdyaWQucGl2b3RDb25maWd1cmF0aW9uLnJvd3MuZmlsdGVyKHIgPT4gci5lbmFibGVkKS5mb3JFYWNoKHJvd0RpbWVuc2lvbiA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRUb1Jvd0RpbWVuc2lvbnNNYXAocm93RGltZW5zaW9uLCByb3dEaW1lbnNpb24ubWVtYmVyTmFtZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5fb3duZXJzTWFwLnNldChERUZBVUxUX09XTkVSLCBjb2x1bW5MaXN0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX293bmVyc01hcC5zZXQoREVGQVVMVF9PV05FUiwgY29sdW1uTGlzdCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnByZXBhcmVEYXRhKGdyaWQpO1xuICAgICAgICB0aGlzLmFkZFBpdm90R3JpZENvbHVtbnMoZ3JpZCk7XG4gICAgICAgIHRoaXMuZXhwb3J0R3JpZFJlY29yZHNEYXRhKHRoaXMuZmxhdFJlY29yZHMsIGdyaWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1ldGhvZCBmb3IgZXhwb3J0aW5nIGFueSBraW5kIG9mIGFycmF5IGRhdGEuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuZXhwb3J0ZXJTZXJ2aWNlLmV4cG9ydERhdGEodGhpcy5hcnJheUZvckV4cG9ydCwgdGhpcy5leHBvcnRPcHRpb25zKTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hCYXNlRXhwb3J0ZXJcbiAgICAgKi9cbiAgICBwdWJsaWMgZXhwb3J0RGF0YShkYXRhOiBhbnlbXSwgb3B0aW9uczogSWd4RXhwb3J0ZXJPcHRpb25zQmFzZSk6IHZvaWQge1xuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdObyBvcHRpb25zIHByb3ZpZGVkIScpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuICAgICAgICBjb25zdCByZWNvcmRzID0gZGF0YS5tYXAoZCA9PiB7XG4gICAgICAgICAgICBjb25zdCByZWNvcmQ6IElFeHBvcnRSZWNvcmQgPSB7XG4gICAgICAgICAgICAgICAgZGF0YTogZCxcbiAgICAgICAgICAgICAgICB0eXBlOiBFeHBvcnRSZWNvcmRUeXBlLkRhdGFSZWNvcmQsXG4gICAgICAgICAgICAgICAgbGV2ZWw6IDBcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHJldHVybiByZWNvcmQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZXhwb3J0R3JpZFJlY29yZHNEYXRhKHJlY29yZHMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkVG9Sb3dEaW1lbnNpb25zTWFwKHJvd0RpbWVuc2lvbjogYW55LCByb290UGFyZW50TmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMucGl2b3RHcmlkUm93RGltZW5zaW9uc01hcFtyb3dEaW1lbnNpb24ubWVtYmVyTmFtZV0gPSByb290UGFyZW50TmFtZTtcbiAgICAgICAgaWYgKHJvd0RpbWVuc2lvbi5jaGlsZExldmVsKSB7XG4gICAgICAgICAgICB0aGlzLmFkZFRvUm93RGltZW5zaW9uc01hcChyb3dEaW1lbnNpb24uY2hpbGRMZXZlbCwgcm9vdFBhcmVudE5hbWUpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGV4cG9ydEdyaWRSZWNvcmRzRGF0YShyZWNvcmRzOiBJRXhwb3J0UmVjb3JkW10sIGdyaWQ/OiBHcmlkVHlwZSkge1xuICAgICAgICBpZiAodGhpcy5fb3duZXJzTWFwLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHJlY29yZHNEYXRhID0gcmVjb3Jkcy5tYXAociA9PiByLmRhdGEpO1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IEV4cG9ydFV0aWxpdGllcy5nZXRLZXlzRnJvbURhdGEocmVjb3Jkc0RhdGEpO1xuICAgICAgICAgICAgY29uc3QgY29sdW1ucyA9IGtleXMubWFwKChrKSA9PlxuICAgICAgICAgICAgICAgICh7IGhlYWRlcjogaywgZmllbGQ6IGssIHNraXA6IGZhbHNlLCBoZWFkZXJUeXBlOiBIZWFkZXJUeXBlLkNvbHVtbkhlYWRlciwgbGV2ZWw6IDAsIGNvbHVtblNwYW46IDEgfSkpO1xuICAgICAgICAgICAgY29uc3QgY29sdW1uV2lkdGhzID0gbmV3IEFycmF5PG51bWJlcj4oa2V5cy5sZW5ndGgpLmZpbGwoREVGQVVMVF9DT0xVTU5fV0lEVEgpO1xuXG4gICAgICAgICAgICBjb25zdCBtYXBSZWNvcmQ6IElDb2x1bW5MaXN0ID0ge1xuICAgICAgICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgICAgICAgY29sdW1uV2lkdGhzLFxuICAgICAgICAgICAgICAgIGluZGV4T2ZMYXN0UGlubmVkQ29sdW1uOiAtMSxcbiAgICAgICAgICAgICAgICBtYXhMZXZlbDogMFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5fb3duZXJzTWFwLnNldChERUZBVUxUX09XTkVSLCBtYXBSZWNvcmQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHNob3VsZFJlb3JkZXJDb2x1bW5zID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgbWFwUmVjb3JkXSBvZiB0aGlzLl9vd25lcnNNYXApIHtcbiAgICAgICAgICAgIGxldCBza2lwcGVkUGlubmVkQ29sdW1uc0NvdW50ID0gMDtcbiAgICAgICAgICAgIGxldCBjb2x1bW5zV2l0aG91dEhlYWRlckNvdW50ID0gMTtcbiAgICAgICAgICAgIGxldCBpbmRleE9mTGFzdFBpbm5lZENvbHVtbiA9IG1hcFJlY29yZC5pbmRleE9mTGFzdFBpbm5lZENvbHVtbjtcblxuICAgICAgICAgICAgbWFwUmVjb3JkLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghY29sdW1uLnNraXApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sdW1uRXhwb3J0QXJnczogSUNvbHVtbkV4cG9ydGluZ0V2ZW50QXJncyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcjogIUV4cG9ydFV0aWxpdGllcy5pc051bGxPcldoaXRlc3BhY2VzKGNvbHVtbi5oZWFkZXIpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uaGVhZGVyIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29sdW1uJyArIGNvbHVtbnNXaXRob3V0SGVhZGVyQ291bnQrKyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBjb2x1bW4uZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5JbmRleDogaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWw6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2tpcEZvcm1hdHRlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBncmlkOiBrZXkgPT09IERFRkFVTFRfT1dORVIgPyBncmlkIDoga2V5XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Q29sdW1uRXhwb3J0QXJncyA9IG5ldyBJZ3hDb2x1bW5FeHBvcnRpbmdFdmVudEFyZ3MoY29sdW1uRXhwb3J0QXJncyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uRXhwb3J0aW5nLmVtaXQobmV3Q29sdW1uRXhwb3J0QXJncyk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLmhlYWRlciA9IG5ld0NvbHVtbkV4cG9ydEFyZ3MuaGVhZGVyO1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW4uc2tpcCA9IG5ld0NvbHVtbkV4cG9ydEFyZ3MuY2FuY2VsO1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW4uc2tpcEZvcm1hdHRlciA9IG5ld0NvbHVtbkV4cG9ydEFyZ3Muc2tpcEZvcm1hdHRlcjtcblxuICAgICAgICAgICAgICAgICAgICBpZiAobmV3Q29sdW1uRXhwb3J0QXJncy51c2VyU2V0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5leHBvcnRJbmRleCA9IG5ld0NvbHVtbkV4cG9ydEFyZ3MuY29sdW1uSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRSZW9yZGVyQ29sdW1ucyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoY29sdW1uLnNraXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA8PSBpbmRleE9mTGFzdFBpbm5lZENvbHVtbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXBwZWRQaW5uZWRDb2x1bW5zQ291bnQrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVDb2x1bW5TcGFucyhjb2x1bW4sIG1hcFJlY29yZCwgY29sdW1uLmNvbHVtblNwYW4pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBub25Ta2lwcGVkQ29sdW1ucyA9IG1hcFJlY29yZC5jb2x1bW5zLmZpbHRlcihjID0+ICFjLnNraXApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9uU2tpcHBlZENvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX293bmVyc01hcC5nZXQoa2V5KS5tYXhMZXZlbCA9IG5vblNraXBwZWRDb2x1bW5zLnNvcnQoKGEsIGIpID0+IGIubGV2ZWwgLSBhLmxldmVsKVswXS5sZXZlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zb3J0ICYmIHRoaXMuX3NvcnQuZmllbGROYW1lID09PSBjb2x1bW4uZmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2x1bW4uc2tpcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NvcnQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zb3J0LmZpZWxkTmFtZSA9IGNvbHVtbi5oZWFkZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW4gLT0gc2tpcHBlZFBpbm5lZENvbHVtbnNDb3VudDtcblxuICAgICAgICAgICAgLy8gUmVvcmRlciBjb2x1bW5zIG9ubHkgaWYgYSBjb2x1bW4gaGFzIGJlZW4gYXNzaWduZWQgYSBzcGVjaWZpYyBjb2x1bW5JbmRleCBkdXJpbmcgY29sdW1uRXhwb3J0aW5nIGV2ZW50XG4gICAgICAgICAgICBpZiAoc2hvdWxkUmVvcmRlckNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICBtYXBSZWNvcmQuY29sdW1ucyA9IHRoaXMucmVvcmRlckNvbHVtbnMobWFwUmVjb3JkLmNvbHVtbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cblxuICAgICAgICBjb25zdCBkYXRhVG9FeHBvcnQgPSBuZXcgQXJyYXk8SUV4cG9ydFJlY29yZD4oKTtcbiAgICAgICAgY29uc3QgYWN0dWFsRGF0YSA9IHJlY29yZHNbMF0/LmRhdGE7XG4gICAgICAgIGNvbnN0IGlzU3BlY2lhbERhdGEgPSBFeHBvcnRVdGlsaXRpZXMuaXNTcGVjaWFsRGF0YShhY3R1YWxEYXRhKTtcblxuICAgICAgICB5aWVsZGluZ0xvb3AocmVjb3Jkcy5sZW5ndGgsIDEwMCwgKGkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHJlY29yZHNbaV07XG4gICAgICAgICAgICB0aGlzLmV4cG9ydFJvdyhkYXRhVG9FeHBvcnQsIHJvdywgaSwgaXNTcGVjaWFsRGF0YSk7XG4gICAgICAgIH0sICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZXhwb3J0RGF0YUltcGxlbWVudGF0aW9uKGRhdGFUb0V4cG9ydCwgdGhpcy5vcHRpb25zLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldERlZmF1bHRzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVDb2x1bW5TcGFucyhjb2x1bW46IElDb2x1bW5JbmZvLCBtYXBSZWNvcmQ6IElDb2x1bW5MaXN0LCBzcGFuOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKGNvbHVtbi5oZWFkZXJUeXBlID09PSBIZWFkZXJUeXBlLk11bHRpQ29sdW1uSGVhZGVyICYmIGNvbHVtbi5za2lwKSB7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW5Hcm91cENoaWxkcmVuID0gbWFwUmVjb3JkLmNvbHVtbnMuZmlsdGVyKGMgPT4gYy5jb2x1bW5Hcm91cFBhcmVudCA9PT0gY29sdW1uLmNvbHVtbkdyb3VwKTtcblxuICAgICAgICAgICAgY29sdW1uR3JvdXBDaGlsZHJlbi5mb3JFYWNoKGNnYyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNnYy5oZWFkZXJUeXBlID09PSBIZWFkZXJUeXBlLk11bHRpQ29sdW1uSGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNnYy5jb2x1bW5TcGFuID0gMDtcbiAgICAgICAgICAgICAgICAgICAgY2djLmNvbHVtbkdyb3VwUGFyZW50ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgY2djLnNraXAgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlQ29sdW1uU3BhbnMoY2djLCBtYXBSZWNvcmQsIGNnYy5jb2x1bW5TcGFuKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjZ2Muc2tpcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0YXJnZXRDb2wgPSBtYXBSZWNvcmQuY29sdW1ucy5maWx0ZXIoYyA9PiBjb2x1bW4uY29sdW1uR3JvdXBQYXJlbnQgIT09IG51bGwgJiYgYy5jb2x1bW5Hcm91cCA9PT0gY29sdW1uLmNvbHVtbkdyb3VwUGFyZW50KVswXTtcbiAgICAgICAgaWYgKHRhcmdldENvbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0YXJnZXRDb2wuY29sdW1uU3BhbiAtPSBzcGFuO1xuXG4gICAgICAgICAgICBpZiAodGFyZ2V0Q29sLmNvbHVtbkdyb3VwUGFyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVDb2x1bW5TcGFucyh0YXJnZXRDb2wsIG1hcFJlY29yZCwgc3Bhbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0YXJnZXRDb2wuY29sdW1uU3BhbiA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRhcmdldENvbC5za2lwID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZXhwb3J0Um93KGRhdGE6IElFeHBvcnRSZWNvcmRbXSwgcmVjb3JkOiBJRXhwb3J0UmVjb3JkLCBpbmRleDogbnVtYmVyLCBpc1NwZWNpYWxEYXRhOiBib29sZWFuKSB7XG4gICAgICAgIGlmICghaXNTcGVjaWFsRGF0YSkge1xuICAgICAgICAgICAgY29uc3Qgb3duZXIgPSByZWNvcmQub3duZXIgPT09IHVuZGVmaW5lZCA/IERFRkFVTFRfT1dORVIgOiByZWNvcmQub3duZXI7XG4gICAgICAgICAgICBjb25zdCBvd25lckNvbHMgPSB0aGlzLl9vd25lcnNNYXAuZ2V0KG93bmVyKS5jb2x1bW5zO1xuXG4gICAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgIT09IEV4cG9ydFJlY29yZFR5cGUuSGVhZGVyUmVjb3JkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1ucyA9IG93bmVyQ29sc1xuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGMgPT4gYy5oZWFkZXJUeXBlICE9PSBIZWFkZXJUeXBlLk11bHRpQ29sdW1uSGVhZGVyICYmIGMuaGVhZGVyVHlwZSAhPT0gSGVhZGVyVHlwZS5Sb3dIZWFkZXIgJiYgYy5oZWFkZXJUeXBlICE9PSBIZWFkZXJUeXBlLk11bHRpUm93SGVhZGVyICYmICFjLnNraXApXG4gICAgICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnN0YXJ0SW5kZXggLSBiLnN0YXJ0SW5kZXgpXG4gICAgICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnBpbm5lZEluZGV4IC0gYi5waW5uZWRJbmRleCk7XG5cbiAgICAgICAgICAgICAgICByZWNvcmQuZGF0YSA9IGNvbHVtbnMucmVkdWNlKChhLCBlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZS5za2lwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmF3VmFsdWUgPSByZXNvbHZlTmVzdGVkUGF0aChyZWNvcmQuZGF0YSwgZS5maWVsZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZEFwcGx5Rm9ybWF0dGVyID0gZS5mb3JtYXR0ZXIgJiYgIWUuc2tpcEZvcm1hdHRlciAmJiByZWNvcmQudHlwZSAhPT0gRXhwb3J0UmVjb3JkVHlwZS5Hcm91cGVkUmVjb3JkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5kYXRhVHlwZSA9PT0gJ2RhdGUnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIShyYXdWYWx1ZSBpbnN0YW5jZW9mIERhdGUpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIXNob3VsZEFwcGx5Rm9ybWF0dGVyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3VmFsdWUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd1ZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3VmFsdWUgPSBuZXcgRGF0ZShyYXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGUuZGF0YVR5cGUgPT09ICdzdHJpbmcnICYmIHJhd1ZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd1ZhbHVlID0gcmF3VmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZS5kYXRhVHlwZSA9PT0gJ2N1cnJlbmN5Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd1ZhbHVlID0gZm9ybWF0Q3VycmVuY3kocmF3VmFsdWUsIGUuY3VycmVuY3lDb2RlLCBlLmRpc3BsYXlGb3JtYXQsIGUuZGlnaXRzSW5mbywgdGhpcy5sb2NhbGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZm9ybWF0dGVkVmFsdWUgPSBzaG91bGRBcHBseUZvcm1hdHRlciA/IGUuZm9ybWF0dGVyKHJhd1ZhbHVlKSA6IHJhd1ZhbHVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1Bpdm90R3JpZEV4cG9ydCAmJiAhaXNOYU4ocGFyc2VGbG9hdChmb3JtYXR0ZWRWYWx1ZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkVmFsdWUgPSBwYXJzZUZsb2F0KGZvcm1hdHRlZFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgYVtlLmZpZWxkXSA9IGZvcm1hdHRlZFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRIZWFkZXJzID0gb3duZXJDb2xzLmZpbHRlcihjID0+IGMuc2tpcCkubWFwKGMgPT4gYy5oZWFkZXIgPyBjLmhlYWRlciA6IGMuZmllbGQpO1xuICAgICAgICAgICAgICAgIHJlY29yZC5kYXRhID0gcmVjb3JkLmRhdGEuZmlsdGVyKGQgPT4gZmlsdGVyZWRIZWFkZXJzLmluZGV4T2YoZCkgPT09IC0xKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJvd0FyZ3MgPSB7XG4gICAgICAgICAgICByb3dEYXRhOiByZWNvcmQuZGF0YSxcbiAgICAgICAgICAgIHJvd0luZGV4OiBpbmRleCxcbiAgICAgICAgICAgIGNhbmNlbDogZmFsc2VcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnJvd0V4cG9ydGluZy5lbWl0KHJvd0FyZ3MpO1xuXG4gICAgICAgIGlmICghcm93QXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIGRhdGEucHVzaChyZWNvcmQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW9yZGVyQ29sdW1ucyhjb2x1bW5zOiBJQ29sdW1uSW5mb1tdKTogSUNvbHVtbkluZm9bXSB7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkQ29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKGMgPT4gIWMuc2tpcCk7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IGZpbHRlcmVkQ29sdW1ucy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHNwZWNpZmljSW5kaWNlc0NvbHVtbnMgPSBmaWx0ZXJlZENvbHVtbnMuZmlsdGVyKChjb2wpID0+ICFpc05hTihjb2wuZXhwb3J0SW5kZXgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNvcnQoKGEsYikgPT4gYS5leHBvcnRJbmRleCAtIGIuZXhwb3J0SW5kZXgpO1xuICAgICAgICBjb25zdCBpbmRpY2VzID0gc3BlY2lmaWNJbmRpY2VzQ29sdW1ucy5tYXAoY29sID0+IGNvbC5leHBvcnRJbmRleCk7XG5cbiAgICAgICAgc3BlY2lmaWNJbmRpY2VzQ29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICBmaWx0ZXJlZENvbHVtbnMuc3BsaWNlKGZpbHRlcmVkQ29sdW1ucy5pbmRleE9mKGNvbCksIDEpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByZW9yZGVyZWRDb2x1bW5zID0gbmV3IEFycmF5KGxlbmd0aCk7XG5cbiAgICAgICAgaWYgKHNwZWNpZmljSW5kaWNlc0NvbHVtbnMubGVuZ3RoID4gTWF0aC5tYXgoLi4uaW5kaWNlcykpIHtcbiAgICAgICAgICAgIHJldHVybiBzcGVjaWZpY0luZGljZXNDb2x1bW5zLmNvbmNhdChmaWx0ZXJlZENvbHVtbnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5kaWNlcy5mb3JFYWNoKChpLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpIDwgMCB8fCBpID49IGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZENvbHVtbnMucHVzaChzcGVjaWZpY0luZGljZXNDb2x1bW5zW2luZGV4XSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGsgPSBpO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoayA8IGxlbmd0aCAmJiByZW9yZGVyZWRDb2x1bW5zW2tdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICsraztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZW9yZGVyZWRDb2x1bW5zW2tdID0gc3BlY2lmaWNJbmRpY2VzQ29sdW1uc1tpbmRleF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAocmVvcmRlcmVkQ29sdW1uc1tpXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlb3JkZXJlZENvbHVtbnNbaV0gPSBmaWx0ZXJlZENvbHVtbnMuc3BsaWNlKDAsIDEpWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZW9yZGVyZWRDb2x1bW5zO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJlcGFyZURhdGEoZ3JpZDogR3JpZFR5cGUpIHtcbiAgICAgICAgdGhpcy5mbGF0UmVjb3JkcyA9IFtdO1xuICAgICAgICBjb25zdCB0YWdOYW1lID0gZ3JpZC5uYXRpdmVFbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgaGFzRmlsdGVyaW5nID0gKGdyaWQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlICYmIGdyaWQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLmZpbHRlcmluZ09wZXJhbmRzLmxlbmd0aCA+IDApIHx8XG4gICAgICAgICAgICAoZ3JpZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSAmJiBncmlkLmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLmZpbHRlcmluZ09wZXJhbmRzLmxlbmd0aCA+IDApO1xuICAgICAgICBjb25zdCBleHByZXNzaW9ucyA9IGdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucyA/IGdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucy5jb25jYXQoZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMgfHwgW10pIDogZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnM7XG4gICAgICAgIGNvbnN0IGhhc1NvcnRpbmcgPSBleHByZXNzaW9ucyAmJiBleHByZXNzaW9ucy5sZW5ndGggPiAwO1xuXG4gICAgICAgIHN3aXRjaCAodGFnTmFtZSkge1xuICAgICAgICAgICAgY2FzZSAnaWd4LXBpdm90LWdyaWQnOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmVwYXJlUGl2b3RHcmlkRGF0YShncmlkKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ2lneC1oaWVyYXJjaGljYWwtZ3JpZCc6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXBhcmVIaWVyYXJjaGljYWxHcmlkRGF0YShncmlkLCBoYXNGaWx0ZXJpbmcsIGhhc1NvcnRpbmcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnaWd4LXRyZWUtZ3JpZCc6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXBhcmVUcmVlR3JpZERhdGEoZ3JpZCwgaGFzRmlsdGVyaW5nLCBoYXNTb3J0aW5nKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXBhcmVHcmlkRGF0YShncmlkLCBoYXNGaWx0ZXJpbmcsIGhhc1NvcnRpbmcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcmVwYXJlUGl2b3RHcmlkRGF0YShncmlkOiBHcmlkVHlwZSkge1xuICAgICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiBncmlkLmZpbHRlcmVkU29ydGVkRGF0YSkge1xuICAgICAgICAgICAgY29uc3QgcmVjb3JkRGF0YSA9IE9iamVjdC5mcm9tRW50cmllcyhyZWNvcmQuYWdncmVnYXRpb25WYWx1ZXMpO1xuICAgICAgICAgICAgcmVjb3JkLmRpbWVuc2lvblZhbHVlcy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0dWFsS2V5ID0gdGhpcy5waXZvdEdyaWRSb3dEaW1lbnNpb25zTWFwW2tleV07XG4gICAgICAgICAgICAgICAgcmVjb3JkRGF0YVthY3R1YWxLZXldID0gdmFsdWU7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgcGl2b3RHcmlkUmVjb3JkOiBJRXhwb3J0UmVjb3JkID0ge1xuICAgICAgICAgICAgICAgIGRhdGE6IHJlY29yZERhdGEsXG4gICAgICAgICAgICAgICAgbGV2ZWw6IHJlY29yZC5sZXZlbCxcbiAgICAgICAgICAgICAgICB0eXBlOiBFeHBvcnRSZWNvcmRUeXBlLlBpdm90R3JpZFJlY29yZFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5mbGF0UmVjb3Jkcy5wdXNoKHBpdm90R3JpZFJlY29yZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHByZXBhcmVIaWVyYXJjaGljYWxHcmlkRGF0YShncmlkOiBHcmlkVHlwZSwgaGFzRmlsdGVyaW5nOiBib29sZWFuLCBoYXNTb3J0aW5nOiBib29sZWFuKSB7XG5cbiAgICAgICAgY29uc3Qgc2tpcE9wZXJhdGlvbnMgPVxuICAgICAgICAgICAgKCFoYXNGaWx0ZXJpbmcgfHwgIXRoaXMub3B0aW9ucy5pZ25vcmVGaWx0ZXJpbmcpICYmXG4gICAgICAgICAgICAoIWhhc1NvcnRpbmcgfHwgIXRoaXMub3B0aW9ucy5pZ25vcmVTb3J0aW5nKTtcblxuICAgICAgICBpZiAoc2tpcE9wZXJhdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBncmlkLmZpbHRlcmVkU29ydGVkRGF0YTtcbiAgICAgICAgICAgIHRoaXMuYWRkSGllcmFyY2hpY2FsR3JpZERhdGEoZ3JpZCwgZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgZGF0YSA9IGdyaWQuZGF0YTtcblxuICAgICAgICAgICAgaWYgKGhhc0ZpbHRlcmluZyAmJiAhdGhpcy5vcHRpb25zLmlnbm9yZUZpbHRlcmluZykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmluZ1N0YXRlOiBJRmlsdGVyaW5nU3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25zVHJlZTogZ3JpZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUsXG4gICAgICAgICAgICAgICAgICAgIGFkdmFuY2VkRXhwcmVzc2lvbnNUcmVlOiBncmlkLmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLFxuICAgICAgICAgICAgICAgICAgICBzdHJhdGVneTogZ3JpZC5maWx0ZXJTdHJhdGVneVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBkYXRhID0gRmlsdGVyVXRpbC5maWx0ZXIoZGF0YSwgZmlsdGVyaW5nU3RhdGUsIGdyaWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaGFzU29ydGluZyAmJiAhdGhpcy5vcHRpb25zLmlnbm9yZVNvcnRpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3J0ID0gY2xvbmVWYWx1ZShncmlkLnNvcnRpbmdFeHByZXNzaW9uc1swXSk7XG5cbiAgICAgICAgICAgICAgICBkYXRhID0gRGF0YVV0aWwuc29ydChkYXRhLCBncmlkLnNvcnRpbmdFeHByZXNzaW9ucywgZ3JpZC5zb3J0U3RyYXRlZ3ksIGdyaWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmFkZEhpZXJhcmNoaWNhbEdyaWREYXRhKGdyaWQsIGRhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRIaWVyYXJjaGljYWxHcmlkRGF0YShncmlkOiBHcmlkVHlwZSwgcmVjb3JkczogYW55W10pIHtcbiAgICAgICAgY29uc3QgY2hpbGRMYXlvdXRMaXN0ID0gZ3JpZC5jaGlsZExheW91dExpc3Q7XG4gICAgICAgIGNvbnN0IGNvbHVtbkZpZWxkcyA9IHRoaXMuX293bmVyc01hcC5nZXQoZ3JpZCkuY29sdW1ucy5tYXAoY29sID0+IGNvbC5maWVsZCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiByZWNvcmRzKSB7XG4gICAgICAgICAgICBjb25zdCBleHBhbnNpb25TdGF0ZVZhbCA9IGdyaWQuZXhwYW5zaW9uU3RhdGVzLmhhcyhlbnRyeSkgPyBncmlkLmV4cGFuc2lvblN0YXRlcy5nZXQoZW50cnkpIDogZmFsc2U7XG5cbiAgICAgICAgICAgIGNvbnN0IGRhdGFXaXRob3V0Q2hpbGRyZW4gPSBPYmplY3Qua2V5cyhlbnRyeSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGsgPT4gY29sdW1uRmllbGRzLmluY2x1ZGVzKGspKVxuICAgICAgICAgICAgICAgIC5yZWR1Y2UoKG9iaiwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG9ialtrZXldID0gZW50cnlba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgICAgICAgICB9LCB7fSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGhpZXJhcmNoaWNhbEdyaWRSZWNvcmQ6IElFeHBvcnRSZWNvcmQgPSB7XG4gICAgICAgICAgICAgICAgZGF0YTogZGF0YVdpdGhvdXRDaGlsZHJlbixcbiAgICAgICAgICAgICAgICBsZXZlbDogMCxcbiAgICAgICAgICAgICAgICB0eXBlOiBFeHBvcnRSZWNvcmRUeXBlLkhpZXJhcmNoaWNhbEdyaWRSZWNvcmQsXG4gICAgICAgICAgICAgICAgb3duZXI6IGdyaWQsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLmZsYXRSZWNvcmRzLnB1c2goaGllcmFyY2hpY2FsR3JpZFJlY29yZCk7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgaXNsYW5kIG9mIGNoaWxkTGF5b3V0TGlzdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGg6IElQYXRoU2VnbWVudCA9IHtcbiAgICAgICAgICAgICAgICAgICAgcm93SUQ6IGlzbGFuZC5wcmltYXJ5S2V5ID8gZW50cnlbaXNsYW5kLnByaW1hcnlLZXldIDogZW50cnksXG4gICAgICAgICAgICAgICAgICAgIHJvd0lzbGFuZEtleTogaXNsYW5kLmtleVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpc2xhbmRHcmlkID0gZ3JpZD8uZ3JpZEFQSS5nZXRDaGlsZEdyaWQoW3BhdGhdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlSZWNvcmREYXRhID0gdGhpcy5wcmVwYXJlSXNsYW5kRGF0YShpc2xhbmQsIGlzbGFuZEdyaWQsIGVudHJ5W2lzbGFuZC5rZXldKSB8fCBbXTtcblxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsQ2hpbGRDb2x1bW5zQW5kRGF0YShpc2xhbmQsIGtleVJlY29yZERhdGEsIGV4cGFuc2lvblN0YXRlVmFsLCBpc2xhbmRHcmlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcHJlcGFyZUlzbGFuZERhdGEoaXNsYW5kOiBhbnksIGlzbGFuZEdyaWQ6IEdyaWRUeXBlLCBkYXRhOiBhbnlbXSk6IGFueVtdIHtcbiAgICAgICAgaWYgKGlzbGFuZEdyaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgaGFzRmlsdGVyaW5nID0gKGlzbGFuZEdyaWQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlICYmXG4gICAgICAgICAgICAgICAgaXNsYW5kR3JpZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUuZmlsdGVyaW5nT3BlcmFuZHMubGVuZ3RoID4gMCkgfHxcbiAgICAgICAgICAgICAgICAoaXNsYW5kR3JpZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSAmJlxuICAgICAgICAgICAgICAgICAgICBpc2xhbmRHcmlkLmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLmZpbHRlcmluZ09wZXJhbmRzLmxlbmd0aCA+IDApO1xuXG4gICAgICAgICAgICBjb25zdCBoYXNTb3J0aW5nID0gaXNsYW5kR3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMgJiZcbiAgICAgICAgICAgICAgICBpc2xhbmRHcmlkLnNvcnRpbmdFeHByZXNzaW9ucy5sZW5ndGggPiAwO1xuXG4gICAgICAgICAgICBjb25zdCBza2lwT3BlcmF0aW9ucyA9XG4gICAgICAgICAgICAgICAgKCFoYXNGaWx0ZXJpbmcgfHwgIXRoaXMub3B0aW9ucy5pZ25vcmVGaWx0ZXJpbmcpICYmXG4gICAgICAgICAgICAgICAgKCFoYXNTb3J0aW5nIHx8ICF0aGlzLm9wdGlvbnMuaWdub3JlU29ydGluZyk7XG5cbiAgICAgICAgICAgIGlmIChza2lwT3BlcmF0aW9ucykge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBpc2xhbmRHcmlkLmZpbHRlcmVkU29ydGVkRGF0YTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc0ZpbHRlcmluZyAmJiAhdGhpcy5vcHRpb25zLmlnbm9yZUZpbHRlcmluZykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJpbmdTdGF0ZTogSUZpbHRlcmluZ1N0YXRlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnNUcmVlOiBpc2xhbmRHcmlkLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2VkRXhwcmVzc2lvbnNUcmVlOiBpc2xhbmRHcmlkLmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyYXRlZ3k6IGlzbGFuZEdyaWQuZmlsdGVyU3RyYXRlZ3lcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBkYXRhID0gRmlsdGVyVXRpbC5maWx0ZXIoZGF0YSwgZmlsdGVyaW5nU3RhdGUsIGlzbGFuZEdyaWQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChoYXNTb3J0aW5nICYmICF0aGlzLm9wdGlvbnMuaWdub3JlU29ydGluZykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zb3J0ID0gY2xvbmVWYWx1ZShpc2xhbmRHcmlkLnNvcnRpbmdFeHByZXNzaW9uc1swXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IERhdGFVdGlsLnNvcnQoZGF0YSwgaXNsYW5kR3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMsIGlzbGFuZEdyaWQuc29ydFN0cmF0ZWd5LCBpc2xhbmRHcmlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBoYXNGaWx0ZXJpbmcgPSAoaXNsYW5kLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSAmJlxuICAgICAgICAgICAgICAgIGlzbGFuZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUuZmlsdGVyaW5nT3BlcmFuZHMubGVuZ3RoID4gMCkgfHxcbiAgICAgICAgICAgICAgICAoaXNsYW5kLmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlICYmXG4gICAgICAgICAgICAgICAgICAgIGlzbGFuZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZS5maWx0ZXJpbmdPcGVyYW5kcy5sZW5ndGggPiAwKTtcblxuICAgICAgICAgICAgY29uc3QgaGFzU29ydGluZyA9IGlzbGFuZC5zb3J0aW5nRXhwcmVzc2lvbnMgJiZcbiAgICAgICAgICAgICAgICBpc2xhbmQuc29ydGluZ0V4cHJlc3Npb25zLmxlbmd0aCA+IDA7XG5cbiAgICAgICAgICAgIGNvbnN0IHNraXBPcGVyYXRpb25zID1cbiAgICAgICAgICAgICAgICAoIWhhc0ZpbHRlcmluZyB8fCB0aGlzLm9wdGlvbnMuaWdub3JlRmlsdGVyaW5nKSAmJlxuICAgICAgICAgICAgICAgICghaGFzU29ydGluZyB8fCB0aGlzLm9wdGlvbnMuaWdub3JlU29ydGluZyk7XG5cbiAgICAgICAgICAgIGlmICghc2tpcE9wZXJhdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzRmlsdGVyaW5nICYmICF0aGlzLm9wdGlvbnMuaWdub3JlRmlsdGVyaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmluZ1N0YXRlOiBJRmlsdGVyaW5nU3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uc1RyZWU6IGlzbGFuZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlZEV4cHJlc3Npb25zVHJlZTogaXNsYW5kLmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyYXRlZ3k6IGlzbGFuZC5maWx0ZXJTdHJhdGVneVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBGaWx0ZXJVdGlsLmZpbHRlcihkYXRhLCBmaWx0ZXJpbmdTdGF0ZSwgaXNsYW5kKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaGFzU29ydGluZyAmJiAhdGhpcy5vcHRpb25zLmlnbm9yZVNvcnRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc29ydCA9IGNsb25lVmFsdWUoaXNsYW5kLnNvcnRpbmdFeHByZXNzaW9uc1swXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IERhdGFVdGlsLnNvcnQoZGF0YSwgaXNsYW5kLnNvcnRpbmdFeHByZXNzaW9ucywgaXNsYW5kLnNvcnRTdHJhdGVneSwgaXNsYW5kKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFsbENoaWxkQ29sdW1uc0FuZERhdGEoaXNsYW5kOiBhbnksXG4gICAgICAgIGNoaWxkRGF0YTogYW55W10sIGV4cGFuc2lvblN0YXRlVmFsOiBib29sZWFuLCBncmlkOiBHcmlkVHlwZSkge1xuICAgICAgICBjb25zdCBjb2x1bW5MaXN0ID0gdGhpcy5fb3duZXJzTWFwLmdldChpc2xhbmQpLmNvbHVtbnM7XG4gICAgICAgIGNvbnN0IGNvbHVtbkhlYWRlciA9IGNvbHVtbkxpc3RcbiAgICAgICAgICAgIC5maWx0ZXIoY29sID0+IGNvbC5oZWFkZXJUeXBlID09PSBIZWFkZXJUeXBlLkNvbHVtbkhlYWRlcilcbiAgICAgICAgICAgIC5tYXAoY29sID0+IGNvbC5oZWFkZXIgPyBjb2wuaGVhZGVyIDogY29sLmZpZWxkKTtcblxuICAgICAgICBjb25zdCBoZWFkZXJSZWNvcmQ6IElFeHBvcnRSZWNvcmQgPSB7XG4gICAgICAgICAgICBkYXRhOiBjb2x1bW5IZWFkZXIsXG4gICAgICAgICAgICBsZXZlbDogaXNsYW5kLmxldmVsLFxuICAgICAgICAgICAgdHlwZTogRXhwb3J0UmVjb3JkVHlwZS5IZWFkZXJSZWNvcmQsXG4gICAgICAgICAgICBvd25lcjogaXNsYW5kLFxuICAgICAgICAgICAgaGlkZGVuOiAhZXhwYW5zaW9uU3RhdGVWYWxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoY2hpbGREYXRhICYmIGNoaWxkRGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmZsYXRSZWNvcmRzLnB1c2goaGVhZGVyUmVjb3JkKTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCByZWMgb2YgY2hpbGREYXRhKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwb3J0UmVjb3JkOiBJRXhwb3J0UmVjb3JkID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiByZWMsXG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiBpc2xhbmQubGV2ZWwsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IEV4cG9ydFJlY29yZFR5cGUuSGllcmFyY2hpY2FsR3JpZFJlY29yZCxcbiAgICAgICAgICAgICAgICAgICAgb3duZXI6IGlzbGFuZCxcbiAgICAgICAgICAgICAgICAgICAgaGlkZGVuOiAhZXhwYW5zaW9uU3RhdGVWYWxcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdGhpcy5mbGF0UmVjb3Jkcy5wdXNoKGV4cG9ydFJlY29yZCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNsYW5kLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNsYW5kRXhwYW5zaW9uU3RhdGVWYWwgPSBncmlkID09PSB1bmRlZmluZWQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UgOlxuICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC5leHBhbnNpb25TdGF0ZXMuaGFzKHJlYykgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWQuZXhwYW5zaW9uU3RhdGVzLmdldChyZWMpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkSXNsYW5kIG9mIGlzbGFuZC5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aDogSVBhdGhTZWdtZW50ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd0lEOiBjaGlsZElzbGFuZC5wcmltYXJ5S2V5ID8gcmVjW2NoaWxkSXNsYW5kLnByaW1hcnlLZXldIDogcmVjLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd0lzbGFuZEtleTogY2hpbGRJc2xhbmQua2V5XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZElzbGFuZEdyaWQgPSBncmlkPy5ncmlkQVBJLmdldENoaWxkR3JpZChbcGF0aF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5UmVjb3JkRGF0YSA9IHRoaXMucHJlcGFyZUlzbGFuZERhdGEoaXNsYW5kLCBjaGlsZElzbGFuZEdyaWQsIHJlY1tjaGlsZElzbGFuZC5rZXldKSB8fCBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRBbGxDaGlsZENvbHVtbnNBbmREYXRhKGNoaWxkSXNsYW5kLCBrZXlSZWNvcmREYXRhLCBpc2xhbmRFeHBhbnNpb25TdGF0ZVZhbCwgY2hpbGRJc2xhbmRHcmlkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcHJlcGFyZUdyaWREYXRhKGdyaWQ6IEdyaWRUeXBlLCBoYXNGaWx0ZXJpbmc6IGJvb2xlYW4sIGhhc1NvcnRpbmc6IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3QgZ3JvdXBlZEdyaWRHcm91cGluZ1N0YXRlOiBJR3JvdXBpbmdTdGF0ZSA9IHtcbiAgICAgICAgICAgIGV4cHJlc3Npb25zOiBncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnMsXG4gICAgICAgICAgICBleHBhbnNpb246IGdyaWQuZ3JvdXBpbmdFeHBhbnNpb25TdGF0ZSxcbiAgICAgICAgICAgIGRlZmF1bHRFeHBhbmRlZDogZ3JpZC5ncm91cHNFeHBhbmRlZCxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBoYXNHcm91cGluZyA9IGdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucyAmJlxuICAgICAgICAgICAgZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zLmxlbmd0aCA+IDA7XG5cbiAgICAgICAgY29uc3Qgc2tpcE9wZXJhdGlvbnMgPVxuICAgICAgICAgICAgKCFoYXNGaWx0ZXJpbmcgfHwgIXRoaXMub3B0aW9ucy5pZ25vcmVGaWx0ZXJpbmcpICYmXG4gICAgICAgICAgICAoIWhhc1NvcnRpbmcgfHwgIXRoaXMub3B0aW9ucy5pZ25vcmVTb3J0aW5nKSAmJlxuICAgICAgICAgICAgKCFoYXNHcm91cGluZyB8fCAhdGhpcy5vcHRpb25zLmlnbm9yZUdyb3VwaW5nKTtcblxuICAgICAgICBpZiAoc2tpcE9wZXJhdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChoYXNHcm91cGluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkR3JvdXBlZERhdGEoZ3JpZCwgZ3JpZC5ncm91cHNSZWNvcmRzLCBncm91cGVkR3JpZEdyb3VwaW5nU3RhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEZsYXREYXRhKGdyaWQuZmlsdGVyZWRTb3J0ZWREYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBncmlkRGF0YSA9IGdyaWQuZGF0YTtcblxuICAgICAgICAgICAgaWYgKGhhc0ZpbHRlcmluZyAmJiAhdGhpcy5vcHRpb25zLmlnbm9yZUZpbHRlcmluZykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmluZ1N0YXRlOiBJRmlsdGVyaW5nU3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25zVHJlZTogZ3JpZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUsXG4gICAgICAgICAgICAgICAgICAgIGFkdmFuY2VkRXhwcmVzc2lvbnNUcmVlOiBncmlkLmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLFxuICAgICAgICAgICAgICAgICAgICBzdHJhdGVneTogZ3JpZC5maWx0ZXJTdHJhdGVneVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBncmlkRGF0YSA9IEZpbHRlclV0aWwuZmlsdGVyKGdyaWREYXRhLCBmaWx0ZXJpbmdTdGF0ZSwgZ3JpZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChoYXNTb3J0aW5nICYmICF0aGlzLm9wdGlvbnMuaWdub3JlU29ydGluZykge1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IFdlIHNob3VsZCBkcm9wIHN1cHBvcnQgZm9yIHRoaXMgc2luY2UgaW4gYSBncm91cGVkIGdyaWQgaXQgZG9lc24ndCBtYWtlIHNlbnNlXG4gICAgICAgICAgICAgICAgLy8gdGhpcy5fc29ydCA9ICFpc0dyb3VwZWRHcmlkID9cbiAgICAgICAgICAgICAgICAvLyAgICAgY2xvbmVWYWx1ZShncmlkLnNvcnRpbmdFeHByZXNzaW9uc1swXSkgOlxuICAgICAgICAgICAgICAgIC8vICAgICBncmlkLnNvcnRpbmdFeHByZXNzaW9ucy5sZW5ndGggPiAxID9cbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIGNsb25lVmFsdWUoZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnNbMV0pIDpcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIGNsb25lVmFsdWUoZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnNbMF0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cHJlc3Npb25zID0gZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zID8gZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zLmNvbmNhdChncmlkLnNvcnRpbmdFeHByZXNzaW9ucyB8fCBbXSkgOiBncmlkLnNvcnRpbmdFeHByZXNzaW9ucztcbiAgICAgICAgICAgICAgICBncmlkRGF0YSA9IERhdGFVdGlsLnNvcnQoZ3JpZERhdGEsIGV4cHJlc3Npb25zLCBncmlkLnNvcnRTdHJhdGVneSwgZ3JpZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChoYXNHcm91cGluZyAmJiAhdGhpcy5vcHRpb25zLmlnbm9yZUdyb3VwaW5nKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBzUmVjb3JkcyA9IFtdO1xuICAgICAgICAgICAgICAgIERhdGFVdGlsLmdyb3VwKGNsb25lQXJyYXkoZ3JpZERhdGEpLCBncm91cGVkR3JpZEdyb3VwaW5nU3RhdGUsIGdyaWQuZ3JvdXBTdHJhdGVneSwgZ3JpZCwgZ3JvdXBzUmVjb3Jkcyk7XG4gICAgICAgICAgICAgICAgZ3JpZERhdGEgPSBncm91cHNSZWNvcmRzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaGFzR3JvdXBpbmcgJiYgIXRoaXMub3B0aW9ucy5pZ25vcmVHcm91cGluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkR3JvdXBlZERhdGEoZ3JpZCwgZ3JpZERhdGEsIGdyb3VwZWRHcmlkR3JvdXBpbmdTdGF0ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRmxhdERhdGEoZ3JpZERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcmVwYXJlVHJlZUdyaWREYXRhKGdyaWQ6IEdyaWRUeXBlLCBoYXNGaWx0ZXJpbmc6IGJvb2xlYW4sIGhhc1NvcnRpbmc6IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3Qgc2tpcE9wZXJhdGlvbnMgPVxuICAgICAgICAgICAgKCFoYXNGaWx0ZXJpbmcgfHwgIXRoaXMub3B0aW9ucy5pZ25vcmVGaWx0ZXJpbmcpICYmXG4gICAgICAgICAgICAoIWhhc1NvcnRpbmcgfHwgIXRoaXMub3B0aW9ucy5pZ25vcmVTb3J0aW5nKTtcblxuICAgICAgICBpZiAoc2tpcE9wZXJhdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkVHJlZUdyaWREYXRhKGdyaWQucHJvY2Vzc2VkUm9vdFJlY29yZHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGdyaWREYXRhID0gZ3JpZC5yb290UmVjb3JkcztcblxuICAgICAgICAgICAgaWYgKGhhc0ZpbHRlcmluZyAmJiAhdGhpcy5vcHRpb25zLmlnbm9yZUZpbHRlcmluZykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmluZ1N0YXRlOiBJRmlsdGVyaW5nU3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25zVHJlZTogZ3JpZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUsXG4gICAgICAgICAgICAgICAgICAgIGFkdmFuY2VkRXhwcmVzc2lvbnNUcmVlOiBncmlkLmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLFxuICAgICAgICAgICAgICAgICAgICBzdHJhdGVneTogKGdyaWQuZmlsdGVyU3RyYXRlZ3kpID8gZ3JpZC5maWx0ZXJTdHJhdGVneSA6IG5ldyBUcmVlR3JpZEZpbHRlcmluZ1N0cmF0ZWd5KClcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgZ3JpZERhdGEgPSBmaWx0ZXJpbmdTdGF0ZS5zdHJhdGVneVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGdyaWREYXRhLCBmaWx0ZXJpbmdTdGF0ZS5leHByZXNzaW9uc1RyZWUsIGZpbHRlcmluZ1N0YXRlLmFkdmFuY2VkRXhwcmVzc2lvbnNUcmVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGhhc1NvcnRpbmcgJiYgIXRoaXMub3B0aW9ucy5pZ25vcmVTb3J0aW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc29ydCA9IGNsb25lVmFsdWUoZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnNbMF0pO1xuXG4gICAgICAgICAgICAgICAgZ3JpZERhdGEgPSBEYXRhVXRpbC50cmVlR3JpZFNvcnQoZ3JpZERhdGEsIGdyaWQuc29ydGluZ0V4cHJlc3Npb25zLCBncmlkLnNvcnRTdHJhdGVneSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuYWRkVHJlZUdyaWREYXRhKGdyaWREYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYWRkVHJlZUdyaWREYXRhKHJlY29yZHM6IElUcmVlR3JpZFJlY29yZFtdLCBwYXJlbnRFeHBhbmRlZDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICAgICAgaWYgKCFyZWNvcmRzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiByZWNvcmRzKSB7XG4gICAgICAgICAgICBjb25zdCBoaWVyYXJjaGljYWxSZWNvcmQ6IElFeHBvcnRSZWNvcmQgPSB7XG4gICAgICAgICAgICAgICAgZGF0YTogcmVjb3JkLmRhdGEsXG4gICAgICAgICAgICAgICAgbGV2ZWw6IHJlY29yZC5sZXZlbCxcbiAgICAgICAgICAgICAgICBoaWRkZW46ICFwYXJlbnRFeHBhbmRlZCxcbiAgICAgICAgICAgICAgICB0eXBlOiBFeHBvcnRSZWNvcmRUeXBlLlRyZWVHcmlkUmVjb3JkXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5mbGF0UmVjb3Jkcy5wdXNoKGhpZXJhcmNoaWNhbFJlY29yZCk7XG4gICAgICAgICAgICB0aGlzLmFkZFRyZWVHcmlkRGF0YShyZWNvcmQuY2hpbGRyZW4sIHBhcmVudEV4cGFuZGVkICYmIHJlY29yZC5leHBhbmRlZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZEZsYXREYXRhKHJlY29yZHM6IGFueSkge1xuICAgICAgICBpZiAoIXJlY29yZHMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiByZWNvcmRzKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhOiBJRXhwb3J0UmVjb3JkID0ge1xuICAgICAgICAgICAgICAgIGRhdGE6IHJlY29yZCxcbiAgICAgICAgICAgICAgICB0eXBlOiBFeHBvcnRSZWNvcmRUeXBlLkRhdGFSZWNvcmQsXG4gICAgICAgICAgICAgICAgbGV2ZWw6IDBcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuZmxhdFJlY29yZHMucHVzaChkYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYWRkR3JvdXBlZERhdGEoZ3JpZDogR3JpZFR5cGUsIHJlY29yZHM6IElHcm91cEJ5UmVjb3JkW10sXG4gICAgICAgIGdyb3VwaW5nU3RhdGU6IElHcm91cGluZ1N0YXRlLCBwYXJlbnRFeHBhbmRlZDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICAgICAgaWYgKCFyZWNvcmRzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaXJzdENvbCA9IHRoaXMuX293bmVyc01hcC5nZXQoREVGQVVMVF9PV05FUikuY29sdW1uc1swXS5maWVsZDtcblxuICAgICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiByZWNvcmRzKSB7XG4gICAgICAgICAgICBsZXQgcmVjb3JkVmFsID0gcmVjb3JkLnZhbHVlO1xuXG4gICAgICAgICAgICBjb25zdCBoaWVyYXJjaHkgPSBnZXRIaWVyYXJjaHkocmVjb3JkKTtcbiAgICAgICAgICAgIGNvbnN0IGV4cGFuZFN0YXRlOiBJR3JvdXBCeUV4cGFuZFN0YXRlID0gZ3JvdXBpbmdTdGF0ZS5leHBhbnNpb24uZmluZCgocykgPT5cbiAgICAgICAgICAgICAgICBpc0hpZXJhcmNoeU1hdGNoKHMuaGllcmFyY2h5IHx8IFt7IGZpZWxkTmFtZTogcmVjb3JkLmV4cHJlc3Npb24uZmllbGROYW1lLCB2YWx1ZTogcmVjb3JkVmFsIH1dLCBoaWVyYXJjaHkpKTtcbiAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkID0gZXhwYW5kU3RhdGUgPyBleHBhbmRTdGF0ZS5leHBhbmRlZCA6IGdyb3VwaW5nU3RhdGUuZGVmYXVsdEV4cGFuZGVkO1xuXG4gICAgICAgICAgICBjb25zdCBpc0RhdGUgPSByZWNvcmRWYWwgaW5zdGFuY2VvZiBEYXRlO1xuXG4gICAgICAgICAgICBpZiAoaXNEYXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGltZVpvbmVPZmZzZXQgPSByZWNvcmRWYWwuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzb1N0cmluZyA9IChuZXcgRGF0ZShyZWNvcmRWYWwgLSB0aW1lWm9uZU9mZnNldCkpLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcGlwZSA9IG5ldyBEYXRlUGlwZShncmlkLmxvY2FsZSk7XG4gICAgICAgICAgICAgICAgcmVjb3JkVmFsID0gcGlwZS50cmFuc2Zvcm0oaXNvU3RyaW5nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZ3JvdXBFeHByZXNzaW9uTmFtZSA9IHJlY29yZC5jb2x1bW4gJiYgcmVjb3JkLmNvbHVtbi5oZWFkZXIgP1xuICAgICAgICAgICAgICAgIHJlY29yZC5jb2x1bW4uaGVhZGVyIDpcbiAgICAgICAgICAgICAgICByZWNvcmQuZXhwcmVzc2lvbi5maWVsZE5hbWU7XG5cbiAgICAgICAgICAgIHJlY29yZFZhbCA9IHJlY29yZFZhbCAhPT0gbnVsbCA/IHJlY29yZFZhbCA6ICcnO1xuXG4gICAgICAgICAgICBjb25zdCBncm91cEV4cHJlc3Npb246IElFeHBvcnRSZWNvcmQgPSB7XG4gICAgICAgICAgICAgICAgZGF0YTogeyBbZmlyc3RDb2xdOiBgJHtncm91cEV4cHJlc3Npb25OYW1lfTogJHtyZWNvcmRWYWx9ICgke3JlY29yZC5yZWNvcmRzLmxlbmd0aH0pYCB9LFxuICAgICAgICAgICAgICAgIGxldmVsOiByZWNvcmQubGV2ZWwsXG4gICAgICAgICAgICAgICAgaGlkZGVuOiAhcGFyZW50RXhwYW5kZWQsXG4gICAgICAgICAgICAgICAgdHlwZTogRXhwb3J0UmVjb3JkVHlwZS5Hcm91cGVkUmVjb3JkLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5mbGF0UmVjb3Jkcy5wdXNoKGdyb3VwRXhwcmVzc2lvbik7XG5cbiAgICAgICAgICAgIGlmIChyZWNvcmQuZ3JvdXBzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEdyb3VwZWREYXRhKGdyaWQsIHJlY29yZC5ncm91cHMsIGdyb3VwaW5nU3RhdGUsIGV4cGFuZGVkICYmIHBhcmVudEV4cGFuZGVkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93UmVjb3JkcyA9IHJlY29yZC5yZWNvcmRzO1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCByb3dSZWNvcmQgb2Ygcm93UmVjb3Jkcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50UmVjb3JkOiBJRXhwb3J0UmVjb3JkID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogcm93UmVjb3JkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IHJlY29yZC5sZXZlbCArIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBoaWRkZW46ICEoZXhwYW5kZWQgJiYgcGFyZW50RXhwYW5kZWQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogRXhwb3J0UmVjb3JkVHlwZS5EYXRhUmVjb3JkLFxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmxhdFJlY29yZHMucHVzaChjdXJyZW50UmVjb3JkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENvbHVtbnMoY29sdW1uczogQ29sdW1uVHlwZVtdKTogSUNvbHVtbkxpc3Qge1xuICAgICAgICBjb25zdCBjb2xMaXN0ID0gW107XG4gICAgICAgIGNvbnN0IGNvbFdpZHRoTGlzdCA9IFtdO1xuICAgICAgICBjb25zdCBoaWRkZW5Db2x1bW5zID0gW107XG4gICAgICAgIGxldCBpbmRleE9mTGFzdFBpbm5lZENvbHVtbiA9IC0xO1xuICAgICAgICBsZXQgbGFzdFZpc2libGVDb2x1bW5JbmRleCA9IC0xO1xuICAgICAgICBsZXQgbWF4TGV2ZWwgPSAwO1xuXG4gICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW5IZWFkZXIgPSAhRXhwb3J0VXRpbGl0aWVzLmlzTnVsbE9yV2hpdGVzcGFjZXMoY29sdW1uLmhlYWRlcikgPyBjb2x1bW4uaGVhZGVyIDogY29sdW1uLmZpZWxkO1xuICAgICAgICAgICAgY29uc3QgZXhwb3J0Q29sdW1uID0gIWNvbHVtbi5oaWRkZW4gfHwgdGhpcy5vcHRpb25zLmlnbm9yZUNvbHVtbnNWaXNpYmlsaXR5O1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLm9wdGlvbnMuaWdub3JlQ29sdW1uc09yZGVyIHx8IHRoaXMub3B0aW9ucy5pZ25vcmVDb2x1bW5zVmlzaWJpbGl0eSA/IGNvbHVtbi5pbmRleCA6IGNvbHVtbi52aXNpYmxlSW5kZXg7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW5XaWR0aCA9IE51bWJlcihjb2x1bW4ud2lkdGg/LnNsaWNlKDAsIC0yKSkgfHwgREVGQVVMVF9DT0xVTU5fV0lEVEg7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW5MZXZlbCA9ICF0aGlzLm9wdGlvbnMuaWdub3JlTXVsdGlDb2x1bW5IZWFkZXJzID8gY29sdW1uLmxldmVsIDogMDtcblxuICAgICAgICAgICAgY29uc3QgaXNNdWx0aUNvbEhlYWRlciA9IGNvbHVtbi5jb2x1bW5Hcm91cDtcbiAgICAgICAgICAgIGNvbnN0IGNvbFNwYW4gPSBpc011bHRpQ29sSGVhZGVyID9cbiAgICAgICAgICAgICAgICBjb2x1bW4uYWxsQ2hpbGRyZW5cbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihjaCA9PiAhKGNoLmNvbHVtbkdyb3VwKSAmJiAoIXRoaXMub3B0aW9ucy5pZ25vcmVDb2x1bW5zVmlzaWJpbGl0eSA/ICFjaC5oaWRkZW4gOiB0cnVlKSlcbiAgICAgICAgICAgICAgICAgICAgLmxlbmd0aCA6XG4gICAgICAgICAgICAgICAgMTtcblxuICAgICAgICAgICAgY29uc3QgY29sdW1uSW5mbzogSUNvbHVtbkluZm8gPSB7XG4gICAgICAgICAgICAgICAgaGVhZGVyOiBjb2x1bW5IZWFkZXIsXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6IGNvbHVtbi5kYXRhVHlwZSxcbiAgICAgICAgICAgICAgICBmaWVsZDogY29sdW1uLmZpZWxkLFxuICAgICAgICAgICAgICAgIHNraXA6ICFleHBvcnRDb2x1bW4sXG4gICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBjb2x1bW4uZm9ybWF0dGVyLFxuICAgICAgICAgICAgICAgIHNraXBGb3JtYXR0ZXI6IGZhbHNlLFxuXG4gICAgICAgICAgICAgICAgaGVhZGVyVHlwZTogaXNNdWx0aUNvbEhlYWRlciA/IEhlYWRlclR5cGUuTXVsdGlDb2x1bW5IZWFkZXIgOiBIZWFkZXJUeXBlLkNvbHVtbkhlYWRlcixcbiAgICAgICAgICAgICAgICBjb2x1bW5TcGFuOiBjb2xTcGFuLFxuICAgICAgICAgICAgICAgIGxldmVsOiBjb2x1bW5MZXZlbCxcbiAgICAgICAgICAgICAgICBzdGFydEluZGV4OiBpbmRleCxcbiAgICAgICAgICAgICAgICBwaW5uZWRJbmRleDogIWNvbHVtbi5waW5uZWQgP1xuICAgICAgICAgICAgICAgICAgICBOdW1iZXIuTUFYX1ZBTFVFIDpcbiAgICAgICAgICAgICAgICAgICAgIWNvbHVtbi5oaWRkZW4gP1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmdyaWQucGlubmVkQ29sdW1ucy5pbmRleE9mKGNvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgICAgIDogTmFOLFxuICAgICAgICAgICAgICAgIGNvbHVtbkdyb3VwUGFyZW50OiBjb2x1bW4ucGFyZW50ID8gY29sdW1uLnBhcmVudCA6IG51bGwsXG4gICAgICAgICAgICAgICAgY29sdW1uR3JvdXA6IGlzTXVsdGlDb2xIZWFkZXIgPyBjb2x1bW4gOiBudWxsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoY29sdW1uLmRhdGFUeXBlID09PSAnY3VycmVuY3knKSB7XG4gICAgICAgICAgICAgICAgY29sdW1uSW5mby5jdXJyZW5jeUNvZGUgPSBjb2x1bW4ucGlwZUFyZ3MuY3VycmVuY3lDb2RlXG4gICAgICAgICAgICAgICAgICAgID8gY29sdW1uLnBpcGVBcmdzLmN1cnJlbmN5Q29kZVxuICAgICAgICAgICAgICAgICAgICA6IGdldExvY2FsZUN1cnJlbmN5Q29kZSh0aGlzLmxvY2FsZSk7XG5cbiAgICAgICAgICAgICAgICBjb2x1bW5JbmZvLmRpc3BsYXlGb3JtYXQgPSBjb2x1bW4ucGlwZUFyZ3MuZGlzcGxheVxuICAgICAgICAgICAgICAgICAgICA/IGNvbHVtbi5waXBlQXJncy5kaXNwbGF5XG4gICAgICAgICAgICAgICAgICAgIDogJ3N5bWJvbCc7XG5cbiAgICAgICAgICAgICAgICBjb2x1bW5JbmZvLmRpZ2l0c0luZm8gPSBjb2x1bW4ucGlwZUFyZ3MuZGlnaXRzSW5mb1xuICAgICAgICAgICAgICAgICAgICA/IGNvbHVtbi5waXBlQXJncy5kaWdpdHNJbmZvXG4gICAgICAgICAgICAgICAgICAgIDogJzEuMC0yJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5pZ25vcmVDb2x1bW5zT3JkZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uSW5mby5zdGFydEluZGV4ICE9PSBjb2x1bW5JbmZvLnBpbm5lZEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbkluZm8ucGlubmVkSW5kZXggPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbHVtbi5sZXZlbCA+IG1heExldmVsICYmICF0aGlzLm9wdGlvbnMuaWdub3JlTXVsdGlDb2x1bW5IZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgbWF4TGV2ZWwgPSBjb2x1bW4ubGV2ZWw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBjb2xMaXN0LnB1c2goY29sdW1uSW5mbyk7XG4gICAgICAgICAgICAgICAgY29sV2lkdGhMaXN0LnB1c2goY29sdW1uV2lkdGgpO1xuICAgICAgICAgICAgICAgIGxhc3RWaXNpYmxlQ29sdW1uSW5kZXggPSBNYXRoLm1heChsYXN0VmlzaWJsZUNvbHVtbkluZGV4LCBjb2xMaXN0LmluZGV4T2YoY29sdW1uSW5mbykpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBoaWRkZW5Db2x1bW5zLnB1c2goY29sdW1uSW5mbyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb2x1bW4ucGlubmVkICYmIGV4cG9ydENvbHVtbiAmJiBjb2x1bW5JbmZvLmhlYWRlclR5cGUgPT09IEhlYWRlclR5cGUuQ29sdW1uSGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW4rKztcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuICAgICAgICAvL0FwcGVuZCB0aGUgaGlkZGVuIGNvbHVtbnMgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdFxuICAgICAgICBoaWRkZW5Db2x1bW5zLmZvckVhY2goKGhpZGRlbkNvbHVtbikgPT4ge1xuICAgICAgICAgICAgY29sTGlzdFsrK2xhc3RWaXNpYmxlQ29sdW1uSW5kZXhdID0gaGlkZGVuQ29sdW1uO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByZXN1bHQ6IElDb2x1bW5MaXN0ID0ge1xuICAgICAgICAgICAgY29sdW1uczogY29sTGlzdCxcbiAgICAgICAgICAgIGNvbHVtbldpZHRoczogY29sV2lkdGhMaXN0LFxuICAgICAgICAgICAgaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW4sXG4gICAgICAgICAgICBtYXhMZXZlbFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYXBIaWVyYXJjaGljYWxHcmlkQ29sdW1ucyhpc2xhbmQ6IGFueSwgZ3JpZERhdGE6IGFueSkge1xuICAgICAgICBsZXQgY29sdW1uTGlzdDogSUNvbHVtbkxpc3Q7XG4gICAgICAgIGxldCBrZXlEYXRhO1xuXG4gICAgICAgIGlmIChpc2xhbmQuYXV0b0dlbmVyYXRlKSB7XG4gICAgICAgICAgICBrZXlEYXRhID0gZ3JpZERhdGFbaXNsYW5kLmtleV07XG4gICAgICAgICAgICBjb25zdCBpc2xhbmRLZXlzID0gaXNsYW5kLmNoaWxkcmVuLm1hcChpID0+IGkua2V5KTtcblxuICAgICAgICAgICAgY29uc3QgaXNsYW5kRGF0YSA9IGtleURhdGEubWFwKGkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0l0ZW0gPSB7fTtcblxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGkpLm1hcChrID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc2xhbmRLZXlzLmluY2x1ZGVzKGspKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdJdGVtW2tdID0gaVtrXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld0l0ZW07XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29sdW1uTGlzdCA9IHRoaXMuZ2V0QXV0b0dlbmVyYXRlZENvbHVtbnMoaXNsYW5kRGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpc2xhbmRDb2x1bW5MaXN0ID0gaXNsYW5kLmNvbHVtbnM7XG4gICAgICAgICAgICBjb2x1bW5MaXN0ID0gdGhpcy5nZXRDb2x1bW5zKGlzbGFuZENvbHVtbkxpc3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fb3duZXJzTWFwLnNldChpc2xhbmQsIGNvbHVtbkxpc3QpO1xuXG4gICAgICAgIGlmIChpc2xhbmQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZElzbGFuZCBvZiBpc2xhbmQuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc2xhbmRLZXlEYXRhID0ga2V5RGF0YSAhPT0gdW5kZWZpbmVkID8ga2V5RGF0YVswXSA6IHt9O1xuICAgICAgICAgICAgICAgIHRoaXMubWFwSGllcmFyY2hpY2FsR3JpZENvbHVtbnMoY2hpbGRJc2xhbmQsIGlzbGFuZEtleURhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRBdXRvR2VuZXJhdGVkQ29sdW1ucyhkYXRhOiBhbnlbXSkge1xuICAgICAgICBjb25zdCBjb2xMaXN0ID0gW107XG4gICAgICAgIGNvbnN0IGNvbFdpZHRoTGlzdCA9IFtdO1xuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZGF0YVswXSk7XG5cbiAgICAgICAga2V5cy5mb3JFYWNoKChjb2xLZXksIGkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbkluZm86IElDb2x1bW5JbmZvID0ge1xuICAgICAgICAgICAgICAgIGhlYWRlcjogY29sS2V5LFxuICAgICAgICAgICAgICAgIGZpZWxkOiBjb2xLZXksXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgIHNraXA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGhlYWRlclR5cGU6IEhlYWRlclR5cGUuQ29sdW1uSGVhZGVyLFxuICAgICAgICAgICAgICAgIGNvbHVtblNwYW46IDEsXG4gICAgICAgICAgICAgICAgbGV2ZWw6IDAsXG4gICAgICAgICAgICAgICAgc3RhcnRJbmRleDogaSxcbiAgICAgICAgICAgICAgICBwaW5uZWRJbmRleDogTnVtYmVyLk1BWF9WQUxVRVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29sTGlzdC5wdXNoKGNvbHVtbkluZm8pO1xuICAgICAgICAgICAgY29sV2lkdGhMaXN0LnB1c2goREVGQVVMVF9DT0xVTU5fV0lEVEgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByZXN1bHQ6IElDb2x1bW5MaXN0ID0ge1xuICAgICAgICAgICAgY29sdW1uczogY29sTGlzdCxcbiAgICAgICAgICAgIGNvbHVtbldpZHRoczogY29sV2lkdGhMaXN0LFxuICAgICAgICAgICAgaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW46IC0xLFxuICAgICAgICAgICAgbWF4TGV2ZWw6IDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkUGl2b3RHcmlkQ29sdW1ucyhncmlkOiBhbnkpIHtcbiAgICAgICAgaWYgKGdyaWQubmF0aXZlRWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICdpZ3gtcGl2b3QtZ3JpZCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVuYWJsZWRSb3dzID0gZ3JpZC5waXZvdENvbmZpZ3VyYXRpb24ucm93cy5maWx0ZXIociA9PiByLmVuYWJsZWQpLm1hcCgociwgaSkgPT4gKHsgbmFtZTogci5tZW1iZXJOYW1lLCBsZXZlbDogaSB9KSk7XG5cbiAgICAgICAgdGhpcy5wcmVwYXJlUGl2b3RHcmlkQ29sdW1ucyhlbmFibGVkUm93cyk7XG4gICAgICAgIHRoaXMucGl2b3RHcmlkRmlsdGVyRmllbGRzQ291bnQgPSBlbmFibGVkUm93cy5sZW5ndGg7XG5cbiAgICAgICAgY29uc3QgY29sdW1uTGlzdCA9IHRoaXMuX293bmVyc01hcC5nZXQoREVGQVVMVF9PV05FUik7XG4gICAgICAgIGNvbHVtbkxpc3QuY29sdW1ucy51bnNoaWZ0KC4uLnRoaXMucGl2b3RHcmlkQ29sdW1ucyk7XG4gICAgICAgIGNvbHVtbkxpc3QuY29sdW1uV2lkdGhzLnVuc2hpZnQoLi4uQXJyYXkodGhpcy5waXZvdEdyaWRDb2x1bW5zLmxlbmd0aCkuZmlsbCgyMDApKTtcbiAgICAgICAgY29sdW1uTGlzdC5pbmRleE9mTGFzdFBpbm5lZENvbHVtbiA9IGVuYWJsZWRSb3dzLmxlbmd0aCAtIDE7XG4gICAgICAgIGNvbHVtbkxpc3QubWF4Um93TGV2ZWwgPSBlbmFibGVkUm93cy5sZW5ndGg7XG4gICAgICAgIHRoaXMuX293bmVyc01hcC5zZXQoREVGQVVMVF9PV05FUiwgY29sdW1uTGlzdCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcmVwYXJlUGl2b3RHcmlkQ29sdW1ucyhrZXlzOiBhbnksIGNvbHVtbkdyb3VwUGFyZW50Pzogc3RyaW5nKTogYW55IHtcbiAgICAgICAgaWYgKGtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc3RhcnRJbmRleCA9IDA7XG4gICAgICAgIGNvbnN0IGtleSA9IGtleXNbMF07XG4gICAgICAgIGNvbnN0IHJlY29yZHMgPSB0aGlzLmZsYXRSZWNvcmRzLm1hcChyID0+IHIuZGF0YSk7XG4gICAgICAgIGNvbnN0IGdyb3VwZWRSZWNvcmRzID0gcmVjb3Jkcy5yZWR1Y2UoKGhhc2gsIG9iaikgPT4gKHsuLi5oYXNoLCBbb2JqW2tleS5uYW1lXV06KCBoYXNoW29ialtrZXkubmFtZV1dIHx8IFtdKS5jb25jYXQob2JqKX0pLCB7fSlcblxuICAgICAgICBpZiAoY29sdW1uR3JvdXBQYXJlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hcEtleXMgPSBbLi4udGhpcy5waXZvdEdyaWRLZXlWYWx1ZU1hcC5rZXlzKCldO1xuICAgICAgICAgICAgY29uc3QgbWFwVmFsdWVzID0gWy4uLnRoaXMucGl2b3RHcmlkS2V5VmFsdWVNYXAudmFsdWVzKCldO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXMoZ3JvdXBlZFJlY29yZHMpKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBlZFJlY29yZHNba10gPSBncm91cGVkUmVjb3Jkc1trXS5maWx0ZXIocm93ID0+IG1hcEtleXMuZXZlcnkobWsgPT4gT2JqZWN0LmtleXMocm93KS5pbmNsdWRlcyhtaykpXG4gICAgICAgICAgICAgICAgICAgICYmIG1hcFZhbHVlcy5ldmVyeShtdiA9PiBPYmplY3QudmFsdWVzKHJvdykuaW5jbHVkZXMobXYpKSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoZ3JvdXBlZFJlY29yZHNba10ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBncm91cGVkUmVjb3Jkc1trXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXMoZ3JvdXBlZFJlY29yZHMpKSB7XG4gICAgICAgICAgICBjb25zdCByb3dTcGFuID0gZ3JvdXBlZFJlY29yZHNba10ubGVuZ3RoO1xuXG4gICAgICAgICAgICBjb25zdCByb3dEaW1lbnNpb25Db2x1bW46IElDb2x1bW5JbmZvID0ge1xuICAgICAgICAgICAgICAgIHJvd1NwYW4sXG4gICAgICAgICAgICAgICAgZmllbGQ6IGssXG4gICAgICAgICAgICAgICAgaGVhZGVyOiBrLFxuICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgICAgc2tpcDogZmFsc2UsXG4gICAgICAgICAgICAgICAgcGlubmVkSW5kZXg6IDAsXG4gICAgICAgICAgICAgICAgbGV2ZWw6IGtleS5sZXZlbCxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgaGVhZGVyVHlwZTogZ3JvdXBlZFJlY29yZHNba10ubGVuZ3RoID4gMSA/IEhlYWRlclR5cGUuTXVsdGlSb3dIZWFkZXIgOiBIZWFkZXJUeXBlLlJvd0hlYWRlcixcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChjb2x1bW5Hcm91cFBhcmVudCkge1xuICAgICAgICAgICAgICAgIHJvd0RpbWVuc2lvbkNvbHVtbi5jb2x1bW5Hcm91cFBhcmVudCA9IGNvbHVtbkdyb3VwUGFyZW50O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByb3dEaW1lbnNpb25Db2x1bW4uY29sdW1uR3JvdXAgPSBrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnBpdm90R3JpZENvbHVtbnMucHVzaChyb3dEaW1lbnNpb25Db2x1bW4pO1xuXG4gICAgICAgICAgICBpZiAoa2V5cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5waXZvdEdyaWRLZXlWYWx1ZU1hcC5zZXQoa2V5Lm5hbWUsIGspO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0tleXMgPSBrZXlzLmZpbHRlcihrZGQgPT4ga2RkICE9PSBrZXkpO1xuICAgICAgICAgICAgICAgIHRoaXMucHJlcGFyZVBpdm90R3JpZENvbHVtbnMobmV3S2V5cywgaylcbiAgICAgICAgICAgICAgICB0aGlzLnBpdm90R3JpZEtleVZhbHVlTWFwLmRlbGV0ZShrZXkubmFtZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0YXJ0SW5kZXggKz0gcm93U3BhbjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXREZWZhdWx0cygpIHtcbiAgICAgICAgdGhpcy5fc29ydCA9IG51bGw7XG4gICAgICAgIHRoaXMuZmxhdFJlY29yZHMgPSBbXTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0ge30gYXMgSWd4RXhwb3J0ZXJPcHRpb25zQmFzZTtcbiAgICAgICAgdGhpcy5fb3duZXJzTWFwLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGV4cG9ydERhdGFJbXBsZW1lbnRhdGlvbihkYXRhOiBhbnlbXSwgb3B0aW9uczogSWd4RXhwb3J0ZXJPcHRpb25zQmFzZSwgZG9uZTogKCkgPT4gdm9pZCk6IHZvaWQ7XG59XG4iXX0=
887
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1leHBvcnQtc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9zZXJ2aWNlcy9leHBvcnRlci1jb21tb24vYmFzZS1leHBvcnQtc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBa0IsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0gsT0FBTyxFQUFzQixRQUFRLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHckQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFFL0YsT0FBTyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBR2xGLE9BQU8sRUFBRSxRQUFRLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUdsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFdEUsTUFBTSxDQUFOLElBQVksZ0JBT1g7QUFQRCxXQUFZLGdCQUFnQjtJQUN4QixtREFBK0IsQ0FBQTtJQUMvQixxREFBaUMsQ0FBQTtJQUNqQyw2Q0FBeUIsQ0FBQTtJQUN6QixxRUFBaUQsQ0FBQTtJQUNqRCxpREFBNkIsQ0FBQTtJQUM3Qix1REFBbUMsQ0FBQTtBQUN2QyxDQUFDLEVBUFcsZ0JBQWdCLEtBQWhCLGdCQUFnQixRQU8zQjtBQUVELE1BQU0sQ0FBTixJQUFZLFVBS1g7QUFMRCxXQUFZLFVBQVU7SUFDbEIscUNBQXVCLENBQUE7SUFDdkIsMkNBQTZCLENBQUE7SUFDN0IsK0NBQWlDLENBQUE7SUFD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RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY2xvbmVBcnJheSwgY2xvbmVWYWx1ZSwgZm9ybWF0Q3VycmVuY3ksIElCYXNlRXZlbnRBcmdzLCByZXNvbHZlTmVzdGVkUGF0aCwgeWllbGRpbmdMb29wIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBHcmlkQ29sdW1uRGF0YVR5cGUsIERhdGFVdGlsIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2RhdGEtdXRpbCc7XG5pbXBvcnQgeyBFeHBvcnRVdGlsaXRpZXMgfSBmcm9tICcuL2V4cG9ydC11dGlsaXRpZXMnO1xuaW1wb3J0IHsgSWd4RXhwb3J0ZXJPcHRpb25zQmFzZSB9IGZyb20gJy4vZXhwb3J0ZXItb3B0aW9ucy1iYXNlJztcbmltcG9ydCB7IElUcmVlR3JpZFJlY29yZCB9IGZyb20gJy4uLy4uL2dyaWRzL3RyZWUtZ3JpZC90cmVlLWdyaWQuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBUcmVlR3JpZEZpbHRlcmluZ1N0cmF0ZWd5IH0gZnJvbSAnLi4vLi4vZ3JpZHMvdHJlZS1ncmlkL3RyZWUtZ3JpZC5maWx0ZXJpbmcuc3RyYXRlZ3knO1xuaW1wb3J0IHsgSUdyb3VwaW5nU3RhdGUgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZ3JvdXBieS1zdGF0ZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgZ2V0SGllcmFyY2h5LCBpc0hpZXJhcmNoeU1hdGNoIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL29wZXJhdGlvbnMnO1xuaW1wb3J0IHsgSUdyb3VwQnlFeHBhbmRTdGF0ZSB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9ncm91cGJ5LWV4cGFuZC1zdGF0ZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUZpbHRlcmluZ1N0YXRlIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2ZpbHRlcmluZy1zdGF0ZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRGF0ZVBpcGUsIGdldExvY2FsZUN1cnJlbmN5Q29kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJR3JvdXBCeVJlY29yZCB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9ncm91cGJ5LXJlY29yZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ29sdW1uVHlwZSwgR3JpZFR5cGUsIElQYXRoU2VnbWVudCB9IGZyb20gJy4uLy4uL2dyaWRzL2NvbW1vbi9ncmlkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBGaWx0ZXJVdGlsIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2ZpbHRlcmluZy1zdHJhdGVneSc7XG5cbmV4cG9ydCBlbnVtIEV4cG9ydFJlY29yZFR5cGUge1xuICAgIEdyb3VwZWRSZWNvcmQgPSAnR3JvdXBlZFJlY29yZCcsXG4gICAgVHJlZUdyaWRSZWNvcmQgPSAnVHJlZUdyaWRSZWNvcmQnLFxuICAgIERhdGFSZWNvcmQgPSAnRGF0YVJlY29yZCcsXG4gICAgSGllcmFyY2hpY2FsR3JpZFJlY29yZCA9ICdIaWVyYXJjaGljYWxHcmlkUmVjb3JkJyxcbiAgICBIZWFkZXJSZWNvcmQgPSAnSGVhZGVyUmVjb3JkJyxcbiAgICBQaXZvdEdyaWRSZWNvcmQgPSAnUGl2b3RHcmlkUmVjb3JkJ1xufVxuXG5leHBvcnQgZW51bSBIZWFkZXJUeXBlIHtcbiAgICBSb3dIZWFkZXIgPSAnUm93SGVhZGVyJyxcbiAgICBDb2x1bW5IZWFkZXIgPSAnQ29sdW1uSGVhZGVyJyxcbiAgICBNdWx0aVJvd0hlYWRlciA9ICdNdWx0aVJvd0hlYWRlcicsXG4gICAgTXVsdGlDb2x1bW5IZWFkZXIgPSAnTXVsdGlDb2x1bW5IZWFkZXInLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElFeHBvcnRSZWNvcmQge1xuICAgIGRhdGE6IGFueTtcbiAgICBsZXZlbDogbnVtYmVyO1xuICAgIHR5cGU6IEV4cG9ydFJlY29yZFR5cGU7XG4gICAgb3duZXI/OiBzdHJpbmcgfCBHcmlkVHlwZTtcbiAgICBoaWRkZW4/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDb2x1bW5MaXN0IHtcbiAgICBjb2x1bW5zOiBJQ29sdW1uSW5mb1tdO1xuICAgIGNvbHVtbldpZHRoczogbnVtYmVyW107XG4gICAgaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW46IG51bWJlcjtcbiAgICBtYXhMZXZlbD86IG51bWJlcjtcbiAgICBtYXhSb3dMZXZlbD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ29sdW1uSW5mbyB7XG4gICAgaGVhZGVyOiBzdHJpbmc7XG4gICAgZmllbGQ6IHN0cmluZztcbiAgICBza2lwOiBib29sZWFuO1xuICAgIGRhdGFUeXBlPzogR3JpZENvbHVtbkRhdGFUeXBlO1xuICAgIHNraXBGb3JtYXR0ZXI/OiBib29sZWFuO1xuICAgIGZvcm1hdHRlcj86IGFueTtcbiAgICBoZWFkZXJUeXBlPzogSGVhZGVyVHlwZTtcbiAgICBzdGFydEluZGV4PzogbnVtYmVyO1xuICAgIGNvbHVtblNwYW4/OiBudW1iZXI7XG4gICAgcm93U3Bhbj86IG51bWJlcjtcbiAgICBsZXZlbD86IG51bWJlcjtcbiAgICBleHBvcnRJbmRleD86IG51bWJlcjtcbiAgICBwaW5uZWRJbmRleD86IG51bWJlcjtcbiAgICBjb2x1bW5Hcm91cFBhcmVudD86IENvbHVtblR5cGUgfCBzdHJpbmc7XG4gICAgY29sdW1uR3JvdXA/OiBDb2x1bW5UeXBlIHwgc3RyaW5nO1xuICAgIGN1cnJlbmN5Q29kZT86IHN0cmluZztcbiAgICBkaXNwbGF5Rm9ybWF0Pzogc3RyaW5nO1xuICAgIGRpZ2l0c0luZm8/OiBzdHJpbmc7XG59XG4vKipcbiAqIHJvd0V4cG9ydGluZyBldmVudCBhcmd1bWVudHNcbiAqIHRoaXMuZXhwb3J0ZXJTZXJ2aWNlLnJvd0V4cG9ydGluZy5zdWJzY3JpYmUoKGFyZ3M6IElSb3dFeHBvcnRpbmdFdmVudEFyZ3MpID0+IHtcbiAqIC8vIHNldCBhcmdzIHByb3BlcnRpZXMgaGVyZVxuICogfSlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUm93RXhwb3J0aW5nRXZlbnRBcmdzIGV4dGVuZHMgSUJhc2VFdmVudEFyZ3Mge1xuICAgIC8qKlxuICAgICAqIENvbnRhaW5zIHRoZSBleHBvcnRpbmcgcm93IGRhdGFcbiAgICAgKi9cbiAgICByb3dEYXRhOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBDb250YWlucyB0aGUgZXhwb3J0aW5nIHJvdyBpbmRleFxuICAgICAqL1xuICAgIHJvd0luZGV4OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBTa2lwIHRoZSBleHBvcnRpbmcgcm93IHdoZW4gc2V0IHRvIHRydWVcbiAgICAgKi9cbiAgICBjYW5jZWw6IGJvb2xlYW47XG59XG5cbi8qKlxuICogY29sdW1uRXhwb3J0aW5nIGV2ZW50IGFyZ3VtZW50c1xuICogYGBgdHlwZXNjcmlwdFxuICogdGhpcy5leHBvcnRlclNlcnZpY2UuY29sdW1uRXhwb3J0aW5nLnN1YnNjcmliZSgoYXJnczogSUNvbHVtbkV4cG9ydGluZ0V2ZW50QXJncykgPT4ge1xuICogLy8gc2V0IGFyZ3MgcHJvcGVydGllcyBoZXJlXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIElDb2x1bW5FeHBvcnRpbmdFdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUV2ZW50QXJncyB7XG4gICAgLyoqXG4gICAgICogQ29udGFpbnMgdGhlIGV4cG9ydGluZyBjb2x1bW4gaGVhZGVyXG4gICAgICovXG4gICAgaGVhZGVyOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBDb250YWlucyB0aGUgZXhwb3J0aW5nIGNvbHVtbiBmaWVsZCBuYW1lXG4gICAgICovXG4gICAgZmllbGQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIENvbnRhaW5zIHRoZSBleHBvcnRpbmcgY29sdW1uIGluZGV4XG4gICAgICovXG4gICAgY29sdW1uSW5kZXg6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFNraXAgdGhlIGV4cG9ydGluZyBjb2x1bW4gd2hlbiBzZXQgdG8gdHJ1ZVxuICAgICAqL1xuICAgIGNhbmNlbDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEV4cG9ydCB0aGUgY29sdW1uJ3MgZGF0YSB3aXRob3V0IGFwcGx5aW5nIGl0cyBmb3JtYXR0ZXIsIHdoZW4gc2V0IHRvIHRydWVcbiAgICAgKi9cbiAgICBza2lwRm9ybWF0dGVyOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQSByZWZlcmVuY2UgdG8gdGhlIGdyaWQgb3duZXIuXG4gICAgICovXG4gICAgZ3JpZD86IEdyaWRUeXBlO1xufVxuXG4vKipoaWRkZW5cbiAqIEEgaGVscGVyIGNsYXNzIHVzZWQgdG8gaWRlbnRpZnkgd2hldGhlciB0aGUgdXNlciBoYXMgc2V0IGEgc3BlY2lmaWMgY29sdW1uSW5kZXhcbiAqIGR1cmluZyBjb2x1bW5FeHBvcnRpbmcsIHNvIHdlIGNhbiBob25vciBpdCBhdCB0aGUgZXhwb3J0ZWQgZmlsZS5cbiovXG5jbGFzcyBJZ3hDb2x1bW5FeHBvcnRpbmdFdmVudEFyZ3MgaW1wbGVtZW50cyBJQ29sdW1uRXhwb3J0aW5nRXZlbnRBcmdzIHtcbiAgICBwdWJsaWMgaGVhZGVyOiBzdHJpbmc7XG4gICAgcHVibGljIGZpZWxkOiBzdHJpbmc7XG4gICAgcHVibGljIGNhbmNlbDogYm9vbGVhbjtcbiAgICBwdWJsaWMgc2tpcEZvcm1hdHRlcjogYm9vbGVhbjtcbiAgICBwdWJsaWMgZ3JpZD86IEdyaWRUeXBlO1xuICAgIHB1YmxpYyBvd25lcj86IGFueTtcbiAgICBwdWJsaWMgdXNlclNldEluZGV4PyA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfY29sdW1uSW5kZXg/OiBudW1iZXI7XG5cbiAgICBwdWJsaWMgZ2V0IGNvbHVtbkluZGV4KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5JbmRleDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGNvbHVtbkluZGV4KHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fY29sdW1uSW5kZXggPSB2YWx1ZTtcbiAgICAgICAgdGhpcy51c2VyU2V0SW5kZXggPSB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKG9yaWdpbmFsOiBJQ29sdW1uRXhwb3J0aW5nRXZlbnRBcmdzKSB7XG4gICAgICAgIHRoaXMuaGVhZGVyID0gb3JpZ2luYWwuaGVhZGVyO1xuICAgICAgICB0aGlzLmZpZWxkID0gb3JpZ2luYWwuZmllbGQ7XG4gICAgICAgIHRoaXMuY2FuY2VsID0gb3JpZ2luYWwuY2FuY2VsO1xuICAgICAgICB0aGlzLnNraXBGb3JtYXR0ZXIgPSBvcmlnaW5hbC5za2lwRm9ybWF0dGVyO1xuICAgICAgICB0aGlzLmdyaWQgPSBvcmlnaW5hbC5ncmlkO1xuICAgICAgICB0aGlzLm93bmVyID0gb3JpZ2luYWwub3duZXI7XG4gICAgICAgIHRoaXMuX2NvbHVtbkluZGV4ID0gb3JpZ2luYWwuY29sdW1uSW5kZXg7XG4gICAgfVxufVxuXG5leHBvcnQgY29uc3QgREVGQVVMVF9PV05FUiA9ICdkZWZhdWx0JztcbmNvbnN0IERFRkFVTFRfQ09MVU1OX1dJRFRIID0gOC40MztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIElneEJhc2VFeHBvcnRlciB7XG5cbiAgICBwdWJsaWMgZXhwb3J0RW5kZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElCYXNlRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBpcyBlbWl0dGVkIHdoZW4gYSByb3cgaXMgZXhwb3J0ZWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuZXhwb3J0ZXJTZXJ2aWNlLnJvd0V4cG9ydGluZy5zdWJzY3JpYmUoKGFyZ3M6IElSb3dFeHBvcnRpbmdFdmVudEFyZ3MpID0+IHtcbiAgICAgKiAvLyBwdXQgZXZlbnQgaGFuZGxlciBjb2RlIGhlcmVcbiAgICAgKiB9KTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hCYXNlRXhwb3J0ZXJcbiAgICAgKi9cbiAgICBwdWJsaWMgcm93RXhwb3J0aW5nID0gbmV3IEV2ZW50RW1pdHRlcjxJUm93RXhwb3J0aW5nRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBpcyBlbWl0dGVkIHdoZW4gYSBjb2x1bW4gaXMgZXhwb3J0ZWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuZXhwb3J0ZXJTZXJ2aWNlLmNvbHVtbkV4cG9ydGluZy5zdWJzY3JpYmUoKGFyZ3M6IElDb2x1bW5FeHBvcnRpbmdFdmVudEFyZ3MpID0+IHtcbiAgICAgKiAvLyBwdXQgZXZlbnQgaGFuZGxlciBjb2RlIGhlcmVcbiAgICAgKiB9KTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hCYXNlRXhwb3J0ZXJcbiAgICAgKi9cbiAgICBwdWJsaWMgY29sdW1uRXhwb3J0aW5nID0gbmV3IEV2ZW50RW1pdHRlcjxJQ29sdW1uRXhwb3J0aW5nRXZlbnRBcmdzPigpO1xuXG4gICAgcHJvdGVjdGVkIF9zb3J0ID0gbnVsbDtcbiAgICBwcm90ZWN0ZWQgcGl2b3RHcmlkRmlsdGVyRmllbGRzQ291bnQ6IG51bWJlcjtcbiAgICBwcm90ZWN0ZWQgX293bmVyc01hcDogTWFwPGFueSwgSUNvbHVtbkxpc3Q+ID0gbmV3IE1hcDxhbnksIElDb2x1bW5MaXN0PigpO1xuXG4gICAgcHJpdmF0ZSBsb2NhbGU6IHN0cmluZ1xuICAgIHByaXZhdGUgaXNQaXZvdEdyaWRFeHBvcnQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBvcHRpb25zOiBJZ3hFeHBvcnRlck9wdGlvbnNCYXNlO1xuICAgIHByaXZhdGUgZmxhdFJlY29yZHM6IElFeHBvcnRSZWNvcmRbXSA9IFtdO1xuICAgIHByaXZhdGUgcGl2b3RHcmlkQ29sdW1uczogSUNvbHVtbkluZm9bXSA9IFtdXG4gICAgcHJpdmF0ZSBwaXZvdEdyaWRSb3dEaW1lbnNpb25zTWFwOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHByaXZhdGUgcGl2b3RHcmlkS2V5VmFsdWVNYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIGZvciBleHBvcnRpbmcgSWd4R3JpZCBjb21wb25lbnQncyBkYXRhLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmV4cG9ydGVyU2VydmljZS5leHBvcnQodGhpcy5pZ3hHcmlkRm9yRXhwb3J0LCB0aGlzLmV4cG9ydE9wdGlvbnMpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEJhc2VFeHBvcnRlclxuICAgICAqL1xuICAgIHB1YmxpYyBleHBvcnQoZ3JpZDogYW55LCBvcHRpb25zOiBJZ3hFeHBvcnRlck9wdGlvbnNCYXNlKTogdm9pZCB7XG4gICAgICAgIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQgfHwgb3B0aW9ucyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ05vIG9wdGlvbnMgcHJvdmlkZWQhJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLmxvY2FsZSA9IGdyaWQubG9jYWxlO1xuICAgICAgICBsZXQgY29sdW1ucyA9IGdyaWQuY29sdW1ucztcblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmlnbm9yZU11bHRpQ29sdW1uSGVhZGVycykge1xuICAgICAgICAgICAgY29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKGNvbCA9PiBjb2wuY2hpbGRyZW4gPT09IHVuZGVmaW5lZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb2x1bW5MaXN0ID0gdGhpcy5nZXRDb2x1bW5zKGNvbHVtbnMpO1xuICAgICAgICBjb25zdCB0YWdOYW1lID0gZ3JpZC5uYXRpdmVFbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICBpZiAodGFnTmFtZSA9PT0gJ2lneC1oaWVyYXJjaGljYWwtZ3JpZCcpIHtcbiAgICAgICAgICAgIHRoaXMuX293bmVyc01hcC5zZXQoZ3JpZCwgY29sdW1uTGlzdCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGNoaWxkTGF5b3V0TGlzdCA9IGdyaWQuY2hpbGRMYXlvdXRMaXN0O1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlzbGFuZCBvZiBjaGlsZExheW91dExpc3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1hcEhpZXJhcmNoaWNhbEdyaWRDb2x1bW5zKGlzbGFuZCwgZ3JpZC5kYXRhWzBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0YWdOYW1lID09PSAnaWd4LXBpdm90LWdyaWQnKSB7XG4gICAgICAgICAgICB0aGlzLnBpdm90R3JpZENvbHVtbnMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuaXNQaXZvdEdyaWRFeHBvcnQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5waXZvdEdyaWRLZXlWYWx1ZU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgICAgICAgICB0aGlzLnBpdm90R3JpZFJvd0RpbWVuc2lvbnNNYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXG4gICAgICAgICAgICBncmlkLnBpdm90Q29uZmlndXJhdGlvbi5yb3dzLmZpbHRlcihyID0+IHIuZW5hYmxlZCkuZm9yRWFjaChyb3dEaW1lbnNpb24gPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkVG9Sb3dEaW1lbnNpb25zTWFwKHJvd0RpbWVuc2lvbiwgcm93RGltZW5zaW9uLm1lbWJlck5hbWUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuX293bmVyc01hcC5zZXQoREVGQVVMVF9PV05FUiwgY29sdW1uTGlzdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9vd25lcnNNYXAuc2V0KERFRkFVTFRfT1dORVIsIGNvbHVtbkxpc3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcmVwYXJlRGF0YShncmlkKTtcbiAgICAgICAgdGhpcy5hZGRQaXZvdEdyaWRDb2x1bW5zKGdyaWQpO1xuICAgICAgICB0aGlzLmV4cG9ydEdyaWRSZWNvcmRzRGF0YSh0aGlzLmZsYXRSZWNvcmRzLCBncmlkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXRob2QgZm9yIGV4cG9ydGluZyBhbnkga2luZCBvZiBhcnJheSBkYXRhLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmV4cG9ydGVyU2VydmljZS5leHBvcnREYXRhKHRoaXMuYXJyYXlGb3JFeHBvcnQsIHRoaXMuZXhwb3J0T3B0aW9ucyk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4QmFzZUV4cG9ydGVyXG4gICAgICovXG4gICAgcHVibGljIGV4cG9ydERhdGEoZGF0YTogYW55W10sIG9wdGlvbnM6IElneEV4cG9ydGVyT3B0aW9uc0Jhc2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCB8fCBvcHRpb25zID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignTm8gb3B0aW9ucyBwcm92aWRlZCEnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICAgICAgY29uc3QgcmVjb3JkcyA9IGRhdGEubWFwKGQgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVjb3JkOiBJRXhwb3J0UmVjb3JkID0ge1xuICAgICAgICAgICAgICAgIGRhdGE6IGQsXG4gICAgICAgICAgICAgICAgdHlwZTogRXhwb3J0UmVjb3JkVHlwZS5EYXRhUmVjb3JkLFxuICAgICAgICAgICAgICAgIGxldmVsOiAwXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICByZXR1cm4gcmVjb3JkO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmV4cG9ydEdyaWRSZWNvcmRzRGF0YShyZWNvcmRzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZFRvUm93RGltZW5zaW9uc01hcChyb3dEaW1lbnNpb246IGFueSwgcm9vdFBhcmVudE5hbWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLnBpdm90R3JpZFJvd0RpbWVuc2lvbnNNYXBbcm93RGltZW5zaW9uLm1lbWJlck5hbWVdID0gcm9vdFBhcmVudE5hbWU7XG4gICAgICAgIGlmIChyb3dEaW1lbnNpb24uY2hpbGRMZXZlbCkge1xuICAgICAgICAgICAgdGhpcy5hZGRUb1Jvd0RpbWVuc2lvbnNNYXAocm93RGltZW5zaW9uLmNoaWxkTGV2ZWwsIHJvb3RQYXJlbnROYW1lKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBleHBvcnRHcmlkUmVjb3Jkc0RhdGEocmVjb3JkczogSUV4cG9ydFJlY29yZFtdLCBncmlkPzogR3JpZFR5cGUpIHtcbiAgICAgICAgaWYgKHRoaXMuX293bmVyc01hcC5zaXplID09PSAwKSB7XG4gICAgICAgICAgICBjb25zdCByZWNvcmRzRGF0YSA9IHJlY29yZHMubWFwKHIgPT4gci5kYXRhKTtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBFeHBvcnRVdGlsaXRpZXMuZ2V0S2V5c0Zyb21EYXRhKHJlY29yZHNEYXRhKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbnMgPSBrZXlzLm1hcCgoaykgPT5cbiAgICAgICAgICAgICAgICAoeyBoZWFkZXI6IGssIGZpZWxkOiBrLCBza2lwOiBmYWxzZSwgaGVhZGVyVHlwZTogSGVhZGVyVHlwZS5Db2x1bW5IZWFkZXIsIGxldmVsOiAwLCBjb2x1bW5TcGFuOiAxIH0pKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbldpZHRocyA9IG5ldyBBcnJheTxudW1iZXI+KGtleXMubGVuZ3RoKS5maWxsKERFRkFVTFRfQ09MVU1OX1dJRFRIKTtcblxuICAgICAgICAgICAgY29uc3QgbWFwUmVjb3JkOiBJQ29sdW1uTGlzdCA9IHtcbiAgICAgICAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgICAgICAgIGNvbHVtbldpZHRocyxcbiAgICAgICAgICAgICAgICBpbmRleE9mTGFzdFBpbm5lZENvbHVtbjogLTEsXG4gICAgICAgICAgICAgICAgbWF4TGV2ZWw6IDBcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuX293bmVyc01hcC5zZXQoREVGQVVMVF9PV05FUiwgbWFwUmVjb3JkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzaG91bGRSZW9yZGVyQ29sdW1ucyA9IGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIG1hcFJlY29yZF0gb2YgdGhpcy5fb3duZXJzTWFwKSB7XG4gICAgICAgICAgICBsZXQgc2tpcHBlZFBpbm5lZENvbHVtbnNDb3VudCA9IDA7XG4gICAgICAgICAgICBsZXQgY29sdW1uc1dpdGhvdXRIZWFkZXJDb3VudCA9IDE7XG4gICAgICAgICAgICBsZXQgaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW4gPSBtYXBSZWNvcmQuaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW47XG5cbiAgICAgICAgICAgIG1hcFJlY29yZC5jb2x1bW5zLmZvckVhY2goKGNvbHVtbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbHVtbi5za2lwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbkV4cG9ydEFyZ3M6IElDb2x1bW5FeHBvcnRpbmdFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXI6ICFFeHBvcnRVdGlsaXRpZXMuaXNOdWxsT3JXaGl0ZXNwYWNlcyhjb2x1bW4uaGVhZGVyKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmhlYWRlciA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbHVtbicgKyBjb2x1bW5zV2l0aG91dEhlYWRlckNvdW50KyssXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogY29sdW1uLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNraXBGb3JtYXR0ZXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZDoga2V5ID09PSBERUZBVUxUX09XTkVSID8gZ3JpZCA6IGtleVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NvbHVtbkV4cG9ydEFyZ3MgPSBuZXcgSWd4Q29sdW1uRXhwb3J0aW5nRXZlbnRBcmdzKGNvbHVtbkV4cG9ydEFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbkV4cG9ydGluZy5lbWl0KG5ld0NvbHVtbkV4cG9ydEFyZ3MpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5oZWFkZXIgPSBuZXdDb2x1bW5FeHBvcnRBcmdzLmhlYWRlcjtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLnNraXAgPSBuZXdDb2x1bW5FeHBvcnRBcmdzLmNhbmNlbDtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLnNraXBGb3JtYXR0ZXIgPSBuZXdDb2x1bW5FeHBvcnRBcmdzLnNraXBGb3JtYXR0ZXI7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0NvbHVtbkV4cG9ydEFyZ3MudXNlclNldEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZXhwb3J0SW5kZXggPSBuZXdDb2x1bW5FeHBvcnRBcmdzLmNvbHVtbkluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkUmVvcmRlckNvbHVtbnMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbHVtbi5za2lwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPD0gaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwcGVkUGlubmVkQ29sdW1uc0NvdW50Kys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlQ29sdW1uU3BhbnMoY29sdW1uLCBtYXBSZWNvcmQsIGNvbHVtbi5jb2x1bW5TcGFuKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9uU2tpcHBlZENvbHVtbnMgPSBtYXBSZWNvcmQuY29sdW1ucy5maWx0ZXIoYyA9PiAhYy5za2lwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vblNraXBwZWRDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vd25lcnNNYXAuZ2V0KGtleSkubWF4TGV2ZWwgPSBub25Ta2lwcGVkQ29sdW1ucy5zb3J0KChhLCBiKSA9PiBiLmxldmVsIC0gYS5sZXZlbClbMF0ubGV2ZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fc29ydCAmJiB0aGlzLl9zb3J0LmZpZWxkTmFtZSA9PT0gY29sdW1uLmZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29sdW1uLnNraXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zb3J0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc29ydC5maWVsZE5hbWUgPSBjb2x1bW4uaGVhZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGluZGV4T2ZMYXN0UGlubmVkQ29sdW1uIC09IHNraXBwZWRQaW5uZWRDb2x1bW5zQ291bnQ7XG5cbiAgICAgICAgICAgIC8vIFJlb3JkZXIgY29sdW1ucyBvbmx5IGlmIGEgY29sdW1uIGhhcyBiZWVuIGFzc2lnbmVkIGEgc3BlY2lmaWMgY29sdW1uSW5kZXggZHVyaW5nIGNvbHVtbkV4cG9ydGluZyBldmVudFxuICAgICAgICAgICAgaWYgKHNob3VsZFJlb3JkZXJDb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgbWFwUmVjb3JkLmNvbHVtbnMgPSB0aGlzLnJlb3JkZXJDb2x1bW5zKG1hcFJlY29yZC5jb2x1bW5zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG5cbiAgICAgICAgY29uc3QgZGF0YVRvRXhwb3J0ID0gbmV3IEFycmF5PElFeHBvcnRSZWNvcmQ+KCk7XG4gICAgICAgIGNvbnN0IGFjdHVhbERhdGEgPSByZWNvcmRzWzBdPy5kYXRhO1xuICAgICAgICBjb25zdCBpc1NwZWNpYWxEYXRhID0gRXhwb3J0VXRpbGl0aWVzLmlzU3BlY2lhbERhdGEoYWN0dWFsRGF0YSk7XG5cbiAgICAgICAgeWllbGRpbmdMb29wKHJlY29yZHMubGVuZ3RoLCAxMDAsIChpKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSByZWNvcmRzW2ldO1xuICAgICAgICAgICAgdGhpcy5leHBvcnRSb3coZGF0YVRvRXhwb3J0LCByb3csIGksIGlzU3BlY2lhbERhdGEpO1xuICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmV4cG9ydERhdGFJbXBsZW1lbnRhdGlvbihkYXRhVG9FeHBvcnQsIHRoaXMub3B0aW9ucywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXREZWZhdWx0cygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FsY3VsYXRlQ29sdW1uU3BhbnMoY29sdW1uOiBJQ29sdW1uSW5mbywgbWFwUmVjb3JkOiBJQ29sdW1uTGlzdCwgc3BhbjogbnVtYmVyKSB7XG4gICAgICAgIGlmIChjb2x1bW4uaGVhZGVyVHlwZSA9PT0gSGVhZGVyVHlwZS5NdWx0aUNvbHVtbkhlYWRlciAmJiBjb2x1bW4uc2tpcCkge1xuICAgICAgICAgICAgY29uc3QgY29sdW1uR3JvdXBDaGlsZHJlbiA9IG1hcFJlY29yZC5jb2x1bW5zLmZpbHRlcihjID0+IGMuY29sdW1uR3JvdXBQYXJlbnQgPT09IGNvbHVtbi5jb2x1bW5Hcm91cCk7XG5cbiAgICAgICAgICAgIGNvbHVtbkdyb3VwQ2hpbGRyZW4uZm9yRWFjaChjZ2MgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjZ2MuaGVhZGVyVHlwZSA9PT0gSGVhZGVyVHlwZS5NdWx0aUNvbHVtbkhlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICBjZ2MuY29sdW1uU3BhbiA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGNnYy5jb2x1bW5Hcm91cFBhcmVudCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGNnYy5za2lwID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZUNvbHVtblNwYW5zKGNnYywgbWFwUmVjb3JkLCBjZ2MuY29sdW1uU3Bhbik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2djLnNraXAgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGFyZ2V0Q29sID0gbWFwUmVjb3JkLmNvbHVtbnMuZmlsdGVyKGMgPT4gY29sdW1uLmNvbHVtbkdyb3VwUGFyZW50ICE9PSBudWxsICYmIGMuY29sdW1uR3JvdXAgPT09IGNvbHVtbi5jb2x1bW5Hcm91cFBhcmVudClbMF07XG4gICAgICAgIGlmICh0YXJnZXRDb2wgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGFyZ2V0Q29sLmNvbHVtblNwYW4gLT0gc3BhbjtcblxuICAgICAgICAgICAgaWYgKHRhcmdldENvbC5jb2x1bW5Hcm91cFBhcmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlQ29sdW1uU3BhbnModGFyZ2V0Q29sLCBtYXBSZWNvcmQsIHNwYW4pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGFyZ2V0Q29sLmNvbHVtblNwYW4gPT09IDApIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRDb2wuc2tpcCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGV4cG9ydFJvdyhkYXRhOiBJRXhwb3J0UmVjb3JkW10sIHJlY29yZDogSUV4cG9ydFJlY29yZCwgaW5kZXg6IG51bWJlciwgaXNTcGVjaWFsRGF0YTogYm9vbGVhbikge1xuICAgICAgICBpZiAoIWlzU3BlY2lhbERhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IG93bmVyID0gcmVjb3JkLm93bmVyID09PSB1bmRlZmluZWQgPyBERUZBVUxUX09XTkVSIDogcmVjb3JkLm93bmVyO1xuICAgICAgICAgICAgY29uc3Qgb3duZXJDb2xzID0gdGhpcy5fb3duZXJzTWFwLmdldChvd25lcikuY29sdW1ucztcblxuICAgICAgICAgICAgaWYgKHJlY29yZC50eXBlICE9PSBFeHBvcnRSZWNvcmRUeXBlLkhlYWRlclJlY29yZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbnMgPSBvd25lckNvbHNcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihjID0+IGMuaGVhZGVyVHlwZSAhPT0gSGVhZGVyVHlwZS5NdWx0aUNvbHVtbkhlYWRlciAmJiBjLmhlYWRlclR5cGUgIT09IEhlYWRlclR5cGUuUm93SGVhZGVyICYmIGMuaGVhZGVyVHlwZSAhPT0gSGVhZGVyVHlwZS5NdWx0aVJvd0hlYWRlciAmJiAhYy5za2lwKVxuICAgICAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5zdGFydEluZGV4IC0gYi5zdGFydEluZGV4KVxuICAgICAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5waW5uZWRJbmRleCAtIGIucGlubmVkSW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgcmVjb3JkLmRhdGEgPSBjb2x1bW5zLnJlZHVjZSgoYSwgZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWUuc2tpcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJhd1ZhbHVlID0gcmVzb2x2ZU5lc3RlZFBhdGgocmVjb3JkLmRhdGEsIGUuZmllbGQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaG91bGRBcHBseUZvcm1hdHRlciA9IGUuZm9ybWF0dGVyICYmICFlLnNraXBGb3JtYXR0ZXIgJiYgcmVjb3JkLnR5cGUgIT09IEV4cG9ydFJlY29yZFR5cGUuR3JvdXBlZFJlY29yZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuZGF0YVR5cGUgPT09ICdkYXRlJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICEocmF3VmFsdWUgaW5zdGFuY2VvZiBEYXRlKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFzaG91bGRBcHBseUZvcm1hdHRlciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd1ZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd1ZhbHVlID0gbmV3IERhdGUocmF3VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlLmRhdGFUeXBlID09PSAnc3RyaW5nJyAmJiByYXdWYWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdWYWx1ZSA9IHJhd1ZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGUuZGF0YVR5cGUgPT09ICdjdXJyZW5jeScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdWYWx1ZSA9IGZvcm1hdEN1cnJlbmN5KHJhd1ZhbHVlLCBlLmN1cnJlbmN5Q29kZSwgZS5kaXNwbGF5Rm9ybWF0LCBlLmRpZ2l0c0luZm8sIHRoaXMubG9jYWxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZvcm1hdHRlZFZhbHVlID0gc2hvdWxkQXBwbHlGb3JtYXR0ZXIgPyBlLmZvcm1hdHRlcihyYXdWYWx1ZSkgOiByYXdWYWx1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNQaXZvdEdyaWRFeHBvcnQgJiYgIWlzTmFOKHBhcnNlRmxvYXQoZm9ybWF0dGVkVmFsdWUpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlZFZhbHVlID0gcGFyc2VGbG9hdChmb3JtYXR0ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFbZS5maWVsZF0gPSBmb3JtYXR0ZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkSGVhZGVycyA9IG93bmVyQ29scy5maWx0ZXIoYyA9PiBjLnNraXApLm1hcChjID0+IGMuaGVhZGVyID8gYy5oZWFkZXIgOiBjLmZpZWxkKTtcbiAgICAgICAgICAgICAgICByZWNvcmQuZGF0YSA9IHJlY29yZC5kYXRhLmZpbHRlcihkID0+IGZpbHRlcmVkSGVhZGVycy5pbmRleE9mKGQpID09PSAtMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByb3dBcmdzID0ge1xuICAgICAgICAgICAgcm93RGF0YTogcmVjb3JkLmRhdGEsXG4gICAgICAgICAgICByb3dJbmRleDogaW5kZXgsXG4gICAgICAgICAgICBjYW5jZWw6IGZhbHNlXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5yb3dFeHBvcnRpbmcuZW1pdChyb3dBcmdzKTtcblxuICAgICAgICBpZiAoIXJvd0FyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICBkYXRhLnB1c2gocmVjb3JkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVvcmRlckNvbHVtbnMoY29sdW1uczogSUNvbHVtbkluZm9bXSk6IElDb2x1bW5JbmZvW10ge1xuICAgICAgICBjb25zdCBmaWx0ZXJlZENvbHVtbnMgPSBjb2x1bW5zLmZpbHRlcihjID0+ICFjLnNraXApO1xuICAgICAgICBjb25zdCBsZW5ndGggPSBmaWx0ZXJlZENvbHVtbnMubGVuZ3RoO1xuICAgICAgICBjb25zdCBzcGVjaWZpY0luZGljZXNDb2x1bW5zID0gZmlsdGVyZWRDb2x1bW5zLmZpbHRlcigoY29sKSA9PiAhaXNOYU4oY29sLmV4cG9ydEluZGV4KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zb3J0KChhLGIpID0+IGEuZXhwb3J0SW5kZXggLSBiLmV4cG9ydEluZGV4KTtcbiAgICAgICAgY29uc3QgaW5kaWNlcyA9IHNwZWNpZmljSW5kaWNlc0NvbHVtbnMubWFwKGNvbCA9PiBjb2wuZXhwb3J0SW5kZXgpO1xuXG4gICAgICAgIHNwZWNpZmljSW5kaWNlc0NvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgZmlsdGVyZWRDb2x1bW5zLnNwbGljZShmaWx0ZXJlZENvbHVtbnMuaW5kZXhPZihjb2wpLCAxKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcmVvcmRlcmVkQ29sdW1ucyA9IG5ldyBBcnJheShsZW5ndGgpO1xuXG4gICAgICAgIGlmIChzcGVjaWZpY0luZGljZXNDb2x1bW5zLmxlbmd0aCA+IE1hdGgubWF4KC4uLmluZGljZXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gc3BlY2lmaWNJbmRpY2VzQ29sdW1ucy5jb25jYXQoZmlsdGVyZWRDb2x1bW5zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGluZGljZXMuZm9yRWFjaCgoaSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaSA8IDAgfHwgaSA+PSBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRDb2x1bW5zLnB1c2goc3BlY2lmaWNJbmRpY2VzQ29sdW1uc1tpbmRleF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBrID0gaTtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGsgPCBsZW5ndGggJiYgcmVvcmRlcmVkQ29sdW1uc1trXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICArK2s7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVvcmRlcmVkQ29sdW1uc1trXSA9IHNwZWNpZmljSW5kaWNlc0NvbHVtbnNbaW5kZXhdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlb3JkZXJlZENvbHVtbnNbaV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZW9yZGVyZWRDb2x1bW5zW2ldID0gZmlsdGVyZWRDb2x1bW5zLnNwbGljZSgwLCAxKVswXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVvcmRlcmVkQ29sdW1ucztcbiAgICB9XG5cbiAgICBwcml2YXRlIHByZXBhcmVEYXRhKGdyaWQ6IEdyaWRUeXBlKSB7XG4gICAgICAgIHRoaXMuZmxhdFJlY29yZHMgPSBbXTtcbiAgICAgICAgY29uc3QgdGFnTmFtZSA9IGdyaWQubmF0aXZlRWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGhhc0ZpbHRlcmluZyA9IChncmlkLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSAmJiBncmlkLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZS5maWx0ZXJpbmdPcGVyYW5kcy5sZW5ndGggPiAwKSB8fFxuICAgICAgICAgICAgKGdyaWQuYWR2YW5jZWRGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgJiYgZ3JpZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZS5maWx0ZXJpbmdPcGVyYW5kcy5sZW5ndGggPiAwKTtcbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbnMgPSBncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnMgPyBncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnMuY29uY2F0KGdyaWQuc29ydGluZ0V4cHJlc3Npb25zIHx8IFtdKSA6IGdyaWQuc29ydGluZ0V4cHJlc3Npb25zO1xuICAgICAgICBjb25zdCBoYXNTb3J0aW5nID0gZXhwcmVzc2lvbnMgJiYgZXhwcmVzc2lvbnMubGVuZ3RoID4gMDtcblxuICAgICAgICBzd2l0Y2ggKHRhZ05hbWUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2lneC1waXZvdC1ncmlkJzoge1xuICAgICAgICAgICAgICAgIHRoaXMucHJlcGFyZVBpdm90R3JpZERhdGEoZ3JpZCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdpZ3gtaGllcmFyY2hpY2FsLWdyaWQnOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmVwYXJlSGllcmFyY2hpY2FsR3JpZERhdGEoZ3JpZCwgaGFzRmlsdGVyaW5nLCBoYXNTb3J0aW5nKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ2lneC10cmVlLWdyaWQnOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmVwYXJlVHJlZUdyaWREYXRhKGdyaWQsIGhhc0ZpbHRlcmluZywgaGFzU29ydGluZyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmVwYXJlR3JpZERhdGEoZ3JpZCwgaGFzRmlsdGVyaW5nLCBoYXNTb3J0aW5nKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcHJlcGFyZVBpdm90R3JpZERhdGEoZ3JpZDogR3JpZFR5cGUpIHtcbiAgICAgICAgZm9yIChjb25zdCByZWNvcmQgb2YgZ3JpZC5maWx0ZXJlZFNvcnRlZERhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlY29yZERhdGEgPSBPYmplY3QuZnJvbUVudHJpZXMocmVjb3JkLmFnZ3JlZ2F0aW9uVmFsdWVzKTtcbiAgICAgICAgICAgIHJlY29yZC5kaW1lbnNpb25WYWx1ZXMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFjdHVhbEtleSA9IHRoaXMucGl2b3RHcmlkUm93RGltZW5zaW9uc01hcFtrZXldO1xuICAgICAgICAgICAgICAgIHJlY29yZERhdGFbYWN0dWFsS2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHBpdm90R3JpZFJlY29yZDogSUV4cG9ydFJlY29yZCA9IHtcbiAgICAgICAgICAgICAgICBkYXRhOiByZWNvcmREYXRhLFxuICAgICAgICAgICAgICAgIGxldmVsOiByZWNvcmQubGV2ZWwsXG4gICAgICAgICAgICAgICAgdHlwZTogRXhwb3J0UmVjb3JkVHlwZS5QaXZvdEdyaWRSZWNvcmRcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuZmxhdFJlY29yZHMucHVzaChwaXZvdEdyaWRSZWNvcmQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcmVwYXJlSGllcmFyY2hpY2FsR3JpZERhdGEoZ3JpZDogR3JpZFR5cGUsIGhhc0ZpbHRlcmluZzogYm9vbGVhbiwgaGFzU29ydGluZzogYm9vbGVhbikge1xuXG4gICAgICAgIGNvbnN0IHNraXBPcGVyYXRpb25zID1cbiAgICAgICAgICAgICghaGFzRmlsdGVyaW5nIHx8ICF0aGlzLm9wdGlvbnMuaWdub3JlRmlsdGVyaW5nKSAmJlxuICAgICAgICAgICAgKCFoYXNTb3J0aW5nIHx8ICF0aGlzLm9wdGlvbnMuaWdub3JlU29ydGluZyk7XG5cbiAgICAgICAgaWYgKHNraXBPcGVyYXRpb25zKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gZ3JpZC5maWx0ZXJlZFNvcnRlZERhdGE7XG4gICAgICAgICAgICB0aGlzLmFkZEhpZXJhcmNoaWNhbEdyaWREYXRhKGdyaWQsIGRhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGRhdGEgPSBncmlkLmRhdGE7XG5cbiAgICAgICAgICAgIGlmIChoYXNGaWx0ZXJpbmcgJiYgIXRoaXMub3B0aW9ucy5pZ25vcmVGaWx0ZXJpbmcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJpbmdTdGF0ZTogSUZpbHRlcmluZ1N0YXRlID0ge1xuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uc1RyZWU6IGdyaWQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLFxuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlZEV4cHJlc3Npb25zVHJlZTogZ3JpZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSxcbiAgICAgICAgICAgICAgICAgICAgc3RyYXRlZ3k6IGdyaWQuZmlsdGVyU3RyYXRlZ3lcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgZGF0YSA9IEZpbHRlclV0aWwuZmlsdGVyKGRhdGEsIGZpbHRlcmluZ1N0YXRlLCBncmlkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGhhc1NvcnRpbmcgJiYgIXRoaXMub3B0aW9ucy5pZ25vcmVTb3J0aW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc29ydCA9IGNsb25lVmFsdWUoZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnNbMF0pO1xuXG4gICAgICAgICAgICAgICAgZGF0YSA9IERhdGFVdGlsLnNvcnQoZGF0YSwgZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMsIGdyaWQuc29ydFN0cmF0ZWd5LCBncmlkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5hZGRIaWVyYXJjaGljYWxHcmlkRGF0YShncmlkLCBkYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYWRkSGllcmFyY2hpY2FsR3JpZERhdGEoZ3JpZDogR3JpZFR5cGUsIHJlY29yZHM6IGFueVtdKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkTGF5b3V0TGlzdCA9IGdyaWQuY2hpbGRMYXlvdXRMaXN0O1xuICAgICAgICBjb25zdCBjb2x1bW5GaWVsZHMgPSB0aGlzLl9vd25lcnNNYXAuZ2V0KGdyaWQpLmNvbHVtbnMubWFwKGNvbCA9PiBjb2wuZmllbGQpO1xuXG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgcmVjb3Jkcykge1xuICAgICAgICAgICAgY29uc3QgZXhwYW5zaW9uU3RhdGVWYWwgPSBncmlkLmV4cGFuc2lvblN0YXRlcy5oYXMoZW50cnkpID8gZ3JpZC5leHBhbnNpb25TdGF0ZXMuZ2V0KGVudHJ5KSA6IGZhbHNlO1xuXG4gICAgICAgICAgICBjb25zdCBkYXRhV2l0aG91dENoaWxkcmVuID0gT2JqZWN0LmtleXMoZW50cnkpXG4gICAgICAgICAgICAgICAgLmZpbHRlcihrID0+IGNvbHVtbkZpZWxkcy5pbmNsdWRlcyhrKSlcbiAgICAgICAgICAgICAgICAucmVkdWNlKChvYmosIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBvYmpba2V5XSA9IGVudHJ5W2tleV07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgICAgICAgICAgfSwge30pO1xuXG4gICAgICAgICAgICBjb25zdCBoaWVyYXJjaGljYWxHcmlkUmVjb3JkOiBJRXhwb3J0UmVjb3JkID0ge1xuICAgICAgICAgICAgICAgIGRhdGE6IGRhdGFXaXRob3V0Q2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgbGV2ZWw6IDAsXG4gICAgICAgICAgICAgICAgdHlwZTogRXhwb3J0UmVjb3JkVHlwZS5IaWVyYXJjaGljYWxHcmlkUmVjb3JkLFxuICAgICAgICAgICAgICAgIG93bmVyOiBncmlkLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5mbGF0UmVjb3Jkcy5wdXNoKGhpZXJhcmNoaWNhbEdyaWRSZWNvcmQpO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlzbGFuZCBvZiBjaGlsZExheW91dExpc3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRoOiBJUGF0aFNlZ21lbnQgPSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd0lEOiBpc2xhbmQucHJpbWFyeUtleSA/IGVudHJ5W2lzbGFuZC5wcmltYXJ5S2V5XSA6IGVudHJ5LFxuICAgICAgICAgICAgICAgICAgICByb3dJc2xhbmRLZXk6IGlzbGFuZC5rZXlcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgY29uc3QgaXNsYW5kR3JpZCA9IGdyaWQ/LmdyaWRBUEkuZ2V0Q2hpbGRHcmlkKFtwYXRoXSk7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5UmVjb3JkRGF0YSA9IHRoaXMucHJlcGFyZUlzbGFuZERhdGEoaXNsYW5kLCBpc2xhbmRHcmlkLCBlbnRyeVtpc2xhbmQua2V5XSkgfHwgW107XG5cbiAgICAgICAgICAgICAgICB0aGlzLmdldEFsbENoaWxkQ29sdW1uc0FuZERhdGEoaXNsYW5kLCBrZXlSZWNvcmREYXRhLCBleHBhbnNpb25TdGF0ZVZhbCwgaXNsYW5kR3JpZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHByZXBhcmVJc2xhbmREYXRhKGlzbGFuZDogYW55LCBpc2xhbmRHcmlkOiBHcmlkVHlwZSwgZGF0YTogYW55W10pOiBhbnlbXSB7XG4gICAgICAgIGlmIChpc2xhbmRHcmlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGhhc0ZpbHRlcmluZyA9IChpc2xhbmRHcmlkLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSAmJlxuICAgICAgICAgICAgICAgIGlzbGFuZEdyaWQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLmZpbHRlcmluZ09wZXJhbmRzLmxlbmd0aCA+IDApIHx8XG4gICAgICAgICAgICAgICAgKGlzbGFuZEdyaWQuYWR2YW5jZWRGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgJiZcbiAgICAgICAgICAgICAgICAgICAgaXNsYW5kR3JpZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZS5maWx0ZXJpbmdPcGVyYW5kcy5sZW5ndGggPiAwKTtcblxuICAgICAgICAgICAgY29uc3QgaGFzU29ydGluZyA9IGlzbGFuZEdyaWQuc29ydGluZ0V4cHJlc3Npb25zICYmXG4gICAgICAgICAgICAgICAgaXNsYW5kR3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMubGVuZ3RoID4gMDtcblxuICAgICAgICAgICAgY29uc3Qgc2tpcE9wZXJhdGlvbnMgPVxuICAgICAgICAgICAgICAgICghaGFzRmlsdGVyaW5nIHx8ICF0aGlzLm9wdGlvbnMuaWdub3JlRmlsdGVyaW5nKSAmJlxuICAgICAgICAgICAgICAgICghaGFzU29ydGluZyB8fCAhdGhpcy5vcHRpb25zLmlnbm9yZVNvcnRpbmcpO1xuXG4gICAgICAgICAgICBpZiAoc2tpcE9wZXJhdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gaXNsYW5kR3JpZC5maWx0ZXJlZFNvcnRlZERhdGE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChoYXNGaWx0ZXJpbmcgJiYgIXRoaXMub3B0aW9ucy5pZ25vcmVGaWx0ZXJpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyaW5nU3RhdGU6IElGaWx0ZXJpbmdTdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25zVHJlZTogaXNsYW5kR3JpZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlZEV4cHJlc3Npb25zVHJlZTogaXNsYW5kR3JpZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmF0ZWd5OiBpc2xhbmRHcmlkLmZpbHRlclN0cmF0ZWd5XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IEZpbHRlclV0aWwuZmlsdGVyKGRhdGEsIGZpbHRlcmluZ1N0YXRlLCBpc2xhbmRHcmlkKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaGFzU29ydGluZyAmJiAhdGhpcy5vcHRpb25zLmlnbm9yZVNvcnRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc29ydCA9IGNsb25lVmFsdWUoaXNsYW5kR3JpZC5zb3J0aW5nRXhwcmVzc2lvbnNbMF0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBEYXRhVXRpbC5zb3J0KGRhdGEsIGlzbGFuZEdyaWQuc29ydGluZ0V4cHJlc3Npb25zLCBpc2xhbmRHcmlkLnNvcnRTdHJhdGVneSwgaXNsYW5kR3JpZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaGFzRmlsdGVyaW5nID0gKGlzbGFuZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgJiZcbiAgICAgICAgICAgICAgICBpc2xhbmQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLmZpbHRlcmluZ09wZXJhbmRzLmxlbmd0aCA+IDApIHx8XG4gICAgICAgICAgICAgICAgKGlzbGFuZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSAmJlxuICAgICAgICAgICAgICAgICAgICBpc2xhbmQuYWR2YW5jZWRGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUuZmlsdGVyaW5nT3BlcmFuZHMubGVuZ3RoID4gMCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGhhc1NvcnRpbmcgPSBpc2xhbmQuc29ydGluZ0V4cHJlc3Npb25zICYmXG4gICAgICAgICAgICAgICAgaXNsYW5kLnNvcnRpbmdFeHByZXNzaW9ucy5sZW5ndGggPiAwO1xuXG4gICAgICAgICAgICBjb25zdCBza2lwT3BlcmF0aW9ucyA9XG4gICAgICAgICAgICAgICAgKCFoYXNGaWx0ZXJpbmcgfHwgdGhpcy5vcHRpb25zLmlnbm9yZUZpbHRlcmluZykgJiZcbiAgICAgICAgICAgICAgICAoIWhhc1NvcnRpbmcgfHwgdGhpcy5vcHRpb25zLmlnbm9yZVNvcnRpbmcpO1xuXG4gICAgICAgICAgICBpZiAoIXNraXBPcGVyYXRpb25zKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc0ZpbHRlcmluZyAmJiAhdGhpcy5vcHRpb25zLmlnbm9yZUZpbHRlcmluZykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJpbmdTdGF0ZTogSUZpbHRlcmluZ1N0YXRlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnNUcmVlOiBpc2xhbmQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZWRFeHByZXNzaW9uc1RyZWU6IGlzbGFuZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmF0ZWd5OiBpc2xhbmQuZmlsdGVyU3RyYXRlZ3lcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBkYXRhID0gRmlsdGVyVXRpbC5maWx0ZXIoZGF0YSwgZmlsdGVyaW5nU3RhdGUsIGlzbGFuZCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGhhc1NvcnRpbmcgJiYgIXRoaXMub3B0aW9ucy5pZ25vcmVTb3J0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NvcnQgPSBjbG9uZVZhbHVlKGlzbGFuZC5zb3J0aW5nRXhwcmVzc2lvbnNbMF0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBEYXRhVXRpbC5zb3J0KGRhdGEsIGlzbGFuZC5zb3J0aW5nRXhwcmVzc2lvbnMsIGlzbGFuZC5zb3J0U3RyYXRlZ3ksIGlzbGFuZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRBbGxDaGlsZENvbHVtbnNBbmREYXRhKGlzbGFuZDogYW55LFxuICAgICAgICBjaGlsZERhdGE6IGFueVtdLCBleHBhbnNpb25TdGF0ZVZhbDogYm9vbGVhbiwgZ3JpZDogR3JpZFR5cGUpIHtcbiAgICAgICAgY29uc3QgY29sdW1uTGlzdCA9IHRoaXMuX293bmVyc01hcC5nZXQoaXNsYW5kKS5jb2x1bW5zO1xuICAgICAgICBjb25zdCBjb2x1bW5IZWFkZXIgPSBjb2x1bW5MaXN0XG4gICAgICAgICAgICAuZmlsdGVyKGNvbCA9PiBjb2wuaGVhZGVyVHlwZSA9PT0gSGVhZGVyVHlwZS5Db2x1bW5IZWFkZXIpXG4gICAgICAgICAgICAubWFwKGNvbCA9PiBjb2wuaGVhZGVyID8gY29sLmhlYWRlciA6IGNvbC5maWVsZCk7XG5cbiAgICAgICAgY29uc3QgaGVhZGVyUmVjb3JkOiBJRXhwb3J0UmVjb3JkID0ge1xuICAgICAgICAgICAgZGF0YTogY29sdW1uSGVhZGVyLFxuICAgICAgICAgICAgbGV2ZWw6IGlzbGFuZC5sZXZlbCxcbiAgICAgICAgICAgIHR5cGU6IEV4cG9ydFJlY29yZFR5cGUuSGVhZGVyUmVjb3JkLFxuICAgICAgICAgICAgb3duZXI6IGlzbGFuZCxcbiAgICAgICAgICAgIGhpZGRlbjogIWV4cGFuc2lvblN0YXRlVmFsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGNoaWxkRGF0YSAmJiBjaGlsZERhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5mbGF0UmVjb3Jkcy5wdXNoKGhlYWRlclJlY29yZCk7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgcmVjIG9mIGNoaWxkRGF0YSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cG9ydFJlY29yZDogSUV4cG9ydFJlY29yZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogcmVjLFxuICAgICAgICAgICAgICAgICAgICBsZXZlbDogaXNsYW5kLmxldmVsLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBFeHBvcnRSZWNvcmRUeXBlLkhpZXJhcmNoaWNhbEdyaWRSZWNvcmQsXG4gICAgICAgICAgICAgICAgICAgIG93bmVyOiBpc2xhbmQsXG4gICAgICAgICAgICAgICAgICAgIGhpZGRlbjogIWV4cGFuc2lvblN0YXRlVmFsXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHRoaXMuZmxhdFJlY29yZHMucHVzaChleHBvcnRSZWNvcmQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGlzbGFuZC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzbGFuZEV4cGFuc2lvblN0YXRlVmFsID0gZ3JpZCA9PT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyaWQuZXhwYW5zaW9uU3RhdGVzLmhhcyhyZWMpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmlkLmV4cGFuc2lvblN0YXRlcy5nZXQocmVjKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZElzbGFuZCBvZiBpc2xhbmQuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGg6IElQYXRoU2VnbWVudCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dJRDogY2hpbGRJc2xhbmQucHJpbWFyeUtleSA/IHJlY1tjaGlsZElzbGFuZC5wcmltYXJ5S2V5XSA6IHJlYyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dJc2xhbmRLZXk6IGNoaWxkSXNsYW5kLmtleVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRJc2xhbmRHcmlkID0gZ3JpZD8uZ3JpZEFQSS5nZXRDaGlsZEdyaWQoW3BhdGhdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleVJlY29yZERhdGEgPSB0aGlzLnByZXBhcmVJc2xhbmREYXRhKGlzbGFuZCwgY2hpbGRJc2xhbmRHcmlkLCByZWNbY2hpbGRJc2xhbmQua2V5XSkgfHwgW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsQ2hpbGRDb2x1bW5zQW5kRGF0YShjaGlsZElzbGFuZCwga2V5UmVjb3JkRGF0YSwgaXNsYW5kRXhwYW5zaW9uU3RhdGVWYWwsIGNoaWxkSXNsYW5kR3JpZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHByZXBhcmVHcmlkRGF0YShncmlkOiBHcmlkVHlwZSwgaGFzRmlsdGVyaW5nOiBib29sZWFuLCBoYXNTb3J0aW5nOiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IGdyb3VwZWRHcmlkR3JvdXBpbmdTdGF0ZTogSUdyb3VwaW5nU3RhdGUgPSB7XG4gICAgICAgICAgICBleHByZXNzaW9uczogZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zLFxuICAgICAgICAgICAgZXhwYW5zaW9uOiBncmlkLmdyb3VwaW5nRXhwYW5zaW9uU3RhdGUsXG4gICAgICAgICAgICBkZWZhdWx0RXhwYW5kZWQ6IGdyaWQuZ3JvdXBzRXhwYW5kZWQsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaGFzR3JvdXBpbmcgPSBncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnMgJiZcbiAgICAgICAgICAgIGdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucy5sZW5ndGggPiAwO1xuXG4gICAgICAgIGNvbnN0IHNraXBPcGVyYXRpb25zID1cbiAgICAgICAgICAgICghaGFzRmlsdGVyaW5nIHx8ICF0aGlzLm9wdGlvbnMuaWdub3JlRmlsdGVyaW5nKSAmJlxuICAgICAgICAgICAgKCFoYXNTb3J0aW5nIHx8ICF0aGlzLm9wdGlvbnMuaWdub3JlU29ydGluZykgJiZcbiAgICAgICAgICAgICghaGFzR3JvdXBpbmcgfHwgIXRoaXMub3B0aW9ucy5pZ25vcmVHcm91cGluZyk7XG5cbiAgICAgICAgaWYgKHNraXBPcGVyYXRpb25zKSB7XG4gICAgICAgICAgICBpZiAoaGFzR3JvdXBpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEdyb3VwZWREYXRhKGdyaWQsIGdyaWQuZ3JvdXBzUmVjb3JkcywgZ3JvdXBlZEdyaWRHcm91cGluZ1N0YXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRGbGF0RGF0YShncmlkLmZpbHRlcmVkU29ydGVkRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgZ3JpZERhdGEgPSBncmlkLmRhdGE7XG5cbiAgICAgICAgICAgIGlmIChoYXNGaWx0ZXJpbmcgJiYgIXRoaXMub3B0aW9ucy5pZ25vcmVGaWx0ZXJpbmcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJpbmdTdGF0ZTogSUZpbHRlcmluZ1N0YXRlID0ge1xuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uc1RyZWU6IGdyaWQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLFxuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlZEV4cHJlc3Npb25zVHJlZTogZ3JpZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSxcbiAgICAgICAgICAgICAgICAgICAgc3RyYXRlZ3k6IGdyaWQuZmlsdGVyU3RyYXRlZ3lcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgZ3JpZERhdGEgPSBGaWx0ZXJVdGlsLmZpbHRlcihncmlkRGF0YSwgZmlsdGVyaW5nU3RhdGUsIGdyaWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaGFzU29ydGluZyAmJiAhdGhpcy5vcHRpb25zLmlnbm9yZVNvcnRpbmcpIHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBXZSBzaG91bGQgZHJvcCBzdXBwb3J0IGZvciB0aGlzIHNpbmNlIGluIGEgZ3JvdXBlZCBncmlkIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZVxuICAgICAgICAgICAgICAgIC8vIHRoaXMuX3NvcnQgPSAhaXNHcm91cGVkR3JpZCA/XG4gICAgICAgICAgICAgICAgLy8gICAgIGNsb25lVmFsdWUoZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnNbMF0pIDpcbiAgICAgICAgICAgICAgICAvLyAgICAgZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMubGVuZ3RoID4gMSA/XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBjbG9uZVZhbHVlKGdyaWQuc29ydGluZ0V4cHJlc3Npb25zWzFdKSA6XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBjbG9uZVZhbHVlKGdyaWQuc29ydGluZ0V4cHJlc3Npb25zWzBdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBleHByZXNzaW9ucyA9IGdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucyA/IGdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucy5jb25jYXQoZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMgfHwgW10pIDogZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnM7XG4gICAgICAgICAgICAgICAgZ3JpZERhdGEgPSBEYXRhVXRpbC5zb3J0KGdyaWREYXRhLCBleHByZXNzaW9ucywgZ3JpZC5zb3J0U3RyYXRlZ3ksIGdyaWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaGFzR3JvdXBpbmcgJiYgIXRoaXMub3B0aW9ucy5pZ25vcmVHcm91cGluZykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3Vwc1JlY29yZHMgPSBbXTtcbiAgICAgICAgICAgICAgICBEYXRhVXRpbC5ncm91cChjbG9uZUFycmF5KGdyaWREYXRhKSwgZ3JvdXBlZEdyaWRHcm91cGluZ1N0YXRlLCBncmlkLmdyb3VwU3RyYXRlZ3ksIGdyaWQsIGdyb3Vwc1JlY29yZHMpO1xuICAgICAgICAgICAgICAgIGdyaWREYXRhID0gZ3JvdXBzUmVjb3JkcztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGhhc0dyb3VwaW5nICYmICF0aGlzLm9wdGlvbnMuaWdub3JlR3JvdXBpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEdyb3VwZWREYXRhKGdyaWQsIGdyaWREYXRhLCBncm91cGVkR3JpZEdyb3VwaW5nU3RhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEZsYXREYXRhKGdyaWREYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcHJlcGFyZVRyZWVHcmlkRGF0YShncmlkOiBHcmlkVHlwZSwgaGFzRmlsdGVyaW5nOiBib29sZWFuLCBoYXNTb3J0aW5nOiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IHNraXBPcGVyYXRpb25zID1cbiAgICAgICAgICAgICghaGFzRmlsdGVyaW5nIHx8ICF0aGlzLm9wdGlvbnMuaWdub3JlRmlsdGVyaW5nKSAmJlxuICAgICAgICAgICAgKCFoYXNTb3J0aW5nIHx8ICF0aGlzLm9wdGlvbnMuaWdub3JlU29ydGluZyk7XG5cbiAgICAgICAgaWYgKHNraXBPcGVyYXRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLmFkZFRyZWVHcmlkRGF0YShncmlkLnByb2Nlc3NlZFJvb3RSZWNvcmRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBncmlkRGF0YSA9IGdyaWQucm9vdFJlY29yZHM7XG5cbiAgICAgICAgICAgIGlmIChoYXNGaWx0ZXJpbmcgJiYgIXRoaXMub3B0aW9ucy5pZ25vcmVGaWx0ZXJpbmcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJpbmdTdGF0ZTogSUZpbHRlcmluZ1N0YXRlID0ge1xuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uc1RyZWU6IGdyaWQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLFxuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlZEV4cHJlc3Npb25zVHJlZTogZ3JpZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSxcbiAgICAgICAgICAgICAgICAgICAgc3RyYXRlZ3k6IChncmlkLmZpbHRlclN0cmF0ZWd5KSA/IGdyaWQuZmlsdGVyU3RyYXRlZ3kgOiBuZXcgVHJlZUdyaWRGaWx0ZXJpbmdTdHJhdGVneSgpXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGdyaWREYXRhID0gZmlsdGVyaW5nU3RhdGUuc3RyYXRlZ3lcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihncmlkRGF0YSwgZmlsdGVyaW5nU3RhdGUuZXhwcmVzc2lvbnNUcmVlLCBmaWx0ZXJpbmdTdGF0ZS5hZHZhbmNlZEV4cHJlc3Npb25zVHJlZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChoYXNTb3J0aW5nICYmICF0aGlzLm9wdGlvbnMuaWdub3JlU29ydGluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NvcnQgPSBjbG9uZVZhbHVlKGdyaWQuc29ydGluZ0V4cHJlc3Npb25zWzBdKTtcblxuICAgICAgICAgICAgICAgIGdyaWREYXRhID0gRGF0YVV0aWwudHJlZUdyaWRTb3J0KGdyaWREYXRhLCBncmlkLnNvcnRpbmdFeHByZXNzaW9ucywgZ3JpZC5zb3J0U3RyYXRlZ3kpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmFkZFRyZWVHcmlkRGF0YShncmlkRGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZFRyZWVHcmlkRGF0YShyZWNvcmRzOiBJVHJlZUdyaWRSZWNvcmRbXSwgcGFyZW50RXhwYW5kZWQ6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgICAgIGlmICghcmVjb3Jkcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCByZWNvcmQgb2YgcmVjb3Jkcykge1xuICAgICAgICAgICAgY29uc3QgaGllcmFyY2hpY2FsUmVjb3JkOiBJRXhwb3J0UmVjb3JkID0ge1xuICAgICAgICAgICAgICAgIGRhdGE6IHJlY29yZC5kYXRhLFxuICAgICAgICAgICAgICAgIGxldmVsOiByZWNvcmQubGV2ZWwsXG4gICAgICAgICAgICAgICAgaGlkZGVuOiAhcGFyZW50RXhwYW5kZWQsXG4gICAgICAgICAgICAgICAgdHlwZTogRXhwb3J0UmVjb3JkVHlwZS5UcmVlR3JpZFJlY29yZFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuZmxhdFJlY29yZHMucHVzaChoaWVyYXJjaGljYWxSZWNvcmQpO1xuICAgICAgICAgICAgdGhpcy5hZGRUcmVlR3JpZERhdGEocmVjb3JkLmNoaWxkcmVuLCBwYXJlbnRFeHBhbmRlZCAmJiByZWNvcmQuZXhwYW5kZWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRGbGF0RGF0YShyZWNvcmRzOiBhbnkpIHtcbiAgICAgICAgaWYgKCFyZWNvcmRzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCByZWNvcmQgb2YgcmVjb3Jkcykge1xuICAgICAgICAgICAgY29uc3QgZGF0YTogSUV4cG9ydFJlY29yZCA9IHtcbiAgICAgICAgICAgICAgICBkYXRhOiByZWNvcmQsXG4gICAgICAgICAgICAgICAgdHlwZTogRXhwb3J0UmVjb3JkVHlwZS5EYXRhUmVjb3JkLFxuICAgICAgICAgICAgICAgIGxldmVsOiAwXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLmZsYXRSZWNvcmRzLnB1c2goZGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZEdyb3VwZWREYXRhKGdyaWQ6IEdyaWRUeXBlLCByZWNvcmRzOiBJR3JvdXBCeVJlY29yZFtdLFxuICAgICAgICBncm91cGluZ1N0YXRlOiBJR3JvdXBpbmdTdGF0ZSwgcGFyZW50RXhwYW5kZWQ6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgICAgIGlmICghcmVjb3Jkcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlyc3RDb2wgPSB0aGlzLl9vd25lcnNNYXAuZ2V0KERFRkFVTFRfT1dORVIpLmNvbHVtbnNbMF0uZmllbGQ7XG5cbiAgICAgICAgZm9yIChjb25zdCByZWNvcmQgb2YgcmVjb3Jkcykge1xuICAgICAgICAgICAgbGV0IHJlY29yZFZhbCA9IHJlY29yZC52YWx1ZTtcblxuICAgICAgICAgICAgY29uc3QgaGllcmFyY2h5ID0gZ2V0SGllcmFyY2h5KHJlY29yZCk7XG4gICAgICAgICAgICBjb25zdCBleHBhbmRTdGF0ZTogSUdyb3VwQnlFeHBhbmRTdGF0ZSA9IGdyb3VwaW5nU3RhdGUuZXhwYW5zaW9uLmZpbmQoKHMpID0+XG4gICAgICAgICAgICAgICAgaXNIaWVyYXJjaHlNYXRjaChzLmhpZXJhcmNoeSB8fCBbeyBmaWVsZE5hbWU6IHJlY29yZC5leHByZXNzaW9uLmZpZWxkTmFtZSwgdmFsdWU6IHJlY29yZFZhbCB9XSwgaGllcmFyY2h5KSk7XG4gICAgICAgICAgICBjb25zdCBleHBhbmRlZCA9IGV4cGFuZFN0YXRlID8gZXhwYW5kU3RhdGUuZXhwYW5kZWQgOiBncm91cGluZ1N0YXRlLmRlZmF1bHRFeHBhbmRlZDtcblxuICAgICAgICAgICAgY29uc3QgaXNEYXRlID0gcmVjb3JkVmFsIGluc3RhbmNlb2YgRGF0ZTtcblxuICAgICAgICAgICAgaWYgKGlzRGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVab25lT2Zmc2V0ID0gcmVjb3JkVmFsLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMDtcbiAgICAgICAgICAgICAgICBjb25zdCBpc29TdHJpbmcgPSAobmV3IERhdGUocmVjb3JkVmFsIC0gdGltZVpvbmVPZmZzZXQpKS50b0lTT1N0cmluZygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBpcGUgPSBuZXcgRGF0ZVBpcGUoZ3JpZC5sb2NhbGUpO1xuICAgICAgICAgICAgICAgIHJlY29yZFZhbCA9IHBpcGUudHJhbnNmb3JtKGlzb1N0cmluZyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGdyb3VwRXhwcmVzc2lvbk5hbWUgPSByZWNvcmQuY29sdW1uICYmIHJlY29yZC5jb2x1bW4uaGVhZGVyID9cbiAgICAgICAgICAgICAgICByZWNvcmQuY29sdW1uLmhlYWRlciA6XG4gICAgICAgICAgICAgICAgcmVjb3JkLmV4cHJlc3Npb24uZmllbGROYW1lO1xuXG4gICAgICAgICAgICByZWNvcmRWYWwgPSByZWNvcmRWYWwgIT09IG51bGwgPyByZWNvcmRWYWwgOiAnJztcblxuICAgICAgICAgICAgY29uc3QgZ3JvdXBFeHByZXNzaW9uOiBJRXhwb3J0UmVjb3JkID0ge1xuICAgICAgICAgICAgICAgIGRhdGE6IHsgW2ZpcnN0Q29sXTogYCR7Z3JvdXBFeHByZXNzaW9uTmFtZX06ICR7cmVjb3JkVmFsfSAoJHtyZWNvcmQucmVjb3Jkcy5sZW5ndGh9KWAgfSxcbiAgICAgICAgICAgICAgICBsZXZlbDogcmVjb3JkLmxldmVsLFxuICAgICAgICAgICAgICAgIGhpZGRlbjogIXBhcmVudEV4cGFuZGVkLFxuICAgICAgICAgICAgICAgIHR5cGU6IEV4cG9ydFJlY29yZFR5cGUuR3JvdXBlZFJlY29yZCxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuZmxhdFJlY29yZHMucHVzaChncm91cEV4cHJlc3Npb24pO1xuXG4gICAgICAgICAgICBpZiAocmVjb3JkLmdyb3Vwcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRHcm91cGVkRGF0YShncmlkLCByZWNvcmQuZ3JvdXBzLCBncm91cGluZ1N0YXRlLCBleHBhbmRlZCAmJiBwYXJlbnRFeHBhbmRlZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd1JlY29yZHMgPSByZWNvcmQucmVjb3JkcztcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgcm93UmVjb3JkIG9mIHJvd1JlY29yZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFJlY29yZDogSUV4cG9ydFJlY29yZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHJvd1JlY29yZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsOiByZWNvcmQubGV2ZWwgKyAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuOiAhKGV4cGFuZGVkICYmIHBhcmVudEV4cGFuZGVkKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IEV4cG9ydFJlY29yZFR5cGUuRGF0YVJlY29yZCxcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZsYXRSZWNvcmRzLnB1c2goY3VycmVudFJlY29yZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb2x1bW5zKGNvbHVtbnM6IENvbHVtblR5cGVbXSk6IElDb2x1bW5MaXN0IHtcbiAgICAgICAgY29uc3QgY29sTGlzdCA9IFtdO1xuICAgICAgICBjb25zdCBjb2xXaWR0aExpc3QgPSBbXTtcbiAgICAgICAgY29uc3QgaGlkZGVuQ29sdW1ucyA9IFtdO1xuICAgICAgICBsZXQgaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW4gPSAtMTtcbiAgICAgICAgbGV0IGxhc3RWaXNpYmxlQ29sdW1uSW5kZXggPSAtMTtcbiAgICAgICAgbGV0IG1heExldmVsID0gMDtcblxuICAgICAgICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29sdW1uSGVhZGVyID0gIUV4cG9ydFV0aWxpdGllcy5pc051bGxPcldoaXRlc3BhY2VzKGNvbHVtbi5oZWFkZXIpID8gY29sdW1uLmhlYWRlciA6IGNvbHVtbi5maWVsZDtcbiAgICAgICAgICAgIGNvbnN0IGV4cG9ydENvbHVtbiA9ICFjb2x1bW4uaGlkZGVuIHx8IHRoaXMub3B0aW9ucy5pZ25vcmVDb2x1bW5zVmlzaWJpbGl0eTtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5vcHRpb25zLmlnbm9yZUNvbHVtbnNPcmRlciB8fCB0aGlzLm9wdGlvbnMuaWdub3JlQ29sdW1uc1Zpc2liaWxpdHkgPyBjb2x1bW4uaW5kZXggOiBjb2x1bW4udmlzaWJsZUluZGV4O1xuICAgICAgICAgICAgY29uc3QgY29sdW1uV2lkdGggPSBOdW1iZXIoY29sdW1uLndpZHRoPy5zbGljZSgwLCAtMikpIHx8IERFRkFVTFRfQ09MVU1OX1dJRFRIO1xuICAgICAgICAgICAgY29uc3QgY29sdW1uTGV2ZWwgPSAhdGhpcy5vcHRpb25zLmlnbm9yZU11bHRpQ29sdW1uSGVhZGVycyA/IGNvbHVtbi5sZXZlbCA6IDA7XG5cbiAgICAgICAgICAgIGNvbnN0IGlzTXVsdGlDb2xIZWFkZXIgPSBjb2x1bW4uY29sdW1uR3JvdXA7XG4gICAgICAgICAgICBjb25zdCBjb2xTcGFuID0gaXNNdWx0aUNvbEhlYWRlciA/XG4gICAgICAgICAgICAgICAgY29sdW1uLmFsbENoaWxkcmVuXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoY2ggPT4gIShjaC5jb2x1bW5Hcm91cCkgJiYgKCF0aGlzLm9wdGlvbnMuaWdub3JlQ29sdW1uc1Zpc2liaWxpdHkgPyAhY2guaGlkZGVuIDogdHJ1ZSkpXG4gICAgICAgICAgICAgICAgICAgIC5sZW5ndGggOlxuICAgICAgICAgICAgICAgIDE7XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbkluZm86IElDb2x1bW5JbmZvID0ge1xuICAgICAgICAgICAgICAgIGhlYWRlcjogRXhwb3J0VXRpbGl0aWVzLnNhbml0aXplVmFsdWUoY29sdW1uSGVhZGVyKSxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogY29sdW1uLmRhdGFUeXBlLFxuICAgICAgICAgICAgICAgIGZpZWxkOiBjb2x1bW4uZmllbGQsXG4gICAgICAgICAgICAgICAgc2tpcDogIWV4cG9ydENvbHVtbixcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IGNvbHVtbi5mb3JtYXR0ZXIsXG4gICAgICAgICAgICAgICAgc2tpcEZvcm1hdHRlcjogZmFsc2UsXG5cbiAgICAgICAgICAgICAgICBoZWFkZXJUeXBlOiBpc011bHRpQ29sSGVhZGVyID8gSGVhZGVyVHlwZS5NdWx0aUNvbHVtbkhlYWRlciA6IEhlYWRlclR5cGUuQ29sdW1uSGVhZGVyLFxuICAgICAgICAgICAgICAgIGNvbHVtblNwYW46IGNvbFNwYW4sXG4gICAgICAgICAgICAgICAgbGV2ZWw6IGNvbHVtbkxldmVsLFxuICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgICAgIHBpbm5lZEluZGV4OiAhY29sdW1uLnBpbm5lZCA/XG4gICAgICAgICAgICAgICAgICAgIE51bWJlci5NQVhfVkFMVUUgOlxuICAgICAgICAgICAgICAgICAgICAhY29sdW1uLmhpZGRlbiA/XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZ3JpZC5waW5uZWRDb2x1bW5zLmluZGV4T2YoY29sdW1uKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBOYU4sXG4gICAgICAgICAgICAgICAgY29sdW1uR3JvdXBQYXJlbnQ6IGNvbHVtbi5wYXJlbnQgPyBjb2x1bW4ucGFyZW50IDogbnVsbCxcbiAgICAgICAgICAgICAgICBjb2x1bW5Hcm91cDogaXNNdWx0aUNvbEhlYWRlciA/IGNvbHVtbiA6IG51bGxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChjb2x1bW4uZGF0YVR5cGUgPT09ICdjdXJyZW5jeScpIHtcbiAgICAgICAgICAgICAgICBjb2x1bW5JbmZvLmN1cnJlbmN5Q29kZSA9IGNvbHVtbi5waXBlQXJncy5jdXJyZW5jeUNvZGVcbiAgICAgICAgICAgICAgICAgICAgPyBjb2x1bW4ucGlwZUFyZ3MuY3VycmVuY3lDb2RlXG4gICAgICAgICAgICAgICAgICAgIDogZ2V0TG9jYWxlQ3VycmVuY3lDb2RlKHRoaXMubG9jYWxlKTtcblxuICAgICAgICAgICAgICAgIGNvbHVtbkluZm8uZGlzcGxheUZvcm1hdCA9IGNvbHVtbi5waXBlQXJncy5kaXNwbGF5XG4gICAgICAgICAgICAgICAgICAgID8gY29sdW1uLnBpcGVBcmdzLmRpc3BsYXlcbiAgICAgICAgICAgICAgICAgICAgOiAnc3ltYm9sJztcblxuICAgICAgICAgICAgICAgIGNvbHVtbkluZm8uZGlnaXRzSW5mbyA9IGNvbHVtbi5waXBlQXJncy5kaWdpdHNJbmZvXG4gICAgICAgICAgICAgICAgICAgID8gY29sdW1uLnBpcGVBcmdzLmRpZ2l0c0luZm9cbiAgICAgICAgICAgICAgICAgICAgOiAnMS4wLTInO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmlnbm9yZUNvbHVtbnNPcmRlcikge1xuICAgICAgICAgICAgICAgIGlmIChjb2x1bW5JbmZvLnN0YXJ0SW5kZXggIT09IGNvbHVtbkluZm8ucGlubmVkSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uSW5mby5waW5uZWRJbmRleCA9IE51bWJlci5NQVhfVkFMVUU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29sdW1uLmxldmVsID4gbWF4TGV2ZWwgJiYgIXRoaXMub3B0aW9ucy5pZ25vcmVNdWx0aUNvbHVtbkhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICBtYXhMZXZlbCA9IGNvbHVtbi5sZXZlbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGNvbExpc3QucHVzaChjb2x1bW5JbmZvKTtcbiAgICAgICAgICAgICAgICBjb2xXaWR0aExpc3QucHVzaChjb2x1bW5XaWR0aCk7XG4gICAgICAgICAgICAgICAgbGFzdFZpc2libGVDb2x1bW5JbmRleCA9IE1hdGgubWF4KGxhc3RWaXNpYmxlQ29sdW1uSW5kZXgsIGNvbExpc3QuaW5kZXhPZihjb2x1bW5JbmZvKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGhpZGRlbkNvbHVtbnMucHVzaChjb2x1bW5JbmZvKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbHVtbi5waW5uZWQgJiYgZXhwb3J0Q29sdW1uICYmIGNvbHVtbkluZm8uaGVhZGVyVHlwZSA9PT0gSGVhZGVyVHlwZS5Db2x1bW5IZWFkZXIpIHtcbiAgICAgICAgICAgICAgICBpbmRleE9mTGFzdFBpbm5lZENvbHVtbisrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vQXBwZW5kIHRoZSBoaWRkZW4gY29sdW1ucyB0byB0aGUgZW5kIG9mIHRoZSBsaXN0XG4gICAgICAgIGhpZGRlbkNvbHVtbnMuZm9yRWFjaCgoaGlkZGVuQ29sdW1uKSA9PiB7XG4gICAgICAgICAgICBjb2xMaXN0WysrbGFzdFZpc2libGVDb2x1bW5JbmRleF0gPSBoaWRkZW5Db2x1bW47XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdDogSUNvbHVtbkxpc3QgPSB7XG4gICAgICAgICAgICBjb2x1bW5zOiBjb2xMaXN0LFxuICAgICAgICAgICAgY29sdW1uV2lkdGhzOiBjb2xXaWR0aExpc3QsXG4gICAgICAgICAgICBpbmRleE9mTGFzdFBpbm5lZENvbHVtbixcbiAgICAgICAgICAgIG1heExldmVsXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1hcEhpZXJhcmNoaWNhbEdyaWRDb2x1bW5zKGlzbGFuZDogYW55LCBncmlkRGF0YTogYW55KSB7XG4gICAgICAgIGxldCBjb2x1bW5MaXN0OiBJQ29sdW1uTGlzdDtcbiAgICAgICAgbGV0IGtleURhdGE7XG5cbiAgICAgICAgaWYgKGlzbGFuZC5hdXRvR2VuZXJhdGUpIHtcbiAgICAgICAgICAgIGtleURhdGEgPSBncmlkRGF0YVtpc2xhbmQua2V5XTtcbiAgICAgICAgICAgIGNvbnN0IGlzbGFuZEtleXMgPSBpc2xhbmQuY2hpbGRyZW4ubWFwKGkgPT4gaS5rZXkpO1xuXG4gICAgICAgICAgICBjb25zdCBpc2xhbmREYXRhID0ga2V5RGF0YS5tYXAoaSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3SXRlbSA9IHt9O1xuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoaSkubWFwKGsgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzbGFuZEtleXMuaW5jbHVkZXMoaykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0l0ZW1ba10gPSBpW2tdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3SXRlbTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb2x1bW5MaXN0ID0gdGhpcy5nZXRBdXRvR2VuZXJhdGVkQ29sdW1ucyhpc2xhbmREYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGlzbGFuZENvbHVtbkxpc3QgPSBpc2xhbmQuY29sdW1ucztcbiAgICAgICAgICAgIGNvbHVtbkxpc3QgPSB0aGlzLmdldENvbHVtbnMoaXNsYW5kQ29sdW1uTGlzdCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9vd25lcnNNYXAuc2V0KGlzbGFuZCwgY29sdW1uTGlzdCk7XG5cbiAgICAgICAgaWYgKGlzbGFuZC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkSXNsYW5kIG9mIGlzbGFuZC5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzbGFuZEtleURhdGEgPSBrZXlEYXRhICE9PSB1bmRlZmluZWQgPyBrZXlEYXRhWzBdIDoge307XG4gICAgICAgICAgICAgICAgdGhpcy5tYXBIaWVyYXJjaGljYWxHcmlkQ29sdW1ucyhjaGlsZElzbGFuZCwgaXNsYW5kS2V5RGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEF1dG9HZW5lcmF0ZWRDb2x1bW5zKGRhdGE6IGFueVtdKSB7XG4gICAgICAgIGNvbnN0IGNvbExpc3QgPSBbXTtcbiAgICAgICAgY29uc3QgY29sV2lkdGhMaXN0ID0gW107XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhkYXRhWzBdKTtcblxuICAgICAgICBrZXlzLmZvckVhY2goKGNvbEtleSwgaSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29sdW1uSW5mbzogSUNvbHVtbkluZm8gPSB7XG4gICAgICAgICAgICAgICAgaGVhZGVyOiBjb2xLZXksXG4gICAgICAgICAgICAgICAgZmllbGQ6IGNvbEtleSxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgc2tpcDogZmFsc2UsXG4gICAgICAgICAgICAgICAgaGVhZGVyVHlwZTogSGVhZGVyVHlwZS5Db2x1bW5IZWFkZXIsXG4gICAgICAgICAgICAgICAgY29sdW1uU3BhbjogMSxcbiAgICAgICAgICAgICAgICBsZXZlbDogMCxcbiAgICAgICAgICAgICAgICBzdGFydEluZGV4OiBpLFxuICAgICAgICAgICAgICAgIHBpbm5lZEluZGV4OiBOdW1iZXIuTUFYX1ZBTFVFXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb2xMaXN0LnB1c2goY29sdW1uSW5mbyk7XG4gICAgICAgICAgICBjb2xXaWR0aExpc3QucHVzaChERUZBVUxUX0NPTFVNTl9XSURUSCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdDogSUNvbHVtbkxpc3QgPSB7XG4gICAgICAgICAgICBjb2x1bW5zOiBjb2xMaXN0LFxuICAgICAgICAgICAgY29sdW1uV2lkdGhzOiBjb2xXaWR0aExpc3QsXG4gICAgICAgICAgICBpbmRleE9mTGFzdFBpbm5lZENvbHVtbjogLTEsXG4gICAgICAgICAgICBtYXhMZXZlbDogMCxcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRQaXZvdEdyaWRDb2x1bW5zKGdyaWQ6IGFueSkge1xuICAgICAgICBpZiAoZ3JpZC5uYXRpdmVFbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSAhPT0gJ2lneC1waXZvdC1ncmlkJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZW5hYmxlZFJvd3MgPSBncmlkLnBpdm90Q29uZmlndXJhdGlvbi5yb3dzLmZpbHRlcihyID0+IHIuZW5hYmxlZCkubWFwKChyLCBpKSA9PiAoeyBuYW1lOiByLm1lbWJlck5hbWUsIGxldmVsOiBpIH0pKTtcblxuICAgICAgICB0aGlzLnByZXBhcmVQaXZvdEdyaWRDb2x1bW5zKGVuYWJsZWRSb3dzKTtcbiAgICAgICAgdGhpcy5waXZvdEdyaWRGaWx0ZXJGaWVsZHNDb3VudCA9IGVuYWJsZWRSb3dzLmxlbmd0aDtcblxuICAgICAgICBjb25zdCBjb2x1bW5MaXN0ID0gdGhpcy5fb3duZXJzTWFwLmdldChERUZBVUxUX09XTkVSKTtcbiAgICAgICAgY29sdW1uTGlzdC5jb2x1bW5zLnVuc2hpZnQoLi4udGhpcy5waXZvdEdyaWRDb2x1bW5zKTtcbiAgICAgICAgY29sdW1uTGlzdC5jb2x1bW5XaWR0aHMudW5zaGlmdCguLi5BcnJheSh0aGlzLnBpdm90R3JpZENvbHVtbnMubGVuZ3RoKS5maWxsKDIwMCkpO1xuICAgICAgICBjb2x1bW5MaXN0LmluZGV4T2ZMYXN0UGlubmVkQ29sdW1uID0gZW5hYmxlZFJvd3MubGVuZ3RoIC0gMTtcbiAgICAgICAgY29sdW1uTGlzdC5tYXhSb3dMZXZlbCA9IGVuYWJsZWRSb3dzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5fb3duZXJzTWFwLnNldChERUZBVUxUX09XTkVSLCBjb2x1bW5MaXN0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHByZXBhcmVQaXZvdEdyaWRDb2x1bW5zKGtleXM6IGFueSwgY29sdW1uR3JvdXBQYXJlbnQ/OiBzdHJpbmcpOiBhbnkge1xuICAgICAgICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzdGFydEluZGV4ID0gMDtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c1swXTtcbiAgICAgICAgY29uc3QgcmVjb3JkcyA9IHRoaXMuZmxhdFJlY29yZHMubWFwKHIgPT4gci5kYXRhKTtcbiAgICAgICAgY29uc3QgZ3JvdXBlZFJlY29yZHMgPSByZWNvcmRzLnJlZHVjZSgoaGFzaCwgb2JqKSA9PiAoey4uLmhhc2gsIFtvYmpba2V5Lm5hbWVdXTooIGhhc2hbb2JqW2tleS5uYW1lXV0gfHwgW10pLmNvbmNhdChvYmopfSksIHt9KVxuXG4gICAgICAgIGlmIChjb2x1bW5Hcm91cFBhcmVudCkge1xuICAgICAgICAgICAgY29uc3QgbWFwS2V5cyA9IFsuLi50aGlzLnBpdm90R3JpZEtleVZhbHVlTWFwLmtleXMoKV07XG4gICAgICAgICAgICBjb25zdCBtYXBWYWx1ZXMgPSBbLi4udGhpcy5waXZvdEdyaWRLZXlWYWx1ZU1hcC52YWx1ZXMoKV07XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyhncm91cGVkUmVjb3JkcykpIHtcbiAgICAgICAgICAgICAgICBncm91cGVkUmVjb3Jkc1trXSA9IGdyb3VwZWRSZWNvcmRzW2tdLmZpbHRlcihyb3cgPT4gbWFwS2V5cy5ldmVyeShtayA9PiBPYmplY3Qua2V5cyhyb3cpLmluY2x1ZGVzKG1rKSlcbiAgICAgICAgICAgICAgICAgICAgJiYgbWFwVmFsdWVzLmV2ZXJ5KG12ID0+IE9iamVjdC52YWx1ZXMocm93KS5pbmNsdWRlcyhtdikpKTtcblxuICAgICAgICAgICAgICAgIGlmIChncm91cGVkUmVjb3Jkc1trXS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGdyb3VwZWRSZWNvcmRzW2tdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyhncm91cGVkUmVjb3JkcykpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvd1NwYW4gPSBncm91cGVkUmVjb3Jkc1trXS5sZW5ndGg7XG5cbiAgICAgICAgICAgIGNvbnN0IHJvd0RpbWVuc2lvbkNvbHVtbjogSUNvbHVtbkluZm8gPSB7XG4gICAgICAgICAgICAgICAgcm93U3BhbixcbiAgICAgICAgICAgICAgICBmaWVsZDogayxcbiAgICAgICAgICAgICAgICBoZWFkZXI6IGssXG4gICAgICAgICAgICAgICAgc3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICBza2lwOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBwaW5uZWRJbmRleDogMCxcbiAgICAgICAgICAgICAgICBsZXZlbDoga2V5LmxldmVsLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICBoZWFkZXJUeXBlOiBncm91cGVkUmVjb3Jkc1trXS5sZW5ndGggPiAxID8gSGVhZGVyVHlwZS5NdWx0aVJvd0hlYWRlciA6IEhlYWRlclR5cGUuUm93SGVhZGVyLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKGNvbHVtbkdyb3VwUGFyZW50KSB7XG4gICAgICAgICAgICAgICAgcm93RGltZW5zaW9uQ29sdW1uLmNvbHVtbkdyb3VwUGFyZW50ID0gY29sdW1uR3JvdXBQYXJlbnQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJvd0RpbWVuc2lvbkNvbHVtbi5jb2x1bW5Hcm91cCA9IGs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucGl2b3RHcmlkQ29sdW1ucy5wdXNoKHJvd0RpbWVuc2lvbkNvbHVtbik7XG5cbiAgICAgICAgICAgIGlmIChrZXlzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBpdm90R3JpZEtleVZhbHVlTWFwLnNldChrZXkubmFtZSwgayk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3S2V5cyA9IGtleXMuZmlsdGVyKGtkZCA9PiBrZGQgIT09IGtleSk7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmVwYXJlUGl2b3RHcmlkQ29sdW1ucyhuZXdLZXlzLCBrKVxuICAgICAgICAgICAgICAgIHRoaXMucGl2b3RHcmlkS2V5VmFsdWVNYXAuZGVsZXRlKGtleS5uYW1lKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3RhcnRJbmRleCArPSByb3dTcGFuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldERlZmF1bHRzKCkge1xuICAgICAgICB0aGlzLl9zb3J0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5mbGF0UmVjb3JkcyA9IFtdO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSB7fSBhcyBJZ3hFeHBvcnRlck9wdGlvbnNCYXNlO1xuICAgICAgICB0aGlzLl9vd25lcnNNYXAuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgZXhwb3J0RGF0YUltcGxlbWVudGF0aW9uKGRhdGE6IGFueVtdLCBvcHRpb25zOiBJZ3hFeHBvcnRlck9wdGlvbnNCYXNlLCBkb25lOiAoKSA9PiB2b2lkKTogdm9pZDtcbn1cbiJdfQ==
@@ -47,5 +47,18 @@ export class ExportUtilities {
47
47
  static isNullOrWhitespaces(value) {
48
48
  return value === undefined || value === null || !value.trim();
49
49
  }
50
+ static sanitizeValue(value) {
51
+ if (!this.hasValue(value)) {
52
+ return '';
53
+ }
54
+ else {
55
+ const stringValue = String(value);
56
+ return stringValue.replace(/&/g, '&')
57
+ .replace(/</g, '&lt;')
58
+ .replace(/>/g, '&gt;')
59
+ .replace(/"/g, '&quot;')
60
+ .replace(/'/g, '&apos;');
61
+ }
62
+ }
50
63
  }
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LXV0aWxpdGllcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9zZXJ2aWNlcy9leHBvcnRlci1jb21tb24vZXhwb3J0LXV0aWxpdGllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQTs7R0FFRztBQUNILE1BQU0sT0FBTyxlQUFlO0lBQ2pCLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBVztRQUNyQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzNCLElBQUksTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNkLE9BQU8sRUFBRSxDQUFDO1NBQ2I7UUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUV2QyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDM0MsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUV6QyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRXhELE9BQU8sQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFTSxNQUFNLENBQUMsY0FBYyxDQUFDLElBQVUsRUFBRSxRQUFRO1FBQzdDLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEMsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0MsQ0FBQyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFFdEIsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7UUFDYixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDVixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QixNQUFNLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRU0sTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQVM7UUFDdkMsTUFBTSxHQUFHLEdBQUcsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1lBQ2pDLGdDQUFnQztZQUNoQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDakMsK0JBQStCO1NBQ2xDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBRU0sTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFTO1FBQ2pDLE9BQU8sQ0FBQyxPQUFPLElBQUksS0FBSyxRQUFRO1lBQzVCLE9BQU8sSUFBSSxLQUFLLFFBQVE7WUFDeEIsSUFBSSxZQUFZLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFTSxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQVU7UUFDN0IsT0FBTyxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUM7SUFDakQsQ0FBQztJQUVNLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFhO1FBQzNDLE9BQU8sS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2xFLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbIlxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjbGFzcyBFeHBvcnRVdGlsaXRpZXMge1xuICAgIHB1YmxpYyBzdGF0aWMgZ2V0S2V5c0Zyb21EYXRhKGRhdGE6IGFueVtdKSB7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IGRhdGEubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhRW50cnkgPSBkYXRhWzBdO1xuICAgICAgICBjb25zdCBkYXRhRW50cnlNaWRkbGUgPSBkYXRhW01hdGguZmxvb3IobGVuZ3RoIC8gMildO1xuICAgICAgICBjb25zdCBkYXRhRW50cnlMYXN0ID0gZGF0YVtsZW5ndGggLSAxXTtcblxuICAgICAgICBjb25zdCBrZXlzMSA9IE9iamVjdC5rZXlzKGRhdGFFbnRyeSk7XG4gICAgICAgIGNvbnN0IGtleXMyID0gT2JqZWN0LmtleXMoZGF0YUVudHJ5TWlkZGxlKTtcbiAgICAgICAgY29uc3Qga2V5czMgPSBPYmplY3Qua2V5cyhkYXRhRW50cnlMYXN0KTtcblxuICAgICAgICBjb25zdCBrZXlzID0gbmV3IFNldChrZXlzMS5jb25jYXQoa2V5czIpLmNvbmNhdChrZXlzMykpO1xuXG4gICAgICAgIHJldHVybiAhRXhwb3J0VXRpbGl0aWVzLmlzU3BlY2lhbERhdGEoZGF0YUVudHJ5KSA/IEFycmF5LmZyb20oa2V5cykgOiBbJ0NvbHVtbiAxJ107XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBzYXZlQmxvYlRvRmlsZShibG9iOiBCbG9iLCBmaWxlTmFtZSkge1xuICAgICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICBjb25zdCB1cmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgYS5kb3dubG9hZCA9IGZpbGVOYW1lO1xuXG4gICAgICAgIGEuaHJlZiA9IHVybDtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtcbiAgICAgICAgYS5jbGljaygpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGEpO1xuICAgICAgICB3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgc3RyaW5nVG9BcnJheUJ1ZmZlcihzOiBzdHJpbmcpOiBBcnJheUJ1ZmZlciB7XG4gICAgICAgIGNvbnN0IGJ1ZiA9IG5ldyBBcnJheUJ1ZmZlcihzLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IHZpZXcgPSBuZXcgVWludDhBcnJheShidWYpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSAhPT0gcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgIG5vLWJpdHdpc2UgKi9cbiAgICAgICAgICAgIHZpZXdbaV0gPSBzLmNoYXJDb2RlQXQoaSkgJiAweEZGO1xuICAgICAgICAgICAgLyogZXNsaW50LWVuYWJsZSAgbm8tYml0d2lzZSAqL1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBidWY7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBpc1NwZWNpYWxEYXRhKGRhdGE6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJyB8fFxuICAgICAgICAgICAgdHlwZW9mIGRhdGEgPT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICBkYXRhIGluc3RhbmNlb2YgRGF0ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBoYXNWYWx1ZSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgaXNOdWxsT3JXaGl0ZXNwYWNlcyh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsIHx8ICF2YWx1ZS50cmltKCk7XG4gICAgfVxufVxuIl19
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LXV0aWxpdGllcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9zZXJ2aWNlcy9leHBvcnRlci1jb21tb24vZXhwb3J0LXV0aWxpdGllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQTs7R0FFRztBQUNILE1BQU0sT0FBTyxlQUFlO0lBQ2pCLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBVztRQUNyQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzNCLElBQUksTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNkLE9BQU8sRUFBRSxDQUFDO1NBQ2I7UUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUV2QyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDM0MsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUV6QyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRXhELE9BQU8sQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFTSxNQUFNLENBQUMsY0FBYyxDQUFDLElBQVUsRUFBRSxRQUFRO1FBQzdDLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEMsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0MsQ0FBQyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFFdEIsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7UUFDYixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDVixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QixNQUFNLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRU0sTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQVM7UUFDdkMsTUFBTSxHQUFHLEdBQUcsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1lBQ2pDLGdDQUFnQztZQUNoQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDakMsK0JBQStCO1NBQ2xDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBRU0sTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFTO1FBQ2pDLE9BQU8sQ0FBQyxPQUFPLElBQUksS0FBSyxRQUFRO1lBQzVCLE9BQU8sSUFBSSxLQUFLLFFBQVE7WUFDeEIsSUFBSSxZQUFZLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFTSxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQVU7UUFDN0IsT0FBTyxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUM7SUFDakQsQ0FBQztJQUVNLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFhO1FBQzNDLE9BQU8sS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2xFLENBQUM7SUFFTSxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQVU7UUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDdkIsT0FBTyxFQUFFLENBQUM7U0FDYjthQUFNO1lBQ0gsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDO2lCQUN0QixPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQztpQkFDckIsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7aUJBQ3JCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDO2lCQUN2QixPQUFPLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQzlDO0lBQ0wsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNsYXNzIEV4cG9ydFV0aWxpdGllcyB7XG4gICAgcHVibGljIHN0YXRpYyBnZXRLZXlzRnJvbURhdGEoZGF0YTogYW55W10pIHtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gZGF0YS5sZW5ndGg7XG4gICAgICAgIGlmIChsZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGFFbnRyeSA9IGRhdGFbMF07XG4gICAgICAgIGNvbnN0IGRhdGFFbnRyeU1pZGRsZSA9IGRhdGFbTWF0aC5mbG9vcihsZW5ndGggLyAyKV07XG4gICAgICAgIGNvbnN0IGRhdGFFbnRyeUxhc3QgPSBkYXRhW2xlbmd0aCAtIDFdO1xuXG4gICAgICAgIGNvbnN0IGtleXMxID0gT2JqZWN0LmtleXMoZGF0YUVudHJ5KTtcbiAgICAgICAgY29uc3Qga2V5czIgPSBPYmplY3Qua2V5cyhkYXRhRW50cnlNaWRkbGUpO1xuICAgICAgICBjb25zdCBrZXlzMyA9IE9iamVjdC5rZXlzKGRhdGFFbnRyeUxhc3QpO1xuXG4gICAgICAgIGNvbnN0IGtleXMgPSBuZXcgU2V0KGtleXMxLmNvbmNhdChrZXlzMikuY29uY2F0KGtleXMzKSk7XG5cbiAgICAgICAgcmV0dXJuICFFeHBvcnRVdGlsaXRpZXMuaXNTcGVjaWFsRGF0YShkYXRhRW50cnkpID8gQXJyYXkuZnJvbShrZXlzKSA6IFsnQ29sdW1uIDEnXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHNhdmVCbG9iVG9GaWxlKGJsb2I6IEJsb2IsIGZpbGVOYW1lKSB7XG4gICAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICAgIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgICBhLmRvd25sb2FkID0gZmlsZU5hbWU7XG5cbiAgICAgICAgYS5ocmVmID0gdXJsO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpO1xuICAgICAgICBhLmNsaWNrKCk7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSk7XG4gICAgICAgIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBzdHJpbmdUb0FycmF5QnVmZmVyKHM6IHN0cmluZyk6IEFycmF5QnVmZmVyIHtcbiAgICAgICAgY29uc3QgYnVmID0gbmV3IEFycmF5QnVmZmVyKHMubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1Zik7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpICE9PSBzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSAgbm8tYml0d2lzZSAqL1xuICAgICAgICAgICAgdmlld1tpXSA9IHMuY2hhckNvZGVBdChpKSAmIDB4RkY7XG4gICAgICAgICAgICAvKiBlc2xpbnQtZW5hYmxlICBuby1iaXR3aXNlICovXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJ1ZjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGlzU3BlY2lhbERhdGEoZGF0YTogYW55KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgICAgICB0eXBlb2YgZGF0YSA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgIGRhdGEgaW5zdGFuY2VvZiBEYXRlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGhhc1ZhbHVlKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBpc051bGxPcldoaXRlc3BhY2VzKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwgfHwgIXZhbHVlLnRyaW0oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHNhbml0aXplVmFsdWUodmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgICAgIGlmICghdGhpcy5oYXNWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHN0cmluZ1ZhbHVlID0gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZS5yZXBsYWNlKC8mL2csICcmYW1wOycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvPC9nLCAnJmx0OycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvPi9nLCAnJmd0OycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXCIvZywgJyZxdW90OycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvJy9nLCAnJmFwb3M7Jyk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=