tnx-shared 5.1.372 → 5.1.375

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 (51) hide show
  1. package/bundles/tnx-shared.umd.js +211 -167
  2. package/bundles/tnx-shared.umd.js.map +1 -1
  3. package/bundles/tnx-shared.umd.min.js +1 -1
  4. package/bundles/tnx-shared.umd.min.js.map +1 -1
  5. package/classes/public-function.d.ts +1 -1
  6. package/components/avatar-uploader/avatar-uploader.component.d.ts.map +1 -1
  7. package/components/common-app-component/app-topbar-v2/app-topbar-v2.component.d.ts +2 -1
  8. package/components/common-app-component/app-topbar-v2/app-topbar-v2.component.d.ts.map +1 -1
  9. package/components/common-app-component/app.topbar.component.d.ts +2 -1
  10. package/components/common-app-component/app.topbar.component.d.ts.map +1 -1
  11. package/components/common-app-component/common-app-component.d.ts +4 -0
  12. package/components/common-app-component/common-app-component.d.ts.map +1 -1
  13. package/components/crud/crud-form/crud-form.component.d.ts +1 -1
  14. package/components/datetime-picker/datetime-picker.component.d.ts.map +1 -1
  15. package/components/file-explorer/file-manager/file-manager.component.d.ts +1 -1
  16. package/components/file-explorer/file-manager/file-manager.component.d.ts.map +1 -1
  17. package/components/file-explorer/services/file-explorer.service.d.ts +1 -0
  18. package/components/file-explorer/services/file-explorer.service.d.ts.map +1 -1
  19. package/components/image-uploader/image-uploader.component.d.ts +7 -2
  20. package/components/image-uploader/image-uploader.component.d.ts.map +1 -1
  21. package/components/service-file-upload/service-file-upload.component.d.ts.map +1 -1
  22. package/components/splash-component/splash-component.component.d.ts +0 -1
  23. package/components/splash-component/splash-component.component.d.ts.map +1 -1
  24. package/esm2015/components/access-denied-component/access-denied-v1/access-denied-v1.component.js +4 -4
  25. package/esm2015/components/avatar-uploader/avatar-uploader.component.js +8 -7
  26. package/esm2015/components/chat/chat-box/chat-box.component.js +4 -4
  27. package/esm2015/components/chat/chat-send-message-box/chat-send-message-box.component.js +1 -1
  28. package/esm2015/components/common-app-component/app-topbar-v1/app-topbar-v1.component.js +6 -5
  29. package/esm2015/components/common-app-component/app-topbar-v2/app-topbar-v2.component.js +10 -7
  30. package/esm2015/components/common-app-component/app.topbar.component.js +13 -8
  31. package/esm2015/components/common-app-component/common-app-component.js +14 -1
  32. package/esm2015/components/datetime-picker/datetime-picker.component.js +18 -23
  33. package/esm2015/components/file-explorer/file-ky-so-sim/file-ky-so-sim.component.js +1 -1
  34. package/esm2015/components/file-explorer/file-manager/file-manager.component.js +17 -10
  35. package/esm2015/components/file-explorer/services/file-explorer.service.js +15 -5
  36. package/esm2015/components/image-uploader/image-uploader.component.js +16 -4
  37. package/esm2015/components/not-found/not-found.component.js +1 -1
  38. package/esm2015/components/service-file-upload/service-file-upload.component.js +10 -5
  39. package/esm2015/components/splash-component/splash-component-v1/splash-component-v1.component.js +4 -4
  40. package/esm2015/components/splash-component/splash-component-v2/splash-component-v2.component.js +1 -1
  41. package/esm2015/components/splash-component/splash-component.component.js +4 -14
  42. package/esm2015/services/crud.service.js +17 -27
  43. package/esm2015/services/customize-ui.service.js +1 -1
  44. package/esm2015/services/user.service.js +1 -1
  45. package/fesm2015/tnx-shared.js +148 -116
  46. package/fesm2015/tnx-shared.js.map +1 -1
  47. package/package.json +2 -2
  48. package/services/crud.service.d.ts.map +1 -1
  49. package/services/user.service.d.ts.map +1 -1
  50. package/tnx-shared.metadata.json +1 -1
  51. package/assets/package.json.tmp +0 -13
