@sunbird-cb/toc 0.0.16 → 0.0.17

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.
@@ -260,6 +260,11 @@ export class AppTocV2Service {
260
260
  // Enrollment shows 100% - mark course as complete
261
261
  course.completionPercentage = 100;
262
262
  course.completionStatus = 2;
263
+ if (enrollment.issuedCertificates.length > 0) {
264
+ const certificate = enrollment.issuedCertificates.sort((a, b) => new Date(a.lastIssuedOn).getTime() - new Date(b.lastIssuedOn).getTime());
265
+ const certId = certificate[0].identifier;
266
+ course.issuedCertificatesId = certId;
267
+ }
263
268
  this.tocSvc.mapCompletionChildPercentageProgram(course);
264
269
  }
265
270
  else if (enrollment && enrollment.completionPercentage > 0) {
@@ -330,4 +335,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
330
335
  providedIn: 'root'
331
336
  }]
332
337
  }], ctorParameters: function () { return [{ type: i1.AppTocService }]; } });
333
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXRvYy12Mi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL3NlcnZpY2VzL2FwcC10b2MtdjIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7O0FBSWpELE1BQU0sT0FBTyxlQUFlO0lBRTFCLFlBQW9CLE1BQXFCO1FBQXJCLFdBQU0sR0FBTixNQUFNLENBQWU7SUFBSSxDQUFDO0lBRTlDLHNCQUFzQixDQUFDLGVBQW9CO1FBQ3pDLElBQUksZ0JBQWdCLEdBQVEsRUFBRSxHQUFHLGVBQWUsRUFBRSxDQUFBO1FBQ2xELElBQUksU0FBUyxHQUFhLEVBQUUsQ0FBQTtRQUM1QixJQUFJLGdCQUFnQixDQUFDLDZCQUE2QixDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM5SCxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUE7WUFDakMsbUVBQW1FO1lBQ25FLGdCQUFnQixDQUFDLDZCQUE2QixDQUFDLENBQUMsTUFBTSxHQUFHLGdCQUFnQixDQUFDLFVBQVUsQ0FBQTtZQUNwRiw4REFBOEQ7WUFDOUQsZ0JBQWdCLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFBO1lBRXRFLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUZBQXVGLEVBQUU7Z0JBQ25HLEVBQUUsRUFBRSxnQkFBZ0IsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLFVBQVU7Z0JBQzlELElBQUksRUFBRSxnQkFBZ0IsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLElBQUk7Z0JBQzFELGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLGVBQWU7Z0JBQ2hGLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLE1BQU07Z0JBQzlELGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLGVBQWU7YUFDakYsQ0FBQyxDQUFBO1lBRUYsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLDZCQUE2QixDQUFDLENBQUMsQ0FBQTtZQUNsRixTQUFTLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxxQkFBcUIsSUFBSSxlQUFlLEVBQUUsMkJBQTJCLEVBQUUsVUFBVSxDQUFDLENBQUE7U0FDbkg7YUFBTTtZQUNMLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0ZBQWtGLENBQUMsQ0FBQTtTQUNoRztRQUVELGlEQUFpRDtRQUNqRCxpRkFBaUY7UUFDakYsSUFBSSxjQUFjLEdBQUcsQ0FBQyxDQUFBO1FBQ3RCLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQWMsRUFBRSxFQUFFO1lBQzNELHVDQUF1QztZQUN2Qyw4Q0FBOEM7WUFDOUMsb0ZBQW9GO1lBQ3BGLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQTtZQUUzQixJQUFJLGFBQWEsR0FBUTtnQkFDdkIsWUFBWSxFQUFFLFNBQVMsQ0FBQyxFQUFFO2dCQUMxQixhQUFhLEVBQUUsU0FBUyxDQUFDLFdBQVc7Z0JBQ3BDLFVBQVUsRUFBRSwyQ0FBMkM7Z0JBQ3ZELFVBQVUsRUFBRSxHQUFHO2dCQUNmLGlCQUFpQixFQUFFLFdBQVc7Z0JBQzlCLGdCQUFnQixFQUFFLFdBQVc7Z0JBQzdCLFdBQVcsRUFBRSxzQ0FBc0M7Z0JBQ25ELE1BQU0sRUFBRSxTQUFTLENBQUMsSUFBSTtnQkFDdEIsYUFBYSxFQUFFLFFBQVE7Z0JBQ3ZCLFVBQVUsRUFBRSxjQUFjO2dCQUMxQixnQkFBZ0IsRUFBRSxjQUFjO2dCQUNoQyxRQUFRLEVBQUUsQ0FBQztnQkFDWCxrQkFBa0IsRUFBRSxDQUFDO2dCQUNyQixzQkFBc0IsRUFBRSxDQUFDO2dCQUN6QixXQUFXLEVBQUUsRUFBRTtnQkFDZixrREFBa0Q7Z0JBQ2xELGFBQWEsRUFBRSxJQUFJO2dCQUNuQixjQUFjLEVBQUUsSUFBSTtnQkFDcEIsVUFBVSxFQUFFLEtBQUs7Z0JBQ2pCLFlBQVksRUFBRSxLQUFLO2dCQUNuQixtQkFBbUIsRUFBRSxLQUFLO2dCQUMxQixRQUFRLEVBQUUsZ0JBQWdCLENBQUMsVUFBVTthQUN0QyxDQUFBO1lBRUQsYUFBYSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtZQUM5QixJQUFJLFNBQVMsRUFBRSxPQUFPLElBQUksU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUU7Z0JBQ3BELFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsZUFBb0IsRUFBRSxFQUFFO29CQUNqRCxvREFBb0Q7b0JBQ3BELGVBQWUsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQTtvQkFDckMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQTtvQkFDbEMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLGVBQWUsRUFBRSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtvQkFDOUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLENBQUE7b0JBQzNDLElBQUksZUFBZSxJQUFJLGVBQWUsRUFBRSxTQUFTLElBQUksZUFBZSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUU7d0JBQ3ZGLFNBQVMsR0FBRyxDQUFDLEdBQUcsU0FBUyxFQUFFLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFBO3dCQUN4RCxhQUFhLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLGFBQWEsRUFBRSxTQUFTLEVBQUUsR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUE7cUJBRXpGO29CQUNELElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDLENBQUE7Z0JBQ2xELENBQUMsQ0FBQyxDQUFBO2FBRUg7WUFDRCxJQUFJLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDL0IsdURBQXVEO2dCQUN2RCxTQUFTLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUE7Z0JBQ2hELFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGdCQUFnQixFQUFFLFVBQVUsQ0FBQyxDQUFBO2dCQUN2RCxhQUFhLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLGFBQWEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLFVBQVUsQ0FBQyxDQUFBO2dCQUNuRyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFBO2FBQzVEO1lBQ0QsYUFBYSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQUUsR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQTtZQUNuRixhQUFhLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFBO1lBQ2pFLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUE7WUFDcEMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQTtZQUVoSSxjQUFjLEVBQUUsQ0FBQTtRQUNsQixDQUFDLENBQUMsQ0FBQTtRQUNGLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQTtRQUM5QyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUE7UUFDckQsT0FBTyxnQkFBZ0IsQ0FBQTtJQUN6QixDQUFDO0lBRUEsY0FBYyxDQUFDLE9BQTJCO1FBQ3ZDLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUU7WUFDL0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQzNCLElBQUksS0FBSyxDQUFDLGVBQWUsS0FBSyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFO29CQUMvRCxJQUFHLEtBQUssRUFBRSxXQUFXLEVBQUU7d0JBQ3ZCLE9BQU8sQ0FBQyxhQUFhLENBQUMsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsR0FBRyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7NEJBQy9GLEtBQUssRUFBRSxXQUFXLENBQUE7cUJBQ2pCO2lCQUNGO1lBQ0gsQ0FBQyxDQUFDLENBQUE7U0FDSDtJQUNILENBQUM7SUFHSCxpQ0FBaUMsQ0FBQyxvQkFBeUIsRUFBRSxrQkFBdUI7UUFDbEYsSUFBSSxvQkFBb0IsSUFBSSxvQkFBb0IsQ0FBQyxRQUFRLEVBQUU7WUFDekQsSUFBSSxjQUFjLEdBQUcsQ0FBQyxDQUFBO1lBQ3RCLElBQUksdUJBQXVCLEdBQUcsQ0FBQyxDQUFBO1lBRS9CLDhDQUE4QztZQUM5QyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7Z0JBQ25ELElBQUksS0FBSyxDQUFDLGVBQWUsS0FBSyxXQUFXLEVBQUU7b0JBQ3pDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixDQUFDLENBQUE7b0JBQ3pGLGNBQWMsSUFBSSxLQUFLLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQTtvQkFDM0MsdUJBQXVCLElBQUksS0FBSyxDQUFDLHVCQUF1QixJQUFJLENBQUMsQ0FBQTtpQkFDOUQ7cUJBQU07b0JBQ0wsa0RBQWtEO29CQUNsRCx3RkFBd0Y7b0JBQ3hGLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQUUsVUFBVSxDQUFDLENBQUE7b0JBQzFGLElBQUksQ0FBQyxVQUFVLEVBQUU7d0JBQ2YsVUFBVSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFBO3FCQUN4RTtvQkFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFBO29CQUMxQyxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsSUFBSSxHQUFHLENBQUE7b0JBQzNHLGNBQWMsSUFBSSxLQUFLLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQTtvQkFDM0MsdUJBQXVCLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtpQkFDekU7WUFDSCxDQUFDLENBQUMsQ0FBQTtZQUVGLElBQUksY0FBYyxHQUFHLENBQUMsRUFBRTtnQkFDdEIsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUE7Z0JBQ3pHLG9CQUFvQixDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFBO2dCQUNsRyxvQkFBb0IsQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsb0JBQW9CLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsb0JBQW9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7YUFDaEs7WUFFRCw2REFBNkQ7WUFDN0Qsb0VBQW9FO1lBQ3BFLHdGQUF3RjtZQUN4RixzRUFBc0U7WUFDdEUsb0VBQW9FO1NBQ3JFO1FBQ0QsT0FBTyxvQkFBb0IsQ0FBQTtJQUM3QixDQUFDO0lBRU8sdUJBQXVCLENBQUMsU0FBYyxFQUFFLHVCQUErQixFQUFFLGtCQUF1QjtRQUN0RyxJQUFJLGNBQWMsR0FBRyxDQUFDLENBQUE7UUFDdEIsSUFBSSx1QkFBdUIsR0FBRyxDQUFDLENBQUE7UUFDL0IsSUFBSSxnQkFBZ0IsR0FBRyxDQUFDLENBQUE7UUFDeEIsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFBO1FBRXBCLElBQUksU0FBUyxDQUFDLFFBQVEsRUFBRTtZQUN0QixTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO2dCQUN4QyxJQUFJLEtBQUssQ0FBQyxlQUFlLEtBQUssUUFBUSxFQUFFO29CQUN0QyxZQUFZLElBQUksQ0FBQyxDQUFBO29CQUNqQixJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLHVCQUF1QixFQUFFLGtCQUFrQixDQUFDLENBQUE7b0JBQzdFLHdEQUF3RDtvQkFDeEQsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsSUFBSSxHQUFHLEVBQUU7d0JBQzNGLGdCQUFnQixJQUFJLENBQUMsQ0FBQTtxQkFDdEI7aUJBQ0Y7cUJBQU07b0JBQ0wscUVBQXFFO29CQUNyRSwrQ0FBK0M7b0JBQy9DLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLEVBQUUsdUJBQXVCLENBQUMsQ0FBQTtvQkFDakYsSUFBSSxDQUFDLFVBQVUsRUFBRTt3QkFDZiwyQkFBMkI7d0JBQzNCLFVBQVUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQTtxQkFDNUU7b0JBQ0QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQTtpQkFDM0M7Z0JBRUQsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLGNBQWMsSUFBSSxDQUFDLENBQUE7Z0JBQzNDLGNBQWMsSUFBSSxTQUFTLENBQUE7Z0JBQzNCLHdEQUF3RDtnQkFDeEQsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsSUFBSSxHQUFHLEVBQUU7b0JBQzNGLHVCQUF1QixJQUFJLFNBQVMsQ0FBQTtpQkFDckM7WUFDSCxDQUFDLENBQUMsQ0FBQTtTQUNIO1FBRUQsU0FBUyxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUE7UUFDekMsU0FBUyxDQUFDLHVCQUF1QixHQUFHLHVCQUF1QixDQUFBO1FBQzNELFNBQVMsQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFBO1FBQ3JDLFNBQVMsQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQTtRQUU3QyxJQUFJLGNBQWMsR0FBRyxDQUFDLEVBQUU7WUFDdEIsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsdUJBQXVCLEdBQUcsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUE7WUFDekYsU0FBUyxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFBO1lBQ3ZGLFNBQVMsQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLG9CQUFvQixLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUM5SCxTQUFTLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsb0JBQW9CLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLG9CQUFvQixHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1NBQ3JIO0lBQ0gsQ0FBQztJQUVPLGtCQUFrQixDQUFDLElBQVMsRUFBRSxVQUFlO1FBQ25ELElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDZixrRkFBa0Y7WUFDbEYsMEZBQTBGO1lBQzFGLElBQUksSUFBSSxDQUFDLG9CQUFvQixLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO2dCQUMvRyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsQ0FBQyxDQUFBO2dCQUM3QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFBO2dCQUN6QixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQTthQUNoQjtZQUNELDZEQUE2RDtZQUM3RCxPQUFNO1NBQ1A7UUFFRCx1RUFBdUU7UUFDdkUsMERBQTBEO1FBQzFELE1BQU0sa0JBQWtCLEdBQUcsVUFBVSxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsVUFBVTtZQUMxQyxVQUFVLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxVQUFVLENBQUE7UUFFcEUsSUFBSSxrQkFBa0IsRUFBRTtZQUV0QixtQ0FBbUM7WUFDbkMsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLG9CQUFvQixJQUFJLFVBQVUsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFBO1lBQzVFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFBO1lBRTdDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxRQUFRLENBQUE7WUFDcEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQTtZQUM5QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtZQUVwQixPQUFPLENBQUMsR0FBRyxDQUFDLCtCQUErQixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUU7Z0JBQzdELG9CQUFvQixFQUFFLFFBQVE7Z0JBQzlCLGdCQUFnQixFQUFFLE1BQU07Z0JBQ3hCLGNBQWMsRUFBRTtvQkFDZCxRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVE7b0JBQzdCLG9CQUFvQixFQUFFLFVBQVUsQ0FBQyxvQkFBb0I7b0JBQ3JELE1BQU0sRUFBRSxVQUFVLENBQUMsTUFBTTtpQkFDMUI7YUFDRixDQUFDLENBQUE7WUFDRixPQUFNO1NBQ1A7UUFFRCwrRUFBK0U7UUFDL0UsTUFBTSxjQUFjLEdBQUcsVUFBVSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUNoRSxHQUFHLEVBQUUsU0FBUyxLQUFLLElBQUksQ0FBQyxVQUFVLElBQUksR0FBRyxFQUFFLFlBQVksS0FBSyxJQUFJLENBQUMsVUFBVSxDQUM1RSxDQUFBO1FBRUQsSUFBSSxVQUFVLElBQUksY0FBYyxJQUFJLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzdELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxjQUFjLENBQUMsb0JBQW9CLElBQUksY0FBYyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUE7WUFDL0YsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQzFELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7U0FDakQ7YUFBTSxJQUFJLFVBQVUsSUFBSSxjQUFjLElBQUksY0FBYyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDdEUsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEdBQUcsQ0FBQTtZQUMvQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFBO1lBQ3pCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO1NBQ2hCO2FBQU0sSUFBSSxVQUFVLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDeEMsd0RBQXdEO1lBQ3hELG9HQUFvRztZQUNwRyx1REFBdUQ7WUFDdkQsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUU7Z0JBQy9HLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLENBQUE7Z0JBQzdCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUE7Z0JBQ3pCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO2FBQ2hCO1lBQ0Qsd0RBQXdEO1NBQ3pEO2FBQU07WUFDTCxvQ0FBb0M7WUFDcEMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLENBQUMsQ0FBQTtZQUM3QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFBO1lBQ3pCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO1NBQ2hCO1FBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFO1lBQzNELGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0I7WUFDdkMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLG9CQUFvQjtZQUMvQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07U0FDcEIsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVPLG9CQUFvQixDQUFDLE1BQVcsRUFBRSx1QkFBdUIsRUFBRSxrQkFBdUI7UUFDeEYsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUE7UUFFOUUsSUFBSSxVQUFVLEVBQUUsb0JBQW9CLEtBQUssR0FBRyxFQUFFO1lBQzVDLGtEQUFrRDtZQUNsRCxNQUFNLENBQUMsb0JBQW9CLEdBQUcsR0FBRyxDQUFBO1lBQ2pDLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUE7WUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQ0FBbUMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtTQUN4RDthQUFNLElBQUksVUFBVSxJQUFJLFVBQVUsQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLEVBQUU7WUFDNUQsa0NBQWtDO1lBQ2xDLE1BQU0sQ0FBQyxvQkFBb0IsR0FBRyxVQUFVLENBQUMsb0JBQW9CLElBQUksQ0FBQyxDQUFBO1lBQ2xFLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUE7WUFDM0IsdUJBQXVCO1lBQ3ZCLElBQUksTUFBTSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ2pELE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7b0JBR3JDLGdFQUFnRTtvQkFDaEUsSUFBSSxLQUFLLENBQUMsZUFBZSxLQUFLLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQzlHLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7NEJBQ3ZDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUE7d0JBQy9DLENBQUMsQ0FBQyxDQUFBO3FCQUNIO3lCQUFNO3dCQUNQLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUE7cUJBQ3pDO2dCQUNILENBQUMsQ0FBQyxDQUFBO2FBQ0g7U0FDRjthQUFNO1lBQ0wsSUFBSSxNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDakQsSUFBSSxjQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsSUFBSSxDQUFDLENBQUE7Z0JBQy9DLElBQUksY0FBYyxHQUFHLENBQUMsQ0FBQTtnQkFFdEIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtvQkFFckMsZ0VBQWdFO29CQUNoRSxJQUFJLEtBQUssQ0FBQyxlQUFlLEtBQUssU0FBUyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTt3QkFDOUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRTs0QkFDdkMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQTs0QkFDN0MsSUFBSSxRQUFRLENBQUMsZ0JBQWdCLEtBQUssQ0FBQyxJQUFJLFFBQVEsQ0FBQyxvQkFBb0IsS0FBSyxHQUFHLEVBQUU7Z0NBQzVFLGNBQWMsSUFBSSxRQUFRLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQTs2QkFDL0M7d0JBQ0gsQ0FBQyxDQUFDLENBQUE7cUJBQ0g7eUJBQU07d0JBQ1AsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQTtxQkFFekM7b0JBQ0QsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsS0FBSyxHQUFHLEVBQUU7d0JBQ3RFLGNBQWMsSUFBSSxLQUFLLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQTtxQkFDNUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUE7Z0JBRUYsa0ZBQWtGO2dCQUNsRixJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLG9CQUFvQixJQUFJLE1BQU0sQ0FBQyxvQkFBb0IsS0FBSyxDQUFDLEVBQUU7b0JBQ3BGLElBQUksQ0FBQyxjQUFjLEVBQUU7d0JBQ25CLGNBQWMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQVcsRUFBRSxJQUFTLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7cUJBQ3pHO29CQUNELElBQUksY0FBYyxHQUFHLENBQUMsRUFBRTt3QkFDdEIsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFBO3dCQUNoRixNQUFNLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUE7d0JBQ3BGLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLG9CQUFvQixLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtxQkFFdEg7aUJBQ0Y7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUVPLGNBQWMsQ0FBQyxjQUFtQixFQUFFLFVBQWtCO1FBQzVELElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTTtZQUFFLE9BQU8sSUFBSSxDQUFBO1FBQzFELE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksS0FBSyxVQUFVLElBQUksRUFBRSxDQUFDLFNBQVMsS0FBSyxVQUFVLENBQUMsQ0FBQTtJQUN4RyxDQUFDOytHQTNWVSxlQUFlO21IQUFmLGVBQWUsY0FGZCxNQUFNOzs0RkFFUCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFwcFRvY1NlcnZpY2UgfSBmcm9tICcuL2FwcC10b2Muc2VydmljZSc7XG5pbXBvcnQgeyBOc0NvbnRlbnQgfSBmcm9tICdAc3VuYmlyZC1jYi91dGlscy12Mic7XG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBBcHBUb2NWMlNlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdG9jU3ZjOiBBcHBUb2NTZXJ2aWNlKSB7IH1cblxuICBjb25zdHJ1Y3RIZWlyYXJjaHlEYXRhKGNvbnRlbnRSZWFkRGF0YTogYW55KTogYW55IHtcbiAgICBsZXQgY29udGVudEhlaXJhcmNoeTogYW55ID0geyAuLi5jb250ZW50UmVhZERhdGEgfVxuICAgIGxldCBsZWFmTm9kZXM6IHN0cmluZ1tdID0gW11cbiAgICBpZiAoY29udGVudEhlaXJhcmNoeVsncHJlbGltaW5hcnlBc3Nlc3NtZW50RGV0YWlsJ10gJiYgT2JqZWN0LmtleXMoY29udGVudEhlaXJhcmNoeVsncHJlbGltaW5hcnlBc3Nlc3NtZW50RGV0YWlsJ10pLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnRlbnRIZWlyYXJjaHlbJ2NoaWxkcmVuJ10gPSBbXVxuICAgICAgLy8gU2V0IHBhcmVudCByZWZlcmVuY2UgZm9yIHByZWxpbWluYXJ5IGFzc2Vzc21lbnQgKHByZS1hc3Nlc3NtZW50KVxuICAgICAgY29udGVudEhlaXJhcmNoeVsncHJlbGltaW5hcnlBc3Nlc3NtZW50RGV0YWlsJ10ucGFyZW50ID0gY29udGVudEhlaXJhcmNoeS5pZGVudGlmaWVyXG4gICAgICAvLyBNYXJrIHRoaXMgYXMgdGhlIHByZS1hc3Nlc3NtZW50IGZvciBtaWxlc3RvbmUgbG9ja2luZyBsb2dpY1xuICAgICAgY29udGVudEhlaXJhcmNoeVsncHJlbGltaW5hcnlBc3Nlc3NtZW50RGV0YWlsJ10uaXNQcmVBc3Nlc3NtZW50ID0gdHJ1ZVxuICAgICAgXG4gICAgICBjb25zb2xlLmxvZygn8J+UjSBbQ09OU1RSVUNUIEhJRVJBUkNIWV0gU2V0dGluZyBpc1ByZUFzc2Vzc21lbnQ9dHJ1ZSBvbiBwcmVsaW1pbmFyeUFzc2Vzc21lbnREZXRhaWw6Jywge1xuICAgICAgICBpZDogY29udGVudEhlaXJhcmNoeVsncHJlbGltaW5hcnlBc3Nlc3NtZW50RGV0YWlsJ10uaWRlbnRpZmllcixcbiAgICAgICAgbmFtZTogY29udGVudEhlaXJhcmNoeVsncHJlbGltaW5hcnlBc3Nlc3NtZW50RGV0YWlsJ10ubmFtZSxcbiAgICAgICAgaXNQcmVBc3Nlc3NtZW50OiBjb250ZW50SGVpcmFyY2h5WydwcmVsaW1pbmFyeUFzc2Vzc21lbnREZXRhaWwnXS5pc1ByZUFzc2Vzc21lbnQsXG4gICAgICAgIHBhcmVudDogY29udGVudEhlaXJhcmNoeVsncHJlbGltaW5hcnlBc3Nlc3NtZW50RGV0YWlsJ10ucGFyZW50LFxuICAgICAgICBwcmltYXJ5Q2F0ZWdvcnk6IGNvbnRlbnRIZWlyYXJjaHlbJ3ByZWxpbWluYXJ5QXNzZXNzbWVudERldGFpbCddLnByaW1hcnlDYXRlZ29yeVxuICAgICAgfSlcbiAgICAgIFxuICAgICAgY29udGVudEhlaXJhcmNoeVsnY2hpbGRyZW4nXS5wdXNoKGNvbnRlbnRIZWlyYXJjaHlbJ3ByZWxpbWluYXJ5QXNzZXNzbWVudERldGFpbCddKVxuICAgICAgbGVhZk5vZGVzLnB1c2goY29udGVudFJlYWREYXRhPy5wcmVsaW1pbmFyeUFzc2Vzc21lbnQgfHwgY29udGVudFJlYWREYXRhPy5wcmVsaW1pbmFyeUFzc2Vzc21lbnREZXRhaWw/LmlkZW50aWZpZXIpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKCfimqDvuI8gW0NPTlNUUlVDVCBISUVSQVJDSFldIE5vIHByZWxpbWluYXJ5QXNzZXNzbWVudERldGFpbCBmb3VuZCBpbiBjb250ZW50UmVhZERhdGEnKVxuICAgIH1cblxuICAgIC8vIFRyYWNrIG1pbGVzdG9uZSBpbmRleCBmb3IgcHJvcGVyIGxvY2tpbmcgbG9naWNcbiAgICAvLyBBbGwgbWlsZXN0b25lcyBhcmUgbG9ja2VkIGJ5IGRlZmF1bHQgLSB1bmxvY2tpbmcgaXMgY29tcHV0ZWQgYmFzZWQgb24gcHJvZ3Jlc3NcbiAgICBsZXQgbWlsZXN0b25lSW5kZXggPSAwXG4gICAgY29udGVudEhlaXJhcmNoeVsnbWlsZXN0b25lc192MSddLmZvckVhY2goKG1pbGVzdG9uZTogYW55KSA9PiB7XG4gICAgICAvLyBBbGwgbWlsZXN0b25lcyBhcmUgbG9ja2VkIGJ5IGRlZmF1bHRcbiAgICAgIC8vIE0xIHVubG9ja3Mgd2hlbiBwcmUtYXNzZXNzbWVudCBpcyBjb21wbGV0ZWRcbiAgICAgIC8vIE0yKyB1bmxvY2sgd2hlbiBwcmV2aW91cyBtaWxlc3RvbmUncyBtYW5kYXRvcnkgY29udGVudCArIGFzc2Vzc21lbnQgYXJlIGNvbXBsZXRlZFxuICAgICAgY29uc3Qgc2hvdWxkQmVMb2NrZWQgPSB0cnVlXG5cbiAgICAgIGxldCBtaWxlU3RvbmVEYXRhOiBhbnkgPSB7XG4gICAgICAgIFwiaWRlbnRpZmllclwiOiBtaWxlc3RvbmUuaWQsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogbWlsZXN0b25lLmRlc2NyaXB0aW9uLFxuICAgICAgICBcIm1pbWVUeXBlXCI6IFwiYXBwbGljYXRpb24vdm5kLmVrc3RlcC5jb250ZW50LWNvbGxlY3Rpb25cIixcbiAgICAgICAgXCJkdXJhdGlvblwiOiBcIjBcIixcbiAgICAgICAgXCJwcmltYXJ5Q2F0ZWdvcnlcIjogXCJNaWxlc3RvbmVcIixcbiAgICAgICAgXCJjb3Vyc2VDYXRlZ29yeVwiOiBcIk1pbGVzdG9uZVwiLFxuICAgICAgICBcImNyZWF0ZWRCeVwiOiBcIjI1MzExYTRmLWZhNDItNGNmNy04ODJhLTVlNzkxOThlZGZjYlwiLFxuICAgICAgICBcIm5hbWVcIjogbWlsZXN0b25lLm5hbWUsXG4gICAgICAgIFwiY29udGVudFR5cGVcIjogXCJDb3Vyc2VcIixcbiAgICAgICAgXCJpc0xvY2tlZFwiOiBzaG91bGRCZUxvY2tlZCxcbiAgICAgICAgXCJtaWxlc3RvbmVJbmRleFwiOiBtaWxlc3RvbmVJbmRleCxcbiAgICAgICAgXCJzdGF0dXNcIjogMCxcbiAgICAgICAgXCJjb21wbGV0aW9uU3RhdHVzXCI6IDAsXG4gICAgICAgIFwiY29tcGxldGlvblBlcmNlbnRhZ2VcIjogMCxcbiAgICAgICAgXCJsZWFmTm9kZXNcIjogW10sXG4gICAgICAgIC8vIFByZS1jb21wdXRlZCBmbGFncyBmb3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uXG4gICAgICAgIFwiaXNNaWxlc3RvbmVcIjogdHJ1ZSxcbiAgICAgICAgXCJpc0NvbGxlY3Rpb25cIjogdHJ1ZSxcbiAgICAgICAgXCJpc01vZHVsZVwiOiBmYWxzZSxcbiAgICAgICAgXCJpc1Jlc291cmNlXCI6IGZhbHNlLFxuICAgICAgICBcImlzTGVhcm5pbmdQYXRod2F5XCI6IGZhbHNlLFxuICAgICAgICBcInBhcmVudFwiOiBjb250ZW50SGVpcmFyY2h5LmlkZW50aWZpZXJcbiAgICAgIH1cblxuICAgICAgbWlsZVN0b25lRGF0YVsnY2hpbGRyZW4nXSA9IFtdXG4gICAgICBpZiAobWlsZXN0b25lPy5jb3Vyc2VzICYmIG1pbGVzdG9uZT8uY291cnNlcz8ubGVuZ3RoKSB7XG4gICAgICAgIG1pbGVzdG9uZS5jb3Vyc2VzLmZvckVhY2goKG1pbGVTdG9uZUNvdXJzZTogYW55KSA9PiB7XG4gICAgICAgICAgLy8gU2V0IHBhcmVudCByZWZlcmVuY2UgZm9yIGNvdXJzZXMgaW5zaWRlIG1pbGVzdG9uZVxuICAgICAgICAgIG1pbGVTdG9uZUNvdXJzZS5wYXJlbnQgPSBtaWxlc3RvbmUuaWRcbiAgICAgICAgICBtaWxlU3RvbmVDb3Vyc2VbJ21vZHVsZUNvdW50J10gPSAwXG4gICAgICAgICAgbWlsZVN0b25lRGF0YVsnZHVyYXRpb24nXSA9IFN0cmluZyhOdW1iZXIobWlsZVN0b25lRGF0YVsnZHVyYXRpb24nXSkgKyBOdW1iZXIobWlsZVN0b25lQ291cnNlPy5kdXJhdGlvbiB8fCAwKSlcbiAgICAgICAgICB0aGlzLnRvY1N2Yy5tYXBNb2R1bGVDb3VudChtaWxlU3RvbmVDb3Vyc2UpXG4gICAgICAgICAgaWYgKG1pbGVTdG9uZUNvdXJzZSAmJiBtaWxlU3RvbmVDb3Vyc2U/LmxlYWZOb2RlcyAmJiBtaWxlU3RvbmVDb3Vyc2U/LmxlYWZOb2Rlcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBsZWFmTm9kZXMgPSBbLi4ubGVhZk5vZGVzLCAuLi5taWxlU3RvbmVDb3Vyc2UubGVhZk5vZGVzXVxuICAgICAgICAgICAgbWlsZVN0b25lRGF0YVsnbGVhZk5vZGVzJ10gPSBbLi4ubWlsZVN0b25lRGF0YT8ubGVhZk5vZGVzLCAuLi5taWxlU3RvbmVDb3Vyc2UubGVhZk5vZGVzXVxuXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMudG9jU3ZjLmNoZWNrTW9kdWxlV2lzZURhdGEobWlsZVN0b25lQ291cnNlKVxuICAgICAgICB9KVxuXG4gICAgICB9XG4gICAgICBpZiAobWlsZXN0b25lPy5hc3Nlc3NtZW50RGV0YWlsKSB7XG4gICAgICAgIC8vIFNldCBwYXJlbnQgcmVmZXJlbmNlIGZvciBhc3Nlc3NtZW50IGluc2lkZSBtaWxlc3RvbmVcbiAgICAgICAgbWlsZXN0b25lLmFzc2Vzc21lbnREZXRhaWwucGFyZW50ID0gbWlsZXN0b25lLmlkXG4gICAgICAgIGxlYWZOb2Rlcy5wdXNoKG1pbGVzdG9uZT8uYXNzZXNzbWVudERldGFpbD8uaWRlbnRpZmllcilcbiAgICAgICAgbWlsZVN0b25lRGF0YVsnbGVhZk5vZGVzJ10gPSBbLi4ubWlsZVN0b25lRGF0YT8ubGVhZk5vZGVzLCBtaWxlc3RvbmU/LmFzc2Vzc21lbnREZXRhaWw/LmlkZW50aWZpZXJdXG4gICAgICAgIG1pbGVTdG9uZURhdGFbJ2NoaWxkcmVuJ10ucHVzaChtaWxlc3RvbmU/LmFzc2Vzc21lbnREZXRhaWwpXG4gICAgICB9XG4gICAgICBtaWxlU3RvbmVEYXRhWydjaGlsZHJlbiddID0gWy4uLm1pbGVzdG9uZVsnY291cnNlcyddLCAuLi5taWxlU3RvbmVEYXRhWydjaGlsZHJlbiddXVxuICAgICAgbWlsZVN0b25lRGF0YVsnbGVhZk5vZGVzQ291bnQnXSA9IG1pbGVTdG9uZURhdGFbJ2xlYWZOb2RlcyddLmxlbmd0aFxuICAgICAgICB0aGlzLm1hcE1vZHVsZUNvdW50KG1pbGVTdG9uZURhdGEpXG4gICAgICBjb250ZW50SGVpcmFyY2h5WydjaGlsZHJlbiddID0gY29udGVudEhlaXJhcmNoeVsnY2hpbGRyZW4nXSA/IFsuLi5jb250ZW50SGVpcmFyY2h5WydjaGlsZHJlbiddLCBtaWxlU3RvbmVEYXRhXSA6IFttaWxlU3RvbmVEYXRhXVxuXG4gICAgICBtaWxlc3RvbmVJbmRleCsrXG4gICAgfSlcbiAgICBjb250ZW50SGVpcmFyY2h5WydsZWFmTm9kZXMnXSA9IFsuLi5sZWFmTm9kZXNdXG4gICAgY29udGVudEhlaXJhcmNoeVsnbGVhZk5vZGVzQ291bnQnXSA9IGxlYWZOb2Rlcy5sZW5ndGhcbiAgICByZXR1cm4gY29udGVudEhlaXJhcmNoeVxuICB9XG5cbiAgIG1hcE1vZHVsZUNvdW50KGNvbnRlbnQ6IE5zQ29udGVudC5JQ29udGVudCkge1xuICAgICAgaWYgKGNvbnRlbnQgJiYgY29udGVudC5jaGlsZHJlbikge1xuICAgICAgICBjb250ZW50LmNoaWxkcmVuLm1hcChjaGlsZCA9PiB7XG4gICAgICAgICAgaWYgKGNoaWxkLnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuQ09VUlNFKSB7XG4gICAgICAgICAgICBpZihjaGlsZD8ubW9kdWxlQ291bnQpIHtcbiAgICAgICAgICAgIGNvbnRlbnRbJ21vZHVsZUNvdW50J10gPSBjb250ZW50Wydtb2R1bGVDb3VudCddID8gY29udGVudFsnbW9kdWxlQ291bnQnXSArIGNoaWxkPy5tb2R1bGVDb3VudCA6IFxuICAgICAgICAgICAgY2hpbGQ/Lm1vZHVsZUNvdW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuXG4gIG1hcENvbnRlbnRIaWVyYXJjaHlQcm9ncmVzc1VwZGF0ZShjb250ZW50SGVpcmFyY2h5RGF0YTogYW55LCBlbnJvbGxtZW50TGlzdERhdGE6IGFueSkge1xuICAgIGlmIChjb250ZW50SGVpcmFyY2h5RGF0YSAmJiBjb250ZW50SGVpcmFyY2h5RGF0YS5jaGlsZHJlbikge1xuICAgICAgbGV0IHRvdGFsTGVhZk5vZGVzID0gMFxuICAgICAgbGV0IHRvdGFsQ29tcGxldGVkTGVhZk5vZGVzID0gMFxuXG4gICAgICAvLyBGaXJzdCBwYXNzOiBVcGRhdGUgcHJvZ3Jlc3MgZm9yIGFsbCBjb250ZW50XG4gICAgICBjb250ZW50SGVpcmFyY2h5RGF0YS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZDogYW55KSA9PiB7XG4gICAgICAgIGlmIChjaGlsZC5wcmltYXJ5Q2F0ZWdvcnkgPT09ICdNaWxlc3RvbmUnKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVNaWxlc3RvbmVQcm9ncmVzcyhjaGlsZCwgY29udGVudEhlaXJhcmNoeURhdGE/LmlkZW50aWZpZXIsIGVucm9sbG1lbnRMaXN0RGF0YSlcbiAgICAgICAgICB0b3RhbExlYWZOb2RlcyArPSBjaGlsZC5sZWFmTm9kZXNDb3VudCB8fCAwXG4gICAgICAgICAgdG90YWxDb21wbGV0ZWRMZWFmTm9kZXMgKz0gY2hpbGQuY29tcGxldGVkTGVhZk5vZGVzQ291bnQgfHwgMFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEZvciBwcmUtYXNzZXNzbWVudCBhbmQgb3RoZXIgcm9vdC1sZXZlbCBjb250ZW50XG4gICAgICAgICAgLy8gVHJ5IHRvIGZpbmQgZW5yb2xsbWVudCB3aXRoIHBhcmVudCBpZGVudGlmaWVyIGZpcnN0LCB0aGVuIHdpdGggY2hpbGQncyBvd24gaWRlbnRpZmllclxuICAgICAgICAgIGxldCBlbnJvbGxtZW50ID0gdGhpcy5maW5kRW5yb2xsbWVudChlbnJvbGxtZW50TGlzdERhdGEsIGNvbnRlbnRIZWlyYXJjaHlEYXRhPy5pZGVudGlmaWVyKVxuICAgICAgICAgIGlmICghZW5yb2xsbWVudCkge1xuICAgICAgICAgICAgZW5yb2xsbWVudCA9IHRoaXMuZmluZEVucm9sbG1lbnQoZW5yb2xsbWVudExpc3REYXRhLCBjaGlsZD8uaWRlbnRpZmllcilcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy51cGRhdGVOb2RlUHJvZ3Jlc3MoY2hpbGQsIGVucm9sbG1lbnQpXG4gICAgICAgICAgY29uc3QgaXNDb21wbGV0ZWQgPSBjaGlsZC5zdGF0dXMgPT09IDIgfHwgY2hpbGQuY29tcGxldGlvblN0YXR1cyA9PT0gMiB8fCBjaGlsZC5jb21wbGV0aW9uUGVyY2VudGFnZSA+PSAxMDBcbiAgICAgICAgICB0b3RhbExlYWZOb2RlcyArPSBjaGlsZC5sZWFmTm9kZXNDb3VudCB8fCAxXG4gICAgICAgICAgdG90YWxDb21wbGV0ZWRMZWFmTm9kZXMgKz0gaXNDb21wbGV0ZWQgPyAoY2hpbGQubGVhZk5vZGVzQ291bnQgfHwgMSkgOiAwXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICAgIGlmICh0b3RhbExlYWZOb2RlcyA+IDApIHtcbiAgICAgICAgY29uc3QgY2FsY3VsYXRlZFBlcmNlbnRhZ2UgPSBNYXRoLnJvdW5kKChOdW1iZXIodG90YWxDb21wbGV0ZWRMZWFmTm9kZXMpIC8gTnVtYmVyKHRvdGFsTGVhZk5vZGVzKSkgKiAxMDApXG4gICAgICAgIGNvbnRlbnRIZWlyYXJjaHlEYXRhLmNvbXBsZXRpb25QZXJjZW50YWdlID0gaXNOYU4oY2FsY3VsYXRlZFBlcmNlbnRhZ2UpID8gMCA6IGNhbGN1bGF0ZWRQZXJjZW50YWdlXG4gICAgICAgIGNvbnRlbnRIZWlyYXJjaHlEYXRhLmNvbXBsZXRpb25TdGF0dXMgPSBOdW1iZXIoY29udGVudEhlaXJhcmNoeURhdGEuY29tcGxldGlvblBlcmNlbnRhZ2UgPT09IDEwMCA/IDIgOiAoY29udGVudEhlaXJhcmNoeURhdGEuY29tcGxldGlvblBlcmNlbnRhZ2UgPiAwID8gMSA6IDApKVxuICAgICAgfVxuXG4gICAgICAvLyBOT1RFOiBNaWxlc3RvbmUgbG9ja2luZyBpcyBjb21wdXRlZCBBRlRFUiBoYXNobWFwIGlzIGJ1aWx0XG4gICAgICAvLyBTZWUgYXBwLXRvYy1ob21lLXYyLmNvbXBvbmVudC50cyAtPiBmZXRjaENvbnRlbnRIaWVyYXJjaHkoKSBmbG93OlxuICAgICAgLy8gMS4gbWFwQ29udGVudEhpZXJhcmNoeVByb2dyZXNzVXBkYXRlICh0aGlzIG1ldGhvZCkgLSB1cGRhdGVzIHByb2dyZXNzIG9uIGNvbnRlbnQgdHJlZVxuICAgICAgLy8gMi4gY2FsbEhpcmFyY2h5UHJvZ3Jlc3NIYXNobWFwKCkgLSBidWlsZHMgaGFzaG1hcCBmcm9tIGNvbnRlbnQgdHJlZVxuICAgICAgLy8gMy4gY29tcHV0ZU1pbGVzdG9uZUxvY2tpbmdTdGF0dXMoKSAtIGNvbXB1dGVzIGxvY2tzIHVzaW5nIGhhc2htYXBcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRlbnRIZWlyYXJjaHlEYXRhXG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1pbGVzdG9uZVByb2dyZXNzKG1pbGVzdG9uZTogYW55LCBwYXJlbnRDb250ZW50SWRlbnRpZmllcjogc3RyaW5nLCBlbnJvbGxtZW50TGlzdERhdGE6IGFueSkge1xuICAgIGxldCB0b3RhbExlYWZOb2RlcyA9IDBcbiAgICBsZXQgdG90YWxDb21wbGV0ZWRMZWFmTm9kZXMgPSAwXG4gICAgbGV0IGNvbXBsZXRlZENvdXJzZXMgPSAwXG4gICAgbGV0IHRvdGFsQ291cnNlcyA9IDBcblxuICAgIGlmIChtaWxlc3RvbmUuY2hpbGRyZW4pIHtcbiAgICAgIG1pbGVzdG9uZS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZDogYW55KSA9PiB7XG4gICAgICAgIGlmIChjaGlsZC5wcmltYXJ5Q2F0ZWdvcnkgPT09ICdDb3Vyc2UnKSB7XG4gICAgICAgICAgdG90YWxDb3Vyc2VzICs9IDFcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNvdXJzZVByb2dyZXNzKGNoaWxkLCBwYXJlbnRDb250ZW50SWRlbnRpZmllciwgZW5yb2xsbWVudExpc3REYXRhKVxuICAgICAgICAgIC8vIENoZWNrIGJvdGggc3RhdHVzIGFuZCBjb21wbGV0aW9uU3RhdHVzIGZvciBjb21wbGV0aW9uXG4gICAgICAgICAgaWYgKGNoaWxkLnN0YXR1cyA9PT0gMiB8fCBjaGlsZC5jb21wbGV0aW9uU3RhdHVzID09PSAyIHx8IGNoaWxkLmNvbXBsZXRpb25QZXJjZW50YWdlID49IDEwMCkge1xuICAgICAgICAgICAgY29tcGxldGVkQ291cnNlcyArPSAxXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEZvciBhc3Nlc3NtZW50cyBhbmQgb3RoZXIgY29udGVudCwgdHJ5IG11bHRpcGxlIGVucm9sbG1lbnQgc291cmNlc1xuICAgICAgICAgIC8vIEZpcnN0IHRyeSBwYXJlbnQgTGVhcm5pbmcgUGF0aHdheSBlbnJvbGxtZW50XG4gICAgICAgICAgbGV0IGVucm9sbG1lbnQgPSB0aGlzLmZpbmRFbnJvbGxtZW50KGVucm9sbG1lbnRMaXN0RGF0YSwgcGFyZW50Q29udGVudElkZW50aWZpZXIpXG4gICAgICAgICAgaWYgKCFlbnJvbGxtZW50KSB7XG4gICAgICAgICAgICAvLyBUcnkgbWlsZXN0b25lIGVucm9sbG1lbnRcbiAgICAgICAgICAgIGVucm9sbG1lbnQgPSB0aGlzLmZpbmRFbnJvbGxtZW50KGVucm9sbG1lbnRMaXN0RGF0YSwgbWlsZXN0b25lPy5pZGVudGlmaWVyKVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnVwZGF0ZU5vZGVQcm9ncmVzcyhjaGlsZCwgZW5yb2xsbWVudClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxlYWZOb2RlcyA9IGNoaWxkLmxlYWZOb2Rlc0NvdW50IHx8IDFcbiAgICAgICAgdG90YWxMZWFmTm9kZXMgKz0gbGVhZk5vZGVzXG4gICAgICAgIC8vIENoZWNrIGJvdGggc3RhdHVzIGFuZCBjb21wbGV0aW9uU3RhdHVzIGZvciBjb21wbGV0aW9uXG4gICAgICAgIGlmIChjaGlsZC5zdGF0dXMgPT09IDIgfHwgY2hpbGQuY29tcGxldGlvblN0YXR1cyA9PT0gMiB8fCBjaGlsZC5jb21wbGV0aW9uUGVyY2VudGFnZSA+PSAxMDApIHtcbiAgICAgICAgICB0b3RhbENvbXBsZXRlZExlYWZOb2RlcyArPSBsZWFmTm9kZXNcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBtaWxlc3RvbmUubGVhZk5vZGVzQ291bnQgPSB0b3RhbExlYWZOb2Rlc1xuICAgIG1pbGVzdG9uZS5jb21wbGV0ZWRMZWFmTm9kZXNDb3VudCA9IHRvdGFsQ29tcGxldGVkTGVhZk5vZGVzXG4gICAgbWlsZXN0b25lLnRvdGFsQ291cnNlcyA9IHRvdGFsQ291cnNlc1xuICAgIG1pbGVzdG9uZS5jb21wbGV0ZWRDb3Vyc2VzID0gY29tcGxldGVkQ291cnNlc1xuXG4gICAgaWYgKHRvdGFsTGVhZk5vZGVzID4gMCkge1xuICAgICAgY29uc3QgY2FsY3VsYXRlZFBlcmNlbnRhZ2UgPSBNYXRoLnJvdW5kKCh0b3RhbENvbXBsZXRlZExlYWZOb2RlcyAvIHRvdGFsTGVhZk5vZGVzKSAqIDEwMClcbiAgICAgIG1pbGVzdG9uZS5jb21wbGV0aW9uUGVyY2VudGFnZSA9IGlzTmFOKGNhbGN1bGF0ZWRQZXJjZW50YWdlKSA/IDAgOiBjYWxjdWxhdGVkUGVyY2VudGFnZVxuICAgICAgbWlsZXN0b25lLmNvbXBsZXRpb25TdGF0dXMgPSBOdW1iZXIobWlsZXN0b25lLmNvbXBsZXRpb25QZXJjZW50YWdlID09PSAxMDAgPyAyIDogKG1pbGVzdG9uZS5jb21wbGV0aW9uUGVyY2VudGFnZSA+IDAgPyAxIDogMCkpXG4gICAgICBtaWxlc3RvbmUuc3RhdHVzID0gTnVtYmVyKG1pbGVzdG9uZS5jb21wbGV0aW9uUGVyY2VudGFnZSA9PT0gMTAwID8gMiA6IChtaWxlc3RvbmUuY29tcGxldGlvblBlcmNlbnRhZ2UgPiAwID8gMSA6IDApKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTm9kZVByb2dyZXNzKG5vZGU6IGFueSwgZW5yb2xsbWVudDogYW55KSB7XG4gICAgaWYgKCFlbnJvbGxtZW50KSB7XG4gICAgICAvLyBJZiBubyBlbnJvbGxtZW50IGRhdGEsIHByZXNlcnZlIGV4aXN0aW5nIGNvbXBsZXRpb24gZGF0YSBmcm9tIGNvbnRlbnQgaGllcmFyY2h5XG4gICAgICAvLyBUaGlzIGlzIGltcG9ydGFudCBmb3IgYXNzZXNzbWVudHMgdGhhdCBtYXkgaGF2ZSBjb21wbGV0aW9uIGRhdGEgYnV0IG5vIGVucm9sbG1lbnQgZW50cnlcbiAgICAgIGlmIChub2RlLmNvbXBsZXRpb25QZXJjZW50YWdlID09PSB1bmRlZmluZWQgJiYgbm9kZS5jb21wbGV0aW9uU3RhdHVzID09PSB1bmRlZmluZWQgJiYgbm9kZS5zdGF0dXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBub2RlLmNvbXBsZXRpb25QZXJjZW50YWdlID0gMFxuICAgICAgICBub2RlLmNvbXBsZXRpb25TdGF0dXMgPSAwXG4gICAgICAgIG5vZGUuc3RhdHVzID0gMFxuICAgICAgfVxuICAgICAgLy8gT3RoZXJ3aXNlLCBrZWVwIHRoZSBleGlzdGluZyB2YWx1ZXMgZnJvbSBjb250ZW50IGhpZXJhcmNoeVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIG5vZGUgaXRzZWxmIGlzIHRoZSBlbnJvbGxlZCBjb250ZW50IChkaXJlY3QgZW5yb2xsbWVudClcbiAgICAvLyBUaGlzIGhhcHBlbnMgZm9yIHByZS1hc3Nlc3NtZW50cyBhbmQgc3RhbmRhbG9uZSBjb250ZW50XG4gICAgY29uc3QgaXNEaXJlY3RFbnJvbGxtZW50ID0gZW5yb2xsbWVudC5jb2xsZWN0aW9uSWQgPT09IG5vZGUuaWRlbnRpZmllciB8fCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5yb2xsbWVudC5jb250ZW50SWQgPT09IG5vZGUuaWRlbnRpZmllclxuICAgIFxuICAgIGlmIChpc0RpcmVjdEVucm9sbG1lbnQpIHtcbiAgICAgIFxuICAgICAgLy8gVXNlIGVucm9sbG1lbnQncyBkaXJlY3QgcHJvZ3Jlc3NcbiAgICAgIGNvbnN0IHByb2dyZXNzID0gZW5yb2xsbWVudC5jb21wbGV0aW9uUGVyY2VudGFnZSB8fCBlbnJvbGxtZW50LnByb2dyZXNzIHx8IDBcbiAgICAgIGNvbnN0IHN0YXR1cyA9IE51bWJlcihlbnJvbGxtZW50LnN0YXR1cykgfHwgMFxuICAgICAgXG4gICAgICBub2RlLmNvbXBsZXRpb25QZXJjZW50YWdlID0gcHJvZ3Jlc3NcbiAgICAgIG5vZGUuY29tcGxldGlvblN0YXR1cyA9IHN0YXR1c1xuICAgICAgbm9kZS5zdGF0dXMgPSBzdGF0dXNcbiAgICAgIFxuICAgICAgY29uc29sZS5sb2coYERpcmVjdCBlbnJvbGxtZW50IGZvdW5kIGZvciAke25vZGUuaWRlbnRpZmllcn06YCwge1xuICAgICAgICBjb21wbGV0aW9uUGVyY2VudGFnZTogcHJvZ3Jlc3MsXG4gICAgICAgIGNvbXBsZXRpb25TdGF0dXM6IHN0YXR1cyxcbiAgICAgICAgZW5yb2xsbWVudERhdGE6IHsgXG4gICAgICAgICAgcHJvZ3Jlc3M6IGVucm9sbG1lbnQucHJvZ3Jlc3MsIFxuICAgICAgICAgIGNvbXBsZXRpb25QZXJjZW50YWdlOiBlbnJvbGxtZW50LmNvbXBsZXRpb25QZXJjZW50YWdlLFxuICAgICAgICAgIHN0YXR1czogZW5yb2xsbWVudC5zdGF0dXMgXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBUcnkgYm90aCBjb250ZW50SWQgYW5kIGNvbGxlY3Rpb25JZCBhcyB0aGUgQVBJIHJlc3BvbnNlIG1heSB1c2UgZWl0aGVyIGZpZWxkXG4gICAgY29uc3Qgbm9kZUVucm9sbERhdGEgPSBlbnJvbGxtZW50Py5jb250ZW50TGlzdD8uZmluZCgoZWxlOiBhbnkpID0+IFxuICAgICAgZWxlPy5jb250ZW50SWQgPT09IG5vZGUuaWRlbnRpZmllciB8fCBlbGU/LmNvbGxlY3Rpb25JZCA9PT0gbm9kZS5pZGVudGlmaWVyXG4gICAgKVxuICAgIFxuICAgIGlmIChlbnJvbGxtZW50ICYmIG5vZGVFbnJvbGxEYXRhICYmIG5vZGVFbnJvbGxEYXRhLnN0YXR1cyA8IDIpIHtcbiAgICAgIG5vZGUuY29tcGxldGlvblBlcmNlbnRhZ2UgPSBub2RlRW5yb2xsRGF0YS5jb21wbGV0aW9uUGVyY2VudGFnZSB8fCBub2RlRW5yb2xsRGF0YS5wcm9ncmVzcyB8fCAwXG4gICAgICBub2RlLmNvbXBsZXRpb25TdGF0dXMgPSBOdW1iZXIobm9kZUVucm9sbERhdGEuc3RhdHVzKSB8fCAwXG4gICAgICBub2RlLnN0YXR1cyA9IE51bWJlcihub2RlRW5yb2xsRGF0YS5zdGF0dXMpIHx8IDBcbiAgICB9IGVsc2UgaWYgKGVucm9sbG1lbnQgJiYgbm9kZUVucm9sbERhdGEgJiYgbm9kZUVucm9sbERhdGEuc3RhdHVzID09PSAyKSB7XG4gICAgICBub2RlLmNvbXBsZXRpb25QZXJjZW50YWdlID0gMTAwXG4gICAgICBub2RlLmNvbXBsZXRpb25TdGF0dXMgPSAyXG4gICAgICBub2RlLnN0YXR1cyA9IDJcbiAgICB9IGVsc2UgaWYgKGVucm9sbG1lbnQgJiYgIW5vZGVFbnJvbGxEYXRhKSB7XG4gICAgICAvLyBFbnJvbGxtZW50IGV4aXN0cyBidXQgdGhpcyBub2RlIGlzIG5vdCBpbiBjb250ZW50TGlzdFxuICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIGZvciBjb21wbGV0ZWQgYXNzZXNzbWVudHMgLSBwcmVzZXJ2ZSB0aGVpciBjb21wbGV0aW9uIGRhdGEgZnJvbSBjb250ZW50IGhpZXJhcmNoeVxuICAgICAgLy8gT25seSByZXNldCB0byAwIGlmIHRoZXJlJ3Mgbm8gY29tcGxldGlvbiBkYXRhIGF0IGFsbFxuICAgICAgaWYgKG5vZGUuY29tcGxldGlvblBlcmNlbnRhZ2UgPT09IHVuZGVmaW5lZCAmJiBub2RlLmNvbXBsZXRpb25TdGF0dXMgPT09IHVuZGVmaW5lZCAmJiBub2RlLnN0YXR1cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5vZGUuY29tcGxldGlvblBlcmNlbnRhZ2UgPSAwXG4gICAgICAgIG5vZGUuY29tcGxldGlvblN0YXR1cyA9IDBcbiAgICAgICAgbm9kZS5zdGF0dXMgPSAwXG4gICAgICB9XG4gICAgICAvLyBPdGhlcndpc2Uga2VlcCBleGlzdGluZyB2YWx1ZXMgZnJvbSBjb250ZW50IGhpZXJhcmNoeVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBlbnJvbGxtZW50IGF0IGFsbCAtIHJlc2V0IHRvIDBcbiAgICAgIG5vZGUuY29tcGxldGlvblBlcmNlbnRhZ2UgPSAwXG4gICAgICBub2RlLmNvbXBsZXRpb25TdGF0dXMgPSAwXG4gICAgICBub2RlLnN0YXR1cyA9IDBcbiAgICB9XG4gICAgXG4gICAgY29uc29sZS5sb2coYFVwZGF0ZWQgbm9kZSBwcm9ncmVzcyBmb3IgJHtub2RlLmlkZW50aWZpZXJ9OmAsIHtcbiAgICAgIGNvbXBsZXRpb25TdGF0dXM6IG5vZGUuY29tcGxldGlvblN0YXR1cyxcbiAgICAgIGNvbXBsZXRpb25QZXJjZW50YWdlOiBub2RlLmNvbXBsZXRpb25QZXJjZW50YWdlLFxuICAgICAgc3RhdHVzOiBub2RlLnN0YXR1c1xuICAgIH0pXG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNvdXJzZVByb2dyZXNzKGNvdXJzZTogYW55LCBwYXJlbnRDb250ZW50SWRlbnRpZmllciwgZW5yb2xsbWVudExpc3REYXRhOiBhbnkpIHtcbiAgICBjb25zdCBlbnJvbGxtZW50ID0gdGhpcy5maW5kRW5yb2xsbWVudChlbnJvbGxtZW50TGlzdERhdGEsIGNvdXJzZT8uaWRlbnRpZmllcilcblxuICAgIGlmIChlbnJvbGxtZW50Py5jb21wbGV0aW9uUGVyY2VudGFnZSA9PT0gMTAwKSB7XG4gICAgICAvLyBFbnJvbGxtZW50IHNob3dzIDEwMCUgLSBtYXJrIGNvdXJzZSBhcyBjb21wbGV0ZVxuICAgICAgY291cnNlLmNvbXBsZXRpb25QZXJjZW50YWdlID0gMTAwXG4gICAgICBjb3Vyc2UuY29tcGxldGlvblN0YXR1cyA9IDJcbiAgICAgIHRoaXMudG9jU3ZjLm1hcENvbXBsZXRpb25DaGlsZFBlcmNlbnRhZ2VQcm9ncmFtKGNvdXJzZSlcbiAgICB9IGVsc2UgaWYgKGVucm9sbG1lbnQgJiYgZW5yb2xsbWVudC5jb21wbGV0aW9uUGVyY2VudGFnZSA+IDApIHtcbiAgICAgIC8vIEVucm9sbG1lbnQgaGFzIHBhcnRpYWwgcHJvZ3Jlc3NcbiAgICAgIGNvdXJzZS5jb21wbGV0aW9uUGVyY2VudGFnZSA9IGVucm9sbG1lbnQuY29tcGxldGlvblBlcmNlbnRhZ2UgfHwgMFxuICAgICAgY291cnNlLmNvbXBsZXRpb25TdGF0dXMgPSAxXG4gICAgICAvLyBBbHNvIHVwZGF0ZSBjaGlsZHJlblxuICAgICAgaWYgKGNvdXJzZS5jaGlsZHJlbiAmJiBjb3Vyc2UuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICBjb3Vyc2UuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQ6IGFueSkgPT4ge1xuICAgICAgICAgIFxuXG4gICAgICAgICAgLy8gSWYgY2hpbGQgaXMgYSBtb2R1bGUsIHVwZGF0ZSBpdHMgY2hpbGRyZW4gKHJlc291cmNlcykgYXMgd2VsbFxuICAgICAgICAgIGlmIChjaGlsZC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5Lk1PRFVMRSAmJiBjaGlsZC5jaGlsZHJlbiAmJiBjaGlsZC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjaGlsZC5jaGlsZHJlbi5mb3JFYWNoKChyZXNvdXJjZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlTm9kZVByb2dyZXNzKHJlc291cmNlLCBlbnJvbGxtZW50KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudXBkYXRlTm9kZVByb2dyZXNzKGNoaWxkLCBlbnJvbGxtZW50KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGNvdXJzZS5jaGlsZHJlbiAmJiBjb3Vyc2UuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICBsZXQgdG90YWxMZWFmTm9kZXMgPSBjb3Vyc2UubGVhZk5vZGVzQ291bnQgfHwgMFxuICAgICAgICBsZXQgdG90YWxDb21wbGV0ZWQgPSAwXG5cbiAgICAgICAgY291cnNlLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkOiBhbnkpID0+IHtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBJZiBjaGlsZCBpcyBhIG1vZHVsZSwgdXBkYXRlIGl0cyBjaGlsZHJlbiAocmVzb3VyY2VzKSBhcyB3ZWxsXG4gICAgICAgICAgaWYgKGNoaWxkLnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuTU9EVUxFICYmIGNoaWxkLmNoaWxkcmVuICYmIGNoaWxkLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNoaWxkLmNoaWxkcmVuLmZvckVhY2goKHJlc291cmNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVOb2RlUHJvZ3Jlc3MocmVzb3VyY2UsIGVucm9sbG1lbnQpXG4gICAgICAgICAgICAgIGlmIChyZXNvdXJjZS5jb21wbGV0aW9uU3RhdHVzID09PSAyIHx8IHJlc291cmNlLmNvbXBsZXRpb25QZXJjZW50YWdlID09PSAxMDApIHtcbiAgICAgICAgICAgICAgICB0b3RhbENvbXBsZXRlZCArPSByZXNvdXJjZS5sZWFmTm9kZXNDb3VudCB8fCAxXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZU5vZGVQcm9ncmVzcyhjaGlsZCwgZW5yb2xsbWVudClcblxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY2hpbGQuY29tcGxldGlvblN0YXR1cyA9PT0gMiB8fCBjaGlsZC5jb21wbGV0aW9uUGVyY2VudGFnZSA9PT0gMTAwKSB7XG4gICAgICAgICAgICB0b3RhbENvbXBsZXRlZCArPSBjaGlsZC5sZWFmTm9kZXNDb3VudCB8fCAxXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIC8vIElmIGl0J3MgYSBjb2xsZWN0aW9uIGFuZCBkb2Vzbid0IGhhdmUgaXRzIG93biBlbnJvbGxtZW50IHByb2dyZXNzLCBjYWxjdWxhdGUgaXRcbiAgICAgICAgaWYgKCFlbnJvbGxtZW50IHx8ICFjb3Vyc2UuY29tcGxldGlvblBlcmNlbnRhZ2UgfHwgY291cnNlLmNvbXBsZXRpb25QZXJjZW50YWdlID09PSAwKSB7XG4gICAgICAgICAgaWYgKCF0b3RhbExlYWZOb2Rlcykge1xuICAgICAgICAgICAgdG90YWxMZWFmTm9kZXMgPSBjb3Vyc2UuY2hpbGRyZW4ucmVkdWNlKChhY2M6IG51bWJlciwgY3VycjogYW55KSA9PiBhY2MgKyAoY3Vyci5sZWFmTm9kZXNDb3VudCB8fCAxKSwgMClcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRvdGFsTGVhZk5vZGVzID4gMCkge1xuICAgICAgICAgICAgY29uc3QgY2FsY3VsYXRlZFBlcmNlbnRhZ2UgPSBNYXRoLnJvdW5kKCh0b3RhbENvbXBsZXRlZCAvIHRvdGFsTGVhZk5vZGVzKSAqIDEwMClcbiAgICAgICAgICAgIGNvdXJzZS5jb21wbGV0aW9uUGVyY2VudGFnZSA9IGlzTmFOKGNhbGN1bGF0ZWRQZXJjZW50YWdlKSA/IDAgOiBjYWxjdWxhdGVkUGVyY2VudGFnZVxuICAgICAgICAgICAgY291cnNlLmNvbXBsZXRpb25TdGF0dXMgPSBOdW1iZXIoY291cnNlLmNvbXBsZXRpb25QZXJjZW50YWdlID09PSAxMDAgPyAyIDogKGNvdXJzZS5jb21wbGV0aW9uUGVyY2VudGFnZSA+IDAgPyAxIDogMCkpXG5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbmRFbnJvbGxtZW50KGVucm9sbG1lbnRMaXN0OiBhbnksIGlkZW50aWZpZXI6IHN0cmluZykge1xuICAgIGlmICghZW5yb2xsbWVudExpc3QgfHwgIWVucm9sbG1lbnRMaXN0Lmxlbmd0aCkgcmV0dXJuIG51bGxcbiAgICByZXR1cm4gZW5yb2xsbWVudExpc3QuZmluZCgoZWw6IGFueSkgPT4gZWwuY29sbGVjdGlvbklkID09PSBpZGVudGlmaWVyIHx8IGVsLmNvbnRlbnRJZCA9PT0gaWRlbnRpZmllcilcbiAgfVxuXG5cblxufVxuXG4iXX0=
338
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXRvYy12Mi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL3NlcnZpY2VzL2FwcC10b2MtdjIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7O0FBSWpELE1BQU0sT0FBTyxlQUFlO0lBRTFCLFlBQW9CLE1BQXFCO1FBQXJCLFdBQU0sR0FBTixNQUFNLENBQWU7SUFBSSxDQUFDO0lBRTlDLHNCQUFzQixDQUFDLGVBQW9CO1FBQ3pDLElBQUksZ0JBQWdCLEdBQVEsRUFBRSxHQUFHLGVBQWUsRUFBRSxDQUFBO1FBQ2xELElBQUksU0FBUyxHQUFhLEVBQUUsQ0FBQTtRQUM1QixJQUFJLGdCQUFnQixDQUFDLDZCQUE2QixDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM5SCxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUE7WUFDakMsbUVBQW1FO1lBQ25FLGdCQUFnQixDQUFDLDZCQUE2QixDQUFDLENBQUMsTUFBTSxHQUFHLGdCQUFnQixDQUFDLFVBQVUsQ0FBQTtZQUNwRiw4REFBOEQ7WUFDOUQsZ0JBQWdCLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFBO1lBRXRFLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUZBQXVGLEVBQUU7Z0JBQ25HLEVBQUUsRUFBRSxnQkFBZ0IsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLFVBQVU7Z0JBQzlELElBQUksRUFBRSxnQkFBZ0IsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLElBQUk7Z0JBQzFELGVBQWUsRUFB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QUFvQixHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO3FCQUV0SDtpQkFDRjthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBRU8sY0FBYyxDQUFDLGNBQW1CLEVBQUUsVUFBa0I7UUFDNUQsSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNO1lBQUUsT0FBTyxJQUFJLENBQUE7UUFDMUQsT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxLQUFLLFVBQVUsSUFBSSxFQUFFLENBQUMsU0FBUyxLQUFLLFVBQVUsQ0FBQyxDQUFBO0lBQ3hHLENBQUM7K0dBaldVLGVBQWU7bUhBQWYsZUFBZSxjQUZkLE1BQU07OzRGQUVQLGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXBwVG9jU2VydmljZSB9IGZyb20gJy4vYXBwLXRvYy5zZXJ2aWNlJztcbmltcG9ydCB7IE5zQ29udGVudCB9IGZyb20gJ0BzdW5iaXJkLWNiL3V0aWxzLXYyJztcbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEFwcFRvY1YyU2VydmljZSB7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB0b2NTdmM6IEFwcFRvY1NlcnZpY2UpIHsgfVxuXG4gIGNvbnN0cnVjdEhlaXJhcmNoeURhdGEoY29udGVudFJlYWREYXRhOiBhbnkpOiBhbnkge1xuICAgIGxldCBjb250ZW50SGVpcmFyY2h5OiBhbnkgPSB7IC4uLmNvbnRlbnRSZWFkRGF0YSB9XG4gICAgbGV0IGxlYWZOb2Rlczogc3RyaW5nW10gPSBbXVxuICAgIGlmIChjb250ZW50SGVpcmFyY2h5WydwcmVsaW1pbmFyeUFzc2Vzc21lbnREZXRhaWwnXSAmJiBPYmplY3Qua2V5cyhjb250ZW50SGVpcmFyY2h5WydwcmVsaW1pbmFyeUFzc2Vzc21lbnREZXRhaWwnXSkubGVuZ3RoID4gMCkge1xuICAgICAgY29udGVudEhlaXJhcmNoeVsnY2hpbGRyZW4nXSA9IFtdXG4gICAgICAvLyBTZXQgcGFyZW50IHJlZmVyZW5jZSBmb3IgcHJlbGltaW5hcnkgYXNzZXNzbWVudCAocHJlLWFzc2Vzc21lbnQpXG4gICAgICBjb250ZW50SGVpcmFyY2h5WydwcmVsaW1pbmFyeUFzc2Vzc21lbnREZXRhaWwnXS5wYXJlbnQgPSBjb250ZW50SGVpcmFyY2h5LmlkZW50aWZpZXJcbiAgICAgIC8vIE1hcmsgdGhpcyBhcyB0aGUgcHJlLWFzc2Vzc21lbnQgZm9yIG1pbGVzdG9uZSBsb2NraW5nIGxvZ2ljXG4gICAgICBjb250ZW50SGVpcmFyY2h5WydwcmVsaW1pbmFyeUFzc2Vzc21lbnREZXRhaWwnXS5pc1ByZUFzc2Vzc21lbnQgPSB0cnVlXG4gICAgICBcbiAgICAgIGNvbnNvbGUubG9nKCfwn5SNIFtDT05TVFJVQ1QgSElFUkFSQ0hZXSBTZXR0aW5nIGlzUHJlQXNzZXNzbWVudD10cnVlIG9uIHByZWxpbWluYXJ5QXNzZXNzbWVudERldGFpbDonLCB7XG4gICAgICAgIGlkOiBjb250ZW50SGVpcmFyY2h5WydwcmVsaW1pbmFyeUFzc2Vzc21lbnREZXRhaWwnXS5pZGVudGlmaWVyLFxuICAgICAgICBuYW1lOiBjb250ZW50SGVpcmFyY2h5WydwcmVsaW1pbmFyeUFzc2Vzc21lbnREZXRhaWwnXS5uYW1lLFxuICAgICAgICBpc1ByZUFzc2Vzc21lbnQ6IGNvbnRlbnRIZWlyYXJjaHlbJ3ByZWxpbWluYXJ5QXNzZXNzbWVudERldGFpbCddLmlzUHJlQXNzZXNzbWVudCxcbiAgICAgICAgcGFyZW50OiBjb250ZW50SGVpcmFyY2h5WydwcmVsaW1pbmFyeUFzc2Vzc21lbnREZXRhaWwnXS5wYXJlbnQsXG4gICAgICAgIHByaW1hcnlDYXRlZ29yeTogY29udGVudEhlaXJhcmNoeVsncHJlbGltaW5hcnlBc3Nlc3NtZW50RGV0YWlsJ10ucHJpbWFyeUNhdGVnb3J5XG4gICAgICB9KVxuICAgICAgXG4gICAgICBjb250ZW50SGVpcmFyY2h5WydjaGlsZHJlbiddLnB1c2goY29udGVudEhlaXJhcmNoeVsncHJlbGltaW5hcnlBc3Nlc3NtZW50RGV0YWlsJ10pXG4gICAgICBsZWFmTm9kZXMucHVzaChjb250ZW50UmVhZERhdGE/LnByZWxpbWluYXJ5QXNzZXNzbWVudCB8fCBjb250ZW50UmVhZERhdGE/LnByZWxpbWluYXJ5QXNzZXNzbWVudERldGFpbD8uaWRlbnRpZmllcilcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coJ+KaoO+4jyBbQ09OU1RSVUNUIEhJRVJBUkNIWV0gTm8gcHJlbGltaW5hcnlBc3Nlc3NtZW50RGV0YWlsIGZvdW5kIGluIGNvbnRlbnRSZWFkRGF0YScpXG4gICAgfVxuXG4gICAgLy8gVHJhY2sgbWlsZXN0b25lIGluZGV4IGZvciBwcm9wZXIgbG9ja2luZyBsb2dpY1xuICAgIC8vIEFsbCBtaWxlc3RvbmVzIGFyZSBsb2NrZWQgYnkgZGVmYXVsdCAtIHVubG9ja2luZyBpcyBjb21wdXRlZCBiYXNlZCBvbiBwcm9ncmVzc1xuICAgIGxldCBtaWxlc3RvbmVJbmRleCA9IDBcbiAgICBjb250ZW50SGVpcmFyY2h5WydtaWxlc3RvbmVzX3YxJ10uZm9yRWFjaCgobWlsZXN0b25lOiBhbnkpID0+IHtcbiAgICAgIC8vIEFsbCBtaWxlc3RvbmVzIGFyZSBsb2NrZWQgYnkgZGVmYXVsdFxuICAgICAgLy8gTTEgdW5sb2NrcyB3aGVuIHByZS1hc3Nlc3NtZW50IGlzIGNvbXBsZXRlZFxuICAgICAgLy8gTTIrIHVubG9jayB3aGVuIHByZXZpb3VzIG1pbGVzdG9uZSdzIG1hbmRhdG9yeSBjb250ZW50ICsgYXNzZXNzbWVudCBhcmUgY29tcGxldGVkXG4gICAgICBjb25zdCBzaG91bGRCZUxvY2tlZCA9IHRydWVcblxuICAgICAgbGV0IG1pbGVTdG9uZURhdGE6IGFueSA9IHtcbiAgICAgICAgXCJpZGVudGlmaWVyXCI6IG1pbGVzdG9uZS5pZCxcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBtaWxlc3RvbmUuZGVzY3JpcHRpb24sXG4gICAgICAgIFwibWltZVR5cGVcIjogXCJhcHBsaWNhdGlvbi92bmQuZWtzdGVwLmNvbnRlbnQtY29sbGVjdGlvblwiLFxuICAgICAgICBcImR1cmF0aW9uXCI6IFwiMFwiLFxuICAgICAgICBcInByaW1hcnlDYXRlZ29yeVwiOiBcIk1pbGVzdG9uZVwiLFxuICAgICAgICBcImNvdXJzZUNhdGVnb3J5XCI6IFwiTWlsZXN0b25lXCIsXG4gICAgICAgIFwiY3JlYXRlZEJ5XCI6IFwiMjUzMTFhNGYtZmE0Mi00Y2Y3LTg4MmEtNWU3OTE5OGVkZmNiXCIsXG4gICAgICAgIFwibmFtZVwiOiBtaWxlc3RvbmUubmFtZSxcbiAgICAgICAgXCJjb250ZW50VHlwZVwiOiBcIkNvdXJzZVwiLFxuICAgICAgICBcImlzTG9ja2VkXCI6IHNob3VsZEJlTG9ja2VkLFxuICAgICAgICBcIm1pbGVzdG9uZUluZGV4XCI6IG1pbGVzdG9uZUluZGV4LFxuICAgICAgICBcInN0YXR1c1wiOiAwLFxuICAgICAgICBcImNvbXBsZXRpb25TdGF0dXNcIjogMCxcbiAgICAgICAgXCJjb21wbGV0aW9uUGVyY2VudGFnZVwiOiAwLFxuICAgICAgICBcImxlYWZOb2Rlc1wiOiBbXSxcbiAgICAgICAgLy8gUHJlLWNvbXB1dGVkIGZsYWdzIGZvciBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25cbiAgICAgICAgXCJpc01pbGVzdG9uZVwiOiB0cnVlLFxuICAgICAgICBcImlzQ29sbGVjdGlvblwiOiB0cnVlLFxuICAgICAgICBcImlzTW9kdWxlXCI6IGZhbHNlLFxuICAgICAgICBcImlzUmVzb3VyY2VcIjogZmFsc2UsXG4gICAgICAgIFwiaXNMZWFybmluZ1BhdGh3YXlcIjogZmFsc2UsXG4gICAgICAgIFwicGFyZW50XCI6IGNvbnRlbnRIZWlyYXJjaHkuaWRlbnRpZmllclxuICAgICAgfVxuXG4gICAgICBtaWxlU3RvbmVEYXRhWydjaGlsZHJlbiddID0gW11cbiAgICAgIGlmIChtaWxlc3RvbmU/LmNvdXJzZXMgJiYgbWlsZXN0b25lPy5jb3Vyc2VzPy5sZW5ndGgpIHtcbiAgICAgICAgbWlsZXN0b25lLmNvdXJzZXMuZm9yRWFjaCgobWlsZVN0b25lQ291cnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyBTZXQgcGFyZW50IHJlZmVyZW5jZSBmb3IgY291cnNlcyBpbnNpZGUgbWlsZXN0b25lXG4gICAgICAgICAgbWlsZVN0b25lQ291cnNlLnBhcmVudCA9IG1pbGVzdG9uZS5pZFxuICAgICAgICAgIG1pbGVTdG9uZUNvdXJzZVsnbW9kdWxlQ291bnQnXSA9IDBcbiAgICAgICAgICBtaWxlU3RvbmVEYXRhWydkdXJhdGlvbiddID0gU3RyaW5nKE51bWJlcihtaWxlU3RvbmVEYXRhWydkdXJhdGlvbiddKSArIE51bWJlcihtaWxlU3RvbmVDb3Vyc2U/LmR1cmF0aW9uIHx8IDApKVxuICAgICAgICAgIHRoaXMudG9jU3ZjLm1hcE1vZHVsZUNvdW50KG1pbGVTdG9uZUNvdXJzZSlcbiAgICAgICAgICBpZiAobWlsZVN0b25lQ291cnNlICYmIG1pbGVTdG9uZUNvdXJzZT8ubGVhZk5vZGVzICYmIG1pbGVTdG9uZUNvdXJzZT8ubGVhZk5vZGVzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGxlYWZOb2RlcyA9IFsuLi5sZWFmTm9kZXMsIC4uLm1pbGVTdG9uZUNvdXJzZS5sZWFmTm9kZXNdXG4gICAgICAgICAgICBtaWxlU3RvbmVEYXRhWydsZWFmTm9kZXMnXSA9IFsuLi5taWxlU3RvbmVEYXRhPy5sZWFmTm9kZXMsIC4uLm1pbGVTdG9uZUNvdXJzZS5sZWFmTm9kZXNdXG5cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy50b2NTdmMuY2hlY2tNb2R1bGVXaXNlRGF0YShtaWxlU3RvbmVDb3Vyc2UpXG4gICAgICAgIH0pXG5cbiAgICAgIH1cbiAgICAgIGlmIChtaWxlc3RvbmU/LmFzc2Vzc21lbnREZXRhaWwpIHtcbiAgICAgICAgLy8gU2V0IHBhcmVudCByZWZlcmVuY2UgZm9yIGFzc2Vzc21lbnQgaW5zaWRlIG1pbGVzdG9uZVxuICAgICAgICBtaWxlc3RvbmUuYXNzZXNzbWVudERldGFpbC5wYXJlbnQgPSBtaWxlc3RvbmUuaWRcbiAgICAgICAgbGVhZk5vZGVzLnB1c2gobWlsZXN0b25lPy5hc3Nlc3NtZW50RGV0YWlsPy5pZGVudGlmaWVyKVxuICAgICAgICBtaWxlU3RvbmVEYXRhWydsZWFmTm9kZXMnXSA9IFsuLi5taWxlU3RvbmVEYXRhPy5sZWFmTm9kZXMsIG1pbGVzdG9uZT8uYXNzZXNzbWVudERldGFpbD8uaWRlbnRpZmllcl1cbiAgICAgICAgbWlsZVN0b25lRGF0YVsnY2hpbGRyZW4nXS5wdXNoKG1pbGVzdG9uZT8uYXNzZXNzbWVudERldGFpbClcbiAgICAgIH1cbiAgICAgIG1pbGVTdG9uZURhdGFbJ2NoaWxkcmVuJ10gPSBbLi4ubWlsZXN0b25lWydjb3Vyc2VzJ10sIC4uLm1pbGVTdG9uZURhdGFbJ2NoaWxkcmVuJ11dXG4gICAgICBtaWxlU3RvbmVEYXRhWydsZWFmTm9kZXNDb3VudCddID0gbWlsZVN0b25lRGF0YVsnbGVhZk5vZGVzJ10ubGVuZ3RoXG4gICAgICAgIHRoaXMubWFwTW9kdWxlQ291bnQobWlsZVN0b25lRGF0YSlcbiAgICAgIGNvbnRlbnRIZWlyYXJjaHlbJ2NoaWxkcmVuJ10gPSBjb250ZW50SGVpcmFyY2h5WydjaGlsZHJlbiddID8gWy4uLmNvbnRlbnRIZWlyYXJjaHlbJ2NoaWxkcmVuJ10sIG1pbGVTdG9uZURhdGFdIDogW21pbGVTdG9uZURhdGFdXG5cbiAgICAgIG1pbGVzdG9uZUluZGV4KytcbiAgICB9KVxuICAgIGNvbnRlbnRIZWlyYXJjaHlbJ2xlYWZOb2RlcyddID0gWy4uLmxlYWZOb2Rlc11cbiAgICBjb250ZW50SGVpcmFyY2h5WydsZWFmTm9kZXNDb3VudCddID0gbGVhZk5vZGVzLmxlbmd0aFxuICAgIHJldHVybiBjb250ZW50SGVpcmFyY2h5XG4gIH1cblxuICAgbWFwTW9kdWxlQ291bnQoY29udGVudDogTnNDb250ZW50LklDb250ZW50KSB7XG4gICAgICBpZiAoY29udGVudCAmJiBjb250ZW50LmNoaWxkcmVuKSB7XG4gICAgICAgIGNvbnRlbnQuY2hpbGRyZW4ubWFwKGNoaWxkID0+IHtcbiAgICAgICAgICBpZiAoY2hpbGQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5DT1VSU0UpIHtcbiAgICAgICAgICAgIGlmKGNoaWxkPy5tb2R1bGVDb3VudCkge1xuICAgICAgICAgICAgY29udGVudFsnbW9kdWxlQ291bnQnXSA9IGNvbnRlbnRbJ21vZHVsZUNvdW50J10gPyBjb250ZW50Wydtb2R1bGVDb3VudCddICsgY2hpbGQ/Lm1vZHVsZUNvdW50IDogXG4gICAgICAgICAgICBjaGlsZD8ubW9kdWxlQ291bnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuXG5cbiAgbWFwQ29udGVudEhpZXJhcmNoeVByb2dyZXNzVXBkYXRlKGNvbnRlbnRIZWlyYXJjaHlEYXRhOiBhbnksIGVucm9sbG1lbnRMaXN0RGF0YTogYW55KSB7XG4gICAgaWYgKGNvbnRlbnRIZWlyYXJjaHlEYXRhICYmIGNvbnRlbnRIZWlyYXJjaHlEYXRhLmNoaWxkcmVuKSB7XG4gICAgICBsZXQgdG90YWxMZWFmTm9kZXMgPSAwXG4gICAgICBsZXQgdG90YWxDb21wbGV0ZWRMZWFmTm9kZXMgPSAwXG5cbiAgICAgIC8vIEZpcnN0IHBhc3M6IFVwZGF0ZSBwcm9ncmVzcyBmb3IgYWxsIGNvbnRlbnRcbiAgICAgIGNvbnRlbnRIZWlyYXJjaHlEYXRhLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGNoaWxkLnByaW1hcnlDYXRlZ29yeSA9PT0gJ01pbGVzdG9uZScpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZU1pbGVzdG9uZVByb2dyZXNzKGNoaWxkLCBjb250ZW50SGVpcmFyY2h5RGF0YT8uaWRlbnRpZmllciwgZW5yb2xsbWVudExpc3REYXRhKVxuICAgICAgICAgIHRvdGFsTGVhZk5vZGVzICs9IGNoaWxkLmxlYWZOb2Rlc0NvdW50IHx8IDBcbiAgICAgICAgICB0b3RhbENvbXBsZXRlZExlYWZOb2RlcyArPSBjaGlsZC5jb21wbGV0ZWRMZWFmTm9kZXNDb3VudCB8fCAwXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRm9yIHByZS1hc3Nlc3NtZW50IGFuZCBvdGhlciByb290LWxldmVsIGNvbnRlbnRcbiAgICAgICAgICAvLyBUcnkgdG8gZmluZCBlbnJvbGxtZW50IHdpdGggcGFyZW50IGlkZW50aWZpZXIgZmlyc3QsIHRoZW4gd2l0aCBjaGlsZCdzIG93biBpZGVudGlmaWVyXG4gICAgICAgICAgbGV0IGVucm9sbG1lbnQgPSB0aGlzLmZpbmRFbnJvbGxtZW50KGVucm9sbG1lbnRMaXN0RGF0YSwgY29udGVudEhlaXJhcmNoeURhdGE/LmlkZW50aWZpZXIpXG4gICAgICAgICAgaWYgKCFlbnJvbGxtZW50KSB7XG4gICAgICAgICAgICBlbnJvbGxtZW50ID0gdGhpcy5maW5kRW5yb2xsbWVudChlbnJvbGxtZW50TGlzdERhdGEsIGNoaWxkPy5pZGVudGlmaWVyKVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnVwZGF0ZU5vZGVQcm9ncmVzcyhjaGlsZCwgZW5yb2xsbWVudClcbiAgICAgICAgICBjb25zdCBpc0NvbXBsZXRlZCA9IGNoaWxkLnN0YXR1cyA9PT0gMiB8fCBjaGlsZC5jb21wbGV0aW9uU3RhdHVzID09PSAyIHx8IGNoaWxkLmNvbXBsZXRpb25QZXJjZW50YWdlID49IDEwMFxuICAgICAgICAgIHRvdGFsTGVhZk5vZGVzICs9IGNoaWxkLmxlYWZOb2Rlc0NvdW50IHx8IDFcbiAgICAgICAgICB0b3RhbENvbXBsZXRlZExlYWZOb2RlcyArPSBpc0NvbXBsZXRlZCA/IChjaGlsZC5sZWFmTm9kZXNDb3VudCB8fCAxKSA6IDBcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgICAgaWYgKHRvdGFsTGVhZk5vZGVzID4gMCkge1xuICAgICAgICBjb25zdCBjYWxjdWxhdGVkUGVyY2VudGFnZSA9IE1hdGgucm91bmQoKE51bWJlcih0b3RhbENvbXBsZXRlZExlYWZOb2RlcykgLyBOdW1iZXIodG90YWxMZWFmTm9kZXMpKSAqIDEwMClcbiAgICAgICAgY29udGVudEhlaXJhcmNoeURhdGEuY29tcGxldGlvblBlcmNlbnRhZ2UgPSBpc05hTihjYWxjdWxhdGVkUGVyY2VudGFnZSkgPyAwIDogY2FsY3VsYXRlZFBlcmNlbnRhZ2VcbiAgICAgICAgY29udGVudEhlaXJhcmNoeURhdGEuY29tcGxldGlvblN0YXR1cyA9IE51bWJlcihjb250ZW50SGVpcmFyY2h5RGF0YS5jb21wbGV0aW9uUGVyY2VudGFnZSA9PT0gMTAwID8gMiA6IChjb250ZW50SGVpcmFyY2h5RGF0YS5jb21wbGV0aW9uUGVyY2VudGFnZSA+IDAgPyAxIDogMCkpXG4gICAgICB9XG5cbiAgICAgIC8vIE5PVEU6IE1pbGVzdG9uZSBsb2NraW5nIGlzIGNvbXB1dGVkIEFGVEVSIGhhc2htYXAgaXMgYnVpbHRcbiAgICAgIC8vIFNlZSBhcHAtdG9jLWhvbWUtdjIuY29tcG9uZW50LnRzIC0+IGZldGNoQ29udGVudEhpZXJhcmNoeSgpIGZsb3c6XG4gICAgICAvLyAxLiBtYXBDb250ZW50SGllcmFyY2h5UHJvZ3Jlc3NVcGRhdGUgKHRoaXMgbWV0aG9kKSAtIHVwZGF0ZXMgcHJvZ3Jlc3Mgb24gY29udGVudCB0cmVlXG4gICAgICAvLyAyLiBjYWxsSGlyYXJjaHlQcm9ncmVzc0hhc2htYXAoKSAtIGJ1aWxkcyBoYXNobWFwIGZyb20gY29udGVudCB0cmVlXG4gICAgICAvLyAzLiBjb21wdXRlTWlsZXN0b25lTG9ja2luZ1N0YXR1cygpIC0gY29tcHV0ZXMgbG9ja3MgdXNpbmcgaGFzaG1hcFxuICAgIH1cbiAgICByZXR1cm4gY29udGVudEhlaXJhcmNoeURhdGFcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTWlsZXN0b25lUHJvZ3Jlc3MobWlsZXN0b25lOiBhbnksIHBhcmVudENvbnRlbnRJZGVudGlmaWVyOiBzdHJpbmcsIGVucm9sbG1lbnRMaXN0RGF0YTogYW55KSB7XG4gICAgbGV0IHRvdGFsTGVhZk5vZGVzID0gMFxuICAgIGxldCB0b3RhbENvbXBsZXRlZExlYWZOb2RlcyA9IDBcbiAgICBsZXQgY29tcGxldGVkQ291cnNlcyA9IDBcbiAgICBsZXQgdG90YWxDb3Vyc2VzID0gMFxuXG4gICAgaWYgKG1pbGVzdG9uZS5jaGlsZHJlbikge1xuICAgICAgbWlsZXN0b25lLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGNoaWxkLnByaW1hcnlDYXRlZ29yeSA9PT0gJ0NvdXJzZScpIHtcbiAgICAgICAgICB0b3RhbENvdXJzZXMgKz0gMVxuICAgICAgICAgIHRoaXMudXBkYXRlQ291cnNlUHJvZ3Jlc3MoY2hpbGQsIHBhcmVudENvbnRlbnRJZGVudGlmaWVyLCBlbnJvbGxtZW50TGlzdERhdGEpXG4gICAgICAgICAgLy8gQ2hlY2sgYm90aCBzdGF0dXMgYW5kIGNvbXBsZXRpb25TdGF0dXMgZm9yIGNvbXBsZXRpb25cbiAgICAgICAgICBpZiAoY2hpbGQuc3RhdHVzID09PSAyIHx8IGNoaWxkLmNvbXBsZXRpb25TdGF0dXMgPT09IDIgfHwgY2hpbGQuY29tcGxldGlvblBlcmNlbnRhZ2UgPj0gMTAwKSB7XG4gICAgICAgICAgICBjb21wbGV0ZWRDb3Vyc2VzICs9IDFcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRm9yIGFzc2Vzc21lbnRzIGFuZCBvdGhlciBjb250ZW50LCB0cnkgbXVsdGlwbGUgZW5yb2xsbWVudCBzb3VyY2VzXG4gICAgICAgICAgLy8gRmlyc3QgdHJ5IHBhcmVudCBMZWFybmluZyBQYXRod2F5IGVucm9sbG1lbnRcbiAgICAgICAgICBsZXQgZW5yb2xsbWVudCA9IHRoaXMuZmluZEVucm9sbG1lbnQoZW5yb2xsbWVudExpc3REYXRhLCBwYXJlbnRDb250ZW50SWRlbnRpZmllcilcbiAgICAgICAgICBpZiAoIWVucm9sbG1lbnQpIHtcbiAgICAgICAgICAgIC8vIFRyeSBtaWxlc3RvbmUgZW5yb2xsbWVudFxuICAgICAgICAgICAgZW5yb2xsbWVudCA9IHRoaXMuZmluZEVucm9sbG1lbnQoZW5yb2xsbWVudExpc3REYXRhLCBtaWxlc3RvbmU/LmlkZW50aWZpZXIpXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMudXBkYXRlTm9kZVByb2dyZXNzKGNoaWxkLCBlbnJvbGxtZW50KVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGVhZk5vZGVzID0gY2hpbGQubGVhZk5vZGVzQ291bnQgfHwgMVxuICAgICAgICB0b3RhbExlYWZOb2RlcyArPSBsZWFmTm9kZXNcbiAgICAgICAgLy8gQ2hlY2sgYm90aCBzdGF0dXMgYW5kIGNvbXBsZXRpb25TdGF0dXMgZm9yIGNvbXBsZXRpb25cbiAgICAgICAgaWYgKGNoaWxkLnN0YXR1cyA9PT0gMiB8fCBjaGlsZC5jb21wbGV0aW9uU3RhdHVzID09PSAyIHx8IGNoaWxkLmNvbXBsZXRpb25QZXJjZW50YWdlID49IDEwMCkge1xuICAgICAgICAgIHRvdGFsQ29tcGxldGVkTGVhZk5vZGVzICs9IGxlYWZOb2Rlc1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIG1pbGVzdG9uZS5sZWFmTm9kZXNDb3VudCA9IHRvdGFsTGVhZk5vZGVzXG4gICAgbWlsZXN0b25lLmNvbXBsZXRlZExlYWZOb2Rlc0NvdW50ID0gdG90YWxDb21wbGV0ZWRMZWFmTm9kZXNcbiAgICBtaWxlc3RvbmUudG90YWxDb3Vyc2VzID0gdG90YWxDb3Vyc2VzXG4gICAgbWlsZXN0b25lLmNvbXBsZXRlZENvdXJzZXMgPSBjb21wbGV0ZWRDb3Vyc2VzXG5cbiAgICBpZiAodG90YWxMZWFmTm9kZXMgPiAwKSB7XG4gICAgICBjb25zdCBjYWxjdWxhdGVkUGVyY2VudGFnZSA9IE1hdGgucm91bmQoKHRvdGFsQ29tcGxldGVkTGVhZk5vZGVzIC8gdG90YWxMZWFmTm9kZXMpICogMTAwKVxuICAgICAgbWlsZXN0b25lLmNvbXBsZXRpb25QZXJjZW50YWdlID0gaXNOYU4oY2FsY3VsYXRlZFBlcmNlbnRhZ2UpID8gMCA6IGNhbGN1bGF0ZWRQZXJjZW50YWdlXG4gICAgICBtaWxlc3RvbmUuY29tcGxldGlvblN0YXR1cyA9IE51bWJlcihtaWxlc3RvbmUuY29tcGxldGlvblBlcmNlbnRhZ2UgPT09IDEwMCA/IDIgOiAobWlsZXN0b25lLmNvbXBsZXRpb25QZXJjZW50YWdlID4gMCA/IDEgOiAwKSlcbiAgICAgIG1pbGVzdG9uZS5zdGF0dXMgPSBOdW1iZXIobWlsZXN0b25lLmNvbXBsZXRpb25QZXJjZW50YWdlID09PSAxMDAgPyAyIDogKG1pbGVzdG9uZS5jb21wbGV0aW9uUGVyY2VudGFnZSA+IDAgPyAxIDogMCkpXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVOb2RlUHJvZ3Jlc3Mobm9kZTogYW55LCBlbnJvbGxtZW50OiBhbnkpIHtcbiAgICBpZiAoIWVucm9sbG1lbnQpIHtcbiAgICAgIC8vIElmIG5vIGVucm9sbG1lbnQgZGF0YSwgcHJlc2VydmUgZXhpc3RpbmcgY29tcGxldGlvbiBkYXRhIGZyb20gY29udGVudCBoaWVyYXJjaHlcbiAgICAgIC8vIFRoaXMgaXMgaW1wb3J0YW50IGZvciBhc3Nlc3NtZW50cyB0aGF0IG1heSBoYXZlIGNvbXBsZXRpb24gZGF0YSBidXQgbm8gZW5yb2xsbWVudCBlbnRyeVxuICAgICAgaWYgKG5vZGUuY29tcGxldGlvblBlcmNlbnRhZ2UgPT09IHVuZGVmaW5lZCAmJiBub2RlLmNvbXBsZXRpb25TdGF0dXMgPT09IHVuZGVmaW5lZCAmJiBub2RlLnN0YXR1cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5vZGUuY29tcGxldGlvblBlcmNlbnRhZ2UgPSAwXG4gICAgICAgIG5vZGUuY29tcGxldGlvblN0YXR1cyA9IDBcbiAgICAgICAgbm9kZS5zdGF0dXMgPSAwXG4gICAgICB9XG4gICAgICAvLyBPdGhlcndpc2UsIGtlZXAgdGhlIGV4aXN0aW5nIHZhbHVlcyBmcm9tIGNvbnRlbnQgaGllcmFyY2h5XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgbm9kZSBpdHNlbGYgaXMgdGhlIGVucm9sbGVkIGNvbnRlbnQgKGRpcmVjdCBlbnJvbGxtZW50KVxuICAgIC8vIFRoaXMgaGFwcGVucyBmb3IgcHJlLWFzc2Vzc21lbnRzIGFuZCBzdGFuZGFsb25lIGNvbnRlbnRcbiAgICBjb25zdCBpc0RpcmVjdEVucm9sbG1lbnQgPSBlbnJvbGxtZW50LmNvbGxlY3Rpb25JZCA9PT0gbm9kZS5pZGVudGlmaWVyIHx8IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnJvbGxtZW50LmNvbnRlbnRJZCA9PT0gbm9kZS5pZGVudGlmaWVyXG4gICAgXG4gICAgaWYgKGlzRGlyZWN0RW5yb2xsbWVudCkge1xuICAgICAgXG4gICAgICAvLyBVc2UgZW5yb2xsbWVudCdzIGRpcmVjdCBwcm9ncmVzc1xuICAgICAgY29uc3QgcHJvZ3Jlc3MgPSBlbnJvbGxtZW50LmNvbXBsZXRpb25QZXJjZW50YWdlIHx8IGVucm9sbG1lbnQucHJvZ3Jlc3MgfHwgMFxuICAgICAgY29uc3Qgc3RhdHVzID0gTnVtYmVyKGVucm9sbG1lbnQuc3RhdHVzKSB8fCAwXG4gICAgICBcbiAgICAgIG5vZGUuY29tcGxldGlvblBlcmNlbnRhZ2UgPSBwcm9ncmVzc1xuICAgICAgbm9kZS5jb21wbGV0aW9uU3RhdHVzID0gc3RhdHVzXG4gICAgICBub2RlLnN0YXR1cyA9IHN0YXR1c1xuICAgICAgXG4gICAgICBjb25zb2xlLmxvZyhgRGlyZWN0IGVucm9sbG1lbnQgZm91bmQgZm9yICR7bm9kZS5pZGVudGlmaWVyfTpgLCB7XG4gICAgICAgIGNvbXBsZXRpb25QZXJjZW50YWdlOiBwcm9ncmVzcyxcbiAgICAgICAgY29tcGxldGlvblN0YXR1czogc3RhdHVzLFxuICAgICAgICBlbnJvbGxtZW50RGF0YTogeyBcbiAgICAgICAgICBwcm9ncmVzczogZW5yb2xsbWVudC5wcm9ncmVzcywgXG4gICAgICAgICAgY29tcGxldGlvblBlcmNlbnRhZ2U6IGVucm9sbG1lbnQuY29tcGxldGlvblBlcmNlbnRhZ2UsXG4gICAgICAgICAgc3RhdHVzOiBlbnJvbGxtZW50LnN0YXR1cyBcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIFRyeSBib3RoIGNvbnRlbnRJZCBhbmQgY29sbGVjdGlvbklkIGFzIHRoZSBBUEkgcmVzcG9uc2UgbWF5IHVzZSBlaXRoZXIgZmllbGRcbiAgICBjb25zdCBub2RlRW5yb2xsRGF0YSA9IGVucm9sbG1lbnQ/LmNvbnRlbnRMaXN0Py5maW5kKChlbGU6IGFueSkgPT4gXG4gICAgICBlbGU/LmNvbnRlbnRJZCA9PT0gbm9kZS5pZGVudGlmaWVyIHx8IGVsZT8uY29sbGVjdGlvbklkID09PSBub2RlLmlkZW50aWZpZXJcbiAgICApXG4gICAgXG4gICAgaWYgKGVucm9sbG1lbnQgJiYgbm9kZUVucm9sbERhdGEgJiYgbm9kZUVucm9sbERhdGEuc3RhdHVzIDwgMikge1xuICAgICAgbm9kZS5jb21wbGV0aW9uUGVyY2VudGFnZSA9IG5vZGVFbnJvbGxEYXRhLmNvbXBsZXRpb25QZXJjZW50YWdlIHx8IG5vZGVFbnJvbGxEYXRhLnByb2dyZXNzIHx8IDBcbiAgICAgIG5vZGUuY29tcGxldGlvblN0YXR1cyA9IE51bWJlcihub2RlRW5yb2xsRGF0YS5zdGF0dXMpIHx8IDBcbiAgICAgIG5vZGUuc3RhdHVzID0gTnVtYmVyKG5vZGVFbnJvbGxEYXRhLnN0YXR1cykgfHwgMFxuICAgIH0gZWxzZSBpZiAoZW5yb2xsbWVudCAmJiBub2RlRW5yb2xsRGF0YSAmJiBub2RlRW5yb2xsRGF0YS5zdGF0dXMgPT09IDIpIHtcbiAgICAgIG5vZGUuY29tcGxldGlvblBlcmNlbnRhZ2UgPSAxMDBcbiAgICAgIG5vZGUuY29tcGxldGlvblN0YXR1cyA9IDJcbiAgICAgIG5vZGUuc3RhdHVzID0gMlxuICAgIH0gZWxzZSBpZiAoZW5yb2xsbWVudCAmJiAhbm9kZUVucm9sbERhdGEpIHtcbiAgICAgIC8vIEVucm9sbG1lbnQgZXhpc3RzIGJ1dCB0aGlzIG5vZGUgaXMgbm90IGluIGNvbnRlbnRMaXN0XG4gICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gZm9yIGNvbXBsZXRlZCBhc3Nlc3NtZW50cyAtIHByZXNlcnZlIHRoZWlyIGNvbXBsZXRpb24gZGF0YSBmcm9tIGNvbnRlbnQgaGllcmFyY2h5XG4gICAgICAvLyBPbmx5IHJlc2V0IHRvIDAgaWYgdGhlcmUncyBubyBjb21wbGV0aW9uIGRhdGEgYXQgYWxsXG4gICAgICBpZiAobm9kZS5jb21wbGV0aW9uUGVyY2VudGFnZSA9PT0gdW5kZWZpbmVkICYmIG5vZGUuY29tcGxldGlvblN0YXR1cyA9PT0gdW5kZWZpbmVkICYmIG5vZGUuc3RhdHVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbm9kZS5jb21wbGV0aW9uUGVyY2VudGFnZSA9IDBcbiAgICAgICAgbm9kZS5jb21wbGV0aW9uU3RhdHVzID0gMFxuICAgICAgICBub2RlLnN0YXR1cyA9IDBcbiAgICAgIH1cbiAgICAgIC8vIE90aGVyd2lzZSBrZWVwIGV4aXN0aW5nIHZhbHVlcyBmcm9tIGNvbnRlbnQgaGllcmFyY2h5XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGVucm9sbG1lbnQgYXQgYWxsIC0gcmVzZXQgdG8gMFxuICAgICAgbm9kZS5jb21wbGV0aW9uUGVyY2VudGFnZSA9IDBcbiAgICAgIG5vZGUuY29tcGxldGlvblN0YXR1cyA9IDBcbiAgICAgIG5vZGUuc3RhdHVzID0gMFxuICAgIH1cbiAgICBcbiAgICBjb25zb2xlLmxvZyhgVXBkYXRlZCBub2RlIHByb2dyZXNzIGZvciAke25vZGUuaWRlbnRpZmllcn06YCwge1xuICAgICAgY29tcGxldGlvblN0YXR1czogbm9kZS5jb21wbGV0aW9uU3RhdHVzLFxuICAgICAgY29tcGxldGlvblBlcmNlbnRhZ2U6IG5vZGUuY29tcGxldGlvblBlcmNlbnRhZ2UsXG4gICAgICBzdGF0dXM6IG5vZGUuc3RhdHVzXG4gICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ291cnNlUHJvZ3Jlc3MoY291cnNlOiBhbnksIHBhcmVudENvbnRlbnRJZGVudGlmaWVyLCBlbnJvbGxtZW50TGlzdERhdGE6IGFueSkge1xuICAgIGNvbnN0IGVucm9sbG1lbnQgPSB0aGlzLmZpbmRFbnJvbGxtZW50KGVucm9sbG1lbnRMaXN0RGF0YSwgY291cnNlPy5pZGVudGlmaWVyKVxuXG4gICAgaWYgKGVucm9sbG1lbnQ/LmNvbXBsZXRpb25QZXJjZW50YWdlID09PSAxMDApIHtcbiAgICAgIC8vIEVucm9sbG1lbnQgc2hvd3MgMTAwJSAtIG1hcmsgY291cnNlIGFzIGNvbXBsZXRlXG4gICAgICBjb3Vyc2UuY29tcGxldGlvblBlcmNlbnRhZ2UgPSAxMDBcbiAgICAgIGNvdXJzZS5jb21wbGV0aW9uU3RhdHVzID0gMlxuICAgICAgaWYgKGVucm9sbG1lbnQuaXNzdWVkQ2VydGlmaWNhdGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGNlcnRpZmljYXRlOiBhbnkgPSBlbnJvbGxtZW50Lmlzc3VlZENlcnRpZmljYXRlcy5zb3J0KChhOiBhbnksIGI6IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgbmV3IERhdGUoYS5sYXN0SXNzdWVkT24pLmdldFRpbWUoKSAtIG5ldyBEYXRlKGIubGFzdElzc3VlZE9uKS5nZXRUaW1lKCkpXG4gICAgICAgICAgICAgICAgICBjb25zdCBjZXJ0SWQ6IGFueSA9IGNlcnRpZmljYXRlWzBdLmlkZW50aWZpZXJcbiAgICAgICAgICAgICAgICAgIGNvdXJzZS5pc3N1ZWRDZXJ0aWZpY2F0ZXNJZCA9IGNlcnRJZFxuICAgICAgICAgICAgICAgIH1cbiAgICAgIHRoaXMudG9jU3ZjLm1hcENvbXBsZXRpb25DaGlsZFBlcmNlbnRhZ2VQcm9ncmFtKGNvdXJzZSlcbiAgICB9IGVsc2UgaWYgKGVucm9sbG1lbnQgJiYgZW5yb2xsbWVudC5jb21wbGV0aW9uUGVyY2VudGFnZSA+IDApIHtcbiAgICAgIC8vIEVucm9sbG1lbnQgaGFzIHBhcnRpYWwgcHJvZ3Jlc3NcbiAgICAgIGNvdXJzZS5jb21wbGV0aW9uUGVyY2VudGFnZSA9IGVucm9sbG1lbnQuY29tcGxldGlvblBlcmNlbnRhZ2UgfHwgMFxuICAgICAgY291cnNlLmNvbXBsZXRpb25TdGF0dXMgPSAxXG4gICAgICAvLyBBbHNvIHVwZGF0ZSBjaGlsZHJlblxuICAgICAgaWYgKGNvdXJzZS5jaGlsZHJlbiAmJiBjb3Vyc2UuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICBjb3Vyc2UuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQ6IGFueSkgPT4ge1xuICAgICAgICAgIFxuXG4gICAgICAgICAgLy8gSWYgY2hpbGQgaXMgYSBtb2R1bGUsIHVwZGF0ZSBpdHMgY2hpbGRyZW4gKHJlc291cmNlcykgYXMgd2VsbFxuICAgICAgICAgIGlmIChjaGlsZC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5Lk1PRFVMRSAmJiBjaGlsZC5jaGlsZHJlbiAmJiBjaGlsZC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjaGlsZC5jaGlsZHJlbi5mb3JFYWNoKChyZXNvdXJjZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlTm9kZVByb2dyZXNzKHJlc291cmNlLCBlbnJvbGxtZW50KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudXBkYXRlTm9kZVByb2dyZXNzKGNoaWxkLCBlbnJvbGxtZW50KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGNvdXJzZS5jaGlsZHJlbiAmJiBjb3Vyc2UuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICBsZXQgdG90YWxMZWFmTm9kZXMgPSBjb3Vyc2UubGVhZk5vZGVzQ291bnQgfHwgMFxuICAgICAgICBsZXQgdG90YWxDb21wbGV0ZWQgPSAwXG5cbiAgICAgICAgY291cnNlLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkOiBhbnkpID0+IHtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBJZiBjaGlsZCBpcyBhIG1vZHVsZSwgdXBkYXRlIGl0cyBjaGlsZHJlbiAocmVzb3VyY2VzKSBhcyB3ZWxsXG4gICAgICAgICAgaWYgKGNoaWxkLnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuTU9EVUxFICYmIGNoaWxkLmNoaWxkcmVuICYmIGNoaWxkLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNoaWxkLmNoaWxkcmVuLmZvckVhY2goKHJlc291cmNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVOb2RlUHJvZ3Jlc3MocmVzb3VyY2UsIGVucm9sbG1lbnQpXG4gICAgICAgICAgICAgIGlmIChyZXNvdXJjZS5jb21wbGV0aW9uU3RhdHVzID09PSAyIHx8IHJlc291cmNlLmNvbXBsZXRpb25QZXJjZW50YWdlID09PSAxMDApIHtcbiAgICAgICAgICAgICAgICB0b3RhbENvbXBsZXRlZCArPSByZXNvdXJjZS5sZWFmTm9kZXNDb3VudCB8fCAxXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZU5vZGVQcm9ncmVzcyhjaGlsZCwgZW5yb2xsbWVudClcblxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY2hpbGQuY29tcGxldGlvblN0YXR1cyA9PT0gMiB8fCBjaGlsZC5jb21wbGV0aW9uUGVyY2VudGFnZSA9PT0gMTAwKSB7XG4gICAgICAgICAgICB0b3RhbENvbXBsZXRlZCArPSBjaGlsZC5sZWFmTm9kZXNDb3VudCB8fCAxXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIC8vIElmIGl0J3MgYSBjb2xsZWN0aW9uIGFuZCBkb2Vzbid0IGhhdmUgaXRzIG93biBlbnJvbGxtZW50IHByb2dyZXNzLCBjYWxjdWxhdGUgaXRcbiAgICAgICAgaWYgKCFlbnJvbGxtZW50IHx8ICFjb3Vyc2UuY29tcGxldGlvblBlcmNlbnRhZ2UgfHwgY291cnNlLmNvbXBsZXRpb25QZXJjZW50YWdlID09PSAwKSB7XG4gICAgICAgICAgaWYgKCF0b3RhbExlYWZOb2Rlcykge1xuICAgICAgICAgICAgdG90YWxMZWFmTm9kZXMgPSBjb3Vyc2UuY2hpbGRyZW4ucmVkdWNlKChhY2M6IG51bWJlciwgY3VycjogYW55KSA9PiBhY2MgKyAoY3Vyci5sZWFmTm9kZXNDb3VudCB8fCAxKSwgMClcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRvdGFsTGVhZk5vZGVzID4gMCkge1xuICAgICAgICAgICAgY29uc3QgY2FsY3VsYXRlZFBlcmNlbnRhZ2UgPSBNYXRoLnJvdW5kKCh0b3RhbENvbXBsZXRlZCAvIHRvdGFsTGVhZk5vZGVzKSAqIDEwMClcbiAgICAgICAgICAgIGNvdXJzZS5jb21wbGV0aW9uUGVyY2VudGFnZSA9IGlzTmFOKGNhbGN1bGF0ZWRQZXJjZW50YWdlKSA/IDAgOiBjYWxjdWxhdGVkUGVyY2VudGFnZVxuICAgICAgICAgICAgY291cnNlLmNvbXBsZXRpb25TdGF0dXMgPSBOdW1iZXIoY291cnNlLmNvbXBsZXRpb25QZXJjZW50YWdlID09PSAxMDAgPyAyIDogKGNvdXJzZS5jb21wbGV0aW9uUGVyY2VudGFnZSA+IDAgPyAxIDogMCkpXG5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbmRFbnJvbGxtZW50KGVucm9sbG1lbnRMaXN0OiBhbnksIGlkZW50aWZpZXI6IHN0cmluZykge1xuICAgIGlmICghZW5yb2xsbWVudExpc3QgfHwgIWVucm9sbG1lbnRMaXN0Lmxlbmd0aCkgcmV0dXJuIG51bGxcbiAgICByZXR1cm4gZW5yb2xsbWVudExpc3QuZmluZCgoZWw6IGFueSkgPT4gZWwuY29sbGVjdGlvbklkID09PSBpZGVudGlmaWVyIHx8IGVsLmNvbnRlbnRJZCA9PT0gaWRlbnRpZmllcilcbiAgfVxuXG5cblxufVxuXG4iXX0=