@openziti/ziti-console-lib 0.4.6 → 0.4.8

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 (79) hide show
  1. package/assets/images/visualizer/node-click.png +0 -0
  2. package/assets/styles/ziti.css +1 -0
  3. package/assets/svgs/cursor-pointer.svg +1 -0
  4. package/esm2022/lib/features/confirm/confirm.component.mjs +6 -4
  5. package/esm2022/lib/features/data-table/data-table-filter.service.mjs +2 -2
  6. package/esm2022/lib/features/data-table/data-table.component.mjs +13 -1
  7. package/esm2022/lib/features/data-table/table-filter-bar/filter-bar.component.mjs +4 -2
  8. package/esm2022/lib/features/data-table/table-hidden-columns-bar/hidden-columns-bar.component.mjs +3 -3
  9. package/esm2022/lib/features/dynamic-widgets/forwarding-config/forwarding-config.service.mjs +4 -4
  10. package/esm2022/lib/features/extendable/extensions-noop.service.mjs +3 -1
  11. package/esm2022/lib/features/preview-list/preview-list.component.mjs +48 -26
  12. package/esm2022/lib/features/projectable-forms/configuration/configuration-form.component.mjs +7 -5
  13. package/esm2022/lib/features/projectable-forms/edge-router/edge-router-form.component.mjs +6 -6
  14. package/esm2022/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.mjs +11 -10
  15. package/esm2022/lib/features/projectable-forms/identity/identity-form.component.mjs +6 -6
  16. package/esm2022/lib/features/projectable-forms/projectable-form.class.mjs +35 -9
  17. package/esm2022/lib/features/projectable-forms/service/service-form.component.mjs +8 -8
  18. package/esm2022/lib/features/projectable-forms/service/service-form.service.mjs +37 -31
  19. package/esm2022/lib/features/projectable-forms/service/simple-service/simple-service.component.mjs +89 -2
  20. package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.mjs +12 -11
  21. package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.component.mjs +7 -6
  22. package/esm2022/lib/features/visualizer/network-visualizer/network-visualizer.component.mjs +441 -259
  23. package/esm2022/lib/features/visualizer/network-visualizer/network-visualizer.helper.mjs +180 -63
  24. package/esm2022/lib/features/visualizer/network-visualizer/network-visualizer.treenodeprocessor.mjs +307 -118
  25. package/esm2022/lib/pages/configurations/configurations-page.service.mjs +2 -1
  26. package/esm2022/lib/pages/identities/identities-page.component.mjs +4 -4
  27. package/esm2022/lib/pages/identities/identities-page.service.mjs +11 -1
  28. package/esm2022/lib/pages/service-policies/service-policies-page.component.mjs +3 -3
  29. package/esm2022/lib/services/ziti-controller-data.service.mjs +8 -4
  30. package/esm2022/lib/shared/list-page-component.class.mjs +6 -4
  31. package/esm2022/public-api.mjs +2 -1
  32. package/fesm2022/openziti-ziti-console-lib.mjs +1228 -565
  33. package/fesm2022/openziti-ziti-console-lib.mjs.map +1 -1
  34. package/lib/features/confirm/confirm.component.d.ts +2 -0
  35. package/lib/features/confirm/confirm.component.d.ts.map +1 -1
  36. package/lib/features/data-table/data-table-filter.service.d.ts +2 -0
  37. package/lib/features/data-table/data-table-filter.service.d.ts.map +1 -1
  38. package/lib/features/data-table/data-table.component.d.ts.map +1 -1
  39. package/lib/features/data-table/table-filter-bar/filter-bar.component.d.ts.map +1 -1
  40. package/lib/features/extendable/extensions-noop.service.d.ts +2 -0
  41. package/lib/features/extendable/extensions-noop.service.d.ts.map +1 -1
  42. package/lib/features/preview-list/preview-list.component.d.ts +10 -5
  43. package/lib/features/preview-list/preview-list.component.d.ts.map +1 -1
  44. package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts +2 -1
  45. package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts.map +1 -1
  46. package/lib/features/projectable-forms/edge-router/edge-router-form.component.d.ts +2 -1
  47. package/lib/features/projectable-forms/edge-router/edge-router-form.component.d.ts.map +1 -1
  48. package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.d.ts +2 -1
  49. package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.d.ts.map +1 -1
  50. package/lib/features/projectable-forms/identity/identity-form.component.d.ts +2 -1
  51. package/lib/features/projectable-forms/identity/identity-form.component.d.ts.map +1 -1
  52. package/lib/features/projectable-forms/projectable-form.class.d.ts +6 -1
  53. package/lib/features/projectable-forms/projectable-form.class.d.ts.map +1 -1
  54. package/lib/features/projectable-forms/service/service-form.component.d.ts +2 -1
  55. package/lib/features/projectable-forms/service/service-form.component.d.ts.map +1 -1
  56. package/lib/features/projectable-forms/service/service-form.service.d.ts +6 -3
  57. package/lib/features/projectable-forms/service/service-form.service.d.ts.map +1 -1
  58. package/lib/features/projectable-forms/service/simple-service/simple-service.component.d.ts +2 -0
  59. package/lib/features/projectable-forms/service/simple-service/simple-service.component.d.ts.map +1 -1
  60. package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.d.ts +2 -1
  61. package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.d.ts.map +1 -1
  62. package/lib/features/projectable-forms/service-policy/service-policy-form.component.d.ts +2 -1
  63. package/lib/features/projectable-forms/service-policy/service-policy-form.component.d.ts.map +1 -1
  64. package/lib/features/visualizer/network-visualizer/network-visualizer.component.d.ts +36 -20
  65. package/lib/features/visualizer/network-visualizer/network-visualizer.component.d.ts.map +1 -1
  66. package/lib/features/visualizer/network-visualizer/network-visualizer.helper.d.ts +42 -1
  67. package/lib/features/visualizer/network-visualizer/network-visualizer.helper.d.ts.map +1 -1
  68. package/lib/features/visualizer/network-visualizer/network-visualizer.treenodeprocessor.d.ts +6 -2
  69. package/lib/features/visualizer/network-visualizer/network-visualizer.treenodeprocessor.d.ts.map +1 -1
  70. package/lib/pages/configurations/configurations-page.service.d.ts.map +1 -1
  71. package/lib/pages/identities/identities-page.component.d.ts +1 -1
  72. package/lib/pages/identities/identities-page.component.d.ts.map +1 -1
  73. package/lib/pages/identities/identities-page.service.d.ts.map +1 -1
  74. package/lib/services/ziti-controller-data.service.d.ts.map +1 -1
  75. package/lib/shared/list-page-component.class.d.ts +3 -1
  76. package/lib/shared/list-page-component.class.d.ts.map +1 -1
  77. package/package.json +1 -1
  78. package/public-api.d.ts +1 -0
  79. package/public-api.d.ts.map +1 -1
@@ -11,6 +11,7 @@ body {
11
11
  --black: #000;
12
12
  --shaded: #f6f7fb;
13
13
  --formBackground: #f6f7fb;
14
+ --visualizerBackground: #ffffff80;
14
15
  --background: #ffffff;
15
16
  --placeholder: #CDCDCD;
16
17
  --text: #000;
@@ -0,0 +1 @@
1
+ <svg fill="none" height="20" viewBox="0 0 21 20" width="21" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><filter id="a" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse" height="17.8588" width="16.7462" x="2.69146" y="2.01172"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feColorMatrix in="SourceAlpha" result="hardAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/><feOffset dy="1"/><feGaussianBlur stdDeviation=".4"/><feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0"/><feBlend in2="BackgroundImageFix" mode="normal" result="effect1_dropShadow_1_9987"/><feBlend in="SourceGraphic" in2="effect1_dropShadow_1_9987" mode="normal" result="shape"/></filter><g filter="url(#a)"><path d="m6.77012 14.2799c-.28-.36-.63-1.09-1.24-2-.35-.5-1.21-1.45-1.47-1.94-.18743-.2977-.24182-.66032-.15-.99997.15696-.64579.76956-1.07419 1.43-1 .5108.10261.98022.35297 1.35.72.25818.24317.49566.50742.71.79.16.19997.2.27997.38.50997s.3.46.21.12c-.07-.49997-.19-1.33997-.36-2.08997-.13-.57-.16-.66-.28-1.09s-.19-.79-.32-1.28c-.11884-.48143-.2123-.96877-.28-1.46-.12605-.6283-.03435-1.28079.26-1.85.34939-.32863.86193-.41537 1.3-.22.44059.32533.7691.77965.94 1.3.26206.64039.43696 1.31306.52 2 .16 1 .46998 2.46.47998 2.76 0-.37-.07-1.15 0-1.5.0694-.36488.323-.66769.67-.8.2978-.09138.6129-.11192.92-.06.3101.06481.5847.24314.77.5.2317.58339.3603 1.2026.38 1.83.0268-.54942.1208-1.09347.28-1.62.1671-.23545.4111-.40521.69-.48.3306-.06045.6694-.06045 1 0 .2711.09063.5083.26151.68.49.2118.53034.34 1.09034.38 1.66 0 .14.07-.39.29-.74.1143-.3394.4011-.59203.7521-.66273.3511-.07069.7133.05129.95.32.2368.26871.3122.64333.1979.98273v1.06 1.19997c-.0364.5852-.1166 1.1668-.24 1.74-.174.5071-.4162.9882-.72 1.43-.4855.54-.8867 1.1502-1.19 1.81-.0752.3278-.1088.6638-.1 1-.001.3107.0394.62.12.92-.4088.0433-.8211.0433-1.23 0-.39-.06-.87-.84-1-1.08-.0643-.1288-.196-.2103-.34-.2103s-.2757.0815-.34.2103c-.22.38-.71 1.07-1.05 1.11-.67.08-2.05 0-3.13998 0 0 0 .18-1-.23-1.36s-.83-.78-1.14-1.06z" fill="#fff"/><path d="m6.77012 14.2799c-.28-.36-.63-1.09-1.24-2-.35-.5-1.21-1.45-1.47-1.94-.18743-.2977-.24182-.66032-.15-.99997.15696-.64579.76956-1.07419 1.43-1 .5108.10261.98022.35297 1.35.72.25818.24317.49566.50742.71.79.16.19997.2.27997.38.50997s.3.46.21.12c-.07-.49997-.19-1.33997-.36-2.08997-.13-.57-.16-.66-.28-1.09s-.19-.79-.32-1.28c-.11884-.48143-.2123-.96877-.28-1.46-.12605-.6283-.03435-1.28079.26-1.85.34939-.32863.86193-.41537 1.3-.22.44059.32533.7691.77965.94 1.3.26206.64039.43696 1.31306.52 2 .16 1 .46998 2.46.47998 2.76 0-.37-.07-1.15 0-1.5.0694-.36488.323-.66769.67-.8.2978-.09138.6129-.11192.92-.06.3101.06481.5847.24314.77.5.2317.58339.3603 1.2026.38 1.83.0268-.54942.1208-1.09347.28-1.62.1671-.23545.4111-.40521.69-.48.3306-.06045.6694-.06045 1 0 .2711.09063.5083.26151.68.49.2118.53034.34 1.09034.38 1.66 0 .14.07-.39.29-.74.1143-.3394.4011-.59203.7521-.66273.3511-.07069.7133.05129.95.32.2368.26871.3122.64332.1979.98273v1.06 1.19997c-.0364.5852-.1166 1.1668-.24 1.74-.174.5071-.4162.9882-.72 1.43-.4855.54-.8867 1.1502-1.19 1.81-.0752.3278-.1088.6638-.1 1-.001.3107.0394.62.12.92-.4088.0432-.8211.0432-1.23 0-.39-.06-.87-.84-1-1.08-.0643-.1288-.196-.2103-.34-.2103s-.2757.0815-.34.2103c-.22.38-.71 1.07-1.05 1.11-.67.08-2.05 0-3.13998 0 0 0 .18-1-.23-1.36s-.83-.78-1.14-1.06z" style="fill-rule:evenodd;clip-rule:evenodd;stroke:#222124;stroke-width:.75;stroke-linecap:round;stroke-linejoin:round"/><g fill="#222124"><path d="m15.25 14.8259v-3.4518c0-.2066-.1679-.3741-.375-.3741s-.375.1675-.375.3741v3.4518c0 .2066.1679.3741.375.3741s.375-.1675.375-.3741z"/><path d="m13.27 14.8246-.02-3.4535c-.0012-.2062-.1701-.3723-.3772-.3711s-.374.1693-.3728.3754l.02 3.4535c.0012.2061.1701.3723.3772.3711s.374-.1693.3728-.3754z"/><path d="m10.5 11.379.02 3.4464c.0012.2081.1701.3758.3772.3746s.374-.1709.3728-.379l-.02-3.4464c-.0012-.2081-.1701-.3758-.3772-.3746s-.374.1709-.3728.379z"/></g></g></svg>
@@ -31,8 +31,10 @@ class ConfirmComponent {
31
31
  confirmLabel: '',
32
32
  cancelLabel: '',
33
33
  bulletList: [],
34
+ submessage: '',
34
35
  showCancelButton: false,
35
- showCancelLink: false
36
+ showCancelLink: false,
37
+ imageUrl: '../../assets/svgs/Confirm_Trash.svg'
36
38
  };
37
39
  this.dataObj = data;
38
40
  if (isNil(this.dataObj?.cancelLabel) || isEmpty(this.dataObj?.cancelLabel)) {
@@ -46,14 +48,14 @@ class ConfirmComponent {
46
48
  this.dialogRef.close(false);
47
49
  }
48
50
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ConfirmComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
49
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ConfirmComponent, selector: "lib-confirm", ngImport: i0, template: "<div class=\"confirm-modal-container\">\n <div class=\"close icon-close\" (click)=\"cancel()\"></div>\n <div class=\"confirm-model-body\">\n <div class=\"confirm-modal-content\">\n <div class=\"confirm-title-container\">\n <span class=\"confirm-title\">{{dataObj.title}}</span>\n <span class=\"confirm-subtitle\">{{dataObj.subtitle}}</span>\n </div>\n <div class=\"confirm-modal-main\">\n <div class=\"confirm-modal-icon\"></div>\n <div>\n <div class=\"confirm-message-content\">\n <span [innerHTML]=\"dataObj.message\"></span>\n </div>\n <div class=\"confirm-message-bullet-list\">\n <ul>\n <li *ngFor=\"let item of dataObj.bulletList\" class=\"confirm-item-name\">{{item}}</li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"confirm-buttons-container\">\n <div class=\"linkButton cancel\" (click)=\"cancel()\" *ngIf=\"dataObj.showCancelLink\">{{dataObj.cancelLabel}}</div>\n <button class=\"button save cancel\" (click)=\"cancel()\" *ngIf=\"dataObj.showCancelButton\">{{dataObj.cancelLabel}}</button>\n <button class=\"button save confirm\" (click)=\"confirm()\">{{dataObj.confirmLabel}}</button>\n </div>\n</div>\n", styles: [".confirm-modal-container{display:flex;flex-direction:column;background-color:var(--background);border-radius:25px}.confirm-modal-container .confirm-model-body{display:flex;flex-direction:row;align-items:center}.confirm-modal-container .confirm-model-body .confirm-modal-content{display:flex;flex-direction:column}.confirm-modal-container .confirm-model-body .confirm-modal-main{display:flex;flex-direction:row;align-items:center}.confirm-modal-container .confirm-model-body .confirm-modal-icon{width:120px;height:120px;background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 22.1.0%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3C!DOCTYPE svg PUBLIC %22-%2F%2FW3C%2F%2FDTD SVG 1.1%2F%2FEN%22 %22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 72 72%3B' version%3D'1.1' viewBox%3D'0 0 72 72' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23D9DFE3%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23648293%3B stroke-width%3A 1.5%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cpolygon class%3D'st0' points%3D'59.2%2C19.7 59.2%2C13.7 50.4%2C8.7 46.9%2C10.7 35.7%2C2.1 24.5%2C10.7 21.1%2C8.7 12.3%2C13.7 12.3%2C19.7 9.3%2C19.7%0915.2%2C69.5 56.2%2C69.5 62.1%2C19.7 '%2F%3E %3Cpolygon class%3D'st1' points%3D'50.4%2C8.7 46.9%2C10.7 42.6%2C13.1 35.7%2C8.1 28.9%2C13.2 24.5%2C10.7 21.1%2C8.7 12.3%2C13.7 12.3%2C19.7 59.2%2C19.7%0959.2%2C13.7 '%2F%3E %3Cpolygon class%3D'st2' points%3D'9.3%2C19.7 15.2%2C69.5 56.2%2C69.5 62.1%2C19.7 '%2F%3E %3Cg%3E%09%3Cline class%3D'st2' x1%3D'60.1' x2%3D'26.9' y1%3D'36.3' y2%3D'69.5'%2F%3E %3Cline class%3D'st2' x1%3D'54' x2%3D'14' y1%3D'19.7' y2%3D'59.7'%2F%3E %3Cline class%3D'st2' x1%3D'11.6' x2%3D'31.3' y1%3D'39.3' y2%3D'19.7'%2F%3E %3Cline class%3D'st2' x1%3D'11.3' x2%3D'44.5' y1%3D'36.3' y2%3D'69.5'%2F%3E %3Cline class%3D'st2' x1%3D'17.4' x2%3D'57.4' y1%3D'19.7' y2%3D'59.6'%2F%3E %3Cline class%3D'st2' x1%3D'59.8' x2%3D'40.1' y1%3D'39.3' y2%3D'19.7'%2F%3E%3C%2Fg%3E %3Cline class%3D'st2' x1%3D'6.4' x2%3D'65' y1%3D'19.7' y2%3D'19.7'%2F%3E %3Cpolyline class%3D'st2' points%3D'12.3%2C19.7 12.3%2C13.7 21.1%2C8.7 27.6%2C12.4 '%2F%3E %3Cpolyline class%3D'st2' points%3D'59.2%2C19.7 59.2%2C13.7 50.4%2C8.7 43.9%2C12.4 '%2F%3E %3Cpolyline class%3D'st2' points%3D'24.5%2C10.7 35.7%2C2.1 46.9%2C10.7 '%2F%3E%3C%2Fsvg%3E\");background-size:contain;z-index:20;box-sizing:var(--shadow);margin-left:15px}.confirm-modal-container .confirm-title-container{width:100%;display:flex;flex-direction:column}.confirm-modal-container .confirm-title-container .confirm-title{color:var(--primaryColor);font-size:30px;position:relative;padding-left:0;width:400px;background:none;text-transform:none;height:auto;font-family:Russo One;margin-top:30px;margin-left:150px;filter:brightness(50%)}.confirm-modal-container .confirm-message-content{color:var(--text);font-size:14px;position:relative;margin:5px 15px 15px;padding:0;font-weight:600;font-family:Open Sans;overflow:auto;display:flex;align-items:center;justify-content:center;color:var(--tableText);max-width:400px}.confirm-modal-container .confirm-message-bullet-list{margin-left:20px;margin-bottom:15px;margin-right:20px;max-height:200px;overflow:auto}.confirm-modal-container .confirm-message-bullet-list .confirm-item-name{color:var(--primaryColor);text-decoration:none;transition:.5s ease}.confirm-modal-container .confirm-message-bullet-list .confirm-item-name::marker{color:var(--tableText)}.confirm-modal-container .confirm-message-bullet-list ul{margin:0}.confirm-modal-container .confirm-buttons-container{display:flex;justify-content:flex-end;flex-direction:row;width:100%;padding-right:20px;padding-bottom:20px;align-items:flex-end}.confirm-modal-container .confirm-buttons-container .linkButton{position:absolute;left:25px;color:var(--subText);font-weight:600}.confirm-modal-container button{width:100px;height:40px;color:var(--white);display:flex;align-items:center;justify-content:center}.confirm-modal-container button.confirm{background-color:var(--secondary)}.confirm-modal-container button.cancel{background-color:var(--primary)}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
51
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ConfirmComponent, selector: "lib-confirm", ngImport: i0, template: "<div class=\"confirm-modal-container\">\n <div class=\"close icon-close\" (click)=\"cancel()\"></div>\n <div class=\"confirm-model-body\">\n <div class=\"confirm-modal-content\">\n <div class=\"confirm-title-container\">\n <span class=\"confirm-title\">{{dataObj.title}}</span>\n <span class=\"confirm-subtitle\">{{dataObj.subtitle}}</span>\n </div>\n <div class=\"confirm-modal-main\">\n <div class=\"confirm-modal-icon\" style=\"background-image: url({{dataObj.imageUrl}})\"></div>\n <div>\n <div class=\"confirm-message-content\">\n <span [innerHTML]=\"dataObj.message\"></span>\n </div>\n <div class=\"confirm-message-bullet-list\">\n <ul>\n <li *ngFor=\"let item of dataObj.bulletList\" class=\"confirm-item-name\">{{item}}</li>\n </ul>\n </div>\n <div *ngIf=\"dataObj.submessage && dataObj.submessage.length > 0\" class=\"confirm-message-sub-content\">\n <span [innerHTML]=\"dataObj.submessage\"></span>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"confirm-buttons-container\">\n <div class=\"linkButton cancel\" (click)=\"cancel()\" *ngIf=\"dataObj.showCancelLink\">{{dataObj.cancelLabel}}</div>\n <button class=\"button save cancel\" (click)=\"cancel()\" *ngIf=\"dataObj.showCancelButton\">{{dataObj.cancelLabel}}</button>\n <button class=\"button save confirm\" (click)=\"confirm()\">{{dataObj.confirmLabel}}</button>\n </div>\n</div>\n", styles: [".confirm-modal-container{display:flex;flex-direction:column;background-color:var(--background);border-radius:25px}.confirm-modal-container .confirm-model-body{display:flex;flex-direction:row;align-items:center}.confirm-modal-container .confirm-model-body .confirm-modal-content{display:flex;flex-direction:column}.confirm-modal-container .confirm-model-body .confirm-modal-main{display:flex;flex-direction:row;align-items:center}.confirm-modal-container .confirm-model-body .confirm-modal-icon{width:120px;height:120px;background-size:contain;z-index:20;box-sizing:var(--shadow);margin-left:15px}.confirm-modal-container .confirm-title-container{width:100%;display:flex;flex-direction:column}.confirm-modal-container .confirm-title-container .confirm-title{color:var(--primaryColor);font-size:30px;position:relative;padding-left:0;width:400px;background:none;text-transform:none;height:auto;font-family:Russo One;margin-top:30px;margin-left:150px;filter:brightness(50%)}.confirm-modal-container .confirm-message-sub-content,.confirm-modal-container .confirm-message-content{color:var(--text);font-size:14px;position:relative;margin:5px 15px 15px;padding:0;font-weight:600;font-family:Open Sans;overflow:auto;display:flex;align-items:center;justify-content:flex-start;color:var(--tableText);max-width:400px}.confirm-modal-container .confirm-message-bullet-list{margin-left:20px;margin-bottom:15px;margin-right:20px;max-height:200px;overflow:auto}.confirm-modal-container .confirm-message-bullet-list .confirm-item-name{color:var(--primaryColor);text-decoration:none;transition:.5s ease}.confirm-modal-container .confirm-message-bullet-list .confirm-item-name::marker{color:var(--tableText)}.confirm-modal-container .confirm-message-bullet-list ul{margin:0}.confirm-modal-container .confirm-buttons-container{display:flex;justify-content:flex-end;flex-direction:row;width:100%;padding-right:20px;padding-bottom:20px;align-items:flex-end}.confirm-modal-container .confirm-buttons-container .linkButton{position:absolute;left:25px;color:var(--subText);font-weight:600}.confirm-modal-container button{width:100px;height:40px;color:var(--white);display:flex;align-items:center;justify-content:center}.confirm-modal-container button.confirm{background-color:var(--secondary)}.confirm-modal-container button.cancel{background-color:var(--primary)}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
50
52
  }
51
53
  export { ConfirmComponent };
52
54
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ConfirmComponent, decorators: [{
53
55
  type: Component,
54
- args: [{ selector: 'lib-confirm', template: "<div class=\"confirm-modal-container\">\n <div class=\"close icon-close\" (click)=\"cancel()\"></div>\n <div class=\"confirm-model-body\">\n <div class=\"confirm-modal-content\">\n <div class=\"confirm-title-container\">\n <span class=\"confirm-title\">{{dataObj.title}}</span>\n <span class=\"confirm-subtitle\">{{dataObj.subtitle}}</span>\n </div>\n <div class=\"confirm-modal-main\">\n <div class=\"confirm-modal-icon\"></div>\n <div>\n <div class=\"confirm-message-content\">\n <span [innerHTML]=\"dataObj.message\"></span>\n </div>\n <div class=\"confirm-message-bullet-list\">\n <ul>\n <li *ngFor=\"let item of dataObj.bulletList\" class=\"confirm-item-name\">{{item}}</li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"confirm-buttons-container\">\n <div class=\"linkButton cancel\" (click)=\"cancel()\" *ngIf=\"dataObj.showCancelLink\">{{dataObj.cancelLabel}}</div>\n <button class=\"button save cancel\" (click)=\"cancel()\" *ngIf=\"dataObj.showCancelButton\">{{dataObj.cancelLabel}}</button>\n <button class=\"button save confirm\" (click)=\"confirm()\">{{dataObj.confirmLabel}}</button>\n </div>\n</div>\n", styles: [".confirm-modal-container{display:flex;flex-direction:column;background-color:var(--background);border-radius:25px}.confirm-modal-container .confirm-model-body{display:flex;flex-direction:row;align-items:center}.confirm-modal-container .confirm-model-body .confirm-modal-content{display:flex;flex-direction:column}.confirm-modal-container .confirm-model-body .confirm-modal-main{display:flex;flex-direction:row;align-items:center}.confirm-modal-container .confirm-model-body .confirm-modal-icon{width:120px;height:120px;background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 22.1.0%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3C!DOCTYPE svg PUBLIC %22-%2F%2FW3C%2F%2FDTD SVG 1.1%2F%2FEN%22 %22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg id%3D'Layer_1' style%3D'enable-background%3Anew 0 0 72 72%3B' version%3D'1.1' viewBox%3D'0 0 72 72' x%3D'0px' xml%3Aspace%3D'preserve' xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' y%3D'0px'%3E%3Cstyle type%3D'text%2Fcss'%3E%09.st0 %7B fill%3A %23FFFFFF%3B %7D .st1 %7B fill%3A %23D9DFE3%3B %7D .st2 %7B fill%3A none%3B stroke%3A %23648293%3B stroke-width%3A 1.5%3B stroke-linecap%3A round%3B stroke-linejoin%3A round%3B stroke-miterlimit%3A 10%3B %7D%3C%2Fstyle%3E %3Cpolygon class%3D'st0' points%3D'59.2%2C19.7 59.2%2C13.7 50.4%2C8.7 46.9%2C10.7 35.7%2C2.1 24.5%2C10.7 21.1%2C8.7 12.3%2C13.7 12.3%2C19.7 9.3%2C19.7%0915.2%2C69.5 56.2%2C69.5 62.1%2C19.7 '%2F%3E %3Cpolygon class%3D'st1' points%3D'50.4%2C8.7 46.9%2C10.7 42.6%2C13.1 35.7%2C8.1 28.9%2C13.2 24.5%2C10.7 21.1%2C8.7 12.3%2C13.7 12.3%2C19.7 59.2%2C19.7%0959.2%2C13.7 '%2F%3E %3Cpolygon class%3D'st2' points%3D'9.3%2C19.7 15.2%2C69.5 56.2%2C69.5 62.1%2C19.7 '%2F%3E %3Cg%3E%09%3Cline class%3D'st2' x1%3D'60.1' x2%3D'26.9' y1%3D'36.3' y2%3D'69.5'%2F%3E %3Cline class%3D'st2' x1%3D'54' x2%3D'14' y1%3D'19.7' y2%3D'59.7'%2F%3E %3Cline class%3D'st2' x1%3D'11.6' x2%3D'31.3' y1%3D'39.3' y2%3D'19.7'%2F%3E %3Cline class%3D'st2' x1%3D'11.3' x2%3D'44.5' y1%3D'36.3' y2%3D'69.5'%2F%3E %3Cline class%3D'st2' x1%3D'17.4' x2%3D'57.4' y1%3D'19.7' y2%3D'59.6'%2F%3E %3Cline class%3D'st2' x1%3D'59.8' x2%3D'40.1' y1%3D'39.3' y2%3D'19.7'%2F%3E%3C%2Fg%3E %3Cline class%3D'st2' x1%3D'6.4' x2%3D'65' y1%3D'19.7' y2%3D'19.7'%2F%3E %3Cpolyline class%3D'st2' points%3D'12.3%2C19.7 12.3%2C13.7 21.1%2C8.7 27.6%2C12.4 '%2F%3E %3Cpolyline class%3D'st2' points%3D'59.2%2C19.7 59.2%2C13.7 50.4%2C8.7 43.9%2C12.4 '%2F%3E %3Cpolyline class%3D'st2' points%3D'24.5%2C10.7 35.7%2C2.1 46.9%2C10.7 '%2F%3E%3C%2Fsvg%3E\");background-size:contain;z-index:20;box-sizing:var(--shadow);margin-left:15px}.confirm-modal-container .confirm-title-container{width:100%;display:flex;flex-direction:column}.confirm-modal-container .confirm-title-container .confirm-title{color:var(--primaryColor);font-size:30px;position:relative;padding-left:0;width:400px;background:none;text-transform:none;height:auto;font-family:Russo One;margin-top:30px;margin-left:150px;filter:brightness(50%)}.confirm-modal-container .confirm-message-content{color:var(--text);font-size:14px;position:relative;margin:5px 15px 15px;padding:0;font-weight:600;font-family:Open Sans;overflow:auto;display:flex;align-items:center;justify-content:center;color:var(--tableText);max-width:400px}.confirm-modal-container .confirm-message-bullet-list{margin-left:20px;margin-bottom:15px;margin-right:20px;max-height:200px;overflow:auto}.confirm-modal-container .confirm-message-bullet-list .confirm-item-name{color:var(--primaryColor);text-decoration:none;transition:.5s ease}.confirm-modal-container .confirm-message-bullet-list .confirm-item-name::marker{color:var(--tableText)}.confirm-modal-container .confirm-message-bullet-list ul{margin:0}.confirm-modal-container .confirm-buttons-container{display:flex;justify-content:flex-end;flex-direction:row;width:100%;padding-right:20px;padding-bottom:20px;align-items:flex-end}.confirm-modal-container .confirm-buttons-container .linkButton{position:absolute;left:25px;color:var(--subText);font-weight:600}.confirm-modal-container button{width:100px;height:40px;color:var(--white);display:flex;align-items:center;justify-content:center}.confirm-modal-container button.confirm{background-color:var(--secondary)}.confirm-modal-container button.cancel{background-color:var(--primary)}\n"] }]
56
+ args: [{ selector: 'lib-confirm', template: "<div class=\"confirm-modal-container\">\n <div class=\"close icon-close\" (click)=\"cancel()\"></div>\n <div class=\"confirm-model-body\">\n <div class=\"confirm-modal-content\">\n <div class=\"confirm-title-container\">\n <span class=\"confirm-title\">{{dataObj.title}}</span>\n <span class=\"confirm-subtitle\">{{dataObj.subtitle}}</span>\n </div>\n <div class=\"confirm-modal-main\">\n <div class=\"confirm-modal-icon\" style=\"background-image: url({{dataObj.imageUrl}})\"></div>\n <div>\n <div class=\"confirm-message-content\">\n <span [innerHTML]=\"dataObj.message\"></span>\n </div>\n <div class=\"confirm-message-bullet-list\">\n <ul>\n <li *ngFor=\"let item of dataObj.bulletList\" class=\"confirm-item-name\">{{item}}</li>\n </ul>\n </div>\n <div *ngIf=\"dataObj.submessage && dataObj.submessage.length > 0\" class=\"confirm-message-sub-content\">\n <span [innerHTML]=\"dataObj.submessage\"></span>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"confirm-buttons-container\">\n <div class=\"linkButton cancel\" (click)=\"cancel()\" *ngIf=\"dataObj.showCancelLink\">{{dataObj.cancelLabel}}</div>\n <button class=\"button save cancel\" (click)=\"cancel()\" *ngIf=\"dataObj.showCancelButton\">{{dataObj.cancelLabel}}</button>\n <button class=\"button save confirm\" (click)=\"confirm()\">{{dataObj.confirmLabel}}</button>\n </div>\n</div>\n", styles: [".confirm-modal-container{display:flex;flex-direction:column;background-color:var(--background);border-radius:25px}.confirm-modal-container .confirm-model-body{display:flex;flex-direction:row;align-items:center}.confirm-modal-container .confirm-model-body .confirm-modal-content{display:flex;flex-direction:column}.confirm-modal-container .confirm-model-body .confirm-modal-main{display:flex;flex-direction:row;align-items:center}.confirm-modal-container .confirm-model-body .confirm-modal-icon{width:120px;height:120px;background-size:contain;z-index:20;box-sizing:var(--shadow);margin-left:15px}.confirm-modal-container .confirm-title-container{width:100%;display:flex;flex-direction:column}.confirm-modal-container .confirm-title-container .confirm-title{color:var(--primaryColor);font-size:30px;position:relative;padding-left:0;width:400px;background:none;text-transform:none;height:auto;font-family:Russo One;margin-top:30px;margin-left:150px;filter:brightness(50%)}.confirm-modal-container .confirm-message-sub-content,.confirm-modal-container .confirm-message-content{color:var(--text);font-size:14px;position:relative;margin:5px 15px 15px;padding:0;font-weight:600;font-family:Open Sans;overflow:auto;display:flex;align-items:center;justify-content:flex-start;color:var(--tableText);max-width:400px}.confirm-modal-container .confirm-message-bullet-list{margin-left:20px;margin-bottom:15px;margin-right:20px;max-height:200px;overflow:auto}.confirm-modal-container .confirm-message-bullet-list .confirm-item-name{color:var(--primaryColor);text-decoration:none;transition:.5s ease}.confirm-modal-container .confirm-message-bullet-list .confirm-item-name::marker{color:var(--tableText)}.confirm-modal-container .confirm-message-bullet-list ul{margin:0}.confirm-modal-container .confirm-buttons-container{display:flex;justify-content:flex-end;flex-direction:row;width:100%;padding-right:20px;padding-bottom:20px;align-items:flex-end}.confirm-modal-container .confirm-buttons-container .linkButton{position:absolute;left:25px;color:var(--subText);font-weight:600}.confirm-modal-container button{width:100px;height:40px;color:var(--white);display:flex;align-items:center;justify-content:center}.confirm-modal-container button.confirm{background-color:var(--secondary)}.confirm-modal-container button.cancel{background-color:var(--primary)}\n"] }]
55
57
  }], ctorParameters: function () { return [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
56
58
  type: Inject,
57
59
  args: [MAT_DIALOG_DATA]
58
60
  }] }]; } });
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96aXRpLWNvbnNvbGUtbGliL3NyYy9saWIvZmVhdHVyZXMvY29uZmlybS9jb25maXJtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9mZWF0dXJlcy9jb25maXJtL2NvbmZpcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0VBY0U7QUFFRixPQUFPLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUVoRCxPQUFPLEVBQUMsZUFBZSxFQUFlLE1BQU0sMEJBQTBCLENBQUM7QUFFdkUsT0FBTyxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUMsTUFBTSxRQUFRLENBQUM7Ozs7QUFFdEMsTUFLYSxnQkFBZ0I7SUFjM0IsWUFBb0IsU0FBeUMsRUFBa0MsSUFBUztRQUFwRixjQUFTLEdBQVQsU0FBUyxDQUFnQztRQUFrQyxTQUFJLEdBQUosSUFBSSxDQUFLO1FBWnhHLFlBQU8sR0FBRztZQUNSLFFBQVEsRUFBRSxFQUFFO1lBQ1osS0FBSyxFQUFFLEVBQUU7WUFDVCxRQUFRLEVBQUUsRUFBRTtZQUNaLE9BQU8sRUFBRSxFQUFFO1lBQ1gsWUFBWSxFQUFFLEVBQUU7WUFDaEIsV0FBVyxFQUFFLEVBQUU7WUFDZixVQUFVLEVBQUUsRUFBRTtZQUNkLGdCQUFnQixFQUFFLEtBQUs7WUFDdkIsY0FBYyxFQUFFLEtBQUs7U0FDdEIsQ0FBQTtRQUdDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLEVBQUU7WUFDMUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsNkJBQTZCLENBQUM7U0FDMUQ7SUFDSCxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQzsrR0EzQlUsZ0JBQWdCLDhDQWM0QyxlQUFlO21HQWQzRSxnQkFBZ0IsbURDM0I3Qix5OENBNkJBOztTREZhLGdCQUFnQjs0RkFBaEIsZ0JBQWdCO2tCQUw1QixTQUFTOytCQUNFLGFBQWE7OzBCQWtCeUMsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAgICBDb3B5cmlnaHQgTmV0Rm91bmRyeSBJbmMuXG5cbiAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuaW1wb3J0IHtDb21wb25lbnQsIEluamVjdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0RpYWxvZ1JlZn0gZnJvbSBcIkBhbmd1bGFyL2Nkay9kaWFsb2dcIjtcbmltcG9ydCB7TUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dSZWZ9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2dcIjtcblxuaW1wb3J0IHtpc0VtcHR5LCBpc05pbH0gZnJvbSBcImxvZGFzaFwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItY29uZmlybScsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb25maXJtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY29uZmlybS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIENvbmZpcm1Db21wb25lbnQge1xuXG4gIGRhdGFPYmogPSB7XG4gICAgYXBwZW5kSWQ6ICcnLFxuICAgIHRpdGxlOiAnJyxcbiAgICBzdWJ0aXRsZTogJycsXG4gICAgbWVzc2FnZTogJycsXG4gICAgY29uZmlybUxhYmVsOiAnJyxcbiAgICBjYW5jZWxMYWJlbDogJycsXG4gICAgYnVsbGV0TGlzdDogW10sXG4gICAgc2hvd0NhbmNlbEJ1dHRvbjogZmFsc2UsXG4gICAgc2hvd0NhbmNlbExpbms6IGZhbHNlXG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPENvbmZpcm1Db21wb25lbnQ+LCBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IGFueSkge1xuICAgIHRoaXMuZGF0YU9iaiA9IGRhdGE7XG4gICAgaWYgKGlzTmlsKHRoaXMuZGF0YU9iaj8uY2FuY2VsTGFiZWwpIHx8IGlzRW1wdHkodGhpcy5kYXRhT2JqPy5jYW5jZWxMYWJlbCkpIHtcbiAgICAgIHRoaXMuZGF0YU9iai5jYW5jZWxMYWJlbCA9ICdPb3BzLCBubyBnZXQgbWUgb3V0IG9mIGhlcmUnO1xuICAgIH1cbiAgfVxuXG4gIGNvbmZpcm0oKSB7XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UodHJ1ZSk7XG4gIH1cblxuICBjYW5jZWwoKSB7XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoZmFsc2UpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY29uZmlybS1tb2RhbC1jb250YWluZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY2xvc2UgaWNvbi1jbG9zZVwiIChjbGljayk9XCJjYW5jZWwoKVwiPjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjb25maXJtLW1vZGVsLWJvZHlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpcm0tbW9kYWwtY29udGVudFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpcm0tdGl0bGUtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb25maXJtLXRpdGxlXCI+e3tkYXRhT2JqLnRpdGxlfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb25maXJtLXN1YnRpdGxlXCI+e3tkYXRhT2JqLnN1YnRpdGxlfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maXJtLW1vZGFsLW1haW5cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlybS1tb2RhbC1pY29uXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpcm0tbWVzc2FnZS1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cImRhdGFPYmoubWVzc2FnZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maXJtLW1lc3NhZ2UtYnVsbGV0LWxpc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGF0YU9iai5idWxsZXRMaXN0XCIgY2xhc3M9XCJjb25maXJtLWl0ZW0tbmFtZVwiPnt7aXRlbX19PC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjb25maXJtLWJ1dHRvbnMtY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsaW5rQnV0dG9uIGNhbmNlbFwiIChjbGljayk9XCJjYW5jZWwoKVwiICpuZ0lmPVwiZGF0YU9iai5zaG93Q2FuY2VsTGlua1wiPnt7ZGF0YU9iai5jYW5jZWxMYWJlbH19PC9kaXY+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gc2F2ZSBjYW5jZWxcIiAoY2xpY2spPVwiY2FuY2VsKClcIiAqbmdJZj1cImRhdGFPYmouc2hvd0NhbmNlbEJ1dHRvblwiPnt7ZGF0YU9iai5jYW5jZWxMYWJlbH19PC9idXR0b24+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gc2F2ZSBjb25maXJtXCIgKGNsaWNrKT1cImNvbmZpcm0oKVwiPnt7ZGF0YU9iai5jb25maXJtTGFiZWx9fTwvYnV0dG9uPlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96aXRpLWNvbnNvbGUtbGliL3NyYy9saWIvZmVhdHVyZXMvY29uZmlybS9jb25maXJtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9mZWF0dXJlcy9jb25maXJtL2NvbmZpcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0VBY0U7QUFFRixPQUFPLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUVoRCxPQUFPLEVBQUMsZUFBZSxFQUFlLE1BQU0sMEJBQTBCLENBQUM7QUFFdkUsT0FBTyxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUMsTUFBTSxRQUFRLENBQUM7Ozs7QUFFdEMsTUFLYSxnQkFBZ0I7SUFnQjNCLFlBQW9CLFNBQXlDLEVBQWtDLElBQVM7UUFBcEYsY0FBUyxHQUFULFNBQVMsQ0FBZ0M7UUFBa0MsU0FBSSxHQUFKLElBQUksQ0FBSztRQWR4RyxZQUFPLEdBQUc7WUFDUixRQUFRLEVBQUUsRUFBRTtZQUNaLEtBQUssRUFBRSxFQUFFO1lBQ1QsUUFBUSxFQUFFLEVBQUU7WUFDWixPQUFPLEVBQUUsRUFBRTtZQUNYLFlBQVksRUFBRSxFQUFFO1lBQ2hCLFdBQVcsRUFBRSxFQUFFO1lBQ2YsVUFBVSxFQUFFLEVBQUU7WUFDZCxVQUFVLEVBQUUsRUFBRTtZQUNkLGdCQUFnQixFQUFFLEtBQUs7WUFDdkIsY0FBYyxFQUFFLEtBQUs7WUFDckIsUUFBUSxFQUFFLHFDQUFxQztTQUNoRCxDQUFBO1FBR0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsRUFBRTtZQUMxRSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyw2QkFBNkIsQ0FBQztTQUMxRDtJQUNILENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDOytHQTdCVSxnQkFBZ0IsOENBZ0I0QyxlQUFlO21HQWhCM0UsZ0JBQWdCLG1EQzNCN0Isb3VEQWdDQTs7U0RMYSxnQkFBZ0I7NEZBQWhCLGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDRSxhQUFhOzswQkFvQnlDLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gICAgQ29weXJpZ2h0IE5ldEZvdW5kcnkgSW5jLlxuXG4gICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbmltcG9ydCB7Q29tcG9uZW50LCBJbmplY3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtEaWFsb2dSZWZ9IGZyb20gXCJAYW5ndWxhci9jZGsvZGlhbG9nXCI7XG5pbXBvcnQge01BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nUmVmfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XG5cbmltcG9ydCB7aXNFbXB0eSwgaXNOaWx9IGZyb20gXCJsb2Rhc2hcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWNvbmZpcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vY29uZmlybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbmZpcm0uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBDb25maXJtQ29tcG9uZW50IHtcblxuICBkYXRhT2JqID0ge1xuICAgIGFwcGVuZElkOiAnJyxcbiAgICB0aXRsZTogJycsXG4gICAgc3VidGl0bGU6ICcnLFxuICAgIG1lc3NhZ2U6ICcnLFxuICAgIGNvbmZpcm1MYWJlbDogJycsXG4gICAgY2FuY2VsTGFiZWw6ICcnLFxuICAgIGJ1bGxldExpc3Q6IFtdLFxuICAgIHN1Ym1lc3NhZ2U6ICcnLFxuICAgIHNob3dDYW5jZWxCdXR0b246IGZhbHNlLFxuICAgIHNob3dDYW5jZWxMaW5rOiBmYWxzZSxcbiAgICBpbWFnZVVybDogJy4uLy4uL2Fzc2V0cy9zdmdzL0NvbmZpcm1fVHJhc2guc3ZnJ1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxDb25maXJtQ29tcG9uZW50PiwgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBhbnkpIHtcbiAgICB0aGlzLmRhdGFPYmogPSBkYXRhO1xuICAgIGlmIChpc05pbCh0aGlzLmRhdGFPYmo/LmNhbmNlbExhYmVsKSB8fCBpc0VtcHR5KHRoaXMuZGF0YU9iaj8uY2FuY2VsTGFiZWwpKSB7XG4gICAgICB0aGlzLmRhdGFPYmouY2FuY2VsTGFiZWwgPSAnT29wcywgbm8gZ2V0IG1lIG91dCBvZiBoZXJlJztcbiAgICB9XG4gIH1cblxuICBjb25maXJtKCkge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHRydWUpO1xuICB9XG5cbiAgY2FuY2VsKCkge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKGZhbHNlKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNvbmZpcm0tbW9kYWwtY29udGFpbmVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImNsb3NlIGljb24tY2xvc2VcIiAoY2xpY2spPVwiY2FuY2VsKClcIj48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29uZmlybS1tb2RlbC1ib2R5XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb25maXJtLW1vZGFsLWNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maXJtLXRpdGxlLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29uZmlybS10aXRsZVwiPnt7ZGF0YU9iai50aXRsZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29uZmlybS1zdWJ0aXRsZVwiPnt7ZGF0YU9iai5zdWJ0aXRsZX19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlybS1tb2RhbC1tYWluXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpcm0tbW9kYWwtaWNvblwiIHN0eWxlPVwiYmFja2dyb3VuZC1pbWFnZTogdXJsKHt7ZGF0YU9iai5pbWFnZVVybH19KVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maXJtLW1lc3NhZ2UtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJkYXRhT2JqLm1lc3NhZ2VcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlybS1tZXNzYWdlLWJ1bGxldC1saXN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBpdGVtIG9mIGRhdGFPYmouYnVsbGV0TGlzdFwiIGNsYXNzPVwiY29uZmlybS1pdGVtLW5hbWVcIj57e2l0ZW19fTwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImRhdGFPYmouc3VibWVzc2FnZSAmJiBkYXRhT2JqLnN1Ym1lc3NhZ2UubGVuZ3RoID4gMFwiIGNsYXNzPVwiY29uZmlybS1tZXNzYWdlLXN1Yi1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cImRhdGFPYmouc3VibWVzc2FnZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNvbmZpcm0tYnV0dG9ucy1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImxpbmtCdXR0b24gY2FuY2VsXCIgKGNsaWNrKT1cImNhbmNlbCgpXCIgKm5nSWY9XCJkYXRhT2JqLnNob3dDYW5jZWxMaW5rXCI+e3tkYXRhT2JqLmNhbmNlbExhYmVsfX08L2Rpdj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbiBzYXZlIGNhbmNlbFwiIChjbGljayk9XCJjYW5jZWwoKVwiICpuZ0lmPVwiZGF0YU9iai5zaG93Q2FuY2VsQnV0dG9uXCI+e3tkYXRhT2JqLmNhbmNlbExhYmVsfX08L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbiBzYXZlIGNvbmZpcm1cIiAoY2xpY2spPVwiY29uZmlybSgpXCI+e3tkYXRhT2JqLmNvbmZpcm1MYWJlbH19PC9idXR0b24+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -10,7 +10,7 @@ class DataTableFilterService {
10
10
  this.pageChanged = new BehaviorSubject(this.currentPage);
11
11
  }
