@sachin9822/reports-lib 0.0.205 → 0.0.207

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.
Files changed (32) hide show
  1. package/esm2020/lib/components/acc-gl-details-enquiry-report/acc-gl-details-enquiry-report.component.mjs +11 -26
  2. package/esm2020/lib/components/accounting-report/accounting-report.component.mjs +24 -31
  3. package/esm2020/lib/components/branch-activity-receive-report/branch-activity-receive-report.component.mjs +3 -2
  4. package/esm2020/lib/components/branch-activity-send-report/branch-activity-send-report.component.mjs +3 -2
  5. package/esm2020/lib/components/cancellation-transaction-report/cancellation-transaction-report.component.mjs +11 -7
  6. package/esm2020/lib/components/credit-limit-status-enquiry-report/credit-limit-status-enquiry-report.component.mjs +10 -2
  7. package/esm2020/lib/components/funding-report/funding-report.component.mjs +18 -19
  8. package/esm2020/lib/components/revenue-per-transaction-report/revenue-per-transaction-report.component.mjs +13 -2
  9. package/esm2020/lib/components/statement-of-accounts-report/statement-of-accounts-report.component.mjs +53 -10
  10. package/esm2020/lib/components/transaction-enquiry-report/transaction-enquiry-report.component.mjs +39 -22
  11. package/esm2020/lib/components/trial-balance-accounts-report/trial-balance-accounts-report.component.mjs +25 -35
  12. package/esm2020/lib/shared/export-generic.service.mjs +17 -3
  13. package/esm2020/lib/shared/export.service.mjs +52 -14
  14. package/esm2020/lib/shared/search-filter/search-filter.component.mjs +108 -28
  15. package/fesm2015/sachin9822-reports-lib.mjs +376 -194
  16. package/fesm2015/sachin9822-reports-lib.mjs.map +1 -1
  17. package/fesm2020/sachin9822-reports-lib.mjs +372 -189
  18. package/fesm2020/sachin9822-reports-lib.mjs.map +1 -1
  19. package/lib/components/acc-gl-details-enquiry-report/acc-gl-details-enquiry-report.component.d.ts +1 -0
  20. package/lib/components/accounting-report/accounting-report.component.d.ts +1 -0
  21. package/lib/components/branch-activity-receive-report/branch-activity-receive-report.component.d.ts +1 -0
  22. package/lib/components/branch-activity-send-report/branch-activity-send-report.component.d.ts +1 -0
  23. package/lib/components/cancellation-transaction-report/cancellation-transaction-report.component.d.ts +3 -0
  24. package/lib/components/credit-limit-status-enquiry-report/credit-limit-status-enquiry-report.component.d.ts +1 -0
  25. package/lib/components/funding-report/funding-report.component.d.ts +2 -0
  26. package/lib/components/revenue-per-transaction-report/revenue-per-transaction-report.component.d.ts +1 -0
  27. package/lib/components/statement-of-accounts-report/statement-of-accounts-report.component.d.ts +3 -0
  28. package/lib/components/transaction-enquiry-report/transaction-enquiry-report.component.d.ts +5 -1
  29. package/lib/components/trial-balance-accounts-report/trial-balance-accounts-report.component.d.ts +1 -0
  30. package/lib/shared/export-generic.service.d.ts +2 -1
  31. package/lib/shared/export.service.d.ts +1 -1
  32. package/package.json +1 -1
@@ -185,59 +185,44 @@ export class AccGlDetailsEnquiryReportComponent {
185
185
  return;
186
186
  const title = `${this.companyName} - General Ledger Account Details Enquiry Report`;
187
187
  const metadata = this.exportService.generateReportMetadata([
188
- ['Report User : ', this.reportUser],
189
- ['Report Time : ', this.reportTime],
190
- // ['Search Criteria', ' - '],
191
- // [`${this.dateType == 'VD' ? 'Value Date' : 'Posting Date'}:`, this.currentReportValueOrPostDate],
188
+ ['Report User & Time : ', `${this.reportUser}@${this.reportTime}`],
192
189
  ]);
193
- // --- search criteria ---
194
- const searchCriteria = [
195
- ['Date Type:', `${this.dateType == 'VD' ? 'Value Date' : 'Posting Date'}`],
196
- ['Date:', this.currentReportValueOrPostDate],
197
- ];
198
190
  const { headers, rows } = this.exportService.prepareExportTable(this.accGlDetailsEnquiryReportModel.journalVoucherEntries, this.columnDefs, {
199
191
  currencyFields: ['localCredit', 'forexCredit', 'localDebit', 'forexDebit'],
200
192
  });
201
- await this.exportService.exportToPdfUniversal(title, metadata, searchCriteria, headers, rows, 'ACC-GL-Details-Enquiry-Report.pdf');
193
+ await this.exportService.exportToPdfUniversal(title, metadata, this.searchCriteria, headers, rows, 'ACC-GL-Details-Enquiry-Report.pdf');
202
194
  }
203
195
  exportToExcel() {
204
196
  if (!this.accGlDetailsEnquiryReportModel.journalVoucherEntries?.length)
205
197
  return;
206
198
  const title = `${this.companyName} - General Ledger Account Details Enquiry Report`;
207
199
  const metadata = this.exportService.generateReportMetadata([
208
- ['Report User', this.reportUser],
209
- ['Report Time', this.reportTime],
210
- // ['Search Criteria', ' - '],
211
- // [`${this.dateType == 'VD' ? 'Value Date' : 'Posting Date'}`, this.currentReportValueOrPostDate],
200
+ ['Report User & Time : ', `${this.reportUser}@${this.reportTime}`],
212
201
  ]);
213
- // --- search criteria ---
214
- const searchCriteria = [
215
- ['Date Type:', `${this.dateType == 'VD' ? 'Value Date' : 'Posting Date'}`],
216
- ['Date:', this.currentReportValueOrPostDate],
217
- ];
218
202
  const { headers, rows } = this.exportService.prepareExportTable(this.accGlDetailsEnquiryReportModel.journalVoucherEntries, this.columnDefs, {
219
203
  currencyFields: ['localCredit', 'forexCredit', 'localDebit', 'forexDebit'],
220
204
  });
221
- this.exportService.exportToExcelUniversal(title, metadata, searchCriteria, headers, rows, 'ACC-GL-Details-Enquiry-Report.xlsx');
205
+ this.exportService.exportToExcelUniversal(title, metadata, this.searchCriteria, headers, rows, 'ACC-GL-Details-Enquiry-Report.xlsx');
222
206
  }
223
207
  exportToCsv() {
224
208
  if (!this.accGlDetailsEnquiryReportModel.journalVoucherEntries?.length)
225
209
  return;
226
210
  const title = `${this.companyName} - General Ledger Account Details Enquiry Report`;
227
211
  const metadata = this.exportService.generateReportMetadata([
228
- ['Report User', this.reportUser],
229
- ['Report Time', this.reportTime],
230
- ['Search Criteria', '- '],
231
- [`${this.dateType == 'VD' ? 'Value Date' : 'Posting Date'}`, this.currentReportValueOrPostDate],
212
+ ['Report User & Time : ', `${this.reportUser}@${this.reportTime}`],
232
213
  ]);
233
214
  const { headers, rows } = this.exportService.prepareExportTable(this.accGlDetailsEnquiryReportModel.journalVoucherEntries, this.columnDefs, {
234
215
  currencyFields: ['localCredit', 'forexCredit', 'localDebit', 'forexDebit'],
235
216
  });
236
- this.exportService.exportToCsvUniversal(title, metadata, headers, rows, 'ACC-GL-Details-Enquiry-Report.csv');
217
+ this.exportService.exportToCsvUniversal(title, metadata, this.searchCriteria, headers, rows, 'ACC-GL-Details-Enquiry-Report.csv');
237
218
  }
238
219
  handleSearch(criteria) {
239
220
  this.dateTypeFilter = criteria.selectedDateType;
240
221
  this.date = criteria.selectedDate.split('T')[0];
222
+ this.searchCriteria = [
223
+ ['Date Type:', `${this.dateTypeFilter === 1 ? 'Value Date' : 'Posting Date'}`],
224
+ ['Date:', formatDate(this.date, 'dd/MM/yyyy', 'en-US')],
225
+ ];
241
226
  this.getAccGLDetailsReport();
242
227
  }
243
228
  }
@@ -247,4 +232,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
247
232
  type: Component,