@@ -51,7 +51,7 @@ export class ChatBoxComponent extends ComponentBase {
51
51
  this._moduleConfig = this._moduleConfigService.getConfig();
52
52
  this.environment = this._moduleConfig.environment;
53
53
  this.defaultAvatar = this.environment.appMetadata.main.defaultMaleAvatar;
54
- this.fileApi = this.environment.apiDomain.fileEndpoint;
54
+ this.fileApi = `${this.environment.apiDomain.fileEndpoint}/${this.environment.apiVersion}/FileObject`;
55
55
  this.model.userPickerForm = { popupSize: PopupSize, data: {} };
56
56
  this.model.quickNoteForm = { popupSize: {}, data: {} };
57
57
  this.context.subscribe('QUICK_NOTE_POPUP.CLOSE_POPUP', response => {
@@ -540,7 +540,7 @@ export class ChatBoxComponent extends ComponentBase {
540
540
  }
541
541
  getCurrentUserAvatar(avatar) {
542
542
  if (avatar != null) {
543
- return `${this.fileApi}/file/public/${avatar}/Download`;
543
+ return `${this.fileApi}/public/${avatar}/Download`;
544
544
  }
545
545
  else {
546
546
  return this.defaultAvatar;
@@ -599,7 +599,7 @@ ChatBoxComponent.decorators = [
599
599
  selector: 'chat-box',
600
600
  template: "<div class=\"dashboard\">\r\n <div class=\"chat\">\r\n <div class=\"group-info\">\r\n <a href=\"javascript:\">C\u00F3 {{peopleAll.length}} ng\u01B0\u1EDDi trong nh\u00F3m n\u00E0y</a>\r\n <div class=\"circleButton\" pTooltip=\"Xem to\u00E0n b\u1ED9 \u0111\u00EDnh k\u00E8m\" tooltipPosition=\"top\">\r\n <a href=\"javascript:\"><i class=\"far fa-images\"></i></a>\r\n </div>\r\n <div (click)=\"addPeople()\" class=\"circleButton\" pTooltip=\"Th\u00EAm m\u1EDBi ng\u01B0\u1EDDi v\u00E0o nh\u00F3m\" tooltipPosition=\"top\"\r\n disabled=\"true\">\r\n <a href=\"javascript:\"><i class=\"fas fa-user-plus\"></i></a>\r\n </div>\r\n </div>\r\n <ul #scrollMe [ngClass]=\"{'hasPin': model.pinnedMessage != null}\">\r\n <li *ngIf=\"model.pinnedMessage\" class=\"clearfix pin\" [ngClass]=\"{'message-from': true}\">\r\n <ng-container\r\n *ngTemplateOutlet=\"messageItem; context: { i : -1, item: model.pinnedMessage, isPinnedMessage: true}\">\r\n </ng-container>\r\n </li>\r\n <li *ngFor=\"let item of model.dataSource; let i = index; trackBy: trackByFunc\" class=\"clearfix\"\r\n [ngClass]=\"{ 'message-own': item.type == 'own'}\">\r\n <ng-container *ngTemplateOutlet=\"messageItem; context: { i : i, item: item}\">\r\n </ng-container>\r\n </li>\r\n </ul>\r\n <!-- <chat-send-message-box *ngIf=\"showSendMessageBox\"></chat-send-message-box>-->\r\n <div [ngClass]=\"{'visible2': model.scrolling, 'hidden2': !model.scrolling}\" class=\"scroll-to-bottom\">\r\n <span *ngIf=\"model.newMessageNotUpdatedCount > 0\" (click)=\"scrollToBottom(350, true, null)\">\r\n {{model.newMessageNotUpdatedCount <= 5 ? model.newMessageNotUpdatedCount : '5+' }} </span>\r\n <span (click)=\"scrollToBottom(350, true, null)\" *ngIf=\"model.newMessageNotUpdatedCount == 0\">\r\n <i class=\"fas fa-chevron-down\"></i>\r\n </span>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<file-viewer *ngIf=\"fileViewerModel.showEditForm\" [parentContext]=\"context\" [parentModel]=\"model\"\r\n [model]=\"fileViewerModel\">\r\n</file-viewer>\r\n\r\n<ng-template #messageItem let-i=\"i\" let-isPinnedMessage=\"isPinnedMessage\" let-item=\"item\">\r\n <img *ngIf=\"item.isFirstMessageFlow && item.type != 'own' && !isPinnedMessage && item.avatar != null\" alt=\"\"\r\n class=\"chat-avatar\" src=\"{{getCurrentUserAvatar(item.avatar)}}\">\r\n <p *ngIf=\"(item.isFirstMessageFlow && item.type != 'own') && !isPinnedMessage\" class=\"message-created-by\">\r\n {{item.fullName}}\r\n </p>\r\n <span *ngIf=\"!hasAttachment(item)\">\r\n <!-- [class]=\"addClassToMessage(item, isPinnedMessage)\">-->\r\n <p *ngIf=\"!hasAttachment(item)\" class=\"message-content\">\r\n <i (click)=\"pinMessage(item)\" class=\"fas fa-thumbtack\" style=\"right: 0;\"></i>\r\n <i (click)=\"quickNote(item)\" class=\"fas fa-sticky-note\"></i>\r\n {{item.content}}\r\n </p>\r\n <p *ngIf=\"!isPinnedMessage && (item.isLastMessageFlow || !inTheSameTime(i, item, model.dataSource))\"\r\n class=\"message-created\" pTooltip=\"{{item.created | date:'dd/MM/yyyy HH:mm'}}\"\r\n tooltipPosition=\"{{item.type != 'own'?'right':'left'}}\">\r\n {{_crudService.renderDateTime(item.created)}}\r\n </p>\r\n <p *ngIf=\"isPinnedMessage\" class=\"message-created\">\r\n {{item.createdBy}} \u0111\u00E3 g\u1EEDi l\u00FAc {{item.created | date:'dd/MM/yyyy HH:mm'}}\r\n </p>\r\n </span>\r\n <ng-container *ngIf=\"hasAttachment(item)\">\r\n <ng-container *ngFor=\"let attachmentItem of item.attachments;let index=index\">\r\n <div class=\"file\"\r\n [ngClass]=\"{'first':item.isFirstMessageFlow && index == 0, 'middle':index > 0 || !item.isFirstMessageFlow, 'image' : attachmentItem.type == 'image'}\"\r\n [ngStyle]=\"{'width': model.img[i + 'width' + index]}\">\r\n <p class=\"attachment\">\r\n <span (mouseup)=\"onMouseUp($event)\" class=\"attachment-item\">\r\n <a *ngIf=\"attachmentItem.type != 'image'\" (click)=\"viewOrDownloadFile($event, attachmentItem)\">\r\n <i class=\"fas fa-paperclip\"></i>{{attachmentItem.fileName}}\r\n </a>\r\n <a *ngIf=\"attachmentItem.type == 'image'\" #aElement\r\n [ngClass]=\"{'hidden': !model.img[i + '' + index], 'visible':model.img[i + '' + index]}\"\r\n (click)=\"viewOrDownloadFile($event, attachmentItem)\">\r\n <img class=\"message-img\" (load)=\"loadImg($event, i, index)\"\r\n [src]=\"attachmentItem.url | secure | async\" />\r\n </a>\r\n </span>\r\n </p>\r\n <div style=\"clear: both\"></div>\r\n <p class=\"message-created\" pTooltip=\"{{item.created | date:'dd/MM/yyyy HH:mm'}}\"\r\n tooltipPosition=\"{{item.type != 'own'?'right':'left'}}\">\r\n {{_crudService.renderDateTime(item.created)}}\r\n </p>\r\n </div>\r\n <div style=\"clear: both\"></div>\r\n </ng-container>\r\n </ng-container>\r\n <after-view-checked *ngIf=\"model.dataSource.length == i + 1\" (loading)=\"scrollToBottom(0, false, item.sent)\">\r\n </after-view-checked>\r\n</ng-template>\r\n\r\n<!--<tn-dialog *ngIf=\"userPickerForm.show\" #dialog [styleClass]=\"'tn-form-dialog'\"-->\r\n<!-- [header]=\"'Th\u00EAm m\u1EDBi ng\u01B0\u1EDDi d\u00F9ng' | translate\" [popupSize]=\"userPickerForm.popupSize\"-->\r\n<!-- (onCancel)=\"userPickerForm.show = false\"-->\r\n<!-- (onHide)=\"userPickerForm.show = false\">-->\r\n<!-- &lt;!&ndash; <congviec-form #formBase [parentModel]=\"model\" [parentContext]=\"context\" [model]=\"formModel\"&ndash;&gt;-->\r\n<!-- &lt;!&ndash; (onSaved)=\"showDetailForm = false;crudList.reload()\" (onCancel)=\"_handleCancel($event)\"&ndash;&gt;-->\r\n<!-- &lt;!&ndash; (onAfterSaved)=\"onAfterSaved($event)\"></congviec-form>&ndash;&gt;-->\r\n<!-- <user-picker-box #formBase [control]=\"userPickerControl\"-->\r\n<!-- [(ngModel)]=\"this.peopleAll\" [multiple]=\"userPickerControl.multiple\">-->\r\n<!-- </user-picker-box>-->\r\n<!--</tn-dialog>-->\r\n\r\n\r\n<!--<tn-dialog *ngIf=\"userPickerForm.show\" #dialog [styleClass]=\"'tn-form-dialog'\"-->\r\n<!-- [header]=\"'Th\u00EAm m\u1EDBi ng\u01B0\u1EDDi d\u00F9ng' | translate\" [popupSize]=\"userPickerForm.popupSize\" (onHide)=\"userPickerForm.show == false\">-->\r\n<!-- &lt;!&ndash; <congviec-form #formBase [parentModel]=\"model\" [parentContext]=\"context\" [model]=\"formModel\"&ndash;&gt;-->\r\n<!-- &lt;!&ndash; (onSaved)=\"showDetailForm = false;crudList.reload()\" (onCancel)=\"_handleCancel($event)\"&ndash;&gt;-->\r\n<!-- &lt;!&ndash; (onAfterSaved)=\"onAfterSaved($event)\"></congviec-form>&ndash;&gt;-->\r\n\r\n<!-- &lt;!&ndash;<quick-add-form *ngIf=\"model.editFormModel.showQuickNoteForm\" [parentContext]=\"context\"&ndash;&gt;-->\r\n<!-- &lt;!&ndash; [parentModel]=\"context.data.noteDataModel\"></quick-add-form>&ndash;&gt;-->\r\n<!--</tn-dialog>-->",
601
601
  providers: [ComponentContextService, CheckControlVisibleService],
602
- styles: [".paging-advance{list-style:none;margin:3px 0;padding-left:0}.paging-advance li{line-height:30;padding-left:15px;width:150px}.paging-advance li.disabled{color:#bdbdbd;outline:none}.paging-advance li.disabled:hover{background:none;cursor:default}.paging-advance li:hover{background:red;cursor:pointer}.paging-advance-overlay .ui-overlaypanel-content{padding:0}.paging-advance-overlay.ui-overlaypanel-shifted:before{left:1.25em;margin-left:-10;right:auto}.paging-advance-overlay.ui-overlaypanel-shifted:after{left:1.25em;margin-left:-8px;right:auto}.chat-avatar{border:2px solid #eee;height:36px}", "@charset \"UTF-8\";@import url(G:\\git.dttt.vn\\5.1\\shared\\AppSharedV5\\node_modules\\@angular\\material\\prebuilt-themes\\indigo-pink.css);@import url(G:\\git.dttt.vn\\5.1\\shared\\AppSharedV5\\node_modules\\jsoneditor\\dist\\jsoneditor.min.css);.flex{display:flex}.flex .fit{flex:1 1}.flex.flex-column{flex-direction:column}.flex.flex-wrap{flex-wrap:wrap}.flex.center-v{align-items:center}.flex.center-all,.flex.center-h{justify-content:center}.flex.center-all{align-items:center}.validate-item{color:#e00000;display:inline-block;font-size:.9em;white-space:nowrap}.tn-scroll-bar.bgWhite>div,.validate-item{background-color:#fff}.label-primary{background-color:#1ab394;padding:2px}.label-danger,.label-primary{border-radius:.25em;color:#fff;display:inline-block;font-size:12px;margin-left:3px;margin-right:3px;min-width:60px}.label-danger{background-color:#ed5565;padding:2px 5px}.label-warning{background-color:#b8860b}.label-secondary,.label-warning{border-radius:.25em;color:#fff;display:inline-block;font-size:12px;margin-left:3px;margin-right:3px;min-width:60px;padding:2px}.label-secondary{background-color:#a9a9a9}.label-done{background-color:#3b1ef7;border-radius:.25em;color:#fff;display:inline-block;font-size:12px;margin-left:3px;margin-right:3px;min-width:60px;padding:2px}.text-navy{color:#1ab394!important}.text-danger{color:red!important}.fa-user-edit{font-size:14px}.flexcolumn{border:1px solid #eee;border-radius:5px;min-height:80px;overflow-x:hidden;overflow-y:hidden}.flexcolumn,.has2ScrollZone2 .flexcolumn{max-height:calc(100vh - 180px)}.headerNoBorder>th{border:none!important;border-bottom:1px solid #eee!important}.cellNoBorder table tr td{border:0!important}.layout-wrapper .layout-main{overflow:hidden;padding:60px 0 0}div.circleButton{border-radius:50%;display:inline-block;height:32px;line-height:32px;margin-bottom:4px;margin-top:4px;overflow:hidden;position:relative;text-align:center;transform:perspective(1px);width:32px}div.circleButton>a{line-height:32px;padding:0!important}div.circleButton>a>i{width:24px!important}div.circleButton:before{background:#e6e6e6;border-radius:50%;bottom:0;content:\"\";left:0;position:absolute;right:0;top:0;transform:scale(0);transition:all .3s cubic-bezier(.4,.34,.01,.97);z-index:-1}div.circleButton:hover:before{transform:scale(1)}.message-notice{background:#e0e0e0;text-align:center}.message-created-by{color:#888;font-size:.82em;font-weight:400;margin-bottom:3px;margin-left:45px;margin-top:5px}.message-created{color:#495057;display:inline-block;font-size:.82em;margin-bottom:0;margin-top:0}.message-own .message-created{padding-left:10px;padding-right:6px}.message-from .message-created{padding-left:6px;padding-right:10px}.message-content{color:#000;line-height:20px;margin-bottom:6px;margin-top:3px;position:relative}.message-content i{display:none}.message-content:hover i{display:block}.message-content:hover{padding-right:20px!important}.chat-box-content{max-height:500px}.attachment-list .attachment-item{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;background:#f1f1f1;border:1px solid #ccc;border-radius:8px;box-shadow:1px 2px 3px rgba(0,0,0,.06);float:left;height:84px;margin:8px;overflow:hidden;position:relative;text-align:center;user-select:none;width:84px}.attachment-list .attachment-item img{height:100%;width:100%}.attachment-list .attachment-item span{left:0;padding:5px;position:absolute;top:25px;width:100%;word-break:break-all}.clearfix{clear:both}.dashboard .chat ul li img.message-img{float:none;height:120px;margin-left:0;width:auto}.message-attachment{cursor:pointer;font-size:1.5em;margin:0 5px 0 0;position:relative}.hidden{display:none}.message-input{width:100%}.message-input label{font-size:1.2rem}.remove-file-attachment{background:#495057;border-radius:50%;color:#fff;cursor:pointer;font-size:20px;position:absolute;right:5px;top:5px}.attachment-list{background:#fff;bottom:51px;box-shadow:0 -2px 3px -3px rgba(0,0,0,.21176470588235294);display:none;height:100px;left:-15px;position:absolute;width:calc(100% + 30px)}.attachment-list.attached-file{display:block}.dashboard{margin-bottom:-15px;margin-top:-5px}.dashboard .timeline>.ui-g .ui-g-9 .event-text{color:#555;white-space:nowrap}.dashboard .timeline>.ui-g .ui-g-9 .event-text.event-text2{line-height:18px;padding-left:30px;text-align:justify;white-space:pre-wrap}.dashboard .timeline>.ui-g .ui-g-9 .event-text.event-text2 i{left:20px;margin-top:3px;position:absolute}.new-message{align-items:center;justify-content:center}.dashboard .chat .new-message{border:0;display:flex;margin:0;padding:0;text-align:left}.dashboard .chat .new-message i{color:#495057}.dashboard .chat .new-message .message-attachment{border:0}.dashboard .chat .new-message .button-send{display:inline-block;line-height:40px;position:relative}.dashboard .chat .new-message .button-send .p-button-label{text-align:center}.dashboard .chat .new-message .message-emotion{display:inline-block;height:100%;line-height:40px;text-align:center;width:40px}.dashboard .chat .new-message .message-emotion i{font-size:24px;line-height:inherit}.dashboard .chat .new-message .message-input{width:calc(100% - 155px)}.dashboard .chat ul li.message-from,.dashboard .chat ul li.message-own{padding:0}.dashboard .chat ul li.message-from>span{background-color:#f0e3fd;border:0;border-radius:2px 20px 20px 2px}.dashboard .chat ul li.message-from>.first,.dashboard .chat ul li.message-from>.middle{margin-left:45px!important}.dashboard .chat ul li.message-from>.last{border-radius:2px 20px 20px 20px;margin-left:45px!important}.dashboard .chat ul li.message-from>img{border-radius:50%;margin-top:5px;position:absolute;width:36px}.dashboard .chat ul li.message-own>span{background-color:#def6f8;border:0;border-radius:20px 2px 2px 20px;text-align:right}.dashboard .chat ul li.message-own>span.sending{background-color:#eee}.dashboard .chat ul li.message-own>span.last{border-radius:20px 2px 20px 20px}.dashboard .chat ul li.message-own .attachment span.attachment-item{background-color:#f1f1f1!important;border:0!important;padding-left:0;padding-right:0}.dashboard .chat ul li.message-own .attachment span.attachment-item a{color:#555;cursor:pointer;display:inline-block;font-weight:700}.dashboard .chat ul li.message-own>div.file{background:#f1f1f1;border:1px solid #e4e4e4;border-radius:6px;display:inline-block;margin:1px;overflow:hidden;text-align:right}.dashboard .chat ul li.message-from .attachment span.attachment-item{background-color:#f1f1f1!important;border:0!important;padding-left:0;padding-right:0}.dashboard .chat ul li.message-from .attachment span.attachment-item a{color:#555;cursor:pointer;display:inline-block;font-weight:700}.dashboard .chat ul li.message-from .attachment span.attachment-item a img{margin-right:0}.dashboard .chat ul li.message-from>div.file{background:#f1f1f1;border:1px solid #e4e4e4;border-radius:6px;display:inline-block;margin:1px;overflow:hidden;text-align:left}.dashboard .chat ul li .attachment span.attachment-item a>i{padding-right:8px}.dashboard .chat ul li div.file p.attachment{display:inline-block;margin-bottom:5px}.dashboard .chat ul li.message-from{text-align:left}.dashboard .chat ul li.message-own{text-align:right}.dashboard .chat ul li>div.file.image{height:170px;max-width:100%;padding:15px;transition:width .15s linear;width:220px}.dashboard .chat ul li>div.file.image p.attachment{height:120px}.dashboard .chat ul li>div.file{padding:15px}.dashboard .chat ul li>div.file p,.dashboard .chat ul li>div.file span{display:inline-block;margin:0;padding:0}.visible{opacity:1;transition:opacity .15s linear;visibility:visible}.hidden{opacity:0;transition:visibility 0s .1s,opacity .1s linear;visibility:hidden}.visible2{opacity:1;transition:opacity .35s linear;visibility:visible}.hidden2{opacity:0;transition:visibility 0s .3s,opacity .3s linear;visibility:hidden}.dashboard .chat{position:relative}.dashboard .chat .scroll-to-bottom{bottom:6px;min-height:40px;padding-right:12px;position:-webkit-sticky;position:sticky;text-align:right}.dashboard .chat .scroll-to-bottom span{background:#495057;border:2px solid #fff;border-radius:50%;box-shadow:0 0 10px rgba(0,0,0,.34901960784313724);color:#fff;cursor:pointer;display:inline-block;font-size:20px;height:35px;line-height:35px;overflow:hidden;text-align:center;width:35px}.dashboard .chat .group-info{line-height:30px;margin:-10px;padding:5px 10px;top:0;z-index:99}.dashboard .chat .group-info,.dashboard .chat .pin{background:#fff;box-shadow:0 0 3px -1px rgba(0,0,0,.21176470588235294);position:-webkit-sticky;position:sticky}.dashboard .chat .pin{margin-bottom:10px;margin-left:-10px;top:40px;width:calc(100% + 20px);z-index:98}.dashboard .chat ul li.message-from.pin>span,.dashboard .chat ul li.message-own.pin>span{background-color:transparent}.dashboard .chat ul li.message-from.pin>span{margin-left:0}.dashboard .chat .message-content i{color:#495057;cursor:pointer;font-size:11px}.dashboard .chat .pin .message-content i{display:block}.dashboard .chat li.message-from .message-content{padding-left:6px}.dashboard .chat li.message-from .message-content i{padding:5px}.dashboard .chat li.message-own .message-content i{padding:5px;position:absolute;right:-15px}.dashboard .chat .group-info .circleButton{float:right;margin-bottom:0;margin-top:0}.dashboard .chat ul{margin-top:20px;padding:0}.dashboard .chat .new-message .message-input input.ui-inputtext:focus{box-shadow:none;outline:none}.dashboard .chat ul.hasPin{margin-top:10px}.dashboard .chat .group-info a{color:#495057}.normalHtml,.normalHtml b,.normalHtml strong{font-weight:400}.normalHtml{display:inline-block}.avatar-viewer .profile-image{border:1px solid #fff;border-radius:50%;height:40px;margin-top:-6px;width:40px}a.button>i{margin-right:5px}.dashboard .timeline{padding-top:20px}.ui-inputgroup .ui-inputtext{padding-right:0}.new-message .ui-inputtext{width:100%}.full-screen,.full-screen>.p-dialog{height:100%!important;left:0!important;max-height:100%;min-height:unset!important;min-width:100%!important;top:0!important;width:100%!important}#image-view-list.image-gallery-2{background-color:rgba(0,0,0,.4);height:calc(100vh - 41px);margin:-14px auto 0;touch-action:none;width:100%}#image-view-list.image-gallery-2 .image-container{background-color:transparent;border:0;bottom:0;height:85%;margin:auto}#image-view-list.image-gallery-2 .image-container .iv-snap-view{bottom:20px;left:calc(50% - 75px);top:auto}#image-view-list.image-gallery-2 .image-container .iv-image-view img{touch-action:auto}#image-view-list .inline-icon{margin-top:-41px}#image-view-list .footer-info,#image-view-list .material-icons.next,#image-view-list .material-icons.prev{display:none}#image-view-list .options-image-viewer{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;margin-right:37px;user-select:none}.mobile-image-viewer-close{color:#fff;cursor:pointer;font-size:x-large;height:42px;line-height:42px;padding-right:7px;padding-top:2px;position:absolute;right:0;text-align:center;top:0;vertical-align:middle;width:37px}.mobile-image-viewer-close:hover{color:#feca37!important}.hide-holder{padding:0}.file-ex-name{word-break:break-all}.box-function{background:#fff;border-radius:0 0 5px 5px;border-top:1px solid #e8e8e8;bottom:0;left:0;padding:8px 30px;position:absolute;text-align:right;width:100%}.box-function button{margin-left:5px}.quick-note-button-holder{bottom:40px;display:none;height:50px;position:absolute;right:50px;width:50px;z-index:99}.quick-note-button{background:#ffc107;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 5px 0 #b9b9b9;color:#fff;display:block;font-size:2em;height:50px;line-height:50px;outline:none;text-align:center;width:50px}.quick-note-button:hover{color:#fff}.all-note-button{background:#ffd24b;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 5px 0 #b9b9b9;color:#fff;display:block;font-size:1.5em;height:40px;line-height:40px;outline:none;position:absolute;right:5px;text-align:center;top:5px;transition:right;transition-duration:.16s;transition-timing-function:ease-in;width:40px;z-index:-1}.all-note-button:hover{color:#fff}.setting-note-button{background:#ffd24b;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 5px 0 #b9b9b9;color:#fff;display:block;font-size:1.5em;height:40px;line-height:40px;outline:none;position:absolute;right:5px;text-align:center;top:5px;transition:right;transition-duration:.16s;transition-timing-function:ease-in;width:40px;z-index:-1}.setting-note-button:hover{color:#fff}.pinned-notes-holder{bottom:20px;display:none;left:20px;position:absolute;width:250px;z-index:98}.pinned-notes{background:transparent;display:block;outline:none;padding:0}.pinned-notes-header{font-size:1rem;font-weight:700}.pinned-notes-setting{position:absolute;right:.5rem}.pinned-note{background-color:#fff1ac;box-shadow:1px 2px 3px rgba(185,139,6,.6313725490196078);font-size:.8rem;margin-bottom:10px;padding:0;position:relative}.pinned-note:last-child{margin-bottom:0}.pinned-notes-minimize-button{background:#ffc003;border:1px solid #fff;border-radius:50%;box-shadow:1px 2px 3px rgba(185,139,6,.6313725490196078);color:#fff;cursor:pointer;height:25px;padding-top:5px;position:absolute;right:-15px;text-align:center;top:-15px;width:25px;z-index:1}.pinned-note-header-line{border:1px solid #fff;box-shadow:1px 1px 2px rgba(0,0,0,.4);height:calc(100% - 1rem);left:3px;margin-bottom:.5rem;margin-top:.5rem;max-height:20px;position:absolute;width:13px}.pinned-note-header-right{cursor:pointer;float:right;margin-left:3px;width:32px}.pinned-note-header-time{font-size:.6rem}.pinned-note-header-button-unpin{display:none;float:left;height:14px;margin-right:2px;opacity:.8;width:14px}.pinned-note-header-button-complete{display:none;padding-top:2px}.pinned-note-body{float:right;padding:.5rem .5rem .5rem 25px;width:100%}.pinned-note-body:hover{background-color:#feeb82}.pinned-note-body:hover .pinned-note-header-time{display:none}.pinned-note-body:hover .pinned-note-header-button-complete,.pinned-note-body:hover .pinned-note-header-button-unpin{display:block}.pinned-note-line-title{color:#333;display:block;font-weight:700;padding-bottom:6px}.pinned-note-line{display:block}.view-port{border-radius:5px;box-shadow:0 0 0 9999px rgba(0,0,0,.5882352941176471);display:none;height:0;width:0;z-index:999}.view-port,.view-port-mask{background:transparent;position:absolute}.view-port-mask{display:block;height:100%;left:0;top:0;width:100%;z-index:9998}.tinymce-control{border:1px solid #ccc;display:none;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;width:100%}.input-tab-trap{filter:alpha(opacity=0)!important;opacity:0!important;overflow:hidden!important;width:0!important}.color-value input{font-size:.8em;line-height:16px}.dialog-material.mobile{width:100%!important}audio,audio:focus,video,video:focus{outline:none}.iv-image-view img.iv-image{-webkit-animation:fadein .5s;animation:fadein .5s;visibility:hidden!important}@-webkit-keyframes fadein{0%{opacity:0}to{opacity:1}}@keyframes fadein{0%{opacity:0}to{opacity:1}}.iv-image-view img.iv-image.show{visibility:visible!important}.row-line{padding-bottom:0;padding-top:0}.fc-ltr{padding-bottom:7px}.padding-bottom-5px{padding-bottom:5px}.no-margin{margin:0!important}.no-padding{padding:0}.no-padding-left{padding-left:0}.float-left{float:left}body .fc .fc-toolbar .fc-button{background-color:#007ad9;border:1px solid #007ad9;border-radius:3px;color:#fff;font-size:14px;transition:background-color .2s,box-shadow .2s}body .fc .fc-toolbar .fc-button:enabled:hover{background-color:#116fbf;border-color:#116fbf;color:#fff}body .fc .fc-toolbar .fc-button:focus{box-shadow:0 0 0 .2em #8dcdff;outline:0 none;outline-offset:0}body .fc .fc-toolbar .fc-button-group .fc-button{border-radius:0}body .fc .fc-toolbar .fc-button-group .fc-button:first-child{border-bottom-left-radius:3px;border-top-left-radius:3px}body .fc .fc-toolbar .fc-button-group .fc-button:last-child{border-bottom-right-radius:3px;border-top-right-radius:3px}body .fc .fc-toolbar .fc-right .fc-button{border-radius:0}body .fc .fc-toolbar .fc-right .fc-button:first-child{border-bottom-left-radius:3px;border-top-left-radius:3px}body .fc .fc-toolbar .fc-right .fc-button:last-child{border-bottom-right-radius:3px;border-top-right-radius:3px}.fc-toolbar>*>:not(:first-child){margin-left:0}.fc-axis,.fc-dayGridMonth-button,.fc-timeGridDay-button,.fc-timeGridWeek-button,.old-content{line-height:0;text-indent:-9999px}.fc-axis:after,.fc-dayGridMonth-button:after,.fc-timeGridDay-button:after,.fc-timeGridWeek-button:after,.new-content{display:block;line-height:normal;text-indent:0}.fc-dayGridMonth-button:after{content:\"Th\u00E1ng\";padding:.2em}.fc-timeGridWeek-button:after{content:\"Tu\u1EA7n\";padding:.2em}.fc-timeGridDay-button:after{content:\"Ng\u00E0y\";padding:.2em}body .fc th{background-color:#f4f4f4;border:1px solid #c8c8c8;color:#333;padding:.571em 1em}.ui-fluid .button-group button,.ui-fluid .button-group p-button{margin-right:.5em!important;text-align:left;width:auto}.layout-wrapper .layout-menu-container{z-index:97}.base-status,.base-status-aborted,.base-status-approved,.base-status-completed,.base-status-create-new,.base-status-ended,.base-status-high,.base-status-immediately,.base-status-low,.base-status-medium,.base-status-on-conducting,.base-status-on-going,.base-status-pending,.base-status-rejected,.base-status-returned,.base-status-urgent{border-radius:.25em;color:#fff;font-size:.8em;padding:3px;text-align:center}.base-status-create-new{background-color:#f2f2f2;color:#666}.base-status-on-conducting,.base-status-on-going{background-color:#337ab7}.base-status-pending{background-color:#ffba01}.base-status-approved{background-color:#34a835}.base-status-returned{background-color:#ffba01}.base-status-rejected{background-color:#d9534f}.base-status-completed{background-color:#34a835}.base-status-aborted{background-color:#ffba01}.base-status-ended{background-color:#34a835}.base-status-low,.base-status-medium{background-color:#f2f2f2;color:#666}.base-status-high{background-color:#ffba01}.base-status-immediately,.base-status-urgent{background-color:#d9534f}.text-align-center{text-align:center}.font-weight-bold{font-weight:700}.landing-body .landing-menu li a:hover{border-bottom:none}.landing-body .landing-menu li:first-child{margin-left:8px}.crud-form .label-control p{margin:0;padding:0}.crud-form .tn-check-box-list .p-row{display:block;padding:.5em;width:100%}.crud-form dropdown,.crud-form tn-mask{width:100%}.crud-form .tn-dropdown{min-height:32px}.crud-form .tn-dropdown.free-text.horizontal{display:flex}.crud-form .tn-dropdown.free-text.horizontal>div{flex-grow:1;padding-left:.5em;padding-right:.5em}.crud-form .tn-dropdown.free-text.horizontal>div:first-child{padding-left:0}.crud-form .tn-dropdown.free-text.horizontal>div:last-child{padding-right:0}.crud-form .tn-dropdown.free-text.vertical input.ui-inputtext.input-free-text{margin-top:.5em}.crud-form.assessment .label-control{font-weight:700}.crud-form.assessment .label-control.haveIndex{display:block;margin-bottom:5px;padding-left:20px;position:relative}.crud-form.assessment .label-control.haveIndex:before{content:\" \" attr(label-index) \".\";left:0;position:absolute;top:0}.crud-form.assessment .ViewMode{border-bottom:none}.crud-form.assessment .ViewMode .label-control{margin-bottom:0}body .ui-inputtext.min-width{padding:6px}.ps__rail-x,.ps__rail-y{z-index:2}.zIndex5 .ps__rail-x,.zIndex5 .ps__rail-y{z-index:5}.table-sticky table{border-collapse:separate;border-spacing:0}.table-sticky tr td,.table-sticky tr th{border:1px solid #eee!important;border-left:none!important;border-top:none!important}.table-sticky tr td:first-child,.table-sticky tr th:first-child{border-left:1px solid #eee!important}.table-sticky tr td:last-child,.table-sticky tr th:last-child{border-right:none!important}.table-sticky tr:first-child th{border-top:1px solid #eee!important}.table-sticky th{background:#eee}.table-sticky tbody td.disabled{background:#eee!important}.table-sticky tbody td.disabled:not(:last-child){border-right:1px solid #fff!important}.table-sticky.fix-height tr:first-child th{position:-webkit-sticky;position:sticky;top:0;z-index:2}.container-flex{align-items:center;display:flex}.container-flex>div:first-child{flex:0 0 auto;margin-right:.5em}.container-flex>div:last-child{flex-grow:1}.container-control{display:flex}.container-control>span.label{flex:0 0 auto;padding-right:.5em;padding-top:.5em}.container-control>span.label+*{flex-grow:1;flex-shrink:1;position:relative}.container-control>span.label+* .tn-dropdown,.container-control>span.label+* .ui-autocomplete-multiple,.container-control>span.label+* .ui-inputgroup .ui-inputtext{width:100%}.container-control>span.label+* .validation-container{margin-top:3px}.container-control>span.label+* .validation-container .validate-item{white-space:unset}.container-control>span.label+*>div{left:0;position:absolute;top:0;width:100%}.container-control.no-label>span.label{display:none}.container-control.inline{display:inline-flex}.align-flex-center{align-items:center;display:flex;justify-content:center}@media print{.isPrinting>*{display:none}.isPrinting app-print-layout{display:block}}.layout-wrapper .topbar .topbar-left,.layout-wrapper .topbar .topbar-right{background:#397ac3}#searchResultPanel-holder{padding:0 .5em}.cus-dropdown{line-height:normal;margin-right:1em}.tn-thumbnail{padding:.5rem}.tn-thumbnail.tn-thumbnail.tn-thumbnail{box-sizing:border-box}.fa-10:before{content:\"A+\";font-family:cursive;font-weight:700}.layout-wrapper .topbar .topbar-right #menu-button i{font-size:20px;margin-top:4px}.layout-wrapper .layout-menu li a i.menuitem-toggle-icon{font-size:15px;margin-left:auto}.flex-container-main-content{display:flex;flex-direction:column}.flex-container-main-content>div:last-child{background-color:#f4f4f4;display:flex;flex:1 1;overflow:hidden;position:relative}.flex-container-main-content>div:last-child>div{height:100%;left:0;overflow:hidden;padding-top:.5em;position:absolute;top:0;width:100%}.flex-container-main-content .block-with-button-search{display:flex;justify-content:flex-end}.flex-container-main-content .block-with-button-search>*{margin-left:.5em}.flex-container-main-content .block-with-button-search>input{height:26px;margin-left:0;max-width:200px;width:100%}.flex-container-main-content .block-with-button-search>dropdown{max-width:140px;width:100%}.flex-container-main-content .title-main-component{border-bottom:2px solid #1ca7ff}.clickable-table.clickable-table{cursor:pointer}.main-crud-container{height:calc(100vh - 76px)}.flex-container-fit-child{display:flex;flex-direction:column;height:100%;overflow:hidden}.flex-container-fit-child>div.fit-content{flex:1 1;position:relative}.flex-container-fit-child>div.fit-content>div{height:100%;overflow:auto;position:absolute;width:100%}.waiting-box{display:none;height:100%;left:0;position:fixed;top:0;width:100%;z-index:9999}.waiting-box .overlay{background-color:red;background-color:hsla(0,0%,42.7%,.5019607843137255);height:100%;width:100%}.waiting-box .content-loading{left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.waiting-box.show{display:block}.function-topbar>*{vertical-align:top}.function-topbar button{width:auto}.function-topbar p-fileUpload{margin-right:1em}.function-topbar .container-control{display:inline-flex;line-height:normal}.function-topbar .container-control dropdown{width:100%}:focus{outline-color:#a6d5fa!important}address{font-style:normal}body .p-toast .p-toast-message{border-radius:0;border-width:0 0 0 4px!important}.__status span,.status span{font-size:.8rem}p-table.single-check .p-datatable .p-datatable-tbody>tr{cursor:pointer}p-table.single-check .p-datatable .p-datatable-tbody>tr.ui-state-highlight{background:#e3f2fd!important;outline:2px solid #a6d5fa}p-table.single-check .p-datatable .p-datatable-tbody>tr td.sticky .fix-sticky.top{display:none}p-table.multi-check .p-datatable .p-datatable-tbody>tr.ui-state-highlight{background:#e3f2fd!important}p-table.multi-check .p-datatable .p-datatable-tbody>tr.ui-state-highlight td{border-color:#fff}p-table.multi-check .p-datatable .p-datatable-tbody>tr.ui-state-highlight td .fix-sticky{background-color:#fff}.tn-animated-left-arrow-icon,.tn-animated-right-arrow-icon{height:32px;position:relative;width:14px;z-index:10}.tn-animated-right-arrow-icon{-webkit-animation:arrowBounceToRight .8s ease-in-out infinite alternate;animation:arrowBounceToRight .8s ease-in-out infinite alternate}.tn-animated-left-arrow-icon{-webkit-animation:arrowBounceToLeft .8s ease-in-out infinite alternate;animation:arrowBounceToLeft .8s ease-in-out infinite alternate}.tn-animated-left-arrow-icon:after,.tn-animated-left-arrow-icon:before,.tn-animated-right-arrow-icon:after,.tn-animated-right-arrow-icon:before{background-color:#88b0dd;content:\"\";display:block;height:20px;position:absolute;width:5px}.tn-animated-right-arrow-icon:before{left:4px;top:0;transform:rotate(-35deg)}.tn-animated-right-arrow-icon:after{left:4px;top:14px;transform:rotate(35deg)}.tn-animated-left-arrow-icon:before{right:4px;top:0;transform:rotate(35deg)}.tn-animated-left-arrow-icon:after{right:4px;top:14px;transform:rotate(-35deg)}@-webkit-keyframes arrowBounceToLeft{0%{transform:translateX(-3px)}to{transform:translateX(3px)}}@keyframes arrowBounceToLeft{0%{transform:translateX(-3px)}to{transform:translateX(3px)}}@-webkit-keyframes arrowBounceToRight{0%{transform:translateX(3px)}to{transform:translateX(-3px)}}@keyframes arrowBounceToRight{0%{transform:translateX(3px)}to{transform:translateX(-3px)}}.pass{color:#49c949}.not-pass,.pass{margin:5px;text-align:center}.not-pass{color:red}"]
602
+ styles: [".paging-advance{list-style:none;margin:3px 0;padding-left:0}.paging-advance li{line-height:30;padding-left:15px;width:150px}.paging-advance li.disabled{color:#bdbdbd;outline:none}.paging-advance li.disabled:hover{background:none;cursor:default}.paging-advance li:hover{background:red;cursor:pointer}.paging-advance-overlay .ui-overlaypanel-content{padding:0}.paging-advance-overlay.ui-overlaypanel-shifted:before{left:1.25em;margin-left:-10;right:auto}.paging-advance-overlay.ui-overlaypanel-shifted:after{left:1.25em;margin-left:-8px;right:auto}.chat-avatar{border:2px solid #eee;height:36px}", "@charset \"UTF-8\";@import url(C:\\Users\\tuant\\OneDrive\\M\u00E1y t\u00EDnh\\TN.TriNam\\5.1\\shared\\AppSharedV5\\node_modules\\@angular\\material\\prebuilt-themes\\indigo-pink.css);@import url(C:\\Users\\tuant\\OneDrive\\M\u00E1y t\u00EDnh\\TN.TriNam\\5.1\\shared\\AppSharedV5\\node_modules\\jsoneditor\\dist\\jsoneditor.min.css);.flex{display:flex}.flex .fit{flex:1 1}.flex.flex-column{flex-direction:column}.flex.flex-wrap{flex-wrap:wrap}.flex.center-v{align-items:center}.flex.center-all,.flex.center-h{justify-content:center}.flex.center-all{align-items:center}.validate-item{color:#e00000;display:inline-block;font-size:.9em;white-space:nowrap}.tn-scroll-bar.bgWhite>div,.validate-item{background-color:#fff}.label-primary{background-color:#1ab394;padding:2px}.label-danger,.label-primary{border-radius:.25em;color:#fff;display:inline-block;font-size:12px;margin-left:3px;margin-right:3px;min-width:60px}.label-danger{background-color:#ed5565;padding:2px 5px}.label-warning{background-color:#b8860b}.label-secondary,.label-warning{border-radius:.25em;color:#fff;display:inline-block;font-size:12px;margin-left:3px;margin-right:3px;min-width:60px;padding:2px}.label-secondary{background-color:#a9a9a9}.label-done{background-color:#3b1ef7;border-radius:.25em;color:#fff;display:inline-block;font-size:12px;margin-left:3px;margin-right:3px;min-width:60px;padding:2px}.text-navy{color:#1ab394!important}.text-danger{color:red!important}.fa-user-edit{font-size:14px}.flexcolumn{border:1px solid #eee;border-radius:5px;min-height:80px;overflow-x:hidden;overflow-y:hidden}.flexcolumn,.has2ScrollZone2 .flexcolumn{max-height:calc(100vh - 180px)}.headerNoBorder>th{border:none!important;border-bottom:1px solid #eee!important}.cellNoBorder table tr td{border:0!important}.layout-wrapper .layout-main{overflow:hidden;padding:60px 0 0}div.circleButton{border-radius:50%;display:inline-block;height:32px;line-height:32px;margin-bottom:4px;margin-top:4px;overflow:hidden;position:relative;text-align:center;transform:perspective(1px);width:32px}div.circleButton>a{line-height:32px;padding:0!important}div.circleButton>a>i{width:24px!important}div.circleButton:before{background:#e6e6e6;border-radius:50%;bottom:0;content:\"\";left:0;position:absolute;right:0;top:0;transform:scale(0);transition:all .3s cubic-bezier(.4,.34,.01,.97);z-index:-1}div.circleButton:hover:before{transform:scale(1)}.message-notice{background:#e0e0e0;text-align:center}.message-created-by{color:#888;font-size:.82em;font-weight:400;margin-bottom:3px;margin-left:45px;margin-top:5px}.message-created{color:#495057;display:inline-block;font-size:.82em;margin-bottom:0;margin-top:0}.message-own .message-created{padding-left:10px;padding-right:6px}.message-from .message-created{padding-left:6px;padding-right:10px}.message-content{color:#000;line-height:20px;margin-bottom:6px;margin-top:3px;position:relative}.message-content i{display:none}.message-content:hover i{display:block}.message-content:hover{padding-right:20px!important}.chat-box-content{max-height:500px}.attachment-list .attachment-item{-moz-user-select:none;-webkit-user-select:none;background:#f1f1f1;border:1px solid #ccc;border-radius:8px;box-shadow:1px 2px 3px rgba(0,0,0,.06);float:left;height:84px;margin:8px;overflow:hidden;position:relative;text-align:center;user-select:none;width:84px}.attachment-list .attachment-item img{height:100%;width:100%}.attachment-list .attachment-item span{left:0;padding:5px;position:absolute;top:25px;width:100%;word-break:break-all}.clearfix{clear:both}.dashboard .chat ul li img.message-img{float:none;height:120px;margin-left:0;width:auto}.message-attachment{cursor:pointer;font-size:1.5em;margin:0 5px 0 0;position:relative}.hidden{display:none}.message-input{width:100%}.message-input label{font-size:1.2rem}.remove-file-attachment{background:#495057;border-radius:50%;color:#fff;cursor:pointer;font-size:20px;position:absolute;right:5px;top:5px}.attachment-list{background:#fff;bottom:51px;box-shadow:0 -2px 3px -3px rgba(0,0,0,.21176470588235294);display:none;height:100px;left:-15px;position:absolute;width:calc(100% + 30px)}.attachment-list.attached-file{display:block}.dashboard{margin-bottom:-15px;margin-top:-5px}.dashboard .timeline>.ui-g .ui-g-9 .event-text{color:#555;white-space:nowrap}.dashboard .timeline>.ui-g .ui-g-9 .event-text.event-text2{line-height:18px;padding-left:30px;text-align:justify;white-space:pre-wrap}.dashboard .timeline>.ui-g .ui-g-9 .event-text.event-text2 i{left:20px;margin-top:3px;position:absolute}.new-message{align-items:center;justify-content:center}.dashboard .chat .new-message{border:0;display:flex;margin:0;padding:0;text-align:left}.dashboard .chat .new-message i{color:#495057}.dashboard .chat .new-message .message-attachment{border:0}.dashboard .chat .new-message .button-send{display:inline-block;line-height:40px;position:relative}.dashboard .chat .new-message .button-send .p-button-label{text-align:center}.dashboard .chat .new-message .message-emotion{display:inline-block;height:100%;line-height:40px;text-align:center;width:40px}.dashboard .chat .new-message .message-emotion i{font-size:24px;line-height:inherit}.dashboard .chat .new-message .message-input{width:calc(100% - 155px)}.dashboard .chat ul li.message-from,.dashboard .chat ul li.message-own{padding:0}.dashboard .chat ul li.message-from>span{background-color:#f0e3fd;border:0;border-radius:2px 20px 20px 2px}.dashboard .chat ul li.message-from>.first,.dashboard .chat ul li.message-from>.middle{margin-left:45px!important}.dashboard .chat ul li.message-from>.last{border-radius:2px 20px 20px 20px;margin-left:45px!important}.dashboard .chat ul li.message-from>img{border-radius:50%;margin-top:5px;position:absolute;width:36px}.dashboard .chat ul li.message-own>span{background-color:#def6f8;border:0;border-radius:20px 2px 2px 20px;text-align:right}.dashboard .chat ul li.message-own>span.sending{background-color:#eee}.dashboard .chat ul li.message-own>span.last{border-radius:20px 2px 20px 20px}.dashboard .chat ul li.message-own .attachment span.attachment-item{background-color:#f1f1f1!important;border:0!important;padding-left:0;padding-right:0}.dashboard .chat ul li.message-own .attachment span.attachment-item a{color:#555;cursor:pointer;display:inline-block;font-weight:700}.dashboard .chat ul li.message-own>div.file{background:#f1f1f1;border:1px solid #e4e4e4;border-radius:6px;display:inline-block;margin:1px;overflow:hidden;text-align:right}.dashboard .chat ul li.message-from .attachment span.attachment-item{background-color:#f1f1f1!important;border:0!important;padding-left:0;padding-right:0}.dashboard .chat ul li.message-from .attachment span.attachment-item a{color:#555;cursor:pointer;display:inline-block;font-weight:700}.dashboard .chat ul li.message-from .attachment span.attachment-item a img{margin-right:0}.dashboard .chat ul li.message-from>div.file{background:#f1f1f1;border:1px solid #e4e4e4;border-radius:6px;display:inline-block;margin:1px;overflow:hidden;text-align:left}.dashboard .chat ul li .attachment span.attachment-item a>i{padding-right:8px}.dashboard .chat ul li div.file p.attachment{display:inline-block;margin-bottom:5px}.dashboard .chat ul li.message-from{text-align:left}.dashboard .chat ul li.message-own{text-align:right}.dashboard .chat ul li>div.file.image{height:170px;max-width:100%;padding:15px;transition:width .15s linear;width:220px}.dashboard .chat ul li>div.file.image p.attachment{height:120px}.dashboard .chat ul li>div.file{padding:15px}.dashboard .chat ul li>div.file p,.dashboard .chat ul li>div.file span{display:inline-block;margin:0;padding:0}.visible{opacity:1;transition:opacity .15s linear;visibility:visible}.hidden{opacity:0;transition:visibility 0s .1s,opacity .1s linear;visibility:hidden}.visible2{opacity:1;transition:opacity .35s linear;visibility:visible}.hidden2{opacity:0;transition:visibility 0s .3s,opacity .3s linear;visibility:hidden}.dashboard .chat{position:relative}.dashboard .chat .scroll-to-bottom{bottom:6px;min-height:40px;padding-right:12px;position:-webkit-sticky;position:sticky;text-align:right}.dashboard .chat .scroll-to-bottom span{background:#495057;border:2px solid #fff;border-radius:50%;box-shadow:0 0 10px rgba(0,0,0,.34901960784313724);color:#fff;cursor:pointer;display:inline-block;font-size:20px;height:35px;line-height:35px;overflow:hidden;text-align:center;width:35px}.dashboard .chat .group-info{line-height:30px;margin:-10px;padding:5px 10px;top:0;z-index:99}.dashboard .chat .group-info,.dashboard .chat .pin{background:#fff;box-shadow:0 0 3px -1px rgba(0,0,0,.21176470588235294);position:-webkit-sticky;position:sticky}.dashboard .chat .pin{margin-bottom:10px;margin-left:-10px;top:40px;width:calc(100% + 20px);z-index:98}.dashboard .chat ul li.message-from.pin>span,.dashboard .chat ul li.message-own.pin>span{background-color:transparent}.dashboard .chat ul li.message-from.pin>span{margin-left:0}.dashboard .chat .message-content i{color:#495057;cursor:pointer;font-size:11px}.dashboard .chat .pin .message-content i{display:block}.dashboard .chat li.message-from .message-content{padding-left:6px}.dashboard .chat li.message-from .message-content i{padding:5px}.dashboard .chat li.message-own .message-content i{padding:5px;position:absolute;right:-15px}.dashboard .chat .group-info .circleButton{float:right;margin-bottom:0;margin-top:0}.dashboard .chat ul{margin-top:20px;padding:0}.dashboard .chat .new-message .message-input input.ui-inputtext:focus{box-shadow:none;outline:none}.dashboard .chat ul.hasPin{margin-top:10px}.dashboard .chat .group-info a{color:#495057}.normalHtml,.normalHtml b,.normalHtml strong{font-weight:400}.normalHtml{display:inline-block}.avatar-viewer .profile-image{border:1px solid #fff;border-radius:50%;height:40px;margin-top:-6px;width:40px}a.button>i{margin-right:5px}.dashboard .timeline{padding-top:20px}.ui-inputgroup .ui-inputtext{padding-right:0}.new-message .ui-inputtext{width:100%}.full-screen,.full-screen>.p-dialog{height:100%!important;left:0!important;max-height:100%;min-height:unset!important;min-width:100%!important;top:0!important;width:100%!important}#image-view-list.image-gallery-2{background-color:rgba(0,0,0,.4);height:calc(100vh - 41px);margin:-14px auto 0;touch-action:none;width:100%}#image-view-list.image-gallery-2 .image-container{background-color:transparent;border:0;bottom:0;height:85%;margin:auto}#image-view-list.image-gallery-2 .image-container .iv-snap-view{bottom:20px;left:calc(50% - 75px);top:auto}#image-view-list.image-gallery-2 .image-container .iv-image-view img{touch-action:auto}#image-view-list .inline-icon{margin-top:-41px}#image-view-list .footer-info,#image-view-list .material-icons.next,#image-view-list .material-icons.prev{display:none}#image-view-list .options-image-viewer{-moz-user-select:none;-webkit-user-select:none;margin-right:37px;user-select:none}.mobile-image-viewer-close{color:#fff;cursor:pointer;font-size:x-large;height:42px;line-height:42px;padding-right:7px;padding-top:2px;position:absolute;right:0;text-align:center;top:0;vertical-align:middle;width:37px}.mobile-image-viewer-close:hover{color:#feca37!important}.hide-holder{padding:0}.file-ex-name{word-break:break-all}.box-function{background:#fff;border-radius:0 0 5px 5px;border-top:1px solid #e8e8e8;bottom:0;left:0;padding:8px 30px;position:absolute;text-align:right;width:100%}.box-function button{margin-left:5px}.quick-note-button-holder{bottom:40px;display:none;height:50px;position:absolute;right:50px;width:50px;z-index:99}.quick-note-button{background:#ffc107;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 5px 0 #b9b9b9;color:#fff;display:block;font-size:2em;height:50px;line-height:50px;outline:none;text-align:center;width:50px}.quick-note-button:hover{color:#fff}.all-note-button{background:#ffd24b;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 5px 0 #b9b9b9;color:#fff;display:block;font-size:1.5em;height:40px;line-height:40px;outline:none;position:absolute;right:5px;text-align:center;top:5px;transition:right;transition-duration:.16s;transition-timing-function:ease-in;width:40px;z-index:-1}.all-note-button:hover{color:#fff}.setting-note-button{background:#ffd24b;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 5px 0 #b9b9b9;color:#fff;display:block;font-size:1.5em;height:40px;line-height:40px;outline:none;position:absolute;right:5px;text-align:center;top:5px;transition:right;transition-duration:.16s;transition-timing-function:ease-in;width:40px;z-index:-1}.setting-note-button:hover{color:#fff}.pinned-notes-holder{bottom:20px;display:none;left:20px;position:absolute;width:250px;z-index:98}.pinned-notes{background:transparent;display:block;outline:none;padding:0}.pinned-notes-header{font-size:1rem;font-weight:700}.pinned-notes-setting{position:absolute;right:.5rem}.pinned-note{background-color:#fff1ac;box-shadow:1px 2px 3px rgba(185,139,6,.6313725490196078);font-size:.8rem;margin-bottom:10px;padding:0;position:relative}.pinned-note:last-child{margin-bottom:0}.pinned-notes-minimize-button{background:#ffc003;border:1px solid #fff;border-radius:50%;box-shadow:1px 2px 3px rgba(185,139,6,.6313725490196078);color:#fff;cursor:pointer;height:25px;padding-top:5px;position:absolute;right:-15px;text-align:center;top:-15px;width:25px;z-index:1}.pinned-note-header-line{border:1px solid #fff;box-shadow:1px 1px 2px rgba(0,0,0,.4);height:calc(100% - 1rem);left:3px;margin-bottom:.5rem;margin-top:.5rem;max-height:20px;position:absolute;width:13px}.pinned-note-header-right{cursor:pointer;float:right;margin-left:3px;width:32px}.pinned-note-header-time{font-size:.6rem}.pinned-note-header-button-unpin{display:none;float:left;height:14px;margin-right:2px;opacity:.8;width:14px}.pinned-note-header-button-complete{display:none;padding-top:2px}.pinned-note-body{float:right;padding:.5rem .5rem .5rem 25px;width:100%}.pinned-note-body:hover{background-color:#feeb82}.pinned-note-body:hover .pinned-note-header-time{display:none}.pinned-note-body:hover .pinned-note-header-button-complete,.pinned-note-body:hover .pinned-note-header-button-unpin{display:block}.pinned-note-line-title{color:#333;display:block;font-weight:700;padding-bottom:6px}.pinned-note-line{display:block}.view-port{border-radius:5px;box-shadow:0 0 0 9999px rgba(0,0,0,.5882352941176471);display:none;height:0;width:0;z-index:999}.view-port,.view-port-mask{background:transparent;position:absolute}.view-port-mask{display:block;height:100%;left:0;top:0;width:100%;z-index:9998}.tinymce-control{border:1px solid #ccc;display:none;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;width:100%}.input-tab-trap{filter:alpha(opacity=0)!important;opacity:0!important;overflow:hidden!important;width:0!important}.color-value input{font-size:.8em;line-height:16px}.dialog-material.mobile{width:100%!important}audio,audio:focus,video,video:focus{outline:none}.iv-image-view img.iv-image{-webkit-animation:fadein .5s;animation:fadein .5s;visibility:hidden!important}@-webkit-keyframes fadein{0%{opacity:0}to{opacity:1}}@keyframes fadein{0%{opacity:0}to{opacity:1}}.iv-image-view img.iv-image.show{visibility:visible!important}.row-line{padding-bottom:0;padding-top:0}.fc-ltr{padding-bottom:7px}.padding-bottom-5px{padding-bottom:5px}.no-margin{margin:0!important}.no-padding{padding:0}.no-padding-left{padding-left:0}.float-left{float:left}body .fc .fc-toolbar .fc-button{background-color:#007ad9;border:1px solid #007ad9;border-radius:3px;color:#fff;font-size:14px;transition:background-color .2s,box-shadow .2s}body .fc .fc-toolbar .fc-button:enabled:hover{background-color:#116fbf;border-color:#116fbf;color:#fff}body .fc .fc-toolbar .fc-button:focus{box-shadow:0 0 0 .2em #8dcdff;outline:0 none;outline-offset:0}body .fc .fc-toolbar .fc-button-group .fc-button{border-radius:0}body .fc .fc-toolbar .fc-button-group .fc-button:first-child{border-bottom-left-radius:3px;border-top-left-radius:3px}body .fc .fc-toolbar .fc-button-group .fc-button:last-child{border-bottom-right-radius:3px;border-top-right-radius:3px}body .fc .fc-toolbar .fc-right .fc-button{border-radius:0}body .fc .fc-toolbar .fc-right .fc-button:first-child{border-bottom-left-radius:3px;border-top-left-radius:3px}body .fc .fc-toolbar .fc-right .fc-button:last-child{border-bottom-right-radius:3px;border-top-right-radius:3px}.fc-toolbar>*>:not(:first-child){margin-left:0}.fc-axis,.fc-dayGridMonth-button,.fc-timeGridDay-button,.fc-timeGridWeek-button,.old-content{line-height:0;text-indent:-9999px}.fc-axis:after,.fc-dayGridMonth-button:after,.fc-timeGridDay-button:after,.fc-timeGridWeek-button:after,.new-content{display:block;line-height:normal;text-indent:0}.fc-dayGridMonth-button:after{content:\"Th\u00E1ng\";padding:.2em}.fc-timeGridWeek-button:after{content:\"Tu\u1EA7n\";padding:.2em}.fc-timeGridDay-button:after{content:\"Ng\u00E0y\";padding:.2em}body .fc th{background-color:#f4f4f4;border:1px solid #c8c8c8;color:#333;padding:.571em 1em}.ui-fluid .button-group button,.ui-fluid .button-group p-button{margin-right:.5em!important;text-align:left;width:auto}.layout-wrapper .layout-menu-container{z-index:97}.base-status,.base-status-aborted,.base-status-approved,.base-status-completed,.base-status-create-new,.base-status-ended,.base-status-high,.base-status-immediately,.base-status-low,.base-status-medium,.base-status-on-conducting,.base-status-on-going,.base-status-pending,.base-status-rejected,.base-status-returned,.base-status-urgent{border-radius:.25em;color:#fff;font-size:.8em;padding:3px;text-align:center}.base-status-create-new{background-color:#f2f2f2;color:#666}.base-status-on-conducting,.base-status-on-going{background-color:#337ab7}.base-status-pending{background-color:#ffba01}.base-status-approved{background-color:#34a835}.base-status-returned{background-color:#ffba01}.base-status-rejected{background-color:#d9534f}.base-status-completed{background-color:#34a835}.base-status-aborted{background-color:#ffba01}.base-status-ended{background-color:#34a835}.base-status-low,.base-status-medium{background-color:#f2f2f2;color:#666}.base-status-high{background-color:#ffba01}.base-status-immediately,.base-status-urgent{background-color:#d9534f}.text-align-center{text-align:center}.font-weight-bold{font-weight:700}.landing-body .landing-menu li a:hover{border-bottom:none}.landing-body .landing-menu li:first-child{margin-left:8px}.crud-form .label-control p{margin:0;padding:0}.crud-form .tn-check-box-list .p-row{display:block;padding:.5em;width:100%}.crud-form dropdown,.crud-form tn-mask{width:100%}.crud-form .tn-dropdown{min-height:32px}.crud-form .tn-dropdown.free-text.horizontal{display:flex}.crud-form .tn-dropdown.free-text.horizontal>div{flex-grow:1;padding-left:.5em;padding-right:.5em}.crud-form .tn-dropdown.free-text.horizontal>div:first-child{padding-left:0}.crud-form .tn-dropdown.free-text.horizontal>div:last-child{padding-right:0}.crud-form .tn-dropdown.free-text.vertical input.ui-inputtext.input-free-text{margin-top:.5em}.crud-form.assessment .label-control{font-weight:700}.crud-form.assessment .label-control.haveIndex{display:block;margin-bottom:5px;padding-left:20px;position:relative}.crud-form.assessment .label-control.haveIndex:before{content:\" \" attr(label-index) \".\";left:0;position:absolute;top:0}.crud-form.assessment .ViewMode{border-bottom:none}.crud-form.assessment .ViewMode .label-control{margin-bottom:0}body .ui-inputtext.min-width{padding:6px}.ps__rail-x,.ps__rail-y{z-index:2}.zIndex5 .ps__rail-x,.zIndex5 .ps__rail-y{z-index:5}.table-sticky table{border-collapse:separate;border-spacing:0}.table-sticky tr td,.table-sticky tr th{border:1px solid #eee!important;border-left:none!important;border-top:none!important}.table-sticky tr td:first-child,.table-sticky tr th:first-child{border-left:1px solid #eee!important}.table-sticky tr td:last-child,.table-sticky tr th:last-child{border-right:none!important}.table-sticky tr:first-child th{border-top:1px solid #eee!important}.table-sticky th{background:#eee}.table-sticky tbody td.disabled{background:#eee!important}.table-sticky tbody td.disabled:not(:last-child){border-right:1px solid #fff!important}.table-sticky.fix-height tr:first-child th{position:-webkit-sticky;position:sticky;top:0;z-index:2}.container-flex{align-items:center;display:flex}.container-flex>div:first-child{flex:0 0 auto;margin-right:.5em}.container-flex>div:last-child{flex-grow:1}.container-control{display:flex}.container-control>span.label{flex:0 0 auto;padding-right:.5em;padding-top:.5em}.container-control>span.label+*{flex-grow:1;flex-shrink:1;position:relative}.container-control>span.label+* .tn-dropdown,.container-control>span.label+* .ui-autocomplete-multiple,.container-control>span.label+* .ui-inputgroup .ui-inputtext{width:100%}.container-control>span.label+* .validation-container{margin-top:3px}.container-control>span.label+* .validation-container .validate-item{white-space:unset}.container-control>span.label+*>div{left:0;position:absolute;top:0;width:100%}.container-control.no-label>span.label{display:none}.container-control.inline{display:inline-flex}.align-flex-center{align-items:center;display:flex;justify-content:center}@media print{.isPrinting>*{display:none}.isPrinting app-print-layout{display:block}}.layout-wrapper .topbar .topbar-left,.layout-wrapper .topbar .topbar-right{background:#397ac3}#searchResultPanel-holder{padding:0 .5em}.cus-dropdown{line-height:normal;margin-right:1em}.tn-thumbnail{padding:.5rem}.tn-thumbnail.tn-thumbnail.tn-thumbnail{box-sizing:border-box}.fa-10:before{content:\"A+\";font-family:cursive;font-weight:700}.layout-wrapper .topbar .topbar-right #menu-button i{font-size:20px;margin-top:4px}.layout-wrapper .layout-menu li a i.menuitem-toggle-icon{font-size:15px;margin-left:auto}.flex-container-main-content{display:flex;flex-direction:column}.flex-container-main-content>div:last-child{background-color:#f4f4f4;display:flex;flex:1 1;overflow:hidden;position:relative}.flex-container-main-content>div:last-child>div{height:100%;left:0;overflow:hidden;padding-top:.5em;position:absolute;top:0;width:100%}.flex-container-main-content .block-with-button-search{display:flex;justify-content:flex-end}.flex-container-main-content .block-with-button-search>*{margin-left:.5em}.flex-container-main-content .block-with-button-search>input{height:26px;margin-left:0;max-width:200px;width:100%}.flex-container-main-content .block-with-button-search>dropdown{max-width:140px;width:100%}.flex-container-main-content .title-main-component{border-bottom:2px solid #1ca7ff}.clickable-table.clickable-table{cursor:pointer}.main-crud-container{height:calc(100vh - 76px)}.flex-container-fit-child{display:flex;flex-direction:column;height:100%;overflow:hidden}.flex-container-fit-child>div.fit-content{flex:1 1;position:relative}.flex-container-fit-child>div.fit-content>div{height:100%;overflow:auto;position:absolute;width:100%}.waiting-box{display:none;height:100%;left:0;position:fixed;top:0;width:100%;z-index:9999}.waiting-box .overlay{background-color:red;background-color:hsla(0,0%,42.7%,.5019607843137255);height:100%;width:100%}.waiting-box .content-loading{left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.waiting-box.show{display:block}.function-topbar>*{vertical-align:top}.function-topbar button{width:auto}.function-topbar p-fileUpload{margin-right:1em}.function-topbar .container-control{display:inline-flex;line-height:normal}.function-topbar .container-control dropdown{width:100%}:focus{outline-color:#a6d5fa!important}address{font-style:normal}body .p-toast .p-toast-message{border-radius:0;border-width:0 0 0 4px!important}.__status span,.status span{font-size:.8rem}p-table.single-check .p-datatable .p-datatable-tbody>tr{cursor:pointer}p-table.single-check .p-datatable .p-datatable-tbody>tr.ui-state-highlight{background:#e3f2fd!important;outline:2px solid #a6d5fa}p-table.single-check .p-datatable .p-datatable-tbody>tr td.sticky .fix-sticky.top{display:none}p-table.multi-check .p-datatable .p-datatable-tbody>tr.ui-state-highlight{background:#e3f2fd!important}p-table.multi-check .p-datatable .p-datatable-tbody>tr.ui-state-highlight td{border-color:#fff}p-table.multi-check .p-datatable .p-datatable-tbody>tr.ui-state-highlight td .fix-sticky{background-color:#fff}.tn-animated-left-arrow-icon,.tn-animated-right-arrow-icon{height:32px;position:relative;width:14px;z-index:10}.tn-animated-right-arrow-icon{-webkit-animation:arrowBounceToRight .8s ease-in-out infinite alternate;animation:arrowBounceToRight .8s ease-in-out infinite alternate}.tn-animated-left-arrow-icon{-webkit-animation:arrowBounceToLeft .8s ease-in-out infinite alternate;animation:arrowBounceToLeft .8s ease-in-out infinite alternate}.tn-animated-left-arrow-icon:after,.tn-animated-left-arrow-icon:before,.tn-animated-right-arrow-icon:after,.tn-animated-right-arrow-icon:before{background-color:#88b0dd;content:\"\";display:block;height:20px;position:absolute;width:5px}.tn-animated-right-arrow-icon:before{left:4px;top:0;transform:rotate(-35deg)}.tn-animated-right-arrow-icon:after{left:4px;top:14px;transform:rotate(35deg)}.tn-animated-left-arrow-icon:before{right:4px;top:0;transform:rotate(35deg)}.tn-animated-left-arrow-icon:after{right:4px;top:14px;transform:rotate(-35deg)}@-webkit-keyframes arrowBounceToLeft{0%{transform:translateX(-3px)}to{transform:translateX(3px)}}@keyframes arrowBounceToLeft{0%{transform:translateX(-3px)}to{transform:translateX(3px)}}@-webkit-keyframes arrowBounceToRight{0%{transform:translateX(3px)}to{transform:translateX(-3px)}}@keyframes arrowBounceToRight{0%{transform:translateX(3px)}to{transform:translateX(-3px)}}.pass{color:#49c949}.not-pass,.pass{margin:5px;text-align:center}.not-pass{color:red}"]
603
603
  },] }
604
604
  ];
605
605
  ChatBoxComponent.ctorParameters = () => [
@@ -623,4 +623,4 @@ ChatBoxComponent.propDecorators = {
623
623
  input: [{ type: ViewChild, args: ['input',] }],
624
624
  fileElement: [{ type: ViewChild, args: ['fileElement',] }]
625
625
  };
626
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1ib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi8iLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvY2hhdC9jaGF0LWJveC9jaGF0LWJveC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRyxPQUFPLE9BQU8sTUFBTSxRQUFRLENBQUM7QUFDN0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTFELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsU0FBUyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBRzlFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQzdGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDckUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUVoRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsV0FBVyxF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QixTQUFTLFNBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5qZWN0b3IsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCBtb21lbnRfIGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IEZpbGVVcGxvYWQgfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9maWxldXBsb2FkJztcclxuXHJcbmltcG9ydCB7IENvbXBvbmVudENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vYXBwLWNvbnRleHQvY29tcG9uZW50LWNvbnRleHQuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2Jhc2UvY29tcG9uZW50LWJhc2UnO1xyXG5pbXBvcnQgeyBQb3B1cFNpemUsIFVzZXJQaWNrZXJDb250cm9sU2NoZW1hIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9mb3JtLXNjaGVtYSc7XHJcbmltcG9ydCB7IENvbUN0eENvbnN0YW50cyB9IGZyb20gJy4uLy4uLy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRleHQuY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBNb2R1bGVDb25maWcgfSBmcm9tICcuLi8uLi8uLi9jb25maWdzL21vZHVsZS1jb25maWcnO1xyXG5pbXBvcnQgeyBUblVzZXIgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvdG4tdXNlcic7XHJcbmltcG9ydCB7IENoZWNrQ29udHJvbFZpc2libGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY2hlY2stY29udHJvbC12aXNpYmxlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDcnVkU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2NydWQuc2VydmljZSc7XHJcbmltcG9ydCB7IE1vZHVsZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tb2R1bGUtY29uZmlnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOb3RpZmllclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9ub3RpZmllci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2lnbmFsUlNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zaWduYWxyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3VzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEdlbmVyYXRlTGlua0Rvd25sb2FkRFRPIH0gZnJvbSAnLi4vLi4vZmlsZS1leHBsb3Jlci9tb2RlbHMvZ2VuZXJhdGUtbGluay1kb3dubG9hZC1kdG8nO1xyXG5pbXBvcnQgeyBTZXJ2aWNlUmVxdWVzdE1vZGVsIH0gZnJvbSAnLi4vLi4vZmlsZS1leHBsb3Jlci9tb2RlbHMvc2VydmljZS1yZXF1ZXN0LW1vZGVsJztcclxuaW1wb3J0IHsgRmlsZUV4cGxvcmVyU2VydmljZSB9IGZyb20gJy4uLy4uL2ZpbGUtZXhwbG9yZXIvc2VydmljZXMvZmlsZS1leHBsb3Jlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWVzc2FnZVR5cGUsIE5FV19NRVNTQUdFLCBOb3RpZmljYXRpb25UeXBlLCBQSU5ORURfQ0hBTkdFRCB9IGZyb20gJy4uL21vZGVscy9lbnVtcyc7XHJcbmltcG9ydCB7IEVkaXRGb3JtTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvbW9kZWxzJztcclxuaW1wb3J0IHsgQ2hhdFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jaGF0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNZXNzYWdlQm9hcmRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbWVzc2FnZS1ib2FyZC5zZXJ2aWNlJztcclxuXHJcbi8vIGZpeCBmb3IgYnVpbGQgcHJvZFxyXG5jb25zdCBtb21lbnQgPSBtb21lbnRfO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2NoYXQtYm94JyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jaGF0LWJveC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jaGF0LWJveC5jb21wb25lbnQuc2NzcycsICcuLi9jb21tb24tc3R5bGUuc2NzcyddLFxyXG4gICAgcHJvdmlkZXJzOiBbQ29tcG9uZW50Q29udGV4dFNlcnZpY2UsIENoZWNrQ29udHJvbFZpc2libGVTZXJ2aWNlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2hhdEJveENvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgICBASW5wdXQoKSB0YXNrSWQ6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIHNlcnZpY2VDb2RlOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBlbnRpdHk6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIHVzZXJzOiBhbnk7XHJcbiAgICBASW5wdXQoKSBzaG93U2VuZE1lc3NhZ2VCb3g6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ2lucHV0JykgaW5wdXQ6IEVsZW1lbnRSZWY7XHJcbiAgICBAVmlld0NoaWxkKCdmaWxlRWxlbWVudCcpIGZpbGVFbGVtZW50OiBGaWxlVXBsb2FkO1xyXG5cclxuICAgIHByaXZhdGUgX21vZHVsZUNvbmZpZzogTW9kdWxlQ29uZmlnO1xyXG4gICAgcmVhZG9ubHkgZGVmYXVsdEF2YXRhcjtcclxuICAgIHJlYWRvbmx5IGVudmlyb25tZW50OiBhbnk7XHJcblxyXG4gICAgdXNlclBpY2tlckZvcm06IEVkaXRGb3JtTW9kZWwgPSB7XHJcbiAgICAgICAgc2VsZWN0ZWRWYWx1ZTogW10sXHJcbiAgICAgICAgZGF0YTogbnVsbCxcclxuICAgIH07XHJcbiAgICB1c2VyUGlja2VyQ29udHJvbDogVXNlclBpY2tlckNvbnRyb2xTY2hlbWE7XHJcbiAgICBmaWxlVmlld2VyTW9kZWw6IHtcclxuICAgICAgICBkYXRhOiBhbnksXHJcbiAgICAgICAgc2hvd0VkaXRGb3JtOiBib29sZWFuLFxyXG4gICAgfTtcclxuXHJcbiAgICB0b3BpYyA9ICcnO1xyXG4gICAgZmlyc3RUaW1lID0gdHJ1ZTtcclxuICAgIG11bHRpcGxlID0gdHJ1ZTtcclxuICAgIHNob3dBZGROb3RlRm9ybSA9IGZhbHNlO1xyXG4gICAgZmlsZUFwaSA9ICcnO1xyXG4gICAgcGVvcGxlQWxsOiBhbnkgPSBbXTtcclxuICAgIGNvcnJlbGF0aW9uSWRzID0gW107XHJcbiAgICBhdHRhY2htZW50cyA9IFtdO1xyXG4gICAgaW1hZ2UgPSAnJztcclxuICAgIHBlb3BsZUFsbFVzZXJzID0gW107XHJcbiAgICBwZW9wbGVSZWxhdGVkVXNlcnMgPSBbXTtcclxuICAgIGVkaXRGb3JtTW9kZWwgPSB7fTtcclxuXHJcbiAgICBzZXJ2aWNlUmVxdWVzdE1vZGVsOiBTZXJ2aWNlUmVxdWVzdE1vZGVsO1xyXG4gICAgY3VycmVudFVzZXI6IFRuVXNlcjtcclxuICAgIG1heEZpbGVTaXplOiBudW1iZXI7XHJcbiAgICAvLyBmaWxlVmlld2VyOiBhbnk7XHJcbiAgICBhc3NpZ25lZTogYW55O1xyXG4gICAgYXNzaWduZXI6IGFueTtcclxuICAgIHJlbGF0ZWRVc2VyOiBhbnk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgICAgIHByaXZhdGUgX2NoYXRTZXJ2aWNlOiBDaGF0U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9tZXNzYWdlQm9hcmRTZXJ2aWNlOiBNZXNzYWdlQm9hcmRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX3VzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9jaGVja0NvbnRyb2xWaXNpYmxlOiBDaGVja0NvbnRyb2xWaXNpYmxlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9zaWduYWxyU2VydmljZTogU2lnbmFsUlNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfZmlsZVNlcnZpY2U6IEZpbGVFeHBsb3JlclNlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIF9jcnVkU2VydmljZTogQ3J1ZFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfbm90aWZpZXJTZXJ2aWNlOiBOb3RpZmllclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfbW9kdWxlQ29uZmlnU2VydmljZTogTW9kdWxlQ29uZmlnU2VydmljZVxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xyXG4gICAgICAgIHRoaXMuX21vZHVsZUNvbmZpZyA9IHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCk7XHJcbiAgICAgICAgdGhpcy5lbnZpcm9ubWVudCA9IHRoaXMuX21vZHVsZUNvbmZpZy5lbnZpcm9ubWVudDtcclxuICAgICAgICB0aGlzLmRlZmF1bHRBdmF0YXIgPSB0aGlzLmVudmlyb25tZW50LmFwcE1ldGFkYXRhLm1haW4uZGVmYXVsdE1hbGVBdmF0YXI7XHJcbiAgICAgICAgdGhpcy5maWxlQXBpID0gdGhpcy5lbnZpcm9ubWVudC5hcGlEb21haW4uZmlsZUVuZHBvaW50O1xyXG5cclxuICAgICAgICB0aGlzLm1vZGVsLnVzZXJQaWNrZXJGb3JtID0geyBwb3B1cFNpemU6IFBvcHVwU2l6ZSwgZGF0YToge30gfTtcclxuICAgICAgICB0aGlzLm1vZGVsLnF1aWNrTm90ZUZvcm0gPSB7IHBvcHVwU2l6ZTogPGFueT57fSwgZGF0YToge30gfTtcclxuXHJcbiAgICAgICAgdGhpcy5jb250ZXh0LnN1YnNjcmliZSgnUVVJQ0tfTk9URV9QT1BVUC5DTE9TRV9QT1BVUCcsIHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgdGhpcy5tb2RlbC5lZGl0Rm9ybU1vZGVsLnNob3dRdWlja05vdGVGb3JtID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlVXNlcnMoYXNzaWduZWU6IGFueSwgYXNzaWduZXI6IGFueSwgcmVsYXRlZFVzZXI6IGFueVtdKSB7XHJcbiAgICAgICAgdGhpcy5hc3NpZ25lZSA9IGFzc2lnbmVlO1xyXG4gICAgICAgIHRoaXMuYXNzaWduZXIgPSBhc3NpZ25lcjtcclxuICAgICAgICB0aGlzLnJlbGF0ZWRVc2VyID0gcmVsYXRlZFVzZXI7XHJcbiAgICAgICAgbGV0IGFsbCA9IFtdO1xyXG4gICAgICAgIGFsbC5wdXNoKGFzc2lnbmVlKTtcclxuICAgICAgICBhbGwucHVzaChhc3NpZ25lcik7XHJcbiAgICAgICAgaWYgKHRoaXMucmVsYXRlZFVzZXIubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBhbGwgPSBhbGwuY29uY2F0KHJlbGF0ZWRVc2VyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wZW9wbGVBbGwgPSBhbGwuZmlsdGVyKCh4LCBpLCBhKSA9PiBhLmluZGV4T2YoeCkgPT0gaSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5pbml0Q2xhc3NWYXIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5nZXRNZXNzYWdlcyhudWxsKTtcclxuXHJcbiAgICAgICAgdGhpcy5fY2hhdFNlcnZpY2UuZ2V0Q2hhdElkQnlUYXNrKHRoaXMuc2VydmljZVJlcXVlc3RNb2RlbCwgdGhpcy50YXNrSWQpLnRoZW4ocnMgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXJzLnN1Y2Nlc3MpIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZyhycy5tZXNzYWdlKTtcclxuICAgICAgICAgICAgaWYgKCFycy5kYXRhKSByZXR1cm47XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwuaWQgPSBycy5kYXRhO1xyXG4gICAgICAgICAgICB0aGlzLnJvb3RDb250ZXh0LmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuUk9PVC5DSEFUX0lOU1RBTkNFX0lEX0xPQURFRCwgdGhpcy5tb2RlbC5pZCk7XHJcbiAgICAgICAgICAgIHRoaXMudG9waWMgPSBgY2hhdC4ke3RoaXMubW9kZWwuaWR9YDtcclxuICAgICAgICAgICAgdGhpcy5fc2lnbmFsclNlcnZpY2Uuc3RhcnQobnVsbCwgdGhpcy50b3BpYywgZGF0YSA9PiB0aGlzLmhhbmRsZUNoYW5nZXMoZGF0YSkpO1xyXG5cclxuICAgICAgICAgICAgLy8gZ2V0IHBpbm5lZCBtZXNzYWdlXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGVsLmlkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tZXNzYWdlQm9hcmRTZXJ2aWNlLmdldExhdGVzdFBpbm5lZE1lc3NhZ2UodGhpcy5tb2RlbC5pZCkudGhlbihycyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJzLmRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5waW5uZWRNZXNzYWdlID0gcnMuZGF0YS5jb250ZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMucm9vdENvbnRleHQuc3Vic2NyaWJlKENvbUN0eENvbnN0YW50cy5ST09ULkNIQVRfTUVTU0FHRV9TRU5ESU5HLCBhc3luYyBkYXRhID0+IHtcclxuICAgICAgICAgICAgdGhpcy5tb2RlbC5jb3JyZWxhdGlvbklkcy5wdXNoKGRhdGEubWVzc2FnZS5jb3JyZWxhdGlvbklkKTtcclxuICAgICAgICAgICAgaWYgKGRhdGEuYXR0YWNobWVudHMgJiYgZGF0YS5hdHRhY2htZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBkYXRhLmF0dGFjaG1lbnRzID0gZGF0YS5hdHRhY2htZW50cy5tYXAoeCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgeC51cmwgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4O1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBhd2FpdCB0aGlzLmFwcGVuZE1lc3NhZ2UoZGF0YS5tZXNzYWdlLm1lc3NhZ2VDb250ZW50LCAnb3duJywgJ3NlbmRpbmcnLCB0aGlzLmN1cnJlbnRVc2VyLnVzZXJOYW1lLCBkYXRhLmF0dGFjaG1lbnRzLCBkYXRhLm1lc3NhZ2UuY29ycmVsYXRpb25JZCwgZmFsc2UpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0ZW1wKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5yb290Q29udGV4dC5zdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuQ0hBVF9NRVNTQUdFX1NFTlQsIGRhdGEgPT4ge1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnJvb3RDb250ZXh0LnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVC5DSEFUX0xPQURfTU9SRSwgZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuZ2V0TWVzc2FnZXModGhpcy5tb2RlbC5jcmVhdGVkRnJvbSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMucm9vdENvbnRleHQuc3Vic2NyaWJlKENvbUN0eENvbnN0YW50cy5ST09ULkNIQVRfU0NST0xMSU5HLCBzY3JvbGxpbmcgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc2Nyb2xsaW5nKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnNjcm9sbGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnNjcm9sbGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5uZXdNZXNzYWdlTm90VXBkYXRlZENvdW50ID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnJvb3RDb250ZXh0LnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVC5DSEFUX0hBU19ORVdfTUVTU0FHRV9OT1RfVVBEQVRFRCwgY291bnQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNjcm9sbGluZyA9IGNvdW50ICE9PSAwO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLm5ld01lc3NhZ2VOb3RVcGRhdGVkQ291bnQgPSBjb3VudDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5jb250ZXh0LnN1YnNjcmliZSgnQ0xPU0VfUE9QVVAnLCBycyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwudXNlclBpY2tlckZvcm0uc2hvdyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmVudENvbnRleHQuZmlyZUV2ZW50KCdUQVNLLlJFTEFURURfVVNFUl9DSEFOR0VEJywgcnMpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudENvbnRleHQuc3Vic2NyaWJlKCdUQVNLLkRBVEFfQ0hBTkdFRCcsIHJzID0+IHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVVc2Vycyhycy5hc3NpZ25lZSwgcnMuYXNzaWduZXIsIHJzLnJlbGF0ZWRVc2VyKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGhhbmRsZUNoYW5nZXMoZGF0YSkge1xyXG4gICAgICAgIGNvbnN0IG5ld01lc3NhZ2UgPSBKU09OLnBhcnNlKGRhdGEpO1xyXG4gICAgICAgIGlmICghbmV3TWVzc2FnZSB8fCAhbmV3TWVzc2FnZS5kYXRhKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnU1lTX0VSUl9ERVY6IEzhu5dpIFNpZ25hbFInKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3dpdGNoIChuZXdNZXNzYWdlLm5vdGlmaWNhdGlvblR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBOb3RpZmljYXRpb25UeXBlLk5ld01lc3NhZ2U6XHJcbiAgICAgICAgICAgIGNhc2UgTkVXX01FU1NBR0U6IHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlTmV3TWVzc2FnZU5vdGlmaWNhdGlvbihuZXdNZXNzYWdlLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBOb3RpZmljYXRpb25UeXBlLlBpbm5lZENoYW5nZWQ6XHJcbiAgICAgICAgICAgIGNhc2UgUElOTkVEX0NIQU5HRUQ6IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGluZCA9IHRoaXMubW9kZWwuY29ycmVsYXRpb25JZHMuZmluZEluZGV4KHggPT4geCA9PSBuZXdNZXNzYWdlLmNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5jb3JyZWxhdGlvbklkcy5zcGxpY2UoaW5kLCAxKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlUGlubmVkQ2hhbmdlTm90aWZpY2F0aW9uKG5ld01lc3NhZ2UuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXRDbGFzc1ZhcigpIHtcclxuICAgICAgICB0aGlzLmZpbGVWaWV3ZXJNb2RlbCA9IHtcclxuICAgICAgICAgICAgZGF0YToge30sXHJcbiAgICAgICAgICAgIHNob3dFZGl0Rm9ybTogZmFsc2UsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnVzZXJQaWNrZXJDb250cm9sID0gbmV3IFVzZXJQaWNrZXJDb250cm9sU2NoZW1hKHtcclxuICAgICAgICAgICAgZmllbGQ6ICdpZCcsXHJcbiAgICAgICAgICAgIGxhYmVsOiAnJyxcclxuICAgICAgICAgICAgZnVsbExhYmVsOiAnJyxcclxuICAgICAgICAgICAgbXVsdGlwbGU6IHRydWUsXHJcbiAgICAgICAgICAgIGhpZGRlbkNoZWNrOiAoKSA9PiB0aGlzLnVzZXJQaWNrZXJGb3JtLnNob3csXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlUmVxdWVzdE1vZGVsID0gPFNlcnZpY2VSZXF1ZXN0TW9kZWw+e1xyXG4gICAgICAgICAgICBzZXJ2aWNlOiB0aGlzLnNlcnZpY2VDb2RlLFxyXG4gICAgICAgICAgICBzZXJ2aWNlQ29kZTogdGhpcy5zZXJ2aWNlQ29kZSxcclxuICAgICAgICAgICAgZW50aXR5OiB0aGlzLmVudGl0eSxcclxuICAgICAgICAgICAgZW50aXR5S2V5OiAnaWQnLFxyXG4gICAgICAgICAgICBlbnRpdHlJbnN0YW5jZUlkOiB0aGlzLnRhc2tJZFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5tb2RlbC5kYXRhU291cmNlID0gW107XHJcbiAgICAgICAgdGhpcy5tb2RlbC5jb3JyZWxhdGlvbklkcyA9IFtdO1xyXG4gICAgICAgIHRoaXMubW9kZWwuYXR0YWNobWVudHMgPSBbXTtcclxuICAgICAgICB0aGlzLm1vZGVsLm1heEZpbGVTaXplID0gMzAwMDAwMDtcclxuICAgICAgICB0aGlzLm1vZGVsLmltZyA9IHt9O1xyXG4gICAgICAgIHRoaXMuY3VycmVudFVzZXIgPSB0aGlzLl91c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpO1xyXG4gICAgICAgIHRoaXMucGVvcGxlQWxsVXNlcnMgPSBbXTtcclxuICAgICAgICB0aGlzLnBlb3BsZVJlbGF0ZWRVc2VycyA9IFtdO1xyXG4gICAgICAgIHRoaXMubW9kZWwuZWRpdEZvcm1Nb2RlbCA9IFtdO1xyXG4gICAgICAgIGlmICh0aGlzLnVzZXJzKSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwudGFza05hbWUgPSB0aGlzLnVzZXJzLnRhc2tOYW1lO1xyXG5cclxuICAgICAgICAgICAgdGhpcy51cGRhdGVVc2VycyhcclxuICAgICAgICAgICAgICAgIHRoaXMudXNlcnMuYXNzaWduZWUsXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJzLmFzc2lnbmVyLFxyXG4gICAgICAgICAgICAgICAgdGhpcy51c2Vycy5yZWxhdGVkVXNlcnNcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0UmVsYXRlZFVzZXJJbmZvKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldFJlbGF0ZWRVc2VySW5mbygpIHtcclxuICAgICAgICBjb25zdCBwZW9wbGVSZWxhdGVkVXNlcnMgPSBhd2FpdCB0aGlzLl91c2VyU2VydmljZS5nZXRCYXNpY1VzZXJzSW5mbyh0aGlzLnJlbGF0ZWRVc2VyLmpvaW4oKSk7XHJcbiAgICAgICAgaWYgKHBlb3BsZVJlbGF0ZWRVc2VycyA9PSBudWxsIHx8IHBlb3BsZVJlbGF0ZWRVc2Vycy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBwZW9wbGVSZWxhdGVkVXNlcnMpIHtcclxuICAgICAgICAgICAgdGhpcy5wZW9wbGVSZWxhdGVkVXNlcnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS5mdWxsTmFtZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBpdGVtLmZ1bGxOYW1lLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW0uaWRcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGhhbmRsZVBpbm5lZENoYW5nZU5vdGlmaWNhdGlvbihkYXRhKSB7XHJcbiAgICAgICAgaWYgKGRhdGEucGlubmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwucGlubmVkTWVzc2FnZSA9IGRhdGEubWVzc2FnZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwucGlubmVkTWVzc2FnZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGhhbmRsZU5ld01lc3NhZ2VOb3RpZmljYXRpb24obmV3TWVzc2FnZSkge1xyXG4gICAgICAgIGNvbnN0IGluZCA9IHRoaXMubW9kZWwuY29ycmVsYXRpb25JZHMuZmluZEluZGV4KHggPT4geCA9PSBuZXdNZXNzYWdlLmNvcnJlbGF0aW9uSWQpO1xyXG5cclxuICAgICAgICBpZiAobmV3TWVzc2FnZS5tZXNzYWdlVHlwZSA9PSBNZXNzYWdlVHlwZS5GSUxFKSB7XHJcbiAgICAgICAgICAgIG5ld01lc3NhZ2UuYXR0YWNobWVudHMgPSBhd2FpdCB0aGlzLl9jaGF0U2VydmljZS5nZXRMaXN0QXR0YWNobWVudChuZXdNZXNzYWdlLmlkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpbmQgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYXBwZW5kTWVzc2FnZShuZXdNZXNzYWdlLmNvbnRlbnQsIHRoaXMuZ2V0VHlwZU9mTWVzc2FnZShuZXdNZXNzYWdlLmNyZWF0ZWRCeSksICdyZWNlaXZlZCcsIG5ld01lc3NhZ2UuY3JlYXRlZEJ5LCBuZXdNZXNzYWdlLmF0dGFjaG1lbnRzLCAnJywgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU1lc3NhZ2UobmV3TWVzc2FnZS5jb3JyZWxhdGlvbklkLCBuZXdNZXNzYWdlKTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlbC5jb3JyZWxhdGlvbklkcy5zcGxpY2UoaW5kLCAxKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TWVzc2FnZXMoY3JlYXRlZEZyb20pIHtcclxuICAgICAgICB0aGlzLl9jaGF0U2VydmljZS5nZXRDb250ZW50QnlUYXNrSWQodGhpcy5zZXJ2aWNlUmVxdWVzdE1vZGVsLCB0aGlzLnRhc2tJZCkudGhlbihhc3luYyBycyA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRVc2VyTmFtZSA9IHRoaXMuY3VycmVudFVzZXIudXNlck5hbWU7XHJcbiAgICAgICAgICAgIGxldCBuZWFyQnlDcmVhdGVkID0gJyc7XHJcbiAgICAgICAgICAgIGxldCBpbmRleCA9IDA7XHJcbiAgICAgICAgICAgIGxldCB1c2VyTmFtZXM6IHN0cmluZyA9ICcnO1xyXG4gICAgICAgICAgICBpZiAoIXJzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcocnMubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHJzLmRhdGEpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtLmNyZWF0ZWRCeSAmJiBpdGVtLmNyZWF0ZWRCeSAhPSAnJykgdXNlck5hbWVzICs9IGAke2luZGV4ID09IDAgPyAnJyA6ICcsJ30ke2l0ZW0uY3JlYXRlZEJ5fWA7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwKSB0aGlzLm1vZGVsLmNyZWF0ZWRGcm9tID0gaXRlbS5jcmVhdGVkO1xyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0udHlwZSA9IGl0ZW0uY3JlYXRlZEJ5ID09PSBjdXJyZW50VXNlck5hbWUgPyAnb3duJyA6ICdmcm9tJztcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5tZXNzYWdlVHlwZSA9PT0gTWVzc2FnZVR5cGUuRklMRSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uYXR0YWNobWVudHMgPSBhd2FpdCB0aGlzLl9jaGF0U2VydmljZS5nZXRMaXN0QXR0YWNobWVudChpdGVtLmlkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpdGVtLmlzTGFzdE1lc3NhZ2VGbG93ID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uY3JlYXRlZEJ5ICE9PSBuZWFyQnlDcmVhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCtpdGVtID4gLTApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcnMuZGF0YVsraXRlbSAtIDFdLmlzTGFzdE1lc3NhZ2VGbG93ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgbmVhckJ5Q3JlYXRlZCA9IGl0ZW0uY3JlYXRlZEJ5O1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uaXNGaXJzdE1lc3NhZ2VGbG93ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uaXNGaXJzdE1lc3NhZ2VGbG93ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCtpbmRleCA9PT0gcnMuZGF0YS5sZW5ndGggLSAxKSBpdGVtLmlzTGFzdE1lc3NhZ2VGbG93ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGluZGV4Kys7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjcmVhdGVkRnJvbSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5kYXRhU291cmNlID0gWy4uLnJzLmRhdGEsIC4uLnRoaXMubW9kZWwuZGF0YVNvdXJjZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmRhdGFTb3VyY2UgPSBycy5kYXRhO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh1c2VyTmFtZXMgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHVzZXJJbmZvcyA9IGF3YWl0IHRoaXMuX3VzZXJTZXJ2aWNlLmdldEJhc2ljVXNlcnNJbmZvQnlVc2VyTmFtZXModXNlck5hbWVzKTtcclxuICAgICAgICAgICAgICAgIGlmICh1c2VySW5mb3MgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLm1vZGVsLmRhdGFTb3VyY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXNlciA9IHVzZXJJbmZvcy5maW5kKHggPT4geC51c2VyTmFtZSA9PSBpdGVtLmNyZWF0ZWRCeSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdXNlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5hdmF0YXIgPSB1c2VyLmF2YXRhcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5mdWxsTmFtZSA9IHVzZXIuZnVsbE5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucm9vdENvbnRleHQuZmlyZUV2ZW50KENvbUN0eENvbnN0YW50cy5ST09ULkNIQVRfREFUQV9MT0FERUQsIHRydWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNjcm9sbFRvQm90dG9tKHNwZWVkID0gMCwgZm9yY2UgPSBmYWxzZSwgc2VudCkge1xyXG4gICAgICAgIGlmICghdGhpcy5tb2RlbC5zY3JvbGxpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5yb290Q29udGV4dC5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuQ0hBVF9IQVNfTkVXX01FU1NBR0UsIHsgc3BlZWQsIGZvcmNlOiB0cnVlIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChzZW50ICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICB0aGlzLnJvb3RDb250ZXh0LmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuUk9PVC5DSEFUX0hBU19ORVdfTUVTU0FHRSwgeyBzcGVlZCwgZm9yY2UgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGFwcGVuZE1lc3NhZ2UobWVzc2FnZSwgdHlwZSwgc3RhdHVzLCBjcmVhdGVkQnksIGF0dGFjaG1lbnRzID0gW10sIGNvcnJlbGF0aW9uSWQgPSAnJywgc2VudCkge1xyXG4gICAgICAgIGxldCBmdWxsTmFtZSA9ICcnO1xyXG4gICAgICAgIGxldCBhdmF0YXIgPSAnJztcclxuXHJcbiAgICAgICAgY29uc3QgdXNlciA9IGF3YWl0IHRoaXMuX3VzZXJTZXJ2aWNlLmdldEJhc2ljVXNlckluZm9CeVVzZXJOYW1lKGNyZWF0ZWRCeSk7XHJcbiAgICAgICAgZnVsbE5hbWUgPSB1c2VyLmZ1bGxOYW1lID8/ICcnO1xyXG4gICAgICAgIGF2YXRhciA9IHVzZXIuYXZhdGFyID8/ICcnO1xyXG5cclxuICAgICAgICBpZiAoYXR0YWNobWVudHMgJiYgYXR0YWNobWVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBjbG9uZWRBdHRhY2htZW50ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShhdHRhY2htZW50cykpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLmRhdGFTb3VyY2UucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBjcmVhdGVkOiBuZXcgRGF0ZSgpLFxyXG4gICAgICAgICAgICAgICAgY3JlYXRlZEJ5OiBjcmVhdGVkQnksXHJcbiAgICAgICAgICAgICAgICBmdWxsTmFtZTogZnVsbE5hbWUsXHJcbiAgICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1cyxcclxuICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsXHJcbiAgICAgICAgICAgICAgICBhdmF0YXI6IGF2YXRhcixcclxuICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzOiBjbG9uZWRBdHRhY2htZW50LFxyXG4gICAgICAgICAgICAgICAgY29ycmVsYXRpb25JZDogY29ycmVsYXRpb25JZCxcclxuICAgICAgICAgICAgICAgIGlzRmlyc3RNZXNzYWdlRmxvdzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBpc0xhc3RNZXNzYWdlRmxvdzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBzZW50OiBzZW50XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZpcnN0T3JMYXN0TWVzc2FnZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG1lc3NhZ2UgJiYgbWVzc2FnZS50cmltKCkgIT0gJycpIHtcclxuICAgICAgICAgICAgdGhpcy5tb2RlbC5kYXRhU291cmNlLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgY3JlYXRlZDogbmV3IERhdGUoKSxcclxuICAgICAgICAgICAgICAgIGNyZWF0ZWRCeTogY3JlYXRlZEJ5LFxyXG4gICAgICAgICAgICAgICAgZnVsbE5hbWU6IGZ1bGxOYW1lLFxyXG4gICAgICAgICAgICAgICAgY29udGVudDogbWVzc2FnZSxcclxuICAgICAgICAgICAgICAgIHN0YXR1czogc3RhdHVzLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogdHlwZSxcclxuICAgICAgICAgICAgICAgIGF2YXRhcjogYXZhdGFyLFxyXG4gICAgICAgICAgICAgICAgY29ycmVsYXRpb25JZDogY29ycmVsYXRpb25JZCxcclxuICAgICAgICAgICAgICAgIGlzRmlyc3RNZXNzYWdlRmxvdzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBpc0xhc3RNZXNzYWdlRmxvdzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBzZW50OiBzZW50XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZpcnN0T3JMYXN0TWVzc2FnZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwuZGF0YVNvdXJjZTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVGaXJzdE9yTGFzdE1lc3NhZ2UoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwuZGF0YVNvdXJjZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMubW9kZWwuZGF0YVNvdXJjZS5sZW5ndGg7XHJcbiAgICAgICAgICAgIGlmIChsZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZGF0YVNvdXJjZVswXS5pc0ZpcnN0TWVzc2FnZUZsb3cgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY3JlYXRlZEJ5ID0gdGhpcy5tb2RlbC5kYXRhU291cmNlW2xlbmd0aCAtIDJdLmNyZWF0ZWRCeTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNyZWF0ZWRCeTIgPSB0aGlzLm1vZGVsLmRhdGFTb3VyY2VbbGVuZ3RoIC0gMV0uY3JlYXRlZEJ5O1xyXG4gICAgICAgICAgICAgICAgaWYgKGNyZWF0ZWRCeSAhPT0gY3JlYXRlZEJ5Mikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZGF0YVNvdXJjZVtsZW5ndGggLSAyXS5pc0xhc3RNZXNzYWdlRmxvdyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5kYXRhU291cmNlW2xlbmd0aCAtIDFdLmlzRmlyc3RNZXNzYWdlRmxvdyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmRhdGFTb3VyY2VbbGVuZ3RoIC0gMl0uaXNMYXN0TWVzc2FnZUZsb3cgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmRhdGFTb3VyY2VbbGVuZ3RoIC0gMV0uaXNMYXN0TWVzc2FnZUZsb3cgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZU1lc3NhZ2UoY29ycmVsYXRpb25JZCwgbWVzc2FnZSkge1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLm1vZGVsLmRhdGFTb3VyY2UuZmluZCh4ID0+IHguY29ycmVsYXRpb25JZCA9PT0gY29ycmVsYXRpb25JZCk7XHJcblxyXG4gICAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgICAgIGlmIChtZXNzYWdlLmF0dGFjaG1lbnRzICYmIG1lc3NhZ2UuYXR0YWNobWVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hdHRhY2htZW50cyA9IG1lc3NhZ2UuYXR0YWNobWVudHM7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGl0ZW0uaWQgPSBtZXNzYWdlLmlkO1xyXG4gICAgICAgICAgICBpdGVtLnNlbnQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVNZXNzYWdlU3RhdHVzKG1lc3NhZ2UsIHN0YXR1cywgZXJyb3JNZXNzYWdlID0gJycpIHtcclxuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5tb2RlbC5kYXRhU291cmNlLmZpbmQoeCA9PiB4Lm1lc3NhZ2UgPT09IG1lc3NhZ2UpO1xyXG4gICAgICAgIGl0ZW0uc3RhdHVzID0gc3RhdHVzO1xyXG4gICAgICAgIGl0ZW0uZXJyb3JNZXNzYWdlID0gZXJyb3JNZXNzYWdlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERpc3BsYXlTdGF0dXMoc3RhdHVzKSB7XHJcbiAgICAgICAgc3dpdGNoIChzdGF0dXMpIHtcclxuICAgICAgICAgICAgY2FzZSAnc2VuZGluZyc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ8SQYW5nIGfhu61pJztcclxuICAgICAgICAgICAgY2FzZSAnc2VudCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ8SQw6MgZ+G7rWknO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICAvLyB1bnNjcmlibGUgc2lnbmFsclxyXG4gICAgICAgIHRoaXMuX3NpZ25hbHJTZXJ2aWNlLnVuU3Vic2NyaWJlVmlld0NvZGUobnVsbCwgdGhpcy50b3BpYyk7XHJcbiAgICAgICAgdGhpcy5yb290Q29udGV4dC51blN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVC5DSEFUX01FU1NBR0VfU0VORElORyk7XHJcbiAgICAgICAgdGhpcy5yb290Q29udGV4dC51blN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVC5DSEFUX01FU1NBR0VfU0VOVCk7XHJcbiAgICAgICAgdGhpcy5yb290Q29udGV4dC51blN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVC5DSEFUX0xPQURfTU9SRSk7XHJcbiAgICAgICAgdGhpcy5yb290Q29udGV4dC51blN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVC5DSEFUX1NDUk9MTElORyk7XHJcbiAgICAgICAgdGhpcy5yb290Q29udGV4dC51blN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVC5DSEFUX0hBU19ORVdfTUVTU0FHRV9OT1RfVVBEQVRFRCk7XHJcblxyXG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VHlwZU9mTWVzc2FnZShjcmVhdGVkQnkpIHtcclxuICAgICAgICByZXR1cm4gY3JlYXRlZEJ5ID09PSB0aGlzLmN1cnJlbnRVc2VyLnVzZXJOYW1lID8gJ293bicgOiAnZnJvbSc7XHJcbiAgICB9XHJcblxyXG4gICAgdHJhY2tCeUZ1bmMoaW5kZXgsIGl0ZW0pIHtcclxuICAgICAgICByZXR1cm4gaXRlbS5pZDtcclxuICAgIH1cclxuXHJcbiAgICB0cmFja0F0dGFjaG1lbnRCeUZ1bmMoaW5kZXgsIGl0ZW0pIHtcclxuICAgICAgICByZXR1cm4gaXRlbS5maWxlTmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVQYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpIHtcclxuICAgICAgICBjb25zdCBvYmplY3REYXRhID0gdGhpcy5nZXRJbWFnZUNsaXBib2FyZERhdGEoZXZlbnQpO1xyXG4gICAgICAgIGlmIChvYmplY3REYXRhKSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwuYXR0YWNobWVudHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnaW1hZ2UnLFxyXG4gICAgICAgICAgICAgICAgdXJsOiBvYmplY3REYXRhLnVybCxcclxuICAgICAgICAgICAgICAgIGRhdGE6IG9iamVjdERhdGEuYmxvYixcclxuICAgICAgICAgICAgICAgIGZpbGVOYW1lOiB0aGlzLl9jb21tb25TZXJ2aWNlLmd1aWQoKSArICcucG5nJ1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SW1hZ2VDbGlwYm9hcmREYXRhKGUpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGUuY2xpcGJvYXJkRGF0YS5pdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtID0gZS5jbGlwYm9hcmREYXRhLml0ZW1zW2ldO1xyXG4gICAgICAgICAgICBpZiAoaXRlbS50eXBlLmluZGV4T2YoJ2ltYWdlJykgIT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlT2JqID0gaXRlbS5nZXRBc0ZpbGUoKTtcclxuICAgICAgICAgICAgICAgIGlmIChpbWFnZU9iai5zaXplIDwgdGhpcy5tb2RlbC5tYXhGaWxlU2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHVybDogVVJMLmNyZWF0ZU9iamVjdFVSTChpbWFnZU9iaiksIGJsb2I6IGltYWdlT2JqIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdmlld09yRG93bmxvYWRGaWxlKGV2dCwgYXR0YWNobWVudEl0ZW0pIHtcclxuICAgICAgICBpZiAodGhpcy5fZmlsZVNlcnZpY2UuaXNTdXBwb3J0ZWRWaWV3T25saW5lKGF0dGFjaG1lbnRJdGVtLmZpbGVOYW1lKSkge1xyXG4gICAgICAgICAgICAvLyB0aGlzLm1vZGVsLmZpbGVWaWV3ZXIuZGF0YSA9IHt9O1xyXG4gICAgICAgICAgICAvLyB0aGlzLm1vZGVsLmZpbGVWaWV3ZXIuZGF0YS5maWxlSWQgPSBhdHRhY2htZW50SXRlbS5pZDtcclxuICAgICAgICAgICAgLy8gdGhpcy5tb2RlbC5maWxlVmlld2VyLmRhdGEuZmlsZU5hbWUgPSBhdHRhY2htZW50SXRlbS5maWxlTmFtZTtcclxuICAgICAgICAgICAgLy8gdGhpcy5tb2RlbC5maWxlVmlld2VyLmRhdGEuaXNGaWxlVmVyc2lvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAvLyB0aGlzLm1vZGVsLmZpbGVWaWV3ZXIuc2hvdyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsZVZpZXdlck1vZGVsID0ge1xyXG4gICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbGVJZDogYXR0YWNobWVudEl0ZW0uaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGF0dGFjaG1lbnRJdGVtLmZpbGVOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzRmlsZVZlcnNpb246IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNob3dFZGl0Rm9ybTogdHJ1ZSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRvcC5sb2NhdGlvbi5ocmVmID0gYXdhaXQgdGhpcy5kb3dubG9hZChhdHRhY2htZW50SXRlbSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBkb3dubG9hZChmaWxlKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtb2RlbCA9IG5ldyBHZW5lcmF0ZUxpbmtEb3dubG9hZERUTygpO1xyXG4gICAgICAgICAgICBtb2RlbC5maWxlSWQgPSBmaWxlLmlkO1xyXG4gICAgICAgICAgICBtb2RlbC5pc0ZpbGVWZXJzaW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZpbGVTZXJ2aWNlLmdlbmVyYXRlTGlua0Rvd25sb2FkKG1vZGVsKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvd25sb2FkVXJsID0gdGhpcy5fZmlsZVNlcnZpY2UuZ2V0QW5vbnltb3VzRG93bmxvYWRVcmwocmVzcG9uc2UuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkb3dubG9hZFVybCk7XHJcbiAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZ2V0IGRvd25sb2FkIGxpbmsnKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGJyb3dzZUZpbGVGcm9tUGVyc29uYWwoKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGJyb3dzZUZpbGVGcm9tQ29tcHV0ZXIoKSB7XHJcbiAgICAgICAgdGhpcy5maWxlRWxlbWVudC5hZHZhbmNlZEZpbGVJbnB1dC5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25TZWxlY3RGaWxlRnJvbUNvbXB1dGVyKGV2dCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChldnQuZmlsZXMgJiYgZXZ0LmZpbGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBldnQuZmlsZXMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBldnQuZmlsZXNbaW5kZXhdLm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHlwZSA9IHRoaXMuX2NvbW1vblNlcnZpY2UuaXNJbWFnZShmaWxlTmFtZSkgPyAnaW1hZ2UnIDogJ2ZpbGUnO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnRJdGVtOiBhbnkgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGV2dC5maWxlc1tpbmRleF0sIGZpbGVOYW1lOiBmaWxlTmFtZVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhdHRhY2htZW50SXRlbS50eXBlID09ICdpbWFnZScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudEl0ZW0udXJsID0gZXZ0LmZpbGVzW2luZGV4XS5vYmplY3RVUkwuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5hdHRhY2htZW50cy5wdXNoKGF0dGFjaG1lbnRJdGVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdlcnJvciBvbiBwcm9jZXNzIHNlbGVjdCBmaWxlIGNvbXB1dGVyJywgZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0aGlzLmZpbGVFbGVtZW50LmNsZWFyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlQXR0YWNobWVudChpdGVtKSB7XHJcbiAgICAgICAgY29uc3QgaW5kID0gdGhpcy5tb2RlbC5hdHRhY2htZW50cy5maW5kSW5kZXgoeCA9PiB4LnVybCA9PT0gaXRlbS51cmwpO1xyXG4gICAgICAgIHRoaXMubW9kZWwuYXR0YWNobWVudHMuc3BsaWNlKGluZCwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFzQXR0YWNobWVudChpdGVtKSB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0uYXR0YWNobWVudHMgJiYgaXRlbS5hdHRhY2htZW50cy5sZW5ndGggPiAwO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRJbWcoZXZ0LCBwYXJlbnRJbmRleDogbnVtYmVyLCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5tb2RlbC5pbWdbYCR7cGFyZW50SW5kZXh9JHtpbmRleH1gXSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5tb2RlbC5pbWdbYCR7cGFyZW50SW5kZXh9d2lkdGgke2luZGV4fWBdID0gKGV2dC50YXJnZXQud2lkdGggKyAzMikgKyAncHgnO1xyXG4gICAgfVxyXG5cclxuICAgIGluVGhlU2FtZVRpbWUoaTogbnVtYmVyLCBpdGVtOiBhbnksIGRhdGFTb3VyY2U6IGFueSkge1xyXG4gICAgICAgIGlmIChpIDwgZGF0YVNvdXJjZS5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGQxID0gbmV3IERhdGUoZGF0YVNvdXJjZVtpICsgMV0uY3JlYXRlZCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGQyID0gbmV3IERhdGUoaXRlbS5jcmVhdGVkKTtcclxuICAgICAgICAgICAgY29uc3QgbXMgPSBkMS5nZXRUaW1lKCkgLSBkMi5nZXRUaW1lKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBtcyA8IDMwMDAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcGluTWVzc2FnZShpdGVtKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwucGlubmVkTWVzc2FnZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5tb2RlbC5waW5uZWRNZXNzYWdlLmlkICE9IGl0ZW0uaWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93Q29uZmlybSgnQuG6oW4gY8OzIGNo4bqvYyBjaOG6r24gbXXhu5FuIGdoaW0gdGluIG5o4bqvbiBuw6B5PyBUaW4gbmjhuq9uIMSRw6MgZ2hpbSB0csaw4bubYyDEkcOzIHPhur0gxJHGsOG7o2MgYuG7jyBnaGltLicpLnRoZW4ocnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcnMpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvUGluKGl0ZW0sIGl0ZW0uaWQsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRvUGluKGl0ZW0sIGl0ZW0uaWQsIGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5kb1BpbihpdGVtLCBpdGVtLmlkLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZG9QaW4oaXRlbSwgaWQsIHBpbm5lZCkge1xyXG4gICAgICAgIGNvbnN0IGNvcnJlbGF0aW9uSWQgPSB0aGlzLl9jb21tb25TZXJ2aWNlLmd1aWQoKTtcclxuICAgICAgICB0aGlzLm1vZGVsLmNvcnJlbGF0aW9uSWRzLnB1c2goY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgdGhpcy5fbWVzc2FnZUJvYXJkU2VydmljZS5waW5NZXNzYWdlKGlkLCBwaW5uZWQsIGNvcnJlbGF0aW9uSWQpLnRoZW4ocnMgPT4ge1xyXG4gICAgICAgICAgICBpZiAocGlubmVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnBpbm5lZE1lc3NhZ2UgPSBpdGVtO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5waW5uZWRNZXNzYWdlID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEN1cnJlbnRVc2VyQXZhdGFyKGF2YXRhcjogYW55KSB7XHJcbiAgICAgICAgaWYgKGF2YXRhciAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBgJHt0aGlzLmZpbGVBcGl9L2ZpbGUvcHVibGljLyR7YXZhdGFyfS9Eb3dubG9hZGA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0QXZhdGFyO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhZGRQZW9wbGUoKSB7XHJcbiAgICAgICAgdGhpcy51c2VyUGlja2VyRm9ybS5zZWxlY3RlZFZhbHVlID0gdGhpcy5wZW9wbGVSZWxhdGVkVXNlcnM7XHJcbiAgICAgICAgdGhpcy51c2VyUGlja2VyRm9ybS5tdWx0aXBsZSA9IHRoaXMubXVsdGlwbGU7XHJcbiAgICAgICAgdGhpcy51c2VyUGlja2VyRm9ybS5zaG93ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBxdWlja05vdGUoaXRlbTogYW55KSB7XHJcbiAgICAgICAgY29uc3QgdXNlclJlc3VsdCA9IGF3YWl0IHRoaXMuX3VzZXJTZXJ2aWNlLmdldEJhc2ljVXNlckluZm8oaXRlbS5jcmVhdGVkQnkpO1xyXG4gICAgICAgIHRoaXMuY29udGV4dC5kYXRhLm5vdGVEYXRhTW9kZWwgPSA8YW55PntcclxuICAgICAgICAgICAgZWRpdEZvcm1Nb2RlbDogPGFueT57XHJcbiAgICAgICAgICAgICAgICBzaG93RWRpdEZvcm06IHRydWUsXHJcbiAgICAgICAgICAgICAgICBzaG93UXVpY2tOb3RlRm9ybTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHBvcHVwU2l6ZTogPGFueT57fSxcclxuICAgICAgICAgICAgICAgIGRhdGE6IDxhbnk+e1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW0uY29udGVudDEsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogJzxiPicgKyB1c2VyUmVzdWx0LmZ1bGxOYW1lICsgJzwvYj4nICsgJyDEkcOjIGNoYXQgdOG6oWkgY8O0bmcgdmnhu4djICdcclxuICAgICAgICAgICAgICAgICAgICAgICAgKyAnPGI+JyArIHRoaXMubW9kZWwudGFza05hbWUgKyAnPC9iPicgKyAnIHbhu5tpIG7hu5lpIGR1bmcgJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICArICc8Yj4nICsgaXRlbS5jb250ZW50MSArICc8L2I+JyArICcgdsOgbyBsw7pjICcgKyBtb21lbnQobmV3IERhdGUoaXRlbS5jcmVhdGVkKSkuZm9ybWF0KCdZWVlZLU1NLUREIGhoOm1tOnNzIEEnKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLm1vZGVsLmVkaXRGb3JtTW9kZWwuc2hvd1F1aWNrTm90ZUZvcm0gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2hvd0FkZE5vdGVGb3JtID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBvbk1vdXNlVXAoZXZlbnQpIHtcclxuICAgICAgICBldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZENsYXNzVG9NZXNzYWdlKGl0ZW06IGFueSwgaXNQaW5uZWRNZXNzYWdlOiBib29sZWFuKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgc3R5bGVDbGFzcyA9ICcnO1xyXG4gICAgICAgIGlmICghaXNQaW5uZWRNZXNzYWdlKSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtLmlzRmlyc3RNZXNzYWdlRmxvdykge1xyXG4gICAgICAgICAgICAgICAgc3R5bGVDbGFzcyA9ICdmaXJzdCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoaXRlbS5pc0xhc3RNZXNzYWdlRmxvdykge1xyXG4gICAgICAgICAgICAgICAgc3R5bGVDbGFzcyA9ICdsYXN0JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3MgPSAnbWlkZGxlJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXRlbS5zZW50ID09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIHN0eWxlQ2xhc3MgPSAnc2VuZGluZyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdHlsZUNsYXNzO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
626
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1ib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi8iLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvY2hhdC9jaGF0LWJveC9jaGF0LWJveC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRyxPQUFPLE9BQU8sTUFBTSxRQUFRLENBQUM7QUFDN0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTFELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsU0FBUyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBRzlFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQzdGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDckUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUVoRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsV0FBVyxF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O2lDQUNMLEtBQUs7b0JBRUwsU0FBUyxTQUFDLE9BQU87MEJBQ2pCLFNBQVMsU0FBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbmplY3RvciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IG1vbWVudF8gZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IHsgRmlsZVVwbG9hZCB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL2ZpbGV1cGxvYWQnO1xyXG5cclxuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9hcHAtY29udGV4dC9jb21wb25lbnQtY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50QmFzZSB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvYmFzZS9jb21wb25lbnQtYmFzZSc7XHJcbmltcG9ydCB7IFBvcHVwU2l6ZSwgVXNlclBpY2tlckNvbnRyb2xTY2hlbWEgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcclxuaW1wb3J0IHsgQ29tQ3R4Q29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vLi4vY29uZmlncy9jb21wb25lbnQtY29udGV4dC5jb25zdGFudCc7XHJcbmltcG9ydCB7IE1vZHVsZUNvbmZpZyB9IGZyb20gJy4uLy4uLy4uL2NvbmZpZ3MvbW9kdWxlLWNvbmZpZyc7XHJcbmltcG9ydCB7IFRuVXNlciB9IGZyb20gJy4uLy4uLy4uL21vZGVscy90bi11c2VyJztcclxuaW1wb3J0IHsgQ2hlY2tDb250cm9sVmlzaWJsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jaGVjay1jb250cm9sLXZpc2libGUuc2VydmljZSc7XHJcbmltcG9ydCB7IENydWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY3J1ZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTW9kdWxlQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21vZHVsZS1jb25maWcuc2VydmljZSc7XHJcbmltcG9ydCB7IE5vdGlmaWVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL25vdGlmaWVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTaWduYWxSU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3NpZ25hbHIuc2VydmljZSc7XHJcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdXNlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR2VuZXJhdGVMaW5rRG93bmxvYWREVE8gfSBmcm9tICcuLi8uLi9maWxlLWV4cGxvcmVyL21vZGVscy9nZW5lcmF0ZS1saW5rLWRvd25sb2FkLWR0byc7XHJcbmltcG9ydCB7IFNlcnZpY2VSZXF1ZXN0TW9kZWwgfSBmcm9tICcuLi8uLi9maWxlLWV4cGxvcmVyL21vZGVscy9zZXJ2aWNlLXJlcXVlc3QtbW9kZWwnO1xyXG5pbXBvcnQgeyBGaWxlRXhwbG9yZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZmlsZS1leHBsb3Jlci9zZXJ2aWNlcy9maWxlLWV4cGxvcmVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNZXNzYWdlVHlwZSwgTkVXX01FU1NBR0UsIE5vdGlmaWNhdGlvblR5cGUsIFBJTk5FRF9DSEFOR0VEIH0gZnJvbSAnLi4vbW9kZWxzL2VudW1zJztcclxuaW1wb3J0IHsgRWRpdEZvcm1Nb2RlbCB9IGZyb20gJy4uL21vZGVscy9tb2RlbHMnO1xyXG5pbXBvcnQgeyBDaGF0U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NoYXQuc2VydmljZSc7XHJcbmltcG9ydCB7IE1lc3NhZ2VCb2FyZFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9tZXNzYWdlLWJvYXJkLnNlcnZpY2UnO1xyXG5cclxuLy8gZml4IGZvciBidWlsZCBwcm9kXHJcbmNvbnN0IG1vbWVudCA9IG1vbWVudF87XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnY2hhdC1ib3gnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NoYXQtYm94LmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2NoYXQtYm94LmNvbXBvbmVudC5zY3NzJywgJy4uL2NvbW1vbi1zdHlsZS5zY3NzJ10sXHJcbiAgICBwcm92aWRlcnM6IFtDb21wb25lbnRDb250ZXh0U2VydmljZSwgQ2hlY2tDb250cm9sVmlzaWJsZVNlcnZpY2VdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDaGF0Qm94Q29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAgIEBJbnB1dCgpIHRhc2tJZDogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgc2VydmljZUNvZGU6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIGVudGl0eTogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgdXNlcnM6IGFueTtcclxuICAgIEBJbnB1dCgpIHNob3dTZW5kTWVzc2FnZUJveDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnaW5wdXQnKSBpbnB1dDogRWxlbWVudFJlZjtcclxuICAgIEBWaWV3Q2hpbGQoJ2ZpbGVFbGVtZW50JykgZmlsZUVsZW1lbnQ6IEZpbGVVcGxvYWQ7XHJcblxyXG4gICAgcHJpdmF0ZSBfbW9kdWxlQ29uZmlnOiBNb2R1bGVDb25maWc7XHJcbiAgICByZWFkb25seSBkZWZhdWx0QXZhdGFyO1xyXG4gICAgcmVhZG9ubHkgZW52aXJvbm1lbnQ6IGFueTtcclxuXHJcbiAgICB1c2VyUGlja2VyRm9ybTogRWRpdEZvcm1Nb2RlbCA9IHtcclxuICAgICAgICBzZWxlY3RlZFZhbHVlOiBbXSxcclxuICAgICAgICBkYXRhOiBudWxsLFxyXG4gICAgfTtcclxuICAgIHVzZXJQaWNrZXJDb250cm9sOiBVc2VyUGlja2VyQ29udHJvbFNjaGVtYTtcclxuICAgIGZpbGVWaWV3ZXJNb2RlbDoge1xyXG4gICAgICAgIGRhdGE6IGFueSxcclxuICAgICAgICBzaG93RWRpdEZvcm06IGJvb2xlYW4sXHJcbiAgICB9O1xyXG5cclxuICAgIHRvcGljID0gJyc7XHJcbiAgICBmaXJzdFRpbWUgPSB0cnVlO1xyXG4gICAgbXVsdGlwbGUgPSB0cnVlO1xyXG4gICAgc2hvd0FkZE5vdGVGb3JtID0gZmFsc2U7XHJcbiAgICBmaWxlQXBpID0gJyc7XHJcbiAgICBwZW9wbGVBbGw6IGFueSA9IFtdO1xyXG4gICAgY29ycmVsYXRpb25JZHMgPSBbXTtcclxuICAgIGF0dGFjaG1lbnRzID0gW107XHJcbiAgICBpbWFnZSA9ICcnO1xyXG4gICAgcGVvcGxlQWxsVXNlcnMgPSBbXTtcclxuICAgIHBlb3BsZVJlbGF0ZWRVc2VycyA9IFtdO1xyXG4gICAgZWRpdEZvcm1Nb2RlbCA9IHt9O1xyXG5cclxuICAgIHNlcnZpY2VSZXF1ZXN0TW9kZWw6IFNlcnZpY2VSZXF1ZXN0TW9kZWw7XHJcbiAgICBjdXJyZW50VXNlcjogVG5Vc2VyO1xyXG4gICAgbWF4RmlsZVNpemU6IG51bWJlcjtcclxuICAgIC8vIGZpbGVWaWV3ZXI6IGFueTtcclxuICAgIGFzc2lnbmVlOiBhbnk7XHJcbiAgICBhc3NpZ25lcjogYW55O1xyXG4gICAgcmVsYXRlZFVzZXI6IGFueTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICAgICAgcHJpdmF0ZSBfY2hhdFNlcnZpY2U6IENoYXRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX21lc3NhZ2VCb2FyZFNlcnZpY2U6IE1lc3NhZ2VCb2FyZFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2NoZWNrQ29udHJvbFZpc2libGU6IENoZWNrQ29udHJvbFZpc2libGVTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX3NpZ25hbHJTZXJ2aWNlOiBTaWduYWxSU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9maWxlU2VydmljZTogRmlsZUV4cGxvcmVyU2VydmljZSxcclxuICAgICAgICBwdWJsaWMgX2NydWRTZXJ2aWNlOiBDcnVkU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9ub3RpZmllclNlcnZpY2U6IE5vdGlmaWVyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9tb2R1bGVDb25maWdTZXJ2aWNlOiBNb2R1bGVDb25maWdTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihpbmplY3Rvcik7XHJcbiAgICAgICAgdGhpcy5fbW9kdWxlQ29uZmlnID0gdGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKTtcclxuICAgICAgICB0aGlzLmVudmlyb25tZW50ID0gdGhpcy5fbW9kdWxlQ29uZmlnLmVudmlyb25tZW50O1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdEF2YXRhciA9IHRoaXMuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGEubWFpbi5kZWZhdWx0TWFsZUF2YXRhcjtcclxuICAgICAgICB0aGlzLmZpbGVBcGkgPSBgJHt0aGlzLmVudmlyb25tZW50LmFwaURvbWFpbi5maWxlRW5kcG9pbnR9LyR7dGhpcy5lbnZpcm9ubWVudC5hcGlWZXJzaW9ufS9GaWxlT2JqZWN0YDtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RlbC51c2VyUGlja2VyRm9ybSA9IHsgcG9wdXBTaXplOiBQb3B1cFNpemUsIGRhdGE6IHt9IH07XHJcbiAgICAgICAgdGhpcy5tb2RlbC5xdWlja05vdGVGb3JtID0geyBwb3B1cFNpemU6IDxhbnk+e30sIGRhdGE6IHt9IH07XHJcblxyXG4gICAgICAgIHRoaXMuY29udGV4dC5zdWJzY3JpYmUoJ1FVSUNLX05PVEVfUE9QVVAuQ0xPU0VfUE9QVVAnLCByZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwuZWRpdEZvcm1Nb2RlbC5zaG93UXVpY2tOb3RlRm9ybSA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVVzZXJzKGFzc2lnbmVlOiBhbnksIGFzc2lnbmVyOiBhbnksIHJlbGF0ZWRVc2VyOiBhbnlbXSkge1xyXG4gICAgICAgIHRoaXMuYXNzaWduZWUgPSBhc3NpZ25lZTtcclxuICAgICAgICB0aGlzLmFzc2lnbmVyID0gYXNzaWduZXI7XHJcbiAgICAgICAgdGhpcy5yZWxhdGVkVXNlciA9IHJlbGF0ZWRVc2VyO1xyXG4gICAgICAgIGxldCBhbGwgPSBbXTtcclxuICAgICAgICBhbGwucHVzaChhc3NpZ25lZSk7XHJcbiAgICAgICAgYWxsLnB1c2goYXNzaWduZXIpO1xyXG4gICAgICAgIGlmICh0aGlzLnJlbGF0ZWRVc2VyLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgYWxsID0gYWxsLmNvbmNhdChyZWxhdGVkVXNlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucGVvcGxlQWxsID0gYWxsLmZpbHRlcigoeCwgaSwgYSkgPT4gYS5pbmRleE9mKHgpID09IGkpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuaW5pdENsYXNzVmFyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuZ2V0TWVzc2FnZXMobnVsbCk7XHJcblxyXG4gICAgICAgIHRoaXMuX2NoYXRTZXJ2aWNlLmdldENoYXRJZEJ5VGFzayh0aGlzLnNlcnZpY2VSZXF1ZXN0TW9kZWwsIHRoaXMudGFza0lkKS50aGVuKHJzID0+IHtcclxuICAgICAgICAgICAgaWYgKCFycy5zdWNjZXNzKSB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcocnMubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIGlmICghcnMuZGF0YSkgcmV0dXJuO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLmlkID0gcnMuZGF0YTtcclxuICAgICAgICAgICAgdGhpcy5yb290Q29udGV4dC5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuQ0hBVF9JTlNUQU5DRV9JRF9MT0FERUQsIHRoaXMubW9kZWwuaWQpO1xyXG4gICAgICAgICAgICB0aGlzLnRvcGljID0gYGNoYXQuJHt0aGlzLm1vZGVsLmlkfWA7XHJcbiAgICAgICAgICAgIHRoaXMuX3NpZ25hbHJTZXJ2aWNlLnN0YXJ0KG51bGwsIHRoaXMudG9waWMsIGRhdGEgPT4gdGhpcy5oYW5kbGVDaGFuZ2VzKGRhdGEpKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdldCBwaW5uZWQgbWVzc2FnZVxyXG4gICAgICAgICAgICBpZiAodGhpcy5tb2RlbC5pZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbWVzc2FnZUJvYXJkU2VydmljZS5nZXRMYXRlc3RQaW5uZWRNZXNzYWdlKHRoaXMubW9kZWwuaWQpLnRoZW4ocnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChycy5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwucGlubmVkTWVzc2FnZSA9IHJzLmRhdGEuY29udGVudDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnJvb3RDb250ZXh0LnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVC5DSEFUX01FU1NBR0VfU0VORElORywgYXN5bmMgZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwuY29ycmVsYXRpb25JZHMucHVzaChkYXRhLm1lc3NhZ2UuY29ycmVsYXRpb25JZCk7XHJcbiAgICAgICAgICAgIGlmIChkYXRhLmF0dGFjaG1lbnRzICYmIGRhdGEuYXR0YWNobWVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgZGF0YS5hdHRhY2htZW50cyA9IGRhdGEuYXR0YWNobWVudHMubWFwKHggPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHgudXJsID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geDtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCB0ZW1wID0gYXdhaXQgdGhpcy5hcHBlbmRNZXNzYWdlKGRhdGEubWVzc2FnZS5tZXNzYWdlQ29udGVudCwgJ293bicsICdzZW5kaW5nJywgdGhpcy5jdXJyZW50VXNlci51c2VyTmFtZSwgZGF0YS5hdHRhY2htZW50cywgZGF0YS5tZXNzYWdlLmNvcnJlbGF0aW9uSWQsIGZhbHNlKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2codGVtcCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMucm9vdENvbnRleHQuc3Vic2NyaWJlKENvbUN0eENvbnN0YW50cy5ST09ULkNIQVRfTUVTU0FHRV9TRU5ULCBkYXRhID0+IHtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5yb290Q29udGV4dC5zdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuQ0hBVF9MT0FEX01PUkUsIGRhdGEgPT4ge1xyXG4gICAgICAgICAgICAvLyB0aGlzLmdldE1lc3NhZ2VzKHRoaXMubW9kZWwuY3JlYXRlZEZyb20pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnJvb3RDb250ZXh0LnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVC5DSEFUX1NDUk9MTElORywgc2Nyb2xsaW5nID0+IHtcclxuICAgICAgICAgICAgaWYgKHNjcm9sbGluZykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zY3JvbGxpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zY3JvbGxpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwubmV3TWVzc2FnZU5vdFVwZGF0ZWRDb3VudCA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5yb290Q29udGV4dC5zdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuQ0hBVF9IQVNfTkVXX01FU1NBR0VfTk9UX1VQREFURUQsIGNvdW50ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5tb2RlbC5zY3JvbGxpbmcgPSBjb3VudCAhPT0gMDtcclxuICAgICAgICAgICAgdGhpcy5tb2RlbC5uZXdNZXNzYWdlTm90VXBkYXRlZENvdW50ID0gY291bnQ7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuY29udGV4dC5zdWJzY3JpYmUoJ0NMT1NFX1BPUFVQJywgcnMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLnVzZXJQaWNrZXJGb3JtLnNob3cgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5wYXJlbnRDb250ZXh0LmZpcmVFdmVudCgnVEFTSy5SRUxBVEVEX1VTRVJfQ0hBTkdFRCcsIHJzKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5wYXJlbnRDb250ZXh0LnN1YnNjcmliZSgnVEFTSy5EQVRBX0NIQU5HRUQnLCBycyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVXNlcnMocnMuYXNzaWduZWUsIHJzLmFzc2lnbmVyLCBycy5yZWxhdGVkVXNlcik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBoYW5kbGVDaGFuZ2VzKGRhdGEpIHtcclxuICAgICAgICBjb25zdCBuZXdNZXNzYWdlID0gSlNPTi5wYXJzZShkYXRhKTtcclxuICAgICAgICBpZiAoIW5ld01lc3NhZ2UgfHwgIW5ld01lc3NhZ2UuZGF0YSkge1xyXG4gICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ1NZU19FUlJfREVWOiBM4buXaSBTaWduYWxSJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN3aXRjaCAobmV3TWVzc2FnZS5ub3RpZmljYXRpb25UeXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uVHlwZS5OZXdNZXNzYWdlOlxyXG4gICAgICAgICAgICBjYXNlIE5FV19NRVNTQUdFOiB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZU5ld01lc3NhZ2VOb3RpZmljYXRpb24obmV3TWVzc2FnZS5kYXRhKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uVHlwZS5QaW5uZWRDaGFuZ2VkOlxyXG4gICAgICAgICAgICBjYXNlIFBJTk5FRF9DSEFOR0VEOiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbmQgPSB0aGlzLm1vZGVsLmNvcnJlbGF0aW9uSWRzLmZpbmRJbmRleCh4ID0+IHggPT0gbmV3TWVzc2FnZS5jb3JyZWxhdGlvbklkKTtcclxuICAgICAgICAgICAgICAgIGlmIChpbmQgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuY29ycmVsYXRpb25JZHMuc3BsaWNlKGluZCwgMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZVBpbm5lZENoYW5nZU5vdGlmaWNhdGlvbihuZXdNZXNzYWdlLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0Q2xhc3NWYXIoKSB7XHJcbiAgICAgICAgdGhpcy5maWxlVmlld2VyTW9kZWwgPSB7XHJcbiAgICAgICAgICAgIGRhdGE6IHt9LFxyXG4gICAgICAgICAgICBzaG93RWRpdEZvcm06IGZhbHNlLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy51c2VyUGlja2VyQ29udHJvbCA9IG5ldyBVc2VyUGlja2VyQ29udHJvbFNjaGVtYSh7XHJcbiAgICAgICAgICAgIGZpZWxkOiAnaWQnLFxyXG4gICAgICAgICAgICBsYWJlbDogJycsXHJcbiAgICAgICAgICAgIGZ1bGxMYWJlbDogJycsXHJcbiAgICAgICAgICAgIG11bHRpcGxlOiB0cnVlLFxyXG4gICAgICAgICAgICBoaWRkZW5DaGVjazogKCkgPT4gdGhpcy51c2VyUGlja2VyRm9ybS5zaG93LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuc2VydmljZVJlcXVlc3RNb2RlbCA9IDxTZXJ2aWNlUmVxdWVzdE1vZGVsPntcclxuICAgICAgICAgICAgc2VydmljZTogdGhpcy5zZXJ2aWNlQ29kZSxcclxuICAgICAgICAgICAgc2VydmljZUNvZGU6IHRoaXMuc2VydmljZUNvZGUsXHJcbiAgICAgICAgICAgIGVudGl0eTogdGhpcy5lbnRpdHksXHJcbiAgICAgICAgICAgIGVudGl0eUtleTogJ2lkJyxcclxuICAgICAgICAgICAgZW50aXR5SW5zdGFuY2VJZDogdGhpcy50YXNrSWRcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMubW9kZWwuZGF0YVNvdXJjZSA9IFtdO1xyXG4gICAgICAgIHRoaXMubW9kZWwuY29ycmVsYXRpb25JZHMgPSBbXTtcclxuICAgICAgICB0aGlzLm1vZGVsLmF0dGFjaG1lbnRzID0gW107XHJcbiAgICAgICAgdGhpcy5tb2RlbC5tYXhGaWxlU2l6ZSA9IDMwMDAwMDA7XHJcbiAgICAgICAgdGhpcy5tb2RlbC5pbWcgPSB7fTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRVc2VyID0gdGhpcy5fdXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKTtcclxuICAgICAgICB0aGlzLnBlb3BsZUFsbFVzZXJzID0gW107XHJcbiAgICAgICAgdGhpcy5wZW9wbGVSZWxhdGVkVXNlcnMgPSBbXTtcclxuICAgICAgICB0aGlzLm1vZGVsLmVkaXRGb3JtTW9kZWwgPSBbXTtcclxuICAgICAgICBpZiAodGhpcy51c2Vycykge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLnRhc2tOYW1lID0gdGhpcy51c2Vycy50YXNrTmFtZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVXNlcnMoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJzLmFzc2lnbmVlLFxyXG4gICAgICAgICAgICAgICAgdGhpcy51c2Vycy5hc3NpZ25lcixcclxuICAgICAgICAgICAgICAgIHRoaXMudXNlcnMucmVsYXRlZFVzZXJzXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmdldFJlbGF0ZWRVc2VySW5mbygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRSZWxhdGVkVXNlckluZm8oKSB7XHJcbiAgICAgICAgY29uc3QgcGVvcGxlUmVsYXRlZFVzZXJzID0gYXdhaXQgdGhpcy5fdXNlclNlcnZpY2UuZ2V0QmFzaWNVc2Vyc0luZm8odGhpcy5yZWxhdGVkVXNlci5qb2luKCkpO1xyXG4gICAgICAgIGlmIChwZW9wbGVSZWxhdGVkVXNlcnMgPT0gbnVsbCB8fCBwZW9wbGVSZWxhdGVkVXNlcnMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgcGVvcGxlUmVsYXRlZFVzZXJzKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGVvcGxlUmVsYXRlZFVzZXJzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0uZnVsbE5hbWUsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogaXRlbS5mdWxsTmFtZSxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtLmlkXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBoYW5kbGVQaW5uZWRDaGFuZ2VOb3RpZmljYXRpb24oZGF0YSkge1xyXG4gICAgICAgIGlmIChkYXRhLnBpbm5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLnBpbm5lZE1lc3NhZ2UgPSBkYXRhLm1lc3NhZ2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLnBpbm5lZE1lc3NhZ2UgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBoYW5kbGVOZXdNZXNzYWdlTm90aWZpY2F0aW9uKG5ld01lc3NhZ2UpIHtcclxuICAgICAgICBjb25zdCBpbmQgPSB0aGlzLm1vZGVsLmNvcnJlbGF0aW9uSWRzLmZpbmRJbmRleCh4ID0+IHggPT0gbmV3TWVzc2FnZS5jb3JyZWxhdGlvbklkKTtcclxuXHJcbiAgICAgICAgaWYgKG5ld01lc3NhZ2UubWVzc2FnZVR5cGUgPT0gTWVzc2FnZVR5cGUuRklMRSkge1xyXG4gICAgICAgICAgICBuZXdNZXNzYWdlLmF0dGFjaG1lbnRzID0gYXdhaXQgdGhpcy5fY2hhdFNlcnZpY2UuZ2V0TGlzdEF0dGFjaG1lbnQobmV3TWVzc2FnZS5pZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaW5kID09PSAtMSkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFwcGVuZE1lc3NhZ2UobmV3TWVzc2FnZS5jb250ZW50LCB0aGlzLmdldFR5cGVPZk1lc3NhZ2UobmV3TWVzc2FnZS5jcmVhdGVkQnkpLCAncmVjZWl2ZWQnLCBuZXdNZXNzYWdlLmNyZWF0ZWRCeSwgbmV3TWVzc2FnZS5hdHRhY2htZW50cywgJycsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVNZXNzYWdlKG5ld01lc3NhZ2UuY29ycmVsYXRpb25JZCwgbmV3TWVzc2FnZSk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwuY29ycmVsYXRpb25JZHMuc3BsaWNlKGluZCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldE1lc3NhZ2VzKGNyZWF0ZWRGcm9tKSB7XHJcbiAgICAgICAgdGhpcy5fY2hhdFNlcnZpY2UuZ2V0Q29udGVudEJ5VGFza0lkKHRoaXMuc2VydmljZVJlcXVlc3RNb2RlbCwgdGhpcy50YXNrSWQpLnRoZW4oYXN5bmMgcnMgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50VXNlck5hbWUgPSB0aGlzLmN1cnJlbnRVc2VyLnVzZXJOYW1lO1xyXG4gICAgICAgICAgICBsZXQgbmVhckJ5Q3JlYXRlZCA9ICcnO1xyXG4gICAgICAgICAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgICAgICAgICBsZXQgdXNlck5hbWVzOiBzdHJpbmcgPSAnJztcclxuICAgICAgICAgICAgaWYgKCFycy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKHJzLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBycy5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5jcmVhdGVkQnkgJiYgaXRlbS5jcmVhdGVkQnkgIT0gJycpIHVzZXJOYW1lcyArPSBgJHtpbmRleCA9PSAwID8gJycgOiAnLCd9JHtpdGVtLmNyZWF0ZWRCeX1gO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkgdGhpcy5tb2RlbC5jcmVhdGVkRnJvbSA9IGl0ZW0uY3JlYXRlZDtcclxuXHJcbiAgICAgICAgICAgICAgICBpdGVtLnR5cGUgPSBpdGVtLmNyZWF0ZWRCeSA9PT0gY3VycmVudFVzZXJOYW1lID8gJ293bicgOiAnZnJvbSc7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0ubWVzc2FnZVR5cGUgPT09IE1lc3NhZ2VUeXBlLkZJTEUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLmF0dGFjaG1lbnRzID0gYXdhaXQgdGhpcy5fY2hhdFNlcnZpY2UuZ2V0TGlzdEF0dGFjaG1lbnQoaXRlbS5pZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaXRlbS5pc0xhc3RNZXNzYWdlRmxvdyA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpdGVtLmNyZWF0ZWRCeSAhPT0gbmVhckJ5Q3JlYXRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgraXRlbSA+IC0wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJzLmRhdGFbK2l0ZW0gLSAxXS5pc0xhc3RNZXNzYWdlRmxvdyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIG5lYXJCeUNyZWF0ZWQgPSBpdGVtLmNyZWF0ZWRCeTtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLmlzRmlyc3RNZXNzYWdlRmxvdyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLmlzRmlyc3RNZXNzYWdlRmxvdyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICgraW5kZXggPT09IHJzLmRhdGEubGVuZ3RoIC0gMSkgaXRlbS5pc0xhc3RNZXNzYWdlRmxvdyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpbmRleCsrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoY3JlYXRlZEZyb20pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZGF0YVNvdXJjZSA9IFsuLi5ycy5kYXRhLCAuLi50aGlzLm1vZGVsLmRhdGFTb3VyY2VdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5kYXRhU291cmNlID0gcnMuZGF0YTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodXNlck5hbWVzICE9ICcnKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB1c2VySW5mb3MgPSBhd2FpdCB0aGlzLl91c2VyU2VydmljZS5nZXRCYXNpY1VzZXJzSW5mb0J5VXNlck5hbWVzKHVzZXJOYW1lcyk7XHJcbiAgICAgICAgICAgICAgICBpZiAodXNlckluZm9zICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5tb2RlbC5kYXRhU291cmNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVzZXIgPSB1c2VySW5mb3MuZmluZCh4ID0+IHgudXNlck5hbWUgPT0gaXRlbS5jcmVhdGVkQnkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXVzZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uYXZhdGFyID0gdXNlci5hdmF0YXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZnVsbE5hbWUgPSB1c2VyLmZ1bGxOYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnJvb3RDb250ZXh0LmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuUk9PVC5DSEFUX0RBVEFfTE9BREVELCB0cnVlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzY3JvbGxUb0JvdHRvbShzcGVlZCA9IDAsIGZvcmNlID0gZmFsc2UsIHNlbnQpIHtcclxuICAgICAgICBpZiAoIXRoaXMubW9kZWwuc2Nyb2xsaW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm9vdENvbnRleHQuZmlyZUV2ZW50KENvbUN0eENvbnN0YW50cy5ST09ULkNIQVRfSEFTX05FV19NRVNTQUdFLCB7IHNwZWVkLCBmb3JjZTogdHJ1ZSB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc2VudCAhPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgdGhpcy5yb290Q29udGV4dC5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuQ0hBVF9IQVNfTkVXX01FU1NBR0UsIHsgc3BlZWQsIGZvcmNlIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhcHBlbmRNZXNzYWdlKG1lc3NhZ2UsIHR5cGUsIHN0YXR1cywgY3JlYXRlZEJ5LCBhdHRhY2htZW50cyA9IFtdLCBjb3JyZWxhdGlvbklkID0gJycsIHNlbnQpIHtcclxuICAgICAgICBsZXQgZnVsbE5hbWUgPSAnJztcclxuICAgICAgICBsZXQgYXZhdGFyID0gJyc7XHJcblxyXG4gICAgICAgIGNvbnN0IHVzZXIgPSBhd2FpdCB0aGlzLl91c2VyU2VydmljZS5nZXRCYXNpY1VzZXJJbmZvQnlVc2VyTmFtZShjcmVhdGVkQnkpO1xyXG4gICAgICAgIGZ1bGxOYW1lID0gdXNlci5mdWxsTmFtZSA/PyAnJztcclxuICAgICAgICBhdmF0YXIgPSB1c2VyLmF2YXRhciA/PyAnJztcclxuXHJcbiAgICAgICAgaWYgKGF0dGFjaG1lbnRzICYmIGF0dGFjaG1lbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgY2xvbmVkQXR0YWNobWVudCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYXR0YWNobWVudHMpKTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlbC5kYXRhU291cmNlLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgY3JlYXRlZDogbmV3IERhdGUoKSxcclxuICAgICAgICAgICAgICAgIGNyZWF0ZWRCeTogY3JlYXRlZEJ5LFxyXG4gICAgICAgICAgICAgICAgZnVsbE5hbWU6IGZ1bGxOYW1lLFxyXG4gICAgICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXMsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLFxyXG4gICAgICAgICAgICAgICAgYXZhdGFyOiBhdmF0YXIsXHJcbiAgICAgICAgICAgICAgICBhdHRhY2htZW50czogY2xvbmVkQXR0YWNobWVudCxcclxuICAgICAgICAgICAgICAgIGNvcnJlbGF0aW9uSWQ6IGNvcnJlbGF0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICBpc0ZpcnN0TWVzc2FnZUZsb3c6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaXNMYXN0TWVzc2FnZUZsb3c6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgc2VudDogc2VudFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVGaXJzdE9yTGFzdE1lc3NhZ2UoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChtZXNzYWdlICYmIG1lc3NhZ2UudHJpbSgpICE9ICcnKSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwuZGF0YVNvdXJjZS5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGNyZWF0ZWQ6IG5ldyBEYXRlKCksXHJcbiAgICAgICAgICAgICAgICBjcmVhdGVkQnk6IGNyZWF0ZWRCeSxcclxuICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiBmdWxsTmFtZSxcclxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IG1lc3NhZ2UsXHJcbiAgICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1cyxcclxuICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsXHJcbiAgICAgICAgICAgICAgICBhdmF0YXI6IGF2YXRhcixcclxuICAgICAgICAgICAgICAgIGNvcnJlbGF0aW9uSWQ6IGNvcnJlbGF0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICBpc0ZpcnN0TWVzc2FnZUZsb3c6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaXNMYXN0TWVzc2FnZUZsb3c6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgc2VudDogc2VudFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVGaXJzdE9yTGFzdE1lc3NhZ2UoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsLmRhdGFTb3VyY2U7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlRmlyc3RPckxhc3RNZXNzYWdlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmRhdGFTb3VyY2UubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBsZW5ndGggPSB0aGlzLm1vZGVsLmRhdGFTb3VyY2UubGVuZ3RoO1xyXG4gICAgICAgICAgICBpZiAobGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmRhdGFTb3VyY2VbMF0uaXNGaXJzdE1lc3NhZ2VGbG93ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNyZWF0ZWRCeSA9IHRoaXMubW9kZWwuZGF0YVNvdXJjZVtsZW5ndGggLSAyXS5jcmVhdGVkQnk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjcmVhdGVkQnkyID0gdGhpcy5tb2RlbC5kYXRhU291cmNlW2xlbmd0aCAtIDFdLmNyZWF0ZWRCeTtcclxuICAgICAgICAgICAgICAgIGlmIChjcmVhdGVkQnkgIT09IGNyZWF0ZWRCeTIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmRhdGFTb3VyY2VbbGVuZ3RoIC0gMl0uaXNMYXN0TWVzc2FnZUZsb3cgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZGF0YVNvdXJjZVtsZW5ndGggLSAxXS5pc0ZpcnN0TWVzc2FnZUZsb3cgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5kYXRhU291cmNlW2xlbmd0aCAtIDJdLmlzTGFzdE1lc3NhZ2VGbG93ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5kYXRhU291cmNlW2xlbmd0aCAtIDFdLmlzTGFzdE1lc3NhZ2VGbG93ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVNZXNzYWdlKGNvcnJlbGF0aW9uSWQsIG1lc3NhZ2UpIHtcclxuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5tb2RlbC5kYXRhU291cmNlLmZpbmQoeCA9PiB4LmNvcnJlbGF0aW9uSWQgPT09IGNvcnJlbGF0aW9uSWQpO1xyXG5cclxuICAgICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgICAgICBpZiAobWVzc2FnZS5hdHRhY2htZW50cyAmJiBtZXNzYWdlLmF0dGFjaG1lbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYXR0YWNobWVudHMgPSBtZXNzYWdlLmF0dGFjaG1lbnRzO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpdGVtLmlkID0gbWVzc2FnZS5pZDtcclxuICAgICAgICAgICAgaXRlbS5zZW50ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlTWVzc2FnZVN0YXR1cyhtZXNzYWdlLCBzdGF0dXMsIGVycm9yTWVzc2FnZSA9ICcnKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMubW9kZWwuZGF0YVNvdXJjZS5maW5kKHggPT4geC5tZXNzYWdlID09PSBtZXNzYWdlKTtcclxuICAgICAgICBpdGVtLnN0YXR1cyA9IHN0YXR1cztcclxuICAgICAgICBpdGVtLmVycm9yTWVzc2FnZSA9IGVycm9yTWVzc2FnZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREaXNwbGF5U3RhdHVzKHN0YXR1cykge1xyXG4gICAgICAgIHN3aXRjaCAoc3RhdHVzKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NlbmRpbmcnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICfEkGFuZyBn4butaSc7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NlbnQnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICfEkMOjIGfhu61pJztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgLy8gdW5zY3JpYmxlIHNpZ25hbHJcclxuICAgICAgICB0aGlzLl9zaWduYWxyU2VydmljZS51blN1YnNjcmliZVZpZXdDb2RlKG51bGwsIHRoaXMudG9waWMpO1xyXG4gICAgICAgIHRoaXMucm9vdENvbnRleHQudW5TdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuQ0hBVF9NRVNTQUdFX1NFTkRJTkcpO1xyXG4gICAgICAgIHRoaXMucm9vdENvbnRleHQudW5TdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuQ0hBVF9NRVNTQUdFX1NFTlQpO1xyXG4gICAgICAgIHRoaXMucm9vdENvbnRleHQudW5TdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuQ0hBVF9MT0FEX01PUkUpO1xyXG4gICAgICAgIHRoaXMucm9vdENvbnRleHQudW5TdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuQ0hBVF9TQ1JPTExJTkcpO1xyXG4gICAgICAgIHRoaXMucm9vdENvbnRleHQudW5TdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuQ0hBVF9IQVNfTkVXX01FU1NBR0VfTk9UX1VQREFURUQpO1xyXG5cclxuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFR5cGVPZk1lc3NhZ2UoY3JlYXRlZEJ5KSB7XHJcbiAgICAgICAgcmV0dXJuIGNyZWF0ZWRCeSA9PT0gdGhpcy5jdXJyZW50VXNlci51c2VyTmFtZSA/ICdvd24nIDogJ2Zyb20nO1xyXG4gICAgfVxyXG5cclxuICAgIHRyYWNrQnlGdW5jKGluZGV4LCBpdGVtKSB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0uaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgdHJhY2tBdHRhY2htZW50QnlGdW5jKGluZGV4LCBpdGVtKSB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0uZmlsZU5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KSB7XHJcbiAgICAgICAgY29uc3Qgb2JqZWN0RGF0YSA9IHRoaXMuZ2V0SW1hZ2VDbGlwYm9hcmREYXRhKGV2ZW50KTtcclxuICAgICAgICBpZiAob2JqZWN0RGF0YSkge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLmF0dGFjaG1lbnRzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgdHlwZTogJ2ltYWdlJyxcclxuICAgICAgICAgICAgICAgIHVybDogb2JqZWN0RGF0YS51cmwsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiBvYmplY3REYXRhLmJsb2IsXHJcbiAgICAgICAgICAgICAgICBmaWxlTmFtZTogdGhpcy5fY29tbW9uU2VydmljZS5ndWlkKCkgKyAnLnBuZydcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldEltYWdlQ2xpcGJvYXJkRGF0YShlKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlLmNsaXBib2FyZERhdGEuaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGUuY2xpcGJvYXJkRGF0YS5pdGVtc1tpXTtcclxuICAgICAgICAgICAgaWYgKGl0ZW0udHlwZS5pbmRleE9mKCdpbWFnZScpICE9IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbWFnZU9iaiA9IGl0ZW0uZ2V0QXNGaWxlKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2VPYmouc2l6ZSA8IHRoaXMubW9kZWwubWF4RmlsZVNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyB1cmw6IFVSTC5jcmVhdGVPYmplY3RVUkwoaW1hZ2VPYmopLCBibG9iOiBpbWFnZU9iaiB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHZpZXdPckRvd25sb2FkRmlsZShldnQsIGF0dGFjaG1lbnRJdGVtKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ZpbGVTZXJ2aWNlLmlzU3VwcG9ydGVkVmlld09ubGluZShhdHRhY2htZW50SXRlbS5maWxlTmFtZSkpIHtcclxuICAgICAgICAgICAgLy8gdGhpcy5tb2RlbC5maWxlVmlld2VyLmRhdGEgPSB7fTtcclxuICAgICAgICAgICAgLy8gdGhpcy5tb2RlbC5maWxlVmlld2VyLmRhdGEuZmlsZUlkID0gYXR0YWNobWVudEl0ZW0uaWQ7XHJcbiAgICAgICAgICAgIC8vIHRoaXMubW9kZWwuZmlsZVZpZXdlci5kYXRhLmZpbGVOYW1lID0gYXR0YWNobWVudEl0ZW0uZmlsZU5hbWU7XHJcbiAgICAgICAgICAgIC8vIHRoaXMubW9kZWwuZmlsZVZpZXdlci5kYXRhLmlzRmlsZVZlcnNpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgLy8gdGhpcy5tb2RlbC5maWxlVmlld2VyLnNob3cgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmZpbGVWaWV3ZXJNb2RlbCA9IHtcclxuICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICBmaWxlSWQ6IGF0dGFjaG1lbnRJdGVtLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBhdHRhY2htZW50SXRlbS5maWxlTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBpc0ZpbGVWZXJzaW9uOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzaG93RWRpdEZvcm06IHRydWUsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0b3AubG9jYXRpb24uaHJlZiA9IGF3YWl0IHRoaXMuZG93bmxvYWQoYXR0YWNobWVudEl0ZW0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgZG93bmxvYWQoZmlsZSk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbW9kZWwgPSBuZXcgR2VuZXJhdGVMaW5rRG93bmxvYWREVE8oKTtcclxuICAgICAgICAgICAgbW9kZWwuZmlsZUlkID0gZmlsZS5pZDtcclxuICAgICAgICAgICAgbW9kZWwuaXNGaWxlVmVyc2lvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLl9maWxlU2VydmljZS5nZW5lcmF0ZUxpbmtEb3dubG9hZChtb2RlbClcclxuICAgICAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3dubG9hZFVybCA9IHRoaXMuX2ZpbGVTZXJ2aWNlLmdldEFub255bW91c0Rvd25sb2FkVXJsKHJlc3BvbnNlLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZG93bmxvYWRVcmwpO1xyXG4gICAgICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGdldCBkb3dubG9hZCBsaW5rJyk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBicm93c2VGaWxlRnJvbVBlcnNvbmFsKCkge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBicm93c2VGaWxlRnJvbUNvbXB1dGVyKCkge1xyXG4gICAgICAgIHRoaXMuZmlsZUVsZW1lbnQuYWR2YW5jZWRGaWxlSW5wdXQubmF0aXZlRWxlbWVudC5jbGljaygpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uU2VsZWN0RmlsZUZyb21Db21wdXRlcihldnQpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZXZ0LmZpbGVzICYmIGV2dC5maWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZXZ0LmZpbGVzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVOYW1lID0gZXZ0LmZpbGVzW2luZGV4XS5uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLl9jb21tb25TZXJ2aWNlLmlzSW1hZ2UoZmlsZU5hbWUpID8gJ2ltYWdlJyA6ICdmaWxlJztcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhdHRhY2htZW50SXRlbTogYW55ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBldnQuZmlsZXNbaW5kZXhdLCBmaWxlTmFtZTogZmlsZU5hbWVcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudEl0ZW0udHlwZSA9PSAnaW1hZ2UnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRJdGVtLnVybCA9IGV2dC5maWxlc1tpbmRleF0ub2JqZWN0VVJMLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuYXR0YWNobWVudHMucHVzaChhdHRhY2htZW50SXRlbSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignZXJyb3Igb24gcHJvY2VzcyBzZWxlY3QgZmlsZSBjb21wdXRlcicsIGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdGhpcy5maWxlRWxlbWVudC5jbGVhcigpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUF0dGFjaG1lbnQoaXRlbSkge1xyXG4gICAgICAgIGNvbnN0IGluZCA9IHRoaXMubW9kZWwuYXR0YWNobWVudHMuZmluZEluZGV4KHggPT4geC51cmwgPT09IGl0ZW0udXJsKTtcclxuICAgICAgICB0aGlzLm1vZGVsLmF0dGFjaG1lbnRzLnNwbGljZShpbmQsIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIGhhc0F0dGFjaG1lbnQoaXRlbSkge1xyXG4gICAgICAgIHJldHVybiBpdGVtLmF0dGFjaG1lbnRzICYmIGl0ZW0uYXR0YWNobWVudHMubGVuZ3RoID4gMDtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkSW1nKGV2dCwgcGFyZW50SW5kZXg6IG51bWJlciwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMubW9kZWwuaW1nW2Ake3BhcmVudEluZGV4fSR7aW5kZXh9YF0gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubW9kZWwuaW1nW2Ake3BhcmVudEluZGV4fXdpZHRoJHtpbmRleH1gXSA9IChldnQudGFyZ2V0LndpZHRoICsgMzIpICsgJ3B4JztcclxuICAgIH1cclxuXHJcbiAgICBpblRoZVNhbWVUaW1lKGk6IG51bWJlciwgaXRlbTogYW55LCBkYXRhU291cmNlOiBhbnkpIHtcclxuICAgICAgICBpZiAoaSA8IGRhdGFTb3VyY2UubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICBjb25zdCBkMSA9IG5ldyBEYXRlKGRhdGFTb3VyY2VbaSArIDFdLmNyZWF0ZWQpO1xyXG4gICAgICAgICAgICBjb25zdCBkMiA9IG5ldyBEYXRlKGl0ZW0uY3JlYXRlZCk7XHJcbiAgICAgICAgICAgIGNvbnN0IG1zID0gZDEuZ2V0VGltZSgpIC0gZDIuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICByZXR1cm4gbXMgPCAzMDAwMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHBpbk1lc3NhZ2UoaXRlbSkge1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLnBpbm5lZE1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubW9kZWwucGlubmVkTWVzc2FnZS5pZCAhPSBpdGVtLmlkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0NvbmZpcm0oJ0LhuqFuIGPDsyBjaOG6r2MgY2jhuq9uIG114buRbiBnaGltIHRpbiBuaOG6r24gbsOgeT8gVGluIG5o4bqvbiDEkcOjIGdoaW0gdHLGsOG7m2MgxJHDsyBz4bq9IMSRxrDhu6NjIGLhu48gZ2hpbS4nKS50aGVuKHJzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXJzKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kb1BpbihpdGVtLCBpdGVtLmlkLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kb1BpbihpdGVtLCBpdGVtLmlkLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZG9QaW4oaXRlbSwgaXRlbS5pZCwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGRvUGluKGl0ZW0sIGlkLCBwaW5uZWQpIHtcclxuICAgICAgICBjb25zdCBjb3JyZWxhdGlvbklkID0gdGhpcy5fY29tbW9uU2VydmljZS5ndWlkKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlbC5jb3JyZWxhdGlvbklkcy5wdXNoKGNvcnJlbGF0aW9uSWQpO1xyXG4gICAgICAgIHRoaXMuX21lc3NhZ2VCb2FyZFNlcnZpY2UucGluTWVzc2FnZShpZCwgcGlubmVkLCBjb3JyZWxhdGlvbklkKS50aGVuKHJzID0+IHtcclxuICAgICAgICAgICAgaWYgKHBpbm5lZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5waW5uZWRNZXNzYWdlID0gaXRlbTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwucGlubmVkTWVzc2FnZSA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDdXJyZW50VXNlckF2YXRhcihhdmF0YXI6IGFueSkge1xyXG4gICAgICAgIGlmIChhdmF0YXIgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYCR7dGhpcy5maWxlQXBpfS9wdWJsaWMvJHthdmF0YXJ9L0Rvd25sb2FkYDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRBdmF0YXI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFkZFBlb3BsZSgpIHtcclxuICAgICAgICB0aGlzLnVzZXJQaWNrZXJGb3JtLnNlbGVjdGVkVmFsdWUgPSB0aGlzLnBlb3BsZVJlbGF0ZWRVc2VycztcclxuICAgICAgICB0aGlzLnVzZXJQaWNrZXJGb3JtLm11bHRpcGxlID0gdGhpcy5tdWx0aXBsZTtcclxuICAgICAgICB0aGlzLnVzZXJQaWNrZXJGb3JtLnNob3cgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHF1aWNrTm90ZShpdGVtOiBhbnkpIHtcclxuICAgICAgICBjb25zdCB1c2VyUmVzdWx0ID0gYXdhaXQgdGhpcy5fdXNlclNlcnZpY2UuZ2V0QmFzaWNVc2VySW5mbyhpdGVtLmNyZWF0ZWRCeSk7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0LmRhdGEubm90ZURhdGFNb2RlbCA9IDxhbnk+e1xyXG4gICAgICAgICAgICBlZGl0Rm9ybU1vZGVsOiA8YW55PntcclxuICAgICAgICAgICAgICAgIHNob3dFZGl0Rm9ybTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHNob3dRdWlja05vdGVGb3JtOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgcG9wdXBTaXplOiA8YW55Pnt9LFxyXG4gICAgICAgICAgICAgICAgZGF0YTogPGFueT57XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogaXRlbS5jb250ZW50MSxcclxuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnPGI+JyArIHVzZXJSZXN1bHQuZnVsbE5hbWUgKyAnPC9iPicgKyAnIMSRw6MgY2hhdCB04bqhaSBjw7RuZyB2aeG7h2MgJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICArICc8Yj4nICsgdGhpcy5tb2RlbC50YXNrTmFtZSArICc8L2I+JyArICcgduG7m2kgbuG7mWkgZHVuZyAnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICsgJzxiPicgKyBpdGVtLmNvbnRlbnQxICsgJzwvYj4nICsgJyB2w6BvIGzDumMgJyArIG1vbWVudChuZXcgRGF0ZShpdGVtLmNyZWF0ZWQpKS5mb3JtYXQoJ1lZWVktTU0tREQgaGg6bW06c3MgQScpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMubW9kZWwuZWRpdEZvcm1Nb2RlbC5zaG93UXVpY2tOb3RlRm9ybSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zaG93QWRkTm90ZUZvcm0gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIG9uTW91c2VVcChldmVudCkge1xyXG4gICAgICAgIGV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkQ2xhc3NUb01lc3NhZ2UoaXRlbTogYW55LCBpc1Bpbm5lZE1lc3NhZ2U6IGJvb2xlYW4pOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBzdHlsZUNsYXNzID0gJyc7XHJcbiAgICAgICAgaWYgKCFpc1Bpbm5lZE1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0uaXNGaXJzdE1lc3NhZ2VGbG93KSB7XHJcbiAgICAgICAgICAgICAgICBzdHlsZUNsYXNzID0gJ2ZpcnN0JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChpdGVtLmlzTGFzdE1lc3NhZ2VGbG93KSB7XHJcbiAgICAgICAgICAgICAgICBzdHlsZUNsYXNzID0gJ2xhc3QnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc3R5bGVDbGFzcyA9ICdtaWRkbGUnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpdGVtLnNlbnQgPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgc3R5bGVDbGFzcyA9ICdzZW5kaW5nJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN0eWxlQ2xhc3M7XHJcbiAgICB9XHJcbn1cclxuIl19