12
12
  updateFilter(filterObj) {
13
- if (isEmpty(filterObj.value) && isNaN(filterObj.value))
13
+ if (isEmpty(filterObj.value) && (isNaN(filterObj.value) || filterObj.value === ''))
14
14
  this.removeFilter(filterObj);
15
15
  else {
16
16
  let isFound = false;
@@ -63,4 +63,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
63
63
  providedIn: 'root'
64
64
  }]
65
65
  }], ctorParameters: function () { return []; } });
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS1maWx0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9mZWF0dXJlcy9kYXRhLXRhYmxlL2RhdGEtdGFibGUtZmlsdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3JDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxRQUFRLENBQUM7O0FBVS9CLE1BR2Esc0JBQXNCO0lBUy9CO1FBUEEsWUFBTyxHQUFnQixFQUFFLENBQUM7UUFDMUIsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFDaEIsbUJBQWMsR0FDUixJQUFJLGVBQWUsQ0FBYyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFcEQsZ0JBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBTSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFHekQsQ0FBQztJQUVELFlBQVksQ0FBQyxTQUFvQjtRQUM3QixJQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7WUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQy9FO1lBQ0QsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3BCLEtBQUssSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRTtnQkFDaEQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsUUFBUSxFQUFFO29CQUNuRCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQztvQkFDOUIsT0FBTyxHQUFHLElBQUksQ0FBQztvQkFDZixNQUFNO2lCQUNUO2FBQ0o7WUFDRCxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNWLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQ2hDO1NBQ0o7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELFlBQVksQ0FBQyxTQUFvQjtRQUM3QixLQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDaEQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsUUFBUSxFQUFFO2dCQUNuRCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzVCLE1BQU07YUFDVDtTQUNKO1FBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxlQUFlLENBQUMsR0FBVztRQUN2QixJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDZixLQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDaEQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsS0FBSyxHQUFHLEVBQUU7Z0JBQ3BDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztnQkFDaEMsTUFBTTthQUNUO1NBQ0o7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQsVUFBVSxDQUFDLElBQVM7UUFDaEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELFlBQVk7UUFDUixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0MsQ0FBQzsrR0ExRFEsc0JBQXNCO21IQUF0QixzQkFBc0IsY0FGbkIsTUFBTTs7U0FFVCxzQkFBc0I7NEZBQXRCLHNCQUFzQjtrQkFIbEMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3R9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQge2lzRW1wdHl9IGZyb20gXCJsb2Rhc2hcIjtcblxuZXhwb3J0IHR5cGUgRmlsdGVyT2JqID0ge1xuICAgIGZpbHRlck5hbWU6IHN0cmluZztcbiAgICBjb2x1bW5JZDogc3RyaW5nO1xuICAgIHZhbHVlOiBhbnk7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICB0eXBlPzogc3RyaW5nO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIERhdGFUYWJsZUZpbHRlclNlcnZpY2Uge1xuXG4gICAgZmlsdGVyczogRmlsdGVyT2JqW10gPSBbXTtcbiAgICBjdXJyZW50UGFnZSA9IDE7XG4gICAgZmlsdGVyc0NoYW5nZWRcbiAgICAgICAgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEZpbHRlck9ialtdPih0aGlzLmZpbHRlcnMpXG5cbiAgICBwYWdlQ2hhbmdlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih0aGlzLmN1cnJlbnRQYWdlKTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgIH1cblxuICAgIHVwZGF0ZUZpbHRlcihmaWx0ZXJPYmo6IEZpbHRlck9iaikge1xuICAgICAgICBpZihpc0VtcHR5KGZpbHRlck9iai52YWx1ZSkgJiYgaXNOYU4oZmlsdGVyT2JqLnZhbHVlKSkgdGhpcy5yZW1vdmVGaWx0ZXIoZmlsdGVyT2JqKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBsZXQgaXNGb3VuZCA9IGZhbHNlO1xuICAgICAgICAgICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgdGhpcy5maWx0ZXJzLmxlbmd0aDsgaWR4KyspIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5maWx0ZXJzW2lkeF0uY29sdW1uSWQgPT09IGZpbHRlck9iai5jb2x1bW5JZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcnNbaWR4XSA9IGZpbHRlck9iajtcbiAgICAgICAgICAgICAgICAgICAgaXNGb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXNGb3VuZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVycy5wdXNoKGZpbHRlck9iaik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWx0ZXJzQ2hhbmdlZC5uZXh0KHRoaXMuZmlsdGVycyk7XG4gICAgfVxuXG4gICAgcmVtb3ZlRmlsdGVyKGZpbHRlck9iajogRmlsdGVyT2JqKSB7XG4gICAgICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IHRoaXMuZmlsdGVycy5sZW5ndGg7IGlkeCsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5maWx0ZXJzW2lkeF0uY29sdW1uSWQgPT09IGZpbHRlck9iai5jb2x1bW5JZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVycy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbHRlcnNDaGFuZ2VkLm5leHQodGhpcy5maWx0ZXJzKTtcbiAgICB9XG5cbiAgICBnZXRGaWx0ZXJTdHJpbmcoa2V5OiBzdHJpbmcpIHtcbiAgICAgICAgbGV0IHZhbHVlID0gJyc7XG4gICAgICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IHRoaXMuZmlsdGVycy5sZW5ndGg7IGlkeCsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5maWx0ZXJzW2lkeF0uY29sdW1uSWQgPT09IGtleSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5maWx0ZXJzW2lkeF0udmFsdWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIGNoYW5nZVBhZ2UocGFnZTogYW55KSB7XG4gICAgICAgIHRoaXMucGFnZUNoYW5nZWQubmV4dChwYWdlKTtcbiAgICB9XG5cbiAgICBjbGVhckZpbHRlcnMoKSB7XG4gICAgICAgIHRoaXMuZmlsdGVycyA9IFtdO1xuICAgICAgICB0aGlzLmZpbHRlcnNDaGFuZ2VkLm5leHQodGhpcy5maWx0ZXJzKTtcbiAgICB9XG59XG4iXX0=
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS1maWx0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9mZWF0dXJlcy9kYXRhLXRhYmxlL2RhdGEtdGFibGUtZmlsdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3JDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxRQUFRLENBQUM7O0FBWS9CLE1BR2Esc0JBQXNCO0lBUy9CO1FBUEEsWUFBTyxHQUFnQixFQUFFLENBQUM7UUFDMUIsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFDaEIsbUJBQWMsR0FDUixJQUFJLGVBQWUsQ0FBYyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFcEQsZ0JBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBTSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFHekQsQ0FBQztJQUVELFlBQVksQ0FBQyxTQUFvQjtRQUM3QixJQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUMzRztZQUNELElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNwQixLQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUU7Z0JBQ2hELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDLFFBQVEsRUFBRTtvQkFDbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUM7b0JBQzlCLE9BQU8sR0FBRyxJQUFJLENBQUM7b0JBQ2YsTUFBTTtpQkFDVDthQUNKO1lBQ0QsSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDVixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUNoQztTQUNKO1FBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxZQUFZLENBQUMsU0FBb0I7UUFDN0IsS0FBSyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ2hELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDLFFBQVEsRUFBRTtnQkFDbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUM1QixNQUFNO2FBQ1Q7U0FDSjtRQUNELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsZUFBZSxDQUFDLEdBQVc7UUFDdkIsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2YsS0FBSyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ2hELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEtBQUssR0FBRyxFQUFFO2dCQUNwQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7Z0JBQ2hDLE1BQU07YUFDVDtTQUNKO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFTO1FBQ2hCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxZQUFZO1FBQ1IsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNDLENBQUM7K0dBMURRLHNCQUFzQjttSEFBdEIsc0JBQXNCLGNBRm5CLE1BQU07O1NBRVQsc0JBQXNCOzRGQUF0QixzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0fSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHtpc0VtcHR5fSBmcm9tIFwibG9kYXNoXCI7XG5cbmV4cG9ydCB0eXBlIEZpbHRlck9iaiA9IHtcbiAgICBmaWx0ZXJOYW1lOiBzdHJpbmc7XG4gICAgY29sdW1uSWQ6IHN0cmluZztcbiAgICB2YWx1ZTogYW55O1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgdHlwZT86IHN0cmluZztcbiAgICBoaWRkZW4/OiBib29sZWFuO1xuICAgIHZlcmI/OiBzdHJpbmdcbn1cblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBEYXRhVGFibGVGaWx0ZXJTZXJ2aWNlIHtcblxuICAgIGZpbHRlcnM6IEZpbHRlck9ialtdID0gW107XG4gICAgY3VycmVudFBhZ2UgPSAxO1xuICAgIGZpbHRlcnNDaGFuZ2VkXG4gICAgICAgID0gbmV3IEJlaGF2aW9yU3ViamVjdDxGaWx0ZXJPYmpbXT4odGhpcy5maWx0ZXJzKVxuXG4gICAgcGFnZUNoYW5nZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4odGhpcy5jdXJyZW50UGFnZSk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICB9XG5cbiAgICB1cGRhdGVGaWx0ZXIoZmlsdGVyT2JqOiBGaWx0ZXJPYmopIHtcbiAgICAgICAgaWYoaXNFbXB0eShmaWx0ZXJPYmoudmFsdWUpICYmIChpc05hTihmaWx0ZXJPYmoudmFsdWUpIHx8IGZpbHRlck9iai52YWx1ZSA9PT0gJycpKSB0aGlzLnJlbW92ZUZpbHRlcihmaWx0ZXJPYmopO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCBpc0ZvdW5kID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCB0aGlzLmZpbHRlcnMubGVuZ3RoOyBpZHgrKykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlcnNbaWR4XS5jb2x1bW5JZCA9PT0gZmlsdGVyT2JqLmNvbHVtbklkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyc1tpZHhdID0gZmlsdGVyT2JqO1xuICAgICAgICAgICAgICAgICAgICBpc0ZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc0ZvdW5kKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJzLnB1c2goZmlsdGVyT2JqKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbHRlcnNDaGFuZ2VkLm5leHQodGhpcy5maWx0ZXJzKTtcbiAgICB9XG5cbiAgICByZW1vdmVGaWx0ZXIoZmlsdGVyT2JqOiBGaWx0ZXJPYmopIHtcbiAgICAgICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgdGhpcy5maWx0ZXJzLmxlbmd0aDsgaWR4KyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlcnNbaWR4XS5jb2x1bW5JZCA9PT0gZmlsdGVyT2JqLmNvbHVtbklkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJzLnNwbGljZShpZHgsIDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlsdGVyc0NoYW5nZWQubmV4dCh0aGlzLmZpbHRlcnMpO1xuICAgIH1cblxuICAgIGdldEZpbHRlclN0cmluZyhrZXk6IHN0cmluZykge1xuICAgICAgICBsZXQgdmFsdWUgPSAnJztcbiAgICAgICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgdGhpcy5maWx0ZXJzLmxlbmd0aDsgaWR4KyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlcnNbaWR4XS5jb2x1bW5JZCA9PT0ga2V5KSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmZpbHRlcnNbaWR4XS52YWx1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgY2hhbmdlUGFnZShwYWdlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5wYWdlQ2hhbmdlZC5uZXh0KHBhZ2UpO1xuICAgIH1cblxuICAgIGNsZWFyRmlsdGVycygpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJzID0gW107XG4gICAgICAgIHRoaXMuZmlsdGVyc0NoYW5nZWQubmV4dCh0aGlzLmZpbHRlcnMpO1xuICAgIH1cbn1cbiJdfQ==
@@ -657,6 +657,18 @@ class DataTableComponent {
657
657
  case 'services':
658
658
  this.entityTypeLabel = 'Services';
659
659
  break;
660
+ case 'configurations':
661
+ this.entityTypeLabel = 'Configs';
662
+ break;
663
+ case 'service-policies':
664
+ this.entityTypeLabel = 'Service Policies';
665
+ break;
666
+ case 'edge-router-policies':
667
+ this.entityTypeLabel = 'Edge Router Policies';
668
+ break;
669
+ case 'service-edge-router-policies':
670
+ this.entityTypeLabel = 'Service Edge Router Policies';
671
+ break;
660
672
  }
