qms-angular 1.0.86 → 1.0.87

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 (89) hide show
  1. package/bundles/qms-angular.umd.js +6802 -207
  2. package/bundles/qms-angular.umd.js.map +1 -1
  3. package/esm2015/lib/components/comment/comment.js +6 -3
  4. package/esm2015/lib/components/qms-navigation-drawer/qms-navigation-drawer.component.js +3 -3
  5. package/esm2015/lib/components/related/content/related-content.component.js +2 -2
  6. package/esm2015/lib/components/table/table.module.js +4 -4
  7. package/esm2015/lib/directives/file-upload/file-upload-multiple-selector.directive.js +3 -1
  8. package/esm2015/lib/directives/file-upload/file-upload-selector.directive.js +3 -1
  9. package/esm2015/lib/directives/file-upload/file-upload.directive.js +1 -1
  10. package/esm2015/lib/model/en.js +63 -2
  11. package/esm2015/lib/model/no.js +63 -2
  12. package/esm2015/lib/qms-ckeditor-components/common/flowchart/config/halo.function.js +87 -0
  13. package/esm2015/lib/qms-ckeditor-components/common/flowchart/config/inspector.function.js +3767 -0
  14. package/esm2015/lib/qms-ckeditor-components/common/flowchart/config/selection.function.js +56 -0
  15. package/esm2015/lib/qms-ckeditor-components/common/flowchart/config/stencil.function.js +1003 -0
  16. package/esm2015/lib/qms-ckeditor-components/common/flowchart/config/toolbar.function.js +302 -0
  17. package/esm2015/lib/qms-ckeditor-components/common/flowchart/models/app-shapes.js +320 -0
  18. package/esm2015/lib/qms-ckeditor-components/common/flowchart/service/keyboard-service.js +69 -0
  19. package/esm2015/lib/qms-ckeditor-components/common/flowchart/service/kitchensink-service.js +412 -0
  20. package/esm2015/lib/qms-ckeditor-components/common/flowchart/themes/theme-picker.js +80 -0
  21. package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-save-as-template.model.js +1 -1
  22. package/esm2015/lib/qms-ckeditor-components/common/module/confirm/qms-ckeditor-confirm.component.js +2 -2
  23. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.js +2 -2
  24. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/save-template/save-template.component.js +2 -2
  25. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-flowchart/qms-ckeditor-flowchart.component.js +317 -0
  26. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.component.js +2 -2
  27. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-link/attachments/link-attachment.component.js +2 -2
  28. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-link/qms-ckeditor-link.component.js +2 -2
  29. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-load-template/qms-ckeditor-load-template.component.js +2 -2
  30. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-relation/qmsckeditor-related.component.js +2 -2
  31. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-template/qms-ckeditor-template.component.js +2 -2
  32. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-tooltip/qms-ckeditor-tooltip.component.js +2 -2
  33. package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.component.js +31 -1
  34. package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.module.js +4 -2
  35. package/esm2015/public-api.js +7 -1
  36. package/esm2015/qms-angular.js +2 -1
  37. package/fesm2015/qms-angular.js +6744 -194
  38. package/fesm2015/qms-angular.js.map +1 -1
  39. package/lib/components/comment/comment.d.ts +1 -0
  40. package/lib/model/en.d.ts +61 -0
  41. package/lib/model/no.d.ts +61 -0
  42. package/lib/qms-ckeditor-components/common/flowchart/config/halo.function.d.ts +37 -0
  43. package/lib/qms-ckeditor-components/common/flowchart/config/inspector.function.d.ts +7 -0
  44. package/lib/qms-ckeditor-components/common/flowchart/config/selection.function.d.ts +39 -0
  45. package/lib/qms-ckeditor-components/common/flowchart/config/stencil.function.d.ts +11 -0
  46. package/lib/qms-ckeditor-components/common/flowchart/config/toolbar.function.d.ts +224 -0
  47. package/lib/qms-ckeditor-components/common/flowchart/models/app-shapes.d.ts +58 -0
  48. package/lib/qms-ckeditor-components/common/flowchart/service/keyboard-service.d.ts +16 -0
  49. package/lib/qms-ckeditor-components/common/flowchart/service/kitchensink-service.d.ts +56 -0
  50. package/lib/qms-ckeditor-components/common/flowchart/themes/theme-picker.d.ts +35 -0
  51. package/lib/qms-ckeditor-components/common/models/qms-ckeditor-save-as-template.model.d.ts +2 -0
  52. package/lib/qms-ckeditor-components/components/qms-ckeditor-flowchart/qms-ckeditor-flowchart.component.d.ts +41 -0
  53. package/lib/qms-ckeditor-components/qms-ckeditor.component.d.ts +4 -0
  54. package/lib.theme.scss +4 -0
  55. package/package.json +1 -1
  56. package/public-api.d.ts +6 -0
  57. package/qms-angular.d.ts +1 -0
  58. package/qms-angular.metadata.json +1 -1
  59. package/src/assets/fonts/OpenSans/OpenSans.woff2 +0 -0
  60. package/src/assets/jointjs/images/delete-icon-modern.png +0 -0
  61. package/src/assets/jointjs/images/reset-icon-modern.png +0 -0
  62. package/src/assets/jointjs/images/save-icon-modern.png +0 -0
  63. package/src/assets/jointjs/images/to-front-icon-modern.png +0 -0
  64. package/src/assets/jointjs/images/toback-icon-modern.png +0 -0
  65. package/src/assets/jointjs/images/toolbar-icons-material.png +0 -0
  66. package/src/assets/jointjs/images/toolbar-icons-modern.png +0 -0
  67. package/src/assets/jointjs/scss/rappid.scss +326 -0
  68. package/src/assets/jointjs/scss/theme-picker.scss +22 -0
  69. package/src/assets/qms-ckeditor-plugin/build/ckeditor.js +1 -1
  70. package/src/assets/qms-ckeditor-plugin/build/ckeditor.js.map +1 -1
  71. package/src/assets/qms-ckeditor-plugin/package-lock.json +12634 -345
  72. package/src/assets/qms-ckeditor-plugin/src/ckeditor.js +2 -2
  73. package/src/assets/qms-ckeditor-plugin/src/plugins/common/qmsCKEditorService.js +9 -0
  74. package/src/assets/qms-ckeditor-plugin/src/plugins/flowchart/flowchartdialogcommand.js +47 -0
  75. package/src/assets/qms-ckeditor-plugin/src/plugins/flowchart/qmsCKEditorFlowchartPlugin.js +30 -0
  76. package/src/assets/qms-ckeditor-plugin/src/themes/icons/flowchart.svg +507 -0
  77. package/src/lib/components/comment/comment.scss +1 -0
  78. package/src/lib/components/qms-navigation-drawer/qms-navigation-drawer.component.scss +1 -0
  79. package/src/lib/qms-ckeditor-components/common/flowchart/assets/image-icon1.svg +1 -0
  80. package/src/lib/qms-ckeditor-components/common/flowchart/assets/image-icon2.svg +6 -0
  81. package/src/lib/qms-ckeditor-components/common/flowchart/assets/image-icon3.svg +11 -0
  82. package/src/lib/qms-ckeditor-components/common/flowchart/assets/image-icon4.svg +8 -0
  83. package/src/lib/qms-ckeditor-components/common/flowchart/assets/member-female.png +0 -0
  84. package/src/lib/qms-ckeditor-components/common/flowchart/assets/member-male.png +0 -0
  85. package/src/lib/qms-ckeditor-components/common/flowchart/assets/no-color-icon.svg +72 -0
  86. package/src/lib/qms-ckeditor-components/common/flowchart/assets/toolbar-icons-material.png +0 -0
  87. package/src/lib/qms-ckeditor-components/common/flowchart/assets/toolbar-icons-modern.png +0 -0
  88. package/src/lib/qms-ckeditor-components/common/flowchart/assets/transparent-icon.svg +50 -0
  89. package/src/lib/qms-ckeditor-components/components/qms-ckeditor-flowchart/qms-ckeditor-flowchart.component.scss +68 -0
