qms-angular 1.0.39 → 1.0.40
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.
- package/bundles/qms-angular.umd.js +2845 -253
- package/bundles/qms-angular.umd.js.map +1 -1
- package/esm2015/lib/model/en.js +14 -1
- package/esm2015/lib/model/no.js +18 -5
- package/esm2015/lib/qms-ckeditor-components/common/constants/ckeditorEvent.constant.js +3 -1
- package/esm2015/lib/qms-ckeditor-components/common/constants/iconSvg.constants.js +8 -0
- package/esm2015/lib/qms-ckeditor-components/common/enums/image-mode.enum.js +9 -0
- package/esm2015/lib/qms-ckeditor-components/common/enums/protocol-type.enum.js +11 -3
- package/esm2015/lib/qms-ckeditor-components/common/enums/target-type.enum.js +8 -1
- package/esm2015/lib/qms-ckeditor-components/common/functions/common.function.js +3 -1
- package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-data.model.js +1 -1
- package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-input.model.js +1 -9
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.component.js +524 -0
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.lib.js +1948 -0
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.validator.js +7 -0
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-link/qms-ckeditor-link.component.js +4 -4
- package/esm2015/lib/qms-ckeditor-components/models/qms-ckeditor-imagemap.model.js +22 -0
- package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.component.js +45 -12
- package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.module.js +11 -1
- package/esm2015/qms-angular.js +3 -1
- package/fesm2015/qms-angular.js +2822 -252
- package/fesm2015/qms-angular.js.map +1 -1
- package/lib/model/en.d.ts +13 -0
- package/lib/model/no.d.ts +13 -0
- package/lib/qms-ckeditor-components/common/constants/ckeditorEvent.constant.d.ts +2 -0
- package/lib/qms-ckeditor-components/common/constants/iconSvg.constants.d.ts +7 -0
- package/lib/qms-ckeditor-components/common/enums/image-mode.enum.d.ts +7 -0
- package/lib/qms-ckeditor-components/common/enums/protocol-type.enum.d.ts +9 -2
- package/lib/qms-ckeditor-components/common/enums/target-type.enum.d.ts +6 -0
- package/lib/qms-ckeditor-components/common/models/qms-ckeditor-data.model.d.ts +1 -0
- package/lib/qms-ckeditor-components/common/models/qms-ckeditor-input.model.d.ts +7 -7
- package/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.component.d.ts +123 -0
- package/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.lib.d.ts +542 -0
- package/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.validator.d.ts +2 -0
- package/lib/qms-ckeditor-components/models/qms-ckeditor-imagemap.model.d.ts +20 -0
- package/lib/qms-ckeditor-components/qms-ckeditor.component.d.ts +5 -4
- package/package.json +1 -1
- package/qms-angular.d.ts +2 -0
- package/qms-angular.metadata.json +1 -1
- package/src/assets/qms-ckeditor-plugin/build/ckeditor.js +2 -2
- package/src/assets/qms-ckeditor-plugin/build/ckeditor.js.map +1 -1
- package/src/assets/qms-ckeditor-plugin/package-lock.json +12177 -9
- package/src/assets/qms-ckeditor-plugin/src/ckeditor.js +3 -2
- package/src/assets/qms-ckeditor-plugin/src/plugins/common/qmsCKEditorConstant.js +4 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/common/qmsCKEditorService.js +10 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/fullscreen/dist/qmsCKEditorFullscreenPlugin.dev.js +87 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/converters.js +378 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/imagemap.js +14 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/imagemapediting.js +183 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/imagemapui.js +49 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/insertimagemapcommand.js +127 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/resizeimagemapcommand.js +82 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/utils.js +234 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/link/linkediting.js +1 -1
- package/src/assets/qms-ckeditor-plugin/src/plugins/link/linkimage.js +1 -1
- package/src/assets/qms-ckeditor-plugin/src/plugins/link/ui/linkactionsview.js +1 -1
- package/src/assets/qms-ckeditor-plugin/src/plugins/link/ui/linkformview.js +1 -1
- package/src/assets/qms-ckeditor-plugin/src/plugins/tooltip/inserttooltipcommand.js +1 -1
- package/src/assets/qms-ckeditor-plugin/src/plugins/tooltip/tooltipediting.js +1 -1
- package/src/assets/qms-ckeditor-plugin/src/plugins/tooltip/ui/actionsview.js +1 -1
- package/src/assets/qms-ckeditor-plugin/src/themes/icons/imagemap.svg +56 -0
- package/src/assets/qms-ckeditor-plugin/src/themes/{tyles → styles}/anchor.css +0 -0
- package/src/assets/qms-ckeditor-plugin/src/themes/{tyles → styles}/link.css +0 -0
- package/src/assets/qms-ckeditor-plugin/src/themes/{tyles → styles}/linkactions.css +0 -0
- package/src/assets/qms-ckeditor-plugin/src/themes/{tyles → styles}/linkform.css +0 -0
- package/src/assets/qms-ckeditor-plugin/src/themes/{tyles → styles}/linkimage.css +0 -0
- package/src/assets/qms-ckeditor-plugin/src/themes/{tyles → styles}/tooltip.css +0 -0
- package/src/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.component.scss +27 -0
- package/src/themes/_color.scss +8 -0
- package/src/themes/core/_colors.scss +2 -0
- package/src/themes/core/_tab.scss +50 -49
@@ -0,0 +1,524 @@
|
|
1
|
+
import { ChangeDetectorRef, Component, Inject, ViewChild, Renderer2 } from '@angular/core';
|
2
|
+
import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
|
3
|
+
import { takeUntil } from 'rxjs/operators';
|
4
|
+
import { TranslateLibraryService } from '../../../services/translation-registry.service';
|
5
|
+
import { QMSCKEditorBaseComponent } from '../../qms-ckeditor-base.component';
|
6
|
+
import { QMSCKEditorImageMap } from '../../models/qms-ckeditor-imagemap.model';
|
7
|
+
import { LinkType } from '../../common/enums/link-type.enum';
|
8
|
+
import { ProtocolTypeName } from '../../common/enums/protocol-type.enum';
|
9
|
+
import { TargetTypeName } from '../../common/enums/target-type.enum';
|
10
|
+
import { ImageModeName } from '../../common/enums/image-mode.enum';
|
11
|
+
import { DomSanitizer } from '@angular/platform-browser';
|
12
|
+
import { MatIconRegistry } from '@angular/material/icon';
|
13
|
+
import { IconSvg } from '../../common/constants/iconSvg.constants';
|
14
|
+
import { QMSCKEditorImageMapLib } from './qms-ckeditor-imagemap.lib';
|
15
|
+
import { QMSCKEditorRelation } from '../../common/models/qms-ckeditor-relation.model';
|
16
|
+
import QMSCKEditorParamter from '../../common/models/qms-ckeditor-parameter.model';
|
17
|
+
import { QMSCKEditorLinkService } from '../../services/qms-ckeditor-link.service';
|
18
|
+
import { QMSCKEditorRelatedComponent } from '../qms-ckeditor-relation/qmsckeditor-related.component';
|
19
|
+
import { LinkAttachmentComponent } from '../qms-ckeditor-link/attachments/link-attachment.component';
|
20
|
+
import { LinkAnchor } from '../../common/enums/link-anchor.enum';
|
21
|
+
import { FormControl, FormGroup, Validators } from '@angular/forms';
|
22
|
+
import { invalidURLValidator } from './qms-ckeditor-imagemap.validator';
|
23
|
+
export class QMSCKEditorImageMapComponent extends QMSCKEditorBaseComponent {
|
24
|
+
constructor(renderer, cdr, dialog, translate, linkService, dialogRef, data, iconRegistry, sanitizer) {
|
25
|
+
super();
|
26
|
+
this.renderer = renderer;
|
27
|
+
this.cdr = cdr;
|
28
|
+
this.dialog = dialog;
|
29
|
+
this.translate = translate;
|
30
|
+
this.linkService = linkService;
|
31
|
+
this.dialogRef = dialogRef;
|
32
|
+
this.data = data;
|
33
|
+
this.linkTypes = [];
|
34
|
+
this.targets = [];
|
35
|
+
this.protocols = [];
|
36
|
+
this.modes = [];
|
37
|
+
this.zoomTypes = [];
|
38
|
+
this.url = '';
|
39
|
+
this.processedUrl = '';
|
40
|
+
this.selectedMode = ImageModeName.Rectangle;
|
41
|
+
this.selectedLinkType = LinkType.url;
|
42
|
+
this.selectedTarget = TargetTypeName.new;
|
43
|
+
this.selectedProtocol = ProtocolTypeName.http;
|
44
|
+
this.selectedZoom = 1.0;
|
45
|
+
this.protocolRegex = /^(http|https|ftp|news):\/\/(?=.)/i;
|
46
|
+
this.javascriptLinkRegex = /javascript\:/i;
|
47
|
+
this.documentId = 0;
|
48
|
+
//anchorTitle = '';
|
49
|
+
this.anchorText = '';
|
50
|
+
//anchorByName = '';
|
51
|
+
this.advisoryTitle = '';
|
52
|
+
this.isUrlProcessing = false;
|
53
|
+
this.naturalImageWidth = 0;
|
54
|
+
this.naturalImageHeight = 0;
|
55
|
+
this.currentAreaId = -1;
|
56
|
+
this.showImageMapInformation = false;
|
57
|
+
this.anchorDocuments = [];
|
58
|
+
//documentAnchors: IAnchor[];
|
59
|
+
this.imageListeners = [];
|
60
|
+
this.imageMapData = data;
|
61
|
+
this.naturalImageHeight = this.imageMapData.imageHeight;
|
62
|
+
this.naturalImageWidth = this.imageMapData.imageWidth;
|
63
|
+
this.initFormControl();
|
64
|
+
this.initSvgIcons(iconRegistry, sanitizer);
|
65
|
+
}
|
66
|
+
initDefaultValues() {
|
67
|
+
this.selectedLinkType = LinkType.url;
|
68
|
+
this.selectedTarget = TargetTypeName.new;
|
69
|
+
this.selectedProtocol = ProtocolTypeName.http;
|
70
|
+
this.url = '';
|
71
|
+
this.processedUrl = '';
|
72
|
+
this.advisoryTitle = '';
|
73
|
+
this.anchorText = '';
|
74
|
+
}
|
75
|
+
initSvgIcons(iconRegistry, sanitizer) {
|
76
|
+
iconRegistry.addSvgIconLiteral('vector-pointer', sanitizer.bypassSecurityTrustHtml(IconSvg.VECTOR_POINTER));
|
77
|
+
iconRegistry.addSvgIconLiteral('vector-circle', sanitizer.bypassSecurityTrustHtml(IconSvg.VECTOR_CIRCLE));
|
78
|
+
iconRegistry.addSvgIconLiteral('vector-rectangle', sanitizer.bypassSecurityTrustHtml(IconSvg.VECTOR_RECTANGLE));
|
79
|
+
iconRegistry.addSvgIconLiteral('vector-polygon', sanitizer.bypassSecurityTrustHtml(IconSvg.VECTOR_POLYGON));
|
80
|
+
iconRegistry.addSvgIconLiteral('vector-remove', sanitizer.bypassSecurityTrustHtml(IconSvg.VECTOR_REMOVE));
|
81
|
+
}
|
82
|
+
initFormControl() {
|
83
|
+
const valiationControls = {
|
84
|
+
targetList: new FormControl(),
|
85
|
+
protocolList: new FormControl(),
|
86
|
+
anchorTextList: new FormControl(),
|
87
|
+
modeList: new FormControl(),
|
88
|
+
zoomList: new FormControl(),
|
89
|
+
linkTypeList: new FormControl()
|
90
|
+
};
|
91
|
+
if (this.imageMapData.linkJavaScriptLinksAllowed == true) {
|
92
|
+
valiationControls['url'] = new FormControl('', [Validators.required]);
|
93
|
+
}
|
94
|
+
else {
|
95
|
+
valiationControls['url'] = new FormControl('', [Validators.required, invalidURLValidator(this.javascriptLinkRegex)]);
|
96
|
+
}
|
97
|
+
this.imageMapFormGroup = new FormGroup(valiationControls);
|
98
|
+
}
|
99
|
+
initLinkType() {
|
100
|
+
if (this.linkTypes) {
|
101
|
+
this.linkTypes.push({ id: LinkType.url, name: this.LANG.QMSCKEDITOR.LINK_URL });
|
102
|
+
this.linkTypes.push({
|
103
|
+
id: LinkType.anchorText,
|
104
|
+
name: this.LANG.QMSCKEDITOR.LINK_ANCHOR_IN_TEXT
|
105
|
+
});
|
106
|
+
}
|
107
|
+
}
|
108
|
+
initTarget() {
|
109
|
+
if (this.targets) {
|
110
|
+
this.targets.push({ id: TargetTypeName.new, name: this.LANG.QMSCKEDITOR.TARTGET_NEW });
|
111
|
+
this.targets.push({ id: TargetTypeName.same, name: this.LANG.QMSCKEDITOR.TARGET_SAME });
|
112
|
+
}
|
113
|
+
}
|
114
|
+
initProtocol() {
|
115
|
+
if (this.protocols) {
|
116
|
+
this.protocols.push({ id: ProtocolTypeName.http, name: this.LANG.QMSCKEDITOR.PROTOCOL_HTTP });
|
117
|
+
this.protocols.push({ id: ProtocolTypeName.https, name: this.LANG.QMSCKEDITOR.PROTOCOL_HTTPS });
|
118
|
+
this.protocols.push({ id: ProtocolTypeName.ftp, name: this.LANG.QMSCKEDITOR.PROTOCOL_FTP });
|
119
|
+
this.protocols.push({ id: ProtocolTypeName.news, name: this.LANG.QMSCKEDITOR.PROTOCOL_NEW });
|
120
|
+
this.protocols.push({ id: ProtocolTypeName.other, name: this.LANG.QMSCKEDITOR.PROTOCOL_OTHER });
|
121
|
+
}
|
122
|
+
}
|
123
|
+
initModes() {
|
124
|
+
if (this.modes) {
|
125
|
+
this.modes.push({ id: ImageModeName.Pointer, name: this.LANG.QMSCKEDITOR.IMAGE_MODE_POINTER, icon: "vector-pointer" });
|
126
|
+
this.modes.push({ id: ImageModeName.Rectangle, name: this.LANG.QMSCKEDITOR.IMAGE_MODE_RECTANGLE, icon: "vector-rectangle" });
|
127
|
+
this.modes.push({ id: ImageModeName.Circle, name: this.LANG.QMSCKEDITOR.IMAGE_MODE_CIRCLE, icon: "vector-circle" });
|
128
|
+
this.modes.push({ id: ImageModeName.Polygon, name: this.LANG.QMSCKEDITOR.IMAGE_MODE_POLYGON, icon: "vector-polygon" });
|
129
|
+
this.modes.push({ id: ImageModeName.Remove, name: this.LANG.QMSCKEDITOR.IMAGE_MODE_REMOVE, icon: "vector-remove" });
|
130
|
+
}
|
131
|
+
}
|
132
|
+
initZoomTypes() {
|
133
|
+
if (this.zoomTypes) {
|
134
|
+
this.zoomTypes.push({ id: 0.25, name: "25%" });
|
135
|
+
this.zoomTypes.push({ id: 0.5, name: "50%" });
|
136
|
+
this.zoomTypes.push({ id: 1.0, name: "100%" });
|
137
|
+
this.zoomTypes.push({ id: 2.0, name: "200%" });
|
138
|
+
this.zoomTypes.push({ id: 3.0, name: "300%" });
|
139
|
+
}
|
140
|
+
}
|
141
|
+
initAnchor() {
|
142
|
+
this.anchors = [];
|
143
|
+
this.anchors = [{ value: 0, viewValue: '', anchorValue: LinkAnchor.Blank }];
|
144
|
+
}
|
145
|
+
ngOnInit() {
|
146
|
+
this.translate.getLanguageSubject$.pipe(takeUntil(this.ngUnsubcribe)).subscribe((res) => {
|
147
|
+
if (res) {
|
148
|
+
this.LANG = this.translate.getObjectLang(res);
|
149
|
+
}
|
150
|
+
});
|
151
|
+
this.initLinkType();
|
152
|
+
this.initTarget();
|
153
|
+
this.initProtocol();
|
154
|
+
this.initModes();
|
155
|
+
this.initZoomTypes();
|
156
|
+
}
|
157
|
+
ngOnDestroy() {
|
158
|
+
super.ngOnDestroy();
|
159
|
+
if (this.imageListeners && this.imageListeners.length > 0) {
|
160
|
+
this.imageListeners.forEach(listener => {
|
161
|
+
listener();
|
162
|
+
});
|
163
|
+
}
|
164
|
+
}
|
165
|
+
onImageLoad() {
|
166
|
+
this.naturalImageHeight = this.naturalImageHeight != 0 ? this.naturalImageHeight : this.myImageRef.nativeElement.naturalHeight;
|
167
|
+
this.naturalImageWidth = this.naturalImageWidth != 0 ? this.naturalImageWidth : this.myImageRef.nativeElement.naturalWidth;
|
168
|
+
this.setImageSize();
|
169
|
+
this.myImageMap.setMapJson({
|
170
|
+
name: this.imageMapData.name,
|
171
|
+
areas: this.imageMapData.areas
|
172
|
+
});
|
173
|
+
if (this.imageMapData.areas && this.imageMapData.areas.length > 0) {
|
174
|
+
this.myImageMap.blurArea(this.myImageMap.currentid);
|
175
|
+
this.myImageMap.currentid = 0;
|
176
|
+
this.myImageMap.selectedId = 0;
|
177
|
+
this.onSelectArea(this.myImageMap.areas[0]);
|
178
|
+
this.myImageMap.highlightArea(0);
|
179
|
+
}
|
180
|
+
}
|
181
|
+
ngAfterViewInit() {
|
182
|
+
if (this.myImageRef) {
|
183
|
+
this.imageListeners.push(this.renderer.listen(this.myImageRef.nativeElement, 'load', () => {
|
184
|
+
this.onImageLoad();
|
185
|
+
}));
|
186
|
+
}
|
187
|
+
// Avoid drag&drop of the image
|
188
|
+
this.myImageMap = new QMSCKEditorImageMapLib({
|
189
|
+
custom_callbacks: {
|
190
|
+
"onAddArea": this.onAddArea.bind(this),
|
191
|
+
'onSelectArea': this.onSelectArea.bind(this),
|
192
|
+
'onRemoveArea': this.onRemoveArea.bind(this),
|
193
|
+
'onStatusMessage': this.onStatusMessage.bind(this)
|
194
|
+
},
|
195
|
+
imageElement: this.myImageRef.nativeElement,
|
196
|
+
bounding_box: false,
|
197
|
+
CL_DRAW_SHAPE: '#F00',
|
198
|
+
CL_NORM_SHAPE: '#AAA',
|
199
|
+
CL_HIGHLIGHT_SHAPE: '#F00',
|
200
|
+
strings: {
|
201
|
+
"POLYGON_DRAW": this.LANG.QMSCKEDITOR.POLYGON_DRAW,
|
202
|
+
"RECTANGLE_DRAW": this.LANG.QMSCKEDITOR.RECTANGLE_DRAW,
|
203
|
+
"SQUARE_DRAW": this.LANG.QMSCKEDITOR.SQUARE_DRAW,
|
204
|
+
'READY': '',
|
205
|
+
'RECTANGLE_MOVE': '',
|
206
|
+
'RECTANGLE_RESIZE_TOP': '',
|
207
|
+
'RECTANGLE_RESIZE_RIGHT': '',
|
208
|
+
'RECTANGLE_RESIZE_BOTTOM': '',
|
209
|
+
'RECTANGLE_RESIZE_LEFT': '',
|
210
|
+
'SQUARE_MOVE': '',
|
211
|
+
'SQUARE_RESIZE_TOP': '',
|
212
|
+
'SQUARE_RESIZE_RIGHT': '',
|
213
|
+
'SQUARE_RESIZE_BOTTOM': '',
|
214
|
+
'SQUARE_RESIZE_LEFT': '',
|
215
|
+
'POLYGON_MOVE': ''
|
216
|
+
}
|
217
|
+
});
|
218
|
+
}
|
219
|
+
parseLinkUrl(url, defaultProtocolName) {
|
220
|
+
const protocol = this.protocolRegex.exec(url);
|
221
|
+
if (protocol) {
|
222
|
+
this.processedUrl = url.substr(protocol[0].length);
|
223
|
+
this.url = this.processedUrl;
|
224
|
+
this.selectedProtocol = protocol[0].toLowerCase();
|
225
|
+
}
|
226
|
+
else if (this.javascriptLinkRegex.test(url) && !this.imageMapData.linkJavaScriptLinksAllowed) {
|
227
|
+
this.selectedProtocol = ProtocolTypeName.http;
|
228
|
+
this.processedUrl = '';
|
229
|
+
this.url = this.processedUrl;
|
230
|
+
}
|
231
|
+
else {
|
232
|
+
this.processedUrl = url;
|
233
|
+
this.url = this.processedUrl;
|
234
|
+
if (!!this.selectedProtocol) {
|
235
|
+
this.selectedProtocol = defaultProtocolName || ProtocolTypeName.http;
|
236
|
+
}
|
237
|
+
}
|
238
|
+
}
|
239
|
+
onSelectArea(area) {
|
240
|
+
this.currentAreaId = area.aid;
|
241
|
+
this.showImageMapInformation = true;
|
242
|
+
if (this.selectedMode == ImageModeName.Remove) {
|
243
|
+
this.myImageMap.removeArea(this.currentAreaId);
|
244
|
+
}
|
245
|
+
else {
|
246
|
+
if (area.ahref.match(/^#(.*)$/)) {
|
247
|
+
this.anchorText = area.ahref.slice(1);
|
248
|
+
this.selectedLinkType = LinkType.anchorText;
|
249
|
+
}
|
250
|
+
else {
|
251
|
+
this.selectedLinkType = LinkType.url;
|
252
|
+
this.parseLinkUrl(area.ahref);
|
253
|
+
}
|
254
|
+
this.selectedTarget = area.atarget;
|
255
|
+
this.advisoryTitle = area.aalt;
|
256
|
+
this.cdr.detectChanges();
|
257
|
+
}
|
258
|
+
}
|
259
|
+
onRemoveArea() {
|
260
|
+
this.currentAreaId = -1;
|
261
|
+
this.showImageMapInformation = false;
|
262
|
+
}
|
263
|
+
removeMap() {
|
264
|
+
this.currentAreaId = -1;
|
265
|
+
this.showImageMapInformation = false;
|
266
|
+
this.myImageMap.removeAllAreas();
|
267
|
+
}
|
268
|
+
onStatusMessage(text) {
|
269
|
+
if (this.myStatusRef) {
|
270
|
+
this.myStatusRef.nativeElement.innerHTML = text || '';
|
271
|
+
}
|
272
|
+
}
|
273
|
+
onUrlKeyup() {
|
274
|
+
this.isUrlProcessing = true;
|
275
|
+
if (this.url != this.processedUrl) {
|
276
|
+
this.parseLinkUrl(this.url);
|
277
|
+
this.updateAreaValues();
|
278
|
+
}
|
279
|
+
this.isUrlProcessing = false;
|
280
|
+
}
|
281
|
+
onUrlChange() {
|
282
|
+
if (!this.isUrlProcessing) {
|
283
|
+
this.onUrlKeyup();
|
284
|
+
}
|
285
|
+
}
|
286
|
+
onAnchorTextChange() {
|
287
|
+
this.updateAreaValues();
|
288
|
+
}
|
289
|
+
onProtocolChange() {
|
290
|
+
this.updateAreaValues();
|
291
|
+
}
|
292
|
+
onTargetChange() {
|
293
|
+
this.updateAreaValues();
|
294
|
+
}
|
295
|
+
onAddArea(id) {
|
296
|
+
this.currentAreaId = id;
|
297
|
+
this.showImageMapInformation = true;
|
298
|
+
this.initDefaultValues();
|
299
|
+
this.updateAreaValues();
|
300
|
+
}
|
301
|
+
updateAreaValues() {
|
302
|
+
if (this.currentAreaId > -1) {
|
303
|
+
var ahref = this.buildUrlWithProtocol();
|
304
|
+
if (this.selectedLinkType == LinkType.anchorText) {
|
305
|
+
this.myImageMap.areas[this.currentAreaId].atarget = TargetTypeName.same;
|
306
|
+
this.myImageMap.areas[this.currentAreaId].aalt = this.anchorText;
|
307
|
+
}
|
308
|
+
else {
|
309
|
+
this.myImageMap.areas[this.currentAreaId].atarget = this.selectedTarget || TargetTypeName.new;
|
310
|
+
this.myImageMap.areas[this.currentAreaId].aalt = this.advisoryTitle;
|
311
|
+
}
|
312
|
+
this.myImageMap.areas[this.currentAreaId].ahref = ahref;
|
313
|
+
}
|
314
|
+
}
|
315
|
+
buildUrlWithProtocol() {
|
316
|
+
if (this.selectedLinkType == LinkType.anchorText) {
|
317
|
+
return '#' + (this.anchorText || '');
|
318
|
+
}
|
319
|
+
if (!!this.processedUrl) {
|
320
|
+
return this.selectedProtocol + this.processedUrl;
|
321
|
+
}
|
322
|
+
return '';
|
323
|
+
}
|
324
|
+
ngAfterViewChecked() {
|
325
|
+
this.cdr.detectChanges();
|
326
|
+
}
|
327
|
+
onCloseDialog() {
|
328
|
+
this.dialogRef.close();
|
329
|
+
}
|
330
|
+
onModeChange(e) {
|
331
|
+
this.selectedMode = e.value;
|
332
|
+
if (this.selectedMode == ImageModeName.Pointer || this.selectedMode == ImageModeName.Remove) {
|
333
|
+
this.myImageMap.is_drawing = 0;
|
334
|
+
this.myImageMap.nextShape = '';
|
335
|
+
this.myImageRef.nativeElement.style.cursor = 'default';
|
336
|
+
}
|
337
|
+
else {
|
338
|
+
this.myImageMap.nextShape = this.selectedMode;
|
339
|
+
this.myImageRef.nativeElement.style.cursor = 'crosshair';
|
340
|
+
}
|
341
|
+
}
|
342
|
+
onZoomChange() {
|
343
|
+
this.setImageSize();
|
344
|
+
if (this.myImageMap) {
|
345
|
+
this.myImageMap.scaleAllAreas(this.selectedZoom);
|
346
|
+
}
|
347
|
+
}
|
348
|
+
onLinkTypeChange() {
|
349
|
+
if (this.selectedLinkType === LinkType.anchorText) {
|
350
|
+
this.getEditorAnchor();
|
351
|
+
}
|
352
|
+
this.updateAreaValues();
|
353
|
+
}
|
354
|
+
getEditorAnchor() {
|
355
|
+
this.anchorDocuments = [];
|
356
|
+
if (this.imageMapData.editorContent) {
|
357
|
+
this.anchorDocuments.push({
|
358
|
+
id: 0,
|
359
|
+
entityId: 0,
|
360
|
+
documentId: 0,
|
361
|
+
documentTypeId: 0,
|
362
|
+
richText: this.imageMapData.editorContent
|
363
|
+
});
|
364
|
+
}
|
365
|
+
this.setAnchorDocument(this.anchorDocuments);
|
366
|
+
this.editorAnchors = this.anchors;
|
367
|
+
}
|
368
|
+
setImageSize() {
|
369
|
+
if (this.myImageRef) {
|
370
|
+
const width = this.naturalImageWidth * this.selectedZoom;
|
371
|
+
const height = this.naturalImageHeight * this.selectedZoom;
|
372
|
+
this.myImageRef.nativeElement.setAttribute("width", `${width}px;`);
|
373
|
+
this.myImageRef.nativeElement.setAttribute("height", `${height}px;`);
|
374
|
+
this.myImageRef.nativeElement.style.width = `${width}px`;
|
375
|
+
this.myImageRef.nativeElement.style.height = `${height}px`;
|
376
|
+
this.myImageRef.nativeElement.style.cursor = this.selectedMode == ImageModeName.Pointer || this.selectedMode == ImageModeName.Remove ? 'default' : 'crosshair';
|
377
|
+
}
|
378
|
+
}
|
379
|
+
eHandbook(isOnlyDocument, isAnchorDocument) {
|
380
|
+
const data = new QMSCKEditorRelation();
|
381
|
+
data.isOnlyDocument = isOnlyDocument;
|
382
|
+
data.isEnableFolder = !isOnlyDocument;
|
383
|
+
const dialogTemplate = this.dialog.open(QMSCKEditorRelatedComponent, {
|
384
|
+
width: '650px',
|
385
|
+
height: '650px',
|
386
|
+
data,
|
387
|
+
disableClose: true
|
388
|
+
});
|
389
|
+
dialogTemplate
|
390
|
+
.afterClosed()
|
391
|
+
.pipe(takeUntil(this.ngUnsubcribe))
|
392
|
+
.subscribe((result) => {
|
393
|
+
if (result) {
|
394
|
+
if (isAnchorDocument) {
|
395
|
+
this.documentId = result.id;
|
396
|
+
//this.anchorTitle = `${result.title}(${result.id})`;
|
397
|
+
this.getAnchorDocument(result.id);
|
398
|
+
}
|
399
|
+
else {
|
400
|
+
this.parseLinkUrl(result.url);
|
401
|
+
this.selectedProtocol = ProtocolTypeName.other;
|
402
|
+
if (!this.advisoryTitle) {
|
403
|
+
this.advisoryTitle = result.title;
|
404
|
+
}
|
405
|
+
}
|
406
|
+
this.updateAreaValues();
|
407
|
+
}
|
408
|
+
});
|
409
|
+
}
|
410
|
+
getAnchorDocument(documentId) {
|
411
|
+
this.linkService
|
412
|
+
.getAnchorDocumentList(documentId)
|
413
|
+
.pipe(takeUntil(this.ngUnsubcribe))
|
414
|
+
.subscribe((res) => {
|
415
|
+
if (res) {
|
416
|
+
this.anchorDocuments = res;
|
417
|
+
this.setAnchorDocument(this.anchorDocuments);
|
418
|
+
//this.documentAnchors = this.anchors;
|
419
|
+
}
|
420
|
+
else {
|
421
|
+
this.anchorDocuments = [];
|
422
|
+
this.setAnchorDocument(this.anchorDocuments);
|
423
|
+
//this.documentAnchors = this.anchors;
|
424
|
+
}
|
425
|
+
});
|
426
|
+
}
|
427
|
+
setAnchorDocument(anchorDocument) {
|
428
|
+
this.initAnchor();
|
429
|
+
let id = 3;
|
430
|
+
if (anchorDocument) {
|
431
|
+
anchorDocument.forEach((e) => {
|
432
|
+
const div = document.createElement('div');
|
433
|
+
div.innerHTML = e.richText;
|
434
|
+
const domContent = div;
|
435
|
+
const aTags = domContent.getElementsByTagName('a');
|
436
|
+
if (aTags) {
|
437
|
+
// tslint:disable-next-line:prefer-for-of
|
438
|
+
for (let i = 0; i < aTags.length; i++) {
|
439
|
+
const tag = aTags[i];
|
440
|
+
if (tag.name) {
|
441
|
+
const index = this.anchors.findIndex((x) => {
|
442
|
+
return x.anchorValue === tag.name;
|
443
|
+
});
|
444
|
+
if (index < 0) {
|
445
|
+
this.anchors.push({
|
446
|
+
value: id,
|
447
|
+
viewValue: tag.name,
|
448
|
+
anchorValue: tag.name
|
449
|
+
});
|
450
|
+
id += 1;
|
451
|
+
}
|
452
|
+
}
|
453
|
+
}
|
454
|
+
}
|
455
|
+
});
|
456
|
+
}
|
457
|
+
// this.anchors.push({
|
458
|
+
// value: 1,
|
459
|
+
// viewValue: this.LANG.QMSCKEDITOR.ANCHOR_ATTACHMENT,
|
460
|
+
// anchorValue: LinkAnchor.Attachment
|
461
|
+
// });
|
462
|
+
// this.anchors.push({
|
463
|
+
// value: 2,
|
464
|
+
// viewValue: this.LANG.QMSCKEDITOR.ANCHOR_RELATED_DOCUMENT,
|
465
|
+
// anchorValue: LinkAnchor.Related
|
466
|
+
// });
|
467
|
+
}
|
468
|
+
attachment() {
|
469
|
+
const data = new QMSCKEditorParamter();
|
470
|
+
data.module = this.imageMapData.module;
|
471
|
+
data.entityId = this.imageMapData.entityId;
|
472
|
+
const dialogTemplate = this.dialog.open(LinkAttachmentComponent, {
|
473
|
+
width: '650px',
|
474
|
+
height: '650px',
|
475
|
+
data,
|
476
|
+
disableClose: true
|
477
|
+
});
|
478
|
+
dialogTemplate
|
479
|
+
.afterClosed()
|
480
|
+
.pipe(takeUntil(this.ngUnsubcribe))
|
481
|
+
.subscribe((result) => {
|
482
|
+
if (result) {
|
483
|
+
this.parseLinkUrl(result.url);
|
484
|
+
this.selectedProtocol = ProtocolTypeName.other;
|
485
|
+
if (!this.advisoryTitle) {
|
486
|
+
this.advisoryTitle = result.title;
|
487
|
+
}
|
488
|
+
this.updateAreaValues();
|
489
|
+
}
|
490
|
+
});
|
491
|
+
}
|
492
|
+
save() {
|
493
|
+
const data = this.myImageMap.getMapJson();
|
494
|
+
data.imageHeight = this.naturalImageHeight;
|
495
|
+
data.imageWidth = this.naturalImageWidth;
|
496
|
+
this.dialogRef.close(data);
|
497
|
+
}
|
498
|
+
cancel() {
|
499
|
+
this.dialogRef.close();
|
500
|
+
}
|
501
|
+
}
|
502
|
+
QMSCKEditorImageMapComponent.decorators = [
|
503
|
+
{ type: Component, args: [{
|
504
|
+
selector: 'app-qmsck-imagemap',
|
505
|
+
template: "<div id=\"qmsckeditor-imagemap\" class=\"qmsckeditor qmsckeditor__imagemap__container\">\r\n <div id=\"qmsckeditor-imagemap-header\">\r\n <span id=\"qmsckeditor-imagemap-header_001\" mat-icon-button class=\"qmsckeditor button__close\"\r\n (click)=\"onCloseDialog()\">\r\n <mat-icon>close</mat-icon>\r\n </span>\r\n <div id=\"qmsckeditor-imagemap-header_002\" mat-dialog-content>\r\n <h2 id=\"qmsckeditor-imagemap_002_001\">\r\n {{ LANG.QMSCKEDITOR.IMAGE_MAP_PROPERTIES }}\r\n </h2>\r\n </div>\r\n </div>\r\n <div id=\"qmsckeditor-imagemap-content\">\r\n <div id=\"qmsckeditor-imagemap-content_001\" class=\"col-12 mt-1 pl-2 pr-2\">\r\n <mat-expansion-panel id=\"qmsckeditor-imagemap-panel\" [expanded]=\"true\" (opened)=\"(true)\" (closed)=\"(false)\">\r\n <div id=\"qmsckeditor-imagemap-panel_001\">\r\n <div id=\"qmsckeditor-imagemap-panel_001_001\" class=\"qmsckeditor__imagemap__information\">\r\n <form [formGroup]=\"imageMapFormGroup\">\r\n <div class=\"row\">\r\n <div class=\"col-9\">\r\n <mat-button-toggle-group [(ngModel)]=\"selectedMode\" formControlName=\"modeList\"\r\n (change)=\"onModeChange($event)\">\r\n <mat-button-toggle *ngFor=\"let mode of modes\" [value]=\"mode.id\"\r\n [matTooltip]=\"mode.name\">\r\n <mat-icon color=\"red\" [svgIcon]=\"mode.icon\" aria-hidden=\"true\">\r\n </mat-icon>\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n <span style=\"margin-left: 15px;\" #myStatus></span>\r\n </div>\r\n <div class=\"col-3\">\r\n <mat-form-field appearance=\"fill\" class=\"col-12 pl-3 pr-3 pb-1\">\r\n <mat-label>{{ LANG.QMSCKEDITOR.ZOOM }}</mat-label>\r\n <mat-select [(ngModel)]=\"selectedZoom\" formControlName=\"zoomList\"\r\n (ngModelChange)=\"onZoomChange()\" disableOptionCentering>\r\n <mat-option *ngFor=\"let zoomType of zoomTypes\" [value]=\"zoomType.id\">\r\n {{ zoomType.name }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <div class=\"row\" [ngClass]=\"{'hidden': !showImageMapInformation}\">\r\n <div class=\"col-3\">\r\n <mat-form-field appearance=\"fill\" class=\"col-12 pl-3 pr-3 pb-1\">\r\n <mat-label>{{ LANG.QMSCKEDITOR.LINK_TYPE }}</mat-label>\r\n <mat-select [(ngModel)]=\"selectedLinkType\" formControlName=\"linkTypeList\"\r\n (ngModelChange)=\"onLinkTypeChange()\" disableOptionCentering>\r\n <mat-option *ngFor=\"let link of linkTypes\" [value]=\"link.id\">\r\n {{ link.name }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-3\" *ngIf=\"selectedLinkType === 0\">\r\n <mat-form-field appearance=\"fill\" class=\"col-12 pl-3 pr-3 pb-1\">\r\n <mat-label>{{ LANG.QMSCKEDITOR.TARGET }}</mat-label>\r\n <mat-select [(ngModel)]=\"selectedTarget\" formControlName=\"targetList\"\r\n (ngModelChange)=\"onTargetChange()\" disableOptionCentering>\r\n <mat-option *ngFor=\"let target of targets\" [value]=\"target.id\">\r\n {{ target.name }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <div class=\"row\" [ngClass]=\"{'hidden': !showImageMapInformation}\"\r\n *ngIf=\"selectedLinkType === 1\">\r\n <div class=\"col-3\">\r\n <mat-form-field appearance=\"fill\" class=\"col-12 pl-3 pr-\">\r\n <mat-label>{{ LANG.QMSCKEDITOR.ANCHOR_BY_NAME }}</mat-label>\r\n <mat-select [(ngModel)]=\"anchorText\" formControlName=\"anchorTextList\"\r\n (ngModelChange)=\"onAnchorTextChange()\">\r\n <mat-option *ngFor=\"let editorAnchor of editorAnchors\"\r\n [value]=\"editorAnchor.anchorValue\" disableOptionCentering>\r\n {{ editorAnchor.viewValue }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <div class=\"row\" [ngClass]=\"{'hidden': !showImageMapInformation}\"\r\n *ngIf=\"selectedLinkType === 0\">\r\n <div class=\"col-3\">\r\n <mat-form-field appearance=\"fill\" class=\"col-12 pl-3 pr-3 pb-1\">\r\n <mat-label>{{ LANG.QMSCKEDITOR.PROTOCOL }}</mat-label>\r\n <mat-select [(ngModel)]=\"selectedProtocol\" formControlName=\"protocolList\"\r\n (ngModelChange)=\"onProtocolChange()\" disableOptionCentering>\r\n <mat-option *ngFor=\"let protocol of protocols\" [value]=\"protocol.id\">\r\n {{ protocol.name }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-5\">\r\n <mat-form-field appearance=\"fill\" class=\"col-12 pl-3 pr-3 pb-1\">\r\n <mat-label>{{ LANG.QMSCKEDITOR.LINK_URL }}</mat-label>\r\n <input matInput [(ngModel)]=\"url\" name=\"url\" formControlName=\"url\"\r\n (ngModelChange)=\"onUrlChange()\" (keyup)=\"onUrlKeyup()\" />\r\n <mat-error *ngIf=\"imageMapFormGroup.get('url').hasError('required')\">{{\r\n LANG.QMSCKEDITOR.REQUIRED_URL }}\r\n </mat-error>\r\n <mat-error *ngIf=\"imageMapFormGroup.get('url').hasError('invalidURL')\">{{\r\n LANG.QMSCKEDITOR.INVALID_URL }}</mat-error>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col-4\">\r\n <div class=\"row button__groups\">\r\n <div class=\"col-6\">\r\n <button class=\"save\" mat-stroked-button (click)=\"attachment()\">\r\n {{ LANG.QMSCKEDITOR.ATTACHMENT }}\r\n </button>\r\n </div>\r\n <div class=\"col-6\">\r\n <button class=\"save\" mat-stroked-button (click)=\"eHandbook(false, false)\">\r\n {{ LANG.QMSCKEDITOR.HANDBOOK }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n <div id=\"qmsckeditor-imagemap-panel_001_002\" class=\"qmsckeditor__imagemap__map\">\r\n <img #myImage [src]=\"imageMapData.imageUrl\">\r\n </div>\r\n <div id=\"qmsckeditor-imagemap-panel_001_003\" class=\"qmsckeditor button__groups row mr-0 ml-0 mt-4\">\r\n <div class=\"col-4 pr-0\">\r\n <button class=\"save\" mat-flat-button (click)=\"removeMap()\">\r\n {{ LANG.QMSCKEDITOR.REMOVE_MAP }}\r\n </button>\r\n </div>\r\n <div class=\"col-4 pr-0\">\r\n <button class=\"save\" mat-flat-button (click)=\"save()\">\r\n {{ LANG.QMSCKEDITOR.SAVE }}\r\n </button>\r\n </div>\r\n <div class=\"col-4 pl-0\">\r\n <button class=\"cancel\" mat-flat-button (click)=\"cancel()\">\r\n {{ LANG.QMSCKEDITOR.CANCEL }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </mat-expansion-panel>\r\n </div>\r\n </div>\r\n</div>",
|
506
|
+
styles: [".mt5{margin-top:5px!important}.mt10{margin-top:10px!important}.mt7{margin-top:7px!important}.mt15{margin-top:15px!important}.mt20{margin-top:20px!important}.mt30{margin-top:30px!important}.mt40{margin-top:40px!important}.ml2{margin-left:2px!important}.ml3{margin-left:3px!important}.ml5{margin-left:5px!important}.ml15{margin-left:15px!important}.ml10{margin-left:10px!important}.ml12{margin-left:12px!important}.ml16{margin-left:16px!important}.ml-auto{margin-left:auto!important}.ml-25{margin-left:-25px!important}.mr5{margin-right:5px!important}.mr12{margin-right:12px!important}.mr15{margin-right:15px!important}.mb5{margin-bottom:5px!important}.mb10{margin-bottom:10px!important}.mb15{margin-bottom:15px!important}.pt8{padding-top:8px!important}.pt10{padding-top:10px!important}.pt15{padding-top:15px!important}.pt16{padding-top:16px!important}.pl15{padding-left:15px!important}.pl0{padding-left:0!important}.pr0{padding-right:0!important}.pr15{padding-right:15px!important}.fs12{font-size:12px}.fs14{font-size:14px!important}.fs16{font-size:16px!important}.fs22{font-size:22px!important}.fw500{font-weight:500!important}.italic-text{font-style:italic}.display-flex{display:flex}.qmsckeditor{font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px;font-weight:400}.qmsckeditor h2{font-size:20px;font-weight:400}.qmsckeditor .mat-dialog-content{padding:0}.qmsckeditor .mat-icon{color:#909497}.qmsckeditor__fullscreen{position:fixed;top:0;left:0;right:0;bottom:0;background:#fff;overflow-y:auto;max-height:100vh;overflow-x:hidden}.qmsckeditor__cursor{cursor:pointer}.qmsckeditor__notallowed{cursor:not-allowed}.qmsckeditor.button__close,.qmsckeditor.button__done{float:right;top:-24px;right:-24px;cursor:pointer}.qmsckeditor.button__done{margin-right:20px}.qmsckeditor.button__done .mat-icon{color:#28a745;font-weight:700}.qmsckeditor.button__groups button{min-height:40px;width:100%;border-radius:4px;border:1px solid #c5c5c5;font-family:Open Sans;font-weight:600;font-size:14px;letter-spacing:1px;line-height:16px}.qmsckeditor.button__groups .save{background:#f8f9f9}.qmsckeditor.button__groups .save:hover{background:#e5e7e9}.qmsckeditor.button__groups .save:disabled{cursor:not-allowed}.qmsckeditor.button__groups .cancel{background:#f8f9f9}.qmsckeditor.button__groups .cancel:hover{background:#e5e7e9}.qmsckeditor.button__groups .cancel:disabled{cursor:not-allowed}.qmsckeditor.button__groups .delete{background:#f8f9f9}.qmsckeditor.button__groups .delete:hover{background:#e5e7e9}.qmsckeditor.button__groups .delete:disabled{cursor:not-allowed}.qmsckeditor.confirm__button__groups button{min-height:36px;border-radius:4px;width:auto;border:1px solid #c5c5c5;font-family:Open Sans;font-weight:600;font-size:14px;letter-spacing:1px;line-height:16px;padding-left:15px;padding-right:15px}.qmsckeditor.confirm__button__groups .confirm{background:#f8f9f9}.qmsckeditor.confirm__button__groups .confirm:hover{background:#e5e7e9}.qmsckeditor.confirm__button__groups .cancel{background:#f8f9f9}.qmsckeditor.confirm__button__groups .cancel:hover{background:#e5e7e9}.qmsckeditor.template-content.height{min-height:420px;max-height:520px;overflow:auto}.qmsckeditor.template-content.title{margin-left:-9px}.qmsckeditor.link__content.height{min-height:400px;max-height:520px}.qmsckeditor.card{margin-bottom:10px;min-height:60px;box-shadow:none;border:1px solid #e5e5e5}.qmsckeditor.card .title{font-weight:700}.qmsckeditor.card .content{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.qmsckeditor.card .material-icons{font-size:20px}.qmsckeditor.tooltip-content.height{min-height:400px;max-height:470px;overflow:auto}.qmsckeditor.save__as__template.height{height:125px}.ck-content .page-break,.qmsckeditor__imagemap__container .mat-form-field{width:100%}.qmsckeditor__imagemap__container .qmsckeditor__imagemap__information{position:relative}.qmsckeditor__imagemap__container .qmsckeditor__imagemap__map{overflow:auto;width:800px;min-height:371px;position:relative;max-height:460px}.qmsckeditor__imagemap__container .mat-button-toggle-checked{border:1px solid #000!important}.qmsckeditor__imagemap__container .hidden{visibility:hidden}"]
|
507
|
+
},] }
|
508
|
+
];
|
509
|
+
QMSCKEditorImageMapComponent.ctorParameters = () => [
|
510
|
+
{ type: Renderer2 },
|
511
|
+
{ type: ChangeDetectorRef },
|
512
|
+
{ type: MatDialog },
|
513
|
+
{ type: TranslateLibraryService },
|
514
|
+
{ type: QMSCKEditorLinkService },
|
515
|
+
{ type: MatDialogRef },
|
516
|
+
{ type: QMSCKEditorImageMap, decorators: [{ type: Inject, args: [MAT_DIALOG_DATA,] }] },
|
517
|
+
{ type: MatIconRegistry },
|
518
|
+
{ type: DomSanitizer }
|
519
|
+
];
|
520
|
+
QMSCKEditorImageMapComponent.propDecorators = {
|
521
|
+
myImageRef: [{ type: ViewChild, args: ['myImage',] }],
|
522
|
+
myStatusRef: [{ type: ViewChild, args: ['myStatus',] }]
|
523
|
+
};
|
524
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicW1zLWNrZWRpdG9yLWltYWdlbWFwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Ftcy1hbmd1bGFyL3NyYy9saWIvcW1zLWNrZWRpdG9yLWNvbXBvbmVudHMvY29tcG9uZW50cy9xbXMtY2tlZGl0b3ItaW1hZ2VtYXAvcW1zLWNrZWRpdG9yLWltYWdlbWFwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9CLGlCQUFpQixFQUFFLFNBQVMsRUFBYyxNQUFNLEVBQVUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqSSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDekYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDN0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDL0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzdELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDbkUsT0FBTyxFQUFFLHNCQUFz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Q0FBQyxrQkFBa0IsQ0FBQztRQUMzQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUN6QyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsTUFBTTtRQUNGLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDM0IsQ0FBQzs7O1lBL2hCSixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLG9CQUFvQjtnQkFDOUIsczZVQUFxRDs7YUFFeEQ7OztZQTVEK0YsU0FBUztZQUE5RSxpQkFBaUI7WUFDbkMsU0FBUztZQUVULHVCQUF1QjtZQWF2QixzQkFBc0I7WUFmWCxZQUFZO1lBSXZCLG1CQUFtQix1QkE2R25CLE1BQU0sU0FBQyxlQUFlO1lBdkd0QixlQUFlO1lBRGYsWUFBWTs7O3lCQTJGaEIsU0FBUyxTQUFDLFNBQVM7MEJBR25CLFNBQVMsU0FBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3Q2hlY2tlZCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5qZWN0LCBPbkluaXQsIFZpZXdDaGlsZCwgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZUxpYnJhcnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdHJhbnNsYXRpb24tcmVnaXN0cnkuc2VydmljZSc7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3Ftcy1ja2VkaXRvci1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9ySW1hZ2VNYXAgfSBmcm9tICcuLi8uLi9tb2RlbHMvcW1zLWNrZWRpdG9yLWltYWdlbWFwLm1vZGVsJztcclxuaW1wb3J0IHsgTGlua1R5cGUgfSBmcm9tICcuLi8uLi9jb21tb24vZW51bXMvbGluay10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyBQcm90b2NvbFR5cGVOYW1lIH0gZnJvbSAnLi4vLi4vY29tbW9uL2VudW1zL3Byb3RvY29sLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IFRhcmdldFR5cGVOYW1lIH0gZnJvbSAnLi4vLi4vY29tbW9uL2VudW1zL3RhcmdldC10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyBJbWFnZU1vZGVOYW1lIH0gZnJvbSAnLi4vLi4vY29tbW9uL2VudW1zL2ltYWdlLW1vZGUuZW51bSc7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBNYXRJY29uUmVnaXN0cnkgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgSWNvblN2ZyB9IGZyb20gJy4uLy4uL2NvbW1vbi9jb25zdGFudHMvaWNvblN2Zy5jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvckltYWdlTWFwTGliIH0gZnJvbSAnLi9xbXMtY2tlZGl0b3ItaW1hZ2VtYXAubGliJztcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JSZWxhdGlvbiB9IGZyb20gJy4uLy4uL2NvbW1vbi9tb2RlbHMvcW1zLWNrZWRpdG9yLXJlbGF0aW9uLm1vZGVsJztcclxuaW1wb3J0IFFNU0NLRWRpdG9yUGFyYW10ZXIgZnJvbSAnLi4vLi4vY29tbW9uL21vZGVscy9xbXMtY2tlZGl0b3ItcGFyYW1ldGVyLm1vZGVsJztcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JMaW5rU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Ftcy1ja2VkaXRvci1saW5rLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvclJlbGF0ZWRDb21wb25lbnQgfSBmcm9tICcuLi9xbXMtY2tlZGl0b3ItcmVsYXRpb24vcW1zY2tlZGl0b3ItcmVsYXRlZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBMaW5rQXR0YWNobWVudENvbXBvbmVudCB9IGZyb20gJy4uL3Ftcy1ja2VkaXRvci1saW5rL2F0dGFjaG1lbnRzL2xpbmstYXR0YWNobWVudC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvckxpbmtBbmNob3JEb2N1bWVudCB9IGZyb20gJy4uLy4uL2NvbW1vbi9tb2RlbHMvcW1zLWNrZWRpdG9yLWxpbmstYW5jaG9yLWRvY3VtZW50Lm1vZGVsJztcclxuaW1wb3J0IHsgTGlua0FuY2hvciB9IGZyb20gJy4uLy4uL2NvbW1vbi9lbnVtcy9saW5rLWFuY2hvci5lbnVtJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgaW52YWxpZFVSTFZhbGlkYXRvciB9IGZyb20gJy4vcW1zLWNrZWRpdG9yLWltYWdlbWFwLnZhbGlkYXRvcic7XHJcblxyXG5pbnRlcmZhY2UgSUxpbmtUeXBlIHtcclxuICAgIGlkOiBudW1iZXI7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbn1cclxuXHJcbmludGVyZmFjZSBJVGFyZ2V0IHtcclxuICAgIGlkOiBUYXJnZXRUeXBlTmFtZTtcclxuICAgIG5hbWU6IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIElQcm90b2NvbCB7XHJcbiAgICBpZDogUHJvdG9jb2xUeXBlTmFtZTtcclxuICAgIG5hbWU6IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIElNb2RlIHtcclxuICAgIGlkOiBzdHJpbmc7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBpY29uOiBzdHJpbmc7XHJcbn1cclxuXHJcbmludGVyZmFjZSBJWm9vbVR5cGUge1xyXG4gICAgaWQ6IG51bWJlcjtcclxuICAgIG5hbWU6IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIElBbmNob3Ige1xyXG4gICAgdmFsdWU6IG51bWJlcjtcclxuICAgIHZpZXdWYWx1ZTogc3RyaW5nO1xyXG4gICAgYW5jaG9yVmFsdWU6IHN0cmluZztcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2FwcC1xbXNjay1pbWFnZW1hcCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vcW1zLWNrZWRpdG9yLWltYWdlbWFwLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3Ftcy1ja2VkaXRvci1pbWFnZW1hcC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBRTVNDS0VkaXRvckltYWdlTWFwQ29tcG9uZW50IGV4dGVuZHMgUU1TQ0tFZGl0b3JCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdDaGVja2VkIHtcclxuICAgIExBTkc6IGFueTtcclxuICAgIGltYWdlTWFwRm9ybUdyb3VwOiBGb3JtR3JvdXA7XHJcbiAgICBpbWFnZU1hcERhdGE6IFFNU0NLRWRpdG9ySW1hZ2VNYXA7XHJcbiAgICBsaW5rVHlwZXM6IElMaW5rVHlwZVtdID0gW107XHJcbiAgICB0YXJnZXRzOiBJVGFyZ2V0W10gPSBbXTtcclxuICAgIHByb3RvY29sczogSVByb3RvY29sW10gPSBbXTtcclxuICAgIG1vZGVzOiBJTW9kZVtdID0gW107XHJcbiAgICB6b29tVHlwZXM6IElab29tVHlwZVtdID0gW107XHJcbiAgICB1cmwgPSAnJztcclxuICAgIHByb2Nlc3NlZFVybCA9ICcnO1xyXG4gICAgc2VsZWN0ZWRNb2RlOiBJbWFnZU1vZGVOYW1lID0gSW1hZ2VNb2RlTmFtZS5SZWN0YW5nbGU7XHJcbiAgICBzZWxlY3RlZExpbmtUeXBlOiBMaW5rVHlwZSA9IExpbmtUeXBlLnVybDtcclxuICAgIHNlbGVjdGVkVGFyZ2V0OiBUYXJnZXRUeXBlTmFtZSA9IFRhcmdldFR5cGVOYW1lLm5ldztcclxuICAgIHNlbGVjdGVkUHJvdG9jb2w6IFByb3RvY29sVHlwZU5hbWUgfCBzdHJpbmcgPSBQcm90b2NvbFR5cGVOYW1lLmh0dHA7XHJcbiAgICBzZWxlY3RlZFpvb20gPSAxLjA7XHJcblxyXG4gICAgcHJvdG9jb2xSZWdleDogUmVnRXhwID0gL14oaHR0cHxodHRwc3xmdHB8bmV3cyk6XFwvXFwvKD89LikvaTtcclxuICAgIGphdmFzY3JpcHRMaW5rUmVnZXg6IFJlZ0V4cCA9IC9qYXZhc2NyaXB0XFw6L2k7XHJcblxyXG4gICAgZG9jdW1lbnRJZCA9IDA7XHJcbiAgICAvL2FuY2hvclRpdGxlID0gJyc7XHJcbiAgICBhbmNob3JUZXh0ID0gJyc7XHJcbiAgICAvL2FuY2hvckJ5TmFtZSA9ICcnO1xyXG4gICAgYWR2aXNvcnlUaXRsZSA9ICcnO1xyXG5cclxuICAgIGlzVXJsUHJvY2Vzc2luZyA9IGZhbHNlO1xyXG4gICAgbmF0dXJhbEltYWdlV2lkdGggPSAwO1xyXG4gICAgbmF0dXJhbEltYWdlSGVpZ2h0ID0gMDtcclxuICAgIGN1cnJlbnRBcmVhSWQgPSAtMTtcclxuICAgIG15SW1hZ2VNYXA6IFFNU0NLRWRpdG9ySW1hZ2VNYXBMaWI7XHJcbiAgICBzaG93SW1hZ2VNYXBJbmZvcm1hdGlvbiA9IGZhbHNlO1xyXG5cclxuICAgIGFuY2hvckRvY3VtZW50czogUU1TQ0tFZGl0b3JMaW5rQW5jaG9yRG9jdW1lbnRbXSA9IFtdO1xyXG4gICAgYW5jaG9yczogSUFuY2hvcltdO1xyXG4gICAgZWRpdG9yQW5jaG9yczogSUFuY2hvcltdO1xyXG4gICAgLy9kb2N1bWVudEFuY2hvcnM6IElBbmNob3JbXTtcclxuXHJcbiAgICBpbWFnZUxpc3RlbmVyczogYW55W10gPSBbXTtcclxuXHJcbiAgICBAVmlld0NoaWxkKCdteUltYWdlJylcclxuICAgIG15SW1hZ2VSZWY6IEVsZW1lbnRSZWY8SFRNTEltYWdlRWxlbWVudD47XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnbXlTdGF0dXMnKVxyXG4gICAgbXlTdGF0dXNSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgICAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlTGlicmFyeVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBsaW5rU2VydmljZTogUU1TQ0tFZGl0b3JMaW5rU2VydmljZSxcclxuICAgICAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8UU1TQ0tFZGl0b3JJbWFnZU1hcENvbXBvbmVudD4sXHJcbiAgICAgICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBRTVNDS0VkaXRvckltYWdlTWFwLFxyXG4gICAgICAgIGljb25SZWdpc3RyeTogTWF0SWNvblJlZ2lzdHJ5LFxyXG4gICAgICAgIHNhbml0aXplcjogRG9tU2FuaXRpemVyXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuaW1hZ2VNYXBEYXRhID0gZGF0YTtcclxuICAgICAgICB0aGlzLm5hdHVyYWxJbWFnZUhlaWdodCA9IHRoaXMuaW1hZ2VNYXBEYXRhLmltYWdlSGVpZ2h0O1xyXG4gICAgICAgIHRoaXMubmF0dXJhbEltYWdlV2lkdGggPSB0aGlzLmltYWdlTWFwRGF0YS5pbWFnZVdpZHRoO1xyXG4gICAgICAgIHRoaXMuaW5pdEZvcm1Db250cm9sKCk7XHJcbiAgICAgICAgdGhpcy5pbml0U3ZnSWNvbnMoaWNvblJlZ2lzdHJ5LCBzYW5pdGl6ZXIpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBpbml0RGVmYXVsdFZhbHVlcygpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTGlua1R5cGUgPSBMaW5rVHlwZS51cmw7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhcmdldCA9IFRhcmdldFR5cGVOYW1lLm5ldztcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUHJvdG9jb2wgPSBQcm90b2NvbFR5cGVOYW1lLmh0dHA7XHJcbiAgICAgICAgdGhpcy51cmwgPSAnJztcclxuICAgICAgICB0aGlzLnByb2Nlc3NlZFVybCA9ICcnO1xyXG4gICAgICAgIHRoaXMuYWR2aXNvcnlUaXRsZSA9ICcnO1xyXG4gICAgICAgIHRoaXMuYW5jaG9yVGV4dCA9ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXRTdmdJY29ucyhpY29uUmVnaXN0cnk6IE1hdEljb25SZWdpc3RyeSwgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIpIHtcclxuICAgICAgICBpY29uUmVnaXN0cnkuYWRkU3ZnSWNvbkxpdGVyYWwoJ3ZlY3Rvci1wb2ludGVyJywgc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKEljb25TdmcuVkVDVE9SX1BPSU5URVIpKTtcclxuICAgICAgICBpY29uUmVnaXN0cnkuYWRkU3ZnSWNvbkxpdGVyYWwoJ3ZlY3Rvci1jaXJjbGUnLCBzYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoSWNvblN2Zy5WRUNUT1JfQ0lSQ0xFKSk7XHJcbiAgICAgICAgaWNvblJlZ2lzdHJ5LmFkZFN2Z0ljb25MaXRlcmFsKCd2ZWN0b3ItcmVjdGFuZ2xlJywgc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKEljb25TdmcuVkVDVE9SX1JFQ1RBTkdMRSkpO1xyXG4gICAgICAgIGljb25SZWdpc3RyeS5hZGRTdmdJY29uTGl0ZXJhbCgndmVjdG9yLXBvbHlnb24nLCBzYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoSWNvblN2Zy5WRUNUT1JfUE9MWUdPTikpO1xyXG4gICAgICAgIGljb25SZWdpc3RyeS5hZGRTdmdJY29uTGl0ZXJhbCgndmVjdG9yLXJlbW92ZScsIHNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChJY29uU3ZnLlZFQ1RPUl9SRU1PVkUpKTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0Rm9ybUNvbnRyb2woKSB7XHJcbiAgICAgICAgY29uc3QgdmFsaWF0aW9uQ29udHJvbHMgPSB7XHJcbiAgICAgICAgICAgIHRhcmdldExpc3Q6IG5ldyBGb3JtQ29udHJvbCgpLFxyXG4gICAgICAgICAgICBwcm90b2NvbExpc3Q6IG5ldyBGb3JtQ29udHJvbCgpLFxyXG4gICAgICAgICAgICBhbmNob3JUZXh0TGlzdDogbmV3IEZvcm1Db250cm9sKCksXHJcbiAgICAgICAgICAgIG1vZGVMaXN0OiBuZXcgRm9ybUNvbnRyb2woKSxcclxuICAgICAgICAgICAgem9vbUxpc3Q6IG5ldyBGb3JtQ29udHJvbCgpLFxyXG4gICAgICAgICAgICBsaW5rVHlwZUxpc3Q6IG5ldyBGb3JtQ29udHJvbCgpXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAodGhpcy5pbWFnZU1hcERhdGEubGlua0phdmFTY3JpcHRMaW5rc0FsbG93ZWQgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICB2YWxpYXRpb25Db250cm9sc1sndXJsJ10gPSBuZXcgRm9ybUNvbnRyb2woJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFsaWF0aW9uQ29udHJvbHNbJ3VybCddID0gbmV3IEZvcm1Db250cm9sKCcnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgaW52YWxpZFVSTFZhbGlkYXRvcih0aGlzLmphdmFzY3JpcHRMaW5rUmVnZXgpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaW1hZ2VNYXBGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHZhbGlhdGlvbkNvbnRyb2xzKTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0TGlua1R5cGUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubGlua1R5cGVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMubGlua1R5cGVzLnB1c2goeyBpZDogTGlua1R5cGUudXJsLCBuYW1lOiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuTElOS19VUkwgfSk7XHJcbiAgICAgICAgICAgIHRoaXMubGlua1R5cGVzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgaWQ6IExpbmtUeXBlLmFuY2hvclRleHQsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuTElOS19BTkNIT1JfSU5fVEVYVFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdFRhcmdldCgpIHtcclxuICAgICAgICBpZiAodGhpcy50YXJnZXRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0cy5wdXNoKHsgaWQ6IFRhcmdldFR5cGVOYW1lLm5ldywgbmFtZTogdGhpcy5MQU5HLlFNU0NLRURJVE9SLlRBUlRHRVRfTkVXIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnRhcmdldHMucHVzaCh7IGlkOiBUYXJnZXRUeXBlTmFtZS5zYW1lLCBuYW1lOiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuVEFSR0VUX1NBTUUgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGluaXRQcm90b2NvbCgpIHtcclxuICAgICAgICBpZiAodGhpcy5wcm90b2NvbHMpIHtcclxuICAgICAgICAgICAgdGhpcy5wcm90b2NvbHMucHVzaCh7IGlkOiBQcm90b2NvbFR5cGVOYW1lLmh0dHAsIG5hbWU6IHRoaXMuTEFORy5RTVNDS0VESVRPUi5QUk9UT0NPTF9IVFRQIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnByb3RvY29scy5wdXNoKHsgaWQ6IFByb3RvY29sVHlwZU5hbWUuaHR0cHMsIG5hbWU6IHRoaXMuTEFORy5RTVNDS0VESVRPUi5QUk9UT0NPTF9IVFRQUyB9KTtcclxuICAgICAgICAgICAgdGhpcy5wcm90b2NvbHMucHVzaCh7IGlkOiBQcm90b2NvbFR5cGVOYW1lLmZ0cCwgbmFtZTogdGhpcy5MQU5HLlFNU0NLRURJVE9SLlBST1RPQ09MX0ZUUCB9KTtcclxuICAgICAgICAgICAgdGhpcy5wcm90b2NvbHMucHVzaCh7IGlkOiBQcm90b2NvbFR5cGVOYW1lLm5ld3MsIG5hbWU6IHRoaXMuTEFORy5RTVNDS0VESVRPUi5QUk9UT0NPTF9ORVcgfSk7XHJcbiAgICAgICAgICAgIHRoaXMucHJvdG9jb2xzLnB1c2goeyBpZDogUHJvdG9jb2xUeXBlTmFtZS5vdGhlciwgbmFtZTogdGhpcy5MQU5HLlFNU0NLRURJVE9SLlBST1RPQ09MX09USEVSIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpbml0TW9kZXMoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5tb2Rlcy5wdXNoKHsgaWQ6IEltYWdlTW9kZU5hbWUuUG9pbnRlciwgbmFtZTogdGhpcy5MQU5HLlFNU0NLRURJVE9SLklNQUdFX01PREVfUE9JTlRFUiwgaWNvbjogXCJ2ZWN0b3ItcG9pbnRlclwiIH0pO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVzLnB1c2goeyBpZDogSW1hZ2VNb2RlTmFtZS5SZWN0YW5nbGUsIG5hbWU6IHRoaXMuTEFORy5RTVNDS0VESVRPUi5JTUFHRV9NT0RFX1JFQ1RBTkdMRSwgaWNvbjogXCJ2ZWN0b3ItcmVjdGFuZ2xlXCIgfSk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZXMucHVzaCh7IGlkOiBJbWFnZU1vZGVOYW1lLkNpcmNsZSwgbmFtZTogdGhpcy5MQU5HLlFNU0NLRURJVE9SLklNQUdFX01PREVfQ0lSQ0xFLCBpY29uOiBcInZlY3Rvci1jaXJjbGVcIiB9KTtcclxuICAgICAgICAgICAgdGhpcy5tb2Rlcy5wdXNoKHsgaWQ6IEltYWdlTW9kZU5hbWUuUG9seWdvbiwgbmFtZTogdGhpcy5MQU5HLlFNU0NLRURJVE9SLklNQUdFX01PREVfUE9MWUdPTiwgaWNvbjogXCJ2ZWN0b3ItcG9seWdvblwiIH0pO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVzLnB1c2goeyBpZDogSW1hZ2VNb2RlTmFtZS5SZW1vdmUsIG5hbWU6IHRoaXMuTEFORy5RTVNDS0VESVRPUi5JTUFHRV9NT0RFX1JFTU9WRSwgaWNvbjogXCJ2ZWN0b3ItcmVtb3ZlXCIgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGluaXRab29tVHlwZXMoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuem9vbVR5cGVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuem9vbVR5cGVzLnB1c2goeyBpZDogMC4yNSwgbmFtZTogXCIyNSVcIiB9KTtcclxuICAgICAgICAgICAgdGhpcy56b29tVHlwZXMucHVzaCh7IGlkOiAwLjUsIG5hbWU6IFwiNTAlXCIgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuem9vbVR5cGVzLnB1c2goeyBpZDogMS4wLCBuYW1lOiBcIjEwMCVcIiB9KTtcclxuICAgICAgICAgICAgdGhpcy56b29tVHlwZXMucHVzaCh7IGlkOiAyLjAsIG5hbWU6IFwiMjAwJVwiIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnpvb21UeXBlcy5wdXNoKHsgaWQ6IDMuMCwgbmFtZTogXCIzMDAlXCIgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGluaXRBbmNob3IoKSB7XHJcbiAgICAgICAgdGhpcy5hbmNob3JzID0gW107XHJcbiAgICAgICAgdGhpcy5hbmNob3JzID0gW3sgdmFsdWU6IDAsIHZpZXdWYWx1ZTogJycsIGFuY2hvclZhbHVlOiBMaW5rQW5jaG9yLkJsYW5rIH1dO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLmdldExhbmd1YWdlU3ViamVjdCQucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkxBTkcgPSB0aGlzLnRyYW5zbGF0ZS5nZXRPYmplY3RMYW5nKHJlcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmluaXRMaW5rVHlwZSgpO1xyXG4gICAgICAgIHRoaXMuaW5pdFRhcmdldCgpO1xyXG4gICAgICAgIHRoaXMuaW5pdFByb3RvY29sKCk7XHJcbiAgICAgICAgdGhpcy5pbml0TW9kZXMoKTtcclxuICAgICAgICB0aGlzLmluaXRab29tVHlwZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xyXG4gICAgICAgIGlmICh0aGlzLmltYWdlTGlzdGVuZXJzICYmIHRoaXMuaW1hZ2VMaXN0ZW5lcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmltYWdlTGlzdGVuZXJzLmZvckVhY2gobGlzdGVuZXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGlzdGVuZXIoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uSW1hZ2VMb2FkKCkge1xyXG4gICAgICAgIHRoaXMubmF0dXJhbEltYWdlSGVpZ2h0ID0gdGhpcy5uYXR1cmFsSW1hZ2VIZWlnaHQgIT0gMCA/IHRoaXMubmF0dXJhbEltYWdlSGVpZ2h0IDogdGhpcy5teUltYWdlUmVmLm5hdGl2ZUVsZW1lbnQubmF0dXJhbEhlaWdodDtcclxuICAgICAgICB0aGlzLm5hdHVyYWxJbWFnZVdpZHRoID0gdGhpcy5uYXR1cmFsSW1hZ2VXaWR0aCAhPSAwID8gdGhpcy5uYXR1cmFsSW1hZ2VXaWR0aCA6IHRoaXMubXlJbWFnZVJlZi5uYXRpdmVFbGVtZW50Lm5hdHVyYWxXaWR0aDtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRJbWFnZVNpemUoKTtcclxuXHJcbiAgICAgICAgdGhpcy5teUltYWdlTWFwLnNldE1hcEpzb24oe1xyXG4gICAgICAgICAgICBuYW1lOiB0aGlzLmltYWdlTWFwRGF0YS5uYW1lLFxyXG4gICAgICAgICAgICBhcmVhczogdGhpcy5pbWFnZU1hcERhdGEuYXJlYXNcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VNYXBEYXRhLmFyZWFzICYmIHRoaXMuaW1hZ2VNYXBEYXRhLmFyZWFzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5teUltYWdlTWFwLmJsdXJBcmVhKHRoaXMubXlJbWFnZU1hcC5jdXJyZW50aWQpO1xyXG4gICAgICAgICAgICB0aGlzLm15SW1hZ2VNYXAuY3VycmVudGlkID0gMDtcclxuICAgICAgICAgICAgdGhpcy5teUltYWdlTWFwLnNlbGVjdGVkSWQgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLm9uU2VsZWN0QXJlYSh0aGlzLm15SW1hZ2VNYXAuYXJlYXNbMF0pO1xyXG4gICAgICAgICAgICB0aGlzLm15SW1hZ2VNYXAuaGlnaGxpZ2h0QXJlYSgwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLm15SW1hZ2VSZWYpIHtcclxuICAgICAgICAgICAgdGhpcy5pbWFnZUxpc3RlbmVycy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMubXlJbWFnZVJlZi5uYXRpdmVFbGVtZW50LCAnbG9hZCcsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMub25JbWFnZUxvYWQoKTtcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQXZvaWQgZHJhZyZkcm9wIG9mIHRoZSBpbWFnZVxyXG4gICAgICAgIHRoaXMubXlJbWFnZU1hcCA9IG5ldyBRTVNDS0VkaXRvckltYWdlTWFwTGliKHtcclxuICAgICAgICAgICAgY3VzdG9tX2NhbGxiYWNrczoge1xyXG4gICAgICAgICAgICAgICAgXCJvbkFkZEFyZWFcIjogdGhpcy5vbkFkZEFyZWEuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAgICdvblNlbGVjdEFyZWEnOiB0aGlzLm9uU2VsZWN0QXJlYS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgJ29uUmVtb3ZlQXJlYSc6IHRoaXMub25SZW1vdmVBcmVhLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICAnb25TdGF0dXNNZXNzYWdlJzogdGhpcy5vblN0YXR1c01lc3NhZ2UuYmluZCh0aGlzKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBpbWFnZUVsZW1lbnQ6IHRoaXMubXlJbWFnZVJlZi5uYXRpdmVFbGVtZW50LFxyXG4gICAgICAgICAgICBib3VuZGluZ19ib3g6IGZhbHNlLFxyXG4gICAgICAgICAgICBDTF9EUkFXX1NIQVBFOiAnI0YwMCcsXHJcbiAgICAgICAgICAgIENMX05PUk1fU0hBUEU6ICcjQUFBJyxcclxuICAgICAgICAgICAgQ0xfSElHSExJR0hUX1NIQVBFOiAnI0YwMCcsXHJcbiAgICAgICAgICAgIHN0cmluZ3M6IHtcclxuICAgICAgICAgICAgICAgIFwiUE9MWUdPTl9EUkFXXCI6IHRoaXMuTEFORy5RTVNDS0VESVRPUi5QT0xZR09OX0RSQVcsXHJcbiAgICAgICAgICAgICAgICBcIlJFQ1RBTkdMRV9EUkFXXCI6IHRoaXMuTEFORy5RTVNDS0VESVRPUi5SRUNUQU5HTEVfRFJBVyxcclxuICAgICAgICAgICAgICAgIFwiU1FVQVJFX0RSQVdcIjogdGhpcy5MQU5HLlFNU0NLRURJVE9SLlNRVUFSRV9EUkFXLFxyXG4gICAgICAgICAgICAgICAgJ1JFQURZJzogJycsXHJcbiAgICAgICAgICAgICAgICAnUkVDVEFOR0xFX01PVkUnOiAnJyxcclxuICAgICAgICAgICAgICAgICdSRUNUQU5HTEVfUkVTSVpFX1RPUCc6ICcnLFxyXG4gICAgICAgICAgICAgICAgJ1JFQ1RBTkdMRV9SRVNJWkVfUklHSFQnOiAnJyxcclxuICAgICAgICAgICAgICAgICdSRUNUQU5HTEVfUkVTSVpFX0JPVFRPTSc6ICcnLFxyXG4gICAgICAgICAgICAgICAgJ1JFQ1RBTkdMRV9SRVNJWkVfTEVGVCc6ICcnLFxyXG4gICAgICAgICAgICAgICAgJ1NRVUFSRV9NT1ZFJzogJycsXHJcbiAgICAgICAgICAgICAgICAnU1FVQVJFX1JFU0laRV9UT1AnOiAnJyxcclxuICAgICAgICAgICAgICAgICdTUVVBUkVfUkVTSVpFX1JJR0hUJzogJycsXHJcbiAgICAgICAgICAgICAgICAnU1FVQVJFX1JFU0laRV9CT1RUT00nOiAnJyxcclxuICAgICAgICAgICAgICAgICdTUVVBUkVfUkVTSVpFX0xFRlQnOiAnJyxcclxuICAgICAgICAgICAgICAgICdQT0xZR09OX01PVkUnOiAnJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcGFyc2VMaW5rVXJsKHVybDogc3RyaW5nLCBkZWZhdWx0UHJvdG9jb2xOYW1lPzogUHJvdG9jb2xUeXBlTmFtZSkge1xyXG4gICAgICAgIGNvbnN0IHByb3RvY29sID0gdGhpcy5wcm90b2NvbFJlZ2V4LmV4ZWModXJsKTtcclxuICAgICAgICBpZiAocHJvdG9jb2wpIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzZWRVcmwgPSB1cmwuc3Vic3RyKHByb3RvY29sWzBdLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIHRoaXMudXJsID0gdGhpcy5wcm9jZXNzZWRVcmw7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQcm90b2NvbCA9IHByb3RvY29sWzBdLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmphdmFzY3JpcHRMaW5rUmVnZXgudGVzdCh1cmwpICYmICF0aGlzLmltYWdlTWFwRGF0YS5saW5rSmF2YVNjcmlwdExpbmtzQWxsb3dlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUHJvdG9jb2wgPSBQcm90b2NvbFR5cGVOYW1lLmh0dHA7XHJcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc2VkVXJsID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMudXJsID0gdGhpcy5wcm9jZXNzZWRVcmw7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzZWRVcmwgPSB1cmw7XHJcbiAgICAgICAgICAgIHRoaXMudXJsID0gdGhpcy5wcm9jZXNzZWRVcmw7XHJcbiAgICAgICAgICAgIGlmICghIXRoaXMuc2VsZWN0ZWRQcm90b2NvbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFByb3RvY29sID0gZGVmYXVsdFByb3RvY29sTmFtZSB8fCBQcm90b2NvbFR5cGVOYW1lLmh0dHA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25TZWxlY3RBcmVhKGFyZWEpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRBcmVhSWQgPSBhcmVhLmFpZDtcclxuICAgICAgICB0aGlzLnNob3dJbWFnZU1hcEluZm9ybWF0aW9uID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRNb2RlID09IEltYWdlTW9kZU5hbWUuUmVtb3ZlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubXlJbWFnZU1hcC5yZW1vdmVBcmVhKHRoaXMuY3VycmVudEFyZWFJZCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGFyZWEuYWhyZWYubWF0Y2goL14jKC4qKSQvKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbmNob3JUZXh0ID0gYXJlYS5haHJlZi5zbGljZSgxKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRMaW5rVHlwZSA9IExpbmtUeXBlLmFuY2hvclRleHQ7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTGlua1R5cGUgPSBMaW5rVHlwZS51cmw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhcnNlTGlua1VybChhcmVhLmFocmVmKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFyZ2V0ID0gYXJlYS5hdGFyZ2V0O1xyXG4gICAgICAgICAgICB0aGlzLmFkdmlzb3J5VGl0bGUgPSBhcmVhLmFhbHQ7XHJcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25SZW1vdmVBcmVhKCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudEFyZWFJZCA9IC0xO1xyXG4gICAgICAgIHRoaXMuc2hvd0ltYWdlTWFwSW5mb3JtYXRpb24gPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVNYXAoKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXJlYUlkID0gLTE7XHJcbiAgICAgICAgdGhpcy5zaG93SW1hZ2VNYXBJbmZvcm1hdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubXlJbWFnZU1hcC5yZW1vdmVBbGxBcmVhcygpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uU3RhdHVzTWVzc2FnZSh0ZXh0OiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodGhpcy5teVN0YXR1c1JlZikge1xyXG4gICAgICAgICAgICB0aGlzLm15U3RhdHVzUmVmLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gdGV4dCB8fCAnJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25VcmxLZXl1cCgpIHtcclxuICAgICAgICB0aGlzLmlzVXJsUHJvY2Vzc2luZyA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMudXJsICE9IHRoaXMucHJvY2Vzc2VkVXJsKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFyc2VMaW5rVXJsKHRoaXMudXJsKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVBcmVhVmFsdWVzKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzVXJsUHJvY2Vzc2luZyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIG9uVXJsQ2hhbmdlKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5pc1VybFByb2Nlc3NpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5vblVybEtleXVwKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uQW5jaG9yVGV4dENoYW5nZSgpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZUFyZWFWYWx1ZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBvblByb3RvY29sQ2hhbmdlKCkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlQXJlYVZhbHVlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uVGFyZ2V0Q2hhbmdlKCkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlQXJlYVZhbHVlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQWRkQXJlYShpZDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXJlYUlkID0gaWQ7XHJcbiAgICAgICAgdGhpcy5zaG93SW1hZ2VNYXBJbmZvcm1hdGlvbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5pbml0RGVmYXVsdFZhbHVlcygpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlQXJlYVZhbHVlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUFyZWFWYWx1ZXMoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEFyZWFJZCA+IC0xKSB7XHJcbiAgICAgICAgICAgIHZhciBhaHJlZiA9IHRoaXMuYnVpbGRVcmxXaXRoUHJvdG9jb2woKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRMaW5rVHlwZSA9PSBMaW5rVHlwZS5hbmNob3JUZXh0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm15SW1hZ2VNYXAuYXJlYXNbdGhpcy5jdXJyZW50QXJlYUlkXS5hdGFyZ2V0ID0gVGFyZ2V0VHlwZU5hbWUuc2FtZTtcclxuICAgICAgICAgICAgICAgIHRoaXMubXlJbWFnZU1hcC5hcmVhc1t0aGlzLmN1cnJlbnRBcmVhSWRdLmFhbHQgPSB0aGlzLmFuY2hvclRleHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm15SW1hZ2VNYXAuYXJlYXNbdGhpcy5jdXJyZW50QXJlYUlkXS5hdGFyZ2V0ID0gdGhpcy5zZWxlY3RlZFRhcmdldCB8fCBUYXJnZXRUeXBlTmFtZS5uZXc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm15SW1hZ2VNYXAuYXJlYXNbdGhpcy5jdXJyZW50QXJlYUlkXS5hYWx0ID0gdGhpcy5hZHZpc29yeVRpdGxlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubXlJbWFnZU1hcC5hcmVhc1t0aGlzLmN1cnJlbnRBcmVhSWRdLmFocmVmID0gYWhyZWY7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGJ1aWxkVXJsV2l0aFByb3RvY29sKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTGlua1R5cGUgPT0gTGlua1R5cGUuYW5jaG9yVGV4dCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJyMnICsgKHRoaXMuYW5jaG9yVGV4dCB8fCAnJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghIXRoaXMucHJvY2Vzc2VkVXJsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkUHJvdG9jb2wgKyB0aGlzLnByb2Nlc3NlZFVybDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG5cclxuICAgIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcclxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DbG9zZURpYWxvZygpIHtcclxuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uTW9kZUNoYW5nZShlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTW9kZSA9IGUudmFsdWU7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRNb2RlID09IEltYWdlTW9kZU5hbWUuUG9pbnRlciB8fCB0aGlzLnNlbGVjdGVkTW9kZSA9PSBJbWFnZU1vZGVOYW1lLlJlbW92ZSkge1xyXG4gICAgICAgICAgICB0aGlzLm15SW1hZ2VNYXAuaXNfZHJhd2luZyA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMubXlJbWFnZU1hcC5uZXh0U2hhcGUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5teUltYWdlUmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuY3Vyc29yID0gJ2RlZmF1bHQnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5teUltYWdlTWFwLm5leHRTaGFwZSA9IHRoaXMuc2VsZWN0ZWRNb2RlO1xyXG4gICAgICAgICAgICB0aGlzLm15SW1hZ2VSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5jdXJzb3IgPSAnY3Jvc3NoYWlyJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25ab29tQ2hhbmdlKCkge1xyXG4gICAgICAgIHRoaXMuc2V0SW1hZ2VTaXplKCk7XHJcbiAgICAgICAgaWYgKHRoaXMubXlJbWFnZU1hcCkge1xyXG4gICAgICAgICAgICB0aGlzLm15SW1hZ2VNYXAuc2NhbGVBbGxBcmVhcyh0aGlzLnNlbGVjdGVkWm9vbSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uTGlua1R5cGVDaGFuZ2UoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRMaW5rVHlwZSA9PT0gTGlua1R5cGUuYW5jaG9yVGV4dCkge1xyXG4gICAgICAgICAgICB0aGlzLmdldEVkaXRvckFuY2hvcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnVwZGF0ZUFyZWFWYWx1ZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRFZGl0b3JBbmNob3IoKSB7XHJcbiAgICAgICAgdGhpcy5hbmNob3JEb2N1bWVudHMgPSBbXTtcclxuICAgICAgICBpZiAodGhpcy5pbWFnZU1hcERhdGEuZWRpdG9yQ29udGVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmFuY2hvckRvY3VtZW50cy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGlkOiAwLFxyXG4gICAgICAgICAgICAgICAgZW50aXR5SWQ6IDAsXHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudElkOiAwLFxyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnRUeXBlSWQ6IDAsXHJcbiAgICAgICAgICAgICAgICByaWNoVGV4dDogdGhpcy5pbWFnZU1hcERhdGEuZWRpdG9yQ29udGVudFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRBbmNob3JEb2N1bWVudCh0aGlzLmFuY2hvckRvY3VtZW50cyk7XHJcbiAgICAgICAgdGhpcy5lZGl0b3JBbmNob3JzID0gdGhpcy5hbmNob3JzO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEltYWdlU2l6ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5teUltYWdlUmVmKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5uYXR1cmFsSW1hZ2VXaWR0aCAqIHRoaXMuc2VsZWN0ZWRab29tO1xyXG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLm5hdHVyYWxJbWFnZUhlaWdodCAqIHRoaXMuc2VsZWN0ZWRab29tO1xyXG4gICAgICAgICAgICB0aGlzLm15SW1hZ2VSZWYubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBgJHt3aWR0aH1weDtgKTtcclxuICAgICAgICAgICAgdGhpcy5teUltYWdlUmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGAke2hlaWdodH1weDtgKTtcclxuICAgICAgICAgICAgdGhpcy5teUltYWdlUmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHt3aWR0aH1weGA7XHJcbiAgICAgICAgICAgIHRoaXMubXlJbWFnZVJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke2hlaWdodH1weGA7XHJcbiAgICAgICAgICAgIHRoaXMubXlJbWFnZVJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLmN1cnNvciA9IHRoaXMuc2VsZWN0ZWRNb2RlID09IEltYWdlTW9kZU5hbWUuUG9pbnRlciB8fCB0aGlzLnNlbGVjdGVkTW9kZSA9PSBJbWFnZU1vZGVOYW1lLlJlbW92ZSA/ICdkZWZhdWx0JyA6ICdjcm9zc2hhaXInO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBlSGFuZGJvb2soaXNPbmx5RG9jdW1lbnQ6IGJvb2xlYW4sIGlzQW5jaG9yRG9jdW1lbnQ6IGJvb2xlYW4pIHtcclxuICAgICAgICBjb25zdCBkYXRhID0gbmV3IFFNU0NLRWRpdG9yUmVsYXRpb24oKTtcclxuICAgICAgICBkYXRhLmlzT25seURvY3VtZW50ID0gaXNPbmx5RG9jdW1lbnQ7XHJcbiAgICAgICAgZGF0YS5pc0VuYWJsZUZvbGRlciA9ICFpc09ubHlEb2N1bWVudDtcclxuICAgICAgICBjb25zdCBkaWFsb2dUZW1wbGF0ZSA9IHRoaXMuZGlhbG9nLm9wZW4oUU1TQ0tFZGl0b3JSZWxhdGVkQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIHdpZHRoOiAnNjUwcHgnLFxyXG4gICAgICAgICAgICBoZWlnaHQ6ICc2NTBweCcsXHJcbiAgICAgICAgICAgIGRhdGEsXHJcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlXHJcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXHJcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0FuY2hvckRvY3VtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRJZCA9IHJlc3VsdC5pZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy90aGlzLmFuY2hvclRpdGxlID0gYCR7cmVzdWx0LnRpdGxlfSgke3Jlc3VsdC5pZH0pYDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRBbmNob3JEb2N1bWVudChyZXN1bHQuaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyc2VMaW5rVXJsKHJlc3VsdC51cmwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUHJvdG9jb2wgPSBQcm90b2NvbFR5cGVOYW1lLm90aGVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYWR2aXNvcnlUaXRsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZHZpc29yeVRpdGxlID0gcmVzdWx0LnRpdGxlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQXJlYVZhbHVlcygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBbmNob3JEb2N1bWVudChkb2N1bWVudElkOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLmxpbmtTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5nZXRBbmNob3JEb2N1bWVudExpc3QoZG9jdW1lbnRJZClcclxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbmNob3JEb2N1bWVudHMgPSByZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBbmNob3JEb2N1bWVudCh0aGlzLmFuY2hvckRvY3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLmRvY3VtZW50QW5jaG9ycyA9IHRoaXMuYW5jaG9ycztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbmNob3JEb2N1bWVudHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFuY2hvckRvY3VtZW50KHRoaXMuYW5jaG9yRG9jdW1lbnRzKTtcclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuZG9jdW1lbnRBbmNob3JzID0gdGhpcy5hbmNob3JzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRBbmNob3JEb2N1bWVudChhbmNob3JEb2N1bWVudDogUU1TQ0tFZGl0b3JMaW5rQW5jaG9yRG9jdW1lbnRbXSkge1xyXG4gICAgICAgIHRoaXMuaW5pdEFuY2hvcigpO1xyXG4gICAgICAgIGxldCBpZCA9IDM7XHJcbiAgICAgICAgaWYgKGFuY2hvckRvY3VtZW50KSB7XHJcbiAgICAgICAgICAgIGFuY2hvckRvY3VtZW50LmZvckVhY2goKGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgICAgICAgICAgZGl2LmlubmVySFRNTCA9IGUucmljaFRleHQ7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkb21Db250ZW50ID0gZGl2O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYVRhZ3MgPSBkb21Db250ZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdhJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYVRhZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6cHJlZmVyLWZvci1vZlxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYVRhZ3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFnID0gYVRhZ3NbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmFuY2hvcnMuZmluZEluZGV4KCh4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHguYW5jaG9yVmFsdWUgPT09IHRhZy5uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hbmNob3JzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdWYWx1ZTogdGFnLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvclZhbHVlOiB0YWcubmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkICs9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyB0aGlzLmFuY2hvcnMucHVzaCh7XHJcbiAgICAgICAgLy8gICAgIHZhbHVlOiAxLFxyXG4gICAgICAgIC8vICAgICB2aWV3VmFsdWU6IHRoaXMuTEFORy5RTVNDS0VESVRPUi5BTkNIT1JfQVRUQUNITUVOVCxcclxuICAgICAgICAvLyAgICAgYW5jaG9yVmFsdWU6IExpbmtBbmNob3IuQXR0YWNobWVudFxyXG4gICAgICAgIC8vIH0pO1xyXG4gICAgICAgIC8vIHRoaXMuYW5jaG9ycy5wdXNoKHtcclxuICAgICAgICAvLyAgICAgdmFsdWU6IDIsXHJcbiAgICAgICAgLy8gICAgIHZpZXdWYWx1ZTogdGhpcy5MQU5HLlFNU0NLRURJVE9SLkFOQ0hPUl9SRUxBVEVEX0RPQ1VNRU5ULFxyXG4gICAgICAgIC8vICAgICBhbmNob3JWYWx1ZTogTGlua0FuY2hvci5SZWxhdGVkXHJcbiAgICAgICAgLy8gfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGF0dGFjaG1lbnQoKSB7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IG5ldyBRTVNDS0VkaXRvclBhcmFtdGVyKCk7XHJcbiAgICAgICAgZGF0YS5tb2R1bGUgPSB0aGlzLmltYWdlTWFwRGF0YS5tb2R1bGU7XHJcbiAgICAgICAgZGF0YS5lbnRpdHlJZCA9IHRoaXMuaW1hZ2VNYXBEYXRhLmVudGl0eUlkO1xyXG4gICAgICAgIGNvbnN0IGRpYWxvZ1RlbXBsYXRlID0gdGhpcy5kaWFsb2cub3BlbihMaW5rQXR0YWNobWVudENvbXBvbmVudCwge1xyXG4gICAgICAgICAgICB3aWR0aDogJzY1MHB4JyxcclxuICAgICAgICAgICAgaGVpZ2h0OiAnNjUwcHgnLFxyXG4gICAgICAgICAgICBkYXRhLFxyXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgICAgICBkaWFsb2dUZW1wbGF0ZVxyXG4gICAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcnNlTGlua1VybChyZXN1bHQudXJsKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUHJvdG9jb2wgPSBQcm90b2NvbFR5cGVOYW1lLm90aGVyO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5hZHZpc29yeVRpdGxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWR2aXNvcnlUaXRsZSA9IHJlc3VsdC50aXRsZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVBcmVhVmFsdWVzKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmUoKSB7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMubXlJbWFnZU1hcC5nZXRNYXBKc29uKCk7XHJcbiAgICAgICAgZGF0YS5pbWFnZUhlaWdodCA9IHRoaXMubmF0dXJhbEltYWdlSGVpZ2h0O1xyXG4gICAgICAgIGRhdGEuaW1hZ2VXaWR0aCA9IHRoaXMubmF0dXJhbEltYWdlV2lkdGg7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2FuY2VsKCkge1xyXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XHJcbiAgICB9XHJcbn1cclxuIl19
|