@posiwise/smart-crm 0.0.31 → 0.0.32

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 (73) hide show
  1. package/esm2022/lib/private/components/smart-crm-accounts/smart-crm-account-details/smart-crm-account-details.component.mjs +1 -1
  2. package/esm2022/lib/private/components/smart-crm-accounts/smart-crm-account-files/smart-crm-account-files.component.mjs +2 -3
  3. package/esm2022/lib/private/components/smart-crm-accounts/smart-crm-account-info/smart-crm-account-info.component.mjs +9 -11
  4. package/esm2022/lib/private/components/smart-crm-accounts/smart-crm-account-invoices/smart-crm-account-invoices.component.mjs +1 -1
  5. package/esm2022/lib/private/components/smart-crm-accounts/smart-crm-accounts.component.mjs +15 -5
  6. package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-actions/smart-crm-actions-details/smart-crm-actions-details.component.mjs +1 -1
  7. package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-actions/smart-crm-actions.component.mjs +1 -1
  8. package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories-details/smart-crm-opportunity-categories-details.component.mjs +1 -1
  9. package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories.component.mjs +1 -1
  10. package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-source/smart-crm-source-details/smart-crm-source-details.component.mjs +1 -1
  11. package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-source/smart-crm-source.component.mjs +1 -1
  12. package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-stages/smart-crm-stage-details/smart-crm-stage-details.component.mjs +1 -1
  13. package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-stages/smart-crm-stages.component.mjs +1 -1
  14. package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-widgets/smart-crm-widgets-details/smart-crm-widgets-details.component.mjs +1 -1
  15. package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-widgets/smart-crm-widgets.component.mjs +1 -1
  16. package/esm2022/lib/private/components/smart-crm-contacts/smart-crm-contact-details/smart-crm-contact-details.component.mjs +1 -1
  17. package/esm2022/lib/private/components/smart-crm-contacts/smart-crm-contact-info/smart-crm-contact-info.component.mjs +11 -12
  18. package/esm2022/lib/private/components/smart-crm-contacts/smart-crm-contacts.component.mjs +4 -4
  19. package/esm2022/lib/private/components/smart-crm-insight/smart-crm-overview/smart-crm-overview.component.mjs +1 -1
  20. package/esm2022/lib/private/components/smart-crm-leads/smart-crm-leads-details/smart-crm-leads-details.component.mjs +3 -3
  21. package/esm2022/lib/private/components/smart-crm-leads/smart-crm-leads.component.mjs +1 -1
  22. package/esm2022/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-contacts/smart-crm-marketing-contacts.component.mjs +1 -1
  23. package/esm2022/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-details/smart-crm-marketing-details.component.mjs +3 -7
  24. package/esm2022/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-list.component.mjs +1 -1
  25. package/esm2022/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-view-details/smart-crm-marketing-view-details.component.mjs +2 -2
  26. package/esm2022/lib/private/components/smart-crm-opportunities/smart-crm-board/smart-crm-board.component.mjs +2 -2
  27. package/esm2022/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-details/smart-crm-opportunities-details.component.mjs +4 -2
  28. package/esm2022/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-info/smart-crm-opportunities-info.component.mjs +8 -9
  29. package/esm2022/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-list.component.mjs +1 -1
  30. package/esm2022/lib/private/components/smart-crm-summary/smart-crm-summary-actions/smart-crm-summary-actions.component.mjs +6 -6
  31. package/esm2022/lib/private/components/smart-crm-summary/smart-crm-summary-others/smart-crm-summary-others.component.mjs +9 -9
  32. package/esm2022/lib/public/components/smart-crm-newsletter-confirmation/smart-crm-newsletter-confirmation.component.mjs +1 -1
  33. package/esm2022/lib/public/components/smart-crm-newsletter-unsubscribe/smart-crm-newsletter-unsubscribe.component.mjs +1 -1
  34. package/esm2022/lib/public/components/smart-crm-signup/smart-crm-signup.component.mjs +1 -1
  35. package/esm2022/lib/shared/interface/smart-crm-module.interface.mjs +1 -1
  36. package/fesm2022/posiwise-smart-crm.mjs +60 -52
  37. package/fesm2022/posiwise-smart-crm.mjs.map +1 -1
  38. package/lib/private/components/smart-crm-accounts/smart-crm-account-details/smart-crm-account-details.component.d.ts +4 -4
  39. package/lib/private/components/smart-crm-accounts/smart-crm-account-files/smart-crm-account-files.component.d.ts +4 -4
  40. package/lib/private/components/smart-crm-accounts/smart-crm-account-info/smart-crm-account-info.component.d.ts +10 -11
  41. package/lib/private/components/smart-crm-accounts/smart-crm-account-invoices/smart-crm-account-invoices.component.d.ts +2 -2
  42. package/lib/private/components/smart-crm-accounts/smart-crm-accounts.component.d.ts +4 -4
  43. package/lib/private/components/smart-crm-configuration/smart-crm-actions/smart-crm-actions-details/smart-crm-actions-details.component.d.ts +1 -1
  44. package/lib/private/components/smart-crm-configuration/smart-crm-actions/smart-crm-actions.component.d.ts +2 -2
  45. package/lib/private/components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories-details/smart-crm-opportunity-categories-details.component.d.ts +1 -1
  46. package/lib/private/components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories.component.d.ts +3 -4
  47. package/lib/private/components/smart-crm-configuration/smart-crm-source/smart-crm-source-details/smart-crm-source-details.component.d.ts +1 -1
  48. package/lib/private/components/smart-crm-configuration/smart-crm-source/smart-crm-source.component.d.ts +2 -2
  49. package/lib/private/components/smart-crm-configuration/smart-crm-stages/smart-crm-stage-details/smart-crm-stage-details.component.d.ts +1 -1
  50. package/lib/private/components/smart-crm-configuration/smart-crm-stages/smart-crm-stages.component.d.ts +2 -2
  51. package/lib/private/components/smart-crm-configuration/smart-crm-widgets/smart-crm-widgets-details/smart-crm-widgets-details.component.d.ts +1 -1
  52. package/lib/private/components/smart-crm-configuration/smart-crm-widgets/smart-crm-widgets.component.d.ts +2 -2
  53. package/lib/private/components/smart-crm-contacts/smart-crm-contact-details/smart-crm-contact-details.component.d.ts +3 -3
  54. package/lib/private/components/smart-crm-contacts/smart-crm-contact-info/smart-crm-contact-info.component.d.ts +5 -5
  55. package/lib/private/components/smart-crm-contacts/smart-crm-contacts.component.d.ts +2 -2
  56. package/lib/private/components/smart-crm-insight/smart-crm-overview/smart-crm-overview.component.d.ts +1 -1
  57. package/lib/private/components/smart-crm-leads/smart-crm-leads-details/smart-crm-leads-details.component.d.ts +1 -1
  58. package/lib/private/components/smart-crm-leads/smart-crm-leads.component.d.ts +2 -2
  59. package/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-contacts/smart-crm-marketing-contacts.component.d.ts +2 -2
  60. package/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-details/smart-crm-marketing-details.component.d.ts +2 -2
  61. package/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-list.component.d.ts +3 -5
  62. package/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-view-details/smart-crm-marketing-view-details.component.d.ts +2 -2
  63. package/lib/private/components/smart-crm-opportunities/smart-crm-board/smart-crm-board.component.d.ts +2 -2
  64. package/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-details/smart-crm-opportunities-details.component.d.ts +1 -1
  65. package/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-info/smart-crm-opportunities-info.component.d.ts +5 -5
  66. package/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-list.component.d.ts +4 -4
  67. package/lib/private/components/smart-crm-summary/smart-crm-summary-actions/smart-crm-summary-actions.component.d.ts +2 -2
  68. package/lib/private/components/smart-crm-summary/smart-crm-summary-others/smart-crm-summary-others.component.d.ts +4 -4
  69. package/lib/public/components/smart-crm-newsletter-confirmation/smart-crm-newsletter-confirmation.component.d.ts +2 -2
  70. package/lib/public/components/smart-crm-newsletter-unsubscribe/smart-crm-newsletter-unsubscribe.component.d.ts +2 -2
  71. package/lib/public/components/smart-crm-signup/smart-crm-signup.component.d.ts +1 -1
  72. package/lib/shared/interface/smart-crm-module.interface.d.ts +0 -12
  73. package/package.json +1 -1
@@ -115,7 +115,7 @@ export class SmartCrmBoardComponent extends AppBaseComponent {
115
115
  if (val !== undefined && val !== 0) {
116
116
  this.stages = this.stages.filter(stage => stage.crm_opportunity_category_ids.includes(val));
117
117
  }
118
- this.stages = this.stages.sort((a, b) => (a.id > b.id ? 1 : b.id > a.id ? -1 : 0));
118
+ this.stages = this.stages.toSorted((a, b) => a.id - b.id);
119
119
  const temp = this.treefy(this.stages);
120
120
  this.stages = this.flatten(temp);
121
121
  this.stages.forEach(stage => {
@@ -230,4 +230,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
230
230
  type: Component,
231
231
  args: [{ selector: 'pw-smart-crm-board', template: "<div class=\"w-100 text-center mt-3\">\n <ng-template [ngIf]=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"></p-progressSpinner>\n </ng-template>\n</div>\n\n<div class=\"row mb-4\" *ngIf=\"isLoaded\">\n <div class=\"col-12 col-sm-4\">\n <select class=\"form-select\" (change)=\"onChangeCategory($event.target.value)\">\n <option *ngFor=\"let option of categories\" [value]=\"option.id\">{{ option.name }}</option>\n </select>\n </div>\n <div class=\"col-12 col-sm-8 mt-2 mt-sm-0 mb-3\">\n <a class=\"btn btn-sm btn-outline-primary float-end\" data-cy=\"add-opportunities\" [routerLink]=\"['/' + subscription?.slug + routers.opportunityAdd]\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i>\n {{ 'Crm.OpportunitiesMessage.AddOpportunity' | transloco }}\n </a>\n </div>\n</div>\n<div *ngIf=\"isLoaded && !hasStages()\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.StageMessages.NoStageCategoryMessage' | transloco\">\n </pw-no-data>\n</div>\n<div *ngIf=\"isLoaded && hasStages()\" class=\"list-container d-flex\" cdkDropList [cdkDropListData]=\"opportunitiesGroup\" (cdkDropListDropped)=\"dropGroup($event)\">\n <div cdkDropListGroup class=\"opportunities-container main-div crm-board-primary\" [class.dynamic-columns-wrapper]=\"group.stage.collapsed\" [style.--border-color]=\"group.stage.color_code\" *ngFor=\"let group of opportunitiesGroup; let i = index\" cdkDrag [cdkDragData]=\"group\">\n <div class=\"opportunities-board-title d-flex align-items-center py-1\">\n <span class=\"collapse-column-toggle\">\n <i class=\"fas\" [ngClass]=\"{'fa-angle-right': !group.stage.collapsed, 'fa-angle-down': group.stage.collapsed}\" (keydown.enter)=\"toggleColumn($event, group)\" (click)=\"toggleColumn($event, group)\" aria-hidden=\"true\"></i>\n </span>\n <p class=\"stage-name mb-0 py-2 ps-4\">\n <span class=\"badge rounded-pill text-white px-3\" [style.--background-color]=\"group.stage.color_code\">{{ group.stage.name }}</span>\n </p>\n <span class=\"ms-auto me-4 add-opportunity-icon\">\n <a class=\"text-secondary\" aria-label=\"Add Opportunity\" [routerLink]=\"['/' + subscription?.slug + routers.opportunityAdd]\" [queryParams]=\"{ stage_id: group?.stage?.id, category: group.stage.crm_opportunity_category_ids }\"><i class=\"fa fa-plus-square\" aria-hidden=\"true\"></i></a>\n </span>\n </div>\n <div class=\"opportunities-list items-container\" cdkDropList [id]=\"group.stage.name\" [cdkDropListData]=\"group.opportunities\" (cdkDropListDropped)=\"dropItem($event)\" [cdkDropListConnectedTo]=\"getConnectedList()\" (scroll)=\"onColumnScroll(i)\">\n <div *ngFor=\"let item of group.opportunities; let idx = index\">\n <div class=\"opportunities-box mb-3\" cdkDrag [cdkDragData]=\"item\">\n <span ngbTooltip=\"Edit\" class=\"float-end edit-button\" [routerLink]=\"['/' + subscription?.slug + routers.opportunities, item.id]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </span>\n <p class=\"fw-bold mb-1\">{{ item.title }}</p>\n <a class=\"mb-1\" [routerLink]=\"['/' + subscription?.slug + routers.accountInfo, item?.crm_account_id ]\">{{ item?.crm_account?.name }}</a>\n <p class=\"mb-1\">{{ (item?.one_time_amount / 100 | currency) }} One-time / {{ (item?.monthly_amount / 100 | currency) }} MRR</p>\n <a *ngIf=\"item?.owner[0]?.user_avatar\" [routerLink]=\"['/members', item?.owner[0]?.slug]\">\n <img alt=\"Member Logo\" [src]=\"item?.owner[0]?.user_avatar[0]?.url\" [width]=\"'30'\" class=\"squared_logo float-end\" [height]=\"'30'\" (error)=\"handleImageError($event, 'assets/img/icons/male.png')\" />\n </a>\n <p class=\"mb-1\">{{ item.starting_at | dateFormat }}</p>\n <p class=\"mb-1 badge bg-warning\">{{ item?.crm_opportunity_stage?.name }}</p>\n </div>\n <div class=\"w-100 text-center mt-3\" *ngIf=\"(idx + 1) % 5 === 0 && group.isLoadingMore\">\n <div class=\"custom-loader\">\n <p-progressSpinner strokeWidth=\"2\"></p-progressSpinner>\n <div class=\"loading-text\">Loading opportunities...</div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"footer footer-list\">\n <div class=\"footer-item\">\n <span class=\"footer-label\">Total One-Time:</span>\n <span class=\"footer-value\">{{ group.totals.oneTime / 100 | currency }}</span>\n </div>\n <div class=\"footer-item\">\n <span class=\"footer-label\">Total MRR:</span>\n <span class=\"footer-value\">{{ group.totals.mrr / 100 | currency }}</span>\n </div>\n <div class=\"footer-item\">\n <span class=\"footer-label\">Total Count:</span>\n <span class=\"footer-value\">{{ group.totals.count }}</span>\n </div>\n </div>\n </div>\n</div>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.card{box-shadow:2px 3px gray;padding-bottom:0}.main-div{border:1px solid rgb(175,175,175);border-radius:5px;margin-right:10px}.opportunities-board-title{background-color:#fafafa}.opportunities-board-title h4{color:#fff}.edit-button{cursor:pointer}.items-container{height:500px;overflow-y:scroll}.list-container{overflow:auto;width:100%}.opportunities-container{display:inline-block;margin:0 13px 13px 0;max-width:300px;min-width:300px;vertical-align:top}.opportunities-list{background:#fff;border:solid 1px rgb(204,204,204);display:block;min-height:450px}.footer-list{background:#fff;border:solid 1px rgb(204,204,204);display:block;min-height:10px}.opportunities-box{align-items:center;background:#fff;border:solid 1px rgb(204,204,204);box-sizing:border-box;color:#000000de;cursor:move;display:block;flex-direction:row;font-size:14px;justify-content:space-between;margin:5px;padding:10px 20px}.cdk-drag-preview{border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f;box-sizing:border-box}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.opportunities-list.cdk-drop-list-dragging .opportunities-box:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.footer-list.cdk-drop-list-dragging .opportunities-box:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.add-opportunity-icon{color:#fff;font-size:16px}.collapse-column-toggle{background:#e6dfdf;border-radius:2px;cursor:pointer;font-size:16px;margin-left:10px}.collapse-column-toggle i{padding:0 8px}.dynamic-columns-wrapper{min-width:50px;width:50px!important}.dynamic-columns-wrapper .opportunities-list,.dynamic-columns-wrapper .footer-list{display:none}.dynamic-columns-wrapper .opportunities-board-title{flex-direction:column;height:100%;min-height:450px}.dynamic-columns-wrapper .opportunities-board-title .collapse-column-toggle{margin-left:0}.dynamic-columns-wrapper .opportunities-board-title .stage-name{padding-left:0!important;writing-mode:vertical-lr}.dynamic-columns-wrapper .opportunities-board-title .stage-name .badge{padding:8px 4px!important}.dynamic-columns-wrapper .opportunities-board-title .add-opportunity-icon{margin:0 auto!important}.crm-board-success{border-top:3px solid rgb(69,210,146)}.crm-board-success .stage-name .badge{background-color:#45d292}.crm-board-info{border-top:3px solid rgb(28,188,216)}.crm-board-info .stage-name .badge{background-color:#1cbcd8}.crm-board-danger{border-top:3px solid rgb(255,88,107)}.crm-board-danger .stage-name .badge{background-color:#ff586b}.crm-board-warning{border-top:3px solid rgb(251,171,0)}.crm-board-warning .stage-name .badge{background-color:#fbab00}.footer{background-color:#f8f9fa;padding:10px;display:flex;justify-content:space-between;flex-direction:row;align-items:center;border-radius:8px}.footer-item{display:flex;flex-direction:column;align-items:center}.footer-label{font-weight:700;color:#6c757d}.footer-value{color:#212529;font-size:1.1em}.crm-board-primary{border-top:3px solid var(--border-color, var(--tabs_bg))}.crm-board-primary .stage-name .badge{background-color:var(--background-color, var(--tabs_bg))}\n"] }]
232
232
  }], ctorParameters: () => [{ type: i1.CrmService }, { type: i0.Injector }] });