661
673
  }
662
674
  setColumnVisibilityColumn(column, visible) {
@@ -866,4 +878,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
866
878
  }], refreshCount: [{
867
879
  type: Input
868
880
  }] } });
869
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96aXRpLWNvbnNvbGUtbGliL3NyYy9saWIvZmVhdHVyZXMvZGF0YS10YWJsZS9kYXRhLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9mZWF0dXJlcy9kYXRhLXRhYmxlL2RhdGEtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0VBY0U7QUFFRixPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixpQ0FBaUM7QUFDakMsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ3ZCLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUN2QixPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUE7QUFFM0IsT0FBTyxFQUFDLDJCQUEyQixFQUFDLE1BQU0sc0VBQXNFLENBQUM7QUFDakgsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0sb0VBQW9FLENBQUM7QUFDOUcsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sZ0VBQWdFLENBQUM7QUFDeEcsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sdURBQXVELENBQUM7QUFDL0YsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sbURBQW1ELENBQUM7QUFFekYsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0scURBQXFELENBQUM7QUFFNUYsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFFbEMsTUFLYSxrQkFBa0I7SUFRN0IsSUFBYSxPQUFPLENBQUUsRUFBVTtRQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLE9B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aUJBQWlCO3NCQUF6QixLQUFLO2dCQUNPLElBQUk7c0JBQWhCLEtBQUs7Z0JBR0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUcsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0ksZUFBZTtzQkFBeEIsTUFBTTtnQkFFRyxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQXFIbUMsUUFBUTtzQkFBakQsU0FBUzt1QkFBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUNkLFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYTtnQkFDSyxjQUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFXZCxpQkFBaUI7c0JBQTdCLEtBQUs7Z0JBU08sWUFBWTtzQkFBeEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gICAgQ29weXJpZ2h0IE5ldEZvdW5kcnkgSW5jLlxuXG4gICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vLyBJbXBvcnQgdGhlIHJlc2l6ZWQgZXZlbnQgbW9kZWxcbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnXG5cbmltcG9ydCB7VGFibGVDb2x1bW5EZWZhdWx0Q29tcG9uZW50fSBmcm9tIFwiLi9jb2x1bW4taGVhZGVycy90YWJsZS1jb2x1bW4tZGVmYXVsdC90YWJsZS1jb2x1bW4tZGVmYXVsdC5jb21wb25lbnRcIjtcbmltcG9ydCB7VGFibGVDb2x1bW5TZWxlY3RDb21wb25lbnR9IGZyb20gXCIuL2NvbHVtbi1oZWFkZXJzL3RhYmxlLWNvbHVtbi1zZWxlY3QvdGFibGUtY29sdW1uLXNlbGVjdC5jb21wb25lbnRcIjtcbmltcG9ydCB7VGFibGVDb2x1bW5NZW51Q29tcG9uZW50fSBmcm9tIFwiLi9jb2x1bW4taGVhZGVycy90YWJsZS1jb2x1bW4tbWVudS90YWJsZS1jb2x1bW4tbWVudS5jb21wb25lbnRcIjtcbmltcG9ydCB7VGFibGVDZWxsU2VsZWN0Q29tcG9uZW50fSBmcm9tIFwiLi9jZWxscy90YWJsZS1jZWxsLXNlbGVjdC90YWJsZS1jZWxsLXNlbGVjdC5jb21wb25lbnRcIjtcbmltcG9ydCB7VGFibGVDZWxsTWVudUNvbXBvbmVudH0gZnJvbSBcIi4vY2VsbHMvdGFibGUtY2VsbC1tZW51L3RhYmxlLWNlbGwtbWVudS5jb21wb25lbnRcIjtcbmltcG9ydCB7RGF0YVRhYmxlU2VydmljZX0gZnJvbSBcIi4vZGF0YS10YWJsZS5zZXJ2aWNlXCI7XG5pbXBvcnQge1RhYmxlQ2VsbFRva2VuQ29tcG9uZW50fSBmcm9tIFwiLi9jZWxscy90YWJsZS1jZWxsLXRva2VuL3RhYmxlLWNlbGwtdG9rZW4uY29tcG9uZW50XCI7XG5pbXBvcnQge0RhdGFUYWJsZUZpbHRlclNlcnZpY2UsIEZpbHRlck9ian0gZnJvbSBcIi4vZGF0YS10YWJsZS1maWx0ZXIuc2VydmljZVwiO1xuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gXCJyeGpzXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1kYXRhLXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGEtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRhLXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIERhdGFUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0IHtcbiAgQElucHV0KCkgcm93RGF0YTogYW55O1xuICBASW5wdXQoKSBleHBhbmRSb3dEYXRhOiBhbnk7XG4gIEBJbnB1dCgpIGNvbGxhcHNlUm93RGF0YTogYW55O1xuICBASW5wdXQoKSByb3dWYWxpZGF0aW9uOiBhbnk7XG4gIC8vIEBJbnB1dCgpIGNvbHVtbkZpbHRlcnM6IGFueTtcbiAgQElucHV0KCkgaXNUaW1lU2VhcmNoQXZhaWxhYmxlOiBib29sZWFuO1xuICBASW5wdXQoKSBpc0xvYWRpbmc6IGFueTtcbiAgQElucHV0KCkgc2V0IHRhYmxlSWQoIGlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLnN2Yy50YWJsZUlkID0gaWQ7XG4gICAgdGhpcy51cGRhdGVFbnRpdHlUeXBlTGFiZWwoKVxuICB9XG4gIEBJbnB1dCgpIG9wdGlvbnMgPSB7bm9TZWxlY3Q6IGZhbHNlLCBub01lbnU6IGZhbHNlfTtcbiAgQElucHV0KCkgdmFsaWRhdGVTZXJ2aWNlOiBhbnk7XG4gIEBJbnB1dCgpIHJvd3NUb2dnbGVkOiBhbnk7XG4gIEBJbnB1dCgpIHRhYmxlUmVmcmVzaENvdW50OiBhbnk7XG4gIEBJbnB1dCgpIHNldCB2aWV3KHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLl92aWV3ID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KCkgc2VydmVyU2lkZURhdGFTb3VyY2U6IGFueTtcbiAgQElucHV0KCkgYWxsb3dEb3dubG9hZDogYm9vbGVhbjtcbiAgLy8gQElucHV0KCkgZmlsdGVyczogYW55O1xuICBASW5wdXQoKSBzdGFydENvdW50OiBhbnk7XG4gIEBJbnB1dCgpIGVuZENvdW50OiBhbnk7XG4gIEBJbnB1dCgpIHRvdGFsQ291bnQ6IGFueTtcbiAgQElucHV0KCkgZW1wdHlNc2c6IGFueTtcbiAgQElucHV0KCkgZmlsdGVyQXBwbGllZCA9IGZhbHNlO1xuICBASW5wdXQoKSBtZW51SXRlbXM6IGFueSA9IFtdO1xuICBASW5wdXQoKSBoZWFkZXJBY3Rpb25zOiBhbnkgPSBbXTtcbiAgQElucHV0KCkgbm9JdGVtc0NsYXNzOiBhbnkgPSAnYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2Fzc2V0cy9zdmdzL05vX0NsaWVudHMuc3ZnXCIpJztcbiAgQElucHV0KCkgZW50aXR5VHlwZU5hbWUgPSAnSWRlbnRpdGllcyc7XG4gIEBJbnB1dCgpIHNob3dOb0l0ZW1zQWRkID0gdHJ1ZTtcbiAgQElucHV0KCkgY3VycmVudFBhZ2UgPSAxO1xuICBASW5wdXQoKSBub0l0ZW1zSW1hZ2UgPSAnbm9kYXRhJztcbiAgQE91dHB1dCgpIGFjdGlvblJlcXVlc3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBhY3Rpb246IHN0cmluZzsgaXRlbT86IGFueSB9PigpO1xuICAvLyBAT3V0cHV0KCkgZmlsdGVyQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGdyaWRSZWFkeSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGRyYWdTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGRyYWdMZWF2ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHBhZ2VDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIF92aWV3ID0gJ2xpc3QnO1xuICBmcmFtZXdvcmtDb21wb25lbnRzO1xuICBncmlkTW9kdWxlcztcbiAgZ3JpZE9wdGlvbnM7XG4gIHZpc2libGVDb2x1bW5zO1xuICBoaWRkZW5Db2x1bW5zO1xuICB2aXNpYmxlQ29sdW1uSWRzO1xuICBoaWRkZW5Db2x1bW5JZHM7XG4gIG1lcmdlZENvbHVtbkRlZmluaXRpb25zO1xuICBvcGVuTWVudTtcbiAgb3BlbkhlYWRlck1lbnU7XG4gIGZpbHRlck9wdGlvbnM6IGFueSA9IFtdO1xuICBzaG93RmlsdGVyT3B0aW9ucztcbiAgc2hvd0RhdGVUaW1lUGlja2VyO1xuICBzaG93VGFnU2VsZWN0b3I7XG4gIGF0dHJpYnV0ZXNDb2x1bW4gPSAnJztcbiAgZGF0ZVRpbWVDb2x1bW4gPSAnJztcbiAgZGF0ZVRpbWVGaWx0ZXJMYWJlbCA9ICcnO1xuICBzZWxlY3RlZFJhbmdlID0gJyc7XG4gIGRhdGVWYWx1ZTtcbiAgbWVudUxlZnQ7XG4gIG1lbnVUb3A7XG4gIGdyaWRSZW5kZXJlZDtcbiAgcmVzaXplSGFuZGxlckluaXQgPSBmYWxzZTtcbiAgcmVzaXplR3JpZENvbHVtbnNEZWJvdW5jZWQ7XG4gIHNlbGVjdGVkSXRlbTogYW55ID0ge1xuICAgIGFjdGlvbkxpc3Q6IFtdLFxuICB9O1xuICBlbnRpdHlUeXBlTGFiZWwgPSAnJ1xuICBjb2x1bW5GaWx0ZXJzOmFueSA9IHt9O1xuICByb2xlQXR0cmlidXRlczogYW55W10gPSBbXTtcbiAgbmFtZWRBdHRyaWJ1dGVzOiBhbnlbXSA9IFtdO1xuICBzZWxlY3RlZFJvbGVBdHRyaWJ1dGVzOiBhbnlbXSA9IFtdO1xuICBzZWxlY3RlZE5hbWVkQXR0cmlidXRlczogYW55W10gPSBbXTtcbiAgLy8gYXBwbGllZEZpbHRlcnMgPSBbXTtcbiAgYXV0b0dyb3VwQ29sdW1uRGVmO1xuICBjdXJyZW50SGVhZGVyQ29tcG9uZW50UGFyYW1zOiBhbnkgPSB7fTtcbiAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgcHVibGljIG1lbnVDb2x1bW5EZWZpbml0aW9uID0ge1xuICAgIGNvbElkOiAneml0aS1hZy1tZW51JyxcbiAgICBmaWVsZDogJ3ppdGktYWctbWVudScsXG4gICAgcmVzaXphYmxlOiBmYWxzZSxcbiAgICB3aWR0aDogNTAsXG4gICAgc29ydGFibGU6IGZhbHNlLFxuICAgIGxvY2tQb3NpdGlvbjogdHJ1ZSxcbiAgICBzdXBwcmVzc01vdmFibGU6IHRydWUsXG4gICAgaGVhZGVyQ2xhc3M6ICdtZW51SGVhZGVyJyxcbiAgICBjZWxsQ2xhc3M6ICd0Q29sIGNlbGxNZW51JyxcbiAgICBjZWxsUmVuZGVyZXI6ICdjZWxsTWVudUNvbXBvbmVudCcsXG4gICAgY2VsbFJlbmRlcmVyUGFyYW1zOiB7XG4gICAgICBvcGVuTWVudTogKCRldmVudCwgaXRlbSkgPT4ge1xuICAgICAgICB0aGlzLm9wZW5BY3Rpb25NZW51KCRldmVudCwgaXRlbSk7XG4gICAgICB9LFxuICAgICAgY2xvc2VNZW51OiAoZXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy5jbG9zZUFjdGlvbk1lbnUoKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICBzdXBwcmVzc1NpemVUb0ZpdDogdHJ1ZSxcbiAgICBwaW5uZWQ6ICdyaWdodCcsXG4gICAgaGVhZGVyQ29tcG9uZW50OiBUYWJsZUNvbHVtbk1lbnVDb21wb25lbnQsXG4gICAgaGVhZGVyQ29tcG9uZW50UGFyYW1zOiB7XG4gICAgICBvcGVuSGVhZGVyTWVudTogKCRldmVudCkgPT4ge1xuICAgICAgICB0aGlzLm9wZW5IZWFkZXJBY3Rpb25NZW51KCRldmVudCk7XG4gICAgICB9LFxuICAgICAgY2xvc2VNZW51OiAoZXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy5jbG9zZUFjdGlvbk1lbnUoKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbiAgcHJpdmF0ZSBfaW5pdGlhbENvbHVtbkRlZnM7XG4gIHByaXZhdGUgX3JlZnJlc2hDZWxsc0RlYm91bmNlZDtcbiAgcHJpdmF0ZSBfb25Db2x1bW5zUmVzaXplZERlYm91bmNlZDtcbiAgcHJpdmF0ZSBfc2F2ZUNvbHVtblN0YXRlRGVib3VuY2VkO1xuXG4gIHByaXZhdGUgc2VsZWN0Q29sdW1uRGVmaW5pdGlvbiA9IHtcbiAgICBjb2xJZDogJ3ppdGktYWctc2VsZWN0ZWQnLFxuICAgIGZpZWxkOiAneml0aS1hZy1zZWxlY3RlZCcsXG4gICAgc3VwcHJlc3NTaXplVG9GaXQ6IHRydWUsXG4gICAgbG9ja1Bvc2l0aW9uOiB0cnVlLFxuICAgIHN1cHByZXNzTW92YWJsZTogdHJ1ZSxcbiAgICByZXNpemFibGU6IGZhbHNlLFxuICAgIHBpbm5lZDogJ2xlZnQnLFxuICAgIHdpZHRoOiA2MCxcbiAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgaGVhZGVyQ2xhc3M6ICdzZWxlY3RIZWFkZXInLFxuICAgIGNlbGxDbGFzczogJ3RDb2wnLFxuICAgIGNlbGxSZW5kZXJlcjogJ2NlbGxTZWxlY3RDb21wb25lbnQnLFxuICAgIGNlbGxSZW5kZXJlclBhcmFtczoge1xuICAgICAgdG9nZ2xlSXRlbTogKGl0ZW0pID0+IHtcbiAgICAgICAgaXRlbS5zZWxlY3RlZCA9ICFpdGVtLnNlbGVjdGVkO1xuICAgICAgICB0aGlzLnN2Yy5ncmlkT2JqLmFwaS56aXRpQWxsVG9nZ2xlZCA9IF8uZXZlcnkodGhpcy5yb3dEYXRhLCB7c2VsZWN0ZWQ6IHRydWV9KTtcbiAgICAgICAgXy5kZWZlcigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zdmMuZ3JpZE9iai5hcGkucmVmcmVzaENlbGxzKHtmb3JjZTogdHJ1ZX0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hY3Rpb25SZXF1ZXN0ZWQuZW1pdCh7YWN0aW9uOiAndG9nZ2xlSXRlbScsIGl0ZW06IGl0ZW19KTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICBoZWFkZXJDb21wb25lbnQ6IFRhYmxlQ29sdW1uU2VsZWN0Q29tcG9uZW50LFxuICAgIGhlYWRlckNvbXBvbmVudFBhcmFtczoge1xuICAgICAgdG9nZ2xlQWxsOiAoc2VsZWN0ZWQ6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnN2Yy5ncmlkT2JqKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIF8uZm9yRWFjaCh0aGlzLnJvd0RhdGEsIChyb3cpID0+IHtcbiAgICAgICAgICByb3cuc2VsZWN0ZWQgPSBzZWxlY3RlZDtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWN0aW9uUmVxdWVzdGVkLmVtaXQoe2FjdGlvbjogJ3RvZ2dsZUFsbCd9KTtcbiAgICAgICAgXy5kZWZlcigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zdmMuZ3JpZE9iai5hcGkucmVmcmVzaENlbGxzKHtmb3JjZTogdHJ1ZX0pO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICBAVmlld0NoaWxkKCdjYWxlbmRhcicsIHsgc3RhdGljOiBmYWxzZSB9KSBjYWxlbmRhcjogYW55O1xuICBAVmlld0NoaWxkKCdjb250ZXh0TWVudScpIGNvbnRleHRNZW51O1xuICBAVmlld0NoaWxkKCd0YWJsZUNvbnRhaW5lcicpIHRhYmxlQ29udGFpbmVyOiBFbGVtZW50UmVmO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBzdmM6IERhdGFUYWJsZVNlcnZpY2UsIHByaXZhdGUgdGFibGVGaWx0ZXJTZXJ2aWNlOiBEYXRhVGFibGVGaWx0ZXJTZXJ2aWNlKSB7XG4gICAgdGhpcy5yZXNpemVHcmlkQ29sdW1uc0RlYm91bmNlZCA9IF8uZGVib3VuY2UodGhpcy5zdmMucmVzaXplR3JpZENvbHVtbnMuYmluZCh0aGlzLnN2YyksIDIwLCB7bGVhZGluZzogdHJ1ZX0pO1xuICAgIHRoaXMuX3JlZnJlc2hDZWxsc0RlYm91bmNlZCA9IF8uZGVib3VuY2UodGhpcy5zdmMucmVmcmVzaENlbGxzLmJpbmQodGhpcy5zdmMpLCA1MCk7XG4gICAgdGhpcy5fb25Db2x1bW5zUmVzaXplZERlYm91bmNlZCA9IF8uZGVib3VuY2UodGhpcy5zdmMub25Db2x1bW5zUmVzaXplZC5iaW5kKHRoaXMuc3ZjKSwgNDAwKTtcbiAgICB0aGlzLl9zYXZlQ29sdW1uU3RhdGVEZWJvdW5jZWQgPSBfLmRlYm91bmNlKHRoaXMuc3ZjLnNhdmVDb2x1bW5TdGF0ZS5iaW5kKHRoaXMuc3ZjKSwgNDAwKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NvbHVtbkRlZmluaXRpb25zO1xuXG4gIEBJbnB1dCgpIHNldCBjb2x1bW5EZWZpbml0aW9ucyh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5fY29sdW1uRGVmaW5pdGlvbnMgPSB2YWx1ZTtcblxuICB9XG5cbiAgZ2V0IHNob3dGaWx0ZXJCYXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3ZpZXcgIT09ICd1cGxvYWQnICYmIHRoaXMuX3ZpZXcgIT09ICdwcm9jZXNzJztcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCByZWZyZXNoQ291bnQodmFsdWU6IG51bWJlcikge1xuICAgIGlmICghdGhpcy5zdmMuZ3JpZE9iaikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBfLmRlZmVyKCgpID0+IHtcbiAgICAgIHRoaXMuc3ZjLmdyaWRPYmouYXBpLnJlZHJhd1Jvd3MoKTtcbiAgICAgIHRoaXMuc3ZjLmdyaWRPYmouYXBpLnJlZnJlc2hDZWxscyh7Zm9yY2U6IHRydWV9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBzaG93VGFibGUoKSB7XG4gICAgY29uc3QgX3Nob3dUYWJsZSA9IHRoaXMuaXNMb2FkaW5nIHx8IHRoaXMuZmlsdGVyQXBwbGllZCB8fCB0aGlzLnJvd0RhdGE/Lmxlbmd0aCA+IDA7XG4gICAgaWYgKF9zaG93VGFibGUgJiYgIXRoaXMucmVzaXplSGFuZGxlckluaXQpIHtcbiAgICAgIHRoaXMuX2luaXRHcmlkUmVzaXplSGFuZGxlcigpO1xuICAgIH1cbiAgICByZXR1cm4gX3Nob3dUYWJsZTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZnJhbWV3b3JrQ29tcG9uZW50cyA9IHtcbiAgICAgIGNlbGxTZWxlY3RDb21wb25lbnQ6IFRhYmxlQ2VsbFNlbGVjdENvbXBvbmVudCxcbiAgICAgIGNlbGxNZW51Q29tcG9uZW50OiBUYWJsZUNlbGxNZW51Q29tcG9uZW50LFxuICAgICAgY2VsbFRva2VuQ29tcG9uZW50OiBUYWJsZUNlbGxUb2tlbkNvbXBvbmVudCxcbiAgICAgIGhlYWRlckNlbGxTZWxlY3RDb21wb25lbnQ6IFRhYmxlQ29sdW1uU2VsZWN0Q29tcG9uZW50LFxuICAgICAgaGVhZGVySGVhZGVyTWVudUNvbXBvbmVudDogVGFibGVDb2x1bW5NZW51Q29tcG9uZW50LFxuICAgICAgaGVhZGVyRGVmYXVsdENvbXBvbmVudDogVGFibGVDb2x1bW5EZWZhdWx0Q29tcG9uZW50LFxuICAgIH07XG5cbiAgICB0aGlzLmF1dG9Hcm91cENvbHVtbkRlZiA9IHtcbiAgICAgIGZpZWxkOiAncHJvY2Vzc1RyZWUnLFxuICAgICAgaGVhZGVyTmFtZTogJ1Byb2Nlc3MgTmFtZScsXG4gICAgICBjZWxsUmVuZGVyZXI6ICdjZWxsUmVzb3VyY2VTdGF0dXNDb21wb25lbnQnLFxuICAgICAgcmVzaXphYmxlOiB0cnVlLFxuICAgICAgY2VsbFJlbmRlcmVyUGFyYW1zOiB7cmVzb3VyY2VUeXBlOiAncHJvY2Vzcy1leGVjdXRpb24nfSxcbiAgICAgIGhlYWRlckNvbXBvbmVudEZyYW1ld29yazogVGFibGVDb2x1bW5EZWZhdWx0Q29tcG9uZW50LFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5fY29sdW1uRGVmaW5pdGlvbnMpIHtcbiAgICAgIHRoaXMuX2FkZENvbHVtbkV2ZW50cygpO1xuICAgICAgdGhpcy5fYWRkRGVmYXVsdENvbHVtbkRlZnMoKTtcbiAgICAgIHRoaXMuX3N0b3JlSW5pdGlhbENvbHVtbkRlZnMoKTtcbiAgICAgIHRoaXMuX3NldENvbHVtbldpZHRocygpO1xuICAgICAgdGhpcy5fc2V0Q29sdW1uT3JkZXJBbmRWaXNpYmlsaXR5KCk7XG4gICAgICB0aGlzLl9pbml0Q29sdW1uVmlzaWJpbGl0eSgpO1xuICAgICAgdGhpcy5faW5pdEdyaWRPcHRpb25zKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3ZjLmdyaWRPYmogJiYgY2hhbmdlcy5yb3dEYXRhKSB7XG4gICAgICB0aGlzLl9yZWZyZXNoQ2VsbHNEZWJvdW5jZWQoY2hhbmdlcy5yb3dEYXRhKTtcbiAgICB9XG4gIH1cblxuICBjb2x1bW5WaXNpYmlsaXR5Q2hhbmdlZChldmVudCkge1xuICAgIHRoaXMuc2V0Q29sdW1uVmlzaWJpbGl0eUNvbHVtbihldmVudD8uY29sdW1uLCBldmVudD8udmlzaWJsZSk7XG4gIH1cblxuICBvcGVuQWN0aW9uTWVudShldmVudCwgaXRlbSk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gaXRlbTtcbiAgICB0aGlzLm9wZW5NZW51ID0gdHJ1ZTtcbiAgICBfLmRlbGF5KCgpID0+IHtcbiAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuY29udGV4dE1lbnU/Lm5hdGl2ZUVsZW1lbnQ/Lm9mZnNldEhlaWdodCB8fCAxMjA7XG4gICAgICBjb25zdCB3aW5kb3dPZmZzZXQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLSBldmVudC5jbGllbnRZO1xuICAgICAgY29uc3QgbWVudU9mZnNldCA9IHdpbmRvd09mZnNldCA8PSBoZWlnaHQgPyBoZWlnaHQgLSB3aW5kb3dPZmZzZXQgOiAwO1xuICAgICAgdGhpcy5tZW51TGVmdCA9IGV2ZW50LmNsaWVudFggLSAxMDA7XG4gICAgICB0aGlzLm1lbnVUb3AgPSBldmVudC5jbGllbnRZICsgNSAtIG1lbnVPZmZzZXQ7XG4gICAgfSwgMTApO1xuICB9XG5cbiAgb25HcmlkUmVhZHkocGFyYW1zKSB7XG4gICAgdGhpcy5ncmlkUmVhZHkuZW1pdChwYXJhbXMpO1xuICB9XG5cbiAgcmVzZXRUYWJsZUNvbHVtbnMoKSB7XG4gICAgaWYgKCF0aGlzLnN2Yy5ncmlkT2JqKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubWVyZ2VkQ29sdW1uRGVmaW5pdGlvbnMgPSBfLmNsb25lRGVlcCh0aGlzLl9pbml0aWFsQ29sdW1uRGVmcyk7XG4gICAgdGhpcy5zdmMuZ3JpZE9iai5hcGkuc2V0Q29sdW1uRGVmcyh0aGlzLm1lcmdlZENvbHVtbkRlZmluaXRpb25zKTtcbiAgICB0aGlzLnN2Yy5yZXNldENvb2tpZUNvbmZpZygpO1xuICAgIHRoaXMuc3ZjLmdyaWRPYmouY29sdW1uQXBpLnJlc2V0Q29sdW1uU3RhdGUoKTtcbiAgICBfLmRlZmVyKCgpID0+IHtcbiAgICAgIHRoaXMuX3VwZGF0ZUhpZGRlbkNvbHVtbnMoKTtcbiAgICAgIHRoaXMuc3ZjLnJlc2l6ZUdyaWRDb2x1bW5zKCk7XG4gICAgfSk7XG4gIH1cblxuICBvcGVuSGVhZGVyQWN0aW9uTWVudShldmVudCk6IHZvaWQge1xuICAgIHRoaXMubWVudUxlZnQgPSBldmVudC5jbGllbnRYIC0gMTUwO1xuICAgIHRoaXMubWVudVRvcCA9IGV2ZW50LmNsaWVudFkgKyA1O1xuICAgIF8uZGVsYXkoKCkgPT4ge1xuICAgICAgdGhpcy5vcGVuSGVhZGVyTWVudSA9IHRydWU7XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIGNsb3NlQWN0aW9uTWVudSgpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IHtcbiAgICAgIGFjdGlvbkxpc3Q6IFtdLFxuICAgIH07XG4gICAgdGhpcy5vcGVuTWVudSA9IGZhbHNlO1xuICAgIHRoaXMub3BlbkhlYWRlck1lbnUgPSBmYWxzZTtcbiAgfVxuXG4gIG9wZW5IZWFkZXJGaWx0ZXIoZXZlbnQsIG9wdGlvbnMsIHR5cGUsIGNvbHVtbklkLCBmaWx0ZXJMYWJlbCwgaGVhZGVyQ29tcG9uZW50UGFyYW1zKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJPcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLm1lbnVMZWZ0ID0gZXZlbnQuY2xpZW50WDtcbiAgICB0aGlzLm1lbnVUb3AgPSBldmVudC5jbGllbnRZICsgMTA7XG4gICAgaWYgKHR5cGUgPT09ICdEQVRFVElNRScpIHtcbiAgICAgIHRoaXMuZGF0ZVRpbWVDb2x1bW4gPSBjb2x1bW5JZDtcbiAgICAgIHRoaXMuZGF0ZVRpbWVGaWx0ZXJMYWJlbCA9IGZpbHRlckxhYmVsIHx8ICdEYXRlOiAnO1xuICAgICAgXy5kZWxheSgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2hvd0RhdGVUaW1lUGlja2VyID0gdHJ1ZTtcbiAgICAgIH0sIDEwKTtcbiAgICAgIF8uZGVsYXkoKCkgPT4ge1xuICAgICAgICB0aGlzLmNhbGVuZGFyLnRvZ2dsZSgpO1xuICAgICAgfSwgMTAwKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdBVFRSSUJVVEUnKSB7XG4gICAgICB0aGlzLmF0dHJpYnV0ZXNDb2x1bW4gPSBjb2x1bW5JZDtcbiAgICAgIHRoaXMucm9sZUF0dHJpYnV0ZXMgPSBoZWFkZXJDb21wb25lbnRQYXJhbXM/LmdldFJvbGVBdHRyaWJ1dGVzKCk7XG4gICAgICB0aGlzLm5hbWVkQXR0cmlidXRlcyA9IGhlYWRlckNvbXBvbmVudFBhcmFtcz8uZ2V0TmFtZWRBdHRyaWJ1dGVzKCk7XG4gICAgICB0aGlzLnNlbGVjdGVkUm9sZUF0dHJpYnV0ZXMgPSBoZWFkZXJDb21wb25lbnRQYXJhbXMuZ2V0U2VsZWN0ZWRSb2xlQXR0cmlidXRlcygpO1xuICAgICAgdGhpcy5zZWxlY3RlZE5hbWVkQXR0cmlidXRlcyA9IGhlYWRlckNvbXBvbmVudFBhcmFtcy5nZXRTZWxlY3RlZE5hbWVkQXR0cmlidXRlcygpO1xuICAgICAgdGhpcy5kYXRlVGltZUZpbHRlckxhYmVsID0gZmlsdGVyTGFiZWw7XG4gICAgICB0aGlzLmN1cnJlbnRIZWFkZXJDb21wb25lbnRQYXJhbXMgPSBoZWFkZXJDb21wb25lbnRQYXJhbXM7XG4gICAgICBfLmRlbGF5KCgpID0+IHtcbiAgICAgICAgdGhpcy5zaG93VGFnU2VsZWN0b3IgPSB0cnVlO1xuICAgICAgfSwgMTAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgXy5kZWZlcigoKSA9PiB7XG4gICAgICAgIHRoaXMuc2hvd0ZpbHRlck9wdGlvbnMgPSB0cnVlO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc2V0RGF0ZVJhbmdlRmlsdGVyKHJhbmdlKSB7XG4gICAgbGV0IHN0YXJ0RGF0ZTtcbiAgICBsZXQgbGFiZWw7XG4gICAgbGV0IGVuZERhdGUgPSBtb21lbnQoKTtcbiAgICBsZXQgY2xvc2VDYWxlbmRhciA9IHRydWU7XG4gICAgdGhpcy5zZWxlY3RlZFJhbmdlID0gcmFuZ2U7XG4gICAgc3dpdGNoIChyYW5nZSkge1xuICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgIHN0YXJ0RGF0ZSA9IG1vbWVudCgpLnN1YnRyYWN0KDEsICdob3VycycpO1xuICAgICAgICBsYWJlbCA9ICdMYXN0IEhvdXInO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgIHN0YXJ0RGF0ZSA9IG1vbWVudCgpLnN1YnRyYWN0KDI0LCAnaG91cnMnKTtcbiAgICAgICAgbGFiZWwgPSAnTGFzdCBEYXknO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICBzdGFydERhdGUgPSBtb21lbnQoKS5zdWJ0cmFjdCg3LCAnZGF5cycpO1xuICAgICAgICBsYWJlbCA9ICdMYXN0IFdlZWsnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgc3RhcnREYXRlID0gbW9tZW50KCkuc3VidHJhY3QoMSwgJ21vbnRoJyk7XG4gICAgICAgIGxhYmVsID0gJ0xhc3QgTW9udGgnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2N1c3RvbSc6XG4gICAgICAgIGlmICghdGhpcy5kYXRlVmFsdWUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3RhcnREYXRlID0gbW9tZW50KHRoaXMuZGF0ZVZhbHVlWzBdKTtcbiAgICAgICAgaWYgKHRoaXMuZGF0ZVZhbHVlWzFdICE9PSB1bmRlZmluZWQgJiYgdGhpcy5kYXRlVmFsdWVbMV0gIT09IG51bGwpIHtcbiAgICAgICAgICBlbmREYXRlID0gbW9tZW50KHRoaXMuZGF0ZVZhbHVlWzFdKTtcbiAgICAgICAgfVxuICAgICAgICBsYWJlbCA9ICdDdXN0b20nO1xuICAgICAgICBjbG9zZUNhbGVuZGFyID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgc3RhcnREYXRlID0gbW9tZW50KCkuc3VidHJhY3QoMjQsICdob3VycycpO1xuICAgICAgICBsYWJlbCA9ICdMYXN0IERheSc7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjb25zdCBzdGFydERhdGVSYW5nZSA9IGVuY29kZVVSSUNvbXBvbmVudChzdGFydERhdGUudG9JU09TdHJpbmcoKSk7XG4gICAgY29uc3QgZW5kRGF0ZVJhbmdlID0gZW5jb2RlVVJJQ29tcG9uZW50KGVuZERhdGUudG9JU09TdHJpbmcoKSk7XG4gICAgdGhpcy5jb2x1bW5GaWx0ZXJzW3RoaXMuZGF0ZVRpbWVDb2x1bW5dID0gW3N0YXJ0RGF0ZVJhbmdlLCBlbmREYXRlUmFuZ2VdO1xuXG4gICAgaWYgKGNsb3NlQ2FsZW5kYXIpIHtcbiAgICAgIHRoaXMuY2FsZW5kYXIudG9nZ2xlKCk7XG4gICAgfVxuICAgIGlmIChyYW5nZSAhPT0gJ2N1c3RvbScpIHtcbiAgICAgIHRoaXMuZGF0ZVZhbHVlID0gW3N0YXJ0RGF0ZS50b0RhdGUoKSwgZW5kRGF0ZS50b0RhdGUoKV07XG4gICAgfVxuICAgIGNvbnN0IGZpbHRlck9iajogRmlsdGVyT2JqID0ge1xuICAgICAgY29sdW1uSWQ6IHRoaXMuZGF0ZVRpbWVDb2x1bW4sXG4gICAgICB2YWx1ZTogW3N0YXJ0RGF0ZVJhbmdlLCBlbmREYXRlUmFuZ2VdLFxuICAgICAgbGFiZWw6IGxhYmVsLFxuICAgICAgZmlsdGVyTmFtZTogdGhpcy5kYXRlVGltZUZpbHRlckxhYmVsLFxuICAgICAgdHlwZTogJ0RBVEVUSU1FJ1xuICAgIH07XG5cbiAgICB0aGlzLnRhYmxlRmlsdGVyU2VydmljZS51cGRhdGVGaWx0ZXIoZmlsdGVyT2JqKTtcbiAgfVxuXG4gIHRhZ1NlbGVjdGlvbkNoYW5nZWQoZXZlbnQsIGlzUm9sZSkge1xuICAgIGxldCBsYWJlbCA9ICcnO1xuICAgIGxldCB2YWx1ZSA9ICcnO1xuICAgIGlmIChpc1JvbGUpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWROYW1lZEF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkUm9sZUF0dHJpYnV0ZXMubGVuZ3RoID4gMSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkUm9sZUF0dHJpYnV0ZXMgPSBbXy5sYXN0KHRoaXMuc2VsZWN0ZWRSb2xlQXR0cmlidXRlcyldO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWxlY3RlZFJvbGVBdHRyaWJ1dGVzLmZvckVhY2goKGF0dHIsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICBsYWJlbCArPSAnLCAnO1xuICAgICAgICAgIHZhbHVlICs9ICcsICc7XG4gICAgICAgIH1cbiAgICAgICAgbGFiZWwgKz0gJyMnICsgYXR0cjtcbiAgICAgICAgdmFsdWUgKz0gJyUyMycgKyBhdHRyO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb2xlQXR0cmlidXRlcyA9IFtdO1xuICAgICAgY29uc3QgYXR0cklkTWFwID0gdGhpcy5jdXJyZW50SGVhZGVyQ29tcG9uZW50UGFyYW1zLmdldE5hbWVkQXR0cmlidXRlc01hcCgpO1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWROYW1lZEF0dHJpYnV0ZXMubGVuZ3RoID4gMSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkTmFtZWRBdHRyaWJ1dGVzID0gW18ubGFzdCh0aGlzLnNlbGVjdGVkTmFtZWRBdHRyaWJ1dGVzKV07XG4gICAgICB9XG4gICAgICB0aGlzLnNlbGVjdGVkTmFtZWRBdHRyaWJ1dGVzLmZvckVhY2goKGF0dHIsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICBsYWJlbCArPSAnLCAnO1xuICAgICAgICAgIHZhbHVlICs9ICcsICc7XG4gICAgICAgIH1cbiAgICAgICAgbGFiZWwgKz0gJ0AnICsgYXR0cjtcbiAgICAgICAgdmFsdWUgKz0gJyU0MCcgKyBhdHRySWRNYXBbYXR0cl07XG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgZmlsdGVyT2JqOiBGaWx0ZXJPYmogPSB7XG4gICAgICBjb2x1bW5JZDogdGhpcy5hdHRyaWJ1dGVzQ29sdW1uLFxuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgbGFiZWw6IGxhYmVsLFxuICAgICAgZmlsdGVyTmFtZTogdGhpcy5kYXRlVGltZUZpbHRlckxhYmVsLFxuICAgICAgdHlwZTogJ0FUVFJJQlVURSdcbiAgICB9O1xuICAgIHRoaXMuY3VycmVudEhlYWRlckNvbXBvbmVudFBhcmFtcy5zZXRTZWxlY3RlZFJvbGVBdHRyaWJ1dGVzKHRoaXMuc2VsZWN0ZWRSb2xlQXR0cmlidXRlcyk7XG4gICAgdGhpcy5jdXJyZW50SGVhZGVyQ29tcG9uZW50UGFyYW1zLnNldFNlbGVjdGVkTmFtZWRBdHRyaWJ1dGVzKHRoaXMuc2VsZWN0ZWROYW1lZEF0dHJpYnV0ZXMpO1xuICAgIHRoaXMudGFibGVGaWx0ZXJTZXJ2aWNlLnVwZGF0ZUZpbHRlcihmaWx0ZXJPYmopO1xuICB9XG5cbiAgYXBwbHlGaWx0ZXIoZXZlbnQsIGZpbHRlcikge1xuICAgIHRoaXMudGFibGVGaWx0ZXJTZXJ2aWNlLnVwZGF0ZUZpbHRlcihmaWx0ZXIpO1xuICAgIHRoaXMuY2xvc2VIZWFkZXJGaWx0ZXIoZXZlbnQpO1xuICB9XG5cbiAgY2xvc2VIZWFkZXJGaWx0ZXIoZXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dGaWx0ZXJPcHRpb25zID0gZmFsc2U7XG4gIH1cblxuICBjbG9zZURhdGVUaW1lKGV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5zaG93RGF0ZVRpbWVQaWNrZXIgPSBmYWxzZTtcbiAgfVxuXG4gIGNsb3NlVGFnU2VsZWN0b3IoZXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dUYWdTZWxlY3RvciA9IGZhbHNlO1xuICB9XG5cbiAgb3BlbkNyZWF0ZSgpIHtcbiAgICB0aGlzLmFjdGlvblJlcXVlc3RlZC5lbWl0KHthY3Rpb246ICdjcmVhdGUnfSk7XG4gIH1cblxuICBhbnlTZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gXy5zb21lKHRoaXMucm93RGF0YSwge3NlbGVjdGVkOiB0cnVlfSk7XG4gIH1cblxuICBzaG93RG93bmxvYWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuYWxsb3dEb3dubG9hZCAmJiB0aGlzLl92aWV3ICE9PSAncHJvY2Vzcyc7XG4gIH1cblxuICBfaW5pdEdyaWRSZXNpemVIYW5kbGVyKCkge1xuICAgIGlmICghdGhpcy50YWJsZUNvbnRhaW5lcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihlbnRyaWVzID0+IHtcbiAgICAgIHRoaXMucmVzaXplR3JpZENvbHVtbnNEZWJvdW5jZWQoKTtcbiAgICB9KTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudCk7XG4gICAgdGhpcy5yZXNpemVIYW5kbGVySW5pdCA9IHRydWU7XG4gIH1cblxuICBfaW5pdEdyaWRPcHRpb25zKCkge1xuICAgIHRoaXMuZ3JpZE9wdGlvbnMgPSB7XG4gICAgICBwYWdpbmF0aW9uOiBmYWxzZSxcbiAgICAgIHJvd1NlbGVjdGlvbjogJ3NpbmdsZScsXG4gICAgICByb3dDbGFzczogJ3ppdGktdGFibGUtcm93JyxcbiAgICAgIHJvd0hlaWdodDogNTAsXG4gICAgICBpbW11dGFibGVEYXRhOiB0cnVlLFxuICAgICAgc3VwcHJlc3NSb3dDbGlja1NlbGVjdGlvbjogdHJ1ZSxcbiAgICAgIHN1cHByZXNzSG9yaXpvbnRhbFNjcm9sbDogZmFsc2UsXG4gICAgICBzdG9wRWRpdGluZ1doZW5HcmlkTG9zZXNGb2N1czogdHJ1ZSxcbiAgICAgIHN1cHByZXNzUHJvcGVydHlOYW1lc0NoZWNrOiB0cnVlLFxuICAgICAgYW5pbWF0ZVJvd3M6IHRydWUsXG4gICAgICBkZWZhdWx0Q29sRGVmOiB7XG4gICAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgICAgZmlsdGVyOiBmYWxzZSwgLy8gc2V0IGZpbHRlcmluZyBvbiBmb3IgYWxsIGNvbHVtbnNcbiAgICAgIH0sXG4gICAgICBvblJvd0RyYWdNb3ZlOiAocGFyYW1zKSA9PiB7XG4gICAgICAgIHRoaXMuZHJhZ1N0YXJ0LmVtaXQocGFyYW1zKTtcbiAgICAgIH0sXG4gICAgICBvblJvd0RyYWdMZWF2ZTogKHBhcmFtcykgPT4ge1xuICAgICAgICB0aGlzLmRyYWdMZWF2ZS5lbWl0KHBhcmFtcyk7XG4gICAgICB9LFxuICAgICAgb25Sb3dEcmFnRW5kOiAoKSA9PiB7XG4gICAgICAgICQoJy5hdHRyaWJ1dGUtaXRlbScpLnNob3coKTtcbiAgICAgICAgJCgnLmRyYWctaG92ZXInKS5yZW1vdmVDbGFzcygnZHJhZy1ob3ZlcicpO1xuICAgICAgICAkKCcjQ29sdW1uVmlzaWJpbGl0eUhlYWRlcicpLnRyaWdnZXIoJ2NsaWNrJyk7XG4gICAgICAgICQoJy5uZXctYXR0cmlidXRlLXRhcmdldCcpLmhpZGUoKTtcbiAgICAgIH0sXG4gICAgICByb3dDbGFzc1J1bGVzOiB7XG4gICAgICAgIC8vIHJvdyBzdHlsZSBmdW5jdGlvblxuICAgICAgICAncm93LWludmFsaWQnOiBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgICAgcmV0dXJuIF8uZ2V0KHBhcmFtcywgJ2RhdGEuaW52YWxpZCcpO1xuICAgICAgICB9LFxuICAgICAgICAncm93LWNvcGllZCc6IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgICByZXR1cm4gXy5nZXQocGFyYW1zLCAnZGF0YS5jb3BpZWQnKTtcbiAgICAgICAgfSxcbiAgICAgICAgJ3Jvdy1jaGlsZC1zdWItcHJvY2Vzcyc6IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICBwYXJhbXMuYXBpLnZpZXcgPT09ICdwcm9jZXNzJyAmJlxuICAgICAgICAgICAgICAhXy5nZXQocGFyYW1zLCAnZGF0YS5pc1Jvb3QnKSAmJlxuICAgICAgICAgICAgICAhXy5pc0VtcHR5KF8uZ2V0KHBhcmFtcywgJ2RhdGEuc3VicHJvY2Vzc0lkJykpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgJ3Jvdy1jaGlsZCc6IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAocGFyYW1zLmFwaS52aWV3ID09PSAncHJvY2VzcycgfHwgcGFyYW1zLmFwaS52aWV3ID09PSAndXNlci1yb2xlcycpICYmXG4gICAgICAgICAgICAgICFfLmdldChwYXJhbXMsICdkYXRhLmlzUm9vdCcpICYmXG4gICAgICAgICAgICAgICFfLmlzRW1wdHkoXy5nZXQocGFyYW1zLCAnZGF0YS5wYXJlbnRJZCcpKVxuICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICAgICdyb3ctY2hpbGQtc2Vjb25kJzogZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIHBhcmFtcy5hcGkudmlldyA9PT0gJ3Byb2Nlc3MnICYmXG4gICAgICAgICAgICAgICFfLmdldChwYXJhbXMsICdkYXRhLmlzUm9vdCcpICYmXG4gICAgICAgICAgICAgIF8uZ2V0KHBhcmFtcywgJ2RhdGEuaXNQYXJhbGxlbCcpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgJ3Jvdy1jaGlsZC1ldmVuJzogZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChwYXJhbXMuYXBpLnZpZXcgPT09ICdwcm9jZXNzJyB8fCBwYXJhbXMuYXBpLnZpZXcgPT09ICd1c2VyLXJvbGVzJykgJiZcbiAgICAgICAgICAgICAgXy5nZXQocGFyYW1zLCAnZGF0YS5wYXJlbnRJbmRleCcpICUgMiA+IDBcbiAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgICAncm93LWNoaWxkLW9kZCc6IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAocGFyYW1zLmFwaS52aWV3ID09PSAncHJvY2VzcycgfHwgcGFyYW1zLmFwaS52aWV3ID09PSAndXNlci1yb2xlcycpICYmXG4gICAgICAgICAgICAgIF8uZ2V0KHBhcmFtcywgJ2RhdGEucGFyZW50SW5kZXgnKSAlIDIgPT09IDBcbiAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgICAncm93LWNoaWxkLXdhcm4nOiBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcmFtcy5hcGkudmlldyA9PT0gJ3Byb2Nlc3MnICYmIF8uZ2V0KHBhcmFtcywgJ2RhdGEuc3RhdGUnKSA9PT0gJ1dBUk5JTkcnO1xuICAgICAgICB9LFxuICAgICAgICAncm93LWNoaWxkLWhlYWRlcic6IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgICByZXR1cm4gcGFyYW1zLmFwaS52aWV3ID09PSAncHJvY2VzcycgJiYgXy5nZXQocGFyYW1zLCAnZGF0YS5yb3dUeXBlJykgPT09ICdzdGVwLWhlYWRlcic7XG4gICAgICAgIH0sXG4gICAgICAgICdyb3ctcm9sZS1pdGVtJzogZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICAgIHJldHVybiBfLmdldChwYXJhbXMsICdkYXRhLnJvbGVJdGVtJyk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgZ2V0Um93SGVpZ2h0OiAocGFyYW1zKSA9PiB7XG4gICAgICAgIGlmIChwYXJhbXMuYXBpLnZpZXcgPT09ICdwcm9jZXNzJykge1xuICAgICAgICAgIGlmIChfLmdldChwYXJhbXMsICdkYXRhLmlzUm9vdCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gNTA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChfLmdldChwYXJhbXMsICdkYXRhLmlzUGFyYWxsZWwnKSkge1xuICAgICAgICAgICAgcmV0dXJuIDM1O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoXy5nZXQocGFyYW1zLCAnZGF0YS5wYXJlbnRJZCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gNDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiA1MDtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHBhcmFtcy5hcGkudmlldyA9PT0gJ3VzZXJzJyB8fFxuICAgICAgICAgICAgcGFyYW1zLmFwaS52aWV3ID09PSAndXNlci1yb2xlcycgfHxcbiAgICAgICAgICAgIHBhcmFtcy5hcGkudmlldyA9PT0gJ3JvbGVzJ1xuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoXy5nZXQocGFyYW1zLCAnZGF0YS5yb2xlSXRlbScpKSB7XG4gICAgICAgICAgICByZXR1cm4gMzU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiA1MDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gNTA7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIG9uQ2VsbEVkaXRpbmdTdG9wcGVkOiAoZXZlbnRPYmopID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlU2VydmljZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaWVsZCA9IF8uZ2V0KGV2ZW50T2JqLCAnY29sRGVmLmZpZWxkJywgJycpO1xuICAgICAgICBpZiAoXy5pbmNsdWRlcyhmaWVsZC50b0xvd2VyQ2FzZSgpLCAnYXR0cmlidXRlJykpIHtcbiAgICAgICAgICBjb25zdCBuZXdWYWwgPSBldmVudE9iai5uZXdWYWx1ZS5zcGxpdCgnLCcpO1xuICAgICAgICAgIF8uc2V0KGV2ZW50T2JqLCBgZGF0YS4ke2ZpZWxkfWAsIG5ld1ZhbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgXy5zZXQoZXZlbnRPYmosIGBkYXRhLiR7ZmllbGR9YCwgZXZlbnRPYmoubmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlVGFibGUoZXZlbnRPYmopO1xuICAgICAgfSxcbiAgICAgIGdldFJvd05vZGVJZDogKGRhdGEpID0+IGRhdGEubmFtZSxcbiAgICAgIG9uQm9keVNjcm9sbDogKHNjcm9sbGVyKSA9PiB7XG4gICAgICAgIHRoaXMuX2hhbmRsZVRhYmxlU2Nyb2xsKHNjcm9sbGVyKTtcbiAgICAgIH0sXG4gICAgICBvbkdyaWRSZWFkeTogKGdyaWQpID0+IHtcbiAgICAgICAgZ3JpZC5hcGkueml0aUFsbFRvZ2dsZWQgPSBmYWxzZTtcbiAgICAgICAgZ3JpZC5hcGkueml0aUhpZGVDb2x1bW4gPSB0aGlzLnNldENvbHVtblZpc2liaWxpdHlDb2x1bW4uYmluZCh0aGlzKTtcbiAgICAgICAgZ3JpZC5hcGkudmFsaWRhdGVUYWJsZSA9IHRoaXMuX3ZhbGlkYXRlVGFibGUuYmluZCh0aGlzKTtcbiAgICAgICAgZ3JpZC5hcGkudmlldyA9IHRoaXMuX3ZpZXc7XG4gICAgICAgIGdyaWQuYXBpLnppdGlSb3dEYXRhID0gdGhpcy5yb3dEYXRhO1xuICAgICAgICBncmlkLmFwaS5vcGVuSGVhZGVyRmlsdGVyID0gdGhpcy5vcGVuSGVhZGVyRmlsdGVyLmJpbmQodGhpcyk7XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICAgICAgICBncmlkLmFwaS5yb3dzVG9nZ2xlZCA9IHRoaXMucm93c1RvZ2dsZWQgPyB0aGlzLnJvd3NUb2dnbGVkLmJpbmQodGhpcykgOiAoKSA9PiB7fTtcbiAgICAgICAgaWYgKHRoaXMuc2VydmVyU2lkZURhdGFTb3VyY2UpIHtcbiAgICAgICAgICBncmlkLmFwaS5zZXRTZXJ2ZXJTaWRlRGF0YXNvdXJjZSh0aGlzLnNlcnZlclNpZGVEYXRhU291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN2Yy5ncmlkT2JqID0gZ3JpZDtcbiAgICAgICAgXy5kZWZlcih0aGlzLl9hcHBseUNvbHVtblN0YXRlLmJpbmQodGhpcykpO1xuICAgICAgfSxcbiAgICAgIG9uQ29sdW1uVmlzaWJsZTogKGV2ZW50T2JqKSA9PiB7XG4gICAgICAgIGlmICghZXZlbnRPYmouY29sdW1uKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlQ29sdW1uVmlzaWJpbGl0eShldmVudE9iai5jb2x1bW4uY29sRGVmLmNvbElkLCBldmVudE9iai52aXNpYmxlKTtcbiAgICAgICAgaWYgKGV2ZW50T2JqLnZpc2libGUpIHtcbiAgICAgICAgICB0aGlzLnN2Yy5ncmlkT2JqLmNvbHVtbkFwaS5tb3ZlQ29sdW1uKFxuICAgICAgICAgICAgICBldmVudE9iai5jb2x1bW4uY29sRGVmLmNvbElkLFxuICAgICAgICAgICAgICB0aGlzLm1lcmdlZENvbHVtbkRlZmluaXRpb25zLmxlbmd0aCAtIDFcbiAgICAgICAgICApO1xuICAgICAgICAgIF8uZGVmZXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdmMuZ3JpZE9iai5hcGkuZW5zdXJlQ29sdW1uVmlzaWJsZShldmVudE9iai5jb2x1bW4uY29sRGVmLmNvbElkKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl91cGRhdGVHcmlkQ29sdW1ucygpO1xuICAgICAgICB0aGlzLnN2Yy5zYXZlQ29sdW1uU3RhdGUoKTtcbiAgICAgIH0sXG4gICAgICBvbkZpcnN0RGF0YVJlbmRlcmVkOiAoZXZlbnRPYmopID0+IHtcbiAgICAgICAgdGhpcy5zdmMucmVzaXplR3JpZENvbHVtbnMoKTtcbiAgICAgICAgdGhpcy5ncmlkUmVuZGVyZWQgPSB0cnVlO1xuICAgICAgfSxcbiAgICAgIG9uQ29sdW1uUGlubmVkOiAoZXZlbnRPYmopID0+IHtcbiAgICAgICAgaWYgKCFldmVudE9iai5jb2x1bW4pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29sSWQgPSBldmVudE9iai5jb2x1bW4uY29sRGVmLmNvbElkO1xuICAgICAgICBjb25zdCBwaW5uZWQgPSBldmVudE9iai5waW5uZWQgPT09ICdsZWZ0JztcbiAgICAgICAgdGhpcy5tZXJnZWRDb2x1bW5EZWZpbml0aW9ucyA9IF8ubWFwKHRoaXMubWVyZ2VkQ29sdW1uRGVmaW5pdGlvbnMsIChjb2xEZWYpID0+IHtcbiAgICAgICAgICBpZiAoY29sRGVmLmNvbElkID09PSBjb2xJZCkge1xuICAgICAgICAgICAgY29sRGVmLmxvY2tQb3NpdGlvbiA9IHBpbm5lZDtcbiAgICAgICAgICAgIGNvbERlZi5zdXBwcmVzc01vdmFibGUgPSBwaW5uZWQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjb2xEZWY7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl91cGRhdGVHcmlkQ29sdW1ucygpO1xuICAgICAgICB0aGlzLnN2Yy5yZXNpemVHcmlkQ29sdW1ucygpO1xuICAgICAgICB0aGlzLnN2Yy5zYXZlQ29sdW1uU3RhdGUoKTtcbiAgICAgIH0sXG4gICAgICBvbkNvbHVtblJlc2l6ZWQ6IChldmVudE9iaikgPT4ge1xuICAgICAgICBpZiAoIWV2ZW50T2JqLmNvbHVtbiB8fCBldmVudE9iai5zb3VyY2UgPT09ICdzaXplQ29sdW1uc1RvRml0Jykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9vbkNvbHVtbnNSZXNpemVkRGVib3VuY2VkKGV2ZW50T2JqLmNvbHVtbik7XG4gICAgICB9LFxuICAgICAgb25Db2x1bW5Nb3ZlZDogKGV2ZW50T2JqKSA9PiB7XG4gICAgICAgIHRoaXMuX3NhdmVDb2x1bW5TdGF0ZURlYm91bmNlZCgpO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgX3ZhbGlkYXRlVGFibGUoZXZlbnRPYmopIHtcbiAgICB0aGlzLnJvd0RhdGFbZXZlbnRPYmoucm93SW5kZXhdID0gZXZlbnRPYmouZGF0YTtcbiAgICBfLmRlbGF5KCgpID0+IHtcbiAgICAgIHRoaXMudmFsaWRhdGVTZXJ2aWNlKHRoaXMucm93RGF0YSk7XG4gICAgICBfLmRlbGF5KCgpID0+IHtcbiAgICAgICAgdGhpcy5zdmMuZ3JpZE9iai5hcGkucmVmcmVzaENlbGxzKHtmb3JjZTogdHJ1ZX0pO1xuICAgICAgICB0aGlzLnN2Yy5ncmlkT2JqLmFwaS5yZWRyYXdSb3dzKCk7XG4gICAgICB9LCA1MCk7XG4gICAgfSwgNTApO1xuICB9XG5cbiAgX2FwcGx5Q29sdW1uU3RhdGUoKSB7XG4gICAgY29uc3QgdGFibGVTdGF0ZUNvb2tpZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGB6aXRpXyR7dGhpcy5zdmMudGFibGVJZH1fdGFibGVfc3RhdGVgKTtcbiAgICBjb25zdCB0YWJsZVN0YXRlID0gSlNPTi5wYXJzZSh0YWJsZVN0YXRlQ29va2llKTtcbiAgICBpZiAodGFibGVTdGF0ZSkge1xuICAgICAgdGhpcy5zdmMuZ3JpZE9iai5jb2x1bW5BcGkuYXBwbHlDb2x1bW5TdGF0ZSh7c3RhdGU6IHRhYmxlU3RhdGV9KTtcbiAgICAgIHRoaXMuX3VwZGF0ZUhpZGRlbkNvbHVtbnMoKTtcbiAgICB9XG4gIH1cblxuICBfYWRkQ29sdW1uRXZlbnRzKCkge1xuICAgIHRoaXMuX2NvbHVtbkRlZmluaXRpb25zID0gXy5tYXAodGhpcy5fY29sdW1uRGVmaW5pdGlvbnMsIChjb2xEZWYpID0+IHtcbiAgICAgIGNvbERlZi5waW5Db2x1bW4gPSB0aGlzLnN2Yy5waW5Db2x1bW4uYmluZCh0aGlzLnN2Yyk7XG4gICAgICBjb2xEZWYuY2VsbENsYXNzID0gdGhpcy5fZ2V0Q2VsbFN0eWxlLmJpbmQodGhpcyk7XG4gICAgICByZXR1cm4gY29sRGVmO1xuICAgIH0pO1xuICB9XG5cbiAgX2dldENlbGxTdHlsZShwYXJhbXMpIHtcbiAgICBpZiAoIXRoaXMucm93VmFsaWRhdGlvbiB8fCB0aGlzLnJvd1ZhbGlkYXRpb24ubGVuZ3RoIDw9IDApIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IHRoaXMucm93VmFsaWRhdGlvbltwYXJhbXMubm9kZS5yb3dJbmRleF07XG4gICAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0IHx8ICF2YWxpZGF0aW9uUmVzdWx0LmVycm9ycykge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBjb25zdCBmaWVsZCA9IF8uZ2V0KHBhcmFtcywgJ2NvbERlZi5maWVsZCcsICcnKTtcbiAgICBpZiAodmFsaWRhdGlvblJlc3VsdC5lcnJvcnNbZmllbGRdKSB7XG4gICAgICByZXR1cm4gJ3ppdGktdGFibGUtY2VsbC1lcnJvcic7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuICB1cGRhdGVDb2x1bW5WaXNpYmlsaXR5KGNvbElkLCB2aXNpYmxlKSB7XG4gICAgdGhpcy5fY29sdW1uRGVmaW5pdGlvbnMgPSBfLm1hcCh0aGlzLl9jb2x1bW5EZWZpbml0aW9ucywgKGNvbERlZikgPT4ge1xuICAgICAgaWYgKGNvbERlZi5jb2xJZCA9PT0gY29sSWQpIHtcbiAgICAgICAgY29sRGVmLmhpZGUgPSAhdmlzaWJsZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb2xEZWY7XG4gICAgfSk7XG4gICAgZm9yIChjb25zdCBjb2xEZWYgb2YgdGhpcy5tZXJnZWRDb2x1bW5EZWZpbml0aW9ucykge1xuICAgICAgaWYgKGNvbERlZi5jb2xJZCA9PT0gY29sSWQpIHtcbiAgICAgICAgY29sRGVmLmhpZGUgPSAhdmlzaWJsZTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fdXBkYXRlSGlkZGVuQ29sdW1ucygpO1xuICAgIHRoaXMuc3ZjLnJlc2l6ZUdyaWRDb2x1bW5zKCk7XG4gIH1cblxuICB1cGRhdGVFbnRpdHlUeXBlTGFiZWwoKSB7XG4gICAgc3dpdGNoKHRoaXMuc3ZjLnRhYmxlSWQpIHtcbiAgICAgIGNhc2UgJ2lkZW50aXRpZXMnOlxuICAgICAgICB0aGlzLmVudGl0eVR5cGVMYWJlbCA9ICdJZGVudGl0aWVzJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdlZGdlLXJvdXRlcnMnOlxuICAgICAgICB0aGlzLmVudGl0eVR5cGVMYWJlbCA9ICdFZGdlIFJvdXRlcnMnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3NlcnZpY2VzJzpcbiAgICAgICAgdGhpcy5lbnRpdHlUeXBlTGFiZWwgPSAnU2VydmljZXMnO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBzZXRDb2x1bW5WaXNpYmlsaXR5Q29sdW1uKGNvbHVtbiwgdmlzaWJsZSkge1xuICAgIHRoaXMuc3ZjLmdyaWRPYmouY29sdW1uQXBpLnNldENvbHVtblZpc2libGUoY29sdW1uLmNvbElkLCB2aXNpYmxlKTtcbiAgICB0aGlzLnN2Yy5ncmlkT2JqLmFwaS5yZWZyZXNoSGVhZGVyKCk7XG4gICAgXy5kZWZlcigoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZUNvbHVtblZpc2liaWxpdHkoY29sdW1uLmNvbElkLCB2aXNpYmxlKTtcbiAgICB9KTtcbiAgfVxuXG4gIF91cGRhdGVIaWRkZW5Db2x1bW5zKCkge1xuICAgIGNvbnN0IGdyaWRDb2x1bW5EZWZzID0gdGhpcy5zdmMuZ3JpZE9iai5jb2x1bW5BcGkuY29sdW1uTW9kZWwuZ3JpZENvbHVtbnM7XG4gICAgY29uc3QgdmlzaWJsZUdyaWRDb2x1bW5zID0gZ3JpZENvbHVtbkRlZnMuZmlsdGVyKChjb2wpID0+IGNvbC52aXNpYmxlKTtcbiAgICBjb25zdCBoaWRkZW5HcmlkQ29sdW1ucyA9IGdyaWRDb2x1bW5EZWZzLmZpbHRlcigoY29sKSA9PiAhY29sLnZpc2libGUpO1xuICAgIHRoaXMudmlzaWJsZUNvbHVtbnMgPSBfLm1hcCh2aXNpYmxlR3JpZENvbHVtbnMsICdjb2xEZWYnKTtcbiAgICB0aGlzLnZpc2libGVDb2x1bW5JZHMgPSBfLm1hcCh0aGlzLnZpc2libGVDb2x1bW5zLCAnZmllbGQnKTtcbiAgICB0aGlzLmhpZGRlbkNvbHVtbnMgPSBfLm1hcChoaWRkZW5HcmlkQ29sdW1ucywgJ2NvbERlZicpO1xuICAgIHRoaXMuaGlkZGVuQ29sdW1uSWRzID0gXy5tYXAodGhpcy5oaWRkZW5Db2x1bW5zLCAnZmllbGQnKTtcbiAgfVxuXG4gIGFkZEhlYWRlck1lbnUoY29sdW1uRGVmcyA9IFtdKSB7XG4gICAgY29sdW1uRGVmcy5mb3JFYWNoKChjb2x1bW5EZWYpID0+IHtcbiAgICAgIGlmIChjb2x1bW5EZWYudXNlSGVhZGVyTWVudSkge1xuICAgICAgICBjb2x1bW5EZWYuaGVhZGVyQ29tcG9uZW50UGFyYW1zID0ge1xuICAgICAgICAgIG9wZW5IZWFkZXJNZW51OiAoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9wZW5IZWFkZXJBY3Rpb25NZW51KCRldmVudCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBjbG9zZU1lbnU6IChldmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jbG9zZUFjdGlvbk1lbnUoKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgX2FkZERlZmF1bHRDb2x1bW5EZWZzKCkge1xuICAgIHRoaXMuYWRkSGVhZGVyTWVudSh0aGlzLl9jb2x1bW5EZWZpbml0aW9ucyk7XG4gICAgdGhpcy5tZXJnZWRDb2x1bW5EZWZpbml0aW9ucyA9IF8uY2xvbmVEZWVwKHRoaXMuX2NvbHVtbkRlZmluaXRpb25zKTtcbiAgICBpZiAodGhpcy5fdmlldyA9PT0gJ3Byb2Nlc3MnKSB7XG4gICAgICBjb25zdCBjZWxsUGFyYW1zID0gXy5jbG9uZURlZXAodGhpcy5tZW51Q29sdW1uRGVmaW5pdGlvbi5jZWxsUmVuZGVyZXJQYXJhbXMpO1xuICAgICAgdGhpcy5tZXJnZWRDb2x1bW5EZWZpbml0aW9uc1t0aGlzLm1lcmdlZENvbHVtbkRlZmluaXRpb25zLmxlbmd0aCAtIDFdLmNlbGxSZW5kZXJlclBhcmFtcyA9IF8ubWVyZ2UoXG4gICAgICAgICAgdGhpcy5tZXJnZWRDb2x1bW5EZWZpbml0aW9uc1t0aGlzLm1lcmdlZENvbHVtbkRlZmluaXRpb25zLmxlbmd0aCAtIDFdLmNlbGxSZW5kZXJlclBhcmFtcyxcbiAgICAgICAgICBjZWxsUGFyYW1zXG4gICAgICApO1xuICAgICAgdGhpcy5tZXJnZWRDb2x1bW5EZWZpbml0aW9uc1t0aGlzLm1lcmdlZENvbHVtbkRlZmluaXRpb25zLmxlbmd0aCAtIDFdLmhlYWRlckNvbXBvbmVudFBhcmFtcyA9XG4gICAgICAgICAgdGhpcy5tZW51Q29sdW1uRGVmaW5pdGlvbi5oZWFkZXJDb21wb25lbnRQYXJhbXM7XG4gICAgfSBlbHNlIGlmICggKHRoaXMub3B0aW9ucy5ub1NlbGVjdCAmJiB0aGlzLm9wdGlvbnMubm9NZW51KSkge1xuICAgICAgLy8gRG9uJ3QgYWRkIGFueSBhZGRpdGlvbmFsIGNvbHVtbnNcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3ZpZXcgIT09ICd1cGxvYWQnKSB7XG4gICAgICB0aGlzLm1lcmdlZENvbHVtbkRlZmluaXRpb25zLnNwbGljZSgwLCAwLCB0aGlzLnNlbGVjdENvbHVtbkRlZmluaXRpb24pO1xuICAgICAgdGhpcy5tZXJnZWRDb2x1bW5EZWZpbml0aW9ucy5wdXNoKHRoaXMubWVudUNvbHVtbkRlZmluaXRpb24pO1xuICAgIH1cbiAgfVxuXG4gIF9zdG9yZUluaXRpYWxDb2x1bW5EZWZzKCkge1xuICAgIHRoaXMuX2luaXRpYWxDb2x1bW5EZWZzID0gXy5jbG9uZURlZXAodGhpcy5tZXJnZWRDb2x1bW5EZWZpbml0aW9ucyk7XG4gIH1cblxuICBfaW5pdENvbHVtblZpc2liaWxpdHkoKSB7XG4gICAgdGhpcy52aXNpYmxlQ29sdW1ucyA9IHRoaXMuX2NvbHVtbkRlZmluaXRpb25zLmZpbHRlcigoY29sKSA9PiAhY29sLmhpZGUpO1xuICAgIHRoaXMuaGlkZGVuQ29sdW1ucyA9IHRoaXMuX2NvbHVtbkRlZmluaXRpb25zLmZpbHRlcigoY29sKSA9PiBjb2wuaGlkZSk7XG4gICAgdGhpcy52aXNpYmxlQ29sdW1uSWRzID0gXy5tYXAodGhpcy52aXNpYmxlQ29sdW1ucywgJ2ZpZWxkJyk7XG4gIH1cblxuICBfdXBkYXRlR3JpZENvbHVtbnMoKSB7XG4gICAgdGhpcy5fc2V0Q29sdW1uV2lkdGhzKCk7XG4gICAgdGhpcy5zdmMuZ3JpZE9iai5hcGkuc2V0Q29sdW1uRGVmcyh0aGlzLm1lcmdlZENvbHVtbkRlZmluaXRpb25zKTtcbiAgICB0aGlzLnN2Yy5ncmlkT2JqLmFwaS5yZWZyZXNoSGVhZGVyKCk7XG4gIH1cblxuICBfc2V0Q29sdW1uV2lkdGhzKCkge1xuICAgIGlmICh0aGlzLl92aWV3ID09PSAndXBsb2FkJyB8fCB0aGlzLl92aWV3ID09PSAncHJvY2VzcycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29sV2lkdGhzQ29va2llID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oYHppdGlfJHt0aGlzLnN2Yy50YWJsZUlkfV9jb2x1bW5fd2lkdGhzYCk7XG4gICAgaWYgKCFfLmlzRW1wdHkoY29sV2lkdGhzQ29va2llKSkge1xuICAgICAgY29uc3QgY29sV2lkdGhzID0gSlNPTi5wYXJzZShjb2xXaWR0aHNDb29raWUpO1xuICAgICAgXy5mb3JFYWNoKGNvbFdpZHRocywgKGNvbFdpZHRoLCBjb2xJZCkgPT4ge1xuICAgICAgICBfLmZvckVhY2godGhpcy5tZXJnZWRDb2x1bW5EZWZpbml0aW9ucywgKGNvbERlZikgPT4ge1xuICAgICAgICAgIGlmIChjb2xEZWYuY29sSWQgPT09IGNvbElkKSB7XG4gICAgICAgICAgICBjb2xEZWYud2lkdGggPSBjb2xXaWR0aDtcbiAgICAgICAgICAgIGNvbERlZi5zdXBwcmVzc1NpemVUb0ZpdCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIF9zZXRDb2x1bW5PcmRlckFuZFZpc2liaWxpdHkoKSB7XG4gICAgaWYgKHRoaXMuX3ZpZXcgPT09ICd1cGxvYWQnIHx8IHRoaXMuX3ZpZXcgPT09ICdwcm9jZXNzJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0YWJsZVN0YXRlQ29va2llID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oYHppdGlfJHt0aGlzLnN2Yy50YWJsZUlkfV90YWJsZV9zdGF0ZWApO1xuICAgIGlmICghXy5pc0VtcHR5KHRhYmxlU3RhdGVDb29raWUpIHx8IHR5cGVvZiB0YWJsZVN0YXRlQ29va2llID09PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc3QgY29sU3RhdGVzID0gSlNPTi5wYXJzZSh0YWJsZVN0YXRlQ29va2llKTtcbiAgICAgIGNvbnN0IGNvbHVtbkluZGV4ZXMgPSBbXTtcbiAgICAgIF8uZm9yRWFjaChjb2xTdGF0ZXMsIChjb2xTdGF0ZSkgPT4ge1xuICAgICAgICBfLmZvckVhY2godGhpcy5tZXJnZWRDb2x1bW5EZWZpbml0aW9ucywgKGNvbERlZikgPT4ge1xuICAgICAgICAgIGlmIChjb2xEZWYuY29sSWQgPT09IGNvbFN0YXRlLmNvbElkKSB7XG4gICAgICAgICAgICBjb2x1bW5JbmRleGVzLnB1c2goY29sRGVmKTtcbiAgICAgICAgICAgIGNvbERlZi5oaWRlID0gY29sU3RhdGUuaGlkZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBfLmZvckVhY2godGhpcy5tZXJnZWRDb2x1bW5EZWZpbml0aW9ucywgKGNvbERlZikgPT4ge1xuICAgICAgICBsZXQgY29sRm91bmQgPSBmYWxzZTtcbiAgICAgICAgXy5mb3JFYWNoKGNvbHVtbkluZGV4ZXMsIChjb2xJbmRleCkgPT4ge1xuICAgICAgICAgIGlmIChjb2xEZWYuY29sSWQgPT09IGNvbEluZGV4LmNvbElkKSB7XG4gICAgICAgICAgICBjb2xGb3VuZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFjb2xGb3VuZCkge1xuICAgICAgICAgIGNvbHVtbkluZGV4ZXMucHVzaChjb2xEZWYpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMubWVyZ2VkQ29sdW1uRGVmaW5pdGlvbnMgPSBjb2x1bW5JbmRleGVzO1xuICAgIH1cbiAgfVxuXG4gIF9oYW5kbGVUYWJsZVNjcm9sbChzY3JvbGxlcik6IHZvaWQge1xuICAgIGNvbnN0IHNjcm9sbFdpZHRoID0gJCgnLmFnLWNlbnRlci1jb2xzLWNvbnRhaW5lcicpLndpZHRoKCk7XG4gICAgY29uc3Qgdmlld1dpZHRoID0gJCgnLmFnLWNlbnRlci1jb2xzLXZpZXdwb3J0Jykud2lkdGgoKTtcbiAgICBjb25zdCBzY3JvbGxhYmxlV2lkdGggPSBzY3JvbGxXaWR0aCAtIHZpZXdXaWR0aDtcbiAgICBpZiAoc2Nyb2xsZXIubGVmdCA+IDApIHtcbiAgICAgICQoJy5hZy1waW5uZWQtbGVmdC1jb2xzLWNvbnRhaW5lcicpLmFkZENsYXNzKCdhZy1waW5uZWQtbGVmdC1zaGFkb3cnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgJCgnLmFnLXBpbm5lZC1sZWZ0LWNvbHMtY29udGFpbmVyJykucmVtb3ZlQ2xhc3MoJ2FnLXBpbm5lZC1sZWZ0LXNoYWRvdycpO1xuICAgIH1cbiAgICBpZiAoc2Nyb2xsZXIubGVmdCA8IHNjcm9sbGFibGVXaWR0aCAtIDIpIHtcbiAgICAgICQoJy5hZy1waW5uZWQtcmlnaHQtY29scy1jb250YWluZXInKS5hZGRDbGFzcygnYWctcGlubmVkLXJpZ2h0LXNoYWRvdycpO1xuICAgIH0gZWxzZSB7XG4gICAgICAkKCcuYWctcGlubmVkLXJpZ2h0LWNvbHMtY29udGFpbmVyJykucmVtb3ZlQ2xhc3MoJ2FnLXBpbm5lZC1yaWdodC1zaGFkb3cnKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgI3RhYmxlQ29udGFpbmVyIGNsYXNzPVwiZGF0YS10YWJsZS1jb250YWluZXJcIiAqbmdJZj1cInNob3dUYWJsZTtlbHNlIG5vZGF0YVwiPlxuICAgIDxsaWItdGFibGUtZmlsdGVyLWJhclxuICAgICAgICAgICAgW3N0YXJ0Q291bnRdPVwic3RhcnRDb3VudFwiXG4gICAgICAgICAgICBbZW5kQ291bnRdPVwiZW5kQ291bnRcIlxuICAgICAgICAgICAgW3RvdGFsQ291bnRdPVwidG90YWxDb3VudFwiXG4gICAgICAgICAgICBbY3VycmVudFBhZ2VdPVwiY3VycmVudFBhZ2VcIlxuICAgID48L2xpYi10YWJsZS1maWx0ZXItYmFyPlxuICAgIDxsaWItdGFibGUtaGlkZGVuLWNvbHVtbnMtYmFyXG4gICAgICAgICAgICAqbmdJZj1cImdyaWRSZW5kZXJlZCAmJiBzaG93RmlsdGVyQmFyXCJcbiAgICAgICAgICAgIFtoaWRkZW5Db2x1bW5zXT1cImhpZGRlbkNvbHVtbnNcIlxuICAgICAgICAgICAgKGNvbHVtblZpc2liaWxpdHlDaGFuZ2VkKT1cImNvbHVtblZpc2liaWxpdHlDaGFuZ2VkKCRldmVudClcIlxuICAgID48L2xpYi10YWJsZS1oaWRkZW4tY29sdW1ucy1iYXI+XG4gICAgPGRpdiAocmVzaXplKT1cInJlc2l6ZUdyaWRDb2x1bW5zRGVib3VuY2VkKCRldmVudClcIiBjbGFzcz1cInppdGktYWctZ3JpZFwiIGlkPVwiSXRlbVRhYmxlXCI+XG4gICAgICAgIDxhZy1ncmlkLWFuZ3VsYXJcbiAgICAgICAgICAgICNuZkFnR3JpZFxuICAgICAgICAgICAgW2NvbHVtbkRlZnNdPVwibWVyZ2VkQ29sdW1uRGVmaW5pdGlvbnNcIlxuICAgICAgICAgICAgW2NvbXBvbmVudHNdPVwiZnJhbWV3b3JrQ29tcG9uZW50c1wiXG4gICAgICAgICAgICBbZ2V0RGF0YVBhdGhdPVwic3ZjLmdldERhdGFQYXRoXCJcbiAgICAgICAgICAgIFtnZXRSb3dJZF09XCJzdmMuZ2V0Um93Tm9kZUlkXCJcbiAgICAgICAgICAgIFtncmlkT3B0aW9uc109XCJncmlkT3B0aW9uc1wiXG4gICAgICAgICAgICBbbW9kdWxlc109XCJncmlkTW9kdWxlc1wiXG4gICAgICAgICAgICBbcm93RGF0YV09XCJyb3dEYXRhXCJcbiAgICAgICAgICAgIFt0b29sdGlwSGlkZURlbGF5XT1cIjIwMDAwXCJcbiAgICAgICAgICAgIFt0b29sdGlwU2hvd0RlbGF5XT1cIjBcIlxuICAgICAgICAgICAgKGdyaWRSZWFkeSk9XCJvbkdyaWRSZWFkeSgkZXZlbnQpXCJcbiAgICAgICAgICAgIGNsYXNzPVwieml0aS1hZy1ncmlkLXRhYmxlIGFnLXRoZW1lLWFscGluZSByb3dzXCJcbiAgICAgICAgICAgIGlkPVwiSXRlbUdyaWRcIlxuICAgICAgICA+XG4gICAgICAgIDwvYWctZ3JpZC1hbmd1bGFyPlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgb3Blbjogb3BlbkhlYWRlck1lbnUgfVwiXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGxlZnQ6IG1lbnVMZWZ0ICsgJ3B4JywgdG9wOiBtZW51VG9wICsgJ3B4JyB9XCJcbiAgICAgICAgICAgIGNsYXNzPVwidE1lbnUgYWN0aW9uLW1lbnUgaGVhZGVyLW1lbnVcIlxuICAgICAgICAgICAgaWQ9XCJIZWFkZXJBY3Rpb25NZW51XCJcbiAgICA+XG4gICAgICAgIDxkaXYgKGNsaWNrKT1cInJlc2V0VGFibGVDb2x1bW5zKClcIiBjbGFzcz1cInRBY3Rpb25Sb3dcIiBpZD1cIlJlc2V0VGFibGVCdXR0b25cIj5SZXN0b3JlIERlZmF1bHQgVGFibGU8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGhlYWRlckFjdGlvbiBvZiBoZWFkZXJBY3Rpb25zXCJcbiAgICAgICAgICAgIChjbGljayk9XCJhY3Rpb25SZXF1ZXN0ZWQuZW1pdCh7IGFjdGlvbjogaGVhZGVyQWN0aW9uLmFjdGlvbiB9KVwiXG4gICAgICAgICAgICBjbGFzcz1cInRBY3Rpb25Sb3dcIlxuICAgICAgICAgICAgaWQ9XCJSZXNldFRhYmxlQnV0dG9uXCJcbiAgICAgICAgPlxuICAgICAgICAgICAge3toZWFkZXJBY3Rpb24ubmFtZSB8fCBoZWFkZXJBY3Rpb24ubGFiZWx9fVxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7IG9wZW46IG9wZW5NZW51IH1cIlxuICAgICAgICAgICAgW25nU3R5bGVdPVwieyBsZWZ0OiBtZW51TGVmdCArICdweCcsIHRvcDogbWVudVRvcCArICdweCcgfVwiXG4gICAgICAgICAgICBjbGFzcz1cInRNZW51IGFjdGlvbi1tZW51IGl0ZW0tbWVudVwiXG4gICAgICAgICAgICBpZD1cIlJvd0FjdGlvbk1lbnVcIlxuICAgICAgICAgICAgI2NvbnRleHRNZW51XG4gICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG1lbnVJdGVtIG9mIG1lbnVJdGVtc1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGlvblJlcXVlc3RlZC5lbWl0KHsgYWN0aW9uOiBtZW51SXRlbS5hY3Rpb24sIGl0ZW06IHNlbGVjdGVkSXRlbSB9KVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydtZW51LWl0ZW0taGlkZGVuJzogIXNlbGVjdGVkSXRlbS5hY3Rpb25MaXN0LmluY2x1ZGVzKG1lbnVJdGVtLmFjdGlvbikgfHwgKG1lbnVJdGVtLmlzSGlkZGVuICYmIG1lbnVJdGVtLmlzSGlkZGVuKHNlbGVjdGVkSXRlbSkpfVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0QWN0aW9uUm93XCJcbiAgICAgICAgICAgICAgICBpZD1cIlRhYmxlQWN0aW9uQnV0dG9uX3t7bWVudUl0ZW0uYWN0aW9ufX1cIlxuICAgICAgICA+XG4gICAgICAgICAgICB7e21lbnVJdGVtLm5hbWUgfHwgbWVudUl0ZW0ubGFiZWx9fVxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICAgICAgICAoY2xpY2tPdXRzaWRlKT1cImNsb3NlSGVhZGVyRmlsdGVyKCRldmVudClcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBvcGVuOiBzaG93RmlsdGVyT3B0aW9ucyB9XCJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgbGVmdDogbWVudUxlZnQgKyAncHgnLCB0b3A6IG1lbnVUb3AgKyAncHgnIH1cIlxuICAgICAgICAgICAgY2xhc3M9XCJ0TWVudSBhY3Rpb24tbWVudSBoZWFkZXItbWVudVwiXG4gICAgICAgICAgICBpZD1cIkhlYWRlckZpbHRlck9wdGlvbnNcIlxuICAgID5cbiAgICAgICAgPGRpdiAoY2xpY2spPVwiYXBwbHlGaWx0ZXIoJGV2ZW50LCBmaWx0ZXIpXCIgKm5nRm9yPVwibGV0IGZpbHRlciBvZiBmaWx0ZXJPcHRpb25zXCIgY2xhc3M9XCJ0QWN0aW9uUm93XCIgW25nQ2xhc3NdPVwieydoYXMtaWNvbic6IGZpbHRlci5pY29ufVwiIFtpZF09XCJmaWx0ZXIuY29sdW1uSWRcIj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmlsdGVyLmJ1YmJsZUNsYXNzXCIgW25nQ2xhc3NdPVwiZmlsdGVyLmJ1YmJsZUNsYXNzXCIgY2xhc3M9XCJidWJibGVcIj5cbiAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiZmlsdGVyLnNob3dMb2FkZXJcIiBjbGFzcz1cImNpcmN1bGFyXCIgdmlld0JveD1cIjI1IDI1IDUwIDUwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBhdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN4PVwiNTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN5PVwiNTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByPVwiMjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1taXRlcmxpbWl0PVwiMTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjNcIlxuICAgICAgICAgICAgICAgICAgICA+PC9jaXJjbGU+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZpbHRlci5pY29uXCIgY2xhc3M9XCJvcy1pY29uIHt7ZmlsdGVyLmljb259fVwiPjwvc3Bhbj5cbiAgICAgICAgICAgIHt7IGZpbHRlci5sYWJlbCB9fVxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2ICpuZ0lmPVwic2hvd0RhdGVUaW1lUGlja2VyXCIgY2xhc3M9XCJkYXRlLXRpbWUtY29udGFpbmVyIGRhdGEtdGFibGUtZGF0ZS10aW1lXCIgW25nU3R5bGVdPVwieyBsZWZ0OiBtZW51TGVmdCArICdweCcsIHRvcDogbWVudVRvcCArICdweCcgfVwiIChjbGlja091dHNpZGUpPVwiY2xvc2VEYXRlVGltZSgkZXZlbnQpXCI+XG4gICAgPHAtY2FsZW5kYXJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZGF0ZVZhbHVlXCJcbiAgICAgICAgICAgIChvblNlbGVjdCk9XCJzZXREYXRlUmFuZ2VGaWx0ZXIoJ2N1c3RvbScpXCJcbiAgICAgICAgICAgIGRhdGVGb3JtYXQ9XCJtbS9kZC95eVwiXG4gICAgICAgICAgICBzZWxlY3Rpb25Nb2RlPVwicmFuZ2VcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgVGltZSBSYW5nZVwiXG4gICAgICAgICAgICAjY2FsZW5kYXJcbiAgICA+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItYnV0dG9uLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidG9nZ2xlQnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntzZWxlY3RlZDogc2VsZWN0ZWRSYW5nZSA9PT0gJ2hvdXInfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2V0RGF0ZVJhbmdlRmlsdGVyKCdob3VyJylcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgTGFzdCBIb3VyXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0b2dnbGVCdXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNldERhdGVSYW5nZUZpbHRlcignZGF5JylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie3NlbGVjdGVkOiBzZWxlY3RlZFJhbmdlID09PSAnZGF5J31cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgTGFzdCBEYXlcbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRvZ2dsZUJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2V0RGF0ZVJhbmdlRmlsdGVyKCd3ZWVrJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie3NlbGVjdGVkOiBzZWxlY3RlZFJhbmdlID09PSAnd2Vlayd9XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIExhc3QgV2Vla1xuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidG9nZ2xlQnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZXREYXRlUmFuZ2VGaWx0ZXIoJ21vbnRoJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie3NlbGVjdGVkOiBzZWxlY3RlZFJhbmdlID09PSAnbW9udGgnfVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICBMYXN0IE1vbnRoXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L3AtY2FsZW5kYXI+XG48L2Rpdj5cblxuPGRpdiAqbmdJZj1cInNob3dUYWdTZWxlY3RvclwiIGNsYXNzPVwidGFnLXNlbGVjdG9yLWNvbnRhaW5lciBkYXRhLXRhYmxlLXRhZy1zZWxlY3RvclwiIFtuZ1N0eWxlXT1cInsgbGVmdDogbWVudUxlZnQgKyAncHgnLCB0b3A6IG1lbnVUb3AgKyAncHgnIH1cIiAoY2xpY2tPdXRzaWRlKT1cImNsb3NlVGFnU2VsZWN0b3IoJGV2ZW50KVwiPlxuICAgIDxkaXYgY2xhc3M9XCJidXR0b25CYWxsIGljb24tY2xvc2VcIiAoY2xpY2spPVwiY2xvc2VUYWdTZWxlY3RvcigkZXZlbnQpXCI+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInRhZy1zZWxlY3Rvci1sYWJlbFwiPlxuICAgICAgICA8c3Bhbj5TZWxlY3QgYW4gQXR0cmlidXRlOjwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8bGliLXRhZy1zZWxlY3RvclxuICAgICAgICBbZm9jdXNPbkluaXRdPVwidHJ1ZVwiXG4gICAgICAgIFthdmFpbGFibGVSb2xlQXR0cmlidXRlc109XCJyb2xlQXR0cmlidXRlc1wiXG4gICAgICAgIFthdmFpbGFibGVOYW1lZEF0dHJpYnV0ZXNdPVwibmFtZWRBdHRyaWJ1dGVzXCJcbiAgICAgICAgWyhzZWxlY3RlZFJvbGVBdHRyaWJ1dGVzKV09XCJzZWxlY3RlZFJvbGVBdHRyaWJ1dGVzXCJcbiAgICAgICAgWyhzZWxlY3RlZE5hbWVkQXR0cmlidXRlcyldPVwic2VsZWN0ZWROYW1lZEF0dHJpYnV0ZXNcIlxuICAgICAgICAoc2VsZWN0ZWROYW1lZEF0dHJpYnV0ZXNDaGFuZ2UpPVwidGFnU2VsZWN0aW9uQ2hhbmdlZCgkZXZlbnQsIGZhbHNlKVwiXG4gICAgICAgIChzZWxlY3RlZFJvbGVBdHRyaWJ1dGVzQ2hhbmdlKT1cInRhZ1NlbGVjdGlvbkNoYW5nZWQoJGV2ZW50LCB0cnVlKVwiXG4gICAgPjwvbGliLXRhZy1zZWxlY3Rvcj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNub2RhdGE+XG4gICAgPGxpYi1uby1pdGVtc1xuICAgICAgICAoY2xpY2tFbWl0KT1cIm9wZW5DcmVhdGUoKVwiXG4gICAgICAgIFtpbWFnZV09XCJub0l0ZW1zSW1hZ2VcIlxuICAgICAgICBbaXNFbXB0eV09XCIhcm93RGF0YSB8fCByb3dEYXRhLmxlbmd0aCA9PT0gMFwiXG4gICAgICAgIFt0eXBlTmFtZV09XCJ0aGlzLmVudGl0eVR5cGVMYWJlbFwiXG4gICAgPjwvbGliLW5vLWl0ZW1zPlxuPC9uZy10ZW1wbGF0ZT4iXX0=
881
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96aXRpLWNvbnNvbGUtbGliL3NyYy9saWIvZmVhdHVyZXMvZGF0YS10YWJsZS9kYXRhLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9mZWF0dXJlcy9kYXRhLXRhYmxlL2RhdGEtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0VBY0U7QUFFRixPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixpQ0FBaUM7QUFDakMsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ3ZCLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUN2QixPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUE7QUFFM0IsT0FBTyxFQUFDLDJCQUEyQixFQUFDLE1BQU0sc0VBQXNFLENBQUM7QUFDakgsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0sb0VBQW9FLENBQUM7QUFDOUcsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sZ0VBQWdFLENBQUM7QUFDeEcsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sdURBQXVELENBQUM7QUFDL0YsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sbURBQW1ELENBQUM7QUFFekYsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0scURBQXFELENBQUM7QUFFNUYsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFFbEMsTUFLYSxrQkFBa0I7SUFRN0IsSUFBYSxPQUFPLENBQUUsRUFBVTtRQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLE9B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c0JBQTdCLEtBQUs7Z0JBU08sWUFBWTtzQkFBeEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gICAgQ29weXJpZ2h0IE5ldEZvdW5kcnkgSW5jLlxuXG4gICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vLyBJbXBvcnQgdGhlIHJlc2l6ZWQgZXZlbnQgbW9kZWxcbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnXG5cbmltcG9ydCB7VGFibGVDb2x1bW5EZWZhdWx0Q29tcG9uZW50fSBmcm9tIFwiLi9jb2x1bW4taGVhZGVycy90YWJsZS1jb2x1bW4tZGVmYXVsdC90YWJsZS1jb2x1bW4tZGVmYXVsdC5jb21wb25lbnRcIjtcbmltcG9ydCB7VGFibGVDb2x1bW5TZWxlY3RDb21wb25lbnR9IGZyb20gXCIuL2NvbHVtbi1oZWFkZXJzL3RhYmxlLWNvbHVtbi1zZWxlY3QvdGFibGUtY29sdW1uLXNlbGVjdC5jb21wb25lbnRcIjtcbmltcG9ydCB7VGFibGVDb2x1bW5NZW51Q29tcG9uZW50fSBmcm9tIFwiLi9jb2x1bW4taGVhZGVycy90YWJsZS1jb2x1bW4tbWVudS90YWJsZS1jb2x1bW4tbWVudS5jb21wb25lbnRcIjtcbmltcG9ydCB7VGFibGVDZWxsU2VsZWN0Q29tcG9uZW50fSBmcm9tIFwiLi9jZWxscy90YWJsZS1jZWxsLXNlbGVjdC90YWJsZS1jZWxsLXNlbGVjdC5jb21wb25lbnRcIjtcbmltcG9ydCB7VGFibGVDZWxsTWVudUNvbXBvbmVudH0gZnJvbSBcIi4vY2VsbHMvdGFibGUtY2VsbC1tZW51L3RhYmxlLWNlbGwtbWVudS5jb21wb25lbnRcIjtcbmltcG9ydCB7RGF0YVRhYmxlU2VydmljZX0gZnJvbSBcIi4vZGF0YS10YWJsZS5zZXJ2aWNlXCI7XG5pbXBvcnQge1RhYmxlQ2VsbFRva2VuQ29tcG9uZW50fSBmcm9tIFwiLi9jZWxscy90YWJsZS1jZWxsLXRva2VuL3RhYmxlLWNlbGwtdG9rZW4uY29tcG9uZW50XCI7XG5pbXBvcnQge0RhdGFUYWJsZUZpbHRlclNlcnZpY2UsIEZpbHRlck9ian0gZnJvbSBcIi4vZGF0YS10YWJsZS1maWx0ZXIuc2VydmljZVwiO1xuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gXCJyeGpzXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1kYXRhLXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGEtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRhLXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIERhdGFUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0IHtcbiAgQElucHV0KCkgcm93RGF0YTogYW55O1xuICBASW5wdXQoKSBleHBhbmRSb3dEYXRhOiBhbnk7XG4gIEBJbnB1dCgpIGNvbGxhcHNlUm93RGF0YTogYW55O1xuICBASW5wdXQoKSByb3dWYWxpZGF0aW9uOiBhbnk7XG4gIC8vIEBJbnB1dCgpIGNvbHVtbkZpbHRlcnM6IGFueTtcbiAgQElucHV0KCkgaXNUaW1lU2VhcmNoQXZhaWxhYmxlOiBib29sZWFuO1xuICBASW5wdXQoKSBpc0xvYWRpbmc6IGFueTtcbiAgQElucHV0KCkgc2V0IHRhYmxlSWQoIGlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLnN2Yy50YWJsZUlkID0gaWQ7XG4gICAgdGhpcy51cGRhdGVFbnRpdHlUeXBlTGFiZWwoKVxuICB9XG4gIEBJbnB1dCgpIG9wdGlvbnMgPSB7bm9TZWxlY3Q6IGZhbHNlLCBub01lbnU6IGZhbHNlfTtcbiAgQElucHV0KCkgdmFsaWRhdGVTZXJ2aWNlOiBhbnk7XG4gIEBJbnB1dCgpIHJvd3NUb2dnbGVkOiBhbnk7XG4gIEBJbnB1dCgpIHRhYmxlUmVmcmVzaENvdW50OiBhbnk7XG4gIEBJbnB1dCgpIHNldCB2aWV3KHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLl92aWV3ID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KCkgc2VydmVyU2lkZURhdGFTb3VyY2U6IGFueTtcbiAgQElucHV0KCkgYWxsb3dEb3dubG9hZDogYm9vbGVhbjtcbiAgLy8gQElucHV0KCkgZmlsdGVyczogYW55O1xuICBASW5wdXQoKSBzdGFydENvdW50OiBhbnk7XG4gIEBJbnB1dCgpIGVuZENvdW50OiBhbnk7XG4gIEBJbnB1dCgpIHRvdGFsQ291bnQ6IGFueTtcbiAgQElucHV0KCkgZW1wdHlNc2c6IGFueTtcbiAgQElucHV0KCkgZmlsdGVyQXBwbGllZCA9IGZhbHNlO1xuICBASW5wdXQoKSBtZW51SXRlbXM6IGFueSA9IFtdO1xuICBASW5wdXQoKSBoZWFkZXJBY3Rpb25zOiBhbnkgPSBbXTtcbiAgQElucHV0KCkgbm9JdGVtc0NsYXNzOiBhbnkgPSAnYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2Fzc2V0cy9zdmdzL05vX0NsaWVudHMuc3ZnXCIpJztcbiAgQElucHV0KCkgZW50aXR5VHlwZU5hbWUgPSAnSWRlbnRpdGllcyc7XG4gIEBJbnB1dCgpIHNob3dOb0l0ZW1zQWRkID0gdHJ1ZTtcbiAgQElucHV0KCkgY3VycmVudFBhZ2UgPSAxO1xuICBASW5wdXQoKSBub0l0ZW1zSW1hZ2UgPSAnbm9kYXRhJztcbiAgQE91dHB1dCgpIGFjdGlvblJlcXVlc3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBhY3Rpb246IHN0cmluZzsgaXRlbT86IGFueSB9PigpO1xuICAvLyBAT3V0cHV0KCkgZmlsdGVyQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGdyaWRSZWFkeSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGRyYWdTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGRyYWdMZWF2ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHBhZ2VDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIF92aWV3ID0gJ2xpc3QnO1xuICBmcmFtZXdvcmtDb21wb25lbnRzO1xuICBncmlkTW9kdWxlcztcbiAgZ3JpZE9wdGlvbnM7XG4gIHZpc2libGVDb2x1bW5zO1xuICBoaWRkZW5Db2x1bW5zO1xuICB2aXNpYmxlQ29sdW1uSWRzO1xuICBoaWRkZW5Db2x1bW5JZHM7XG4gIG1lcmdlZENvbHVtbkRlZmluaXRpb25zO1xuICBvcGVuTWVudTtcbiAgb3BlbkhlYWRlck1lbnU7XG4gIGZpbHRlck9wdGlvbnM6IGFueSA9IFtdO1xuICBzaG93RmlsdGVyT3B0aW9ucztcbiAgc2hvd0RhdGVUaW1lUGlja2VyO1xuICBzaG93VGFnU2VsZWN0b3I7XG4gIGF0dHJpYnV0ZXNDb2x1bW4gPSAnJztcbiAgZGF0ZVRpbWVDb2x1bW4gPSAnJztcbiAgZGF0ZVRpbWVGaWx0ZXJMYWJlbCA9ICcnO1xuICBzZWxlY3RlZFJhbmdlID0gJyc7XG4gIGRhdGVWYWx1ZTtcbiAgbWVudUxlZnQ7XG4gIG1lbnVUb3A7XG4gIGdyaWRSZW5kZXJlZDtcbiAgcmVzaXplSGFuZGxlckluaXQgPSBmYWxzZTtcbiAgcmVzaXplR3JpZENvbHVtbnNEZWJvdW5jZWQ7XG4gIHNlbGVjdGVkSXRlbTogYW55ID0ge1xuICAgIGFjdGlvbkxpc3Q6IFtdLFxuICB9O1xuICBlbnRpdHlUeXBlTGFiZWwgPSAnJ1xuICBjb2x1bW5GaWx0ZXJzOmFueSA9IHt9O1xuICByb2xlQXR0cmlidXRlczogYW55W10gPSBbXTtcbiAgbmFtZWRBdHRyaWJ1dGVzOiBhbnlbXSA9IFtdO1xuICBzZWxlY3RlZFJvbGVBdHRyaWJ1dGVzOiBhbnlbXSA9IFtdO1xuICBzZWxlY3RlZE5hbWVkQXR0cmlidXRlczogYW55W10gPSBbXTtcbiAgLy8gYXBwbGllZEZpbHRlcnMgPSBbXTtcbiAgYXV0b0dyb3VwQ29sdW1uRGVmO1xuICBjdXJyZW50SGVhZGVyQ29tcG9uZW50UGFyYW1zOiBhbnkgPSB7fTtcbiAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgcHVibGljIG1lbnVDb2x1bW5EZWZpbml0aW9uID0ge1xuICAgIGNvbElkOiAneml0aS1hZy1tZW51JyxcbiAgICBmaWVsZDogJ3ppdGktYWctbWVudScsXG4gICAgcmVzaXphYmxlOiBmYWxzZSxcbiAgICB3aWR0aDogNTAsXG4gICAgc29ydGFibGU6IGZhbHNlLFxuICAgIGxvY2tQb3NpdGlvbjogdHJ1ZSxcbiAgICBzdXBwcmVzc01vdmFibGU6IHRydWUsXG4gICAgaGVhZGVyQ2xhc3M6ICdtZW51SGVhZGVyJyxcbiAgICBjZWxsQ2xhc3M6ICd0Q29sIGNlbGxNZW51JyxcbiAgICBjZWxsUmVuZGVyZXI6ICdjZWxsTWVudUNvbXBvbmVudCcsXG4gICAgY2VsbFJlbmRlcmVyUGFyYW1zOiB7XG4gICAgICBvcGVuTWVudTogKCRldmVudCwgaXRlbSkgPT4ge1xuICAgICAgICB0aGlzLm9wZW5BY3Rpb25NZW51KCRldmVudCwgaXRlbSk7XG4gICAgICB9LFxuICAgICAgY2xvc2VNZW51OiAoZXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy5jbG9zZUFjdGlvbk1lbnUoKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICBzdXBwcmVzc1NpemVUb0ZpdDogdHJ1ZSxcbiAgICBwaW5uZWQ6ICdyaWdodCcsXG4gICAgaGVhZGVyQ29tcG9uZW50OiBUYWJsZUNvbHVtbk1lbnVDb21wb25lbnQsXG4gICAgaGVhZGVyQ29tcG9uZW50UGFyYW1zOiB7XG4gICAgICBvcGVuSGVhZGVyTWVudTogKCRldmVudCkgPT4ge1xuICAgICAgICB0aGlzLm9wZW5IZWFkZXJBY3Rpb25NZW51KCRldmVudCk7XG4gICAgICB9LFxuICAgICAgY2xvc2VNZW51OiAoZXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy5jbG9zZUFjdGlvbk1lbnUoKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbiAgcHJpdmF0ZSBfaW5pdGlhbENvbHVtbkRlZnM7XG4gIHByaXZhdGUgX3JlZnJlc2hDZWxsc0RlYm91bmNlZDtcbiAgcHJpdmF0ZSBfb25Db2x1bW5zUmVzaXplZERlYm91bmNlZDtcbiAgcHJpdmF0ZSBfc2F2ZUNvbHVtblN0YXRlRGVib3VuY2VkO1xuXG4gIHByaXZhdGUgc2VsZWN0Q29sdW1uRGVmaW5pdGlvbiA9IHtcbiAgICBjb2xJZDogJ3ppdGktYWctc2VsZWN0ZWQnLFxuICAgIGZpZWxkOiAneml0aS1hZy1zZWxlY3RlZCcsXG4gICAgc3VwcHJlc3NTaXplVG9GaXQ6IHRydWUsXG4gICAgbG9ja1Bvc2l0aW9uOiB0cnVlLFxuICAgIHN1cHByZXNzTW92YWJsZTogdHJ1ZSxcbiAgICByZXNpemFibGU6IGZhbHNlLFxuICAgIHBpbm5lZDogJ2xlZnQnLFxuICAgIHdpZHRoOiA2MCxcbiAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgaGVhZGVyQ2xhc3M6ICdzZWxlY3RIZWFkZXInLFxuICAgIGNlbGxDbGFzczogJ3RDb2wnLFxuICAgIGNlbGxSZW5kZXJlcjogJ2NlbGxTZWxlY3RDb21wb25lbnQnLFxuICAgIGNlbGxSZW5kZXJlclBhcmFtczoge1xuICAgICAgdG9nZ2xlSXRlbTogKGl0ZW0pID0+IHtcbiAgICAgICAgaXRlbS5zZWxlY3RlZCA9ICFpdGVtLnNlbGVjdGVkO1xuICAgICAgICB0aGlzLnN2Yy5ncmlkT2JqLmFwaS56aXRpQWxsVG9nZ2xlZCA9IF8uZXZlcnkodGhpcy5yb3dEYXRhLCB7c2VsZWN0ZWQ6IHRydWV9KTtcbiAgICAgICAgXy5kZWZlcigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zdmMuZ3JpZE9iai5hcGkucmVmcmVzaENlbGxzKHtmb3JjZTogdHJ1ZX0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hY3Rpb25SZXF1ZXN0ZWQuZW1pdCh7YWN0aW9uOiAndG9nZ2xlSXRlbScsIGl0ZW06IGl0ZW19KTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICBoZWFkZXJDb21wb25lbnQ6IFRhYmxlQ29sdW1uU2VsZWN0Q29tcG9uZW50LFxuICAgIGhlYWRlckNvbXBvbmVudFBhcmFtczoge1xuICAgICAgdG9nZ2xlQWxsOiAoc2VsZWN0ZWQ6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnN2Yy5ncmlkT2JqKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIF8uZm9yRWFjaCh0aGlzLnJvd0RhdGEsIChyb3cpID0+IHtcbiAgICAgICAgICByb3cuc2VsZWN0ZWQgPSBzZWxlY3RlZDtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWN0aW9uUmVxdWVzdGVkLmVtaXQoe2FjdGlvbjogJ3RvZ2dsZUFsbCd9KTtcbiAgICAgICAgXy5kZWZlcigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zdmMuZ3JpZE9iai5hcGkucmVmcmVzaENlbGxzKHtmb3JjZTogdHJ1ZX0pO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICBAVmlld0NoaWxkKCdjYWxlbmRhcicsIHsgc3RhdGljOiBmYWxzZSB9KSBjYWxlbmRhcjogYW55O1xuICBAVmlld0NoaWxkKCdjb250ZXh0TWVudScpIGNvbnRleHRNZW51O1xuICBAVmlld0NoaWxkKCd0YWJsZUNvbnRhaW5lcicpIHRhYmxlQ29udGFpbmVyOiBFbGVtZW50UmVmO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBzdmM6IERhdGFUYWJsZVNlcnZpY2UsIHByaXZhdGUgdGFibGVGaWx0ZXJTZXJ2aWNlOiBEYXRhVGFibGVGaWx0ZXJTZXJ2aWNlKSB7XG4gICAgdGhpcy5yZXNpemVHcmlkQ29sdW1uc0RlYm91bmNlZCA9IF8uZGVib3VuY2UodGhpcy5zdmMucmVzaXplR3JpZENvbHVtbnMuYmluZCh0aGlzLnN2YyksIDIwLCB7bGVhZGluZzogdHJ1ZX0pO1xuICAgIHRoaXMuX3JlZnJlc2hDZWxsc0RlYm91bmNlZCA9IF8uZGVib3VuY2UodGhpcy5zdmMucmVmcmVzaENlbGxzLmJpbmQodGhpcy5zdmMpLCA1MCk7XG4gICAgdGhpcy5fb25Db2x1bW5zUmVzaXplZERlYm91bmNlZCA9IF8uZGVib3VuY2UodGhpcy5zdmMub25Db2x1bW5zUmVzaXplZC5iaW5kKHRoaXMuc3ZjKSwgNDAwKTtcbiAgICB0aGlzLl9zYXZlQ29sdW1uU3RhdGVEZWJvdW5jZWQgPSBfLmRlYm91bmNlKHRoaXMuc3ZjLnNhdmVDb2x1bW5TdGF0ZS5iaW5kKHRoaXMuc3ZjKSwgNDAwKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NvbHVtbkRlZmluaXRpb25zO1xuXG4gIEBJbnB1dCgpIHNldCBjb2x1bW5EZWZpbml0aW9ucyh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5fY29sdW1uRGVmaW5pdGlvbnMgPSB2YWx1ZTtcblxuICB9XG5cbiAgZ2V0IHNob3dGaWx0ZXJCYXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3ZpZXcgIT09ICd1cGxvYWQnICYmIHRoaXMuX3ZpZXcgIT09ICdwcm9jZXNzJztcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCByZWZyZXNoQ291bnQodmFsdWU6IG51bWJlcikge1xuICAgIGlmICghdGhpcy5zdmMuZ3JpZE9iaikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBfLmRlZmVyKCgpID0+IHtcbiAgICAgIHRoaXMuc3ZjLmdyaWRPYmouYXBpLnJlZHJhd1Jvd3MoKTtcbiAgICAgIHRoaXMuc3ZjLmdyaWRPYmouYXBpLnJlZnJlc2hDZWxscyh7Zm9yY2U6IHRydWV9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBzaG93VGFibGUoKSB7XG4gICAgY29uc3QgX3Nob3dUYWJsZSA9IHRoaXMuaXNMb2FkaW5nIHx8IHRoaXMuZmlsdGVyQXBwbGllZCB8fCB0aGlzLnJvd0RhdGE/Lmxlbmd0aCA+IDA7XG4gICAgaWYgKF9zaG93VGFibGUgJiYgIXRoaXMucmVzaXplSGFuZGxlckluaXQpIHtcbiAgICAgIHRoaXMuX2luaXRHcmlkUmVzaXplSGFuZGxlcigpO1xuICAgIH1cbiAgICByZXR1cm4gX3Nob3dUYWJsZTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZnJhbWV3b3JrQ29tcG9uZW50cyA9IHtcbiAgICAgIGNlbGxTZWxlY3RDb21wb25lbnQ6IFRhYmxlQ2VsbFNlbGVjdENvbXBvbmVudCxcbiAgICAgIGNlbGxNZW51Q29tcG9uZW50OiBUYWJsZUNlbGxNZW51Q29tcG9uZW50LFxuICAgICAgY2VsbFRva2VuQ29tcG9uZW50OiBUYWJsZUNlbGxUb2tlbkNvbXBvbmVudCxcbiAgICAgIGhlYWRlckNlbGxTZWxlY3RDb21wb25lbnQ6IFRhYmxlQ29sdW1uU2VsZWN0Q29tcG9uZW50LFxuICAgICAgaGVhZGVySGVhZGVyTWVudUNvbXBvbmVudDogVGFibGVDb2x1bW5NZW51Q29tcG9uZW50LFxuICAgICAgaGVhZGVyRGVmYXVsdENvbXBvbmVudDogVGFibGVDb2x1bW5EZWZhdWx0Q29tcG9uZW50LFxuICAgIH07XG5cbiAgICB0aGlzLmF1dG9Hcm91cENvbHVtbkRlZiA9IHtcbiAgICAgIGZpZWxkOiAncHJvY2Vzc1RyZWUnLFxuICAgICAgaGVhZGVyTmFtZTogJ1Byb2Nlc3MgTmFtZScsXG4gICAgICBjZWxsUmVuZGVyZXI6ICdjZWxsUmVzb3VyY2VTdGF0dXNDb21wb25lbnQnLFxuICAgICAgcmVzaXphYmxlOiB0cnVlLFxuICAgICAgY2VsbFJlbmRlcmVyUGFyYW1zOiB7cmVzb3VyY2VUeXBlOiAncHJvY2Vzcy1leGVjdXRpb24nfSxcbiAgICAgIGhlYWRlckNvbXBvbmVudEZyYW1ld29yazogVGFibGVDb2x1bW5EZWZhdWx0Q29tcG9uZW50LFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5fY29sdW1uRGVmaW5pdGlvbnMpIHtcbiAgICAgIHRoaXMuX2FkZENvbHVtbkV2ZW50cygpO1xuICAgICAgdGhpcy5fYWRkRGVmYXVsdENvbHVtbkRlZnMoKTtcbiAgICAgIHRoaXMuX3N0b3JlSW5pdGlhbENvbHVtbkRlZnMoKTtcbiAgICAgIHRoaXMuX3NldENvbHVtbldpZHRocygpO1xuICAgICAgdGhpcy5fc2V0Q29sdW1uT3JkZXJBbmRWaXNpYmlsaXR5KCk7XG4gICAgICB0aGlzLl9pbml0Q29sdW1uVmlzaWJpbGl0eSgpO1xuICAgICAgdGhpcy5faW5pdEdyaWRPcHRpb25zKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3ZjLmdyaWRPYmogJiYgY2hhbmdlcy5yb3dEYXRhKSB7XG4gICAgICB0aGlzLl9yZWZyZXNoQ2VsbHNEZWJvdW5jZWQoY2hhbmdlcy5yb3dEYXRhKTtcbiAgICB9XG4gIH1cblxuICBjb2x1bW5WaXNpYmlsaXR5Q2hhbmdlZChldmVudCkge1xuICAgIHRoaXMuc2V0Q29sdW1uVmlzaWJpbGl0eUNvbHVtbihldmVudD8uY29sdW1uLCBldmVudD8udmlzaWJsZSk7XG4gIH1cblxuICBvcGVuQWN0aW9uTWVudShldmVudCwgaXRlbSk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gaXRlbTtcbiAgICB0aGlzLm9wZW5NZW51ID0gdHJ1ZTtcbiAgICBfLmRlbGF5KCgpID0+IHtcbiAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuY29udGV4dE1lbnU/Lm5hdGl2ZUVsZW1lbnQ/Lm9mZnNldEhlaWdodCB8fCAxMjA7XG4gICAgICBjb25zdCB3aW5kb3dPZmZzZXQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLSBldmVudC5jbGllbnRZO1xuICAgICAgY29uc3QgbWVudU9mZnNldCA9IHdpbmRvd09mZnNldCA8PSBoZWlnaHQgPyBoZWlnaHQgLSB3aW5kb3dPZmZzZXQgOiAwO1xuICAgICAgdGhpcy5tZW51TGVmdCA9IGV2ZW50LmNsaWVudFggLSAxMDA7XG4gICAgICB0aGlzLm1lbnVUb3AgPSBldmVudC5jbGllbnRZICsgNSAtIG1lbnVPZmZzZXQ7XG4gICAgfSwgMTApO1xuICB9XG5cbiAgb25HcmlkUmVhZHkocGFyYW1zKSB7XG4gICAgdGhpcy5ncmlkUmVhZHkuZW1pdChwYXJhbXMpO1xuICB9XG5cbiAgcmVzZXRUYWJsZUNvbHVtbnMoKSB7XG4gICAgaWYgKCF0aGlzLnN2Yy5ncmlkT2JqKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubWVyZ2VkQ29sdW1uRGVmaW5pdGlvbnMgPSBfLmNsb25lRGVlcCh0aGlzLl9pbml0aWFsQ29sdW1uRGVmcyk7XG4gICAgdGhpcy5zdmMuZ3JpZE9iai5hcGkuc2V0Q29sdW1uRGVmcyh0aGlzLm1lcmdlZENvbHVtbkRlZmluaXRpb25zKTtcbiAgICB0aGlzLnN2Yy5yZXNldENvb2tpZUNvbmZpZygpO1xuICAgIHRoaXMuc3ZjLmdyaWRPYmouY29sdW1uQXBpLnJlc2V0Q29sdW1uU3RhdGUoKTtcbiAgICBfLmRlZmVyKCgpID0+IHtcbiAgICAgIHRoaXMuX3VwZGF0ZUhpZGRlbkNvbHVtbnMoKTtcbiAgICAgIHRoaXMuc3ZjLnJlc2l6ZUdyaWRDb2x1bW5zKCk7XG4gICAgfSk7XG4gIH1cblxuICBvcGVuSGVhZGVyQWN0aW9uTWVudShldmVudCk6IHZvaWQge1xuICAgIHRoaXMubWVudUxlZnQgPSBldmVudC5jbGllbnRYIC0gMTUwO1xuICAgIHRoaXMubWVudVRvcCA9IGV2ZW50LmNsaWVudFkgKyA1O1xuICAgIF8uZGVsYXkoKCkgPT4ge1xuICAgICAgdGhpcy5vcGVuSGVhZGVyTWVudSA9IHRydWU7XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIGNsb3NlQWN0aW9uTWVudSgpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IHtcbiAgICAgIGFjdGlvbkxpc3Q6IFtdLFxuICAgIH07XG4gICAgdGhpcy5vcGVuTWVudSA9IGZhbHNlO1xuICAgIHRoaXMub3BlbkhlYWRlck1lbnUgPSBmYWxzZTtcbiAgfVxuXG4gIG9wZW5IZWFkZXJGaWx0ZXIoZXZlbnQsIG9wdGlvbnMsIHR5cGUsIGNvbHVtbklkLCBmaWx0ZXJMYWJlbCwgaGVhZGVyQ29tcG9uZW50UGFyYW1zKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJPcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLm1lbnVMZWZ0ID0gZXZlbnQuY2xpZW50WDtcbiAgICB0aGlzLm1lbnVUb3AgPSBldmVudC5jbGllbnRZICsgMTA7XG4gICAgaWYgKHR5cGUgPT09ICdEQVRFVElNRScpIHtcbiAgICAgIHRoaXMuZGF0ZVRpbWVDb2x1bW4gPSBjb2x1bW5JZDtcbiAgICAgIHRoaXMuZGF0ZVRpbWVGaWx0ZXJMYWJlbCA9IGZpbHRlckxhYmVsIHx8ICdEYXRlOiAnO1xuICAgICAgXy5kZWxheSgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2hvd0RhdGVUaW1lUGlja2VyID0gdHJ1ZTtcbiAgICAgIH0sIDEwKTtcbiAgICAgIF8uZGVsYXkoKCkgPT4ge1xuICAgICAgICB0aGlzLmNhbGVuZGFyLnRvZ2dsZSgpO1xuICAgICAgfSwgMTAwKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdBVFRSSUJVVEUnKSB7XG4gICAgICB0aGlzLmF0dHJpYnV0ZXNDb2x1bW4gPSBjb2x1bW5JZDtcbiAgICAgIHRoaXMucm9sZUF0dHJpYnV0ZXMgPSBoZWFkZXJDb21wb25lbnRQYXJhbXM/LmdldFJvbGVBdHRyaWJ1dGVzKCk7XG4gICAgICB0aGlzLm5hbWVkQXR0cmlidXRlcyA9IGhlYWRlckNvbXBvbmVudFBhcmFtcz8uZ2V0TmFtZWRBdHRyaWJ1dGVzKCk7XG4gICAgICB0aGlzLnNlbGVjdGVkUm9sZUF0dHJpYnV0ZXMgPSBoZWFkZXJDb21wb25lbnRQYXJhbXMuZ2V0U2VsZWN0ZWRSb2xlQXR0cmlidXRlcygpO1xuICAgICAgdGhpcy5zZWxlY3RlZE5hbWVkQXR0cmlidXRlcyA9IGhlYWRlckNvbXBvbmVudFBhcmFtcy5nZXRTZWxlY3RlZE5hbWVkQXR0cmlidXRlcygpO1xuICAgICAgdGhpcy5kYXRlVGltZUZpbHRlckxhYmVsID0gZmlsdGVyTGFiZWw7XG4gICAgICB0aGlzLmN1cnJlbnRIZWFkZXJDb21wb25lbnRQYXJhbXMgPSBoZWFkZXJDb21wb25lbnRQYXJhbXM7XG4gICAgICBfLmRlbGF5KCgpID0+IHtcbiAgICAgICAgdGhpcy5zaG93VGFnU2VsZWN0b3IgPSB0cnVlO1xuICAgICAgfSwgMTAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgXy5kZWZlcigoKSA9PiB7XG4gICAgICAgIHRoaXMuc2hvd0ZpbHRlck9wdGlvbnMgPSB0cnVlO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc2V0RGF0ZVJhbmdlRmlsdGVyKHJhbmdlKSB7XG4gICAgbGV0IHN0YXJ0RGF0ZTtcbiAgICBsZXQgbGFiZWw7XG4gICAgbGV0IGVuZERhdGUgPSBtb21lbnQoKTtcbiAgICBsZXQgY2xvc2VDYWxlbmRhciA9IHRydWU7XG4gICAgdGhpcy5zZWxlY3RlZFJhbmdlID0gcmFuZ2U7XG4gICAgc3dpdGNoIChyYW5nZSkge1xuICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgIHN0YXJ0RGF0ZSA9IG1vbWVudCgpLnN1YnRyYWN0KDEsICdob3VycycpO1xuICAgICAgICBsYWJlbCA9ICdMYXN0IEhvdXInO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgIHN0YXJ0RGF0ZSA9IG1vbWVudCgpLnN1YnRyYWN0KDI0LCAnaG91cnMnKTtcbiAgICAgICAgbGFiZWwgPSAnTGFzdCBEYXknO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICBzdGFydERhdGUgPSBtb21lbnQoKS5zdWJ0cmFjdCg3LCAnZGF5cycpO1xuICAgICAgICBsYWJlbCA9ICdMYXN0IFdlZWsnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgc3RhcnREYXRlID0gbW9tZW50KCkuc3VidHJhY3QoMSwgJ21vbnRoJyk7XG4gICAgICAgIGxhYmVsID0gJ0xhc3QgTW9udGgnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2N1c3RvbSc6XG4gICAgICAgIGlmICghdGhpcy5kYXRlVmFsdWUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3RhcnREYXRlID0gbW9tZW50KHRoaXMuZGF0ZVZhbHVlWzBdKTtcbiAgICAgICAgaWYgKHRoaXMuZGF0ZVZhbHVlWzFdICE9PSB1bmRlZmluZWQgJiYgdGhpcy5kYXRlVmFsdWVbMV0gIT09IG51bGwpIHtcbiAgICAgICAgICBlbmREYXRlID0gbW9tZW50KHRoaXMuZGF0ZVZhbHVlWzFdKTtcbiAgICAgICAgfVxuICAgICAgICBsYWJlbCA9ICdDdXN0b20nO1xuICAgICAgICBjbG9zZUNhbGVuZGFyID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgc3RhcnREYXRlID0gbW9tZW50KCkuc3VidHJhY3QoMjQsICdob3VycycpO1xuICAgICAgICBsYWJlbCA9ICdMYXN0IERheSc7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjb25zdCBzdGFydERhdGVSYW5nZSA9IGVuY29kZVVSSUNvbXBvbmVudChzdGFydERhdGUudG9JU09TdHJpbmcoKSk7XG4gICAgY29uc3QgZW5kRGF0ZVJhbmdlID0gZW5jb2RlVVJJQ29tcG9uZW50KGVuZERhdGUudG9JU09TdHJpbmcoKSk7XG4gICAgdGhpcy5jb2x1bW5GaWx0ZXJzW3RoaXMuZGF0ZVRpbWVDb2x1bW5dID0gW3N0YXJ0RGF0ZVJhbmdlLCBlbmREYXRlUmFuZ2VdO1xuXG4gICAgaWYgKGNsb3NlQ2FsZW5kYXIpIHtcbiAgICAgIHRoaXMuY2FsZW5kYXIudG9nZ2xlKCk7XG4gICAgfVxuICAgIGlmIChyYW5nZSAhPT0gJ2N1c3RvbScpIHtcbiAgICAgIHRoaXMuZGF0ZVZhbHVlID0gW3N0YXJ0RGF0ZS50b0RhdGUoKSwgZW5kRGF0ZS50b0RhdGUoKV07XG4gICAgfVxuICAgIGNvbnN0IGZpbHRlck9iajogRmlsdGVyT2JqID0ge1xuICAgICAgY29sdW1uSWQ6IHRoaXMuZGF0ZVRpbWVDb2x1bW4sXG4gICAgICB2YWx1ZTogW3N0YXJ0RGF0ZVJhbmdlLCBlbmREYXRlUmFuZ2VdLFxuICAgICAgbGFiZWw6IGxhYmVsLFxuICAgICAgZmlsdGVyTmFtZTogdGhpcy5kYXRlVGltZUZpbHRlckxhYmVsLFxuICAgICAgdHlwZTogJ0RBVEVUSU1FJ1xuICAgIH07XG5cbiAgICB0aGlzLnRhYmxlRmlsdGVyU2VydmljZS51cGRhdGVGaWx0ZXIoZmlsdGVyT2JqKTtcbiAgfVxuXG4gIHRhZ1NlbGVjdGlvbkNoYW5nZWQoZXZlbnQsIGlzUm9sZSkge1xuICAgIGxldCBsYWJlbCA9ICcnO1xuICAgIGxldCB2YWx1ZSA9ICcnO1xuICAgIGlmIChpc1JvbGUpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWROYW1lZEF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkUm9sZUF0dHJpYnV0ZXMubGVuZ3RoID4gMSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkUm9sZUF0dHJpYnV0ZXMgPSBbXy5sYXN0KHRoaXMuc2VsZWN0ZWRSb2xlQXR0cmlidXRlcyldO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWxlY3RlZFJvbGVBdHRyaWJ1dGVzLmZvckVhY2goKGF0dHIsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICBsYWJlbCArPSAnLCAnO1xuICAgICAgICAgIHZhbHVlICs9ICcsICc7XG4gICAgICAgIH1cbiAgICAgICAgbGFiZWwgKz0gJyMnICsgYXR0cjtcbiAgICAgICAgdmFsdWUgKz0gJyUyMycgKyBhdHRyO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb2xlQXR0cmlidXRlcyA9IFtdO1xuICAgICAgY29uc3QgYXR0cklkTWFwID0gdGhpcy5jdXJyZW50SGVhZGVyQ29tcG9uZW50UGFyYW1zLmdldE5hbWVkQXR0cmlidXRlc01hcCgpO1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWROYW1lZEF0dHJpYnV0ZXMubGVuZ3RoID4gMSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkTmFtZWRBdHRyaWJ1dGVzID0gW18ubGFzdCh0aGlzLnNlbGVjdGVkTmFtZWRBdHRyaWJ1dGVzKV07XG4gICAgICB9XG4gICAgICB0aGlzLnNlbGVjdGVkTmFtZWRBdHRyaWJ1dGVzLmZvckVhY2goKGF0dHIsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICBsYWJlbCArPSAnLCAnO1xuICAgICAgICAgIHZhbHVlICs9ICcsICc7XG4gICAgICAgIH1cbiAgICAgICAgbGFiZWwgKz0gJ0AnICsgYXR0cjtcbiAgICAgICAgdmFsdWUgKz0gJyU0MCcgKyBhdHRySWRNYXBbYXR0cl07XG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgZmlsdGVyT2JqOiBGaWx0ZXJPYmogPSB7XG4gICAgICBjb2x1bW5JZDogdGhpcy5hdHRyaWJ1dGVzQ29sdW1uLFxuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgbGFiZWw6IGxhYmVsLFxuICAgICAgZmlsdGVyTmFtZTogdGhpcy5kYXRlVGltZUZpbHRlckxhYmVsLFxuICAgICAgdHlwZTogJ0FUVFJJQlVURSdcbiAgICB9O1xuICAgIHRoaXMuY3VycmVudEhlYWRlckNvbXBvbmVudFBhcmFtcy5zZXRTZWxlY3RlZFJvbGVBdHRyaWJ1dGVzKHRoaXMuc2VsZWN0ZWRSb2xlQXR0cmlidXRlcyk7XG4gICAgdGhpcy5jdXJyZW50SGVhZGVyQ29tcG9uZW50UGFyYW1zLnNldFNlbGVjdGVkTmFtZWRBdHRyaWJ1dGVzKHRoaXMuc2VsZWN0ZWROYW1lZEF0dHJpYnV0ZXMpO1xuICAgIHRoaXMudGFibGVGaWx0ZXJTZXJ2aWNlLnVwZGF0ZUZpbHRlcihmaWx0ZXJPYmopO1xuICB9XG5cbiAgYXBwbHlGaWx0ZXIoZXZlbnQsIGZpbHRlcikge1xuICAgIHRoaXMudGFibGVGaWx0ZXJTZXJ2aWNlLnVwZGF0ZUZpbHRlcihmaWx0ZXIpO1xuICAgIHRoaXMuY2xvc2VIZWFkZXJGaWx0ZXIoZXZlbnQpO1xuICB9XG5cbiAgY2xvc2VIZWFkZXJGaWx0ZXIoZXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dGaWx0ZXJPcHRpb25zID0gZmFsc2U7XG4gIH1cblxuICBjbG9zZURhdGVUaW1lKGV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5zaG93RGF0ZVRpbWVQaWNrZXIgPSBmYWxzZTtcbiAgfVxuXG4gIGNsb3NlVGFnU2VsZWN0b3IoZXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dUYWdTZWxlY3RvciA9IGZhbHNlO1xuICB9XG5cbiAgb3BlbkNyZWF0ZSgpIHtcbiAgICB0aGlzLmFjdGlvblJlcXVlc3RlZC5lbWl0KHthY3Rpb246ICdjcmVhdGUnfSk7XG4gIH1cblxuICBhbnlTZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gXy5zb21lKHRoaXMucm93RGF0YSwge3NlbGVjdGVkOiB0cnVlfSk7XG4gIH1cblxuICBzaG93RG93bmxvYWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuYWxsb3dEb3dubG9hZCAmJiB0aGlzLl92aWV3ICE9PSAncHJvY2Vzcyc7XG4gIH1cblxuICBfaW5pdEdyaWRSZXNpemVIYW5kbGVyKCkge1xuICAgIGlmICghdGhpcy50YWJsZUNvbnRhaW5lcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihlbnRyaWVzID0+IHtcbiAgICAgIHRoaXMucmVzaXplR3JpZENvbHVtbnNEZWJvdW5jZWQoKTtcbiAgICB9KTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudCk7XG4gICAgdGhpcy5yZXNpemVIYW5kbGVySW5pdCA9IHRydWU7XG4gIH1cblxuICBfaW5pdEdyaWRPcHRpb25zKCkge1xuICAgIHRoaXMuZ3JpZE9wdGlvbnMgPSB7XG4gICAgICBwYWdpbmF0aW9uOiBmYWxzZSxcbiAgICAgIHJvd1NlbGVjdGlvbjogJ3NpbmdsZScsXG4gICAgICByb3dDbGFzczogJ3ppdGktdGFibGUtcm93JyxcbiAgICAgIHJvd0hlaWdodDogNTAsXG4gICAgICBpbW11dGFibGVEYXRhOiB0cnVlLFxuICAgICAgc3VwcHJlc3NSb3dDbGlja1NlbGVjdGlvbjogdHJ1ZSxcbiAgICAgIHN1cHByZXNzSG9yaXpvbnRhbFNjcm9sbDogZmFsc2UsXG4gICAgICBzdG9wRWRpdGluZ1doZW5HcmlkTG9zZXNGb2N1czogdHJ1ZSxcbiAgICAgIHN1cHByZXNzUHJvcGVydHlOYW1lc0NoZWNrOiB0cnVlLFxuICAgICAgYW5pbWF0ZVJvd3M6IHRydWUsXG4gICAgICBkZWZhdWx0Q29sRGVmOiB7XG4gICAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgICAgZmlsdGVyOiBmYWxzZSwgLy8gc2V0IGZpbHRlcmluZyBvbiBmb3IgYWxsIGNvbHVtbnNcbiAgICAgIH0sXG4gICAgICBvblJvd0RyYWdNb3ZlOiAocGFyYW1zKSA9PiB7XG4gICAgICAgIHRoaXMuZHJhZ1N0YXJ0LmVtaXQocGFyYW1zKTtcbiAgICAgIH0sXG4gICAgICBvblJvd0RyYWdMZWF2ZTogKHBhcmFtcykgPT4ge1xuICAgICAgICB0aGlzLmRyYWdMZWF2ZS5lbWl0KHBhcmFtcyk7XG4gICAgICB9LFxuICAgICAgb25Sb3dEcmFnRW5kOiAoKSA9PiB7XG4gICAgICAgICQoJy5hdHRyaWJ1dGUtaXRlbScpLnNob3coKTtcbiAgICAgICAgJCgnLmRyYWctaG92ZXInKS5yZW1vdmVDbGFzcygnZHJhZy1ob3ZlcicpO1xuICAgICAgICAkKCcjQ29sdW1uVmlzaWJpbGl0eUhlYWRlcicpLnRyaWdnZXIoJ2NsaWNrJyk7XG4gICAgICAgICQoJy5uZXctYXR0cmlidXRlLXRhcmdldCcpLmhpZGUoKTtcbiAgICAgIH0sXG4gICAgICByb3dDbGFzc1J1bGVzOiB7XG4gICAgICAgIC8vIHJvdyBzdHlsZSBmdW5jdGlvblxuICAgICAgICAncm93LWludmFsaWQnOiBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgICAgcmV0dXJuIF8uZ2V0KHBhcmFtcywgJ2RhdGEuaW52YWxpZCcpO1xuICAgICAgICB9LFxuICAgICAgICAncm93LWNvcGllZCc6IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgICByZXR1cm4gXy5nZXQocGFyYW1zLCAnZGF0YS5jb3BpZWQnKTtcbiAgICAgICAgfSxcbiAgICAgICAgJ3Jvdy1jaGlsZC1zdWItcHJvY2Vzcyc6IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICBwYXJhbXMuYXBpLnZpZXcgPT09ICdwcm9jZXNzJyAmJlxuICAgICAgICAgICAgICAhXy5nZXQocGFyYW1zLCAnZGF0YS5pc1Jvb3QnKSAmJlxuICAgICAgICAgICAgICAhXy5pc0VtcHR5KF8uZ2V0KHBhcmFtcywgJ2RhdGEuc3VicHJvY2Vzc0lkJykpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgJ3Jvdy1jaGlsZCc6IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAocGFyYW1zLmFwaS52aWV3ID09PSAncHJvY2VzcycgfHwgcGFyYW1zLmFwaS52aWV3ID09PSAndXNlci1yb2xlcycpICYmXG4gICAgICAgICAgICAgICFfLmdldChwYXJhbXMsICdkYXRhLmlzUm9vdCcpICYmXG4gICAgICAgICAgICAgICFfLmlzRW1wdHkoXy5nZXQocGFyYW1zLCAnZGF0YS5wYXJlbnRJZCcpKVxuICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICAgICdyb3ctY2hpbGQtc2Vjb25kJzogZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIHBhcmFtcy5hcGkudmlldyA9PT0gJ3Byb2Nlc3MnICYmXG4gICAgICAgICAgICAgICFfLmdldChwYXJhbXMsICdkYXRhLmlzUm9vdCcpICYmXG4gICAgICAgICAgICAgIF8uZ2V0KHBhcmFtcywgJ2RhdGEuaXNQYXJhbGxlbCcpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgJ3Jvdy1jaGlsZC1ldmVuJzogZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChwYXJhbXMuYXBpLnZpZXcgPT09ICdwcm9jZXNzJyB8fCBwYXJhbXMuYXBpLnZpZXcgPT09ICd1c2VyLXJvbGVzJykgJiZcbiAgICAgICAgICAgICAgXy5nZXQocGFyYW1zLCAnZGF0YS5wYXJlbnRJbmRleCcpICUgMiA+IDBcbiAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgICAncm93LWNoaWxkLW9kZCc6IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAocGFyYW1zLmFwaS52aWV3ID09PSAncHJvY2VzcycgfHwgcGFyYW1zLmFwaS52aWV3ID09PSAndXNlci1yb2xlcycpICYmXG4gICAgICAgICAgICAgIF8uZ2V0KHBhcmFtcywgJ2RhdGEucGFyZW50SW5kZXgnKSAlIDIgPT09IDBcbiAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgICAncm93LWNoaWxkLXdhcm4nOiBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcmFtcy5hcGkudmlldyA9PT0gJ3Byb2Nlc3MnICYmIF8uZ2V0KHBhcmFtcywgJ2RhdGEuc3RhdGUnKSA9PT0gJ1dBUk5JTkcnO1xuICAgICAgICB9LFxuICAgICAgICAncm93LWNoaWxkLWhlYWRlcic6IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgICByZXR1cm4gcGFyYW1zLmFwaS52aWV3ID09PSAncHJvY2VzcycgJiYgXy5nZXQocGFyYW1zLCAnZGF0YS5yb3dUeXBlJykgPT09ICdzdGVwLWhlYWRlcic7XG4gICAgICAgIH0sXG4gICAgICAgICdyb3ctcm9sZS1pdGVtJzogZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICAgIHJldHVybiBfLmdldChwYXJhbXMsICdkYXRhLnJvbGVJdGVtJyk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgZ2V0Um93SGVpZ2h0OiAocGFyYW1zKSA9PiB7XG4gICAgICAgIGlmIChwYXJhbXMuYXBpLnZpZXcgPT09ICdwcm9jZXNzJykge1xuICAgICAgICAgIGlmIChfLmdldChwYXJhbXMsICdkYXRhLmlzUm9vdCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gNTA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChfLmdldChwYXJhbXMsICdkYXRhLmlzUGFyYWxsZWwnKSkge1xuICAgICAgICAgICAgcmV0dXJuIDM1O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoXy5nZXQocGFyYW1zLCAnZGF0YS5wYXJlbnRJZCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gNDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiA1MDtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHBhcmFtcy5hcGkudmlldyA9PT0gJ3VzZXJzJyB8fFxuICAgICAgICAgICAgcGFyYW1zLmFwaS52aWV3ID09PSAndXNlci1yb2xlcycgfHxcbiAgICAgICAgICAgIHBhcmFtcy5hcGkudmlldyA9PT0gJ3JvbGVzJ1xuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoXy5nZXQocGFyYW1zLCAnZGF0YS5yb2xlSXRlbScpKSB7XG4gICAgICAgICAgICByZXR1cm4gMzU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiA1MDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gNTA7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIG9uQ2VsbEVkaXRpbmdTdG9wcGVkOiAoZXZlbnRPYmopID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlU2VydmljZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaWVsZCA9IF8uZ2V0KGV2ZW50T2JqLCAnY29sRGVmLmZpZWxkJywgJycpO1xuICAgICAgICBpZiAoXy5pbmNsdWRlcyhmaWVsZC50b0xvd2VyQ2FzZSgpLCAnYXR0cmlidXRlJykpIHtcbiAgICAgICAgICBjb25zdCBuZXdWYWwgPSBldmVudE9iai5uZXdWYWx1ZS5zcGxpdCgnLCcpO1xuICAgICAgICAgIF8uc2V0KGV2ZW50T2JqLCBgZGF0YS4ke2ZpZWxkfWAsIG5ld1ZhbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgXy5zZXQoZXZlbnRPYmosIGBkYXRhLiR7ZmllbGR9YCwgZXZlbnRPYmoubmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlVGFibGUoZXZlbnRPYmopO1xuICAgICAgfSxcbiAgICAgIGdldFJvd05vZGVJZDogKGRhdGEpID0+IGRhdGEubmFtZSxcbiAgICAgIG9uQm9keVNjcm9sbDogKHNjcm9sbGVyKSA9PiB7XG4gICAgICAgIHRoaXMuX2hhbmRsZVRhYmxlU2Nyb2xsKHNjcm9sbGVyKTtcbiAgICAgIH0sXG4gICAgICBvbkdyaWRSZWFkeTogKGdyaWQpID0+IHtcbiAgICAgICAgZ3JpZC5hcGkueml0aUFsbFRvZ2dsZWQgPSBmYWxzZTtcbiAgICAgICAgZ3JpZC5hcGkueml0aUhpZGVDb2x1bW4gPSB0aGlzLnNldENvbHVtblZpc2liaWxpdHlDb2x1bW4uYmluZCh0aGlzKTtcbiAgICAgICAgZ3JpZC5hcGkudmFsaWRhdGVUYWJsZSA9IHRoaXMuX3ZhbGlkYXRlVGFibGUuYmluZCh0aGlzKTtcbiAgICAgICAgZ3JpZC5hcGkudmlldyA9IHRoaXMuX3ZpZXc7XG4gICAgICAgIGdyaWQuYXBpLnppdGlSb3dEYXRhID0gdGhpcy5yb3dEYXRhO1xuICAgICAgICBncmlkLmFwaS5vcGVuSGVhZGVyRmlsdGVyID0gdGhpcy5vcGVuSGVhZGVyRmlsdGVyLmJpbmQodGhpcyk7XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICAgICAgICBncmlkLmFwaS5yb3dzVG9nZ2xlZCA9IHRoaXMucm93c1RvZ2dsZWQgPyB0aGlzLnJvd3NUb2dnbGVkLmJpbmQodGhpcykgOiAoKSA9PiB7fTtcbiAgICAgICAgaWYgKHRoaXMuc2VydmVyU2lkZURhdGFTb3VyY2UpIHtcbiAgICAgICAgICBncmlkLmFwaS5zZXRTZXJ2ZXJTaWRlRGF0YXNvdXJjZSh0aGlzLnNlcnZlclNpZGVEYXRhU291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN2Yy5ncmlkT2JqID0gZ3JpZDtcbiAgICAgICAgXy5kZWZlcih0aGlzLl9hcHBseUNvbHVtblN0YXRlLmJpbmQodGhpcykpO1xuICAgICAgfSxcbiAgICAgIG9uQ29sdW1uVmlzaWJsZTogKGV2ZW50T2JqKSA9PiB7XG4gICAgICAgIGlmICghZXZlbnRPYmouY29sdW1uKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlQ29sdW1uVmlzaWJpbGl0eShldmVudE9iai5jb2x1bW4uY29sRGVmLmNvbElkLCBldmVudE9iai52aXNpYmxlKTtcbiAgICAgICAgaWYgKGV2ZW50T2JqLnZpc2libGUpIHtcbiAgICAgICAgICB0aGlzLnN2Yy5ncmlkT2JqLmNvbHVtbkFwaS5tb3ZlQ29sdW1uKFxuICAgICAgICAgICAgICBldmVudE9iai5jb2x1bW4uY29sRGVmLmNvbElkLFxuICAgICAgICAgICAgICB0aGlzLm1lcmdlZENvbHVtbkRlZmluaXRpb25zLmxlbmd0aCAtIDFcbiAgICAgICAgICApO1xuICAgICAgICAgIF8uZGVmZXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdmMuZ3JpZE9iai5hcGkuZW5zdXJlQ29sdW1uVmlzaWJsZShldmVudE9iai5jb2x1bW4uY29sRGVmLmNvbElkKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl91cGRhdGVHcmlkQ29sdW1ucygpO1xuICAgICAgICB0aGlzLnN2Yy5zYXZlQ29sdW1uU3RhdGUoKTtcbiAgICAgIH0sXG4gICAgICBvbkZpcnN0RGF0YVJlbmRlcmVkOiAoZXZlbnRPYmopID0+IHtcbiAgICAgICAgdGhpcy5zdmMucmVzaXplR3JpZENvbHVtbnMoKTtcbiAgICAgICAgdGhpcy5ncmlkUmVuZGVyZWQgPSB0cnVlO1xuICAgICAgfSxcbiAgICAgIG9uQ29sdW1uUGlubmVkOiAoZXZlbnRPYmopID0+IHtcbiAgICAgICAgaWYgKCFldmVudE9iai5jb2x1bW4pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29sSWQgPSBldmVudE9iai5jb2x1bW4uY29sRGVmLmNvbElkO1xuICAgICAgICBjb25zdCBwaW5uZWQgPSBldmVudE9iai5waW5uZWQgPT09ICdsZWZ0JztcbiAgICAgICAgdGhpcy5tZXJnZWRDb2x1bW5EZWZpbml0aW9ucyA9IF8ubWFwKHRoaXMubWVyZ2VkQ29sdW1uRGVmaW5pdGlvbnMsIChjb2xEZWYpID0+IHtcbiAgICAgICAgICBpZiAoY29sRGVmLmNvbElkID09PSBjb2xJZCkge1xuICAgICAgICAgICAgY29sRGVmLmxvY2tQb3NpdGlvbiA9IHBpbm5lZDtcbiAgICAgICAgICAgIGNvbERlZi5zdXBwcmVzc01vdmFibGUgPSBwaW5uZWQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjb2xEZWY7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl91cGRhdGVHcmlkQ29sdW1ucygpO1xuICAgICAgICB0aGlzLnN2Yy5yZXNpemVHcmlkQ29sdW1ucygpO1xuICAgICAgICB0aGlzLnN2Yy5zYXZlQ29sdW1uU3RhdGUoKTtcbiAgICAgIH0sXG4gICAgICBvbkNvbHVtblJlc2l6ZWQ6IChldmVudE9iaikgPT4ge1xuICAgICAgICBpZiAoIWV2ZW50T2JqLmNvbHVtbiB8fCBldmVudE9iai5zb3VyY2UgPT09ICdzaXplQ29sdW1uc1RvRml0Jykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9vbkNvbHVtbnNSZXNpemVkRGVib3VuY2VkKGV2ZW50T2JqLmNvbHVtbik7XG4gICAgICB9LFxuICAgICAgb25Db2x1bW5Nb3ZlZDogKGV2ZW50T2JqKSA9PiB7XG4gICAgICAgIHRoaXMuX3NhdmVDb2x1bW5TdGF0ZURlYm91bmNlZCgpO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgX3ZhbGlkYXRlVGFibGUoZXZlbnRPYmopIHtcbiAgICB0aGlzLnJvd0RhdGFbZXZlbnRPYmoucm93SW5kZXhdID0gZXZlbnRPYmouZGF0YTtcbiAgICBfLmRlbGF5KCgpID0+IHtcbiAgICAgIHRoaXMudmFsaWRhdGVTZXJ2aWNlKHRoaXMucm93RGF0YSk7XG4gICAgICBfLmRlbGF5KCgpID0+IHtcbiAgICAgICAgdGhpcy5zdmMuZ3JpZE9iai5hcGkucmVmcmVzaENlbGxzKHtmb3JjZTogdHJ1ZX0pO1xuICAgICAgICB0aGlzLnN2Yy5ncmlkT2JqLmFwaS5yZWRyYXdSb3dzKCk7XG4gICAgICB9LCA1MCk7XG4gICAgfSwgNTApO1xuICB9XG5cbiAgX2FwcGx5Q29sdW1uU3RhdGUoKSB7XG4gICAgY29uc3QgdGFibGVTdGF0ZUNvb2tpZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGB6aXRpXyR7dGhpcy5zdmMudGFibGVJZH1fdGFibGVfc3RhdGVgKTtcbiAgICBjb25zdCB0YWJsZVN0YXRlID0gSlNPTi5wYXJzZSh0YWJsZVN0YXRlQ29va2llKTtcbiAgICBpZiAodGFibGVTdGF0ZSkge1xuICAgICAgdGhpcy5zdmMuZ3JpZE9iai5jb2x1bW5BcGkuYXBwbHlDb2x1bW5TdGF0ZSh7c3RhdGU6IHRhYmxlU3RhdGV9KTtcbiAgICAgIHRoaXMuX3VwZGF0ZUhpZGRlbkNvbHVtbnMoKTtcbiAgICB9XG4gIH1cblxuICBfYWRkQ29sdW1uRXZlbnRzKCkge1xuICAgIHRoaXMuX2NvbHVtbkRlZmluaXRpb25zID0gXy5tYXAodGhpcy5fY29sdW1uRGVmaW5pdGlvbnMsIChjb2xEZWYpID0+IHtcbiAgICAgIGNvbERlZi5waW5Db2x1bW4gPSB0aGlzLnN2Yy5waW5Db2x1bW4uYmluZCh0aGlzLnN2Yyk7XG4gICAgICBjb2xEZWYuY2VsbENsYXNzID0gdGhpcy5fZ2V0Q2VsbFN0eWxlLmJpbmQodGhpcyk7XG4gICAgICByZXR1cm4gY29sRGVmO1xuICAgIH0pO1xuICB9XG5cbiAgX2dldENlbGxTdHlsZShwYXJhbXMpIHtcbiAgICBpZiAoIXRoaXMucm93VmFsaWRhdGlvbiB8fCB0aGlzLnJvd1ZhbGlkYXRpb24ubGVuZ3RoIDw9IDApIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IHRoaXMucm93VmFsaWRhdGlvbltwYXJhbXMubm9kZS5yb3dJbmRleF07XG4gICAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0IHx8ICF2YWxpZGF0aW9uUmVzdWx0LmVycm9ycykge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBjb25zdCBmaWVsZCA9IF8uZ2V0KHBhcmFtcywgJ2NvbERlZi5maWVsZCcsICcnKTtcbiAgICBpZiAodmFsaWRhdGlvblJlc3VsdC5lcnJvcnNbZmllbGRdKSB7XG4gICAgICByZXR1cm4gJ3ppdGktdGFibGUtY2VsbC1lcnJvcic7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuICB1cGRhdGVDb2x1bW5WaXNpYmlsaXR5KGNvbElkLCB2aXNpYmxlKSB7XG4gICAgdGhpcy5fY29sdW1uRGVmaW5pdGlvbnMgPSBfLm1hcCh0aGlzLl9jb2x1bW5EZWZpbml0aW9ucywgKGNvbERlZikgPT4ge1xuICAgICAgaWYgKGNvbERlZi5jb2xJZCA9PT0gY29sSWQpIHtcbiAgICAgICAgY29sRGVmLmhpZGUgPSAhdmlzaWJsZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb2xEZWY7XG4gICAgfSk7XG4gICAgZm9yIChjb25zdCBjb2xEZWYgb2YgdGhpcy5tZXJnZWRDb2x1bW5EZWZpbml0aW9ucykge1xuICAgICAgaWYgKGNvbERlZi5jb2xJZCA9PT0gY29sSWQpIHtcbiAgICAgICAgY29sRGVmLmhpZGUgPSAhdmlzaWJsZTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fdXBkYXRlSGlkZGVuQ29sdW1ucygpO1xuICAgIHRoaXMuc3ZjLnJlc2l6ZUdyaWRDb2x1bW5zKCk7XG4gIH1cblxuICB1cGRhdGVFbnRpdHlUeXBlTGFiZWwoKSB7XG4gICAgc3dpdGNoKHRoaXMuc3ZjLnRhYmxlSWQpIHtcbiAgICAgIGNhc2UgJ2lkZW50aXRpZXMnOlxuICAgICAgICB0aGlzLmVudGl0eVR5cGVMYWJlbCA9ICdJZGVudGl0aWVzJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdlZGdlLXJvdXRlcnMnOlxuICAgICAgICB0aGlzLmVudGl0eVR5cGVMYWJlbCA9ICdFZGdlIFJvdXRlcnMnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3NlcnZpY2VzJzpcbiAgICAgICAgdGhpcy5lbnRpdHlUeXBlTGFiZWwgPSAnU2VydmljZXMnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NvbmZpZ3VyYXRpb25zJzpcbiAgICAgICAgdGhpcy5lbnRpdHlUeXBlTGFiZWwgPSAnQ29uZmlncyc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnc2VydmljZS1wb2xpY2llcyc6XG4gICAgICAgIHRoaXMuZW50aXR5VHlwZUxhYmVsID0gJ1NlcnZpY2UgUG9saWNpZXMnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2VkZ2Utcm91dGVyLXBvbGljaWVzJzpcbiAgICAgICAgdGhpcy5lbnRpdHlUeXBlTGFiZWwgPSAnRWRnZSBSb3V0ZXIgUG9saWNpZXMnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3NlcnZpY2UtZWRnZS1yb3V0ZXItcG9saWNpZXMnOlxuICAgICAgICB0aGlzLmVudGl0eVR5cGVMYWJlbCA9ICdTZXJ2aWNlIEVkZ2UgUm91dGVyIFBvbGljaWVzJztcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgc2V0Q29sdW1uVmlzaWJpbGl0eUNvbHVtbihjb2x1bW4sIHZpc2libGUpIHtcbiAgICB0aGlzLnN2Yy5ncmlkT2JqLmNvbHVtbkFwaS5zZXRDb2x1bW5WaXNpYmxlKGNvbHVtbi5jb2xJZCwgdmlzaWJsZSk7XG4gICAgdGhpcy5zdmMuZ3JpZE9iai5hcGkucmVmcmVzaEhlYWRlcigpO1xuICAgIF8uZGVmZXIoKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVDb2x1bW5WaXNpYmlsaXR5KGNvbHVtbi5jb2xJZCwgdmlzaWJsZSk7XG4gICAgfSk7XG4gIH1cblxuICBfdXBkYXRlSGlkZGVuQ29sdW1ucygpIHtcbiAgICBjb25zdCBncmlkQ29sdW1uRGVmcyA9IHRoaXMuc3ZjLmdyaWRPYmouY29sdW1uQXBpLmNvbHVtbk1vZGVsLmdyaWRDb2x1bW5zO1xuICAgIGNvbnN0IHZpc2libGVHcmlkQ29sdW1ucyA9IGdyaWRDb2x1bW5EZWZzLmZpbHRlcigoY29sKSA9PiBjb2wudmlzaWJsZSk7XG4gICAgY29uc3QgaGlkZGVuR3JpZENvbHVtbnMgPSBncmlkQ29sdW1uRGVmcy5maWx0ZXIoKGNvbCkgPT4gIWNvbC52aXNpYmxlKTtcbiAgICB0aGlzLnZpc2libGVDb2x1bW5zID0gXy5tYXAodmlzaWJsZUdyaWRDb2x1bW5zLCAnY29sRGVmJyk7XG4gICAgdGhpcy52aXNpYmxlQ29sdW1uSWRzID0gXy5tYXAodGhpcy52aXNpYmxlQ29sdW1ucywgJ2ZpZWxkJyk7XG4gICAgdGhpcy5oaWRkZW5Db2x1bW5zID0gXy5tYXAoaGlkZGVuR3JpZENvbHVtbnMsICdjb2xEZWYnKTtcbiAgICB0aGlzLmhpZGRlbkNvbHVtbklkcyA9IF8ubWFwKHRoaXMuaGlkZGVuQ29sdW1ucywgJ2ZpZWxkJyk7XG4gIH1cblxuICBhZGRIZWFkZXJNZW51KGNvbHVtbkRlZnMgPSBbXSkge1xuICAgIGNvbHVtbkRlZnMuZm9yRWFjaCgoY29sdW1uRGVmKSA9PiB7XG4gICAgICBpZiAoY29sdW1uRGVmLnVzZUhlYWRlck1lbnUpIHtcbiAgICAgICAgY29sdW1uRGVmLmhlYWRlckNvbXBvbmVudFBhcmFtcyA9IHtcbiAgICAgICAgICBvcGVuSGVhZGVyTWVudTogKCRldmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vcGVuSGVhZGVyQWN0aW9uTWVudSgkZXZlbnQpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgY2xvc2VNZW51OiAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VBY3Rpb25NZW51KCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIF9hZGREZWZhdWx0Q29sdW1uRGVmcygpIHtcbiAgICB0aGlzLmFkZEhlYWRlck1lbnUodGhpcy5fY29sdW1uRGVmaW5pdGlvbnMpO1xuICAgIHRoaXMubWVyZ2VkQ29sdW1uRGVmaW5pdGlvbnMgPSBfLmNsb25lRGVlcCh0aGlzLl9jb2x1bW5EZWZpbml0aW9ucyk7XG4gICAgaWYgKHRoaXMuX3ZpZXcgPT09ICdwcm9jZXNzJykge1xuICAgICAgY29uc3QgY2VsbFBhcmFtcyA9IF8uY2xvbmVEZWVwKHRoaXMubWVudUNvbHVtbkRlZmluaXRpb24uY2VsbFJlbmRlcmVyUGFyYW1zKTtcbiAgICAgIHRoaXMubWVyZ2VkQ29sdW1uRGVmaW5pdGlvbnNbdGhpcy5tZXJnZWRDb2x1bW5EZWZpbml0aW9ucy5sZW5ndGggLSAxXS5jZWxsUmVuZGVyZXJQYXJhbXMgPSBfLm1lcmdlKFxuICAgICAgICAgIHRoaXMubWVyZ2VkQ29sdW1uRGVmaW5pdGlvbnNbdGhpcy5tZXJnZWRDb2x1bW5EZWZpbml0aW9ucy5sZW5ndGggLSAxXS5jZWxsUmVuZGVyZXJQYXJhbXMsXG4gICAgICAgICAgY2VsbFBhcmFtc1xuICAgICAgKTtcbiAgICAgIHRoaXMubWVyZ2VkQ29sdW1uRGVmaW5pdGlvbnNbdGhpcy5tZXJnZWRDb2x1bW5EZWZpbml0aW9ucy5sZW5ndGggLSAxXS5oZWFkZXJDb21wb25lbnRQYXJhbXMgPVxuICAgICAgICAgIHRoaXMubWVudUNvbHVtbkRlZmluaXRpb24uaGVhZGVyQ29tcG9uZW50UGFyYW1zO1xuICAgIH0gZWxzZSBpZiAoICh0aGlzLm9wdGlvbnMubm9TZWxlY3QgJiYgdGhpcy5vcHRpb25zLm5vTWVudSkpIHtcbiAgICAgIC8vIERvbid0IGFkZCBhbnkgYWRkaXRpb25hbCBjb2x1bW5zXG4gICAgfSBlbHNlIGlmICh0aGlzLl92aWV3ICE9PSAndXBsb2FkJykge1xuICAgICAgdGhpcy5tZXJnZWRDb2x1bW5EZWZpbml0aW9ucy5zcGxpY2UoMCwgMCwgdGhpcy5zZWxlY3RDb2x1bW5EZWZpbml0aW9uKTtcbiAgICAgIHRoaXMubWVyZ2VkQ29sdW1uRGVmaW5pdGlvbnMucHVzaCh0aGlzLm1lbnVDb2x1bW5EZWZpbml0aW9uKTtcbiAgICB9XG4gIH1cblxuICBfc3RvcmVJbml0aWFsQ29sdW1uRGVmcygpIHtcbiAgICB0aGlzLl9pbml0aWFsQ29sdW1uRGVmcyA9IF8uY2xvbmVEZWVwKHRoaXMubWVyZ2VkQ29sdW1uRGVmaW5pdGlvbnMpO1xuICB9XG5cbiAgX2luaXRDb2x1bW5WaXNpYmlsaXR5KCkge1xuICAgIHRoaXMudmlzaWJsZUNvbHVtbnMgPSB0aGlzLl9jb2x1bW5EZWZpbml0aW9ucy5maWx0ZXIoKGNvbCkgPT4gIWNvbC5oaWRlKTtcbiAgICB0aGlzLmhpZGRlbkNvbHVtbnMgPSB0aGlzLl9jb2x1bW5EZWZpbml0aW9ucy5maWx0ZXIoKGNvbCkgPT4gY29sLmhpZGUpO1xuICAgIHRoaXMudmlzaWJsZUNvbHVtbklkcyA9IF8ubWFwKHRoaXMudmlzaWJsZUNvbHVtbnMsICdmaWVsZCcpO1xuICB9XG5cbiAgX3VwZGF0ZUdyaWRDb2x1bW5zKCkge1xuICAgIHRoaXMuX3NldENvbHVtbldpZHRocygpO1xuICAgIHRoaXMuc3ZjLmdyaWRPYmouYXBpLnNldENvbHVtbkRlZnModGhpcy5tZXJnZWRDb2x1bW5EZWZpbml0aW9ucyk7XG4gICAgdGhpcy5zdmMuZ3JpZE9iai5hcGkucmVmcmVzaEhlYWRlcigpO1xuICB9XG5cbiAgX3NldENvbHVtbldpZHRocygpIHtcbiAgICBpZiAodGhpcy5fdmlldyA9PT0gJ3VwbG9hZCcgfHwgdGhpcy5fdmlldyA9PT0gJ3Byb2Nlc3MnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbFdpZHRoc0Nvb2tpZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGB6aXRpXyR7dGhpcy5zdmMudGFibGVJZH1fY29sdW1uX3dpZHRoc2ApO1xuICAgIGlmICghXy5pc0VtcHR5KGNvbFdpZHRoc0Nvb2tpZSkpIHtcbiAgICAgIGNvbnN0IGNvbFdpZHRocyA9IEpTT04ucGFyc2UoY29sV2lkdGhzQ29va2llKTtcbiAgICAgIF8uZm9yRWFjaChjb2xXaWR0aHMsIChjb2xXaWR0aCwgY29sSWQpID0+IHtcbiAgICAgICAgXy5mb3JFYWNoKHRoaXMubWVyZ2VkQ29sdW1uRGVmaW5pdGlvbnMsIChjb2xEZWYpID0+IHtcbiAgICAgICAgICBpZiAoY29sRGVmLmNvbElkID09PSBjb2xJZCkge1xuICAgICAgICAgICAgY29sRGVmLndpZHRoID0gY29sV2lkdGg7XG4gICAgICAgICAgICBjb2xEZWYuc3VwcHJlc3NTaXplVG9GaXQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBfc2V0Q29sdW1uT3JkZXJBbmRWaXNpYmlsaXR5KCkge1xuICAgIGlmICh0aGlzLl92aWV3ID09PSAndXBsb2FkJyB8fCB0aGlzLl92aWV3ID09PSAncHJvY2VzcycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGFibGVTdGF0ZUNvb2tpZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGB6aXRpXyR7dGhpcy5zdmMudGFibGVJZH1fdGFibGVfc3RhdGVgKTtcbiAgICBpZiAoIV8uaXNFbXB0eSh0YWJsZVN0YXRlQ29va2llKSB8fCB0eXBlb2YgdGFibGVTdGF0ZUNvb2tpZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnN0IGNvbFN0YXRlcyA9IEpTT04ucGFyc2UodGFibGVTdGF0ZUNvb2tpZSk7XG4gICAgICBjb25zdCBjb2x1bW5JbmRleGVzID0gW107XG4gICAgICBfLmZvckVhY2goY29sU3RhdGVzLCAoY29sU3RhdGUpID0+IHtcbiAgICAgICAgXy5mb3JFYWNoKHRoaXMubWVyZ2VkQ29sdW1uRGVmaW5pdGlvbnMsIChjb2xEZWYpID0+IHtcbiAgICAgICAgICBpZiAoY29sRGVmLmNvbElkID09PSBjb2xTdGF0ZS5jb2xJZCkge1xuICAgICAgICAgICAgY29sdW1uSW5kZXhlcy5wdXNoKGNvbERlZik7XG4gICAgICAgICAgICBjb2xEZWYuaGlkZSA9IGNvbFN0YXRlLmhpZGU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgXy5mb3JFYWNoKHRoaXMubWVyZ2VkQ29sdW1uRGVmaW5pdGlvbnMsIChjb2xEZWYpID0+IHtcbiAgICAgICAgbGV0IGNvbEZvdW5kID0gZmFsc2U7XG4gICAgICAgIF8uZm9yRWFjaChjb2x1bW5JbmRleGVzLCAoY29sSW5kZXgpID0+IHtcbiAgICAgICAgICBpZiAoY29sRGVmLmNvbElkID09PSBjb2xJbmRleC5jb2xJZCkge1xuICAgICAgICAgICAgY29sRm91bmQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghY29sRm91bmQpIHtcbiAgICAgICAgICBjb2x1bW5JbmRleGVzLnB1c2goY29sRGVmKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLm1lcmdlZENvbHVtbkRlZmluaXRpb25zID0gY29sdW1uSW5kZXhlcztcbiAgICB9XG4gIH1cblxuICBfaGFuZGxlVGFibGVTY3JvbGwoc2Nyb2xsZXIpOiB2b2lkIHtcbiAgICBjb25zdCBzY3JvbGxXaWR0aCA9ICQoJy5hZy1jZW50ZXItY29scy1jb250YWluZXInKS53aWR0aCgpO1xuICAgIGNvbnN0IHZpZXdXaWR0aCA9ICQoJy5hZy1jZW50ZXItY29scy12aWV3cG9ydCcpLndpZHRoKCk7XG4gICAgY29uc3Qgc2Nyb2xsYWJsZVdpZHRoID0gc2Nyb2xsV2lkdGggLSB2aWV3V2lkdGg7XG4gICAgaWYgKHNjcm9sbGVyLmxlZnQgPiAwKSB7XG4gICAgICAkKCcuYWctcGlubmVkLWxlZnQtY29scy1jb250YWluZXInKS5hZGRDbGFzcygnYWctcGlubmVkLWxlZnQtc2hhZG93Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICQoJy5hZy1waW5uZWQtbGVmdC1jb2xzLWNvbnRhaW5lcicpLnJlbW92ZUNsYXNzKCdhZy1waW5uZWQtbGVmdC1zaGFkb3cnKTtcbiAgICB9XG4gICAgaWYgKHNjcm9sbGVyLmxlZnQgPCBzY3JvbGxhYmxlV2lkdGggLSAyKSB7XG4gICAgICAkKCcuYWctcGlubmVkLXJpZ2h0LWNvbHMtY29udGFpbmVyJykuYWRkQ2xhc3MoJ2FnLXBpbm5lZC1yaWdodC1zaGFkb3cnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgJCgnLmFnLXBpbm5lZC1yaWdodC1jb2xzLWNvbnRhaW5lcicpLnJlbW92ZUNsYXNzKCdhZy1waW5uZWQtcmlnaHQtc2hhZG93Jyk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2ICN0YWJsZUNvbnRhaW5lciBjbGFzcz1cImRhdGEtdGFibGUtY29udGFpbmVyXCIgKm5nSWY9XCJzaG93VGFibGU7ZWxzZSBub2RhdGFcIj5cbiAgICA8bGliLXRhYmxlLWZpbHRlci1iYXJcbiAgICAgICAgICAgIFtzdGFydENvdW50XT1cInN0YXJ0Q291bnRcIlxuICAgICAgICAgICAgW2VuZENvdW50XT1cImVuZENvdW50XCJcbiAgICAgICAgICAgIFt0b3RhbENvdW50XT1cInRvdGFsQ291bnRcIlxuICAgICAgICAgICAgW2N1cnJlbnRQYWdlXT1cImN1cnJlbnRQYWdlXCJcbiAgICA+PC9saWItdGFibGUtZmlsdGVyLWJhcj5cbiAgICA8bGliLXRhYmxlLWhpZGRlbi1jb2x1bW5zLWJhclxuICAgICAgICAgICAgKm5nSWY9XCJncmlkUmVuZGVyZWQgJiYgc2hvd0ZpbHRlckJhclwiXG4gICAgICAgICAgICBbaGlkZGVuQ29sdW1uc109XCJoaWRkZW5Db2x1bW5zXCJcbiAgICAgICAgICAgIChjb2x1bW5WaXNpYmlsaXR5Q2hhbmdlZCk9XCJjb2x1bW5WaXNpYmlsaXR5Q2hhbmdlZCgkZXZlbnQpXCJcbiAgICA+PC9saWItdGFibGUtaGlkZGVuLWNvbHVtbnMtYmFyPlxuICAgIDxkaXYgKHJlc2l6ZSk9XCJyZXNpemVHcmlkQ29sdW1uc0RlYm91bmNlZCgkZXZlbnQpXCIgY2xhc3M9XCJ6aXRpLWFnLWdyaWRcIiBpZD1cIkl0ZW1UYWJsZVwiPlxuICAgICAgICA8YWctZ3JpZC1hbmd1bGFyXG4gICAgICAgICAgICAjbmZBZ0dyaWRcbiAgICAgICAgICAgIFtjb2x1bW5EZWZzXT1cIm1lcmdlZENvbHVtbkRlZmluaXRpb25zXCJcbiAgICAgICAgICAgIFtjb21wb25lbnRzXT1cImZyYW1ld29ya0NvbXBvbmVudHNcIlxuICAgICAgICAgICAgW2dldERhdGFQYXRoXT1cInN2Yy5nZXREYXRhUGF0aFwiXG4gICAgICAgICAgICBbZ2V0Um93SWRdPVwic3ZjLmdldFJvd05vZGVJZFwiXG4gICAgICAgICAgICBbZ3JpZE9wdGlvbnNdPVwiZ3JpZE9wdGlvbnNcIlxuICAgICAgICAgICAgW21vZHVsZXNdPVwiZ3JpZE1vZHVsZXNcIlxuICAgICAgICAgICAgW3Jvd0RhdGFdPVwicm93RGF0YVwiXG4gICAgICAgICAgICBbdG9vbHRpcEhpZGVEZWxheV09XCIyMDAwMFwiXG4gICAgICAgICAgICBbdG9vbHRpcFNob3dEZWxheV09XCIwXCJcbiAgICAgICAgICAgIChncmlkUmVhZHkpPVwib25HcmlkUmVhZHkoJGV2ZW50KVwiXG4gICAgICAgICAgICBjbGFzcz1cInppdGktYWctZ3JpZC10YWJsZSBhZy10aGVtZS1hbHBpbmUgcm93c1wiXG4gICAgICAgICAgICBpZD1cIkl0ZW1HcmlkXCJcbiAgICAgICAgPlxuICAgICAgICA8L2FnLWdyaWQtYW5ndWxhcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7IG9wZW46IG9wZW5IZWFkZXJNZW51IH1cIlxuICAgICAgICAgICAgW25nU3R5bGVdPVwieyBsZWZ0OiBtZW51TGVmdCArICdweCcsIHRvcDogbWVudVRvcCArICdweCcgfVwiXG4gICAgICAgICAgICBjbGFzcz1cInRNZW51IGFjdGlvbi1tZW51IGhlYWRlci1tZW51XCJcbiAgICAgICAgICAgIGlkPVwiSGVhZGVyQWN0aW9uTWVudVwiXG4gICAgPlxuICAgICAgICA8ZGl2IChjbGljayk9XCJyZXNldFRhYmxlQ29sdW1ucygpXCIgY2xhc3M9XCJ0QWN0aW9uUm93XCIgaWQ9XCJSZXNldFRhYmxlQnV0dG9uXCI+UmVzdG9yZSBEZWZhdWx0IFRhYmxlPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBoZWFkZXJBY3Rpb24gb2YgaGVhZGVyQWN0aW9uc1wiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWN0aW9uUmVxdWVzdGVkLmVtaXQoeyBhY3Rpb246IGhlYWRlckFjdGlvbi5hY3Rpb24gfSlcIlxuICAgICAgICAgICAgY2xhc3M9XCJ0QWN0aW9uUm93XCJcbiAgICAgICAgICAgIGlkPVwiUmVzZXRUYWJsZUJ1dHRvblwiXG4gICAgICAgID5cbiAgICAgICAgICAgIHt7aGVhZGVyQWN0aW9uLm5hbWUgfHwgaGVhZGVyQWN0aW9uLmxhYmVsfX1cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBvcGVuOiBvcGVuTWVudSB9XCJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgbGVmdDogbWVudUxlZnQgKyAncHgnLCB0b3A6IG1lbnVUb3AgKyAncHgnIH1cIlxuICAgICAgICAgICAgY2xhc3M9XCJ0TWVudSBhY3Rpb24tbWVudSBpdGVtLW1lbnVcIlxuICAgICAgICAgICAgaWQ9XCJSb3dBY3Rpb25NZW51XCJcbiAgICAgICAgICAgICNjb250ZXh0TWVudVxuICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBtZW51SXRlbSBvZiBtZW51SXRlbXNcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3Rpb25SZXF1ZXN0ZWQuZW1pdCh7IGFjdGlvbjogbWVudUl0ZW0uYWN0aW9uLCBpdGVtOiBzZWxlY3RlZEl0ZW0gfSlcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnbWVudS1pdGVtLWhpZGRlbic6ICFzZWxlY3RlZEl0ZW0uYWN0aW9uTGlzdC5pbmNsdWRlcyhtZW51SXRlbS5hY3Rpb24pIHx8IChtZW51SXRlbS5pc0hpZGRlbiAmJiBtZW51SXRlbS5pc0hpZGRlbihzZWxlY3RlZEl0ZW0pKX1cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidEFjdGlvblJvd1wiXG4gICAgICAgICAgICAgICAgaWQ9XCJUYWJsZUFjdGlvbkJ1dHRvbl97e21lbnVJdGVtLmFjdGlvbn19XCJcbiAgICAgICAgPlxuICAgICAgICAgICAge3ttZW51SXRlbS5uYW1lIHx8IG1lbnVJdGVtLmxhYmVsfX1cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgICAgICAgKGNsaWNrT3V0c2lkZSk9XCJjbG9zZUhlYWRlckZpbHRlcigkZXZlbnQpXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgb3Blbjogc2hvd0ZpbHRlck9wdGlvbnMgfVwiXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGxlZnQ6IG1lbnVMZWZ0ICsgJ3B4JywgdG9wOiBtZW51VG9wICsgJ3B4JyB9XCJcbiAgICAgICAgICAgIGNsYXNzPVwidE1lbnUgYWN0aW9uLW1lbnUgaGVhZGVyLW1lbnVcIlxuICAgICAgICAgICAgaWQ9XCJIZWFkZXJGaWx0ZXJPcHRpb25zXCJcbiAgICA+XG4gICAgICAgIDxkaXYgKGNsaWNrKT1cImFwcGx5RmlsdGVyKCRldmVudCwgZmlsdGVyKVwiICpuZ0Zvcj1cImxldCBmaWx0ZXIgb2YgZmlsdGVyT3B0aW9uc1wiIGNsYXNzPVwidEFjdGlvblJvd1wiIFtuZ0NsYXNzXT1cInsnaGFzLWljb24nOiBmaWx0ZXIuaWNvbn1cIiBbaWRdPVwiZmlsdGVyLmNvbHVtbklkXCI+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZpbHRlci5idWJibGVDbGFzc1wiIFtuZ0NsYXNzXT1cImZpbHRlci5idWJibGVDbGFzc1wiIGNsYXNzPVwiYnViYmxlXCI+XG4gICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cImZpbHRlci5zaG93TG9hZGVyXCIgY2xhc3M9XCJjaXJjdWxhclwiIHZpZXdCb3g9XCIyNSAyNSA1MCA1MFwiPlxuICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwYXRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjeD1cIjUwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjeT1cIjUwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcj1cIjIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbWl0ZXJsaW1pdD1cIjEwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIzXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvY2lyY2xlPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmaWx0ZXIuaWNvblwiIGNsYXNzPVwib3MtaWNvbiB7e2ZpbHRlci5pY29ufX1cIj48L3NwYW4+XG4gICAgICAgICAgICB7eyBmaWx0ZXIubGFiZWwgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiAqbmdJZj1cInNob3dEYXRlVGltZVBpY2tlclwiIGNsYXNzPVwiZGF0ZS10aW1lLWNvbnRhaW5lciBkYXRhLXRhYmxlLWRhdGUtdGltZVwiIFtuZ1N0eWxlXT1cInsgbGVmdDogbWVudUxlZnQgKyAncHgnLCB0b3A6IG1lbnVUb3AgKyAncHgnIH1cIiAoY2xpY2tPdXRzaWRlKT1cImNsb3NlRGF0ZVRpbWUoJGV2ZW50KVwiPlxuICAgIDxwLWNhbGVuZGFyXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImRhdGVWYWx1ZVwiXG4gICAgICAgICAgICAob25TZWxlY3QpPVwic2V0RGF0ZVJhbmdlRmlsdGVyKCdjdXN0b20nKVwiXG4gICAgICAgICAgICBkYXRlRm9ybWF0PVwibW0vZGQveXlcIlxuICAgICAgICAgICAgc2VsZWN0aW9uTW9kZT1cInJhbmdlXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IFRpbWUgUmFuZ2VcIlxuICAgICAgICAgICAgI2NhbGVuZGFyXG4gICAgPlxuICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWJ1dHRvbi1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRvZ2dsZUJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7c2VsZWN0ZWQ6IHNlbGVjdGVkUmFuZ2UgPT09ICdob3VyJ31cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNldERhdGVSYW5nZUZpbHRlcignaG91cicpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIExhc3QgSG91clxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidG9nZ2xlQnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZXREYXRlUmFuZ2VGaWx0ZXIoJ2RheScpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntzZWxlY3RlZDogc2VsZWN0ZWRSYW5nZSA9PT0gJ2RheSd9XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIExhc3QgRGF5XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0b2dnbGVCdXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNldERhdGVSYW5nZUZpbHRlcignd2VlaycpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntzZWxlY3RlZDogc2VsZWN0ZWRSYW5nZSA9PT0gJ3dlZWsnfVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICBMYXN0IFdlZWtcbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRvZ2dsZUJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2V0RGF0ZVJhbmdlRmlsdGVyKCdtb250aCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntzZWxlY3RlZDogc2VsZWN0ZWRSYW5nZSA9PT0gJ21vbnRoJ31cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgTGFzdCBNb250aFxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9wLWNhbGVuZGFyPlxuPC9kaXY+XG5cbjxkaXYgKm5nSWY9XCJzaG93VGFnU2VsZWN0b3JcIiBjbGFzcz1cInRhZy1zZWxlY3Rvci1jb250YWluZXIgZGF0YS10YWJsZS10YWctc2VsZWN0b3JcIiBbbmdTdHlsZV09XCJ7IGxlZnQ6IG1lbnVMZWZ0ICsgJ3B4JywgdG9wOiBtZW51VG9wICsgJ3B4JyB9XCIgKGNsaWNrT3V0c2lkZSk9XCJjbG9zZVRhZ1NlbGVjdG9yKCRldmVudClcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uQmFsbCBpY29uLWNsb3NlXCIgKGNsaWNrKT1cImNsb3NlVGFnU2VsZWN0b3IoJGV2ZW50KVwiPjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJ0YWctc2VsZWN0b3ItbGFiZWxcIj5cbiAgICAgICAgPHNwYW4+U2VsZWN0IGFuIEF0dHJpYnV0ZTo8L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGxpYi10YWctc2VsZWN0b3JcbiAgICAgICAgW2ZvY3VzT25Jbml0XT1cInRydWVcIlxuICAgICAgICBbYXZhaWxhYmxlUm9sZUF0dHJpYnV0ZXNdPVwicm9sZUF0dHJpYnV0ZXNcIlxuICAgICAgICBbYXZhaWxhYmxlTmFtZWRBdHRyaWJ1dGVzXT1cIm5hbWVkQXR0cmlidXRlc1wiXG4gICAgICAgIFsoc2VsZWN0ZWRSb2xlQXR0cmlidXRlcyldPVwic2VsZWN0ZWRSb2xlQXR0cmlidXRlc1wiXG4gICAgICAgIFsoc2VsZWN0ZWROYW1lZEF0dHJpYnV0ZXMpXT1cInNlbGVjdGVkTmFtZWRBdHRyaWJ1dGVzXCJcbiAgICAgICAgKHNlbGVjdGVkTmFtZWRBdHRyaWJ1dGVzQ2hhbmdlKT1cInRhZ1NlbGVjdGlvbkNoYW5nZWQoJGV2ZW50LCBmYWxzZSlcIlxuICAgICAgICAoc2VsZWN0ZWRSb2xlQXR0cmlidXRlc0NoYW5nZSk9XCJ0YWdTZWxlY3Rpb25DaGFuZ2VkKCRldmVudCwgdHJ1ZSlcIlxuICAgID48L2xpYi10YWctc2VsZWN0b3I+XG48L2Rpdj5cbjxuZy10ZW1wbGF0ZSAjbm9kYXRhPlxuICAgIDxsaWItbm8taXRlbXNcbiAgICAgICAgKGNsaWNrRW1pdCk9XCJvcGVuQ3JlYXRlKClcIlxuICAgICAgICBbaW1hZ2VdPVwibm9JdGVtc0ltYWdlXCJcbiAgICAgICAgW2lzRW1wdHldPVwiIXJvd0RhdGEgfHwgcm93RGF0YS5sZW5ndGggPT09IDBcIlxuICAgICAgICBbdHlwZU5hbWVdPVwidGhpcy5lbnRpdHlUeXBlTGFiZWxcIlxuICAgID48L2xpYi1uby1pdGVtcz5cbjwvbmctdGVtcGxhdGU+Il19