248
233
  args: [{ selector: 'lib-acc-gl-details-enquiry-report', template: "<lib-search-filter [ReportName]=\"ReportName\" (searchClicked)=\"handleSearch($event)\">\r\n</lib-search-filter>\r\n<app-loader class=\"\" *ngIf=\"loadingState == ComponentLoadingState.Loading\"></app-loader>\r\n<div class=\"main-container\">\r\n <div class=\"report-container\"\r\n *ngIf=\"accGlDetailsEnquiryReportModel != undefined && dataReady && accGlDetailsEnquiryReportModel?.journalVoucherEntries?.length!=0\">\r\n <div class=\"main-report\" *ngIf=\"accGlDetailsEnquiryReportModel != undefined && dataReady\">\r\n <lib-metadata [reportName]=\"ReportName\" [showmetaDataOne]=\"true\" [showmetaDataTwo]=\"true\"\r\n [metaDataOne]=\"metaDataOne\" [metaDataTwo]=\"metaDataTwo\" (exportEvent)=\"handleExport($event)\"\r\n (searchEvent)=\"onSearch($event)\"></lib-metadata>\r\n <div style=\"position: relative;\">\r\n <lib-page-size-selector [totalEntries]=\"accGlDetailsEnquiryReportModel?.journalVoucherEntries?.length\"\r\n [defaultSize]=\"'15'\" [gridApi]=\"gridApi\">\r\n ></lib-page-size-selector>\r\n <ag-grid-angular class=\"ag-theme-alpine transaction-grid\" style=\"width: 100%;height: 375px;\"\r\n [columnDefs]=\"columnDefs\" [defaultColDef]=\"defaultColDef\" [rowData]=\"rowData\" [rowHeight]=\"20\"\r\n [headerHeight]=\"22\" [pagination]=\"true\" [paginationPageSize]=\"pageSize\" (gridReady)=\"onGridReady($event)\"\r\n (gridSizeChanged)=\"onGridSizeChanged($event)\">\r\n </ag-grid-angular>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"alert alert-warning mt-3\" *ngIf=\"accGlDetailsEnquiryReportModel?.journalVoucherEntries?.length==0\">\r\n No Data found matching your search criteria.\r\n </div>\r\n</div>", styles: [".btn-report{border-radius:4px;background-color:#8091a5;color:#fff!important;font-size:14px!important;height:32px!important;height:32px;min-width:110px;margin:0 0 0 20px!important;padding:4px 15px!important}.tooltip-block{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border:1px solid #ccc!important}.dpicker{border:1px solid #ccc!important;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"!important;font-size:12px!important;font-weight:400!important;height:32px!important}.dpicker:focus{box-shadow:0 0 5px 3px #1877f2!important}.cal{height:32px!important;background-color:#1877f2!important}.cal:focus{box-shadow:none!important}.input-group-button{background:none;border:1px solid #0081c6;background-color:#0081c6;border-radius:0 3px 3px 0;min-width:35px;margin-left:1px;cursor:pointer}.labl{font-size:11.2px;font-weight:700!important}.info{font-size:12px!important;font-weight:400;padding-left:.5rem}.label-data{font-weight:600!important;font-size:.7rem!important;line-height:1rem}.meta-td{padding:0!important}.title{text-align:center;font-size:18px;font-weight:700!important}.export-options{display:inline-flex;font-size:.75rem;height:2rem!important;width:5rem!important;margin-right:-1;margin-left:.4rem}.opt-cls{display:block;height:100%;width:5rem;border:1px solid #ccc!important;border-radius:4px!important;margin-right:1rem!important;outline:none!important}.opt-cls:focus{box-shadow:0 0 5px 3px #1877f2}.export-selector{height:2rem!important;width:100%}.search-btn{height:32px!important;height:32px;width:36px;background-color:#8091a5;border:none;border-radius:0 4px 4px 0;display:flex;justify-content:center;align-items:center}.search-btn:hover{background-color:#8091a5}.search-icon{height:16px;width:16px;object-fit:contain}.search-input{outline:none!important;border:1px solid #ccc!important;width:190px;height:32px!important;font-size:.75rem;padding:.25rem .5rem;border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0!important;border-bottom-right-radius:0!important;text-transform:uppercase}.search-input:focus{box-shadow:0 0 5px 3px #1877f2!important}.searchBox{margin-right:auto;display:flex}table{width:100%;border-collapse:separate;margin-bottom:0!important;table-layout:fixed!important}td{padding:0 1rem 6px 0!important;border-right:0 solid #ffffff!important;background-color:#fff!important}.row-cls{height:2.5rem!important}.inputbox{padding-left:1rem;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"}::ng-deep .ng-select.ng-select-single .ng-select-container{height:32px I!important}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container{max-height:32px!important;overflow-x:auto!important;overflow-y:auto;white-space:nowrap!important}::ng-deep .ng-select .ng-select-multiple .ng-select-container .ng-value-container{max-height:32px!important;overflow-x:auto!important;white-space:nowrap!important}::ng-deep .ng-select .ng-select-multiple .ng-select-container .ng-value-container .ng-value{max-width:200px!important;overflow:hidden!important;text-overflow:hidden!important;white-space:nowrap!important}::ng-deep .ng-select .ng-select-container{cursor:default;display:flex;outline:none;overflow:hidden;position:relative;width:100%}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{box-sizing:border-box;cursor:pointer;display:block;white-space:nowrap;overflow-x:scroll!important;text-overflow:clip!important}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option::-webkit-scrollbar{display:none!important;width:0!important}::ng-deep .ng-select .ng-select-container:focus-within{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container:focus{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container,::ng-deep .ng-select.ng-select-single .ng-select-container,::ng-deep .ng-select.ng-select-multiple .ng-select-container{min-height:32px!important;height:32px!important;font-size:12px!important}.panel-cls{font-weight:700;font-size:13px;line-height:1.2;margin:0;padding:2px 0;color:#16181e}.transaction-grid ::ng-deep .ag-header{background-color:#f9f9f9;font-weight:600;font-size:10px;color:#000;border-right:1px solid #e0e0e0}:host ::ng-deep .ag-header-cell{padding:2px!important;align-items:center!important;justify-content:center!important;border-right:1px solid #e0e0e0;white-space:normal!important;word-break:normal!important;overflow-wrap:break-word!important;text-align:center!important}::ng-deep .ag-header-cell-label{display:flex!important;justify-content:center!important;align-items:center!important;width:100%;text-align:center!important}::ng-deep .ag-header-cell-text{text-align:center!important;width:100%!important;display:flex!important;justify-content:center!important}.transaction-grid ::ng-deep .ag-row{border-bottom:1px solid #e0e0e0}.transaction-grid ::ng-deep .ag-cell{font-size:9px;white-space:normal!important;word-break:keep-all!important;overflow-wrap:anywhere;line-height:1.4;padding:4px!important;color:#000;font-weight:500;border-right:.5px solid #e0e0e0;align-content:center;user-select:text!important;-webkit-user-select:text!important;-moz-user-select:text!important;-ms-user-select:text!important;cursor:text}::ng-deep .ag-cell-label-container{padding:0!important}.ag-theme-alpine{--ag-header-font-size: 10px;--ag-font-size: 10px;--ag-header-background-color: #fdfdfd;--ag-header-foreground-color: rgb(0, 0, 0)}::ng-deep .ag-paging-panel{height:30px!important;font-weight:500!important}.main-container{display:flex;flex-direction:column;width:100%;padding:0;box-sizing:border-box}.report-loader{display:flex;justify-content:center;align-items:center;height:320px;background-color:#ffffffb3;border:none none none}.report-container{min-height:350px;font-size:.7rem;line-height:1.4;margin:0;overflow:visible}.main-report{overflow:visible}.grid-size{width:100%!important;font-weight:500!important;height:390px!important}\n"] }]
249
234
  }], ctorParameters: function () { return [{ type: i1.ExportService }, { type: i2.ReportService }, { type: i3.HttpClient }, { type: i4.DomSanitizer }]; } });