@@ -0,0 +1,320 @@
1
+ /*! Rappid v3.3.0 - HTML5 Diagramming Framework
2
+
3
+ Copyright (c) 2021 client IO
4
+
5
+ 2021-02-12
6
+
7
+
8
+ This Source Code Form is subject to the terms of the Rappid License
9
+ , v. 2.0. If a copy of the Rappid License was not distributed with this
10
+ file, You can obtain one at http://jointjs.com/license/rappid_v2.txt
11
+ or from the Rappid archive as was distributed by client IO. See the LICENSE file.*/
12
+ import { memoize } from 'lodash';
13
+ export var app;
14
+ (function (app) {
15
+ class CircularModel extends joint.shapes.standard.Ellipse {
16
+ constructor() {
17
+ super(...arguments);
18
+ this.portLabelMarkup = [{
19
+ tagName: 'text',
20
+ selector: 'portLabel'
21
+ }];
22
+ }
23
+ defaults() {
24
+ return joint.util.defaultsDeep({
25
+ type: 'app.CircularModel',
26
+ attrs: {
27
+ root: {
28
+ magnet: false
29
+ }
30
+ },
31
+ ports: {
32
+ groups: {
33
+ 'in': {
34
+ markup: [{
35
+ tagName: 'circle',
36
+ selector: 'portBody',
37
+ attributes: {
38
+ 'r': 10
39
+ }
40
+ }],
41
+ attrs: {
42
+ portBody: {
43
+ magnet: true,
44
+ fill: '#61549c',
45
+ strokeWidth: 0
46
+ },
47
+ portLabel: {
48
+ fontSize: 11,
49
+ fill: '#61549c',
50
+ fontWeight: 800
51
+ }
52
+ },
53
+ position: {
54
+ name: 'ellipse',
55
+ args: {
56
+ startAngle: 0,
57
+ step: 30
58
+ }
59
+ },
60
+ label: {
61
+ position: {
62
+ name: 'radial',
63
+ args: null
64
+ }
65
+ }
66
+ },
67
+ 'out': {
68
+ markup: [{
69
+ tagName: 'circle',
70
+ selector: 'portBody',
71
+ attributes: {
72
+ 'r': 10
73
+ }
74
+ }],
75
+ attrs: {
76
+ portBody: {
77
+ magnet: true,
78
+ fill: '#61549c',
79
+ strokeWidth: 0
80
+ },
81
+ portLabel: {
82
+ fontSize: 11,
83
+ fill: '#61549c',
84
+ fontWeight: 800
85
+ }
86
+ },
87
+ position: {
88
+ name: 'ellipse',
89
+ args: {
90
+ startAngle: 180,
91
+ step: 30
92
+ }
93
+ },
94
+ label: {
95
+ position: {
96
+ name: 'radial',
97
+ args: null
98
+ }
99
+ }
100
+ }
101
+ }
102
+ }
103
+ }, joint.shapes.standard.Ellipse.prototype.defaults);
104
+ }
105
+ }
106
+ app.CircularModel = CircularModel;
107
+ class RectangularModel extends joint.shapes.standard.Rectangle {
108
+ constructor() {
109
+ super(...arguments);
110
+ this.portLabelMarkup = [{
111
+ tagName: 'text',
112
+ selector: 'portLabel'
113
+ }];
114
+ }
115
+ defaults() {
116
+ return joint.util.defaultsDeep({
117
+ type: 'app.RectangularModel',
118
+ attrs: {
119
+ root: {
120
+ magnet: false
121
+ }
122
+ },
123
+ ports: {
124
+ groups: {
125
+ 'in': {
126
+ markup: [{
127
+ tagName: 'circle',
128
+ selector: 'portBody',
129
+ attributes: {
130
+ 'r': 10
131
+ }
132
+ }],
133
+ attrs: {
134
+ portBody: {
135
+ magnet: true,
136
+ fill: '#61549c',
137
+ strokeWidth: 0
138
+ },
139
+ portLabel: {
140
+ fontSize: 11,
141
+ fill: '#61549c',
142
+ fontWeight: 800
143
+ }
144
+ },
145
+ position: {
146
+ name: 'left'
147
+ },
148
+ label: {
149
+ position: {
150
+ name: 'left',
151
+ args: {
152
+ y: 0
153
+ }
154
+ }
155
+ }
156
+ },
157
+ 'out': {
158
+ markup: [{
159
+ tagName: 'circle',
160
+ selector: 'portBody',
161
+ attributes: {
162
+ 'r': 10
163
+ }
164
+ }],
165
+ position: {
166
+ name: 'right'
167
+ },
168
+ attrs: {
169
+ portBody: {
170
+ magnet: true,
171
+ fill: '#61549c',
172
+ strokeWidth: 0
173
+ },
174
+ portLabel: {
175
+ fontSize: 11,
176
+ fill: '#61549c',
177
+ fontWeight: 800
178
+ }
179
+ },
180
+ label: {
181
+ position: {
182
+ name: 'right',
183
+ args: {
184
+ y: 0
185
+ }
186
+ }
187
+ }
188
+ }
189
+ }
190
+ }
191
+ }, joint.shapes.standard.Rectangle.prototype.defaults);
192
+ }
193
+ }
194
+ app.RectangularModel = RectangularModel;
195
+ class Link extends joint.shapes.standard.Link {
196
+ constructor() {
197
+ super(...arguments);
198
+ this.defaultLabel = {
199
+ attrs: {
200
+ rect: {
201
+ fill: '#ffffff',
202
+ stroke: '#8f8f8f',
203
+ strokeWidth: 1,
204
+ refWidth: 10,
205
+ refHeight: 10,
206
+ refX: -5,
207
+ refY: -5
208
+ }
209
+ }
210
+ };
211
+ this.getDataWidthCached = memoize((d) => (new joint.g.Path(d)).bbox().width);
212
+ }
213
+ static connectionPoint(line, view, magnet, opt, type, linkView) {
214
+ const markerWidth = linkView.model.getMarkerWidth(type);
215
+ opt = { offset: markerWidth, stroke: true };
216
+ // connection point for UML shapes lies on the root group containg all the shapes components
217
+ const modelType = view.model.get('type');
218
+ if (modelType.indexOf('uml') === 0) {
219
+ opt.selector = 'root';
220
+ }
221
+ // taking the border stroke-width into account
222
+ if (modelType === 'standard.InscribedImage') {
223
+ opt.selector = 'border';
224
+ }
225
+ return joint.connectionPoints.boundary.call(this, line, view, magnet, opt, type, linkView);
226
+ }
227
+ defaults() {
228
+ return joint.util.defaultsDeep({
229
+ type: 'app.Link',
230
+ router: {
231
+ name: 'normal'
232
+ },
233
+ connector: {
234
+ name: 'rounded'
235
+ },
236
+ labels: [],
237
+ attrs: {
238
+ line: {
239
+ stroke: '#8f8f8f',
240
+ strokeDasharray: '0',
241
+ strokeWidth: 2,
242
+ fill: 'none',
243
+ sourceMarker: {
244
+ type: 'path',
245
+ d: 'M 0 0 0 0',
246
+ stroke: 'none'
247
+ },
248
+ targetMarker: {
249
+ type: 'path',
250
+ d: 'M 0 -5 -10 0 0 5 z',
251
+ stroke: 'none'
252
+ }
253
+ }
254
+ }
255
+ }, joint.shapes.standard.Link.prototype.defaults);
256
+ }
257
+ getMarkerWidth(type) {
258
+ const d = (type === 'source') ? this.attr('line/sourceMarker/d') : this.attr('line/targetMarker/d');
259
+ return this.getDataWidth(d);
260
+ }
261
+ getDataWidth(d) {
262
+ return this.getDataWidthCached(d);
263
+ }
264
+ }
265
+ app.Link = Link;
266
+ })(app || (app = {}));
267
+ const ɵ0 = function (flags) {
268
+ if (this.hasFlag(flags, 'RENDER')) {
269
+ this.render();
270
+ }
271
+ if (this.hasFlag(flags, 'UPDATE')) {
272
+ this.update();
273
+ }
274
+ if (this.hasFlag(flags, 'TRANSFORM')) {
275
+ this.updateTransformation();
276
+ }
277
+ }, ɵ1 = function () {
278
+ const { fragment, selectors: { body } } = joint.util.parseDOMJSON(this.markup);
279
+ this.body = body;
280
+ this.el.appendChild(fragment);
281
+ }, ɵ2 = function () {
282
+ const { model, body } = this;
283
+ const { width, height } = model.size();
284
+ body.setAttribute('width', width);
285
+ body.setAttribute('height', height);
286
+ };
287
+ export const NavigatorElementView = joint.dia.ElementView.extend({
288
+ body: null,
289
+ markup: [{
290
+ tagName: 'rect',
291
+ selector: 'body',
292
+ attributes: {
293
+ 'fill': '#31d0c6'
294
+ }
295
+ }],
296
+ initFlag: ['RENDER', 'UPDATE', 'TRANSFORM'],
297
+ presentationAttributes: {
298
+ size: ['UPDATE'],
299
+ position: ['TRANSFORM'],
300
+ angle: ['TRANSFORM']
301
+ },
302
+ confirmUpdate: ɵ0,
303
+ render: ɵ1,
304
+ update: ɵ2
305
+ });
306
+ export const NavigatorLinkView = joint.dia.LinkView.extend({
307
+ initialize: joint.util.noop,
308
+ render: joint.util.noop,
309
+ update: joint.util.noop
310
+ });
311
+ // re-export build-in shapes from rappid
312
+ export const basic = joint.shapes.basic;
313
+ export const standard = joint.shapes.standard;
314
+ export const fsa = joint.shapes.fsa;
315
+ export const pn = joint.shapes.pn;
316
+ export const erd = joint.shapes.erd;
317
+ export const uml = joint.shapes.uml;
318
+ export const org = joint.shapes.org;
319
+ export { ɵ0, ɵ1, ɵ2 };
320
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXNoYXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Ftcy1hbmd1bGFyL3NyYy9saWIvcW1zLWNrZWRpdG9yLWNvbXBvbmVudHMvY29tbW9uL2Zsb3djaGFydC9tb2RlbHMvYXBwLXNoYXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztvRkFVb0Y7QUFHcEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUVqQyxNQUFNLEtBQVcsR0FBRyxDQTJQbkI7QUEzUEQsV0FBaUIsR0FBRztJQUVoQixNQUFhLGFBQWMsU0FBUSxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPO1FBQWhFOztZQUVJLG9CQUFlLEdBQUcsQ0FBQztvQkFDZixPQUFPLEVBQUUsTUFBTTtvQkFDZixRQUFRLEVBQUUsV0FBVztpQkFDeEIsQ0FBQyxDQUFDO1FBcUZQLENBQUM7UUFuRkcsUUFBUTtZQUVKLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7Z0JBQzNCLElBQUksRUFBRSxtQkFBbUI7Z0JBQ3pCLEtBQUssRUFBRTtvQkFDSCxJQUFJLEVBQUU7d0JBQ0YsTUFBTSxFQUFFLEtBQUs7cUJBQ2hCO2lCQUNKO2dCQUNELEtBQUssRUFBRTtvQkFDSCxNQUFNLEVBQUU7d0JBQ0osSUFBSSxFQUFFOzRCQUNGLE1BQU0sRUFBRSxDQUFDO29DQUNMLE9BQU8sRUFBRSxRQUFRO29DQUNqQixRQUFRLEVBQUUsVUFBVTtvQ0FDcEIsVUFBVSxFQUFFO3dDQUNSLEdBQUcsRUFBRSxFQUFFO3FDQUNWO2lDQUNKLENBQUM7NEJBQ0YsS0FBSyxFQUFFO2dDQUNILFFBQVEsRUFBRTtvQ0FDTixNQUFNLEVBQUUsSUFBSTtvQ0FDWixJQUFJLEVBQUUsU0FBUztvQ0FDZixXQUFXLEVBQUUsQ0FBQztpQ0FDakI7Z0NBQ0QsU0FBUyxFQUFFO29DQUNQLFFB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QUFDLFFBQVEsQ0FBQztRQUNoQixRQUFRLEVBQUUsQ0FBQyxXQUFXLENBQUM7UUFDdkIsS0FBSyxFQUFFLENBQUMsV0FBVyxDQUFDO0tBQ3ZCO0lBRUQsYUFBYSxJQUtaO0lBRUQsTUFBTSxJQUlMO0lBRUQsTUFBTSxJQUtMO0NBQ0osQ0FBQyxDQUFDO0FBR0gsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO0lBRXZELFVBQVUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUk7SUFFM0IsTUFBTSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSTtJQUV2QixNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJO0NBQzFCLENBQUMsQ0FBQztBQUVILHdDQUF3QztBQUN4QyxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFDeEMsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO0FBQzlDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztBQUNwQyxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDbEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO0FBQ3BDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztBQUNwQyxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiEgUmFwcGlkIHYzLjMuMCAtIEhUTUw1IERpYWdyYW1taW5nIEZyYW1ld29ya1xyXG5cclxuQ29weXJpZ2h0IChjKSAyMDIxIGNsaWVudCBJT1xyXG5cclxuIDIwMjEtMDItMTIgXHJcblxyXG5cclxuVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBSYXBwaWQgTGljZW5zZVxyXG4sIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBSYXBwaWQgTGljZW5zZSB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpc1xyXG5maWxlLCBZb3UgY2FuIG9idGFpbiBvbmUgYXQgaHR0cDovL2pvaW50anMuY29tL2xpY2Vuc2UvcmFwcGlkX3YyLnR4dFxyXG4gb3IgZnJvbSB0aGUgUmFwcGlkIGFyY2hpdmUgYXMgd2FzIGRpc3RyaWJ1dGVkIGJ5IGNsaWVudCBJTy4gU2VlIHRoZSBMSUNFTlNFIGZpbGUuKi9cclxuXHJcblxyXG5pbXBvcnQgeyBtZW1vaXplIH0gZnJvbSAnbG9kYXNoJztcclxuZGVjbGFyZSB2YXIgam9pbnQ6IGFueVxyXG5leHBvcnQgbmFtZXNwYWNlIGFwcCB7XHJcblxyXG4gICAgZXhwb3J0IGNsYXNzIENpcmN1bGFyTW9kZWwgZXh0ZW5kcyBqb2ludC5zaGFwZXMuc3RhbmRhcmQuRWxsaXBzZSB7XHJcblxyXG4gICAgICAgIHBvcnRMYWJlbE1hcmt1cCA9IFt7XHJcbiAgICAgICAgICAgIHRhZ05hbWU6ICd0ZXh0JyxcclxuICAgICAgICAgICAgc2VsZWN0b3I6ICdwb3J0TGFiZWwnXHJcbiAgICAgICAgfV07XHJcblxyXG4gICAgICAgIGRlZmF1bHRzKCkge1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGpvaW50LnV0aWwuZGVmYXVsdHNEZWVwKHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdhcHAuQ2lyY3VsYXJNb2RlbCcsXHJcbiAgICAgICAgICAgICAgICBhdHRyczoge1xyXG4gICAgICAgICAgICAgICAgICAgIHJvb3Q6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWFnbmV0OiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBwb3J0czoge1xyXG4gICAgICAgICAgICAgICAgICAgIGdyb3Vwczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW4nOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrdXA6IFt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnTmFtZTogJ2NpcmNsZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdwb3J0Qm9keScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncic6IDEwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRCb2R5OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hZ25ldDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogJyM2MTU0OWMnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydExhYmVsOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAxMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogJyM2MTU0OWMnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiA4MDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnZWxsaXBzZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydEFuZ2xlOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVwOiAzMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdyYWRpYWwnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnb3V0Jzoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya3VwOiBbe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ05hbWU6ICdjaXJjbGUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAncG9ydEJvZHknLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3InOiAxMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1dLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0Qm9keToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWduZXQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6ICcjNjE1NDljJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRMYWJlbDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogMTEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6ICcjNjE1NDljJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogODAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2VsbGlwc2UnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRBbmdsZTogMTgwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVwOiAzMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdyYWRpYWwnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCBqb2ludC5zaGFwZXMuc3RhbmRhcmQuRWxsaXBzZS5wcm90b3R5cGUuZGVmYXVsdHMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBleHBvcnQgY2xhc3MgUmVjdGFuZ3VsYXJNb2RlbCBleHRlbmRzIGpvaW50LnNoYXBlcy5zdGFuZGFyZC5SZWN0YW5nbGUge1xyXG5cclxuICAgICAgICBwb3J0TGFiZWxNYXJrdXAgPSBbe1xyXG4gICAgICAgICAgICB0YWdOYW1lOiAndGV4dCcsXHJcbiAgICAgICAgICAgIHNlbGVjdG9yOiAncG9ydExhYmVsJ1xyXG4gICAgICAgIH1dO1xyXG5cclxuICAgICAgICBkZWZhdWx0cygpIHtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBqb2ludC51dGlsLmRlZmF1bHRzRGVlcCh7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnYXBwLlJlY3Rhbmd1bGFyTW9kZWwnLFxyXG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgICAgICAgICAgICByb290OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hZ25ldDogZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgcG9ydHM6IHtcclxuICAgICAgICAgICAgICAgICAgICBncm91cHM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ2luJzoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya3VwOiBbe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ05hbWU6ICdjaXJjbGUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAncG9ydEJvZHknLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3InOiAxMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1dLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0Qm9keToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWduZXQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6ICcjNjE1NDljJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRMYWJlbDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogMTEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6ICcjNjE1NDljJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogODAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2xlZnQnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnbGVmdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk6IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ291dCc6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmt1cDogW3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdOYW1lOiAnY2lyY2xlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ3BvcnRCb2R5JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyJzogMTBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3JpZ2h0J1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydEJvZHk6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFnbmV0OiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiAnIzYxNTQ5YycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0TGFiZWw6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IDExLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiAnIzYxNTQ5YycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IDgwMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdyaWdodCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk6IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgam9pbnQuc2hhcGVzLnN0YW5kYXJkLlJlY3RhbmdsZS5wcm90b3R5cGUuZGVmYXVsdHMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBleHBvcnQgY2xhc3MgTGluayBleHRlbmRzIGpvaW50LnNoYXBlcy5zdGFuZGFyZC5MaW5rIHtcclxuXHJcbiAgICAgICAgZGVmYXVsdExhYmVsID0ge1xyXG4gICAgICAgICAgICBhdHRyczoge1xyXG4gICAgICAgICAgICAgICAgcmVjdDoge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbGw6ICcjZmZmZmZmJyxcclxuICAgICAgICAgICAgICAgICAgICBzdHJva2U6ICcjOGY4ZjhmJyxcclxuICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcclxuICAgICAgICAgICAgICAgICAgICByZWZXaWR0aDogMTAsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVmSGVpZ2h0OiAxMCxcclxuICAgICAgICAgICAgICAgICAgICByZWZYOiAtNSxcclxuICAgICAgICAgICAgICAgICAgICByZWZZOiAtNVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcHJpdmF0ZSBnZXREYXRhV2lkdGhDYWNoZWQgPSBtZW1vaXplKChkOiBzdHJpbmcpID0+IChuZXcgam9pbnQuZy5QYXRoKGQpKS5iYm94KCkud2lkdGgpO1xyXG5cclxuICAgICAgICBzdGF0aWMgY29ubmVjdGlvblBvaW50KGxpbmU6IGFueSwgdmlldzogYW55LCBtYWduZXQ6IGFueSwgb3B0OiBhbnksIHR5cGU6IGFueSwgbGlua1ZpZXc6IGFueSk6IGFueSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1hcmtlcldpZHRoID0gbGlua1ZpZXcubW9kZWwuZ2V0TWFya2VyV2lkdGgodHlwZSk7XHJcbiAgICAgICAgICAgIG9wdCA9IHsgb2Zmc2V0OiBtYXJrZXJXaWR0aCwgc3Ryb2tlOiB0cnVlIH07XHJcbiAgICAgICAgICAgIC8vIGNvbm5lY3Rpb24gcG9pbnQgZm9yIFVNTCBzaGFwZXMgbGllcyBvbiB0aGUgcm9vdCBncm91cCBjb250YWluZyBhbGwgdGhlIHNoYXBlcyBjb21wb25lbnRzXHJcbiAgICAgICAgICAgIGNvbnN0IG1vZGVsVHlwZSA9IHZpZXcubW9kZWwuZ2V0KCd0eXBlJyk7XHJcbiAgICAgICAgICAgIGlmIChtb2RlbFR5cGUuaW5kZXhPZigndW1sJykgPT09IDApIHsgb3B0LnNlbGVjdG9yID0gJ3Jvb3QnOyB9XHJcbiAgICAgICAgICAgIC8vIHRha2luZyB0aGUgYm9yZGVyIHN0cm9rZS13aWR0aCBpbnRvIGFjY291bnRcclxuICAgICAgICAgICAgaWYgKG1vZGVsVHlwZSA9PT0gJ3N0YW5kYXJkLkluc2NyaWJlZEltYWdlJykgeyBvcHQuc2VsZWN0b3IgPSAnYm9yZGVyJzsgfVxyXG4gICAgICAgICAgICByZXR1cm4gam9pbnQuY29ubmVjdGlvblBvaW50cy5ib3VuZGFyeS5jYWxsKHRoaXMsIGxpbmUsIHZpZXcsIG1hZ25ldCwgb3B0LCB0eXBlLCBsaW5rVmlldyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkZWZhdWx0cygpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGpvaW50LnV0aWwuZGVmYXVsdHNEZWVwKHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdhcHAuTGluaycsXHJcbiAgICAgICAgICAgICAgICByb3V0ZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnbm9ybWFsJ1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGNvbm5lY3Rvcjoge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdyb3VuZGVkJ1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGxhYmVsczogW10sXHJcbiAgICAgICAgICAgICAgICBhdHRyczoge1xyXG4gICAgICAgICAgICAgICAgICAgIGxpbmU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiAnIzhmOGY4ZicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZURhc2hhcnJheTogJzAnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMixcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogJ25vbmUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VNYXJrZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdwYXRoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ6ICdNIDAgMCAwIDAnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiAnbm9uZSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TWFya2VyOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAncGF0aCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkOiAnTSAwIC01IC0xMCAwIDAgNSB6JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogJ25vbmUnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sIGpvaW50LnNoYXBlcy5zdGFuZGFyZC5MaW5rLnByb3RvdHlwZS5kZWZhdWx0cyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBnZXRNYXJrZXJXaWR0aCh0eXBlOiBhbnkpIHtcclxuICAgICAgICAgICAgY29uc3QgZCA9ICh0eXBlID09PSAnc291cmNlJykgPyB0aGlzLmF0dHIoJ2xpbmUvc291cmNlTWFya2VyL2QnKSA6IHRoaXMuYXR0cignbGluZS90YXJnZXRNYXJrZXIvZCcpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRhV2lkdGgoZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBnZXREYXRhV2lkdGgoZDogYW55KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldERhdGFXaWR0aENhY2hlZChkKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBOYXZpZ2F0b3JFbGVtZW50VmlldyA9IGpvaW50LmRpYS5FbGVtZW50Vmlldy5leHRlbmQoe1xyXG5cclxuICAgIGJvZHk6IG51bGwsXHJcblxyXG4gICAgbWFya3VwOiBbe1xyXG4gICAgICAgIHRhZ05hbWU6ICdyZWN0JyxcclxuICAgICAgICBzZWxlY3RvcjogJ2JvZHknLFxyXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcclxuICAgICAgICAgICAgJ2ZpbGwnOiAnIzMxZDBjNidcclxuICAgICAgICB9XHJcbiAgICB9XSxcclxuXHJcbiAgICBpbml0RmxhZzogWydSRU5ERVInLCAnVVBEQVRFJywgJ1RSQU5TRk9STSddLFxyXG5cclxuICAgIHByZXNlbnRhdGlvbkF0dHJpYnV0ZXM6IHtcclxuICAgICAgICBzaXplOiBbJ1VQREFURSddLFxyXG4gICAgICAgIHBvc2l0aW9uOiBbJ1RSQU5TRk9STSddLFxyXG4gICAgICAgIGFuZ2xlOiBbJ1RSQU5TRk9STSddXHJcbiAgICB9LFxyXG5cclxuICAgIGNvbmZpcm1VcGRhdGU6IGZ1bmN0aW9uIChmbGFnczogbnVtYmVyKSB7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmhhc0ZsYWcoZmxhZ3MsICdSRU5ERVInKSkgeyB0aGlzLnJlbmRlcigpOyB9XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzRmxhZyhmbGFncywgJ1VQREFURScpKSB7IHRoaXMudXBkYXRlKCk7IH1cclxuICAgICAgICBpZiAodGhpcy5oYXNGbGFnKGZsYWdzLCAnVFJBTlNGT1JNJykpIHsgdGhpcy51cGRhdGVUcmFuc2Zvcm1hdGlvbigpOyB9XHJcbiAgICB9LFxyXG5cclxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnN0IHsgZnJhZ21lbnQsIHNlbGVjdG9yczogeyBib2R5IH0gfSA9IGpvaW50LnV0aWwucGFyc2VET01KU09OKHRoaXMubWFya3VwKTtcclxuICAgICAgICB0aGlzLmJvZHkgPSBib2R5O1xyXG4gICAgICAgIHRoaXMuZWwuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpO1xyXG4gICAgfSxcclxuXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zdCB7IG1vZGVsLCBib2R5IH0gPSB0aGlzO1xyXG4gICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gbW9kZWwuc2l6ZSgpO1xyXG4gICAgICAgIGJvZHkuc2V0QXR0cmlidXRlKCd3aWR0aCcsIHdpZHRoKTtcclxuICAgICAgICBib2R5LnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgaGVpZ2h0KTtcclxuICAgIH1cclxufSk7XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IE5hdmlnYXRvckxpbmtWaWV3ID0gam9pbnQuZGlhLkxpbmtWaWV3LmV4dGVuZCh7XHJcblxyXG4gICAgaW5pdGlhbGl6ZTogam9pbnQudXRpbC5ub29wLFxyXG5cclxuICAgIHJlbmRlcjogam9pbnQudXRpbC5ub29wLFxyXG5cclxuICAgIHVwZGF0ZTogam9pbnQudXRpbC5ub29wXHJcbn0pO1xyXG5cclxuLy8gcmUtZXhwb3J0IGJ1aWxkLWluIHNoYXBlcyBmcm9tIHJhcHBpZFxyXG5leHBvcnQgY29uc3QgYmFzaWMgPSBqb2ludC5zaGFwZXMuYmFzaWM7XHJcbmV4cG9ydCBjb25zdCBzdGFuZGFyZCA9IGpvaW50LnNoYXBlcy5zdGFuZGFyZDtcclxuZXhwb3J0IGNvbnN0IGZzYSA9IGpvaW50LnNoYXBlcy5mc2E7XHJcbmV4cG9ydCBjb25zdCBwbiA9IGpvaW50LnNoYXBlcy5wbjtcclxuZXhwb3J0IGNvbnN0IGVyZCA9IGpvaW50LnNoYXBlcy5lcmQ7XHJcbmV4cG9ydCBjb25zdCB1bWwgPSBqb2ludC5zaGFwZXMudW1sO1xyXG5leHBvcnQgY29uc3Qgb3JnID0gam9pbnQuc2hhcGVzLm9yZztcclxuXHJcbiJdfQ==
@@ -0,0 +1,69 @@
1
+ /*! Rappid v3.3.0 - HTML5 Diagramming Framework
2
+
3
+ Copyright (c) 2021 client IO
4
+
5
+ 2021-02-12
6
+
7
+
8
+ This Source Code Form is subject to the terms of the Rappid License
9
+ , v. 2.0. If a copy of the Rappid License was not distributed with this
10
+ file, You can obtain one at http://jointjs.com/license/rappid_v2.txt
11
+ or from the Rappid archive as was distributed by client IO. See the LICENSE file.*/
12
+ // import * as joint from '@clientio/rappid';
13
+ import * as _ from 'lodash';
14
+ export class KeyboardService {
15
+ constructor() {
16
+ this.keyboard = new joint.ui.Keyboard();
17
+ }
18
+ create(graph, clipboard, selection, paperScroller, commandManager) {
19
+ this.keyboard.on({
20
+ 'ctrl+c': () => {
21
+ // Copy all selected elements and their associated links.
22
+ clipboard.copyElements(selection.collection, graph);
23
+ },
24
+ 'ctrl+v': () => {
25
+ const pastedCells = clipboard.pasteCells(graph, {
26
+ translate: { dx: 20, dy: 20 },
27
+ useLocalStorage: true
28
+ });
29
+ const elements = _.filter(pastedCells, cell => cell.isElement());
30
+ // Make sure pasted elements get selected immediately. This makes the UX better as
31
+ // the user can immediately manipulate the pasted elements.
32
+ selection.collection.reset(elements);
33
+ },
34
+ 'ctrl+x shift+delete': () => {
35
+ clipboard.cutElements(selection.collection, graph);
36
+ },
37
+ 'delete backspace': (evt) => {
38
+ evt.preventDefault();
39
+ graph.removeCells(selection.collection.toArray());
40
+ },
41
+ 'ctrl+z': () => {
42
+ commandManager.undo();
43
+ selection.cancelSelection();
44
+ },
45
+ 'ctrl+y': () => {
46
+ commandManager.redo();
47
+ selection.cancelSelection();
48
+ },
49
+ 'ctrl+a': () => {
50
+ selection.collection.reset(graph.getElements());
51
+ },
52
+ 'ctrl+plus': (evt) => {
53
+ evt.preventDefault();
54
+ paperScroller.zoom(0.2, { max: 5, grid: 0.2 });
55
+ },
56
+ 'ctrl+minus': (evt) => {
57
+ evt.preventDefault();
58
+ paperScroller.zoom(-0.2, { min: 0.2, grid: 0.2 });
59
+ },
60
+ 'keydown:shift': (evt) => {
61
+ paperScroller.setCursor('crosshair');
62
+ },
63
+ 'keyup:shift': () => {
64
+ paperScroller.setCursor('grab');
65
+ }
66
+ });
67
+ }
68
+ }
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Ym9hcmQtc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Ftcy1hbmd1bGFyL3NyYy9saWIvcW1zLWNrZWRpdG9yLWNvbXBvbmVudHMvY29tbW9uL2Zsb3djaGFydC9zZXJ2aWNlL2tleWJvYXJkLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7b0ZBVW9GO0FBR3BGLDZDQUE2QztBQUM3QyxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUU1QixNQUFNLE9BQU8sZUFBZTtJQUl4QjtRQUNJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFRCxNQUFNLENBQ0YsS0FBVSxFQUNWLFNBQWMsRUFDZCxTQUFjLEVBQ2QsYUFBa0IsRUFDbEIsY0FBbUI7UUFHbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFFYixRQUFRLEVBQUUsR0FBRyxFQUFFO2dCQUVYLHlEQUF5RDtnQkFDekQsU0FBUyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3hELENBQUM7WUFFRCxRQUFRLEVBQUUsR0FBRyxFQUFFO2dCQUVYLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFO29CQUM1QyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7b0JBQzdCLGVBQWUsRUFBRSxJQUFJO2lCQUN4QixDQUFDLENBQUM7Z0JBRUgsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztnQkFFakUsa0ZBQWtGO2dCQUNsRiwyREFBMkQ7Z0JBQzNELFNBQVMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3pDLENBQUM7WUFFRCxxQkFBcUIsRUFBRSxHQUFHLEVBQUU7Z0JBQ3hCLFNBQVMsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN2RCxDQUFDO1lBRUQsa0JBQWtCLEVBQUUsQ0FBQyxHQUFpQixFQUFFLEVBQUU7Z0JBQ3RDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDckIsS0FBSyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDdEQsQ0FBQztZQUVELFFBQVEsRUFBRSxHQUFHLEVBQUU7Z0JBQ1gsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN0QixTQUFTLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDaEMsQ0FBQztZQUVELFFBQVEsRUFBRSxHQUFHLEVBQUU7Z0JBQ1gsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN0QixTQUFTLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDaEMsQ0FBQztZQUVELFFBQVEsRUFBRSxHQUFHLEVBQUU7Z0JBQ1gsU0FBUyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDcEQsQ0FBQztZQUVELFdBQVcsRUFBRSxDQUFDLEdBQWlCLEVBQUUsRUFBRTtnQkFDL0IsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUNyQixhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDbkQsQ0FBQztZQUVELFlBQVksRUFBRSxDQUFDLEdBQWlCLEVBQUUsRUFBRTtnQkFDaEMsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUNyQixhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUN0RCxDQUFDO1lBRUQsZUFBZSxFQUFFLENBQUMsR0FBaUIsRUFBRSxFQUFFO2dCQUNuQyxhQUFhLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3pDLENBQUM7WUFFRCxhQUFhLEVBQUUsR0FBRyxFQUFFO2dCQUNoQixhQUFhLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3BDLENBQUM7U0FDSixDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyIvKiEgUmFwcGlkIHYzLjMuMCAtIEhUTUw1IERpYWdyYW1taW5nIEZyYW1ld29ya1xyXG5cclxuQ29weXJpZ2h0IChjKSAyMDIxIGNsaWVudCBJT1xyXG5cclxuIDIwMjEtMDItMTIgXHJcblxyXG5cclxuVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBSYXBwaWQgTGljZW5zZVxyXG4sIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBSYXBwaWQgTGljZW5zZSB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpc1xyXG5maWxlLCBZb3UgY2FuIG9idGFpbiBvbmUgYXQgaHR0cDovL2pvaW50anMuY29tL2xpY2Vuc2UvcmFwcGlkX3YyLnR4dFxyXG4gb3IgZnJvbSB0aGUgUmFwcGlkIGFyY2hpdmUgYXMgd2FzIGRpc3RyaWJ1dGVkIGJ5IGNsaWVudCBJTy4gU2VlIHRoZSBMSUNFTlNFIGZpbGUuKi9cclxuXHJcblxyXG4vLyBpbXBvcnQgKiBhcyBqb2ludCBmcm9tICdAY2xpZW50aW8vcmFwcGlkJztcclxuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xyXG5kZWNsYXJlIHZhciBqb2ludDogYW55O1xyXG5leHBvcnQgY2xhc3MgS2V5Ym9hcmRTZXJ2aWNlIHtcclxuXHJcbiAgICBrZXlib2FyZDogYW55O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMua2V5Ym9hcmQgPSBuZXcgam9pbnQudWkuS2V5Ym9hcmQoKTtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGUoXHJcbiAgICAgICAgZ3JhcGg6IGFueSxcclxuICAgICAgICBjbGlwYm9hcmQ6IGFueSxcclxuICAgICAgICBzZWxlY3Rpb246IGFueSxcclxuICAgICAgICBwYXBlclNjcm9sbGVyOiBhbnksXHJcbiAgICAgICAgY29tbWFuZE1hbmFnZXI6IGFueVxyXG4gICAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMua2V5Ym9hcmQub24oe1xyXG5cclxuICAgICAgICAgICAgJ2N0cmwrYyc6ICgpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBDb3B5IGFsbCBzZWxlY3RlZCBlbGVtZW50cyBhbmQgdGhlaXIgYXNzb2NpYXRlZCBsaW5rcy5cclxuICAgICAgICAgICAgICAgIGNsaXBib2FyZC5jb3B5RWxlbWVudHMoc2VsZWN0aW9uLmNvbGxlY3Rpb24sIGdyYXBoKTtcclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICdjdHJsK3YnOiAoKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFzdGVkQ2VsbHMgPSBjbGlwYm9hcmQucGFzdGVDZWxscyhncmFwaCwge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZTogeyBkeDogMjAsIGR5OiAyMCB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHVzZUxvY2FsU3RvcmFnZTogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBfLmZpbHRlcihwYXN0ZWRDZWxscywgY2VsbCA9PiBjZWxsLmlzRWxlbWVudCgpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgcGFzdGVkIGVsZW1lbnRzIGdldCBzZWxlY3RlZCBpbW1lZGlhdGVseS4gVGhpcyBtYWtlcyB0aGUgVVggYmV0dGVyIGFzXHJcbiAgICAgICAgICAgICAgICAvLyB0aGUgdXNlciBjYW4gaW1tZWRpYXRlbHkgbWFuaXB1bGF0ZSB0aGUgcGFzdGVkIGVsZW1lbnRzLlxyXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uLmNvbGxlY3Rpb24ucmVzZXQoZWxlbWVudHMpO1xyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgJ2N0cmwreCBzaGlmdCtkZWxldGUnOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjbGlwYm9hcmQuY3V0RWxlbWVudHMoc2VsZWN0aW9uLmNvbGxlY3Rpb24sIGdyYXBoKTtcclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICdkZWxldGUgYmFja3NwYWNlJzogKGV2dDogSlF1ZXJ5LkV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIGdyYXBoLnJlbW92ZUNlbGxzKHNlbGVjdGlvbi5jb2xsZWN0aW9uLnRvQXJyYXkoKSk7XHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAnY3RybCt6JzogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29tbWFuZE1hbmFnZXIudW5kbygpO1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uLmNhbmNlbFNlbGVjdGlvbigpO1xyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgJ2N0cmwreSc6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbW1hbmRNYW5hZ2VyLnJlZG8oKTtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5jYW5jZWxTZWxlY3Rpb24oKTtcclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICdjdHJsK2EnOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24uY29sbGVjdGlvbi5yZXNldChncmFwaC5nZXRFbGVtZW50cygpKTtcclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICdjdHJsK3BsdXMnOiAoZXZ0OiBKUXVlcnkuRXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgcGFwZXJTY3JvbGxlci56b29tKDAuMiwgeyBtYXg6IDUsIGdyaWQ6IDAuMiB9KTtcclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICdjdHJsK21pbnVzJzogKGV2dDogSlF1ZXJ5LkV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIHBhcGVyU2Nyb2xsZXIuem9vbSgtMC4yLCB7IG1pbjogMC4yLCBncmlkOiAwLjIgfSk7XHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAna2V5ZG93bjpzaGlmdCc6IChldnQ6IEpRdWVyeS5FdmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcGFwZXJTY3JvbGxlci5zZXRDdXJzb3IoJ2Nyb3NzaGFpcicpO1xyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgJ2tleXVwOnNoaWZ0JzogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcGFwZXJTY3JvbGxlci5zZXRDdXJzb3IoJ2dyYWInKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==