233
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtY3JtLWJvYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc21hcnQtY3JtL3NyYy9saWIvcHJpdmF0ZS9jb21wb25lbnRzL3NtYXJ0LWNybS1vcHBvcnR1bml0aWVzL3NtYXJ0LWNybS1ib2FyZC9zbWFydC1jcm0tYm9hcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zbWFydC1jcm0vc3JjL2xpYi9wcml2YXRlL2NvbXBvbmVudHMvc21hcnQtY3JtLW9wcG9ydHVuaXRpZXMvc21hcnQtY3JtLWJvYXJkL3NtYXJ0LWNybS1ib2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUFlLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFaEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7Ozs7O0FBT3pELE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxnQkFBZ0I7SUFnQnhELFlBQ1ksVUFBc0IsRUFDOUIsUUFBa0I7UUFFbEIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBSFIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQWJsQyx1QkFBa0IsR0FBRyxFQUFFLENBQUM7UUFFeEIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ1IsMkJBQXNCLEdBQUcsRUFBRSxD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LENBQUM7SUFFRCxTQUFTLENBQUMsS0FBNEI7UUFDbEMsZUFBZSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQUssRUFBRSxLQUFLO1FBQ3JCLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFDNUQsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsV0FBVyxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDNUUsSUFBSSxDQUFDLFVBQVU7YUFDVixTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDL0MsU0FBUyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxTQUFTO1NBQ3JDLENBQUM7YUFDRCxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELFNBQVM7UUFDTCxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQy9CLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUMvRCxDQUFDO0lBQ04sQ0FBQztJQUVRLFdBQVc7UUFDaEIsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3hCLENBQUM7K0dBalFRLHNCQUFzQjttR0FBdEIsc0JBQXNCLGlGQ2ZuQywyekpBMkVBOzs0RkQ1RGEsc0JBQXNCO2tCQUxsQyxTQUFTOytCQUNJLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0b3IsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDZGtEcmFnRHJvcCwgbW92ZUl0ZW1JbkFycmF5LCB0cmFuc2ZlckFycmF5SXRlbSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgUk9VVEVSUyB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9yb3V0ZXJzL3JvdXRlcnMnO1xuaW1wb3J0IHsgQ3JtU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9zbWFydC1jcm0tc2hhcmVkJztcbmltcG9ydCB7IENybU9wcG9ydHVuaXR5IH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2ludGVyZmFjZS9jcm0tb3Bwb3J0dW5pdHkuaW50ZXJmYWNlJztcbmltcG9ydCB7IENybVN0YWdlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2ludGVyZmFjZS9jcm0tc3RhZ2VzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHBvc2l3aXNlL2FwcC1iYXNlLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXV0aWxpdGllcyc7XG5pbXBvcnQgeyBIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2hlbHBlci1zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwdy1zbWFydC1jcm0tYm9hcmQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zbWFydC1jcm0tYm9hcmQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3NtYXJ0LWNybS1ib2FyZC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFNtYXJ0Q3JtQm9hcmRDb21wb25lbnQgZXh0ZW5kcyBBcHBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgZHJhZ2dlZE9wcG9ydHVuaXR5OiBDcm1PcHBvcnR1bml0eTtcbiAgICBzdGFnZXM6IENybVN0YWdlW107XG4gICAgYWxsT3Bwb3J0dW5pdGllczogQ3JtT3Bwb3J0dW5pdHlbXTtcbiAgICBvcHBvcnR1bml0aWVzR3JvdXAgPSBbXTtcbiAgICBwcml2YXRlIGNoYW5nZWRTdGFnZTogbnVtYmVyIHwgc3RyaW5nO1xuICAgIGlzTG9hZGVkID0gZmFsc2U7XG4gICAgY2F0ZWdvcmllcyA9IFtdO1xuICAgIHByaXZhdGUgYXZhaWxhYmxlT3Bwb3J0dW5pdGllcyA9IFtdO1xuICAgIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICAgIHRvdGFsQ291bnQ6IG51bWJlcjtcbiAgICByb3V0ZXJzID0gUk9VVEVSUztcbiAgICBtYXN0ZXJTdGFnZXM6IENybVN0YWdlW10gPSBbXTtcbiAgICBzZWxlY3RlZENhdGVnb3J5SWQgPSAwO1xuICAgIHByaXZhdGUgcGFnZVNpemUgPSA1OyAvLyBTaG93IDUgY2FyZHMgaW5pdGlhbGx5XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBjcm1TZXJ2aWNlOiBDcm1TZXJ2aWNlLFxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3JcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmdldFVzZXJTdWJzY3JpcHRpb24oKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSByZXNwb25zZTtcbiAgICAgICAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbj8uaWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldEFsbE9wcG9ydHVuaXR5Q2F0ZWdvcmllcygpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0U3RhZ2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0QWxsT3Bwb3J0dW5pdHlDYXRlZ29yaWVzKCkge1xuICAgICAgICB0aGlzLmNybVNlcnZpY2UuZ2V0QWxsT3Bwb3J0dW5pdHlDYXRlZ29yaWVzKHRoaXMuc3Vic2NyaXB0aW9uPy5pZCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2F0ZWdvcmllcyA9IHJlc3BvbnNlPy5jcm1fb3Bwb3J0dW5pdHlfY2F0ZWdvcmllcyB8fCBbXTtcbiAgICAgICAgICAgIGlmICh0aGlzLmNhdGVnb3JpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDYXRlZ29yeUlkID0gdGhpcy5jYXRlZ29yaWVzWzBdLmlkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFN0YWdlcygpIHtcbiAgICAgICAgdGhpcy5jcm1TZXJ2aWNlLmdldEF2YWlsYWJsZU9wcG9ydHVuaXR5U3RhZ2VzKHRoaXMuc3Vic2NyaXB0aW9uPy5pZCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3RhZ2VzID0gcmVzcG9uc2UuYXZhaWxhYmxlX2NybV9vcHBvcnR1bml0eV9zdGFnZXM7XG4gICAgICAgICAgICB0aGlzLm1hc3RlclN0YWdlcyA9IHJlc3BvbnNlLmF2YWlsYWJsZV9jcm1fb3Bwb3J0dW5pdHlfc3RhZ2VzO1xuICAgICAgICAgICAgdGhpcy5nZXRBbGxPcHBvcnR1bml0aWVzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0QWxsT3Bwb3J0dW5pdGllcygpIHtcbiAgICAgICAgdGhpcy5jcm1TZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0QWxsT3Bwb3J0dW5pdGllcyh0aGlzLnN1YnNjcmlwdGlvbj8uaWQpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFsbE9wcG9ydHVuaXRpZXMgPSByZXNwb25zZT8uY3JtX29wcG9ydHVuaXRpZXMgfHwgW107XG4gICAgICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVPcHBvcnR1bml0aWVzID0gcmVzcG9uc2U/LmNybV9vcHBvcnR1bml0aWVzIHx8IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMudG90YWxDb3VudCA9IHRoaXMuYWxsT3Bwb3J0dW5pdGllcz8ubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDYXRlZ29yeUlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWxsT3Bwb3J0dW5pdGllcyA9IHRoaXMuYXZhaWxhYmxlT3Bwb3J0dW5pdGllcy5maWx0ZXIob3Bwb3J0dW5pdHkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIG9wcG9ydHVuaXR5Py5jcm1fb3Bwb3J0dW5pdHlfY2F0ZWdvcnlfaWRzPy5pbmNsdWRlcyh0aGlzLnNlbGVjdGVkQ2F0ZWdvcnlJZClcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b3RhbENvdW50ID0gdGhpcy5hbGxPcHBvcnR1bml0aWVzPy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5vcHBvcnR1bml0aWVzR3JvdXBzKHRoaXMuc2VsZWN0ZWRDYXRlZ29yeUlkIHx8IG51bGwpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hZGQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0cmVlZnkobGlzdCkge1xuICAgICAgICBjb25zdCBpZEF0dHIgPSAnaWQnO1xuICAgICAgICBjb25zdCBwYXJlbnRBdHRyID0gJ3ByZXZpb3VzX3N0YWdlX2lkJztcbiAgICAgICAgY29uc3QgY2hpbGRyZW5BdHRyID0gJ2NoaWxkcmVuJztcblxuICAgICAgICBjb25zdCB0cmVlTGlzdCA9IFtdO1xuICAgICAgICBjb25zdCBsb29rdXAgPSB7fTtcbiAgICAgICAgbGlzdC5mb3JFYWNoKG9iaiA9PiB7XG4gICAgICAgICAgICBsb29rdXBbb2JqW2lkQXR0cl1dID0gb2JqO1xuICAgICAgICAgICAgb2JqW2NoaWxkcmVuQXR0cl0gPSBbXTtcbiAgICAgICAgfSk7XG4gICAgICAgIGxpc3QuZm9yRWFjaChvYmogPT4ge1xuICAgICAgICAgICAgaWYgKG9ialtwYXJlbnRBdHRyXSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChsb29rdXBbb2JqW3BhcmVudEF0dHJdXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvb2t1cFtvYmpbcGFyZW50QXR0cl1dW2NoaWxkcmVuQXR0cl0ucHVzaChvYmopO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRyZWVMaXN0LnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRyZWVMaXN0LnB1c2gob2JqKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRyZWVMaXN0O1xuICAgIH1cblxuICAgIHByaXZhdGUgZmxhdHRlbihhcnIpIHtcbiAgICAgICAgcmV0dXJuIGFyci5yZWR1Y2UoKHJlc3VsdCwgY3VycmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnQuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZmxhdHRlbihjdXJyZW50LmNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgY3VycmVudC5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChjdXJyZW50KTtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCguLi5jaGlsZHJlbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGN1cnJlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSwgW10pO1xuICAgIH1cblxuICAgIHByaXZhdGUgb3Bwb3J0dW5pdGllc0dyb3Vwcyh2YWw/OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5vcHBvcnR1bml0aWVzR3JvdXAgPSBbXTtcbiAgICAgICAgdGhpcy5zdGFnZXMgPSB0aGlzLm1hc3RlclN0YWdlcztcbiAgICAgICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkICYmIHZhbCAhPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5zdGFnZXMgPSB0aGlzLnN0YWdlcy5maWx0ZXIoc3RhZ2UgPT5cbiAgICAgICAgICAgICAgICBzdGFnZS5jcm1fb3Bwb3J0dW5pdHlfY2F0ZWdvcnlfaWRzLmluY2x1ZGVzKHZhbClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGFnZXMgPSB0aGlzLnN0YWdlcy5zb3J0KChhLCBiKSA9PiAoYS5pZCA+IGIuaWQgPyAxIDogYi5pZCA+IGEuaWQgPyAtMSA6IDApKTtcbiAgICAgICAgY29uc3QgdGVtcCA9IHRoaXMudHJlZWZ5KHRoaXMuc3RhZ2VzKTtcbiAgICAgICAgdGhpcy5zdGFnZXMgPSB0aGlzLmZsYXR0ZW4odGVtcCk7XG5cbiAgICAgICAgdGhpcy5zdGFnZXMuZm9yRWFjaChzdGFnZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvcHBvcnR1bml0aWVzID0ge1xuICAgICAgICAgICAgICAgIHN0YWdlOiBudWxsLFxuICAgICAgICAgICAgICAgIG9wcG9ydHVuaXRpZXM6IFtdLFxuICAgICAgICAgICAgICAgIHRvdGFsczogeyBvbmVUaW1lOiAwLCBtcnI6IDAsIGNvdW50OiAwIH0sXG4gICAgICAgICAgICAgICAgaXNMb2FkaW5nTW9yZTogZmFsc2VcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5hbGxPcHBvcnR1bml0aWVzLmZpbHRlcihcbiAgICAgICAgICAgICAgICBvcHBvcnR1bml0eSA9PiBvcHBvcnR1bml0eS5jcm1fb3Bwb3J0dW5pdHlfc3RhZ2VfaWQgPT09IHN0YWdlLmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgb3Bwb3J0dW5pdGllcy5vcHBvcnR1bml0aWVzID0gZGF0YS5zbGljZSgwLCB0aGlzLnBhZ2VTaXplKTsgLy8gTG9hZCBpbml0aWFsIGl0ZW1zXG4gICAgICAgICAgICBvcHBvcnR1bml0aWVzLnN0YWdlID0gc3RhZ2U7XG4gICAgICAgICAgICBvcHBvcnR1bml0aWVzLnRvdGFscy5vbmVUaW1lID0gZGF0YS5yZWR1Y2UoKHN1bSwgb3BwKSA9PiBzdW0gKyBvcHAub25lX3RpbWVfYW1vdW50LCAwKTtcbiAgICAgICAgICAgIG9wcG9ydHVuaXRpZXMudG90YWxzLm1yciA9IGRhdGEucmVkdWNlKChzdW0sIG9wcCkgPT4gc3VtICsgb3BwLm1vbnRobHlfYW1vdW50LCAwKTtcbiAgICAgICAgICAgIG9wcG9ydHVuaXRpZXMudG90YWxzLmNvdW50ID0gZGF0YS5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLm9wcG9ydHVuaXRpZXNHcm91cC5wdXNoKG9wcG9ydHVuaXRpZXMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBoYW5kbGVJbWFnZUVycm9yKGV2ZW50OiBFdmVudCwgZmFsbGJhY2tQYXRoKTogdm9pZCB7XG4gICAgICAgIEhlbHBlclNlcnZpY2UuaGFuZGxlSW1hZ2VGYWxsYmFja1BhdGgoZXZlbnQsIGZhbGxiYWNrUGF0aCk7XG4gICAgfVxuXG4gICAgb25DaGFuZ2VDYXRlZ29yeShldmVudCkge1xuICAgICAgICBjb25zdCBjYXRlZ29yaWVzID0gTnVtYmVyKGV2ZW50KTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENhdGVnb3J5SWQgPSBjYXRlZ29yaWVzO1xuICAgICAgICBpZiAoY2F0ZWdvcmllcykge1xuICAgICAgICAgICAgdGhpcy5hbGxPcHBvcnR1bml0aWVzID0gdGhpcy5hdmFpbGFibGVPcHBvcnR1bml0aWVzLmZpbHRlcihvcHBvcnR1bml0eSA9PlxuICAgICAgICAgICAgICAgIG9wcG9ydHVuaXR5Py5jcm1fb3Bwb3J0dW5pdHlfY2F0ZWdvcnlfaWRzPy5pbmNsdWRlcyhjYXRlZ29yaWVzKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMudG90YWxDb3VudCA9IHRoaXMuYWxsT3Bwb3J0dW5pdGllcz8ubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy5vcHBvcnR1bml0aWVzR3JvdXBzKGNhdGVnb3JpZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hbGxPcHBvcnR1bml0aWVzID0gdGhpcy5hdmFpbGFibGVPcHBvcnR1bml0aWVzO1xuICAgICAgICAgICAgdGhpcy50b3RhbENvdW50ID0gdGhpcy5hbGxPcHBvcnR1bml0aWVzPy5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLm9wcG9ydHVuaXRpZXNHcm91cHMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ29sdW1uU2Nyb2xsKGNvbHVtbkluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLm9wcG9ydHVuaXRpZXNHcm91cFtjb2x1bW5JbmRleF07XG4gICAgICAgIGlmIChncm91cC5pc0xvYWRpbmdNb3JlIHx8IGdyb3VwLm9wcG9ydHVuaXRpZXMubGVuZ3RoID49IGdyb3VwLnRvdGFscy5jb3VudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZ3JvdXAuaXNMb2FkaW5nTW9yZSA9IHRydWU7XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50TGVuZ3RoID0gZ3JvdXAub3Bwb3J0dW5pdGllcy5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBtb3JlT3Bwb3J0dW5pdGllcyA9IHRoaXMuYWxsT3Bwb3J0dW5pdGllc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIob3Bwb3J0dW5pdHkgPT4gb3Bwb3J0dW5pdHkuY3JtX29wcG9ydHVuaXR5X3N0YWdlX2lkID09PSBncm91cC5zdGFnZS5pZClcbiAgICAgICAgICAgICAgICAuc2xpY2UoY3VycmVudExlbmd0aCwgY3VycmVudExlbmd0aCArIHRoaXMucGFnZVNpemUpO1xuXG4gICAgICAgICAgICBncm91cC5vcHBvcnR1bml0aWVzID0gZ3JvdXAub3Bwb3J0dW5pdGllcy5jb25jYXQobW9yZU9wcG9ydHVuaXRpZXMpO1xuICAgICAgICAgICAgZ3JvdXAuaXNMb2FkaW5nTW9yZSA9IGZhbHNlO1xuICAgICAgICB9LCAyMDAwKTsgLy8gU2hvdyBsb2FkZXIgZm9yIDIgc2Vjb25kc1xuICAgIH1cblxuICAgIGRyb3BJdGVtKGV2ZW50OiBDZGtEcmFnRHJvcDxvYmplY3RbXT4pIHtcbiAgICAgICAgaWYgKGV2ZW50LnByZXZpb3VzQ29udGFpbmVyID09PSBldmVudC5jb250YWluZXIpIHtcbiAgICAgICAgICAgIG1vdmVJdGVtSW5BcnJheShldmVudC5jb250YWluZXIuZGF0YSwgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyYW5zZmVyQXJyYXlJdGVtKFxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZpb3VzQ29udGFpbmVyLmRhdGEsXG4gICAgICAgICAgICAgICAgZXZlbnQuY29udGFpbmVyLmRhdGEsXG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmlvdXNJbmRleCxcbiAgICAgICAgICAgICAgICBldmVudC5jdXJyZW50SW5kZXhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmRyYWdnZWRPcHBvcnR1bml0eSA9IGV2ZW50Py5pdGVtPy5kYXRhO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkU3RhZ2UgPSB0aGlzLnN0YWdlcy5maW5kKHN0YWdlID0+IHN0YWdlLm5hbWUgPT09IGV2ZW50Py5jb250YWluZXI/LmlkKT8uaWQ7XG4gICAgICAgICAgICBpZiAodGhpcy5kcmFnZ2VkT3Bwb3J0dW5pdHkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcHBvcnR1bml0aWVzRGV0YWlscyA9IHsgLi4udGhpcy5kcmFnZ2VkT3Bwb3J0dW5pdHkgfTtcbiAgICAgICAgICAgICAgICBvcHBvcnR1bml0aWVzRGV0YWlsc1snY3JtX29wcG9ydHVuaXR5X3N0YWdlX2lkJ10gPSB0aGlzLmNoYW5nZWRTdGFnZTtcbiAgICAgICAgICAgICAgICBIZWxwZXJTZXJ2aWNlLmRlbGV0ZVByb3BzKG9wcG9ydHVuaXRpZXNEZXRhaWxzLCBbXG4gICAgICAgICAgICAgICAgICAgICdjcm1fYWNjb3VudCcsXG4gICAgICAgICAgICAgICAgICAgICdjcm1fb3Bwb3J0dW5pdHlfc3RhZ2UnLFxuICAgICAgICAgICAgICAgICAgICAnY3JtX29wcG9ydHVuaXR5X2NhdGVnb3JpZXMnLFxuICAgICAgICAgICAgICAgICAgICAnY3JtX2NvbnRhY3QnLFxuICAgICAgICAgICAgICAgICAgICAnb3duZXInXG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jcm1TZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgIC51cGRhdGVPcHBvcnR1bml0aWVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24/LmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3Bwb3J0dW5pdGllc0RldGFpbHMuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHBvcnR1bml0aWVzRGV0YWlsc1xuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsT3Bwb3J0dW5pdGllcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3Quc3VjY2VzcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ3JtLk9wcG9ydHVuaXRpZXNNZXNzYWdlLlVwZGF0ZWRNZXNzYWdlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsT3Bwb3J0dW5pdGllcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdnZWRPcHBvcnR1bml0eSA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VkU3RhZ2UgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldENvbm5lY3RlZExpc3QoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHBvcnR1bml0aWVzR3JvdXAubWFwKHggPT4gYCR7eC5zdGFnZS5uYW1lfWApO1xuICAgIH1cblxuICAgIGRyb3BHcm91cChldmVudDogQ2RrRHJhZ0Ryb3A8c3RyaW5nW10+KSB7XG4gICAgICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLm9wcG9ydHVuaXRpZXNHcm91cCwgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgICB9XG5cbiAgICB0b2dnbGVDb2x1bW4oZXZlbnQsIGdyb3VwKSB7XG4gICAgICAgICQoZXZlbnQudGFyZ2V0KS50b2dnbGVDbGFzcygnZmEtYW5nbGUtcmlnaHQgZmEtYW5nbGUtZG93bicpO1xuICAgICAgICAkKGV2ZW50LnRhcmdldCkuY2xvc2VzdCgnLm1haW4tZGl2JykudG9nZ2xlQ2xhc3MoJ2R5bmFtaWMtY29sdW1ucy13cmFwcGVyJyk7XG4gICAgICAgIHRoaXMuY3JtU2VydmljZVxuICAgICAgICAgICAgLmVkaXRTdGFnZSh0aGlzLnN1YnNjcmlwdGlvbj8uaWQsIGdyb3VwLnN0YWdlPy5pZCwge1xuICAgICAgICAgICAgICAgIGNvbGxhcHNlZDogIWdyb3VwLnN0YWdlPy5jb2xsYXBzZWRcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldFN0YWdlcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaGFzU3RhZ2VzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHBvcnR1bml0aWVzR3JvdXAuc29tZShcbiAgICAgICAgICAgIGdyb3VwID0+IGdyb3VwLnN0YWdlLmNybV9vcHBvcnR1bml0eV9jYXRlZ29yeV9pZHMubGVuZ3RoID4gMFxuICAgICAgICApO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIG5nT25EZXN0cm95KCkge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ3LTEwMCB0ZXh0LWNlbnRlciBtdC0zXCI+XG4gIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCIhaXNMb2FkZWRcIj5cbiAgICA8cC1wcm9ncmVzc1NwaW5uZXIgc3Ryb2tlV2lkdGg9XCIyXCI+PC9wLXByb2dyZXNzU3Bpbm5lcj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwicm93IG1iLTRcIiAqbmdJZj1cImlzTG9hZGVkXCI+XG4gIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTRcIj5cbiAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiAoY2hhbmdlKT1cIm9uQ2hhbmdlQ2F0ZWdvcnkoJGV2ZW50LnRhcmdldC52YWx1ZSlcIj5cbiAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBjYXRlZ29yaWVzXCIgW3ZhbHVlXT1cIm9wdGlvbi5pZFwiPnt7IG9wdGlvbi5uYW1lIH19PC9vcHRpb24+XG4gICAgPC9zZWxlY3Q+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS04IG10LTIgbXQtc20tMCBtYi0zXCI+XG4gICAgPGEgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXByaW1hcnkgZmxvYXQtZW5kXCIgZGF0YS1jeT1cImFkZC1vcHBvcnR1bml0aWVzXCIgW3JvdXRlckxpbmtdPVwiWycvJyArIHN1YnNjcmlwdGlvbj8uc2x1ZyArIHJvdXRlcnMub3Bwb3J0dW5pdHlBZGRdXCI+XG4gICAgICA8aSBjbGFzcz1cImZhIGZhLXBsdXMtY2lyY2xlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAge3sgJ0NybS5PcHBvcnR1bml0aWVzTWVzc2FnZS5BZGRPcHBvcnR1bml0eScgfCB0cmFuc2xvY28gfX1cbiAgICA8L2E+XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2ICpuZ0lmPVwiaXNMb2FkZWQgJiYgIWhhc1N0YWdlcygpXCI+XG4gIDxwdy1uby1kYXRhIFt3aXRoSW1hZ2VdPVwidHJ1ZVwiIFttZXNzYWdlXT1cIidDcm0uU3RhZ2VNZXNzYWdlcy5Ob1N0YWdlQ2F0ZWdvcnlNZXNzYWdlJyB8IHRyYW5zbG9jb1wiPlxuICA8L3B3LW5vLWRhdGE+XG48L2Rpdj5cbjxkaXYgKm5nSWY9XCJpc0xvYWRlZCAgJiYgaGFzU3RhZ2VzKClcIiBjbGFzcz1cImxpc3QtY29udGFpbmVyIGQtZmxleFwiIGNka0Ryb3BMaXN0IFtjZGtEcm9wTGlzdERhdGFdPVwib3Bwb3J0dW5pdGllc0dyb3VwXCIgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wR3JvdXAoJGV2ZW50KVwiPlxuICA8ZGl2IGNka0Ryb3BMaXN0R3JvdXAgY2xhc3M9XCJvcHBvcnR1bml0aWVzLWNvbnRhaW5lciBtYWluLWRpdiBjcm0tYm9hcmQtcHJpbWFyeVwiIFtjbGFzcy5keW5hbWljLWNvbHVtbnMtd3JhcHBlcl09XCJncm91cC5zdGFnZS5jb2xsYXBzZWRcIiBbc3R5bGUuLS1ib3JkZXItY29sb3JdPVwiZ3JvdXAuc3RhZ2UuY29sb3JfY29kZVwiICpuZ0Zvcj1cImxldCBncm91cCBvZiBvcHBvcnR1bml0aWVzR3JvdXA7IGxldCBpID0gaW5kZXhcIiBjZGtEcmFnIFtjZGtEcmFnRGF0YV09XCJncm91cFwiPlxuICAgIDxkaXYgY2xhc3M9XCJvcHBvcnR1bml0aWVzLWJvYXJkLXRpdGxlIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcHktMVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjb2xsYXBzZS1jb2x1bW4tdG9nZ2xlXCI+XG4gICAgICAgIDxpIGNsYXNzPVwiZmFzXCIgW25nQ2xhc3NdPVwieydmYS1hbmdsZS1yaWdodCc6ICFncm91cC5zdGFnZS5jb2xsYXBzZWQsICdmYS1hbmdsZS1kb3duJzogZ3JvdXAuc3RhZ2UuY29sbGFwc2VkfVwiIChrZXlkb3duLmVudGVyKT1cInRvZ2dsZUNvbHVtbigkZXZlbnQsIGdyb3VwKVwiIChjbGljayk9XCJ0b2dnbGVDb2x1bW4oJGV2ZW50LCBncm91cClcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICA8L3NwYW4+XG4gICAgICA8cCBjbGFzcz1cInN0YWdlLW5hbWUgbWItMCBweS0yIHBzLTRcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSByb3VuZGVkLXBpbGwgdGV4dC13aGl0ZSBweC0zXCIgW3N0eWxlLi0tYmFja2dyb3VuZC1jb2xvcl09XCJncm91cC5zdGFnZS5jb2xvcl9jb2RlXCI+e3sgZ3JvdXAuc3RhZ2UubmFtZSB9fTwvc3Bhbj5cbiAgICAgIDwvcD5cbiAgICAgIDxzcGFuIGNsYXNzPVwibXMtYXV0byBtZS00IGFkZC1vcHBvcnR1bml0eS1pY29uXCI+XG4gICAgICAgIDxhIGNsYXNzPVwidGV4dC1zZWNvbmRhcnlcIiBhcmlhLWxhYmVsPVwiQWRkIE9wcG9ydHVuaXR5XCIgW3JvdXRlckxpbmtdPVwiWycvJyArIHN1YnNjcmlwdGlvbj8uc2x1ZyArIHJvdXRlcnMub3Bwb3J0dW5pdHlBZGRdXCIgW3F1ZXJ5UGFyYW1zXT1cInsgc3RhZ2VfaWQ6IGdyb3VwPy5zdGFnZT8uaWQsIGNhdGVnb3J5OiBncm91cC5zdGFnZS5jcm1fb3Bwb3J0dW5pdHlfY2F0ZWdvcnlfaWRzIH1cIj48aSBjbGFzcz1cImZhIGZhLXBsdXMtc3F1YXJlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvYT5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwib3Bwb3J0dW5pdGllcy1saXN0IGl0ZW1zLWNvbnRhaW5lclwiIGNka0Ryb3BMaXN0IFtpZF09XCJncm91cC5zdGFnZS5uYW1lXCIgW2Nka0Ryb3BMaXN0RGF0YV09XCJncm91cC5vcHBvcnR1bml0aWVzXCIgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wSXRlbSgkZXZlbnQpXCIgW2Nka0Ryb3BMaXN0Q29ubmVjdGVkVG9dPVwiZ2V0Q29ubmVjdGVkTGlzdCgpXCIgKHNjcm9sbCk9XCJvbkNvbHVtblNjcm9sbChpKVwiPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBncm91cC5vcHBvcnR1bml0aWVzOyBsZXQgaWR4ID0gaW5kZXhcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm9wcG9ydHVuaXRpZXMtYm94IG1iLTNcIiBjZGtEcmFnIFtjZGtEcmFnRGF0YV09XCJpdGVtXCI+XG4gICAgICAgICAgPHNwYW4gbmdiVG9vbHRpcD1cIkVkaXRcIiBjbGFzcz1cImZsb2F0LWVuZCBlZGl0LWJ1dHRvblwiIFtyb3V0ZXJMaW5rXT1cIlsnLycgKyBzdWJzY3JpcHRpb24/LnNsdWcgKyByb3V0ZXJzLm9wcG9ydHVuaXRpZXMsIGl0ZW0uaWRdXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWVkaXQgZWRpdC1pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8cCBjbGFzcz1cImZ3LWJvbGQgbWItMVwiPnt7IGl0ZW0udGl0bGUgfX08L3A+XG4gICAgICAgICAgPGEgY2xhc3M9XCJtYi0xXCIgW3JvdXRlckxpbmtdPVwiWycvJyArIHN1YnNjcmlwdGlvbj8uc2x1ZyArIHJvdXRlcnMuYWNjb3VudEluZm8sIGl0ZW0/LmNybV9hY2NvdW50X2lkIF1cIj57eyBpdGVtPy5jcm1fYWNjb3VudD8ubmFtZSB9fTwvYT5cbiAgICAgICAgICA8cCBjbGFzcz1cIm1iLTFcIj57eyAoaXRlbT8ub25lX3RpbWVfYW1vdW50IC8gMTAwIHwgY3VycmVuY3kpIH19IE9uZS10aW1lIC8ge3sgKGl0ZW0/Lm1vbnRobHlfYW1vdW50IC8gMTAwIHwgY3VycmVuY3kpIH19IE1SUjwvcD5cbiAgICAgICAgICA8YSAqbmdJZj1cIml0ZW0/Lm93bmVyWzBdPy51c2VyX2F2YXRhclwiIFtyb3V0ZXJMaW5rXT1cIlsnL21lbWJlcnMnLCBpdGVtPy5vd25lclswXT8uc2x1Z11cIj5cbiAgICAgICAgICAgIDxpbWcgYWx0PVwiTWVtYmVyIExvZ29cIiBbc3JjXT1cIml0ZW0/Lm93bmVyWzBdPy51c2VyX2F2YXRhclswXT8udXJsXCIgW3dpZHRoXT1cIiczMCdcIiBjbGFzcz1cInNxdWFyZWRfbG9nbyBmbG9hdC1lbmRcIiBbaGVpZ2h0XT1cIiczMCdcIiAoZXJyb3IpPVwiaGFuZGxlSW1hZ2VFcnJvcigkZXZlbnQsICdhc3NldHMvaW1nL2ljb25zL21hbGUucG5nJylcIiAvPlxuICAgICAgICAgIDwvYT5cbiAgICAgICAgICA8cCBjbGFzcz1cIm1iLTFcIj57eyBpdGVtLnN0YXJ0aW5nX2F0IHwgZGF0ZUZvcm1hdCB9fTwvcD5cbiAgICAgICAgICA8cCBjbGFzcz1cIm1iLTEgYmFkZ2UgYmctd2FybmluZ1wiPnt7IGl0ZW0/LmNybV9vcHBvcnR1bml0eV9zdGFnZT8ubmFtZSB9fTwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCB0ZXh0LWNlbnRlciBtdC0zXCIgKm5nSWY9XCIoaWR4ICsgMSkgJSA1ID09PSAwICYmIGdyb3VwLmlzTG9hZGluZ01vcmVcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLWxvYWRlclwiPlxuICAgICAgICAgICAgPHAtcHJvZ3Jlc3NTcGlubmVyIHN0cm9rZVdpZHRoPVwiMlwiPjwvcC1wcm9ncmVzc1NwaW5uZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9hZGluZy10ZXh0XCI+TG9hZGluZyBvcHBvcnR1bml0aWVzLi4uPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImZvb3RlciBmb290ZXItbGlzdFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImZvb3Rlci1pdGVtXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZm9vdGVyLWxhYmVsXCI+VG90YWwgT25lLVRpbWU6PC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImZvb3Rlci12YWx1ZVwiPnt7IGdyb3VwLnRvdGFscy5vbmVUaW1lIC8gMTAwIHwgY3VycmVuY3kgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXItaXRlbVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImZvb3Rlci1sYWJlbFwiPlRvdGFsIE1SUjo8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZm9vdGVyLXZhbHVlXCI+e3sgZ3JvdXAudG90YWxzLm1yciAvIDEwMCB8IGN1cnJlbmN5IH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyLWl0ZW1cIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmb290ZXItbGFiZWxcIj5Ub3RhbCBDb3VudDo8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZm9vdGVyLXZhbHVlXCI+e3sgZ3JvdXAudG90YWxzLmNvdW50IH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
233
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtY3JtLWJvYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc21hcnQtY3JtL3NyYy9saWIvcHJpdmF0ZS9jb21wb25lbnRzL3NtYXJ0LWNybS1vcHBvcnR1bml0aWVzL3NtYXJ0LWNybS1ib2FyZC9zbWFydC1jcm0tYm9hcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zbWFydC1jcm0vc3JjL2xpYi9wcml2YXRlL2NvbXBvbmVudHMvc21hcnQtY3JtLW9wcG9ydHVuaXRpZXMvc21hcnQtY3JtLWJvYXJkL3NtYXJ0LWNybS1ib2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUFlLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFaEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7Ozs7O0FBT3pELE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxnQkFBZ0I7SUFnQnhELFlBQ3FCLFVBQXNCLEVBQ3ZDLFFBQWtCO1FBRWxCLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUhDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFiM0MsdUJBQWtCLEdBQUcsRUFBRSxDQUFDO1FBRXhCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNSLDJCQUFzQixHQUFHLEVBQUUs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RCxZQUFZLENBQUMsS0FBSyxFQUFFLEtBQUs7UUFDckIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUM1RCxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxXQUFXLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsVUFBVTthQUNWLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUMvQyxTQUFTLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLFNBQVM7U0FDckMsQ0FBQzthQUNELFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsU0FBUztRQUNMLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FDL0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLDRCQUE0QixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQy9ELENBQUM7SUFDTixDQUFDO0lBRVEsV0FBVztRQUNoQixLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDeEIsQ0FBQzsrR0FsUVEsc0JBQXNCO21HQUF0QixzQkFBc0IsaUZDZm5DLDJ6SkEyRUE7OzRGRDVEYSxzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0ksb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3RvciwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENka0RyYWdEcm9wLCBtb3ZlSXRlbUluQXJyYXksIHRyYW5zZmVyQXJyYXlJdGVtIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBST1VURVJTIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL3JvdXRlcnMvcm91dGVycyc7XG5pbXBvcnQgeyBDcm1TZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL3NtYXJ0LWNybS1zaGFyZWQnO1xuaW1wb3J0IHsgQ3JtT3Bwb3J0dW5pdHkgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvaW50ZXJmYWNlL2NybS1vcHBvcnR1bml0eS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ3JtU3RhZ2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvaW50ZXJmYWNlL2NybS1zdGFnZXMuaW50ZXJmYWNlJztcbmltcG9ydCB7IEFwcEJhc2VDb21wb25lbnQgfSBmcm9tICdAcG9zaXdpc2UvYXBwLWJhc2UtY29tcG9uZW50JztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tdXRpbGl0aWVzJztcbmltcG9ydCB7IEhlbHBlclNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvaGVscGVyLXNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3B3LXNtYXJ0LWNybS1ib2FyZCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NtYXJ0LWNybS1ib2FyZC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vc21hcnQtY3JtLWJvYXJkLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgU21hcnRDcm1Cb2FyZENvbXBvbmVudCBleHRlbmRzIEFwcEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSBkcmFnZ2VkT3Bwb3J0dW5pdHk6IENybU9wcG9ydHVuaXR5O1xuICAgIHN0YWdlczogQ3JtU3RhZ2VbXTtcbiAgICBhbGxPcHBvcnR1bml0aWVzOiBDcm1PcHBvcnR1bml0eVtdO1xuICAgIG9wcG9ydHVuaXRpZXNHcm91cCA9IFtdO1xuICAgIHByaXZhdGUgY2hhbmdlZFN0YWdlOiBudW1iZXIgfCBzdHJpbmc7XG4gICAgaXNMb2FkZWQgPSBmYWxzZTtcbiAgICBjYXRlZ29yaWVzID0gW107XG4gICAgcHJpdmF0ZSBhdmFpbGFibGVPcHBvcnR1bml0aWVzID0gW107XG4gICAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gICAgdG90YWxDb3VudDogbnVtYmVyO1xuICAgIHJvdXRlcnMgPSBST1VURVJTO1xuICAgIG1hc3RlclN0YWdlczogQ3JtU3RhZ2VbXSA9IFtdO1xuICAgIHNlbGVjdGVkQ2F0ZWdvcnlJZCA9IDA7XG4gICAgcHJpdmF0ZSByZWFkb25seSBwYWdlU2l6ZSA9IDU7IC8vIFNob3cgNSBjYXJkcyBpbml0aWFsbHlcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNybVNlcnZpY2U6IENybVNlcnZpY2UsXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvclxuICAgICkge1xuICAgICAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuZ2V0VXNlclN1YnNjcmlwdGlvbigpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uPy5pZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsT3Bwb3J0dW5pdHlDYXRlZ29yaWVzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRTdGFnZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRBbGxPcHBvcnR1bml0eUNhdGVnb3JpZXMoKSB7XG4gICAgICAgIHRoaXMuY3JtU2VydmljZS5nZXRBbGxPcHBvcnR1bml0eUNhdGVnb3JpZXModGhpcy5zdWJzY3JpcHRpb24/LmlkKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5jYXRlZ29yaWVzID0gcmVzcG9uc2U/LmNybV9vcHBvcnR1bml0eV9jYXRlZ29yaWVzIHx8IFtdO1xuICAgICAgICAgICAgaWYgKHRoaXMuY2F0ZWdvcmllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENhdGVnb3J5SWQgPSB0aGlzLmNhdGVnb3JpZXNbMF0uaWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U3RhZ2VzKCkge1xuICAgICAgICB0aGlzLmNybVNlcnZpY2UuZ2V0QXZhaWxhYmxlT3Bwb3J0dW5pdHlTdGFnZXModGhpcy5zdWJzY3JpcHRpb24/LmlkKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdGFnZXMgPSByZXNwb25zZS5hdmFpbGFibGVfY3JtX29wcG9ydHVuaXR5X3N0YWdlcztcbiAgICAgICAgICAgIHRoaXMubWFzdGVyU3RhZ2VzID0gcmVzcG9uc2UuYXZhaWxhYmxlX2NybV9vcHBvcnR1bml0eV9zdGFnZXM7XG4gICAgICAgICAgICB0aGlzLmdldEFsbE9wcG9ydHVuaXRpZXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRBbGxPcHBvcnR1bml0aWVzKCkge1xuICAgICAgICB0aGlzLmNybVNlcnZpY2VcbiAgICAgICAgICAgIC5nZXRBbGxPcHBvcnR1bml0aWVzKHRoaXMuc3Vic2NyaXB0aW9uPy5pZClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYWxsT3Bwb3J0dW5pdGllcyA9IHJlc3BvbnNlPy5jcm1fb3Bwb3J0dW5pdGllcyB8fCBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLmF2YWlsYWJsZU9wcG9ydHVuaXRpZXMgPSByZXNwb25zZT8uY3JtX29wcG9ydHVuaXRpZXMgfHwgW107XG4gICAgICAgICAgICAgICAgdGhpcy50b3RhbENvdW50ID0gdGhpcy5hbGxPcHBvcnR1bml0aWVzPy5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENhdGVnb3J5SWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGxPcHBvcnR1bml0aWVzID0gdGhpcy5hdmFpbGFibGVPcHBvcnR1bml0aWVzLmZpbHRlcihvcHBvcnR1bml0eSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgb3Bwb3J0dW5pdHk/LmNybV9vcHBvcnR1bml0eV9jYXRlZ29yeV9pZHM/LmluY2x1ZGVzKHRoaXMuc2VsZWN0ZWRDYXRlZ29yeUlkKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSB0aGlzLmFsbE9wcG9ydHVuaXRpZXM/Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLm9wcG9ydHVuaXRpZXNHcm91cHModGhpcy5zZWxlY3RlZENhdGVnb3J5SWQgfHwgbnVsbCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmFkZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRyZWVmeShsaXN0KSB7XG4gICAgICAgIGNvbnN0IGlkQXR0ciA9ICdpZCc7XG4gICAgICAgIGNvbnN0IHBhcmVudEF0dHIgPSAncHJldmlvdXNfc3RhZ2VfaWQnO1xuICAgICAgICBjb25zdCBjaGlsZHJlbkF0dHIgPSAnY2hpbGRyZW4nO1xuXG4gICAgICAgIGNvbnN0IHRyZWVMaXN0ID0gW107XG4gICAgICAgIGNvbnN0IGxvb2t1cCA9IHt9O1xuICAgICAgICBsaXN0LmZvckVhY2gob2JqID0+IHtcbiAgICAgICAgICAgIGxvb2t1cFtvYmpbaWRBdHRyXV0gPSBvYmo7XG4gICAgICAgICAgICBvYmpbY2hpbGRyZW5BdHRyXSA9IFtdO1xuICAgICAgICB9KTtcbiAgICAgICAgbGlzdC5mb3JFYWNoKG9iaiA9PiB7XG4gICAgICAgICAgICBpZiAob2JqW3BhcmVudEF0dHJdICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxvb2t1cFtvYmpbcGFyZW50QXR0cl1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9va3VwW29ialtwYXJlbnRBdHRyXV1bY2hpbGRyZW5BdHRyXS5wdXNoKG9iaik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdHJlZUxpc3QucHVzaChvYmopO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdHJlZUxpc3QucHVzaChvYmopO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdHJlZUxpc3Q7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmbGF0dGVuKGFycikge1xuICAgICAgICByZXR1cm4gYXJyLnJlZHVjZSgocmVzdWx0LCBjdXJyZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoY3VycmVudC5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5mbGF0dGVuKGN1cnJlbnQuY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBjdXJyZW50LmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGN1cnJlbnQpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLmNoaWxkcmVuKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goY3VycmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LCBbXSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvcHBvcnR1bml0aWVzR3JvdXBzKHZhbD86IG51bWJlcikge1xuICAgICAgICB0aGlzLm9wcG9ydHVuaXRpZXNHcm91cCA9IFtdO1xuICAgICAgICB0aGlzLnN0YWdlcyA9IHRoaXMubWFzdGVyU3RhZ2VzO1xuICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQgJiYgdmFsICE9PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnN0YWdlcyA9IHRoaXMuc3RhZ2VzLmZpbHRlcihzdGFnZSA9PlxuICAgICAgICAgICAgICAgIHN0YWdlLmNybV9vcHBvcnR1bml0eV9jYXRlZ29yeV9pZHMuaW5jbHVkZXModmFsKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YWdlcyA9IHRoaXMuc3RhZ2VzLnRvU29ydGVkKChhLCBiKSA9PiBhLmlkIC0gYi5pZCk7XG5cbiAgICAgICAgY29uc3QgdGVtcCA9IHRoaXMudHJlZWZ5KHRoaXMuc3RhZ2VzKTtcbiAgICAgICAgdGhpcy5zdGFnZXMgPSB0aGlzLmZsYXR0ZW4odGVtcCk7XG5cbiAgICAgICAgdGhpcy5zdGFnZXMuZm9yRWFjaChzdGFnZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvcHBvcnR1bml0aWVzID0ge1xuICAgICAgICAgICAgICAgIHN0YWdlOiBudWxsLFxuICAgICAgICAgICAgICAgIG9wcG9ydHVuaXRpZXM6IFtdLFxuICAgICAgICAgICAgICAgIHRvdGFsczogeyBvbmVUaW1lOiAwLCBtcnI6IDAsIGNvdW50OiAwIH0sXG4gICAgICAgICAgICAgICAgaXNMb2FkaW5nTW9yZTogZmFsc2VcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5hbGxPcHBvcnR1bml0aWVzLmZpbHRlcihcbiAgICAgICAgICAgICAgICBvcHBvcnR1bml0eSA9PiBvcHBvcnR1bml0eS5jcm1fb3Bwb3J0dW5pdHlfc3RhZ2VfaWQgPT09IHN0YWdlLmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgb3Bwb3J0dW5pdGllcy5vcHBvcnR1bml0aWVzID0gZGF0YS5zbGljZSgwLCB0aGlzLnBhZ2VTaXplKTsgLy8gTG9hZCBpbml0aWFsIGl0ZW1zXG4gICAgICAgICAgICBvcHBvcnR1bml0aWVzLnN0YWdlID0gc3RhZ2U7XG4gICAgICAgICAgICBvcHBvcnR1bml0aWVzLnRvdGFscy5vbmVUaW1lID0gZGF0YS5yZWR1Y2UoKHN1bSwgb3BwKSA9PiBzdW0gKyBvcHAub25lX3RpbWVfYW1vdW50LCAwKTtcbiAgICAgICAgICAgIG9wcG9ydHVuaXRpZXMudG90YWxzLm1yciA9IGRhdGEucmVkdWNlKChzdW0sIG9wcCkgPT4gc3VtICsgb3BwLm1vbnRobHlfYW1vdW50LCAwKTtcbiAgICAgICAgICAgIG9wcG9ydHVuaXRpZXMudG90YWxzLmNvdW50ID0gZGF0YS5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLm9wcG9ydHVuaXRpZXNHcm91cC5wdXNoKG9wcG9ydHVuaXRpZXMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBoYW5kbGVJbWFnZUVycm9yKGV2ZW50OiBFdmVudCwgZmFsbGJhY2tQYXRoKTogdm9pZCB7XG4gICAgICAgIEhlbHBlclNlcnZpY2UuaGFuZGxlSW1hZ2VGYWxsYmFja1BhdGgoZXZlbnQsIGZhbGxiYWNrUGF0aCk7XG4gICAgfVxuXG4gICAgb25DaGFuZ2VDYXRlZ29yeShldmVudCkge1xuICAgICAgICBjb25zdCBjYXRlZ29yaWVzID0gTnVtYmVyKGV2ZW50KTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENhdGVnb3J5SWQgPSBjYXRlZ29yaWVzO1xuICAgICAgICBpZiAoY2F0ZWdvcmllcykge1xuICAgICAgICAgICAgdGhpcy5hbGxPcHBvcnR1bml0aWVzID0gdGhpcy5hdmFpbGFibGVPcHBvcnR1bml0aWVzLmZpbHRlcihvcHBvcnR1bml0eSA9PlxuICAgICAgICAgICAgICAgIG9wcG9ydHVuaXR5Py5jcm1fb3Bwb3J0dW5pdHlfY2F0ZWdvcnlfaWRzPy5pbmNsdWRlcyhjYXRlZ29yaWVzKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMudG90YWxDb3VudCA9IHRoaXMuYWxsT3Bwb3J0dW5pdGllcz8ubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy5vcHBvcnR1bml0aWVzR3JvdXBzKGNhdGVnb3JpZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hbGxPcHBvcnR1bml0aWVzID0gdGhpcy5hdmFpbGFibGVPcHBvcnR1bml0aWVzO1xuICAgICAgICAgICAgdGhpcy50b3RhbENvdW50ID0gdGhpcy5hbGxPcHBvcnR1bml0aWVzPy5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLm9wcG9ydHVuaXRpZXNHcm91cHMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ29sdW1uU2Nyb2xsKGNvbHVtbkluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLm9wcG9ydHVuaXRpZXNHcm91cFtjb2x1bW5JbmRleF07XG4gICAgICAgIGlmIChncm91cC5pc0xvYWRpbmdNb3JlIHx8IGdyb3VwLm9wcG9ydHVuaXRpZXMubGVuZ3RoID49IGdyb3VwLnRvdGFscy5jb3VudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZ3JvdXAuaXNMb2FkaW5nTW9yZSA9IHRydWU7XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50TGVuZ3RoID0gZ3JvdXAub3Bwb3J0dW5pdGllcy5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBtb3JlT3Bwb3J0dW5pdGllcyA9IHRoaXMuYWxsT3Bwb3J0dW5pdGllc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIob3Bwb3J0dW5pdHkgPT4gb3Bwb3J0dW5pdHkuY3JtX29wcG9ydHVuaXR5X3N0YWdlX2lkID09PSBncm91cC5zdGFnZS5pZClcbiAgICAgICAgICAgICAgICAuc2xpY2UoY3VycmVudExlbmd0aCwgY3VycmVudExlbmd0aCArIHRoaXMucGFnZVNpemUpO1xuXG4gICAgICAgICAgICBncm91cC5vcHBvcnR1bml0aWVzID0gZ3JvdXAub3Bwb3J0dW5pdGllcy5jb25jYXQobW9yZU9wcG9ydHVuaXRpZXMpO1xuICAgICAgICAgICAgZ3JvdXAuaXNMb2FkaW5nTW9yZSA9IGZhbHNlO1xuICAgICAgICB9LCAyMDAwKTsgLy8gU2hvdyBsb2FkZXIgZm9yIDIgc2Vjb25kc1xuICAgIH1cblxuICAgIGRyb3BJdGVtKGV2ZW50OiBDZGtEcmFnRHJvcDxvYmplY3RbXT4pIHtcbiAgICAgICAgaWYgKGV2ZW50LnByZXZpb3VzQ29udGFpbmVyID09PSBldmVudC5jb250YWluZXIpIHtcbiAgICAgICAgICAgIG1vdmVJdGVtSW5BcnJheShldmVudC5jb250YWluZXIuZGF0YSwgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyYW5zZmVyQXJyYXlJdGVtKFxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZpb3VzQ29udGFpbmVyLmRhdGEsXG4gICAgICAgICAgICAgICAgZXZlbnQuY29udGFpbmVyLmRhdGEsXG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmlvdXNJbmRleCxcbiAgICAgICAgICAgICAgICBldmVudC5jdXJyZW50SW5kZXhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmRyYWdnZWRPcHBvcnR1bml0eSA9IGV2ZW50Py5pdGVtPy5kYXRhO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkU3RhZ2UgPSB0aGlzLnN0YWdlcy5maW5kKHN0YWdlID0+IHN0YWdlLm5hbWUgPT09IGV2ZW50Py5jb250YWluZXI/LmlkKT8uaWQ7XG4gICAgICAgICAgICBpZiAodGhpcy5kcmFnZ2VkT3Bwb3J0dW5pdHkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcHBvcnR1bml0aWVzRGV0YWlscyA9IHsgLi4udGhpcy5kcmFnZ2VkT3Bwb3J0dW5pdHkgfTtcbiAgICAgICAgICAgICAgICBvcHBvcnR1bml0aWVzRGV0YWlsc1snY3JtX29wcG9ydHVuaXR5X3N0YWdlX2lkJ10gPSB0aGlzLmNoYW5nZWRTdGFnZTtcbiAgICAgICAgICAgICAgICBIZWxwZXJTZXJ2aWNlLmRlbGV0ZVByb3BzKG9wcG9ydHVuaXRpZXNEZXRhaWxzLCBbXG4gICAgICAgICAgICAgICAgICAgICdjcm1fYWNjb3VudCcsXG4gICAgICAgICAgICAgICAgICAgICdjcm1fb3Bwb3J0dW5pdHlfc3RhZ2UnLFxuICAgICAgICAgICAgICAgICAgICAnY3JtX29wcG9ydHVuaXR5X2NhdGVnb3JpZXMnLFxuICAgICAgICAgICAgICAgICAgICAnY3JtX2NvbnRhY3QnLFxuICAgICAgICAgICAgICAgICAgICAnb3duZXInXG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jcm1TZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgIC51cGRhdGVPcHBvcnR1bml0aWVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24/LmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3Bwb3J0dW5pdGllc0RldGFpbHMuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHBvcnR1bml0aWVzRGV0YWlsc1xuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsT3Bwb3J0dW5pdGllcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3Quc3VjY2VzcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ3JtLk9wcG9ydHVuaXRpZXNNZXNzYWdlLlVwZGF0ZWRNZXNzYWdlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsT3Bwb3J0dW5pdGllcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdnZWRPcHBvcnR1bml0eSA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VkU3RhZ2UgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldENvbm5lY3RlZExpc3QoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHBvcnR1bml0aWVzR3JvdXAubWFwKHggPT4gYCR7eC5zdGFnZS5uYW1lfWApO1xuICAgIH1cblxuICAgIGRyb3BHcm91cChldmVudDogQ2RrRHJhZ0Ryb3A8c3RyaW5nW10+KSB7XG4gICAgICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLm9wcG9ydHVuaXRpZXNHcm91cCwgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgICB9XG5cbiAgICB0b2dnbGVDb2x1bW4oZXZlbnQsIGdyb3VwKSB7XG4gICAgICAgICQoZXZlbnQudGFyZ2V0KS50b2dnbGVDbGFzcygnZmEtYW5nbGUtcmlnaHQgZmEtYW5nbGUtZG93bicpO1xuICAgICAgICAkKGV2ZW50LnRhcmdldCkuY2xvc2VzdCgnLm1haW4tZGl2JykudG9nZ2xlQ2xhc3MoJ2R5bmFtaWMtY29sdW1ucy13cmFwcGVyJyk7XG4gICAgICAgIHRoaXMuY3JtU2VydmljZVxuICAgICAgICAgICAgLmVkaXRTdGFnZSh0aGlzLnN1YnNjcmlwdGlvbj8uaWQsIGdyb3VwLnN0YWdlPy5pZCwge1xuICAgICAgICAgICAgICAgIGNvbGxhcHNlZDogIWdyb3VwLnN0YWdlPy5jb2xsYXBzZWRcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldFN0YWdlcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaGFzU3RhZ2VzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHBvcnR1bml0aWVzR3JvdXAuc29tZShcbiAgICAgICAgICAgIGdyb3VwID0+IGdyb3VwLnN0YWdlLmNybV9vcHBvcnR1bml0eV9jYXRlZ29yeV9pZHMubGVuZ3RoID4gMFxuICAgICAgICApO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIG5nT25EZXN0cm95KCkge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ3LTEwMCB0ZXh0LWNlbnRlciBtdC0zXCI+XG4gIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCIhaXNMb2FkZWRcIj5cbiAgICA8cC1wcm9ncmVzc1NwaW5uZXIgc3Ryb2tlV2lkdGg9XCIyXCI+PC9wLXByb2dyZXNzU3Bpbm5lcj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwicm93IG1iLTRcIiAqbmdJZj1cImlzTG9hZGVkXCI+XG4gIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTRcIj5cbiAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiAoY2hhbmdlKT1cIm9uQ2hhbmdlQ2F0ZWdvcnkoJGV2ZW50LnRhcmdldC52YWx1ZSlcIj5cbiAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBjYXRlZ29yaWVzXCIgW3ZhbHVlXT1cIm9wdGlvbi5pZFwiPnt7IG9wdGlvbi5uYW1lIH19PC9vcHRpb24+XG4gICAgPC9zZWxlY3Q+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS04IG10LTIgbXQtc20tMCBtYi0zXCI+XG4gICAgPGEgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXByaW1hcnkgZmxvYXQtZW5kXCIgZGF0YS1jeT1cImFkZC1vcHBvcnR1bml0aWVzXCIgW3JvdXRlckxpbmtdPVwiWycvJyArIHN1YnNjcmlwdGlvbj8uc2x1ZyArIHJvdXRlcnMub3Bwb3J0dW5pdHlBZGRdXCI+XG4gICAgICA8aSBjbGFzcz1cImZhIGZhLXBsdXMtY2lyY2xlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAge3sgJ0NybS5PcHBvcnR1bml0aWVzTWVzc2FnZS5BZGRPcHBvcnR1bml0eScgfCB0cmFuc2xvY28gfX1cbiAgICA8L2E+XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2ICpuZ0lmPVwiaXNMb2FkZWQgJiYgIWhhc1N0YWdlcygpXCI+XG4gIDxwdy1uby1kYXRhIFt3aXRoSW1hZ2VdPVwidHJ1ZVwiIFttZXNzYWdlXT1cIidDcm0uU3RhZ2VNZXNzYWdlcy5Ob1N0YWdlQ2F0ZWdvcnlNZXNzYWdlJyB8IHRyYW5zbG9jb1wiPlxuICA8L3B3LW5vLWRhdGE+XG48L2Rpdj5cbjxkaXYgKm5nSWY9XCJpc0xvYWRlZCAgJiYgaGFzU3RhZ2VzKClcIiBjbGFzcz1cImxpc3QtY29udGFpbmVyIGQtZmxleFwiIGNka0Ryb3BMaXN0IFtjZGtEcm9wTGlzdERhdGFdPVwib3Bwb3J0dW5pdGllc0dyb3VwXCIgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wR3JvdXAoJGV2ZW50KVwiPlxuICA8ZGl2IGNka0Ryb3BMaXN0R3JvdXAgY2xhc3M9XCJvcHBvcnR1bml0aWVzLWNvbnRhaW5lciBtYWluLWRpdiBjcm0tYm9hcmQtcHJpbWFyeVwiIFtjbGFzcy5keW5hbWljLWNvbHVtbnMtd3JhcHBlcl09XCJncm91cC5zdGFnZS5jb2xsYXBzZWRcIiBbc3R5bGUuLS1ib3JkZXItY29sb3JdPVwiZ3JvdXAuc3RhZ2UuY29sb3JfY29kZVwiICpuZ0Zvcj1cImxldCBncm91cCBvZiBvcHBvcnR1bml0aWVzR3JvdXA7IGxldCBpID0gaW5kZXhcIiBjZGtEcmFnIFtjZGtEcmFnRGF0YV09XCJncm91cFwiPlxuICAgIDxkaXYgY2xhc3M9XCJvcHBvcnR1bml0aWVzLWJvYXJkLXRpdGxlIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcHktMVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjb2xsYXBzZS1jb2x1bW4tdG9nZ2xlXCI+XG4gICAgICAgIDxpIGNsYXNzPVwiZmFzXCIgW25nQ2xhc3NdPVwieydmYS1hbmdsZS1yaWdodCc6ICFncm91cC5zdGFnZS5jb2xsYXBzZWQsICdmYS1hbmdsZS1kb3duJzogZ3JvdXAuc3RhZ2UuY29sbGFwc2VkfVwiIChrZXlkb3duLmVudGVyKT1cInRvZ2dsZUNvbHVtbigkZXZlbnQsIGdyb3VwKVwiIChjbGljayk9XCJ0b2dnbGVDb2x1bW4oJGV2ZW50LCBncm91cClcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICA8L3NwYW4+XG4gICAgICA8cCBjbGFzcz1cInN0YWdlLW5hbWUgbWItMCBweS0yIHBzLTRcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSByb3VuZGVkLXBpbGwgdGV4dC13aGl0ZSBweC0zXCIgW3N0eWxlLi0tYmFja2dyb3VuZC1jb2xvcl09XCJncm91cC5zdGFnZS5jb2xvcl9jb2RlXCI+e3sgZ3JvdXAuc3RhZ2UubmFtZSB9fTwvc3Bhbj5cbiAgICAgIDwvcD5cbiAgICAgIDxzcGFuIGNsYXNzPVwibXMtYXV0byBtZS00IGFkZC1vcHBvcnR1bml0eS1pY29uXCI+XG4gICAgICAgIDxhIGNsYXNzPVwidGV4dC1zZWNvbmRhcnlcIiBhcmlhLWxhYmVsPVwiQWRkIE9wcG9ydHVuaXR5XCIgW3JvdXRlckxpbmtdPVwiWycvJyArIHN1YnNjcmlwdGlvbj8uc2x1ZyArIHJvdXRlcnMub3Bwb3J0dW5pdHlBZGRdXCIgW3F1ZXJ5UGFyYW1zXT1cInsgc3RhZ2VfaWQ6IGdyb3VwPy5zdGFnZT8uaWQsIGNhdGVnb3J5OiBncm91cC5zdGFnZS5jcm1fb3Bwb3J0dW5pdHlfY2F0ZWdvcnlfaWRzIH1cIj48aSBjbGFzcz1cImZhIGZhLXBsdXMtc3F1YXJlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvYT5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwib3Bwb3J0dW5pdGllcy1saXN0IGl0ZW1zLWNvbnRhaW5lclwiIGNka0Ryb3BMaXN0IFtpZF09XCJncm91cC5zdGFnZS5uYW1lXCIgW2Nka0Ryb3BMaXN0RGF0YV09XCJncm91cC5vcHBvcnR1bml0aWVzXCIgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wSXRlbSgkZXZlbnQpXCIgW2Nka0Ryb3BMaXN0Q29ubmVjdGVkVG9dPVwiZ2V0Q29ubmVjdGVkTGlzdCgpXCIgKHNjcm9sbCk9XCJvbkNvbHVtblNjcm9sbChpKVwiPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBncm91cC5vcHBvcnR1bml0aWVzOyBsZXQgaWR4ID0gaW5kZXhcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm9wcG9ydHVuaXRpZXMtYm94IG1iLTNcIiBjZGtEcmFnIFtjZGtEcmFnRGF0YV09XCJpdGVtXCI+XG4gICAgICAgICAgPHNwYW4gbmdiVG9vbHRpcD1cIkVkaXRcIiBjbGFzcz1cImZsb2F0LWVuZCBlZGl0LWJ1dHRvblwiIFtyb3V0ZXJMaW5rXT1cIlsnLycgKyBzdWJzY3JpcHRpb24/LnNsdWcgKyByb3V0ZXJzLm9wcG9ydHVuaXRpZXMsIGl0ZW0uaWRdXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWVkaXQgZWRpdC1pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8cCBjbGFzcz1cImZ3LWJvbGQgbWItMVwiPnt7IGl0ZW0udGl0bGUgfX08L3A+XG4gICAgICAgICAgPGEgY2xhc3M9XCJtYi0xXCIgW3JvdXRlckxpbmtdPVwiWycvJyArIHN1YnNjcmlwdGlvbj8uc2x1ZyArIHJvdXRlcnMuYWNjb3VudEluZm8sIGl0ZW0/LmNybV9hY2NvdW50X2lkIF1cIj57eyBpdGVtPy5jcm1fYWNjb3VudD8ubmFtZSB9fTwvYT5cbiAgICAgICAgICA8cCBjbGFzcz1cIm1iLTFcIj57eyAoaXRlbT8ub25lX3RpbWVfYW1vdW50IC8gMTAwIHwgY3VycmVuY3kpIH19IE9uZS10aW1lIC8ge3sgKGl0ZW0/Lm1vbnRobHlfYW1vdW50IC8gMTAwIHwgY3VycmVuY3kpIH19IE1SUjwvcD5cbiAgICAgICAgICA8YSAqbmdJZj1cIml0ZW0/Lm93bmVyWzBdPy51c2VyX2F2YXRhclwiIFtyb3V0ZXJMaW5rXT1cIlsnL21lbWJlcnMnLCBpdGVtPy5vd25lclswXT8uc2x1Z11cIj5cbiAgICAgICAgICAgIDxpbWcgYWx0PVwiTWVtYmVyIExvZ29cIiBbc3JjXT1cIml0ZW0/Lm93bmVyWzBdPy51c2VyX2F2YXRhclswXT8udXJsXCIgW3dpZHRoXT1cIiczMCdcIiBjbGFzcz1cInNxdWFyZWRfbG9nbyBmbG9hdC1lbmRcIiBbaGVpZ2h0XT1cIiczMCdcIiAoZXJyb3IpPVwiaGFuZGxlSW1hZ2VFcnJvcigkZXZlbnQsICdhc3NldHMvaW1nL2ljb25zL21hbGUucG5nJylcIiAvPlxuICAgICAgICAgIDwvYT5cbiAgICAgICAgICA8cCBjbGFzcz1cIm1iLTFcIj57eyBpdGVtLnN0YXJ0aW5nX2F0IHwgZGF0ZUZvcm1hdCB9fTwvcD5cbiAgICAgICAgICA8cCBjbGFzcz1cIm1iLTEgYmFkZ2UgYmctd2FybmluZ1wiPnt7IGl0ZW0/LmNybV9vcHBvcnR1bml0eV9zdGFnZT8ubmFtZSB9fTwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCB0ZXh0LWNlbnRlciBtdC0zXCIgKm5nSWY9XCIoaWR4ICsgMSkgJSA1ID09PSAwICYmIGdyb3VwLmlzTG9hZGluZ01vcmVcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLWxvYWRlclwiPlxuICAgICAgICAgICAgPHAtcHJvZ3Jlc3NTcGlubmVyIHN0cm9rZVdpZHRoPVwiMlwiPjwvcC1wcm9ncmVzc1NwaW5uZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9hZGluZy10ZXh0XCI+TG9hZGluZyBvcHBvcnR1bml0aWVzLi4uPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImZvb3RlciBmb290ZXItbGlzdFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImZvb3Rlci1pdGVtXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZm9vdGVyLWxhYmVsXCI+VG90YWwgT25lLVRpbWU6PC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImZvb3Rlci12YWx1ZVwiPnt7IGdyb3VwLnRvdGFscy5vbmVUaW1lIC8gMTAwIHwgY3VycmVuY3kgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXItaXRlbVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImZvb3Rlci1sYWJlbFwiPlRvdGFsIE1SUjo8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZm9vdGVyLXZhbHVlXCI+e3sgZ3JvdXAudG90YWxzLm1yciAvIDEwMCB8IGN1cnJlbmN5IH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyLWl0ZW1cIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmb290ZXItbGFiZWxcIj5Ub3RhbCBDb3VudDo8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZm9vdGVyLXZhbHVlXCI+e3sgZ3JvdXAudG90YWxzLmNvdW50IH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -119,7 +119,9 @@ export class SmartCrmOpportunitiesDetailsComponent extends AppBaseComponent {
119
119
  }