250
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjLWdsLWRldGFpbHMtZW5xdWlyeS1yZXBvcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmVwb3J0cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL2FjYy1nbC1kZXRhaWxzLWVucXVpcnktcmVwb3J0L2FjYy1nbC1kZXRhaWxzLWVucXVpcnktcmVwb3J0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JlcG9ydHMtbGliL3NyYy9saWIvY29tcG9uZW50cy9hY2MtZ2wtZGV0YWlscy1lbnF1aXJ5LXJlcG9ydC9hY2MtZ2wtZGV0YWlscy1lbnF1aXJ5LXJlcG9ydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBSWxELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUc3QyxPQUFPLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDOzs7Ozs7Ozs7Ozs7QUFjL0UsTUFBTSxPQUFPLGtDQUFrQztJQW9FN0MsWUFDVSxhQUE0QixFQUM1QixhQUE0QixFQUM1QixJQUFnQixFQUNoQixTQUF1QjtRQUh2QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFyRWpDLGVBQVUsR0FBVyxFQUFFLENBQUM7UUFHeEIseUJBQW9CLEdBQVcsT0FBTyxDQUFDO1FBQ3ZDLGNBQVMsR0FBYSxFQUFFLENBQUM7UUFDekIsWUFBTyxHQUFZLEtBQUssQ0FBQztRQUN6QixjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLG1CQUFjLEdBQVcsQ0FBQyxDQUFDO1FBUzNCLFlBQU8s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RUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLFlBQVksQ0FBQztTQUMzRSxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxtQ0FBbUMsQ0FBQyxDQUFDO0lBQy9HLENBQUM7SUFFRCxZQUFZLENBQUMsUUFBYTtRQUN4QixJQUFJLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQztRQUNoRCxJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQy9CLENBQUM7OytIQW5SVSxrQ0FBa0M7bUhBQWxDLGtDQUFrQyx5RUN2Qi9DLG10REEwQk07MkZESE8sa0NBQWtDO2tCQU45QyxTQUFTOytCQUNFLG1DQUFtQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJlcG9ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXBvcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEFjY0dsRGV0YWlsc0VucXVpcnlSZXBvcnRNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9hY2MtZ2wtZGV0YWlscy1lbnF1aXJ5LXJlcG9ydC9hY2NnbC1kZXRhaWxzLWVucXVpcnktcmVwb3J0bW9kZWwnO1xyXG5pbXBvcnQgeyBDb2xEZWYsIENvbHVtbkFwaSwgR3JpZEFwaSwgR3JpZFJlYWR5RXZlbnQgfSBmcm9tICdhZy1ncmlkLWNvbW11bml0eSc7XHJcbmltcG9ydCB7IGZvcm1hdERhdGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCAnanNwZGYtYXV0b3RhYmxlJztcclxuaW1wb3J0IHsgRXhwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9leHBvcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudExvYWRpbmdTdGF0ZXMgfSBmcm9tICcuLi8uLi9tb2RlbHMvY29tcG9uZW50LWxvYWRpbmctc3RhdGVzJztcclxuXHJcbmRlY2xhcmUgbW9kdWxlICdqc3BkZicge1xyXG4gIGludGVyZmFjZSBqc1BERiB7XHJcbiAgICBhdXRvVGFibGU6IChvcHRpb25zOiBhbnkpID0+IGpzUERGO1xyXG4gIH1cclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItYWNjLWdsLWRldGFpbHMtZW5xdWlyeS1yZXBvcnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hY2MtZ2wtZGV0YWlscy1lbnF1aXJ5LXJlcG9ydC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYWNjLWdsLWRldGFpbHMtZW5xdWlyeS1yZXBvcnQuY29tcG9uZW50LnNjc3MnXSxcclxuXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBY2NHbERldGFpbHNFbnF1aXJ5UmVwb3J0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcblxyXG4gIHNlYXJjaFRleHQ6IHN0cmluZyA9ICcnO1xyXG4gIGdyaWRBcGk6IEdyaWRBcGk8YW55PjtcclxuICBncmlkQ29sdW1uQXBpITogQ29sdW1uQXBpO1xyXG4gIHNlbGVjdGVkRXhwb3J0T3B0aW9uOiBzdHJpbmcgPSAnZXhjZWwnO1xyXG4gIHN2Z0xvYWRlcjogU2FmZUh0bWwgPSAnJztcclxuICBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZGF0YVJlYWR5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgZGF0ZVR5cGVGaWx0ZXI6IG51bWJlciA9IDE7XHJcbiAgZGF0ZVR5cGU6IGFueTtcclxuICBzeXNDb21wYW55Q29kZTogYW55O1xyXG4gIHN5c1VzZXJJZDogYW55O1xyXG4gIGNvbXBhbnlOYW1lOiBhbnk7XHJcbiAgcmVwb3J0VXNlcjogYW55O1xyXG4gIHJlcG9ydFRpbWU6IGFueTtcclxuICBjdXJyZW50UmVwb3J0VmFsdWVPclBvc3REYXRlOiBhbnk7XHJcbiAgYWNjR2xEZXRhaWxzRW5xdWlyeVJlcG9ydE1vZGVsOiBBY2NHbERldGFpbHNFbnF1aXJ5UmVwb3J0TW9kZWw7XHJcbiAgcm93RGF0YSA9IFtdO1xyXG4gIGRhdGU6IHN0cmluZztcclxuICBwYWdlU2l6ZTogbnVtYmVyID0gMTU7XHJcbiAgUmVwb3J0TmFtZSA9ICdBQ0MgR0wgRGV0YWlscyBFbnF1aXJ5JztcclxuICBleHBvcnRGb3JtYXRzID0gW1xyXG4gICAgeyBmb3JtYXROYW1lOiAnRXhjZWwnLCBjb2RlOiAnZXhjZWwnIH0sXHJcbiAgICB7IGZvcm1hdE5hbWU6ICdQREYnLCBjb2RlOiAncGRmJyB9LFxyXG4gICAgeyBmb3JtYXROYW1lOiAnQ1NWJywgY29kZTogJ2NzdicgfSxcclxuICBdO1xyXG4gIG1ldGFEYXRhT25lOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xyXG4gIG1ldGFEYXRhVHdvOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xyXG4gIENvbXBvbmVudExvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZXM7XHJcbiAgbG9hZGluZ1N0YXRlOiBDb21wb25lbnRMb2FkaW5nU3RhdGVzID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlcy5Db21wbGV0ZTtcclxuXHJcbiAgZGVmYXVsdENvbERlZjogQ29sRGVmID0ge1xyXG4gICAgcmVzaXphYmxlOiB0cnVlLFxyXG4gICAgc29ydGFibGU6IGZhbHNlLFxyXG4gICAgbWluV2lkdGg6IDQwLFxyXG4gICAgc3VwcHJlc3NTaXplVG9GaXQ6IGZhbHNlLFxyXG4gICAgY2VsbFN0eWxlOiB7XHJcbiAgICAgIHVzZXJTZWxlY3Q6ICd0ZXh0JyxcclxuICAgICAgJ2xpbmUtaGVpZ2h0JzogJzEuMicsXHJcbiAgICAgICd3aGl0ZS1zcGFjZSc6ICdub3JtYWwnLFxyXG4gICAgICAnd29yZC1icmVhayc6ICdub3JtYWwnLFxyXG4gICAgICAnb3ZlcmZsb3ctd3JhcCc6ICdicmVhay13b3JkJyxcclxuICAgIH0sXHJcbiAgICB3cmFwSGVhZGVyVGV4dDogdHJ1ZSxcclxuICAgIGF1dG9IZWFkZXJIZWlnaHQ6IHRydWUsXHJcbiAgICB3cmFwVGV4dDogdHJ1ZSxcclxuICAgIGF1dG9IZWlnaHQ6IHRydWUsXHJcbiAgfTtcclxuXHJcbiAgY29sdW1uRGVmczogQ29sRGVmW10gPSBbXHJcbiAgICB7IGhlYWRlck5hbWU6ICdKb3VybmFsIElEJywgZmllbGQ6ICdqb3VybmFsSUQnLCBmbGV4OiAxLjgsIGNlbGxDbGFzczogJ2FnLWxlZnQtY29scy1jZWxsIGNvbXBhY3QtY2VsbCcsIG1pbldpZHRoOiA5NSwgdG9vbHRpcEZpZWxkOiAnam91cm5hbElEJyB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnVHJhbnMgTm8nLCBmaWVsZDogJ3RyYW5zYWN0aW9uTm8nLCBmbGV4OiAxLjgsIGNlbGxDbGFzczogJ2FnLWxlZnQtY29scy1jZWxsIGNvbXBhY3QtY2VsbC10cmFuc2FjdGlvbicsIG1pbldpZHRoOiA3MywgdG9vbHRpcEZpZWxkOiAndHJhbnNhY3Rpb25ObycgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ1RyYW5zIENvZGUnLCBmaWVsZDogJ3RyYW5zYWN0aW9uQ29kZScsIGZsZXg6IDEuMiwgY2VsbENsYXNzOiAnYWctbGVmdC1jb2xzLWNlbGwgY29tcGFjdC1jZWxsJywgbWluV2lkdGg6IDYwLCB0b29sdGlwRmllbGQ6ICd0cmFuc2FjdGlvbkNvZGUnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdKb3VybmFsIFR5cGUnLCBmaWVsZDogJ2pvdXJuYWxUeXBlJywgZmxleDogMS4yLCBjZWxsQ2xhc3M6ICdhZy1sZWZ0LWNvbHMtY2VsbCBjb21wYWN0LWNlbGwnLCBtaW5XaWR0aDogNzMsIHRvb2x0aXBGaWVsZDogJ2pvdXJuYWxUeXBlJyB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnUG9zdGluZyBEYXRlJywgZmllbGQ6ICdwb3N0aW5nRGF0ZScsIGZsZXg6IDEuMiwgY2VsbENsYXNzOiAnYWctbGVmdC1jb2xzLWNlbGwgY29tcGFjdC1jZWxsJywgbWluV2lkdGg6IDY5LCB0b29sdGlwRmllbGQ6ICdwb3N0aW5nRGF0ZScgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ1ZhbHVlIERhdGUnLCBmaWVsZDogJ3ZhbHVlRGF0ZScsIGZsZXg6IDEuMiwgY2VsbENsYXNzOiAnYWctbGVmdC1jb2xzLWNlbGwgY29tcGFjdC1jZWxsJywgbWluV2lkdGg6IDY4LCB0b29sdGlwRmllbGQ6ICd2YWx1ZURhdGUnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdEZXNjcmlwdGlvbicsIGZpZWxkOiAnZGVzY3JpcHRpb24nLCBmbGV4OiA0LjgsIG1pbldpZHRoOiAxMTksIHdyYXBUZXh0OiB0cnVlLCBhdXRvSGVpZ2h0OiB0cnVlLCBjZWxsU3R5bGU6IHsgJ2xpbmUtaGVpZ2h0JzogJzEuMicsICd3aGl0ZS1zcGFjZSc6ICdub3JtYWwnLCAnd29yZC1icmVhayc6ICdub3JtYWwnLCAnb3ZlcmZsb3ctd3JhcCc6ICdicmVhay13b3JkJyB9LCB0b29sdGlwRmllbGQ6ICdkZXNjcmlwdGlvbicgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ0FjY291bnQgQ29kZScsIGZpZWxkOiAnYWNjb3VudENvZGUnLCBmbGV4OiAxLjIsIGNlbGxDbGFzczogJ2FnLWxlZnQtY29scy1jZWxsIGNvbXBhY3QtY2VsbCcsIG1pbldpZHRoOiA3MywgdG9vbHRpcEZpZWxkOiAnYWNjb3VudENvZGUnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdDY3knLCBmaWVsZDogJ2N1cnJlbmN5JywgZmxleDogMC44LCBjZWxsQ2xhc3M6ICdhZy1sZWZ0LWNvbHMtY2VsbCcsIG1pbldpZHRoOiAzNSwgdG9vbHRpcEZpZWxkOiAnY3VycmVuY3knIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdSYXRlJywgZmllbGQ6ICdyYXRlJywgZmxleDogMS4zLCBjZWxsQ2xhc3M6ICdhZy1yaWdodC1hbGlnbmVkLWNlbGwgY29tcGFjdC1jZWxsJywgbWluV2lkdGg6IDY5LCB0b29sdGlwRmllbGQ6ICdyYXRlJyB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnRnhEZWJpdCcsIGZpZWxkOiAnZm9yZXhEZWJpdCcsIGZsZXg6IDEsIGNlbGxDbGFzczogJ2FnLXJpZ2h0LWFsaWduZWQtY2VsbCBjb21wYWN0LWNlbGwnLCBtaW5XaWR0aDogNTgsIHRvb2x0aXBGaWVsZDogJ2ZvcmV4RGViaXQnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdMb2NhbCBEZWJpdCcsIGZpZWxkOiAnbG9jYWxEZWJpdCcsIGZsZXg6IDEsIGNlbGxDbGFzczogJ2FnLXJpZ2h0LWFsaWduZWQtY2VsbCBjb21wYWN0LWNlbGwnLCBtaW5XaWR0aDogNjIsIHRvb2x0aXBGaWVsZDogJ2xvY2FsRGViaXQnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdGeENyZWRpdCcsIGZpZWxkOiAnZm9yZXhDcmVkaXQnLCBmbGV4OiAxLCBjZWxsQ2xhc3M6ICdhZy1yaWdodC1hbGlnbmVkLWNlbGwgY29tcGFjdC1jZWxsJywgbWluV2lkdGg6IDU4LCB0b29sdGlwRmllbGQ6ICdmb3JleENyZWRpdCcgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ0xvY2FsIENyZWRpdCcsIGZpZWxkOiAnbG9jYWxDcmVkaXQnLCBmbGV4OiAxLCBjZWxsQ2xhc3M6ICdhZy1yaWdodC1hbGlnbmVkLWNlbGwgY29tcGFjdC1jZWxsJywgbWluV2lkdGg6IDYyLCB0b29sdGlwRmllbGQ6ICdsb2NhbENyZWRpdCcgfSxcclxuICBdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZXhwb3J0U2VydmljZTogRXhwb3J0U2VydmljZSxcclxuICAgIHByaXZhdGUgcmVwb3J0U2VydmljZTogUmVwb3J0U2VydmljZSxcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXJcclxuICApIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIC8vIHRoaXMuaHR0cFxyXG4gICAgLy8gICAuZ2V0KCdhc3NldHMvcmVwb3J0cy1saWIvYXNzZXRzL3N2Zy1sb2FkZXJzL2JsdWUtdGFpbC1zcGluLnN2ZycsIHsgcmVzcG9uc2VUeXBlOiAndGV4dCcgfSlcclxuICAgIC8vICAgLnN1YnNjcmliZSgoc3ZnKSA9PiB7XHJcbiAgICAvLyAgICAgdGhpcy5zdmdMb2FkZXIgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChzdmcpO1xyXG4gICAgLy8gICB9KTtcclxuICAgIHRoaXMuZGF0ZSA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEFjY0dMRGV0YWlsc1JlcG9ydCgpIHtcclxuICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlcy5Mb2FkaW5nO1xyXG4gICAgdGhpcy5hY2NHbERldGFpbHNFbnF1aXJ5UmVwb3J0TW9kZWwgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5kYXRhUmVhZHkgPSBmYWxzZTtcclxuICAgIHRoaXMuc2VsZWN0ZWRFeHBvcnRPcHRpb24gPSAnZXhjZWwnO1xyXG4gICAgdGhpcy5zeXNDb21wYW55Q29kZSA9ICdCSCc7XHJcbiAgICB0aGlzLnN5c1VzZXJJZCA9IHRoaXMucmVwb3J0U2VydmljZS5nZXRVc2VyTmFtZUZyb21TZXNzaW9uU3RvcmFnZSgpO1xyXG4gICAgdGhpcy5jb21wYW55TmFtZSA9ICdYcHJlc3MgTW9uZXknO1xyXG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XHJcblxyXG4gICAgdGhpcy5kYXRlVHlwZSA9IHRoaXMuZGF0ZVR5cGVGaWx0ZXIgPT09IDEgPyAnVkQnIDogJ1BEJztcclxuXHJcbiAgICB0aGlzLnJlcG9ydFNlcnZpY2UuZ2V0QWNjR0xEZXRhaWxzUmVwb3J0KHRoaXMuZGF0ZS5zcGxpdCgnVCcpWzBdLCB0aGlzLmRhdGVUeXBlKS5zdWJzY3JpYmUoXHJcbiAgICAgIChkYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgIC8vICBQcmUtZm9ybWF0IGVudHJpZXMgYmVmb3JlIHN0b3JpbmdcclxuICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZEVudHJpZXMgPSBkYXRhLmpvdXJuYWxWb3VjaGVyRW50cmllcy5tYXAoKGVudHJ5KSA9PiAoe1xyXG4gICAgICAgICAgICAuLi5lbnRyeSxcclxuICAgICAgICAgICAgcG9zdGluZ0RhdGU6IHRoaXMuZm9ybWF0RGF0ZVZhbHVlKGVudHJ5LnBvc3RpbmdEYXRlKSxcclxuICAgICAgICAgICAgdmFsdWVEYXRlOiB0aGlzLmZvcm1hdERhdGVWYWx1ZShlbnRyeS52YWx1ZURhdGUpLFxyXG4gICAgICAgICAgICByYXRlOiB0aGlzLmZvcm1hdE51bWJlclZhbHVlKGVudHJ5LnJhdGUsICdyYXRlJyksXHJcbiAgICAgICAgICAgIGZvcmV4RGViaXQ6IHRoaXMuZm9ybWF0TnVtYmVyVmFsdWUoZW50cnkuZm9yZXhEZWJpdCwgJ2ZvcmV4RGViaXQnKSxcclxuICAgICAgICAgICAgbG9jYWxEZWJpdDogdGhpcy5mb3JtYXROdW1iZXJWYWx1ZShlbnRyeS5sb2NhbERlYml0LCAnbG9jYWxEZWJpdCcpLFxyXG4gICAgICAgICAgICBmb3JleENyZWRpdDogdGhpcy5mb3JtYXROdW1iZXJWYWx1ZShlbnRyeS5mb3JleENyZWRpdCwgJ2ZvcmV4Q3JlZGl0JyksXHJcbiAgICAgICAgICAgIGxvY2FsQ3JlZGl0OiB0aGlzLmZvcm1hdE51bWJlclZhbHVlKGVudHJ5LmxvY2FsQ3JlZGl0LCAnbG9jYWxDcmVkaXQnKSxcclxuICAgICAgICAgIH0pKTtcclxuXHJcbiAgICAgICAgICB0aGlzLmFjY0dsRGV0YWlsc0VucXVpcnlSZXBvcnRNb2RlbCA9IHtcclxuICAgICAgICAgICAgLi4uZGF0YSxcclxuICAgICAgICAgICAgam91cm5hbFZvdWNoZXJFbnRyaWVzOiBmb3JtYXR0ZWRFbnRyaWVzLFxyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICB0aGlzLnJvd0RhdGEgPSBmb3JtYXR0ZWRFbnRyaWVzO1xyXG4gICAgICAgICAgdGhpcy5jb21wYW55TmFtZSA9IGRhdGEuY29tcGFueU5hbWU7XHJcbiAgICAgICAgICB0aGlzLnJlcG9ydFVzZXIgPSBkYXRhLnJlcG9ydFVzZXIudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIHRoaXMucmVwb3J0VGltZSA9IGZvcm1hdERhdGUobmV3IERhdGUoKSwgJ2RkL01NL3l5eXkgaGg6bW0gYScsICdlbi1VUycpO1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50UmVwb3J0VmFsdWVPclBvc3REYXRlID0gZm9ybWF0RGF0ZShkYXRhLmRhdGUsICdkZC9NTS95eXl5JywgJ2VuLVVTJyk7XHJcbiAgICAgICAgICBjb25zdCBEYXRlVHlwZSA9IHRoaXMuZGF0ZVR5cGUgPT09ICdWRCcgPyAnVmFsdWUgRGF0ZScgOiAnUG9zdGluZyBEYXRlJztcclxuXHJcbiAgICAgICAgICB0aGlzLm1ldGFEYXRhT25lID0ge1xyXG4gICAgICAgICAgICBbRGF0ZVR5cGVdOiB0aGlzLmN1cnJlbnRSZXBvcnRWYWx1ZU9yUG9zdERhdGUsXHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIHRoaXMubWV0YURhdGFUd28gPSB7XHJcbiAgICAgICAgICAgICdSZXBvcnQgVXNlciAmIFRpbWUgJzogYCR7dGhpcy5yZXBvcnRVc2VyfSBAICR7dGhpcy5yZXBvcnRUaW1lfWBcclxuICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGVzLkNvbXBsZXRlO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmRhdGFSZWFkeSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB3aW5kb3cuYWxlcnQoZXJyb3IubWVzc2FnZSk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvcm1hdERhdGVWYWx1ZSh2YWx1ZTogYW55KTogc3RyaW5nIHtcclxuICAgIGlmICghdmFsdWUpIHJldHVybiAnJztcclxuICAgIHJldHVybiBmb3JtYXREYXRlKG5ldyBEYXRlKHZhbHVlKSwgJ2RkL01NL3l5eXknLCAnZW4tVVMnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9ybWF0TnVtYmVyVmFsdWUodmFsdWU6IGFueSwgZmllbGQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuICcnO1xyXG4gICAgcmV0dXJuIGZpZWxkID09PSAncmF0ZScgPyBOdW1iZXIodmFsdWUpLnRvRml4ZWQoOCkgOiBOdW1iZXIodmFsdWUpLnRvRml4ZWQoMyk7XHJcbiAgfVxyXG5cclxuICBvbkdyaWRSZWFkeShwYXJhbXM6IEdyaWRSZWFkeUV2ZW50KSB7XHJcbiAgICB0aGlzLmdyaWRBcGkgPSBwYXJhbXMuYXBpO1xyXG4gICAgdGhpcy5ncmlkQ29sdW1uQXBpID0gcGFyYW1zLmNvbHVtbkFwaTtcclxuICB9XHJcblxyXG4gIG9uR3JpZFNpemVDaGFuZ2VkKHBhcmFtczogYW55KSB7XHJcbiAgICBwYXJhbXMuYXBpLnNpemVDb2x1bW5zVG9GaXQoKTtcclxuICB9XHJcblxyXG4gIGdldFJvd0hlaWdodChwYXJhbXM6IGFueSk6IG51bWJlciB7XHJcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHBhcmFtcy5kYXRhPy5kZXNjcmlwdGlvbiB8fCAnJztcclxuICAgIHJldHVybiBkZXNjcmlwdGlvbi5sZW5ndGggPiA1MCA/IDQwIDogMjA7XHJcbiAgfVxyXG5cclxuICBvblNlYXJjaCh0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IG5vcm1hbGl6ZSA9IChzdHI6IGFueSk6IHN0cmluZyA9PlxyXG4gICAgICBzdHJcclxuICAgICAgICA/LnRvU3RyaW5nKClcclxuICAgICAgICAudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgIC5yZXBsYWNlKC8sL2csICcnKVxyXG4gICAgICAgIC5yZXBsYWNlKC9cXHMrL2csICcgJylcclxuICAgICAgICAucmVwbGFjZSgvW1xcdTIwMEItXFx1MjAwRFxcdUZFRkZdL2csICcnKVxyXG4gICAgICAgIC50cmltKCk7XHJcblxyXG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gdGV4dDtcclxuICAgIGNvbnN0IHNlYXJjaCA9IG5vcm1hbGl6ZSh0aGlzLnNlYXJjaFRleHQpO1xyXG5cclxuICAgIGlmIChzZWFyY2gpIHtcclxuICAgICAgdGhpcy5yb3dEYXRhID0gdGhpcy5hY2NHbERldGFpbHNFbnF1aXJ5UmVwb3J0TW9kZWwuam91cm5hbFZvdWNoZXJFbnRyaWVzLmZpbHRlcigoaXRlbSkgPT5cclxuICAgICAgICBPYmplY3QudmFsdWVzKGl0ZW0pLnNvbWUoKHZhbHVlKSA9PiBub3JtYWxpemUodmFsdWUpLmluY2x1ZGVzKHNlYXJjaCkpXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJvd0RhdGEgPSB0aGlzLmFjY0dsRGV0YWlsc0VucXVpcnlSZXBvcnRNb2RlbC5qb3VybmFsVm91Y2hlckVudHJpZXM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVFeHBvcnQob3B0aW9uOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRFeHBvcnRPcHRpb24gPSBvcHRpb247XHJcbiAgICBzd2l0Y2ggKHRoaXMuc2VsZWN0ZWRFeHBvcnRPcHRpb24pIHtcclxuICAgICAgY2FzZSAnZXhjZWwnOlxyXG4gICAgICAgIHRoaXMuZXhwb3J0VG9FeGNlbCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdwZGYnOlxyXG4gICAgICAgIHRoaXMuZXhwb3J0VG9QZGYoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnY3N2JzpcclxuICAgICAgICB0aGlzLmV4cG9ydFRvQ3N2KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYWxlcnQoJ1BsZWFzZSBzZWxlY3QgYW4gZXhwb3J0IGZvcm1hdC4nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGV4cG9ydFRvUGRmKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKCF0aGlzLmFjY0dsRGV0YWlsc0VucXVpcnlSZXBvcnRNb2RlbC5qb3VybmFsVm91Y2hlckVudHJpZXM/Lmxlbmd0aCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHRpdGxlID0gYCR7dGhpcy5jb21wYW55TmFtZX0gLSBHZW5lcmFsIExlZGdlciBBY2NvdW50IERldGFpbHMgRW5xdWlyeSBSZXBvcnRgO1xyXG4gICAgY29uc3QgbWV0YWRhdGEgPSB0aGlzLmV4cG9ydFNlcnZpY2UuZ2VuZXJhdGVSZXBvcnRNZXRhZGF0YShbXHJcbiAgICAgIFsnUmVwb3J0IFVzZXIgOiAnLCB0aGlzLnJlcG9ydFVzZXJdLFxyXG4gICAgICBbJ1JlcG9ydCBUaW1lIDogJywgdGhpcy5yZXBvcnRUaW1lXSxcclxuICAgICAgLy8gWydTZWFyY2ggQ3JpdGVyaWEnLCAnIC0gJ10sXHJcbiAgICAgIC8vIFtgJHt0aGlzLmRhdGVUeXBlID09ICdWRCcgPyAnVmFsdWUgRGF0ZScgOiAnUG9zdGluZyBEYXRlJ306YCwgdGhpcy5jdXJyZW50UmVwb3J0VmFsdWVPclBvc3REYXRlXSxcclxuICAgIF0pO1xyXG4gICAgLy8gLS0tIHNlYXJjaCBjcml0ZXJpYSAtLS1cclxuICAgIGNvbnN0IHNlYXJjaENyaXRlcmlhOiBbc3RyaW5nLCBzdHJpbmddW10gPSBbXHJcbiAgICAgIFsnRGF0ZSBUeXBlOicsIGAke3RoaXMuZGF0ZVR5cGUgPT0gJ1ZEJyA/ICdWYWx1ZSBEYXRlJyA6ICdQb3N0aW5nIERhdGUnfWBdLFxyXG4gICAgICBbJ0RhdGU6JywgdGhpcy5jdXJyZW50UmVwb3J0VmFsdWVPclBvc3REYXRlXSxcclxuICAgIF07XHJcblxyXG4gICAgY29uc3QgeyBoZWFkZXJzLCByb3dzIH0gPSB0aGlzLmV4cG9ydFNlcnZpY2UucHJlcGFyZUV4cG9ydFRhYmxlKHRoaXMuYWNjR2xEZXRhaWxzRW5xdWlyeVJlcG9ydE1vZGVsLmpvdXJuYWxWb3VjaGVyRW50cmllcywgdGhpcy5jb2x1bW5EZWZzLCB7XHJcbiAgICAgIGN1cnJlbmN5RmllbGRzOiBbJ2xvY2FsQ3JlZGl0JywgJ2ZvcmV4Q3JlZGl0JywgJ2xvY2FsRGViaXQnLCAnZm9yZXhEZWJpdCddLFxyXG4gICAgfSk7XHJcblxyXG4gICAgYXdhaXQgdGhpcy5leHBvcnRTZXJ2aWNlLmV4cG9ydFRvUGRmVW5pdmVyc2FsKHRpdGxlLCBtZXRhZGF0YSwgc2VhcmNoQ3JpdGVyaWEsIGhlYWRlcnMsIHJvd3MsICdBQ0MtR0wtRGV0YWlscy1FbnF1aXJ5LVJlcG9ydC5wZGYnKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydFRvRXhjZWwoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuYWNjR2xEZXRhaWxzRW5xdWlyeVJlcG9ydE1vZGVsLmpvdXJuYWxWb3VjaGVyRW50cmllcz8ubGVuZ3RoKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgdGl0bGUgPSBgJHt0aGlzLmNvbXBhbnlOYW1lfSAtIEdlbmVyYWwgTGVkZ2VyIEFjY291bnQgRGV0YWlscyBFbnF1aXJ5IFJlcG9ydGA7XHJcbiAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuZXhwb3J0U2VydmljZS5nZW5lcmF0ZVJlcG9ydE1ldGFkYXRhKFtcclxuICAgICAgWydSZXBvcnQgVXNlcicsIHRoaXMucmVwb3J0VXNlcl0sXHJcbiAgICAgIFsnUmVwb3J0IFRpbWUnLCB0aGlzLnJlcG9ydFRpbWVdLFxyXG4gICAgICAvLyBbJ1NlYXJjaCBDcml0ZXJpYScsICcgLSAnXSxcclxuICAgICAgLy8gW2Ake3RoaXMuZGF0ZVR5cGUgPT0gJ1ZEJyA/ICdWYWx1ZSBEYXRlJyA6ICdQb3N0aW5nIERhdGUnfWAsIHRoaXMuY3VycmVudFJlcG9ydFZhbHVlT3JQb3N0RGF0ZV0sXHJcbiAgICBdKTtcclxuICAgIC8vIC0tLSBzZWFyY2ggY3JpdGVyaWEgLS0tXHJcbiAgICBjb25zdCBzZWFyY2hDcml0ZXJpYTogW3N0cmluZywgc3RyaW5nXVtdID0gW1xyXG4gICAgICBbJ0RhdGUgVHlwZTonLCBgJHt0aGlzLmRhdGVUeXBlID09ICdWRCcgPyAnVmFsdWUgRGF0ZScgOiAnUG9zdGluZyBEYXRlJ31gXSxcclxuICAgICAgWydEYXRlOicsIHRoaXMuY3VycmVudFJlcG9ydFZhbHVlT3JQb3N0RGF0ZV0sXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0IHsgaGVhZGVycywgcm93cyB9ID0gdGhpcy5leHBvcnRTZXJ2aWNlLnByZXBhcmVFeHBvcnRUYWJsZSh0aGlzLmFjY0dsRGV0YWlsc0VucXVpcnlSZXBvcnRNb2RlbC5qb3VybmFsVm91Y2hlckVudHJpZXMsIHRoaXMuY29sdW1uRGVmcywge1xyXG4gICAgICBjdXJyZW5jeUZpZWxkczogWydsb2NhbENyZWRpdCcsICdmb3JleENyZWRpdCcsICdsb2NhbERlYml0JywgJ2ZvcmV4RGViaXQnXSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZXhwb3J0U2VydmljZS5leHBvcnRUb0V4Y2VsVW5pdmVyc2FsKHRpdGxlLCBtZXRhZGF0YSxzZWFyY2hDcml0ZXJpYSwgaGVhZGVycywgcm93cywgJ0FDQy1HTC1EZXRhaWxzLUVucXVpcnktUmVwb3J0Lnhsc3gnKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydFRvQ3N2KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmFjY0dsRGV0YWlsc0VucXVpcnlSZXBvcnRNb2RlbC5qb3VybmFsVm91Y2hlckVudHJpZXM/Lmxlbmd0aCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHRpdGxlID0gYCR7dGhpcy5jb21wYW55TmFtZX0gLSBHZW5lcmFsIExlZGdlciBBY2NvdW50IERldGFpbHMgRW5xdWlyeSBSZXBvcnRgO1xyXG4gICAgY29uc3QgbWV0YWRhdGEgPSB0aGlzLmV4cG9ydFNlcnZpY2UuZ2VuZXJhdGVSZXBvcnRNZXRhZGF0YShbXHJcbiAgICAgIFsnUmVwb3J0IFVzZXInLCB0aGlzLnJlcG9ydFVzZXJdLFxyXG4gICAgICBbJ1JlcG9ydCBUaW1lJywgdGhpcy5yZXBvcnRUaW1lXSxcclxuICAgICAgWydTZWFyY2ggQ3JpdGVyaWEnLCAnLSAnXSxcclxuICAgICAgW2Ake3RoaXMuZGF0ZVR5cGUgPT0gJ1ZEJyA/ICdWYWx1ZSBEYXRlJyA6ICdQb3N0aW5nIERhdGUnfWAsIHRoaXMuY3VycmVudFJlcG9ydFZhbHVlT3JQb3N0RGF0ZV0sXHJcbiAgICBdKTtcclxuXHJcbiAgICBjb25zdCB7IGhlYWRlcnMsIHJvd3MgfSA9IHRoaXMuZXhwb3J0U2VydmljZS5wcmVwYXJlRXhwb3J0VGFibGUodGhpcy5hY2NHbERldGFpbHNFbnF1aXJ5UmVwb3J0TW9kZWwuam91cm5hbFZvdWNoZXJFbnRyaWVzLCB0aGlzLmNvbHVtbkRlZnMsIHtcclxuICAgICAgY3VycmVuY3lGaWVsZHM6IFsnbG9jYWxDcmVkaXQnLCAnZm9yZXhDcmVkaXQnLCAnbG9jYWxEZWJpdCcsICdmb3JleERlYml0J10sXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmV4cG9ydFNlcnZpY2UuZXhwb3J0VG9Dc3ZVbml2ZXJzYWwodGl0bGUsIG1ldGFkYXRhLCBoZWFkZXJzLCByb3dzLCAnQUNDLUdMLURldGFpbHMtRW5xdWlyeS1SZXBvcnQuY3N2Jyk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVTZWFyY2goY3JpdGVyaWE6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5kYXRlVHlwZUZpbHRlciA9IGNyaXRlcmlhLnNlbGVjdGVkRGF0ZVR5cGU7XHJcbiAgICB0aGlzLmRhdGUgPSBjcml0ZXJpYS5zZWxlY3RlZERhdGUuc3BsaXQoJ1QnKVswXTtcclxuICAgIHRoaXMuZ2V0QWNjR0xEZXRhaWxzUmVwb3J0KCk7XHJcbiAgfVxyXG59XHJcbiIsIjxsaWItc2VhcmNoLWZpbHRlciBbUmVwb3J0TmFtZV09XCJSZXBvcnROYW1lXCIgKHNlYXJjaENsaWNrZWQpPVwiaGFuZGxlU2VhcmNoKCRldmVudClcIj5cclxuPC9saWItc2VhcmNoLWZpbHRlcj5cclxuPGFwcC1sb2FkZXIgY2xhc3M9XCJcIiAqbmdJZj1cImxvYWRpbmdTdGF0ZSA9PSBDb21wb25lbnRMb2FkaW5nU3RhdGUuTG9hZGluZ1wiPjwvYXBwLWxvYWRlcj5cclxuPGRpdiBjbGFzcz1cIm1haW4tY29udGFpbmVyXCI+XHJcbiAgPGRpdiBjbGFzcz1cInJlcG9ydC1jb250YWluZXJcIlxyXG4gICAgKm5nSWY9XCJhY2NHbERldGFpbHNFbnF1aXJ5UmVwb3J0TW9kZWwgIT0gdW5kZWZpbmVkICYmIGRhdGFSZWFkeSAmJiBhY2NHbERldGFpbHNFbnF1aXJ5UmVwb3J0TW9kZWw/LmpvdXJuYWxWb3VjaGVyRW50cmllcz8ubGVuZ3RoIT0wXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWFpbi1yZXBvcnRcIiAqbmdJZj1cImFjY0dsRGV0YWlsc0VucXVpcnlSZXBvcnRNb2RlbCAhPSB1bmRlZmluZWQgJiYgZGF0YVJlYWR5XCI+XHJcbiAgICAgIDxsaWItbWV0YWRhdGEgW3JlcG9ydE5hbWVdPVwiUmVwb3J0TmFtZVwiIFtzaG93bWV0YURhdGFPbmVdPVwidHJ1ZVwiIFtzaG93bWV0YURhdGFUd29dPVwidHJ1ZVwiXHJcbiAgICAgICAgW21ldGFEYXRhT25lXT1cIm1ldGFEYXRhT25lXCIgW21ldGFEYXRhVHdvXT1cIm1ldGFEYXRhVHdvXCIgKGV4cG9ydEV2ZW50KT1cImhhbmRsZUV4cG9ydCgkZXZlbnQpXCJcclxuICAgICAgICAoc2VhcmNoRXZlbnQpPVwib25TZWFyY2goJGV2ZW50KVwiPjwvbGliLW1ldGFkYXRhPlxyXG4gICAgICA8ZGl2IHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlO1wiPlxyXG4gICAgICAgIDxsaWItcGFnZS1zaXplLXNlbGVjdG9yIFt0b3RhbEVudHJpZXNdPVwiYWNjR2xEZXRhaWxzRW5xdWlyeVJlcG9ydE1vZGVsPy5qb3VybmFsVm91Y2hlckVudHJpZXM/Lmxlbmd0aFwiXHJcbiAgICAgICAgICBbZGVmYXVsdFNpemVdPVwiJzE1J1wiIFtncmlkQXBpXT1cImdyaWRBcGlcIj5cclxuICAgICAgICAgID48L2xpYi1wYWdlLXNpemUtc2VsZWN0b3I+XHJcbiAgICAgICAgPGFnLWdyaWQtYW5ndWxhciBjbGFzcz1cImFnLXRoZW1lLWFscGluZSB0cmFuc2FjdGlvbi1ncmlkXCIgc3R5bGU9XCJ3aWR0aDogMTAwJTtoZWlnaHQ6IDM3NXB4O1wiXHJcbiAgICAgICAgICBbY29sdW1uRGVmc109XCJjb2x1bW5EZWZzXCIgW2RlZmF1bHRDb2xEZWZdPVwiZGVmYXVsdENvbERlZlwiIFtyb3dEYXRhXT1cInJvd0RhdGFcIiBbcm93SGVpZ2h0XT1cIjIwXCJcclxuICAgICAgICAgIFtoZWFkZXJIZWlnaHRdPVwiMjJcIiBbcGFnaW5hdGlvbl09XCJ0cnVlXCIgW3BhZ2luYXRpb25QYWdlU2l6ZV09XCJwYWdlU2l6ZVwiIChncmlkUmVhZHkpPVwib25HcmlkUmVhZHkoJGV2ZW50KVwiXHJcbiAgICAgICAgICAoZ3JpZFNpemVDaGFuZ2VkKT1cIm9uR3JpZFNpemVDaGFuZ2VkKCRldmVudClcIj5cclxuICAgICAgICA8L2FnLWdyaWQtYW5ndWxhcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LXdhcm5pbmcgbXQtM1wiICpuZ0lmPVwiYWNjR2xEZXRhaWxzRW5xdWlyeVJlcG9ydE1vZGVsPy5qb3VybmFsVm91Y2hlckVudHJpZXM/Lmxlbmd0aD09MFwiPlxyXG4gICAgTm8gRGF0YSBmb3VuZCBtYXRjaGluZyB5b3VyIHNlYXJjaCBjcml0ZXJpYS5cclxuICA8L2Rpdj5cclxuPC9kaXY+Il19
235
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjLWdsLWRldGFpbHMtZW5xdWlyeS1yZXBvcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmVwb3J0cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL2FjYy1nbC1kZXRhaWxzLWVucXVpcnktcmVwb3J0L2FjYy1nbC1kZXRhaWxzLWVucXVpcnktcmVwb3J0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JlcG9ydHMtbGliL3NyYy9saWIvY29tcG9uZW50cy9hY2MtZ2wtZGV0YWlscy1lbnF1aXJ5LXJlcG9ydC9hY2MtZ2wtZGV0YWlscy1lbnF1aXJ5LXJlcG9ydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBSWxELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUc3QyxPQUFPLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDOzs7Ozs7Ozs7Ozs7QUFjL0UsTUFBTSxPQUFPLGtDQUFrQztJQXFFN0MsWUFDVSxhQUE0QixFQUM1QixhQUE0QixFQUM1QixJQUFnQixFQUNoQixTQUF1QjtRQUh2QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLGNBQVMsR0FBVCxTQUFTLENBQWM7UUF0RWpDLGVBQVUsR0FBVyxFQUFFLENBQUM7UUFHeEIseUJBQW9CLEdBQVcsT0FBTyxDQUFDO1FBQ3ZDLGNBQVMsR0FBYSxFQUFFLENBQUM7UUFDekIsWUFBTyxHQUFZLEtBQUssQ0FBQztRQUN6QixjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLG1CQUFjLEdBQVcsQ0FBQyxDQUFDO1FBUzNCLFlBQU8s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OytIQXJRVSxrQ0FBa0M7bUhBQWxDLGtDQUFrQyx5RUN2Qi9DLG10REEwQk07MkZESE8sa0NBQWtDO2tCQU45QyxTQUFTOytCQUNFLG1DQUFtQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJlcG9ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXBvcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEFjY0dsRGV0YWlsc0VucXVpcnlSZXBvcnRNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9hY2MtZ2wtZGV0YWlscy1lbnF1aXJ5LXJlcG9ydC9hY2NnbC1kZXRhaWxzLWVucXVpcnktcmVwb3J0bW9kZWwnO1xyXG5pbXBvcnQgeyBDb2xEZWYsIENvbHVtbkFwaSwgR3JpZEFwaSwgR3JpZFJlYWR5RXZlbnQgfSBmcm9tICdhZy1ncmlkLWNvbW11bml0eSc7XHJcbmltcG9ydCB7IGZvcm1hdERhdGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCAnanNwZGYtYXV0b3RhYmxlJztcclxuaW1wb3J0IHsgRXhwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9leHBvcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudExvYWRpbmdTdGF0ZXMgfSBmcm9tICcuLi8uLi9tb2RlbHMvY29tcG9uZW50LWxvYWRpbmctc3RhdGVzJztcclxuXHJcbmRlY2xhcmUgbW9kdWxlICdqc3BkZicge1xyXG4gIGludGVyZmFjZSBqc1BERiB7XHJcbiAgICBhdXRvVGFibGU6IChvcHRpb25zOiBhbnkpID0+IGpzUERGO1xyXG4gIH1cclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItYWNjLWdsLWRldGFpbHMtZW5xdWlyeS1yZXBvcnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hY2MtZ2wtZGV0YWlscy1lbnF1aXJ5LXJlcG9ydC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYWNjLWdsLWRldGFpbHMtZW5xdWlyeS1yZXBvcnQuY29tcG9uZW50LnNjc3MnXSxcclxuXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBY2NHbERldGFpbHNFbnF1aXJ5UmVwb3J0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcblxyXG4gIHNlYXJjaFRleHQ6IHN0cmluZyA9ICcnO1xyXG4gIGdyaWRBcGk6IEdyaWRBcGk8YW55PjtcclxuICBncmlkQ29sdW1uQXBpITogQ29sdW1uQXBpO1xyXG4gIHNlbGVjdGVkRXhwb3J0T3B0aW9uOiBzdHJpbmcgPSAnZXhjZWwnO1xyXG4gIHN2Z0xvYWRlcjogU2FmZUh0bWwgPSAnJztcclxuICBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZGF0YVJlYWR5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgZGF0ZVR5cGVGaWx0ZXI6IG51bWJlciA9IDE7XHJcbiAgZGF0ZVR5cGU6IGFueTtcclxuICBzeXNDb21wYW55Q29kZTogYW55O1xyXG4gIHN5c1VzZXJJZDogYW55O1xyXG4gIGNvbXBhbnlOYW1lOiBhbnk7XHJcbiAgcmVwb3J0VXNlcjogYW55O1xyXG4gIHJlcG9ydFRpbWU6IGFueTtcclxuICBjdXJyZW50UmVwb3J0VmFsdWVPclBvc3REYXRlOiBhbnk7XHJcbiAgYWNjR2xEZXRhaWxzRW5xdWlyeVJlcG9ydE1vZGVsOiBBY2NHbERldGFpbHNFbnF1aXJ5UmVwb3J0TW9kZWw7XHJcbiAgcm93RGF0YSA9IFtdO1xyXG4gIGRhdGU6IHN0cmluZztcclxuICBwYWdlU2l6ZTogbnVtYmVyID0gMTU7XHJcbiAgUmVwb3J0TmFtZSA9ICdBQ0MgR0wgRGV0YWlscyBFbnF1aXJ5JztcclxuICBleHBvcnRGb3JtYXRzID0gW1xyXG4gICAgeyBmb3JtYXROYW1lOiAnRXhjZWwnLCBjb2RlOiAnZXhjZWwnIH0sXHJcbiAgICB7IGZvcm1hdE5hbWU6ICdQREYnLCBjb2RlOiAncGRmJyB9LFxyXG4gICAgeyBmb3JtYXROYW1lOiAnQ1NWJywgY29kZTogJ2NzdicgfSxcclxuICBdO1xyXG4gIG1ldGFEYXRhT25lOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xyXG4gIG1ldGFEYXRhVHdvOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xyXG4gIENvbXBvbmVudExvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZXM7XHJcbiAgbG9hZGluZ1N0YXRlOiBDb21wb25lbnRMb2FkaW5nU3RhdGVzID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlcy5Db21wbGV0ZTtcclxuICBzZWFyY2hDcml0ZXJpYTogW3N0cmluZywgc3RyaW5nXVtdO1xyXG5cclxuICBkZWZhdWx0Q29sRGVmOiBDb2xEZWYgPSB7XHJcbiAgICByZXNpemFibGU6IHRydWUsXHJcbiAgICBzb3J0YWJsZTogZmFsc2UsXHJcbiAgICBtaW5XaWR0aDogNDAsXHJcbiAgICBzdXBwcmVzc1NpemVUb0ZpdDogZmFsc2UsXHJcbiAgICBjZWxsU3R5bGU6IHtcclxuICAgICAgdXNlclNlbGVjdDogJ3RleHQnLFxyXG4gICAgICAnbGluZS1oZWlnaHQnOiAnMS4yJyxcclxuICAgICAgJ3doaXRlLXNwYWNlJzogJ25vcm1hbCcsXHJcbiAgICAgICd3b3JkLWJyZWFrJzogJ25vcm1hbCcsXHJcbiAgICAgICdvdmVyZmxvdy13cmFwJzogJ2JyZWFrLXdvcmQnLFxyXG4gICAgfSxcclxuICAgIHdyYXBIZWFkZXJUZXh0OiB0cnVlLFxyXG4gICAgYXV0b0hlYWRlckhlaWdodDogdHJ1ZSxcclxuICAgIHdyYXBUZXh0OiB0cnVlLFxyXG4gICAgYXV0b0hlaWdodDogdHJ1ZSxcclxuICB9O1xyXG5cclxuICBjb2x1bW5EZWZzOiBDb2xEZWZbXSA9IFtcclxuICAgIHsgaGVhZGVyTmFtZTogJ0pvdXJuYWwgSUQnLCBmaWVsZDogJ2pvdXJuYWxJRCcsIGZsZXg6IDEuOCwgY2VsbENsYXNzOiAnYWctbGVmdC1jb2xzLWNlbGwgY29tcGFjdC1jZWxsJywgbWluV2lkdGg6IDk1LCB0b29sdGlwRmllbGQ6ICdqb3VybmFsSUQnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdUcmFucyBObycsIGZpZWxkOiAndHJhbnNhY3Rpb25ObycsIGZsZXg6IDEuOCwgY2VsbENsYXNzOiAnYWctbGVmdC1jb2xzLWNlbGwgY29tcGFjdC1jZWxsLXRyYW5zYWN0aW9uJywgbWluV2lkdGg6IDczLCB0b29sdGlwRmllbGQ6ICd0cmFuc2FjdGlvbk5vJyB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnVHJhbnMgQ29kZScsIGZpZWxkOiAndHJhbnNhY3Rpb25Db2RlJywgZmxleDogMS4yLCBjZWxsQ2xhc3M6ICdhZy1sZWZ0LWNvbHMtY2VsbCBjb21wYWN0LWNlbGwnLCBtaW5XaWR0aDogNjAsIHRvb2x0aXBGaWVsZDogJ3RyYW5zYWN0aW9uQ29kZScgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ0pvdXJuYWwgVHlwZScsIGZpZWxkOiAnam91cm5hbFR5cGUnLCBmbGV4OiAxLjIsIGNlbGxDbGFzczogJ2FnLWxlZnQtY29scy1jZWxsIGNvbXBhY3QtY2VsbCcsIG1pbldpZHRoOiA3MywgdG9vbHRpcEZpZWxkOiAnam91cm5hbFR5cGUnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdQb3N0aW5nIERhdGUnLCBmaWVsZDogJ3Bvc3RpbmdEYXRlJywgZmxleDogMS4yLCBjZWxsQ2xhc3M6ICdhZy1sZWZ0LWNvbHMtY2VsbCBjb21wYWN0LWNlbGwnLCBtaW5XaWR0aDogNjksIHRvb2x0aXBGaWVsZDogJ3Bvc3RpbmdEYXRlJyB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnVmFsdWUgRGF0ZScsIGZpZWxkOiAndmFsdWVEYXRlJywgZmxleDogMS4yLCBjZWxsQ2xhc3M6ICdhZy1sZWZ0LWNvbHMtY2VsbCBjb21wYWN0LWNlbGwnLCBtaW5XaWR0aDogNjgsIHRvb2x0aXBGaWVsZDogJ3ZhbHVlRGF0ZScgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ0Rlc2NyaXB0aW9uJywgZmllbGQ6ICdkZXNjcmlwdGlvbicsIGZsZXg6IDQuOCwgbWluV2lkdGg6IDExOSwgd3JhcFRleHQ6IHRydWUsIGF1dG9IZWlnaHQ6IHRydWUsIGNlbGxTdHlsZTogeyAnbGluZS1oZWlnaHQnOiAnMS4yJywgJ3doaXRlLXNwYWNlJzogJ25vcm1hbCcsICd3b3JkLWJyZWFrJzogJ25vcm1hbCcsICdvdmVyZmxvdy13cmFwJzogJ2JyZWFrLXdvcmQnIH0sIHRvb2x0aXBGaWVsZDogJ2Rlc2NyaXB0aW9uJyB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnQWNjb3VudCBDb2RlJywgZmllbGQ6ICdhY2NvdW50Q29kZScsIGZsZXg6IDEuMiwgY2VsbENsYXNzOiAnYWctbGVmdC1jb2xzLWNlbGwgY29tcGFjdC1jZWxsJywgbWluV2lkdGg6IDczLCB0b29sdGlwRmllbGQ6ICdhY2NvdW50Q29kZScgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ0NjeScsIGZpZWxkOiAnY3VycmVuY3knLCBmbGV4OiAwLjgsIGNlbGxDbGFzczogJ2FnLWxlZnQtY29scy1jZWxsJywgbWluV2lkdGg6IDM1LCB0b29sdGlwRmllbGQ6ICdjdXJyZW5jeScgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ1JhdGUnLCBmaWVsZDogJ3JhdGUnLCBmbGV4OiAxLjMsIGNlbGxDbGFzczogJ2FnLXJpZ2h0LWFsaWduZWQtY2VsbCBjb21wYWN0LWNlbGwnLCBtaW5XaWR0aDogNjksIHRvb2x0aXBGaWVsZDogJ3JhdGUnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdGeERlYml0JywgZmllbGQ6ICdmb3JleERlYml0JywgZmxleDogMSwgY2VsbENsYXNzOiAnYWctcmlnaHQtYWxpZ25lZC1jZWxsIGNvbXBhY3QtY2VsbCcsIG1pbldpZHRoOiA1OCwgdG9vbHRpcEZpZWxkOiAnZm9yZXhEZWJpdCcgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ0xvY2FsIERlYml0JywgZmllbGQ6ICdsb2NhbERlYml0JywgZmxleDogMSwgY2VsbENsYXNzOiAnYWctcmlnaHQtYWxpZ25lZC1jZWxsIGNvbXBhY3QtY2VsbCcsIG1pbldpZHRoOiA2MiwgdG9vbHRpcEZpZWxkOiAnbG9jYWxEZWJpdCcgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ0Z4Q3JlZGl0JywgZmllbGQ6ICdmb3JleENyZWRpdCcsIGZsZXg6IDEsIGNlbGxDbGFzczogJ2FnLXJpZ2h0LWFsaWduZWQtY2VsbCBjb21wYWN0LWNlbGwnLCBtaW5XaWR0aDogNTgsIHRvb2x0aXBGaWVsZDogJ2ZvcmV4Q3JlZGl0JyB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnTG9jYWwgQ3JlZGl0JywgZmllbGQ6ICdsb2NhbENyZWRpdCcsIGZsZXg6IDEsIGNlbGxDbGFzczogJ2FnLXJpZ2h0LWFsaWduZWQtY2VsbCBjb21wYWN0LWNlbGwnLCBtaW5XaWR0aDogNjIsIHRvb2x0aXBGaWVsZDogJ2xvY2FsQ3JlZGl0JyB9LFxyXG4gIF07XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBleHBvcnRTZXJ2aWNlOiBFeHBvcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZXBvcnRTZXJ2aWNlOiBSZXBvcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplclxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgLy8gdGhpcy5odHRwXHJcbiAgICAvLyAgIC5nZXQoJ2Fzc2V0cy9yZXBvcnRzLWxpYi9hc3NldHMvc3ZnLWxvYWRlcnMvYmx1ZS10YWlsLXNwaW4uc3ZnJywgeyByZXNwb25zZVR5cGU6ICd0ZXh0JyB9KVxyXG4gICAgLy8gICAuc3Vic2NyaWJlKChzdmcpID0+IHtcclxuICAgIC8vICAgICB0aGlzLnN2Z0xvYWRlciA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKHN2Zyk7XHJcbiAgICAvLyAgIH0pO1xyXG4gICAgdGhpcy5kYXRlID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0QWNjR0xEZXRhaWxzUmVwb3J0KCkge1xyXG4gICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGVzLkxvYWRpbmc7XHJcbiAgICB0aGlzLmFjY0dsRGV0YWlsc0VucXVpcnlSZXBvcnRNb2RlbCA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLmRhdGFSZWFkeSA9IGZhbHNlO1xyXG4gICAgdGhpcy5zZWxlY3RlZEV4cG9ydE9wdGlvbiA9ICdleGNlbCc7XHJcbiAgICB0aGlzLnN5c0NvbXBhbnlDb2RlID0gJ0JIJztcclxuICAgIHRoaXMuc3lzVXNlcklkID0gdGhpcy5yZXBvcnRTZXJ2aWNlLmdldFVzZXJOYW1lRnJvbVNlc3Npb25TdG9yYWdlKCk7XHJcbiAgICB0aGlzLmNvbXBhbnlOYW1lID0gJ1hwcmVzcyBNb25leSc7XHJcbiAgICB0aGlzLnNlYXJjaFRleHQgPSAnJztcclxuXHJcbiAgICB0aGlzLmRhdGVUeXBlID0gdGhpcy5kYXRlVHlwZUZpbHRlciA9PT0gMSA/ICdWRCcgOiAnUEQnO1xyXG5cclxuICAgIHRoaXMucmVwb3J0U2VydmljZS5nZXRBY2NHTERldGFpbHNSZXBvcnQodGhpcy5kYXRlLnNwbGl0KCdUJylbMF0sIHRoaXMuZGF0ZVR5cGUpLnN1YnNjcmliZShcclxuICAgICAgKGRhdGEpID0+IHtcclxuICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgLy8gIFByZS1mb3JtYXQgZW50cmllcyBiZWZvcmUgc3RvcmluZ1xyXG4gICAgICAgICAgY29uc3QgZm9ybWF0dGVkRW50cmllcyA9IGRhdGEuam91cm5hbFZvdWNoZXJFbnRyaWVzLm1hcCgoZW50cnkpID0+ICh7XHJcbiAgICAgICAgICAgIC4uLmVudHJ5LFxyXG4gICAgICAgICAgICBwb3N0aW5nRGF0ZTogdGhpcy5mb3JtYXREYXRlVmFsdWUoZW50cnkucG9zdGluZ0RhdGUpLFxyXG4gICAgICAgICAgICB2YWx1ZURhdGU6IHRoaXMuZm9ybWF0RGF0ZVZhbHVlKGVudHJ5LnZhbHVlRGF0ZSksXHJcbiAgICAgICAgICAgIHJhdGU6IHRoaXMuZm9ybWF0TnVtYmVyVmFsdWUoZW50cnkucmF0ZSwgJ3JhdGUnKSxcclxuICAgICAgICAgICAgZm9yZXhEZWJpdDogdGhpcy5mb3JtYXROdW1iZXJWYWx1ZShlbnRyeS5mb3JleERlYml0LCAnZm9yZXhEZWJpdCcpLFxyXG4gICAgICAgICAgICBsb2NhbERlYml0OiB0aGlzLmZvcm1hdE51bWJlclZhbHVlKGVudHJ5LmxvY2FsRGViaXQsICdsb2NhbERlYml0JyksXHJcbiAgICAgICAgICAgIGZvcmV4Q3JlZGl0OiB0aGlzLmZvcm1hdE51bWJlclZhbHVlKGVudHJ5LmZvcmV4Q3JlZGl0LCAnZm9yZXhDcmVkaXQnKSxcclxuICAgICAgICAgICAgbG9jYWxDcmVkaXQ6IHRoaXMuZm9ybWF0TnVtYmVyVmFsdWUoZW50cnkubG9jYWxDcmVkaXQsICdsb2NhbENyZWRpdCcpLFxyXG4gICAgICAgICAgfSkpO1xyXG5cclxuICAgICAgICAgIHRoaXMuYWNjR2xEZXRhaWxzRW5xdWlyeVJlcG9ydE1vZGVsID0ge1xyXG4gICAgICAgICAgICAuLi5kYXRhLFxyXG4gICAgICAgICAgICBqb3VybmFsVm91Y2hlckVudHJpZXM6IGZvcm1hdHRlZEVudHJpZXMsXHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIHRoaXMucm93RGF0YSA9IGZvcm1hdHRlZEVudHJpZXM7XHJcbiAgICAgICAgICB0aGlzLmNvbXBhbnlOYW1lID0gZGF0YS5jb21wYW55TmFtZTtcclxuICAgICAgICAgIHRoaXMucmVwb3J0VXNlciA9IGRhdGEucmVwb3J0VXNlci50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgdGhpcy5yZXBvcnRUaW1lID0gZm9ybWF0RGF0ZShuZXcgRGF0ZSgpLCAnZGQvTU0veXl5eSBoaDptbSBhJywgJ2VuLVVTJyk7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRSZXBvcnRWYWx1ZU9yUG9zdERhdGUgPSBmb3JtYXREYXRlKGRhdGEuZGF0ZSwgJ2RkL01NL3l5eXknLCAnZW4tVVMnKTtcclxuICAgICAgICAgIGNvbnN0IERhdGVUeXBlID0gdGhpcy5kYXRlVHlwZSA9PT0gJ1ZEJyA/ICdWYWx1ZSBEYXRlJyA6ICdQb3N0aW5nIERhdGUnO1xyXG5cclxuICAgICAgICAgIHRoaXMubWV0YURhdGFPbmUgPSB7XHJcbiAgICAgICAgICAgIFtEYXRlVHlwZV06IHRoaXMuY3VycmVudFJlcG9ydFZhbHVlT3JQb3N0RGF0ZSxcclxuICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgdGhpcy5tZXRhRGF0YVR3byA9IHtcclxuICAgICAgICAgICAgJ1JlcG9ydCBVc2VyICYgVGltZSAnOiBgJHt0aGlzLnJlcG9ydFVzZXJ9IEAgJHt0aGlzLnJlcG9ydFRpbWV9YFxyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZXMuQ29tcGxldGU7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuZGF0YVJlYWR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHdpbmRvdy5hbGVydChlcnJvci5tZXNzYWdlKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9ybWF0RGF0ZVZhbHVlKHZhbHVlOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuICcnO1xyXG4gICAgcmV0dXJuIGZvcm1hdERhdGUobmV3IERhdGUodmFsdWUpLCAnZGQvTU0veXl5eScsICdlbi1VUycpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb3JtYXROdW1iZXJWYWx1ZSh2YWx1ZTogYW55LCBmaWVsZDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gJyc7XHJcbiAgICByZXR1cm4gZmllbGQgPT09ICdyYXRlJyA/IE51bWJlcih2YWx1ZSkudG9GaXhlZCg4KSA6IE51bWJlcih2YWx1ZSkudG9GaXhlZCgzKTtcclxuICB9XHJcblxyXG4gIG9uR3JpZFJlYWR5KHBhcmFtczogR3JpZFJlYWR5RXZlbnQpIHtcclxuICAgIHRoaXMuZ3JpZEFwaSA9IHBhcmFtcy5hcGk7XHJcbiAgICB0aGlzLmdyaWRDb2x1bW5BcGkgPSBwYXJhbXMuY29sdW1uQXBpO1xyXG4gIH1cclxuXHJcbiAgb25HcmlkU2l6ZUNoYW5nZWQocGFyYW1zOiBhbnkpIHtcclxuICAgIHBhcmFtcy5hcGkuc2l6ZUNvbHVtbnNUb0ZpdCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Um93SGVpZ2h0KHBhcmFtczogYW55KTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gcGFyYW1zLmRhdGE/LmRlc2NyaXB0aW9uIHx8ICcnO1xyXG4gICAgcmV0dXJuIGRlc2NyaXB0aW9uLmxlbmd0aCA+IDUwID8gNDAgOiAyMDtcclxuICB9XHJcblxyXG4gIG9uU2VhcmNoKHRleHQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3Qgbm9ybWFsaXplID0gKHN0cjogYW55KTogc3RyaW5nID0+XHJcbiAgICAgIHN0clxyXG4gICAgICAgID8udG9TdHJpbmcoKVxyXG4gICAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgLnJlcGxhY2UoLywvZywgJycpXHJcbiAgICAgICAgLnJlcGxhY2UoL1xccysvZywgJyAnKVxyXG4gICAgICAgIC5yZXBsYWNlKC9bXFx1MjAwQi1cXHUyMDBEXFx1RkVGRl0vZywgJycpXHJcbiAgICAgICAgLnRyaW0oKTtcclxuXHJcbiAgICB0aGlzLnNlYXJjaFRleHQgPSB0ZXh0O1xyXG4gICAgY29uc3Qgc2VhcmNoID0gbm9ybWFsaXplKHRoaXMuc2VhcmNoVGV4dCk7XHJcblxyXG4gICAgaWYgKHNlYXJjaCkge1xyXG4gICAgICB0aGlzLnJvd0RhdGEgPSB0aGlzLmFjY0dsRGV0YWlsc0VucXVpcnlSZXBvcnRNb2RlbC5qb3VybmFsVm91Y2hlckVudHJpZXMuZmlsdGVyKChpdGVtKSA9PlxyXG4gICAgICAgIE9iamVjdC52YWx1ZXMoaXRlbSkuc29tZSgodmFsdWUpID0+IG5vcm1hbGl6ZSh2YWx1ZSkuaW5jbHVkZXMoc2VhcmNoKSlcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucm93RGF0YSA9IHRoaXMuYWNjR2xEZXRhaWxzRW5xdWlyeVJlcG9ydE1vZGVsLmpvdXJuYWxWb3VjaGVyRW50cmllcztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZUV4cG9ydChvcHRpb246IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZEV4cG9ydE9wdGlvbiA9IG9wdGlvbjtcclxuICAgIHN3aXRjaCAodGhpcy5zZWxlY3RlZEV4cG9ydE9wdGlvbikge1xyXG4gICAgICBjYXNlICdleGNlbCc6XHJcbiAgICAgICAgdGhpcy5leHBvcnRUb0V4Y2VsKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3BkZic6XHJcbiAgICAgICAgdGhpcy5leHBvcnRUb1BkZigpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdjc3YnOlxyXG4gICAgICAgIHRoaXMuZXhwb3J0VG9Dc3YoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBhbGVydCgnUGxlYXNlIHNlbGVjdCBhbiBleHBvcnQgZm9ybWF0LicpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgZXhwb3J0VG9QZGYoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXRoaXMuYWNjR2xEZXRhaWxzRW5xdWlyeVJlcG9ydE1vZGVsLmpvdXJuYWxWb3VjaGVyRW50cmllcz8ubGVuZ3RoKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgdGl0bGUgPSBgJHt0aGlzLmNvbXBhbnlOYW1lfSAtIEdlbmVyYWwgTGVkZ2VyIEFjY291bnQgRGV0YWlscyBFbnF1aXJ5IFJlcG9ydGA7XHJcbiAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuZXhwb3J0U2VydmljZS5nZW5lcmF0ZVJlcG9ydE1ldGFkYXRhKFtcclxuICAgICAgWydSZXBvcnQgVXNlciAmIFRpbWUgOiAnLCBgJHt0aGlzLnJlcG9ydFVzZXJ9QCR7dGhpcy5yZXBvcnRUaW1lfWBdLFxyXG4gICAgXSk7XHJcblxyXG4gICAgY29uc3QgeyBoZWFkZXJzLCByb3dzIH0gPSB0aGlzLmV4cG9ydFNlcnZpY2UucHJlcGFyZUV4cG9ydFRhYmxlKHRoaXMuYWNjR2xEZXRhaWxzRW5xdWlyeVJlcG9ydE1vZGVsLmpvdXJuYWxWb3VjaGVyRW50cmllcywgdGhpcy5jb2x1bW5EZWZzLCB7XHJcbiAgICAgIGN1cnJlbmN5RmllbGRzOiBbJ2xvY2FsQ3JlZGl0JywgJ2ZvcmV4Q3JlZGl0JywgJ2xvY2FsRGViaXQnLCAnZm9yZXhEZWJpdCddLFxyXG4gICAgfSk7XHJcblxyXG4gICAgYXdhaXQgdGhpcy5leHBvcnRTZXJ2aWNlLmV4cG9ydFRvUGRmVW5pdmVyc2FsKHRpdGxlLCBtZXRhZGF0YSwgdGhpcy5zZWFyY2hDcml0ZXJpYSwgaGVhZGVycywgcm93cywgJ0FDQy1HTC1EZXRhaWxzLUVucXVpcnktUmVwb3J0LnBkZicpO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0VG9FeGNlbCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5hY2NHbERldGFpbHNFbnF1aXJ5UmVwb3J0TW9kZWwuam91cm5hbFZvdWNoZXJFbnRyaWVzPy5sZW5ndGgpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCB0aXRsZSA9IGAke3RoaXMuY29tcGFueU5hbWV9IC0gR2VuZXJhbCBMZWRnZXIgQWNjb3VudCBEZXRhaWxzIEVucXVpcnkgUmVwb3J0YDtcclxuICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5leHBvcnRTZXJ2aWNlLmdlbmVyYXRlUmVwb3J0TWV0YWRhdGEoW1xyXG4gICAgICBbJ1JlcG9ydCBVc2VyICYgVGltZSA6ICcsIGAke3RoaXMucmVwb3J0VXNlcn1AJHt0aGlzLnJlcG9ydFRpbWV9YF0sXHJcbiAgICBdKTtcclxuXHJcbiAgICBjb25zdCB7IGhlYWRlcnMsIHJvd3MgfSA9IHRoaXMuZXhwb3J0U2VydmljZS5wcmVwYXJlRXhwb3J0VGFibGUodGhpcy5hY2NHbERldGFpbHNFbnF1aXJ5UmVwb3J0TW9kZWwuam91cm5hbFZvdWNoZXJFbnRyaWVzLCB0aGlzLmNvbHVtbkRlZnMsIHtcclxuICAgICAgY3VycmVuY3lGaWVsZHM6IFsnbG9jYWxDcmVkaXQnLCAnZm9yZXhDcmVkaXQnLCAnbG9jYWxEZWJpdCcsICdmb3JleERlYml0J10sXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmV4cG9ydFNlcnZpY2UuZXhwb3J0VG9FeGNlbFVuaXZlcnNhbCh0aXRsZSwgbWV0YWRhdGEsIHRoaXMuc2VhcmNoQ3JpdGVyaWEsIGhlYWRlcnMsIHJvd3MsICdBQ0MtR0wtRGV0YWlscy1FbnF1aXJ5LVJlcG9ydC54bHN4Jyk7XHJcbiAgfVxyXG5cclxuICBleHBvcnRUb0NzdigpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5hY2NHbERldGFpbHNFbnF1aXJ5UmVwb3J0TW9kZWwuam91cm5hbFZvdWNoZXJFbnRyaWVzPy5sZW5ndGgpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCB0aXRsZSA9IGAke3RoaXMuY29tcGFueU5hbWV9IC0gR2VuZXJhbCBMZWRnZXIgQWNjb3VudCBEZXRhaWxzIEVucXVpcnkgUmVwb3J0YDtcclxuICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5leHBvcnRTZXJ2aWNlLmdlbmVyYXRlUmVwb3J0TWV0YWRhdGEoW1xyXG4gICAgICBbJ1JlcG9ydCBVc2VyICYgVGltZSA6ICcsIGAke3RoaXMucmVwb3J0VXNlcn1AJHt0aGlzLnJlcG9ydFRpbWV9YF0sXHJcbiAgICBdKTtcclxuXHJcbiAgICBjb25zdCB7IGhlYWRlcnMsIHJvd3MgfSA9IHRoaXMuZXhwb3J0U2VydmljZS5wcmVwYXJlRXhwb3J0VGFibGUodGhpcy5hY2NHbERldGFpbHNFbnF1aXJ5UmVwb3J0TW9kZWwuam91cm5hbFZvdWNoZXJFbnRyaWVzLCB0aGlzLmNvbHVtbkRlZnMsIHtcclxuICAgICAgY3VycmVuY3lGaWVsZHM6IFsnbG9jYWxDcmVkaXQnLCAnZm9yZXhDcmVkaXQnLCAnbG9jYWxEZWJpdCcsICdmb3JleERlYml0J10sXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmV4cG9ydFNlcnZpY2UuZXhwb3J0VG9Dc3ZVbml2ZXJzYWwodGl0bGUsIG1ldGFkYXRhLCB0aGlzLnNlYXJjaENyaXRlcmlhLCBoZWFkZXJzLCByb3dzLCAnQUNDLUdMLURldGFpbHMtRW5xdWlyeS1SZXBvcnQuY3N2Jyk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVTZWFyY2goY3JpdGVyaWE6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5kYXRlVHlwZUZpbHRlciA9IGNyaXRlcmlhLnNlbGVjdGVkRGF0ZVR5cGU7XHJcbiAgICB0aGlzLmRhdGUgPSBjcml0ZXJpYS5zZWxlY3RlZERhdGUuc3BsaXQoJ1QnKVswXTtcclxuICAgIHRoaXMuc2VhcmNoQ3JpdGVyaWEgPSBbXHJcbiAgICAgIFsnRGF0ZSBUeXBlOicsIGAke3RoaXMuZGF0ZVR5cGVGaWx0ZXIgPT09IDEgPyAnVmFsdWUgRGF0ZScgOiAnUG9zdGluZyBEYXRlJ31gXSxcclxuICAgICAgWydEYXRlOicsIGZvcm1hdERhdGUodGhpcy5kYXRlLCAnZGQvTU0veXl5eScsICdlbi1VUycpXSxcclxuICAgIF07XHJcbiAgICB0aGlzLmdldEFjY0dMRGV0YWlsc1JlcG9ydCgpO1xyXG4gIH1cclxufVxyXG4iLCI8bGliLXNlYXJjaC1maWx0ZXIgW1JlcG9ydE5hbWVdPVwiUmVwb3J0TmFtZVwiIChzZWFyY2hDbGlja2VkKT1cImhhbmRsZVNlYXJjaCgkZXZlbnQpXCI+XHJcbjwvbGliLXNlYXJjaC1maWx0ZXI+XHJcbjxhcHAtbG9hZGVyIGNsYXNzPVwiXCIgKm5nSWY9XCJsb2FkaW5nU3RhdGUgPT0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkxvYWRpbmdcIj48L2FwcC1sb2FkZXI+XHJcbjxkaXYgY2xhc3M9XCJtYWluLWNvbnRhaW5lclwiPlxyXG4gIDxkaXYgY2xhc3M9XCJyZXBvcnQtY29udGFpbmVyXCJcclxuICAgICpuZ0lmPVwiYWNjR2xEZXRhaWxzRW5xdWlyeVJlcG9ydE1vZGVsICE9IHVuZGVmaW5lZCAmJiBkYXRhUmVhZHkgJiYgYWNjR2xEZXRhaWxzRW5xdWlyeVJlcG9ydE1vZGVsPy5qb3VybmFsVm91Y2hlckVudHJpZXM/Lmxlbmd0aCE9MFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1haW4tcmVwb3J0XCIgKm5nSWY9XCJhY2NHbERldGFpbHNFbnF1aXJ5UmVwb3J0TW9kZWwgIT0gdW5kZWZpbmVkICYmIGRhdGFSZWFkeVwiPlxyXG4gICAgICA8bGliLW1ldGFkYXRhIFtyZXBvcnROYW1lXT1cIlJlcG9ydE5hbWVcIiBbc2hvd21ldGFEYXRhT25lXT1cInRydWVcIiBbc2hvd21ldGFEYXRhVHdvXT1cInRydWVcIlxyXG4gICAgICAgIFttZXRhRGF0YU9uZV09XCJtZXRhRGF0YU9uZVwiIFttZXRhRGF0YVR3b109XCJtZXRhRGF0YVR3b1wiIChleHBvcnRFdmVudCk9XCJoYW5kbGVFeHBvcnQoJGV2ZW50KVwiXHJcbiAgICAgICAgKHNlYXJjaEV2ZW50KT1cIm9uU2VhcmNoKCRldmVudClcIj48L2xpYi1tZXRhZGF0YT5cclxuICAgICAgPGRpdiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTtcIj5cclxuICAgICAgICA8bGliLXBhZ2Utc2l6ZS1zZWxlY3RvciBbdG90YWxFbnRyaWVzXT1cImFjY0dsRGV0YWlsc0VucXVpcnlSZXBvcnRNb2RlbD8uam91cm5hbFZvdWNoZXJFbnRyaWVzPy5sZW5ndGhcIlxyXG4gICAgICAgICAgW2RlZmF1bHRTaXplXT1cIicxNSdcIiBbZ3JpZEFwaV09XCJncmlkQXBpXCI+XHJcbiAgICAgICAgICA+PC9saWItcGFnZS1zaXplLXNlbGVjdG9yPlxyXG4gICAgICAgIDxhZy1ncmlkLWFuZ3VsYXIgY2xhc3M9XCJhZy10aGVtZS1hbHBpbmUgdHJhbnNhY3Rpb24tZ3JpZFwiIHN0eWxlPVwid2lkdGg6IDEwMCU7aGVpZ2h0OiAzNzVweDtcIlxyXG4gICAgICAgICAgW2NvbHVtbkRlZnNdPVwiY29sdW1uRGVmc1wiIFtkZWZhdWx0Q29sRGVmXT1cImRlZmF1bHRDb2xEZWZcIiBbcm93RGF0YV09XCJyb3dEYXRhXCIgW3Jvd0hlaWdodF09XCIyMFwiXHJcbiAgICAgICAgICBbaGVhZGVySGVpZ2h0XT1cIjIyXCIgW3BhZ2luYXRpb25dPVwidHJ1ZVwiIFtwYWdpbmF0aW9uUGFnZVNpemVdPVwicGFnZVNpemVcIiAoZ3JpZFJlYWR5KT1cIm9uR3JpZFJlYWR5KCRldmVudClcIlxyXG4gICAgICAgICAgKGdyaWRTaXplQ2hhbmdlZCk9XCJvbkdyaWRTaXplQ2hhbmdlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgPC9hZy1ncmlkLWFuZ3VsYXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC13YXJuaW5nIG10LTNcIiAqbmdJZj1cImFjY0dsRGV0YWlsc0VucXVpcnlSZXBvcnRNb2RlbD8uam91cm5hbFZvdWNoZXJFbnRyaWVzPy5sZW5ndGg9PTBcIj5cclxuICAgIE5vIERhdGEgZm91bmQgbWF0Y2hpbmcgeW91ciBzZWFyY2ggY3JpdGVyaWEuXHJcbiAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==