120
120
  /** Function to call accounts */
121
121
  getAllAccounts() {
122
- this.crmService.getAllAccounts(this.subscriptionId).subscribe(response => {
122
+ this.crmService
123
+ .getAllAccounts({ subscription_id: this.subscriptionId })
124
+ .subscribe(response => {
123
125
  this.accounts = response.accounts;
124
126
  this.form.get('crm_account_id').enable();
125
127
  if (this.account_id) {
@@ -332,4 +334,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
332
334
  type: Component,
333
335
  args: [{ selector: 'pw-smart-crm-opportunities-details', template: "<div class=\"me-auto col-xs-6\">\n <a aria-label=\"Navigate to Target\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n <span>{{ 'Crm.OpportunitiesMessage.CrmOpportunity' | transloco }}:\n {{ isLoading ? '': (data?.name ? data?.name : ('Label.AddNew' | transloco)) }}</span>\n </h3>\n</div>\n<div class=\"w-100 text-center mt-3\"\n *ngIf=\"isLoading\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n<div class=\"p-2 mt-3\" *ngIf=\"!isLoading\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <div class=\"col-12 col-sm-8\">\n <pw-input-container [label]=\"'Crm.OpportunitiesMessage.Title' | transloco\"\n name=\"title\"\n [errorMsg]=\"'Crm.OpportunitiesMessage.TitleErrorMessage' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"title\"\n [ngClass]=\"{ 'is-invalid': submitted && f['title'].errors }\" />\n </pw-input-container>\n </div>\n\n <div class=\"ui-fluid skills-modal col-sm-4\">\n <label class=\"mb-2\" for=\"Account\">{{ 'Crm.OpportunitiesMessage.Account' | transloco\n }}<span class=\"text-danger required-icon\">*</span></label>\n <p-autoComplete [suggestions]=\"filteredAccounts\"\n formControlName=\"crm_account_id\"\n dataKey=\"id\"\n field=\"name\"\n [dropdown]=\"true\"\n (completeMethod)=\"searchAccount($event)\"\n styleClass=\"w-100\"\n placeholder=\"Search accounts\"\n [inputStyle]=\"\n submitted && f['crm_account_id'].errors\n ? { border: '1px solid #ff586b' }\n : { border: '1px solid gray' }\n \"\n [multiple]=\"false\">\n </p-autoComplete>\n </div>\n\n <div class=\"ui-fluid skills-modal col-sm-4\">\n <label for=\"message\">{{ 'Crm.OpportunitiesMessage.Contact' | transloco }}</label>\n <p-autoComplete [suggestions]=\"filteredUsers\"\n formControlName=\"crm_contact_id\"\n dataKey=\"id\"\n field=\"displayName\"\n [dropdown]=\"true\"\n (completeMethod)=\"search($event)\"\n styleClass=\"w-100\"\n placeholder=\"Search contact\"\n [multiple]=\"false\">\n </p-autoComplete>\n </div>\n\n <div class=\"col-12 col-md-4\">\n <div class=\"mb-3\">\n <label class=\"info-circle\" for=\"Message\">{{ 'Crm.OpportunitiesMessage.OneTimeAmount' | transloco\n }}<span class=\"text-danger required-icon\">*</span><span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.OpportunitiesMessage.Tooltip.OneTimeAmount' | transloco\n }}</span></label>\n <input type=\"number\"\n numbersOnly\n class=\"form-control\"\n formControlName=\"one_time_amount\"\n id=\"one_time_amount\"\n [ngClass]=\"{ 'is-invalid': submitted && f['one_time_amount'].errors }\" />\n </div>\n </div>\n\n <div class=\"col-12 col-md-4\">\n <div class=\"mb-3\">\n <label class=\"info-circle\" for=\"Message\">{{ 'Crm.OpportunitiesMessage.MonthlyAmount' | transloco\n }}<span class=\"text-danger required-icon\">*</span><span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.OpportunitiesMessage.Tooltip.MonthlyAmount' | transloco\n }}</span></label>\n <input type=\"number\"\n numbersOnly\n class=\"form-control\"\n formControlName=\"monthly_amount\"\n id=\"monthly_amount\"\n [ngClass]=\"{ 'is-invalid': submitted && f['monthly_amount'].errors }\" />\n </div>\n </div>\n\n <!-- Features -->\n <div class=\"mb-3 col-12 col-md-4\">\n <label class=\"info-circle\" for=\"Message\">{{ 'Crm.OpportunitiesMessage.Features' | transloco }}\n <span class=\"tooltiptext gradient-custom-branding feature-tooltip\">{{ 'Crm.OpportunitiesMessage.Tooltip.Feature' | transloco }}</span>\n </label>\n <p-multiSelect [options]=\"featureKeys\"\n placeholder=\"Select feature keys\"\n [showHeader]=\"true\"\n [showToggleAll]=\"true\"\n formControlName=\"feature_keys\"\n appendTo=\"body\"></p-multiSelect>\n </div>\n\n <div class=\"col-12 col-md-4\">\n <div class=\"mb-3\">\n <label class=\"info-circle\" for=\"Message\">{{ 'Crm.OpportunitiesMessage.WinChance' | transloco }}\n <span class=\"text-danger required-icon\">*</span>\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Crm.OpportunitiesMessage.Tooltip.WinChance' | transloco }}\n </span>\n </label>\n <select formControlName=\"win_chances\"\n class=\"form-control form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['win_chances'].errors }\">\n <option *ngFor=\"let option of winChance\"\n [value]=\"option\">\n {{ option }}\n </option>\n </select>\n </div>\n </div>\n\n <div class=\"col-12 col-md-4\">\n <div class=\"mb-3\">\n <label class=\"info-circle\" for=\"Message\">{{ 'Crm.OpportunitiesMessage.Won' | transloco }}\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Crm.OpportunitiesMessage.Tooltip.Won' | transloco }}\n </span>\n </label>\n <input type=\"number\"\n NumberDirective\n class=\"form-control\"\n formControlName=\"won\"\n id=\"won\"\n [ngClass]=\"{ 'is-invalid': submitted && f['won'].errors }\" />\n </div>\n </div>\n\n <div class=\"col-12 col-md-4\">\n <div class=\"mb-3\">\n <label class=\"info-circle mb-2\" for=\"Message\">{{ 'Crm.OpportunitiesMessage.StartingAt' | transloco\n }}<span class=\"text-danger required-icon\">*</span><span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.OpportunitiesMessage.Tooltip.StartingAt' | transloco\n }}</span></label>\n <div class=\"input-group\">\n <input class=\"form-control\"\n placeholder=\"dd-mmm-yyyy\"\n formControlName=\"starting_at\"\n ngbDatepicker\n #d=\"ngbDatepicker\"\n [minDate]=\"{ day: 1, month: 1, year: 1950 }\"\n [maxDate]=\"{ day: 31, month: 12, year: 2050 }\"\n [ngClass]=\"{ 'is-invalid': submitted && f['starting_at'].errors }\" />\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary\"\n (click)=\"d.toggle()\"\n type=\"button\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Crm.OpportunitiesMessage.Tooltip.Category' | transloco\"\n [label]=\"'Crm.OpportunitiesMessage.Categories' | transloco\"\n name=\"crm_opportunity_category_ids\"\n [errorMsg]=\"'Crm.OpportunitiesMessage.CategoryErrorMessage' | transloco\">\n <p-multiSelect [options]=\"categories\"\n (onChange)=\"onCategoryChange($event)\"\n formControlName=\"crm_opportunity_category_ids\"\n appendTo=\"body\"></p-multiSelect>\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-sm-4\"\n *ngIf=\"TrialStartField\">\n <pw-input-container [label]=\"'Crm.OpportunitiesMessage.TrialStartAt' | transloco\"\n name=\"trial_start_at\"\n [errorMsg]=\"'Crm.OpportunitiesMessage.TrialStartAt' | transloco\">\n <div class=\"input-group\">\n <input class=\"form-control\"\n placeholder=\"dd-mmm-yyyy\"\n formControlName=\"trial_start_at\"\n ngbDatepicker\n #c=\"ngbDatepicker\"\n [minDate]=\"{ day: 1, month: 1, year: 1950 }\"\n [maxDate]=\"{ day: 31, month: 12, year: 2050 }\" />\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary\"\n (click)=\"c.toggle()\"\n type=\"button\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-sm-4\"\n *ngIf=\"LostField\">\n <pw-input-container [label]=\"'Crm.OpportunitiesMessage.LostReason' | transloco\"\n name=\"lost_reason\"\n [errorMsg]=\"'Crm.OpportunitiesMessage.LostReason' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"lost_reason\"\n id=\"lost_reason\"\n [ngClass]=\"{ 'is-invalid': submitted && f['lost_reason'].errors }\" />\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-sm-4\"\n *ngIf=\"WonField\">\n <pw-input-container [label]=\"'Crm.OpportunitiesMessage.WonReason' | transloco\"\n name=\"won_reason\"\n [errorMsg]=\"'Crm.OpportunitiesMessage.WonReason' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"won_reason\"\n id=\"won_reason\"\n [ngClass]=\"{ 'is-invalid': submitted && f['won_reason'].errors }\" />\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-md-4\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Crm.OpportunitiesMessage.Tooltip.StageOpportunity' | transloco\"\n [label]=\"'Crm.OpportunitiesMessage.Stage' | transloco\"\n name=\"crm_opportunity_stage_id\"\n errorMsg=\"Please select stage\">\n <select class=\"form-select\"\n formControlName=\"crm_opportunity_stage_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['crm_opportunity_stage_id'].errors }\">\n <option value=\"\">Select Stage</option>\n <option *ngFor=\"let option of stages\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-sm-12\">\n <pw-input-container [label]=\"'Crm.OpportunitiesMessage.Description' | transloco\"\n name=\"description\"\n [errorMsg]=\"'Crm.OpportunitiesMessage.DescriptionErrorMessage' | transloco\">\n <textarea rows=\"10\"\n type=\"text\"\n class=\"form-control description-field\"\n formControlName=\"description\"\n id=\"description\"\n [ngClass]=\"{ 'is-invalid': submitted && f['description'].errors }\"></textarea>\n </pw-input-container>\n </div>\n <div class=\"col-12 text-end mt-3\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"buttonBusy\"\n class=\"btn btn-primary\"\n [disabled]=\"form.invalid\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </form>\n</div>\n", styles: [".vertical-bottom{vertical-align:text-bottom}.cancel-button{float:right}.feature-tooltip{margin-right:-15px}\n"] }]
334
336
  }], ctorParameters: () => [{ type: i0.Injector }, { type: i1.CrmService }] });
335
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtY3JtLW9wcG9ydHVuaXRpZXMtZGV0YWlscy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NtYXJ0LWNybS9zcmMvbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0tb3Bwb3J0dW5pdGllcy9zbWFydC1jcm0tb3Bwb3J0dW5pdGllcy1saXN0L3NtYXJ0LWNybS1vcHBvcnR1bml0aWVzLWRldGFpbHMvc21hcnQtY3JtLW9wcG9ydHVuaXRpZXMtZGV0YWlscy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NtYXJ0LWNybS9zcmMvbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0tb3Bwb3J0dW5pdGllcy9zbWFydC1jcm0tb3Bwb3J0dW5pdGllcy1saXN0L3NtYXJ0LWNybS1vcHBvcnR1bml0aWVzLWRldGFpbHMvc21hcnQtY3JtLW9wcG9ydHVuaXRpZXMtZGV0YWlscy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFHdkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUd4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7Ozs7OztBQVl6RCxNQUFNLE9BQU8scUNBQ1QsU0FBUSxnQkFBZ0I7SUEwRHhCLG9DQUFvQztJQUNwQyxJQUFJLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQzlCLENBQUM7SUFFRCxZQUNJLFFBQWtCLEVBQ1Ys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Q1AsQ0FBQztJQUVRLFdBQVc7UUFDaEIsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3hCLENBQUM7K0dBalhRLHFDQUFxQzttR0FBckMscUNBQXFDLGlHQ3BCbEQsOG9YQWlSQTs7NEZEN1BhLHFDQUFxQztrQkFMakQsU0FBUzsrQkFDSSxvQ0FBb0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdG9yLCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE5nYkRhdGVTdHJ1Y3QgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5pbXBvcnQgeyBBcHBTbWFydENybSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NoYXJlZC9tb2RlbHMvc21hcnQtY3JtLm1vZGVsJztcbmltcG9ydCB7IENybVNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2Uvc21hcnQtY3JtLXNoYXJlZCc7XG5cbmltcG9ydCB7IFVzZXIgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXV0aWxpdGllcyc7XG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHBvc2l3aXNlL2FwcC1iYXNlLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2hlbHBlci1zZXJ2aWNlJztcbmltcG9ydCB7XG4gICAgQ3JtT3Bwb3J0dW5pdHlEYXRhLFxuICAgIENybW9wcG9ydHVuaXR5Q29udGFjdFxufSBmcm9tICdsaWJzL3NtYXJ0LWNybS9zcmMvbGliL3NoYXJlZC9pbnRlcmZhY2Uvc21hcnQtY3JtLW1vZHVsZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ3JtQWNjb3VudCB9IGZyb20gJ2xpYnMvc21hcnQtY3JtL3NyYy9saWIvc2hhcmVkL2ludGVyZmFjZS9jcm0tYWNjb3VudC5pbnRlcmZhY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3B3LXNtYXJ0LWNybS1vcHBvcnR1bml0aWVzLWRldGFpbHMnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zbWFydC1jcm0tb3Bwb3J0dW5pdGllcy1kZXRhaWxzLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zbWFydC1jcm0tb3Bwb3J0dW5pdGllcy1kZXRhaWxzLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgU21hcnRDcm1PcHBvcnR1bml0aWVzRGV0YWlsc0NvbXBvbmVudFxuICAgIGV4dGVuZHMgQXBwQmFzZUNvbXBvbmVudFxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3lcbntcbiAgICBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xuXG4gICAgdXNlcjogVXNlcjtcblxuICAgIGlkOiBudW1iZXI7XG5cbiAgICBvbkVkaXQgPSBmYWxzZTtcblxuICAgIGRhdGE7XG5cbiAgICBzdWJtaXR0ZWQgPSBmYWxzZTtcbiAgICBidXR0b25CdXN5ID0gZmFsc2U7XG4gICAgaXNMb2FkaW5nID0gdHJ1ZTtcblxuICAgIHNlYXJjaFRleHQgPSAnJztcblxuICAgIHN1YnNjcmlwdGlvbklkOiBudW1iZXI7XG5cbiAgICBhbGxDb250YWN0czogQ3Jtb3Bwb3J0dW5pdHlDb250YWN0W10gPSBbXTtcblxuICAgIGNvbnRhY3RJZDogbnVtYmVyO1xuXG4gICAgcHJpdmF0ZSBvcHBvcnR1bml0eURhdGE6IENybU9wcG9ydHVuaXR5RGF0YTtcblxuICAgIGZpbHRlcmVkVXNlcnM6IENybW9wcG9ydHVuaXR5Q29udGFjdFtdID0gW107XG5cbiAgICBjYW5jZWxsZWRUcnVlOiBib29sZWFuO1xuXG4gICAgd2luQ2hhbmNlID0gWzAsIDEwLCAyMCwgMzAsIDQwLCA1MCwgNjAsIDcwLCA4MCwgOTAsIDEwMF07XG5cbiAgICBvcHBvcnR1bml0aWVzID0gW107XG5cbiAgICBXb25GaWVsZCA9IGZhbHNlO1xuXG4gICAgTG9zdEZpZWxkID0gZmFsc2U7XG5cbiAgICBpc0NvbnRhY3RDaGFuZ2UgPSBmYWxzZTtcbiAgICBUcmlhbFN0YXJ0RmllbGQgPSBmYWxzZTtcblxuICAgIGFjY291bnRzID0gW107XG5cbiAgICBmaWx0ZXJlZEFjY291bnRzOiBDcm1BY2NvdW50W107XG5cbiAgICBhY2NvdW50X2lkOiBudW1iZXI7XG5cbiAgICBtYXN0ZXJTdGFnZXMgPSBbXTtcblxuICAgIHN0YWdlcyA9IFtdO1xuXG4gICAgY2F0ZWdvcmllcyA9IFtdO1xuICAgIGFjY291bnRWYWx1ZUNvdW50ID0gMDtcbiAgICBjdXJyZW50QWNjb3VudElkO1xuXG4gICAgZmVhdHVyZUtleXMgPSBbXTtcblxuICAgIC8qKiBGdW5jdGlvbiB0byBnZXQgZm9ybSBjb250cm9scyAqL1xuICAgIGdldCBmKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmNvbnRyb2xzO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgY3JtU2VydmljZTogQ3JtU2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgICAgIHRoaXMuZm9ybSA9IEFwcFNtYXJ0Q3JtLmdldE9wcG9ydHVuaXRpZXNJbmZvRm9ybSgpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnRvZ2dsZVN0YWdlRmllbGQoKTtcbiAgICAgICAgdGhpcy5jb250YWN0SWQgPSBOdW1iZXIodGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtTWFwLmdldCgnY29udGFjdF9pZCcpKTtcbiAgICAgICAgdGhpcy5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICAgICAgdGhpcy5pZCA9IE51bWJlcihkYXRhWydpZCddKTtcbiAgICAgICAgICAgIGlmIChOdW1iZXIoZGF0YVsnaWQnXSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldEFjY291bnRDb250YWN0cyh0cnVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdjcm1fYWNjb3VudF9pZCcpLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hY2NvdW50VmFsdWVDb3VudCA+IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2NybV9jb250YWN0X2lkJykuZGlzYWJsZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnY3JtX2NvbnRhY3RfaWQnKS5yZXNldCgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hY2NvdW50VmFsdWVDb3VudCArPSAxO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRBY2NvdW50Q29udGFjdHMoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29udGFjdElkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRBY2NvdW50Q29udGFjdHMoZmFsc2UpO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2NybV9hY2NvdW50X2lkJykudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmFjY291bnRWYWx1ZUNvdW50ID4gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnY3JtX2NvbnRhY3RfaWQnKS5kaXNhYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdjcm1fY29udGFjdF9pZCcpLnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFjY291bnRWYWx1ZUNvdW50ICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzQ29udGFjdENoYW5nZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEFjY291bnRDb250YWN0cyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2NybV9jb250YWN0X2lkJykuZGlzYWJsZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2NybV9hY2NvdW50X2lkJykuZGlzYWJsZSgpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnY3JtX2FjY291bnRfaWQnKS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEFjY291bnRDb250YWN0cyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnY3JtX2NvbnRhY3RfaWQnKS5kaXNhYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2NybV9jb250YWN0X2lkJykucmVzZXQoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZ2V0VXNlclN1YnNjcmlwdGlvbklkKCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uSWQgPSByZXNwb25zZTtcbiAgICAgICAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbklkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRBdmFpbGFibGVPcHBvcnR1bml0eVN0YWdlcyh0aGlzLnN1YnNjcmlwdGlvbklkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmdldEFsbE9wcG9ydHVuaXR5Q2F0ZWdvcmllcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5mb3JtLmdldCgnY3JtX2NvbnRhY3RfaWQnKS5zZXRWYWx1ZShudWxsKTtcbiAgICAgICAgdGhpcy5hY2NvdW50X2lkID0gTnVtYmVyKHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbU1hcC5nZXQoJ2FjY291bnRfaWQnKSk7XG4gICAgICAgIHRoaXMuZ2V0VXNlckluZm8oKTtcbiAgICAgICAgdGhpcy5nZXRBbGxBY2NvdW50cygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0QXZhaWxhYmxlT3Bwb3J0dW5pdHlTdGFnZXMoaWQpIHtcbiAgICAgICAgdGhpcy5jcm1TZXJ2aWNlLmdldEF2YWlsYWJsZU9wcG9ydHVuaXR5U3RhZ2VzKGlkKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgIHRoaXMubWFzdGVyU3RhZ2VzID0gcmVzPy5hdmFpbGFibGVfY3JtX29wcG9ydHVuaXR5X3N0YWdlcyB8fCBbXTtcbiAgICAgICAgICAgIHRoaXMuc3RhZ2VzID0gcmVzPy5hdmFpbGFibGVfY3JtX29wcG9ydHVuaXR5X3N0YWdlcyB8fCBbXTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gLyoqIEZ1bmN0aW9uIHRvIGdldCB1c2VyIGluZm8gKi9cbiAgICBwcml2YXRlIGdldFVzZXJJbmZvKCkge1xuICAgICAgICB0aGlzLnVzZXJTdG9yZSgpLnN1YnNjcmliZSh1c2VyID0+IHtcbiAgICAgICAgICAgIHRoaXMudXNlciA9IHVzZXI7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBGdW5jdGlvbiB0byBjYWxsIGFjY291bnRzICovXG4gICAgcHJpdmF0ZSBnZXRBbGxBY2NvdW50cygpIHtcbiAgICAgICAgdGhpcy5jcm1TZXJ2aWNlLmdldEFsbEFjY291bnRzKHRoaXMuc3Vic2NyaXB0aW9uSWQpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFjY291bnRzID0gcmVzcG9uc2UuYWNjb3VudHM7XG4gICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdjcm1fYWNjb3VudF9pZCcpLmVuYWJsZSgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuYWNjb3VudF9pZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFjY291bnREYXRhID0gdGhpcy5hY2NvdW50cy5maW5kKHggPT4geC5pZCA9PT0gdGhpcy5hY2NvdW50X2lkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdjcm1fYWNjb3VudF9pZCcpLnNldFZhbHVlKGFjY291bnREYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIGNhbGwgY29udGFjdHMgKi9cblxuICAgIHByaXZhdGUgZ2V0QWNjb3VudENvbnRhY3RzKGlzQ2hhbmdlID0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5nZXRVc2VyU3Vic2NyaXB0aW9uSWQoKS5zdWJzY3JpYmUoaWQgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25JZCA9IGlkO1xuICAgICAgICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uSWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNybVNlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgLmdldEFjY291bnRDb250YWN0cyhcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2NybV9hY2NvdW50X2lkJykudmFsdWUuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbklkLFxuICAgICAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2NybV9jb250YWN0X2lkJykuZW5hYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFsbENvbnRhY3RzID0gcmVzcG9uc2UuY29udGFjdHM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFsbENvbnRhY3RzLmZvckVhY2gobWVtYmVyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1iZXIuZGlzcGxheU5hbWUgPSBgJHttZW1iZXIuZmlyc3RfbmFtZSB8fCAnJ30gJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtYmVyLmxhc3RfbmFtZSB8fCAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gLSAke21lbWJlci5lbWFpbH1gLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRWRpdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNDaGFuZ2UgJiYgdGhpcy5nZXRPcHBvcnR1bml0eURldGFpbHModGhpcy5pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25FZGl0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250YWN0SWQgJiYgIXRoaXMuaXNDb250YWN0Q2hhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGFjdERhdGEgPSB0aGlzLmFsbENvbnRhY3RzLmZpbmQoeCA9PiB4LmlkID09PSB0aGlzLmNvbnRhY3RJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnY3JtX2NvbnRhY3RfaWQnKS5zZXRWYWx1ZShjb250YWN0RGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnY3JtX2FjY291bnRfaWQnKS5zZXRWYWx1ZShjb250YWN0RGF0YT8uY3JtX2FjY291bnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYWNjb3VudF9pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWxsQ29udGFjdHMgPSB0aGlzLmFsbENvbnRhY3RzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9PiB4LmNybV9hY2NvdW50X2lkID09PSB0aGlzLmFjY291bnRfaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIGdldCBvcHBvcnR1bml0aWVzIGRhdGEgKi9cbiAgICBwcml2YXRlIGdldE9wcG9ydHVuaXR5RGV0YWlscyhpZDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuY3JtU2VydmljZS5nZXRPcHBvcnR1bml0eURldGFpbHModGhpcy5zdWJzY3JpcHRpb25JZCwgaWQpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5vcHBvcnR1bml0eURhdGEgPSByZXNwb25zZTtcbiAgICAgICAgICAgIGxldCBzdGFydGluZ0F0T2JqOiBOZ2JEYXRlU3RydWN0O1xuICAgICAgICAgICAgbGV0IHRyaWFsU3RhcnRBdE9iajogTmdiRGF0ZVN0cnVjdDtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGFydGluZ19hdCkge1xuICAgICAgICAgICAgICAgIHN0YXJ0aW5nQXRPYmogPSB7XG4gICAgICAgICAgICAgICAgICAgIHllYXI6IE51bWJlcihyZXNwb25zZS5zdGFydGluZ19hdC5zdWJzdHJpbmcoMCwgNCkpLFxuICAgICAgICAgICAgICAgICAgICBtb250aDogTnVtYmVyKHJlc3BvbnNlLnN0YXJ0aW5nX2F0LnN1YnN0cmluZyg1LCA3KSksXG4gICAgICAgICAgICAgICAgICAgIGRheTogTnVtYmVyKHJlc3BvbnNlLnN0YXJ0aW5nX2F0LnN1YnN0cmluZyg4LCAxMCkpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXNwb25zZS50cmlhbF9zdGFydF9hdCkge1xuICAgICAgICAgICAgICAgIHRyaWFsU3RhcnRBdE9iaiA9IHtcbiAgICAgICAgICAgICAgICAgICAgeWVhcjogTnVtYmVyKHJlc3BvbnNlLnRyaWFsX3N0YXJ0X2F0LnN1YnN0cmluZygwLCA0KSksXG4gICAgICAgICAgICAgICAgICAgIG1vbnRoOiBOdW1iZXIocmVzcG9uc2UudHJpYWxfc3RhcnRfYXQuc3Vic3RyaW5nKDUsIDcpKSxcbiAgICAgICAgICAgICAgICAgICAgZGF5OiBOdW1iZXIocmVzcG9uc2UudHJpYWxfc3RhcnRfYXQuc3Vic3RyaW5nKDgsIDEwKSlcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YWdlID09PSAnVHJhaWxpbmcnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5UcmlhbFN0YXJ0RmllbGQgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLldvbkZpZWxkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhZ2UgPT09ICdXb24nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5Mb3N0RmllbGQgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLkxvc3RGaWVsZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YWdlID09PSAnTG9zdCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLldvbkZpZWxkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5Xb25GaWVsZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUodGhpcy5vcHBvcnR1bml0eURhdGEpO1xuICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgICAgIHN0YXJ0aW5nX2F0OiBzdGFydGluZ0F0T2JqLFxuICAgICAgICAgICAgICAgIHRyaWFsX3N0YXJ0X2F0OiB0cmlhbFN0YXJ0QXRPYmosXG4gICAgICAgICAgICAgICAgb25lX3RpbWVfYW1vdW50OiByZXNwb25zZS5vbmVfdGltZV9hbW91bnQgLyAxMDAsXG4gICAgICAgICAgICAgICAgbW9udGhseV9hbW91bnQ6IHJlc3BvbnNlLm1vbnRobHlfYW1vdW50IC8gMTAwXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5hbGxDb250YWN0cy5mb3JFYWNoKGNvbnRhY3QgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wcG9ydHVuaXR5RGF0YS5jcm1fY29udGFjdF9pZCA9PT0gY29udGFjdC5pZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdjcm1fY29udGFjdF9pZCcpLnNldFZhbHVlKGNvbnRhY3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5hY2NvdW50cy5mb3JFYWNoKGFjY291bnQgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wcG9ydHVuaXR5RGF0YS5jcm1fYWNjb3VudF9pZCA9PT0gYWNjb3VudC5pZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdjcm1fYWNjb3VudF9pZCcpLnNldFZhbHVlKGFjY291bnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogRnVuY3Rpb24gdG8gZXhlY3V0ZSBvbiBzdWJtaXQgb3Bwb3J0dW5pdGllcyBmb3JtICovXG4gICAgb25TYXZlKCkge1xuICAgICAgICB0aGlzLnN1Ym1pdHRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuYnV0dG9uQnVzeSA9IHRydWU7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7IC4uLnRoaXMuZm9ybS52YWx1ZSB9O1xuICAgICAgICBkYXRhLm9uZV90aW1lX2Ftb3VudCAqPSAxMDA7XG4gICAgICAgIGRhdGEubW9udGhseV9hbW91bnQgKj0gMTAwO1xuICAgICAgICBpZiAoZGF0YS5jcm1fY29udGFjdF9pZCkge1xuICAgICAgICAgICAgZGF0YS5jcm1fY29udGFjdF9pZCA9IGRhdGEuY3JtX2NvbnRhY3RfaWQuaWQ7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YS5jcm1fYWNjb3VudF9pZCA9IGRhdGEuY3JtX2FjY291bnRfaWQuaWQ7XG4gICAgICAgIGRhdGEuc3RhcnRpbmdfYXQgPSBIZWxwZXJTZXJ2aWNlLmRhdGVGb3JtYXQodGhpcy5mb3JtLmdldCgnc3RhcnRpbmdfYXQnKS52YWx1ZSk7XG4gICAgICAgIGRhdGEudHJpYWxfc3RhcnRfYXQgPSBIZWxwZXJTZXJ2aWNlLmRhdGVGb3JtYXQodGhpcy5mb3JtLmdldCgndHJpYWxfc3RhcnRfYXQnKS52YWx1ZSk7XG4gICAgICAgIGNvbnN0IHN1YiQgPSB0aGlzLmlkXG4gICAgICAgICAgICA/IHRoaXMuY3JtU2VydmljZS51cGRhdGVPcHBvcnR1bml0aWVzKHRoaXMuc3Vic2NyaXB0aW9uSWQsIHRoaXMuaWQsIGRhdGEpXG4gICAgICAgICAgICA6IHRoaXMuY3JtU2VydmljZS5wb3N0T3Bwb3J0dW5pdGllcyh0aGlzLnN1YnNjcmlwdGlvbklkLCBkYXRhKTtcbiAgICAgICAgc3ViJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKFxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlKCdDcm0uT3Bwb3J0dW5pdGllc01lc3NhZ2UuVXBkYXRlZE1lc3NhZ2UnKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuYmFjaygpO1xuICAgICAgICB9KS5hZGQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdWJtaXR0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uQnVzeSA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogRnVuY3Rpb24gdG8gZ2V0IGFsbCBjYXRlZ29yaWVzICovXG4gICAgcHJpdmF0ZSBnZXRBbGxPcHBvcnR1bml0eUNhdGVnb3JpZXMoKSB7XG4gICAgICAgIHRoaXMuY3JtU2VydmljZS5nZXRBbGxPcHBvcnR1bml0eUNhdGVnb3JpZXModGhpcy5zdWJzY3JpcHRpb25JZCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSByZXNwb25zZT8uY3JtX29wcG9ydHVuaXR5X2NhdGVnb3JpZXMgfHwgW107XG4gICAgICAgICAgICBjYXRlZ29yaWVzLmZvckVhY2godmFsID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogdmFsLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuaWRcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMuY2F0ZWdvcmllcy5wdXNoKGRhdGEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmdldFZhbHVlcygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFZhbHVlcygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlkKSB7XG4gICAgICAgICAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmICgnc3RhZ2VfaWQnIGluIHJlcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFnZUlkID0gTnVtYmVyKHJlc1snc3RhZ2VfaWQnXSk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjYXRlZ29yeTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZXNbJ2NhdGVnb3J5J10gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeSA9IHJlc1snY2F0ZWdvcnknXS5zcGxpdCgnLCcpLm1hcCh4ID0+IE51bWJlcih4KSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeSA9IHJlc1snY2F0ZWdvcnknXT8ubWFwKHggPT4gTnVtYmVyKHgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBjcm1fb3Bwb3J0dW5pdHlfc3RhZ2VfaWQ6IHN0YWdlSWQgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgICAgICBjcm1fb3Bwb3J0dW5pdHlfY2F0ZWdvcnlfaWRzOiBjYXRlZ29yeT8ubGVuZ3RoID8gY2F0ZWdvcnkgOiAnJ1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNlYXJjaChldmVudCkge1xuICAgICAgICBsZXQgZGF0YSA9IFtdO1xuICAgICAgICBpZiAoZXZlbnQucXVlcnkpIHtcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLmFsbENvbnRhY3RzLmZpbHRlcigoeDogQ3Jtb3Bwb3J0dW5pdHlDb250YWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHguZGlzcGxheU5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhldmVudC5xdWVyeS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hbGxDb250YWN0cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGRhdGEucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlsdGVyZWRVc2VycyA9IGRhdGE7XG4gICAgfVxuXG4gICAgc2VhcmNoQWNjb3VudChldmVudCkge1xuICAgICAgICBsZXQgZGF0YSA9IFtdO1xuICAgICAgICBpZiAoZXZlbnQucXVlcnkpIHtcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLmFjY291bnRzLmZpbHRlcigoeDogQ3JtQWNjb3VudCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB4Lm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhldmVudC5xdWVyeS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hY2NvdW50cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGRhdGEucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlsdGVyZWRBY2NvdW50cyA9IGRhdGE7XG4gICAgfVxuXG4gICAgb25DYXRlZ29yeUNoYW5nZShldmVudCkge1xuICAgICAgICB0aGlzLnN0YWdlcyA9IFsuLi50aGlzLm1hc3RlclN0YWdlc107XG4gICAgICAgIGlmIChldmVudC52YWx1ZT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnN0YWdlcyA9IHRoaXMuc3RhZ2VzLmZpbHRlcih4ID0+XG4gICAgICAgICAgICAgICAgeC5jcm1fb3Bwb3J0dW5pdHlfY2F0ZWdvcnlfaWRzPy5zb21lKGl0ZW0gPT4gZXZlbnQudmFsdWUuaW5jbHVkZXMoaXRlbSkpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0b2dnbGVTdGFnZUZpZWxkKCkge1xuICAgICAgICB0aGlzLmZvcm0uZ2V0KCdjcm1fb3Bwb3J0dW5pdHlfc3RhZ2VfaWQnKS5kaXNhYmxlKCk7XG4gICAgICAgIHRoaXMuZm9ybS5nZXQoJ2NybV9vcHBvcnR1bml0eV9jYXRlZ29yeV9pZHMnKS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMuZm9ybS5nZXQoJ2NybV9vcHBvcnR1bml0eV9jYXRlZ29yeV9pZHMnKS52YWx1ZTtcbiAgICAgICAgICAgIGlmICghdmFsPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdjcm1fb3Bwb3J0dW5pdHlfc3RhZ2VfaWQnKS5kaXNhYmxlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2NybV9vcHBvcnR1bml0eV9zdGFnZV9pZCcpLmVuYWJsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibWUtYXV0byBjb2wteHMtNlwiPlxuICA8YSBhcmlhLWxhYmVsPVwiTmF2aWdhdGUgdG8gVGFyZ2V0XCJcbiAgICAoY2xpY2spPVwiYmFjaygpXCJcbiAgICBjbGFzcz1cInByZXZpb3VzXCI+PGkgY2xhc3M9XCJmYSBmYS1hcnJvdy1hbHQtY2lyY2xlLWxlZnRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPlxuICA8aDMgY2xhc3M9XCJtLXN1YmhlYWRlcl9fdGl0bGUgbS1zdWJoZWFkZXJfX3RpdGxlLS1zZXBhcmF0b3JcIj5cbiAgICA8c3Bhbj57eyAnQ3JtLk9wcG9ydHVuaXRpZXNNZXNzYWdlLkNybU9wcG9ydHVuaXR5JyB8IHRyYW5zbG9jbyB9fTpcbiAgICAgIHt7IGlzTG9hZGluZyA/ICcnOiAoZGF0YT8ubmFtZSA/IGRhdGE/Lm5hbWUgOiAoJ0xhYmVsLkFkZE5ldycgfCB0cmFuc2xvY28pKSB9fTwvc3Bhbj5cbiAgPC9oMz5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cInctMTAwIHRleHQtY2VudGVyIG10LTNcIlxuICAqbmdJZj1cImlzTG9hZGluZ1wiPlxuICA8cC1wcm9ncmVzc1NwaW5uZXIgc3Ryb2tlV2lkdGg9XCIyXCI+IDwvcC1wcm9ncmVzc1NwaW5uZXI+XG4gIDwvZGl2PlxuPGRpdiBjbGFzcz1cInAtMiBtdC0zXCIgKm5nSWY9XCIhaXNMb2FkaW5nXCI+XG4gIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiXG4gICAgKG5nU3VibWl0KT1cIm9uU2F2ZSgpXCI+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tOFwiPlxuICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQ3JtLk9wcG9ydHVuaXRpZXNNZXNzYWdlLlRpdGxlJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgbmFtZT1cInRpdGxlXCJcbiAgICAgICAgICBbZXJyb3JNc2ddPVwiJ0NybS5PcHBvcnR1bml0aWVzTWVzc2FnZS5UaXRsZUVycm9yTWVzc2FnZScgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidGl0bGVcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWyd0aXRsZSddLmVycm9ycyB9XCIgLz5cbiAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cInVpLWZsdWlkIHNraWxscy1tb2RhbCBjb2wtc20tNFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJtYi0yXCIgZm9yPVwiQWNjb3VudFwiPnt7ICdDcm0uT3Bwb3J0dW5pdGllc01lc3NhZ2UuQWNjb3VudCcgfCB0cmFuc2xvY29cbiAgICAgICAgICAgICAgICAgICAgfX08c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyIHJlcXVpcmVkLWljb25cIj4qPC9zcGFuPjwvbGFiZWw+XG4gICAgICAgIDxwLWF1dG9Db21wbGV0ZSBbc3VnZ2VzdGlvbnNdPVwiZmlsdGVyZWRBY2NvdW50c1wiXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY3JtX2FjY291bnRfaWRcIlxuICAgICAgICAgIGRhdGFLZXk9XCJpZFwiXG4gICAgICAgICAgZmllbGQ9XCJuYW1lXCJcbiAgICAgICAgICBbZHJvcGRvd25dPVwidHJ1ZVwiXG4gICAgICAgICAgKGNvbXBsZXRlTWV0aG9kKT1cInNlYXJjaEFjY291bnQoJGV2ZW50KVwiXG4gICAgICAgICAgc3R5bGVDbGFzcz1cInctMTAwXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBhY2NvdW50c1wiXG4gICAgICAgICAgW2lucHV0U3R5bGVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJtaXR0ZWQgJiYgZlsnY3JtX2FjY291bnRfaWQnXS5lcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHsgYm9yZGVyOiAnMXB4IHNvbGlkICNmZjU4NmInIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHsgYm9yZGVyOiAnMXB4IHNvbGlkIGdyYXknIH1cbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICBbbXVsdGlwbGVdPVwiZmFsc2VcIj5cbiAgICAgICAgPC9wLWF1dG9Db21wbGV0ZT5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwidWktZmx1aWQgc2tpbGxzLW1vZGFsIGNvbC1zbS00XCI+XG4gICAgICAgIDxsYWJlbCBmb3I9XCJtZXNzYWdlXCI+e3sgJ0NybS5PcHBvcnR1bml0aWVzTWVzc2FnZS5Db250YWN0JyB8IHRyYW5zbG9jbyB9fTwvbGFiZWw+XG4gICAgICAgIDxwLWF1dG9Db21wbGV0ZSBbc3VnZ2VzdGlvbnNdPVwiZmlsdGVyZWRVc2Vyc1wiXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY3JtX2NvbnRhY3RfaWRcIlxuICAgICAgICAgIGRhdGFLZXk9XCJpZFwiXG4gICAgICAgICAgZmllbGQ9XCJkaXNwbGF5TmFtZVwiXG4gICAgICAgICAgW2Ryb3Bkb3duXT1cInRydWVcIlxuICAgICAgICAgIChjb21wbGV0ZU1ldGhvZCk9XCJzZWFyY2goJGV2ZW50KVwiXG4gICAgICAgICAgc3R5bGVDbGFzcz1cInctMTAwXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBjb250YWN0XCJcbiAgICAgICAgICBbbXVsdGlwbGVdPVwiZmFsc2VcIj5cbiAgICAgICAgPC9wLWF1dG9Db21wbGV0ZT5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC00XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaW5mby1jaXJjbGVcIiBmb3I9XCJNZXNzYWdlXCI+e3sgJ0NybS5PcHBvcnR1bml0aWVzTWVzc2FnZS5PbmVUaW1lQW1vdW50JyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICAgICAgfX08c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyIHJlcXVpcmVkLWljb25cIj4qPC9zcGFuPjxzcGFuIGNsYXNzPVwidG9vbHRpcHRleHQgZ3JhZGllbnQtY3VzdG9tLWJyYW5kaW5nXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ3JtLk9wcG9ydHVuaXRpZXNNZXNzYWdlLlRvb2x0aXAuT25lVGltZUFtb3VudCcgfCB0cmFuc2xvY29cbiAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPjwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgbnVtYmVyc09ubHlcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm9uZV90aW1lX2Ftb3VudFwiXG4gICAgICAgICAgICBpZD1cIm9uZV90aW1lX2Ftb3VudFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ29uZV90aW1lX2Ftb3VudCddLmVycm9ycyB9XCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtNFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImluZm8tY2lyY2xlXCIgZm9yPVwiTWVzc2FnZVwiPnt7ICdDcm0uT3Bwb3J0dW5pdGllc01lc3NhZ2UuTW9udGhseUFtb3VudCcgfCB0cmFuc2xvY29cbiAgICAgICAgICAgICAgICAgICAgICAgIH19PHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlciByZXF1aXJlZC1pY29uXCI+Kjwvc3Bhbj48c3BhbiBjbGFzcz1cInRvb2x0aXB0ZXh0IGdyYWRpZW50LWN1c3RvbS1icmFuZGluZ1wiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NybS5PcHBvcnR1bml0aWVzTWVzc2FnZS5Ub29sdGlwLk1vbnRobHlBbW91bnQnIHwgdHJhbnNsb2NvXG4gICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj48L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgIG51bWJlcnNPbmx5XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJtb250aGx5X2Ftb3VudFwiXG4gICAgICAgICAgICBpZD1cIm1vbnRobHlfYW1vdW50XCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnbW9udGhseV9hbW91bnQnXS5lcnJvcnMgfVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gRmVhdHVyZXMgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwibWItMyBjb2wtMTIgY29sLW1kLTRcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiaW5mby1jaXJjbGVcIiBmb3I9XCJNZXNzYWdlXCI+e3sgJ0NybS5PcHBvcnR1bml0aWVzTWVzc2FnZS5GZWF0dXJlcycgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvb2x0aXB0ZXh0IGdyYWRpZW50LWN1c3RvbS1icmFuZGluZyBmZWF0dXJlLXRvb2x0aXBcIj57eyAnQ3JtLk9wcG9ydHVuaXRpZXNNZXNzYWdlLlRvb2x0aXAuRmVhdHVyZScgfCB0cmFuc2xvY28gfX08L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxwLW11bHRpU2VsZWN0IFtvcHRpb25zXT1cImZlYXR1cmVLZXlzXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBmZWF0dXJlIGtleXNcIlxuICAgICAgICAgIFtzaG93SGVhZGVyXT1cInRydWVcIlxuICAgICAgICAgIFtzaG93VG9nZ2xlQWxsXT1cInRydWVcIlxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImZlYXR1cmVfa2V5c1wiXG4gICAgICAgICAgYXBwZW5kVG89XCJib2R5XCI+PC9wLW11bHRpU2VsZWN0PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJpbmZvLWNpcmNsZVwiIGZvcj1cIk1lc3NhZ2VcIj57eyAnQ3JtLk9wcG9ydHVuaXRpZXNNZXNzYWdlLldpbkNoYW5jZScgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXIgcmVxdWlyZWQtaWNvblwiPio8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvb2x0aXB0ZXh0IGdyYWRpZW50LWN1c3RvbS1icmFuZGluZ1wiPnt7ICdDcm0uT3Bwb3J0dW5pdGllc01lc3NhZ2UuVG9vbHRpcC5XaW5DaGFuY2UnIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8c2VsZWN0IGZvcm1Db250cm9sTmFtZT1cIndpbl9jaGFuY2VzXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tc2VsZWN0XCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnd2luX2NoYW5jZXMnXS5lcnJvcnMgfVwiPlxuICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHdpbkNoYW5jZVwiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb25cIj5cbiAgICAgICAgICAgICAge3sgb3B0aW9uIH19XG4gICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtNFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImluZm8tY2lyY2xlXCIgZm9yPVwiTWVzc2FnZVwiPnt7ICdDcm0uT3Bwb3J0dW5pdGllc01lc3NhZ2UuV29uJyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0b29sdGlwdGV4dCBncmFkaWVudC1jdXN0b20tYnJhbmRpbmdcIj57eyAnQ3JtLk9wcG9ydHVuaXRpZXNNZXNzYWdlLlRvb2x0aXAuV29uJyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgTnVtYmVyRGlyZWN0aXZlXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ3b25cIlxuICAgICAgICAgICAgaWQ9XCJ3b25cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWyd3b24nXS5lcnJvcnMgfVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJpbmZvLWNpcmNsZSBtYi0yXCIgZm9yPVwiTWVzc2FnZVwiPnt7ICdDcm0uT3Bwb3J0dW5pdGllc01lc3NhZ2UuU3RhcnRpbmdBdCcgfCB0cmFuc2xvY29cbiAgICAgICAgICAgICAgICAgICAgICAgIH19PHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlciByZXF1aXJlZC1pY29uXCI+Kjwvc3Bhbj48c3BhbiBjbGFzcz1cInRvb2x0aXB0ZXh0IGdyYWRpZW50LWN1c3RvbS1icmFuZGluZ1wiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NybS5PcHBvcnR1bml0aWVzTWVzc2FnZS5Ub29sdGlwLlN0YXJ0aW5nQXQnIHwgdHJhbnNsb2NvXG4gICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj48L2xhYmVsPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJkZC1tbW0teXl5eVwiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInN0YXJ0aW5nX2F0XCJcbiAgICAgICAgICAgICAgbmdiRGF0ZXBpY2tlclxuICAgICAgICAgICAgICAjZD1cIm5nYkRhdGVwaWNrZXJcIlxuICAgICAgICAgICAgICBbbWluRGF0ZV09XCJ7IGRheTogMSwgbW9udGg6IDEsIHllYXI6IDE5NTAgfVwiXG4gICAgICAgICAgICAgIFttYXhEYXRlXT1cInsgZGF5OiAzMSwgbW9udGg6IDEyLCB5ZWFyOiAyMDUwIH1cIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ3N0YXJ0aW5nX2F0J10uZXJyb3JzIH1cIiAvPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWFwcGVuZFwiPlxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZC50b2dnbGUoKVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2FsZW5kYXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTRcIj5cbiAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidDcm0uT3Bwb3J0dW5pdGllc01lc3NhZ2UuVG9vbHRpcC5DYXRlZ29yeScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgIFtsYWJlbF09XCInQ3JtLk9wcG9ydHVuaXRpZXNNZXNzYWdlLkNhdGVnb3JpZXMnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICBuYW1lPVwiY3JtX29wcG9ydHVuaXR5X2NhdGVnb3J5X2lkc1wiXG4gICAgICAgICAgW2Vycm9yTXNnXT1cIidDcm0uT3Bwb3J0dW5pdGllc01lc3NhZ2UuQ2F0ZWdvcnlFcnJvck1lc3NhZ2UnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgPHAtbXVsdGlTZWxlY3QgW29wdGlvbnNdPVwiY2F0ZWdvcmllc1wiXG4gICAgICAgICAgICAob25DaGFuZ2UpPVwib25DYXRlZ29yeUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNybV9vcHBvcnR1bml0eV9jYXRlZ29yeV9pZHNcIlxuICAgICAgICAgICAgYXBwZW5kVG89XCJib2R5XCI+PC9wLW11bHRpU2VsZWN0PlxuICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS00XCJcbiAgICAgICAgKm5nSWY9XCJUcmlhbFN0YXJ0RmllbGRcIj5cbiAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0NybS5PcHBvcnR1bml0aWVzTWVzc2FnZS5UcmlhbFN0YXJ0QXQnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICBuYW1lPVwidHJpYWxfc3RhcnRfYXRcIlxuICAgICAgICAgIFtlcnJvck1zZ109XCInQ3JtLk9wcG9ydHVuaXRpZXNNZXNzYWdlLlRyaWFsU3RhcnRBdCcgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXBcIj5cbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZGQtbW1tLXl5eXlcIlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ0cmlhbF9zdGFydF9hdFwiXG4gICAgICAgICAgICAgIG5nYkRhdGVwaWNrZXJcbiAgICAgICAgICAgICAgI2M9XCJuZ2JEYXRlcGlja2VyXCJcbiAgICAgICAgICAgICAgW21pbkRhdGVdPVwieyBkYXk6IDEsIG1vbnRoOiAxLCB5ZWFyOiAxOTUwIH1cIlxuICAgICAgICAgICAgICBbbWF4RGF0ZV09XCJ7IGRheTogMzEsIG1vbnRoOiAxMiwgeWVhcjogMjA1MCB9XCIgLz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC1hcHBlbmRcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImMudG9nZ2xlKClcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNhbGVuZGFyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS00XCJcbiAgICAgICAgKm5nSWY9XCJMb3N0RmllbGRcIj5cbiAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0NybS5PcHBvcnR1bml0aWVzTWVzc2FnZS5Mb3N0UmVhc29uJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgbmFtZT1cImxvc3RfcmVhc29uXCJcbiAgICAgICAgICBbZXJyb3JNc2ddPVwiJ0NybS5PcHBvcnR1bml0aWVzTWVzc2FnZS5Mb3N0UmVhc29uJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJsb3N0X3JlYXNvblwiXG4gICAgICAgICAgICBpZD1cImxvc3RfcmVhc29uXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnbG9zdF9yZWFzb24nXS5lcnJvcnMgfVwiIC8+XG4gICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTRcIlxuICAgICAgICAqbmdJZj1cIldvbkZpZWxkXCI+XG4gICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidDcm0uT3Bwb3J0dW5pdGllc01lc3NhZ2UuV29uUmVhc29uJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgbmFtZT1cIndvbl9yZWFzb25cIlxuICAgICAgICAgIFtlcnJvck1zZ109XCInQ3JtLk9wcG9ydHVuaXRpZXNNZXNzYWdlLldvblJlYXNvbicgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwid29uX3JlYXNvblwiXG4gICAgICAgICAgICBpZD1cIndvbl9yZWFzb25cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWyd3b25fcmVhc29uJ10uZXJyb3JzIH1cIiAvPlxuICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC00XCI+XG4gICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQ3JtLk9wcG9ydHVuaXRpZXNNZXNzYWdlLlRvb2x0aXAuU3RhZ2VPcHBvcnR1bml0eScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgIFtsYWJlbF09XCInQ3JtLk9wcG9ydHVuaXRpZXNNZXNzYWdlLlN0YWdlJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgbmFtZT1cImNybV9vcHBvcnR1bml0eV9zdGFnZV9pZFwiXG4gICAgICAgICAgZXJyb3JNc2c9XCJQbGVhc2Ugc2VsZWN0IHN0YWdlXCI+XG4gICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNybV9vcHBvcnR1bml0eV9zdGFnZV9pZFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ2NybV9vcHBvcnR1bml0eV9zdGFnZV9pZCddLmVycm9ycyB9XCI+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+U2VsZWN0IFN0YWdlPC9vcHRpb24+XG4gICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygc3RhZ2VzXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi5pZFwiPlxuICAgICAgICAgICAgICB7eyBvcHRpb24ubmFtZSB9fVxuICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTEyXCI+XG4gICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidDcm0uT3Bwb3J0dW5pdGllc01lc3NhZ2UuRGVzY3JpcHRpb24nIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgbmFtZT1cImRlc2NyaXB0aW9uXCJcbiAgICAgICAgW2Vycm9yTXNnXT1cIidDcm0uT3Bwb3J0dW5pdGllc01lc3NhZ2UuRGVzY3JpcHRpb25FcnJvck1lc3NhZ2UnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgPHRleHRhcmVhIHJvd3M9XCIxMFwiXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBkZXNjcmlwdGlvbi1maWVsZFwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkZXNjcmlwdGlvblwiXG4gICAgICAgICAgICBpZD1cImRlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnZGVzY3JpcHRpb24nXS5lcnJvcnMgfVwiPjwvdGV4dGFyZWE+XG4gICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIHRleHQtZW5kIG10LTNcIj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1kZWZhdWx0IG1lLTJcIlxuICAgICAgICAgIChjbGljayk9XCJiYWNrKClcIj5cbiAgICAgICAgICB7eyAnQnV0dG9uLkNhbmNlbCcgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgW2J1dHRvbkJ1c3ldPVwiYnV0dG9uQnVzeVwiXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtLmludmFsaWRcIj5cbiAgICAgICAgICB7eyAnQnV0dG9uLlN1Ym1pdCcgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9mb3JtPlxuPC9kaXY+XG4iXX0=
337
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtY3JtLW9wcG9ydHVuaXRpZXMtZGV0YWlscy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NtYXJ0LWNybS9zcmMvbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0tb3Bwb3J0dW5pdGllcy9zbWFydC1jcm0tb3Bwb3J0dW5pdGllcy1saXN0L3NtYXJ0LWNybS1vcHBvcnR1bml0aWVzLWRldGFpbHMvc21hcnQtY3JtLW9wcG9ydHVuaXRpZXMtZGV0YWlscy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NtYXJ0LWNybS9zcmMvbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0tb3Bwb3J0dW5pdGllcy9zbWFydC1jcm0tb3Bwb3J0dW5pdGllcy1saXN0L3NtYXJ0LWNybS1vcHBvcnR1bml0aWVzLWRldGFpbHMvc21hcnQtY3JtLW9wcG9ydHVuaXRpZXMtZGV0YWlscy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFHdkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUd4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7Ozs7OztBQVl6RCxNQUFNLE9BQU8scUNBQ1QsU0FBUSxnQkFBZ0I7SUEwRHhCLG9DQUFvQztJQUNwQyxJQUFJLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQzlCLENBQUM7SUFFRCxZQUNJLFFBQWtCLEVBQ0Qs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QUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVRLFdBQVc7UUFDaEIsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3hCLENBQUM7K0dBblhRLHFDQUFxQzttR0FBckMscUNBQXFDLGlHQ3BCbEQsOG9YQWlSQTs7NEZEN1BhLHFDQUFxQztrQkFMakQsU0FBUzsrQkFDSSxvQ0FBb0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdG9yLCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE5nYkRhdGVTdHJ1Y3QgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5pbXBvcnQgeyBBcHBTbWFydENybSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NoYXJlZC9tb2RlbHMvc21hcnQtY3JtLm1vZGVsJztcbmltcG9ydCB7IENybVNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2Uvc21hcnQtY3JtLXNoYXJlZCc7XG5cbmltcG9ydCB7IFVzZXIgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXV0aWxpdGllcyc7XG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHBvc2l3aXNlL2FwcC1iYXNlLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2hlbHBlci1zZXJ2aWNlJztcbmltcG9ydCB7XG4gICAgQ3JtT3Bwb3J0dW5pdHlEYXRhLFxuICAgIENybW9wcG9ydHVuaXR5Q29udGFjdFxufSBmcm9tICdsaWJzL3NtYXJ0LWNybS9zcmMvbGliL3NoYXJlZC9pbnRlcmZhY2Uvc21hcnQtY3JtLW1vZHVsZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ3JtQWNjb3VudCB9IGZyb20gJ2xpYnMvc21hcnQtY3JtL3NyYy9saWIvc2hhcmVkL2ludGVyZmFjZS9jcm0tYWNjb3VudC5pbnRlcmZhY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3B3LXNtYXJ0LWNybS1vcHBvcnR1bml0aWVzLWRldGFpbHMnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zbWFydC1jcm0tb3Bwb3J0dW5pdGllcy1kZXRhaWxzLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zbWFydC1jcm0tb3Bwb3J0dW5pdGllcy1kZXRhaWxzLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgU21hcnRDcm1PcHBvcnR1bml0aWVzRGV0YWlsc0NvbXBvbmVudFxuICAgIGV4dGVuZHMgQXBwQmFzZUNvbXBvbmVudFxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3lcbntcbiAgICBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xuXG4gICAgdXNlcjogVXNlcjtcblxuICAgIGlkOiBudW1iZXI7XG5cbiAgICBvbkVkaXQgPSBmYWxzZTtcblxuICAgIGRhdGE7XG5cbiAgICBzdWJtaXR0ZWQgPSBmYWxzZTtcbiAgICBidXR0b25CdXN5ID0gZmFsc2U7XG4gICAgaXNMb2FkaW5nID0gdHJ1ZTtcblxuICAgIHNlYXJjaFRleHQgPSAnJztcblxuICAgIHN1YnNjcmlwdGlvbklkOiBudW1iZXI7XG5cbiAgICBhbGxDb250YWN0czogQ3Jtb3Bwb3J0dW5pdHlDb250YWN0W10gPSBbXTtcblxuICAgIGNvbnRhY3RJZDogbnVtYmVyO1xuXG4gICAgcHJpdmF0ZSBvcHBvcnR1bml0eURhdGE6IENybU9wcG9ydHVuaXR5RGF0YTtcblxuICAgIGZpbHRlcmVkVXNlcnM6IENybW9wcG9ydHVuaXR5Q29udGFjdFtdID0gW107XG5cbiAgICBjYW5jZWxsZWRUcnVlOiBib29sZWFuO1xuXG4gICAgd2luQ2hhbmNlID0gWzAsIDEwLCAyMCwgMzAsIDQwLCA1MCwgNjAsIDcwLCA4MCwgOTAsIDEwMF07XG5cbiAgICBvcHBvcnR1bml0aWVzID0gW107XG5cbiAgICBXb25GaWVsZCA9IGZhbHNlO1xuXG4gICAgTG9zdEZpZWxkID0gZmFsc2U7XG5cbiAgICBpc0NvbnRhY3RDaGFuZ2UgPSBmYWxzZTtcbiAgICBUcmlhbFN0YXJ0RmllbGQgPSBmYWxzZTtcblxuICAgIGFjY291bnRzID0gW107XG5cbiAgICBmaWx0ZXJlZEFjY291bnRzOiBDcm1BY2NvdW50W107XG5cbiAgICBhY2NvdW50X2lkOiBudW1iZXI7XG5cbiAgICBtYXN0ZXJTdGFnZXMgPSBbXTtcblxuICAgIHN0YWdlcyA9IFtdO1xuXG4gICAgY2F0ZWdvcmllcyA9IFtdO1xuICAgIGFjY291bnRWYWx1ZUNvdW50ID0gMDtcbiAgICBjdXJyZW50QWNjb3VudElkO1xuXG4gICAgZmVhdHVyZUtleXMgPSBbXTtcblxuICAgIC8qKiBGdW5jdGlvbiB0byBnZXQgZm9ybSBjb250cm9scyAqL1xuICAgIGdldCBmKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmNvbnRyb2xzO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY3JtU2VydmljZTogQ3JtU2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgICAgIHRoaXMuZm9ybSA9IEFwcFNtYXJ0Q3JtLmdldE9wcG9ydHVuaXRpZXNJbmZvRm9ybSgpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnRvZ2dsZVN0YWdlRmllbGQoKTtcbiAgICAgICAgdGhpcy5jb250YWN0SWQgPSBOdW1iZXIodGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtTWFwLmdldCgnY29udGFjdF9pZCcpKTtcbiAgICAgICAgdGhpcy5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICAgICAgdGhpcy5pZCA9IE51bWJlcihkYXRhWydpZCddKTtcbiAgICAgICAgICAgIGlmIChOdW1iZXIoZGF0YVsnaWQnXSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldEFjY291bnRDb250YWN0cyh0cnVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdjcm1fYWNjb3VudF9pZCcpLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hY2NvdW50VmFsdWVDb3VudCA+IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2NybV9jb250YWN0X2lkJykuZGlzYWJsZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnY3JtX2NvbnRhY3RfaWQnKS5yZXNldCgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hY2NvdW50VmFsdWVDb3VudCArPSAxO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRBY2NvdW50Q29udGFjdHMoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29udGFjdElkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRBY2NvdW50Q29udGFjdHMoZmFsc2UpO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2NybV9hY2NvdW50X2lkJykudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmFjY291bnRWYWx1ZUNvdW50ID4gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnY3JtX2NvbnRhY3RfaWQnKS5kaXNhYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdjcm1fY29udGFjdF9pZCcpLnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFjY291bnRWYWx1ZUNvdW50ICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzQ29udGFjdENoYW5nZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEFjY291bnRDb250YWN0cyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2NybV9jb250YWN0X2lkJykuZGlzYWJsZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2NybV9hY2NvdW50X2lkJykuZGlzYWJsZSgpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnY3JtX2FjY291bnRfaWQnKS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEFjY291bnRDb250YWN0cyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnY3JtX2NvbnRhY3RfaWQnKS5kaXNhYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2NybV9jb250YWN0X2lkJykucmVzZXQoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZ2V0VXNlclN1YnNjcmlwdGlvbklkKCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uSWQgPSByZXNwb25zZTtcbiAgICAgICAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbklkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRBdmFpbGFibGVPcHBvcnR1bml0eVN0YWdlcyh0aGlzLnN1YnNjcmlwdGlvbklkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmdldEFsbE9wcG9ydHVuaXR5Q2F0ZWdvcmllcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5mb3JtLmdldCgnY3JtX2NvbnRhY3RfaWQnKS5zZXRWYWx1ZShudWxsKTtcbiAgICAgICAgdGhpcy5hY2NvdW50X2lkID0gTnVtYmVyKHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbU1hcC5nZXQoJ2FjY291bnRfaWQnKSk7XG4gICAgICAgIHRoaXMuZ2V0VXNlckluZm8oKTtcbiAgICAgICAgdGhpcy5nZXRBbGxBY2NvdW50cygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0QXZhaWxhYmxlT3Bwb3J0dW5pdHlTdGFnZXMoaWQpIHtcbiAgICAgICAgdGhpcy5jcm1TZXJ2aWNlLmdldEF2YWlsYWJsZU9wcG9ydHVuaXR5U3RhZ2VzKGlkKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgIHRoaXMubWFzdGVyU3RhZ2VzID0gcmVzPy5hdmFpbGFibGVfY3JtX29wcG9ydHVuaXR5X3N0YWdlcyB8fCBbXTtcbiAgICAgICAgICAgIHRoaXMuc3RhZ2VzID0gcmVzPy5hdmFpbGFibGVfY3JtX29wcG9ydHVuaXR5X3N0YWdlcyB8fCBbXTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gLyoqIEZ1bmN0aW9uIHRvIGdldCB1c2VyIGluZm8gKi9cbiAgICBwcml2YXRlIGdldFVzZXJJbmZvKCkge1xuICAgICAgICB0aGlzLnVzZXJTdG9yZSgpLnN1YnNjcmliZSh1c2VyID0+IHtcbiAgICAgICAgICAgIHRoaXMudXNlciA9IHVzZXI7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBGdW5jdGlvbiB0byBjYWxsIGFjY291bnRzICovXG4gICAgcHJpdmF0ZSBnZXRBbGxBY2NvdW50cygpIHtcbiAgICAgICAgdGhpcy5jcm1TZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0QWxsQWNjb3VudHMoeyBzdWJzY3JpcHRpb25faWQ6IHRoaXMuc3Vic2NyaXB0aW9uSWQgfSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYWNjb3VudHMgPSByZXNwb25zZS5hY2NvdW50cztcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdjcm1fYWNjb3VudF9pZCcpLmVuYWJsZSgpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFjY291bnRfaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWNjb3VudERhdGEgPSB0aGlzLmFjY291bnRzLmZpbmQoeCA9PiB4LmlkID09PSB0aGlzLmFjY291bnRfaWQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdjcm1fYWNjb3VudF9pZCcpLnNldFZhbHVlKGFjY291bnREYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogRnVuY3Rpb24gdG8gY2FsbCBjb250YWN0cyAqL1xuXG4gICAgcHJpdmF0ZSBnZXRBY2NvdW50Q29udGFjdHMoaXNDaGFuZ2UgPSBmYWxzZSkge1xuICAgICAgICB0aGlzLmdldFVzZXJTdWJzY3JpcHRpb25JZCgpLnN1YnNjcmliZShpZCA9PiB7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbklkID0gaWQ7XG4gICAgICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb25JZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3JtU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAuZ2V0QWNjb3VudENvbnRhY3RzKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnY3JtX2FjY291bnRfaWQnKS52YWx1ZS5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnY3JtX2NvbnRhY3RfaWQnKS5lbmFibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWxsQ29udGFjdHMgPSByZXNwb25zZS5jb250YWN0cztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWxsQ29udGFjdHMuZm9yRWFjaChtZW1iZXIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWJlci5kaXNwbGF5TmFtZSA9IGAke21lbWJlci5maXJzdF9uYW1lIHx8ICcnfSAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1iZXIubGFzdF9uYW1lIHx8ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAtICR7bWVtYmVyLmVtYWlsfWAudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25FZGl0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0NoYW5nZSAmJiB0aGlzLmdldE9wcG9ydHVuaXR5RGV0YWlscyh0aGlzLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkVkaXQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRhY3RJZCAmJiAhdGhpcy5pc0NvbnRhY3RDaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250YWN0RGF0YSA9IHRoaXMuYWxsQ29udGFjdHMuZmluZCh4ID0+IHguaWQgPT09IHRoaXMuY29udGFjdElkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdjcm1fY29udGFjdF9pZCcpLnNldFZhbHVlKGNvbnRhY3REYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdjcm1fYWNjb3VudF9pZCcpLnNldFZhbHVlKGNvbnRhY3REYXRhPy5jcm1fYWNjb3VudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hY2NvdW50X2lkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGxDb250YWN0cyA9IHRoaXMuYWxsQ29udGFjdHMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0+IHguY3JtX2FjY291bnRfaWQgPT09IHRoaXMuYWNjb3VudF9pZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogRnVuY3Rpb24gdG8gZ2V0IG9wcG9ydHVuaXRpZXMgZGF0YSAqL1xuICAgIHByaXZhdGUgZ2V0T3Bwb3J0dW5pdHlEZXRhaWxzKGlkOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5jcm1TZXJ2aWNlLmdldE9wcG9ydHVuaXR5RGV0YWlscyh0aGlzLnN1YnNjcmlwdGlvbklkLCBpZCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLm9wcG9ydHVuaXR5RGF0YSA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgbGV0IHN0YXJ0aW5nQXRPYmo6IE5nYkRhdGVTdHJ1Y3Q7XG4gICAgICAgICAgICBsZXQgdHJpYWxTdGFydEF0T2JqOiBOZ2JEYXRlU3RydWN0O1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXJ0aW5nX2F0KSB7XG4gICAgICAgICAgICAgICAgc3RhcnRpbmdBdE9iaiA9IHtcbiAgICAgICAgICAgICAgICAgICAgeWVhcjogTnVtYmVyKHJlc3BvbnNlLnN0YXJ0aW5nX2F0LnN1YnN0cmluZygwLCA0KSksXG4gICAgICAgICAgICAgICAgICAgIG1vbnRoOiBOdW1iZXIocmVzcG9uc2Uuc3RhcnRpbmdfYXQuc3Vic3RyaW5nKDUsIDcpKSxcbiAgICAgICAgICAgICAgICAgICAgZGF5OiBOdW1iZXIocmVzcG9uc2Uuc3RhcnRpbmdfYXQuc3Vic3RyaW5nKDgsIDEwKSlcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnRyaWFsX3N0YXJ0X2F0KSB7XG4gICAgICAgICAgICAgICAgdHJpYWxTdGFydEF0T2JqID0ge1xuICAgICAgICAgICAgICAgICAgICB5ZWFyOiBOdW1iZXIocmVzcG9uc2UudHJpYWxfc3RhcnRfYXQuc3Vic3RyaW5nKDAsIDQpKSxcbiAgICAgICAgICAgICAgICAgICAgbW9udGg6IE51bWJlcihyZXNwb25zZS50cmlhbF9zdGFydF9hdC5zdWJzdHJpbmcoNSwgNykpLFxuICAgICAgICAgICAgICAgICAgICBkYXk6IE51bWJlcihyZXNwb25zZS50cmlhbF9zdGFydF9hdC5zdWJzdHJpbmcoOCwgMTApKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhZ2UgPT09ICdUcmFpbGluZycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLlRyaWFsU3RhcnRGaWVsZCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuV29uRmllbGQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGFnZSA9PT0gJ1dvbicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLkxvc3RGaWVsZCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuTG9zdEZpZWxkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhZ2UgPT09ICdMb3N0Jykge1xuICAgICAgICAgICAgICAgIHRoaXMuV29uRmllbGQgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLldvbkZpZWxkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh0aGlzLm9wcG9ydHVuaXR5RGF0YSk7XG4gICAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgICAgICAgc3RhcnRpbmdfYXQ6IHN0YXJ0aW5nQXRPYmosXG4gICAgICAgICAgICAgICAgdHJpYWxfc3RhcnRfYXQ6IHRyaWFsU3RhcnRBdE9iaixcbiAgICAgICAgICAgICAgICBvbmVfdGltZV9hbW91bnQ6IHJlc3BvbnNlLm9uZV90aW1lX2Ftb3VudCAvIDEwMCxcbiAgICAgICAgICAgICAgICBtb250aGx5X2Ftb3VudDogcmVzcG9uc2UubW9udGhseV9hbW91bnQgLyAxMDBcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLmFsbENvbnRhY3RzLmZvckVhY2goY29udGFjdCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3Bwb3J0dW5pdHlEYXRhLmNybV9jb250YWN0X2lkID09PSBjb250YWN0LmlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2NybV9jb250YWN0X2lkJykuc2V0VmFsdWUoY29udGFjdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmFjY291bnRzLmZvckVhY2goYWNjb3VudCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3Bwb3J0dW5pdHlEYXRhLmNybV9hY2NvdW50X2lkID09PSBhY2NvdW50LmlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2NybV9hY2NvdW50X2lkJykuc2V0VmFsdWUoYWNjb3VudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBGdW5jdGlvbiB0byBleGVjdXRlIG9uIHN1Ym1pdCBvcHBvcnR1bml0aWVzIGZvcm0gKi9cbiAgICBvblNhdmUoKSB7XG4gICAgICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5idXR0b25CdXN5ID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHsgLi4udGhpcy5mb3JtLnZhbHVlIH07XG4gICAgICAgIGRhdGEub25lX3RpbWVfYW1vdW50ICo9IDEwMDtcbiAgICAgICAgZGF0YS5tb250aGx5X2Ftb3VudCAqPSAxMDA7XG4gICAgICAgIGlmIChkYXRhLmNybV9jb250YWN0X2lkKSB7XG4gICAgICAgICAgICBkYXRhLmNybV9jb250YWN0X2lkID0gZGF0YS5jcm1fY29udGFjdF9pZC5pZDtcbiAgICAgICAgfVxuICAgICAgICBkYXRhLmNybV9hY2NvdW50X2lkID0gZGF0YS5jcm1fYWNjb3VudF9pZC5pZDtcbiAgICAgICAgZGF0YS5zdGFydGluZ19hdCA9IEhlbHBlclNlcnZpY2UuZGF0ZUZvcm1hdCh0aGlzLmZvcm0uZ2V0KCdzdGFydGluZ19hdCcpLnZhbHVlKTtcbiAgICAgICAgZGF0YS50cmlhbF9zdGFydF9hdCA9IEhlbHBlclNlcnZpY2UuZGF0ZUZvcm1hdCh0aGlzLmZvcm0uZ2V0KCd0cmlhbF9zdGFydF9hdCcpLnZhbHVlKTtcbiAgICAgICAgY29uc3Qgc3ViJCA9IHRoaXMuaWRcbiAgICAgICAgICAgID8gdGhpcy5jcm1TZXJ2aWNlLnVwZGF0ZU9wcG9ydHVuaXRpZXModGhpcy5zdWJzY3JpcHRpb25JZCwgdGhpcy5pZCwgZGF0YSlcbiAgICAgICAgICAgIDogdGhpcy5jcm1TZXJ2aWNlLnBvc3RPcHBvcnR1bml0aWVzKHRoaXMuc3Vic2NyaXB0aW9uSWQsIGRhdGEpO1xuICAgICAgICBzdWIkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRvYXN0LnN1Y2Nlc3MoXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGUoJ0NybS5PcHBvcnR1bml0aWVzTWVzc2FnZS5VcGRhdGVkTWVzc2FnZScpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5iYWNrKCk7XG4gICAgICAgIH0pLmFkZCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN1Ym1pdHRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5idXR0b25CdXN5ID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBGdW5jdGlvbiB0byBnZXQgYWxsIGNhdGVnb3JpZXMgKi9cbiAgICBwcml2YXRlIGdldEFsbE9wcG9ydHVuaXR5Q2F0ZWdvcmllcygpIHtcbiAgICAgICAgdGhpcy5jcm1TZXJ2aWNlLmdldEFsbE9wcG9ydHVuaXR5Q2F0ZWdvcmllcyh0aGlzLnN1YnNjcmlwdGlvbklkKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IHJlc3BvbnNlPy5jcm1fb3Bwb3J0dW5pdHlfY2F0ZWdvcmllcyB8fCBbXTtcbiAgICAgICAgICAgIGNhdGVnb3JpZXMuZm9yRWFjaCh2YWwgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiB2YWwubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbC5pZFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5jYXRlZ29yaWVzLnB1c2goZGF0YSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZ2V0VmFsdWVzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VmFsdWVzKCkge1xuICAgICAgICBpZiAoIXRoaXMuaWQpIHtcbiAgICAgICAgICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCdzdGFnZV9pZCcgaW4gcmVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YWdlSWQgPSBOdW1iZXIocmVzWydzdGFnZV9pZCddKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNhdGVnb3J5O1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlc1snY2F0ZWdvcnknXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5ID0gcmVzWydjYXRlZ29yeSddLnNwbGl0KCcsJykubWFwKHggPT4gTnVtYmVyKHgpKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5ID0gcmVzWydjYXRlZ29yeSddPy5tYXAoeCA9PiBOdW1iZXIoeCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNybV9vcHBvcnR1bml0eV9zdGFnZV9pZDogc3RhZ2VJZCB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNybV9vcHBvcnR1bml0eV9jYXRlZ29yeV9pZHM6IGNhdGVnb3J5Py5sZW5ndGggPyBjYXRlZ29yeSA6ICcnXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VhcmNoKGV2ZW50KSB7XG4gICAgICAgIGxldCBkYXRhID0gW107XG4gICAgICAgIGlmIChldmVudC5xdWVyeSkge1xuICAgICAgICAgICAgZGF0YSA9IHRoaXMuYWxsQ29udGFjdHMuZmlsdGVyKCh4OiBDcm1vcHBvcnR1bml0eUNvbnRhY3QpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4geC5kaXNwbGF5TmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGV2ZW50LnF1ZXJ5LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFsbENvbnRhY3RzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgZGF0YS5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWx0ZXJlZFVzZXJzID0gZGF0YTtcbiAgICB9XG5cbiAgICBzZWFyY2hBY2NvdW50KGV2ZW50KSB7XG4gICAgICAgIGxldCBkYXRhID0gW107XG4gICAgICAgIGlmIChldmVudC5xdWVyeSkge1xuICAgICAgICAgICAgZGF0YSA9IHRoaXMuYWNjb3VudHMuZmlsdGVyKCh4OiBDcm1BY2NvdW50KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGV2ZW50LnF1ZXJ5LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFjY291bnRzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgZGF0YS5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWx0ZXJlZEFjY291bnRzID0gZGF0YTtcbiAgICB9XG5cbiAgICBvbkNhdGVnb3J5Q2hhbmdlKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuc3RhZ2VzID0gWy4uLnRoaXMubWFzdGVyU3RhZ2VzXTtcbiAgICAgICAgaWYgKGV2ZW50LnZhbHVlPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhZ2VzID0gdGhpcy5zdGFnZXMuZmlsdGVyKHggPT5cbiAgICAgICAgICAgICAgICB4LmNybV9vcHBvcnR1bml0eV9jYXRlZ29yeV9pZHM/LnNvbWUoaXRlbSA9PiBldmVudC52YWx1ZS5pbmNsdWRlcyhpdGVtKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHRvZ2dsZVN0YWdlRmllbGQoKSB7XG4gICAgICAgIHRoaXMuZm9ybS5nZXQoJ2NybV9vcHBvcnR1bml0eV9zdGFnZV9pZCcpLmRpc2FibGUoKTtcbiAgICAgICAgdGhpcy5mb3JtLmdldCgnY3JtX29wcG9ydHVuaXR5X2NhdGVnb3J5X2lkcycpLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsID0gdGhpcy5mb3JtLmdldCgnY3JtX29wcG9ydHVuaXR5X2NhdGVnb3J5X2lkcycpLnZhbHVlO1xuICAgICAgICAgICAgaWYgKCF2YWw/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2NybV9vcHBvcnR1bml0eV9zdGFnZV9pZCcpLmRpc2FibGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnY3JtX29wcG9ydHVuaXR5X3N0YWdlX2lkJykuZW5hYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIG5nT25EZXN0cm95KCkge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJtZS1hdXRvIGNvbC14cy02XCI+XG4gIDxhIGFyaWEtbGFiZWw9XCJOYXZpZ2F0ZSB0byBUYXJnZXRcIlxuICAgIChjbGljayk9XCJiYWNrKClcIlxuICAgIGNsYXNzPVwicHJldmlvdXNcIj48aSBjbGFzcz1cImZhIGZhLWFycm93LWFsdC1jaXJjbGUtbGVmdFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+XG4gIDxoMyBjbGFzcz1cIm0tc3ViaGVhZGVyX190aXRsZSBtLXN1YmhlYWRlcl9fdGl0bGUtLXNlcGFyYXRvclwiPlxuICAgIDxzcGFuPnt7ICdDcm0uT3Bwb3J0dW5pdGllc01lc3NhZ2UuQ3JtT3Bwb3J0dW5pdHknIHwgdHJhbnNsb2NvIH19OlxuICAgICAge3sgaXNMb2FkaW5nID8gJyc6IChkYXRhPy5uYW1lID8gZGF0YT8ubmFtZSA6ICgnTGFiZWwuQWRkTmV3JyB8IHRyYW5zbG9jbykpIH19PC9zcGFuPlxuICA8L2gzPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwidy0xMDAgdGV4dC1jZW50ZXIgbXQtM1wiXG4gICpuZ0lmPVwiaXNMb2FkaW5nXCI+XG4gIDxwLXByb2dyZXNzU3Bpbm5lciBzdHJva2VXaWR0aD1cIjJcIj4gPC9wLXByb2dyZXNzU3Bpbm5lcj5cbiAgPC9kaXY+XG48ZGl2IGNsYXNzPVwicC0yIG10LTNcIiAqbmdJZj1cIiFpc0xvYWRpbmdcIj5cbiAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgICAobmdTdWJtaXQpPVwib25TYXZlKClcIj5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS04XCI+XG4gICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidDcm0uT3Bwb3J0dW5pdGllc01lc3NhZ2UuVGl0bGUnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICBuYW1lPVwidGl0bGVcIlxuICAgICAgICAgIFtlcnJvck1zZ109XCInQ3JtLk9wcG9ydHVuaXRpZXNNZXNzYWdlLlRpdGxlRXJyb3JNZXNzYWdlJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ0aXRsZVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ3RpdGxlJ10uZXJyb3JzIH1cIiAvPlxuICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwidWktZmx1aWQgc2tpbGxzLW1vZGFsIGNvbC1zbS00XCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cIm1iLTJcIiBmb3I9XCJBY2NvdW50XCI+e3sgJ0NybS5PcHBvcnR1bml0aWVzTWVzc2FnZS5BY2NvdW50JyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICB9fTxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXIgcmVxdWlyZWQtaWNvblwiPio8L3NwYW4+PC9sYWJlbD5cbiAgICAgICAgPHAtYXV0b0NvbXBsZXRlIFtzdWdnZXN0aW9uc109XCJmaWx0ZXJlZEFjY291bnRzXCJcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjcm1fYWNjb3VudF9pZFwiXG4gICAgICAgICAgZGF0YUtleT1cImlkXCJcbiAgICAgICAgICBmaWVsZD1cIm5hbWVcIlxuICAgICAgICAgIFtkcm9wZG93bl09XCJ0cnVlXCJcbiAgICAgICAgICAoY29tcGxldGVNZXRob2QpPVwic2VhcmNoQWNjb3VudCgkZXZlbnQpXCJcbiAgICAgICAgICBzdHlsZUNsYXNzPVwidy0xMDBcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGFjY291bnRzXCJcbiAgICAgICAgICBbaW5wdXRTdHlsZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1pdHRlZCAmJiBmWydjcm1fYWNjb3VudF9pZCddLmVycm9yc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8geyBib3JkZXI6ICcxcHggc29saWQgI2ZmNTg2YicgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogeyBib3JkZXI6ICcxcHggc29saWQgZ3JheScgfVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgIFttdWx0aXBsZV09XCJmYWxzZVwiPlxuICAgICAgICA8L3AtYXV0b0NvbXBsZXRlPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJ1aS1mbHVpZCBza2lsbHMtbW9kYWwgY29sLXNtLTRcIj5cbiAgICAgICAgPGxhYmVsIGZvcj1cIm1lc3NhZ2VcIj57eyAnQ3JtLk9wcG9ydHVuaXRpZXNNZXNzYWdlLkNvbnRhY3QnIHwgdHJhbnNsb2NvIH19PC9sYWJlbD5cbiAgICAgICAgPHAtYXV0b0NvbXBsZXRlIFtzdWdnZXN0aW9uc109XCJmaWx0ZXJlZFVzZXJzXCJcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjcm1fY29udGFjdF9pZFwiXG4gICAgICAgICAgZGF0YUtleT1cImlkXCJcbiAgICAgICAgICBmaWVsZD1cImRpc3BsYXlOYW1lXCJcbiAgICAgICAgICBbZHJvcGRvd25dPVwidHJ1ZVwiXG4gICAgICAgICAgKGNvbXBsZXRlTWV0aG9kKT1cInNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICBzdHlsZUNsYXNzPVwidy0xMDBcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGNvbnRhY3RcIlxuICAgICAgICAgIFttdWx0aXBsZV09XCJmYWxzZVwiPlxuICAgICAgICA8L3AtYXV0b0NvbXBsZXRlPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJpbmZvLWNpcmNsZVwiIGZvcj1cIk1lc3NhZ2VcIj57eyAnQ3JtLk9wcG9ydHVuaXRpZXNNZXNzYWdlLk9uZVRpbWVBbW91bnQnIHwgdHJhbnNsb2NvXG4gICAgICAgICAgICAgICAgICAgICAgICB9fTxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXIgcmVxdWlyZWQtaWNvblwiPio8L3NwYW4+PHNwYW4gY2xhc3M9XCJ0b29sdGlwdGV4dCBncmFkaWVudC1jdXN0b20tYnJhbmRpbmdcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDcm0uT3Bwb3J0dW5pdGllc01lc3NhZ2UuVG9vbHRpcC5PbmVUaW1lQW1vdW50JyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+PC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICBudW1iZXJzT25seVxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwib25lX3RpbWVfYW1vdW50XCJcbiAgICAgICAgICAgIGlkPVwib25lX3RpbWVfYW1vdW50XCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnb25lX3RpbWVfYW1vdW50J10uZXJyb3JzIH1cIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC00XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaW5mby1jaXJjbGVcIiBmb3I9XCJNZXNzYWdlXCI+e3sgJ0NybS5PcHBvcnR1bml0aWVzTWVzc2FnZS5Nb250aGx5QW1vdW50JyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICAgICAgfX08c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyIHJlcXVpcmVkLWljb25cIj4qPC9zcGFuPjxzcGFuIGNsYXNzPVwidG9vbHRpcHRleHQgZ3JhZGllbnQtY3VzdG9tLWJyYW5kaW5nXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ3JtLk9wcG9ydHVuaXRpZXNNZXNzYWdlLlRvb2x0aXAuTW9udGhseUFtb3VudCcgfCB0cmFuc2xvY29cbiAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPjwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgbnVtYmVyc09ubHlcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm1vbnRobHlfYW1vdW50XCJcbiAgICAgICAgICAgIGlkPVwibW9udGhseV9hbW91bnRcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydtb250aGx5X2Ftb3VudCddLmVycm9ycyB9XCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBGZWF0dXJlcyAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIGNvbC0xMiBjb2wtbWQtNFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJpbmZvLWNpcmNsZVwiIGZvcj1cIk1lc3NhZ2VcIj57eyAnQ3JtLk9wcG9ydHVuaXRpZXNNZXNzYWdlLkZlYXR1cmVzJyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG9vbHRpcHRleHQgZ3JhZGllbnQtY3VzdG9tLWJyYW5kaW5nIGZlYXR1cmUtdG9vbHRpcFwiPnt7ICdDcm0uT3Bwb3J0dW5pdGllc01lc3NhZ2UuVG9vbHRpcC5GZWF0dXJlJyB8IHRyYW5zbG9jbyB9fTwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPHAtbXVsdGlTZWxlY3QgW29wdGlvbnNdPVwiZmVhdHVyZUtleXNcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IGZlYXR1cmUga2V5c1wiXG4gICAgICAgICAgW3Nob3dIZWFkZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgW3Nob3dUb2dnbGVBbGxdPVwidHJ1ZVwiXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZmVhdHVyZV9rZXlzXCJcbiAgICAgICAgICBhcHBlbmRUbz1cImJvZHlcIj48L3AtbXVsdGlTZWxlY3Q+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtNFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImluZm8tY2lyY2xlXCIgZm9yPVwiTWVzc2FnZVwiPnt7ICdDcm0uT3Bwb3J0dW5pdGllc01lc3NhZ2UuV2luQ2hhbmNlJyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlciByZXF1aXJlZC1pY29uXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG9vbHRpcHRleHQgZ3JhZGllbnQtY3VzdG9tLWJyYW5kaW5nXCI+e3sgJ0NybS5PcHBvcnR1bml0aWVzTWVzc2FnZS5Ub29sdGlwLldpbkNoYW5jZScgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxzZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwid2luX2NoYW5jZXNcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1zZWxlY3RcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWyd3aW5fY2hhbmNlcyddLmVycm9ycyB9XCI+XG4gICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygd2luQ2hhbmNlXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvblwiPlxuICAgICAgICAgICAgICB7eyBvcHRpb24gfX1cbiAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC00XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaW5mby1jaXJjbGVcIiBmb3I9XCJNZXNzYWdlXCI+e3sgJ0NybS5PcHBvcnR1bml0aWVzTWVzc2FnZS5Xb24nIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvb2x0aXB0ZXh0IGdyYWRpZW50LWN1c3RvbS1icmFuZGluZ1wiPnt7ICdDcm0uT3Bwb3J0dW5pdGllc01lc3NhZ2UuVG9vbHRpcC5Xb24nIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICBOdW1iZXJEaXJlY3RpdmVcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIndvblwiXG4gICAgICAgICAgICBpZD1cIndvblwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ3dvbiddLmVycm9ycyB9XCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtNFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImluZm8tY2lyY2xlIG1iLTJcIiBmb3I9XCJNZXNzYWdlXCI+e3sgJ0NybS5PcHBvcnR1bml0aWVzTWVzc2FnZS5TdGFydGluZ0F0JyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICAgICAgfX08c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyIHJlcXVpcmVkLWljb25cIj4qPC9zcGFuPjxzcGFuIGNsYXNzPVwidG9vbHRpcHRleHQgZ3JhZGllbnQtY3VzdG9tLWJyYW5kaW5nXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ3JtLk9wcG9ydHVuaXRpZXNNZXNzYWdlLlRvb2x0aXAuU3RhcnRpbmdBdCcgfCB0cmFuc2xvY29cbiAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPjwvbGFiZWw+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImRkLW1tbS15eXl5XCJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic3RhcnRpbmdfYXRcIlxuICAgICAgICAgICAgICBuZ2JEYXRlcGlja2VyXG4gICAgICAgICAgICAgICNkPVwibmdiRGF0ZXBpY2tlclwiXG4gICAgICAgICAgICAgIFttaW5EYXRlXT1cInsgZGF5OiAxLCBtb250aDogMSwgeWVhcjogMTk1MCB9XCJcbiAgICAgICAgICAgICAgW21heERhdGVdPVwieyBkYXk6IDMxLCBtb250aDogMTIsIHllYXI6IDIwNTAgfVwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnc3RhcnRpbmdfYXQnXS5lcnJvcnMgfVwiIC8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYXBwZW5kXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJkLnRvZ2dsZSgpXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jYWxlbmRhclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tNFwiPlxuICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0NybS5PcHBvcnR1bml0aWVzTWVzc2FnZS5Ub29sdGlwLkNhdGVnb3J5JyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgW2xhYmVsXT1cIidDcm0uT3Bwb3J0dW5pdGllc01lc3NhZ2UuQ2F0ZWdvcmllcycgfCB0cmFuc2xvY29cIlxuICAgICAgICAgIG5hbWU9XCJjcm1fb3Bwb3J0dW5pdHlfY2F0ZWdvcnlfaWRzXCJcbiAgICAgICAgICBbZXJyb3JNc2ddPVwiJ0NybS5PcHBvcnR1bml0aWVzTWVzc2FnZS5DYXRlZ29yeUVycm9yTWVzc2FnZScgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICA8cC1tdWx0aVNlbGVjdCBbb3B0aW9uc109XCJjYXRlZ29yaWVzXCJcbiAgICAgICAgICAgIChvbkNoYW5nZSk9XCJvbkNhdGVnb3J5Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY3JtX29wcG9ydHVuaXR5X2NhdGVnb3J5X2lkc1wiXG4gICAgICAgICAgICBhcHBlbmRUbz1cImJvZHlcIj48L3AtbXVsdGlTZWxlY3Q+XG4gICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTRcIlxuICAgICAgICAqbmdJZj1cIlRyaWFsU3RhcnRGaWVsZFwiPlxuICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQ3JtLk9wcG9ydHVuaXRpZXNNZXNzYWdlLlRyaWFsU3RhcnRBdCcgfCB0cmFuc2xvY29cIlxuICAgICAgICAgIG5hbWU9XCJ0cmlhbF9zdGFydF9hdFwiXG4gICAgICAgICAgW2Vycm9yTXNnXT1cIidDcm0uT3Bwb3J0dW5pdGllc01lc3NhZ2UuVHJpYWxTdGFydEF0JyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJkZC1tbW0teXl5eVwiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInRyaWFsX3N0YXJ0X2F0XCJcbiAgICAgICAgICAgICAgbmdiRGF0ZXBpY2tlclxuICAgICAgICAgICAgICAjYz1cIm5nYkRhdGVwaWNrZXJcIlxuICAgICAgICAgICAgICBbbWluRGF0ZV09XCJ7IGRheTogMSwgbW9udGg6IDEsIHllYXI6IDE5NTAgfVwiXG4gICAgICAgICAgICAgIFttYXhEYXRlXT1cInsgZGF5OiAzMSwgbW9udGg6IDEyLCB5ZWFyOiAyMDUwIH1cIiAvPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWFwcGVuZFwiPlxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiYy50b2dnbGUoKVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2FsZW5kYXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTRcIlxuICAgICAgICAqbmdJZj1cIkxvc3RGaWVsZFwiPlxuICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQ3JtLk9wcG9ydHVuaXRpZXNNZXNzYWdlLkxvc3RSZWFzb24nIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICBuYW1lPVwibG9zdF9yZWFzb25cIlxuICAgICAgICAgIFtlcnJvck1zZ109XCInQ3JtLk9wcG9ydHVuaXRpZXNNZXNzYWdlLkxvc3RSZWFzb24nIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImxvc3RfcmVhc29uXCJcbiAgICAgICAgICAgIGlkPVwibG9zdF9yZWFzb25cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydsb3N0X3JlYXNvbiddLmVycm9ycyB9XCIgLz5cbiAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tNFwiXG4gICAgICAgICpuZ0lmPVwiV29uRmllbGRcIj5cbiAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0NybS5PcHBvcnR1bml0aWVzTWVzc2FnZS5Xb25SZWFzb24nIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICBuYW1lPVwid29uX3JlYXNvblwiXG4gICAgICAgICAgW2Vycm9yTXNnXT1cIidDcm0uT3Bwb3J0dW5pdGllc01lc3NhZ2UuV29uUmVhc29uJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ3b25fcmVhc29uXCJcbiAgICAgICAgICAgIGlkPVwid29uX3JlYXNvblwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ3dvbl9yZWFzb24nXS5lcnJvcnMgfVwiIC8+XG4gICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTRcIj5cbiAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidDcm0uT3Bwb3J0dW5pdGllc01lc3NhZ2UuVG9vbHRpcC5TdGFnZU9wcG9ydHVuaXR5JyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgW2xhYmVsXT1cIidDcm0uT3Bwb3J0dW5pdGllc01lc3NhZ2UuU3RhZ2UnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICBuYW1lPVwiY3JtX29wcG9ydHVuaXR5X3N0YWdlX2lkXCJcbiAgICAgICAgICBlcnJvck1zZz1cIlBsZWFzZSBzZWxlY3Qgc3RhZ2VcIj5cbiAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY3JtX29wcG9ydHVuaXR5X3N0YWdlX2lkXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnY3JtX29wcG9ydHVuaXR5X3N0YWdlX2lkJ10uZXJyb3JzIH1cIj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5TZWxlY3QgU3RhZ2U8L29wdGlvbj5cbiAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBzdGFnZXNcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uLmlkXCI+XG4gICAgICAgICAgICAgIHt7IG9wdGlvbi5uYW1lIH19XG4gICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tMTJcIj5cbiAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0NybS5PcHBvcnR1bml0aWVzTWVzc2FnZS5EZXNjcmlwdGlvbicgfCB0cmFuc2xvY29cIlxuICAgICAgICBuYW1lPVwiZGVzY3JpcHRpb25cIlxuICAgICAgICBbZXJyb3JNc2ddPVwiJ0NybS5PcHBvcnR1bml0aWVzTWVzc2FnZS5EZXNjcmlwdGlvbkVycm9yTWVzc2FnZScgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICA8dGV4dGFyZWEgcm93cz1cIjEwXCJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGRlc2NyaXB0aW9uLWZpZWxkXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgIGlkPVwiZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydkZXNjcmlwdGlvbiddLmVycm9ycyB9XCI+PC90ZXh0YXJlYT5cbiAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgdGV4dC1lbmQgbXQtM1wiPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLWRlZmF1bHQgbWUtMlwiXG4gICAgICAgICAgKGNsaWNrKT1cImJhY2soKVwiPlxuICAgICAgICAgIHt7ICdCdXR0b24uQ2FuY2VsJyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICBbYnV0dG9uQnVzeV09XCJidXR0b25CdXN5XCJcbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm0uaW52YWxpZFwiPlxuICAgICAgICAgIHt7ICdCdXR0b24uU3VibWl0JyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Zvcm0+XG48L2Rpdj5cbiJdfQ==