@stackline/angular-multiselect-dropdown 18.0.0 → 19.0.0

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.
@@ -1,411 +0,0 @@
1
- import { Component, NgModule, ContentChild, ViewChild, forwardRef, Input, Output, EventEmitter } from '@angular/core';
2
- import { FormsModule, NG_VALUE_ACCESSOR, NG_VALIDATORS } from '@angular/forms';
3
- import { CommonModule } from '@angular/common';
4
- import { MyException } from './multiselect.model';
5
- import { ClickOutsideDirective, ScrollDirective, styleDirective } from './clickOutside';
6
- import { ListFilterPipe } from './list-filter';
7
- import { Item, Badge, TemplateRenderer } from './menu-item';
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "@angular/common";
10
- import * as i2 from "@angular/forms";
11
- export const DROPDOWN_CONTROL_VALUE_ACCESSOR = {
12
- provide: NG_VALUE_ACCESSOR,
13
- useExisting: forwardRef(() => AngularMultiSelect),
14
- multi: true
15
- };
16
- export const DROPDOWN_CONTROL_VALIDATION = {
17
- provide: NG_VALIDATORS,
18
- useExisting: forwardRef(() => AngularMultiSelect),
19
- multi: true,
20
- };
21
- const noop = () => {
22
- };
23
- export class AngularMultiSelect {
24
- _elementRef;
25
- data;
26
- settings;
27
- onSelect = new EventEmitter();
28
- onDeSelect = new EventEmitter();
29
- onSelectAll = new EventEmitter();
30
- onDeSelectAll = new EventEmitter();
31
- onOpen = new EventEmitter();
32
- onClose = new EventEmitter();
33
- itemTempl;
34
- badgeTempl;
35
- searchInput;
36
- selectedItems;
37
- isActive = false;
38
- isSelectAll = false;
39
- groupedData;
40
- filter;
41
- chunkArray;
42
- scrollTop;
43
- chunkIndex = [];
44
- cachedItems = [];
45
- totalRows;
46
- itemHeight = 41.6;
47
- screenItemsLen;
48
- cachedItemsLen;
49
- totalHeight;
50
- scroller;
51
- maxBuffer;
52
- lastScrolled;
53
- lastRepaintY;
54
- defaultSettings = {
55
- singleSelection: false,
56
- text: 'Select',
57
- enableCheckAll: true,
58
- selectAllText: 'Select All',
59
- unSelectAllText: 'UnSelect All',
60
- enableSearchFilter: false,
61
- maxHeight: 300,
62
- badgeShowLimit: 999999999999,
63
- classes: '',
64
- disabled: false,
65
- searchPlaceholderText: 'Search',
66
- showCheckbox: true,
67
- noDataLabel: 'No Data Available',
68
- searchAutofocus: true,
69
- lazyLoading: false,
70
- labelKey: 'itemName',
71
- theme: 'classic',
72
- skin: 'classic'
73
- };
74
- parseError;
75
- constructor(_elementRef) {
76
- this._elementRef = _elementRef;
77
- }
78
- getThemeName() {
79
- let rawTheme = 'classic';
80
- if (this.settings) {
81
- rawTheme = this.settings.skin || this.settings.theme || 'classic';
82
- }
83
- let theme = String(rawTheme).toLowerCase().replace(/[^a-z0-9_-]+/g, '-');
84
- theme = theme.replace(/^-+|-+$/g, '');
85
- return theme || 'classic';
86
- }
87
- getDropdownClasses() {
88
- let theme = this.getThemeName();
89
- let className = 'theme-' + theme;
90
- if (theme !== 'classic' && theme !== 'material' && theme !== 'dark' && theme !== 'custom') {
91
- className += ' theme-custom';
92
- }
93
- if (this.isActive) {
94
- className += ' is-open';
95
- }
96
- if (this.settings && this.settings.disabled) {
97
- className += ' is-disabled';
98
- }
99
- return className;
100
- }
101
- ngOnInit() {
102
- this.settings = Object.assign(this.defaultSettings, this.settings);
103
- if (this.settings.groupBy) {
104
- this.groupedData = this.transformData(this.data, this.settings.groupBy);
105
- }
106
- this.totalRows = (this.data && this.data.length);
107
- this.cachedItems = this.data;
108
- this.screenItemsLen = Math.ceil(this.settings.maxHeight / this.itemHeight);
109
- this.cachedItemsLen = this.screenItemsLen * 3;
110
- this.totalHeight = this.itemHeight * this.totalRows;
111
- this.maxBuffer = this.screenItemsLen * this.itemHeight;
112
- this.lastScrolled = 0;
113
- this.renderChunk(0, this.cachedItemsLen / 2);
114
- }
115
- ngOnChanges(changes) {
116
- if (changes.data && !changes.data.isFirstChange()) {
117
- if (this.settings.groupBy) {
118
- this.groupedData = this.transformData(this.data, this.settings.groupBy);
119
- if (this.data.length == 0) {
120
- this.selectedItems = [];
121
- }
122
- }
123
- }
124
- if (changes.settings && !changes.settings.isFirstChange()) {
125
- this.settings = Object.assign(this.defaultSettings, this.settings);
126
- }
127
- }
128
- ngDoCheck() {
129
- if (this.selectedItems) {
130
- if (this.selectedItems.length == 0 || this.data.length == 0 || this.selectedItems.length < this.data.length) {
131
- this.isSelectAll = false;
132
- }
133
- }
134
- }
135
- ngAfterViewInit() {
136
- if (this.settings.lazyLoading) {
137
- this._elementRef.nativeElement.getElementsByClassName("lazyContainer")[0].addEventListener('scroll', this.onScroll.bind(this));
138
- }
139
- }
140
- onItemClick(item, index, evt) {
141
- if (this.settings.disabled) {
142
- return false;
143
- }
144
- let found = this.isSelected(item);
145
- let limit = this.selectedItems.length < this.settings.limitSelection ? true : false;
146
- if (!found) {
147
- if (this.settings.limitSelection) {
148
- if (limit) {
149
- this.addSelected(item);
150
- this.onSelect.emit(item);
151
- }
152
- }
153
- else {
154
- this.addSelected(item);
155
- this.onSelect.emit(item);
156
- }
157
- }
158
- else {
159
- this.removeSelected(item);
160
- this.onDeSelect.emit(item);
161
- }
162
- if (this.isSelectAll || this.data.length > this.selectedItems.length) {
163
- this.isSelectAll = false;
164
- }
165
- if (this.data.length == this.selectedItems.length) {
166
- this.isSelectAll = true;
167
- }
168
- }
169
- validate(c) {
170
- return null;
171
- }
172
- onTouchedCallback = noop;
173
- onChangeCallback = noop;
174
- writeValue(value) {
175
- if (value !== undefined && value !== null) {
176
- if (this.settings.singleSelection) {
177
- try {
178
- if (value.length > 1) {
179
- this.selectedItems = [value[0]];
180
- throw new MyException(404, { "msg": "Single Selection Mode, Selected Items cannot have more than one item." });
181
- }
182
- else {
183
- this.selectedItems = value;
184
- }
185
- }
186
- catch (e) {
187
- console.error(e.body.msg);
188
- }
189
- }
190
- else {
191
- if (this.settings.limitSelection) {
192
- this.selectedItems = value.splice(0, this.settings.limitSelection);
193
- }
194
- else {
195
- this.selectedItems = value;
196
- }
197
- if (this.selectedItems.length === this.data.length && this.data.length > 0) {
198
- this.isSelectAll = true;
199
- }
200
- }
201
- }
202
- else {
203
- this.selectedItems = [];
204
- }
205
- }
206
- //From ControlValueAccessor interface
207
- registerOnChange(fn) {
208
- this.onChangeCallback = fn;
209
- }
210
- //From ControlValueAccessor interface
211
- registerOnTouched(fn) {
212
- this.onTouchedCallback = fn;
213
- }
214
- trackByFn(index, item) {
215
- return item.id;
216
- }
217
- isSelected(clickedItem) {
218
- let found = false;
219
- this.selectedItems && this.selectedItems.forEach(item => {
220
- if (clickedItem.id === item.id) {
221
- found = true;
222
- }
223
- });
224
- return found;
225
- }
226
- addSelected(item) {
227
- if (this.settings.singleSelection) {
228
- this.selectedItems = [];
229
- this.selectedItems.push(item);
230
- this.closeDropdown();
231
- }
232
- else
233
- this.selectedItems.push(item);
234
- this.onChangeCallback(this.selectedItems);
235
- this.onTouchedCallback(this.selectedItems);
236
- }
237
- removeSelected(clickedItem) {
238
- this.selectedItems && this.selectedItems.forEach(item => {
239
- if (clickedItem.id === item.id) {
240
- this.selectedItems.splice(this.selectedItems.indexOf(item), 1);
241
- }
242
- });
243
- this.onChangeCallback(this.selectedItems);
244
- this.onTouchedCallback(this.selectedItems);
245
- }
246
- toggleDropdown(evt) {
247
- if (this.settings.disabled) {
248
- return false;
249
- }
250
- this.isActive = !this.isActive;
251
- if (this.isActive) {
252
- if (this.settings.searchAutofocus && this.settings.enableSearchFilter) {
253
- setTimeout(() => {
254
- this.searchInput.nativeElement.focus();
255
- }, 0);
256
- }
257
- this.onOpen.emit(true);
258
- }
259
- else {
260
- this.onClose.emit(false);
261
- }
262
- evt.preventDefault();
263
- }
264
- closeDropdown() {
265
- if (this.searchInput) {
266
- this.searchInput.nativeElement.value = "";
267
- this.data = [];
268
- this.data = this.cachedItems;
269
- this.totalHeight = this.itemHeight * this.data.length;
270
- this.totalRows = this.data.length;
271
- this.updateView(this.scrollTop);
272
- }
273
- this.filter = "";
274
- this.isActive = false;
275
- this.onClose.emit(false);
276
- }
277
- toggleSelectAll() {
278
- if (!this.isSelectAll) {
279
- this.selectedItems = [];
280
- this.selectedItems = this.data.slice();
281
- this.isSelectAll = true;
282
- this.onChangeCallback(this.selectedItems);
283
- this.onTouchedCallback(this.selectedItems);
284
- this.onSelectAll.emit(this.selectedItems);
285
- }
286
- else {
287
- this.selectedItems = [];
288
- this.isSelectAll = false;
289
- this.onChangeCallback(this.selectedItems);
290
- this.onTouchedCallback(this.selectedItems);
291
- this.onDeSelectAll.emit(this.selectedItems);
292
- }
293
- }
294
- transformData(arr, field) {
295
- const groupedObj = arr.reduce((prev, cur) => {
296
- if (!prev[cur[field]]) {
297
- prev[cur[field]] = [cur];
298
- }
299
- else {
300
- prev[cur[field]].push(cur);
301
- }
302
- return prev;
303
- }, {});
304
- const tempArr = [];
305
- Object.keys(groupedObj).map(function (x) {
306
- tempArr.push({ key: x, value: groupedObj[x] });
307
- });
308
- return tempArr;
309
- }
310
- renderChunk(fromPos, howMany) {
311
- this.chunkArray = [];
312
- this.chunkIndex = [];
313
- var finalItem = fromPos + howMany;
314
- if (finalItem > this.totalRows)
315
- finalItem = this.totalRows;
316
- for (var i = fromPos; i < finalItem; i++) {
317
- this.chunkIndex.push((i * this.itemHeight) + 'px');
318
- this.chunkArray.push(this.data[i]);
319
- }
320
- }
321
- onScroll(e) {
322
- this.scrollTop = e.target.scrollTop;
323
- this.updateView(this.scrollTop);
324
- }
325
- updateView(scrollTop) {
326
- var scrollPos = scrollTop ? scrollTop : 0;
327
- var first = (scrollPos / this.itemHeight) - this.screenItemsLen;
328
- var firstTemp = "" + first;
329
- first = parseInt(firstTemp) < 0 ? 0 : parseInt(firstTemp);
330
- this.renderChunk(first, this.cachedItemsLen);
331
- this.lastRepaintY = scrollPos;
332
- }
333
- filterInfiniteList(evt) {
334
- var filteredElems = [];
335
- this.data = this.cachedItems.slice();
336
- if (evt.target.value.toString() != '') {
337
- this.data.filter(function (el) {
338
- for (var prop in el) {
339
- if (el[prop].toString().toLowerCase().indexOf(evt.target.value.toString().toLowerCase()) >= 0) {
340
- filteredElems.push(el);
341
- break;
342
- }
343
- }
344
- });
345
- //this.cachedItems = this.data;
346
- this.totalHeight = this.itemHeight * filteredElems.length;
347
- this.totalRows = filteredElems.length;
348
- this.data = [];
349
- this.data = filteredElems;
350
- this.updateView(this.scrollTop);
351
- }
352
- else if (evt.target.value.toString() == '' && this.cachedItems.length > 0) {
353
- this.data = [];
354
- this.data = this.cachedItems;
355
- this.totalHeight = this.itemHeight * this.data.length;
356
- this.totalRows = this.data.length;
357
- this.updateView(this.scrollTop);
358
- }
359
- }
360
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AngularMultiSelect, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
361
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: AngularMultiSelect, selector: "angular-multiselect, angular2-multiselect", inputs: { data: "data", settings: "settings" }, outputs: { onSelect: "onSelect", onDeSelect: "onDeSelect", onSelectAll: "onSelectAll", onDeSelectAll: "onDeSelectAll", onOpen: "onOpen", onClose: "onClose" }, host: { properties: { "class": "defaultSettings.classes" } }, providers: [DROPDOWN_CONTROL_VALUE_ACCESSOR, DROPDOWN_CONTROL_VALIDATION], queries: [{ propertyName: "itemTempl", first: true, predicate: Item, descendants: true }, { propertyName: "badgeTempl", first: true, predicate: Badge, descendants: true }], viewQueries: [{ propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"stackline-dropdown\" [ngClass]=\"getDropdownClasses()\" (clickOutside)=\"closeDropdown()\">\n <div class=\"selected-list\">\n <div class=\"c-btn\" (click)=\"toggleDropdown($event)\" [ngClass]=\"{'disabled': settings.disabled}\">\n <span *ngIf=\"selectedItems?.length == 0\">{{settings.text}}</span>\n <span *ngIf=\"settings.singleSelection\">\n <span *ngFor=\"let item of selectedItems;trackBy: trackByFn;\">\n {{item[settings.labelKey]}}\n </span>\n </span>\n <div class=\"c-list\" *ngIf=\"selectedItems?.length > 0 && !settings.singleSelection\">\n <div class=\"c-token\" *ngFor=\"let item of selectedItems;trackBy: trackByFn;let k = index\" [hidden]=\"k > settings.badgeShowLimit-1\">\n <span *ngIf=\"!badgeTempl\" class=\"c-label\">{{item[settings.labelKey]}}</span>\n <span *ngIf=\"badgeTempl\" class=\"c-label\">\n <c-templateRenderer [data]=\"badgeTempl\" [item]=\"item\"></c-templateRenderer>\n </span>\n <span class=\"fa fa-remove\" (click)=\"onItemClick(item,k,$event)\"></span>\n </div>\n </div> \n <span class=\"countplaceholder\" *ngIf=\"selectedItems?.length > settings.badgeShowLimit\">+{{selectedItems?.length - settings.badgeShowLimit }}</span>\n <span class=\"fa\" [ngClass]=\"{'fa-angle-down': !isActive,'fa-angle-up':isActive}\"></span>\n </div> \n </div>\n <div class=\"dropdown-list\" [hidden]=\"!isActive\">\n <div class=\"arrow-up arrow-2\"></div>\n <div class=\"arrow-up\"></div>\n <div class=\"list-area\">\n <div class=\"pure-checkbox select-all\" *ngIf=\"settings.enableCheckAll && !settings.singleSelection && !settings.limitSelection\" (click)=\"toggleSelectAll()\">\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelectAll\" [disabled]=\"settings.limitSelection == selectedItems?.length\"/>\n <label>\n <span [hidden]=\"isSelectAll\">{{settings.selectAllText}}</span>\n <span [hidden]=\"!isSelectAll\">{{settings.unSelectAllText}}</span>\n </label>\n </div> \n <div class=\"list-filter\" *ngIf=\"settings.enableSearchFilter && !settings.lazyLoading\">\n <span class=\"fa fa-search\"></span>\n <input #searchInput type=\"text\" [placeholder]=\"settings.searchPlaceholderText\" [(ngModel)]=\"filter\">\n </div> \n <div class=\"list-filter\" *ngIf=\"settings.enableSearchFilter && settings.lazyLoading\">\n <span class=\"fa fa-search\"></span>\n <input #searchInput type=\"text\" [placeholder]=\"settings.searchPlaceholderText\" (keyup)=\"filterInfiniteList($event)\">\n </div>\n <ul *ngIf=\"!settings.groupBy\" [style.maxHeight] = \"settings.maxHeight+'px'\" class=\"lazyContainer\" >\n <span *ngIf=\"itemTempl\">\n <li *ngFor=\"let item of data | listFilter:filter; let i = index;\" (click)=\"onItemClick(item,i,$event)\" class=\"pure-checkbox\">\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(item)\" [disabled]=\"settings.limitSelection == selectedItems?.length && !isSelected(item)\"/>\n <label></label>\n <c-templateRenderer [data]=\"itemTempl\" [item]=\"item\"></c-templateRenderer>\n </li>\n </span>\n <span *ngIf=\"!itemTempl && !settings.lazyLoading\" >\n <li *ngFor=\"let item of data | listFilter:filter; let i = index;\" (click)=\"onItemClick(item,i,$event)\" class=\"pure-checkbox\">\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(item)\" [disabled]=\"settings.limitSelection == selectedItems?.length && !isSelected(item)\"/>\n <label>{{item[settings.labelKey]}}</label>\n </li>\n </span>\n <span *ngIf=\"!itemTempl && settings.lazyLoading\" >\n <div [ngStyle]=\"{'height':totalHeight+'px'}\" style=\"position: relative;\">\n\n \n <li *ngFor=\"let item of chunkArray | listFilter:filter; let i = index;\" (click)=\"onItemClick(item,i,$event)\" style=\"position: absolute;width: 100%;\" class=\"pure-checkbox\" [styleProp]=\"chunkIndex[i]\">\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(item)\" [disabled]=\"settings.limitSelection == selectedItems?.length && !isSelected(item)\"/>\n <label>{{item[settings.labelKey]}}</label>\n </li>\n </div>\n </span>\n </ul>\n <div *ngIf=\"settings.groupBy\" [style.maxHeight] = \"settings.maxHeight+'px'\" style=\"overflow: auto;\">\n <ul *ngFor=\"let obj of groupedData ; let i = index;\" class=\"list-grp\">\n <h4 *ngIf=\"(obj.value | listFilter:filter ).length > 0\">{{obj.key}}</h4>\n <span *ngIf=\"itemTempl\" >\n <li *ngFor=\"let item of obj.value | listFilter:filter; let i = index;\" (click)=\"onItemClick(item,i,$event)\" class=\"pure-checkbox\">\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(item)\" [disabled]=\"settings.limitSelection == selectedItems?.length && !isSelected(item)\"/>\n <label></label>\n <c-templateRenderer [data]=\"itemTempl\" [item]=\"item\"></c-templateRenderer>\n </li>\n </span>\n <span *ngIf=\"!itemTempl\" >\n <li *ngFor=\"let item of obj.value | listFilter:filter; let i = index;\" (click)=\"onItemClick(item,i,$event)\" class=\"pure-checkbox\">\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(item)\" [disabled]=\"settings.limitSelection == selectedItems?.length && !isSelected(item)\"/>\n <label>{{item[settings.labelKey]}}</label>\n </li>\n </span>\n </ul>\n </div>\n <h5 class=\"list-message\" *ngIf=\"data?.length == 0\">{{settings.noDataLabel}}</h5>\n </div>\n </div>\n</div>\n", isInline: true, styles: [".stackline-dropdown{position:relative}.c-btn{display:inline-block;background:#fff;border:1px solid #ccc;border-radius:3px;font-size:14px;color:#333}.c-btn.disabled{background:#ccc}.c-btn:focus{outline:none}.selected-list .c-list{display:flex;flex:1 1 auto;align-items:center;flex-wrap:wrap;min-width:0;float:none;padding:0;margin:0;width:auto}.selected-list .c-list .c-token{list-style:none;padding:0 5px;background:#0079fe;color:#fff;border-radius:2px;margin-right:4px;margin-top:2px;float:left}.selected-list .c-list .c-token .c-label{display:block;float:left}.selected-list .c-list .c-token .fa-remove{margin-left:1px;font-size:12px}.selected-list .fa-angle-down,.selected-list .fa-angle-up{font-size:15pt;position:absolute;right:10px;top:50%;transform:translateY(-50%)}.selected-list .countplaceholder{display:inline-flex;flex:0 0 auto;align-items:center;justify-content:center;align-self:center;margin:0 0 0 6px;line-height:1}.selected-list .c-btn{box-sizing:border-box;width:100%;box-shadow:0 1px 5px #959595;padding:10px 36px 10px 10px;cursor:pointer;display:flex;align-items:center;flex-wrap:nowrap;position:relative}.dropdown-list{position:absolute;padding-top:14px;width:100%;z-index:9999}.dropdown-list ul{padding:0;list-style:none;overflow:auto;margin:0}.dropdown-list ul li{padding:10px;cursor:pointer;text-align:left}.dropdown-list ul li:first-child{padding-top:10px}.dropdown-list ul li:last-child{padding-bottom:10px}.dropdown-list ul li:hover{background:#f5f5f5}.dropdown-list ::-webkit-scrollbar{width:8px}.dropdown-list ::-webkit-scrollbar-thumb{background:#ccc;border-radius:5px}.dropdown-list ::-webkit-scrollbar-track{background:#f2f2f2}.arrow-up{width:0;height:0;border-left:13px solid transparent;border-right:13px solid transparent;border-bottom:15px solid #fff;margin-left:15px;position:absolute;top:0}.arrow-2{border-bottom:15px solid #ccc;top:-1px}.list-area{border:1px solid #ccc;border-radius:3px;background:#fff;margin:0;box-shadow:0 1px 5px #959595}.select-all{padding:10px;border-bottom:1px solid #ccc;text-align:left}.list-filter{border-bottom:1px solid #ccc;position:relative}.list-filter input{border:0px;width:100%;height:35px;padding:0 0 0 35px}.list-filter input:focus{outline:none}.list-filter .fa{position:absolute;top:10px;left:13px;color:#888}.pure-checkbox input[type=checkbox]{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.pure-checkbox input[type=checkbox]:focus+label:before,.pure-checkbox input[type=checkbox]:hover+label:before{border-color:#0079fe;background-color:#f2f2f2}.pure-checkbox input[type=checkbox]:active+label:before{transition-duration:0s}.pure-checkbox input[type=checkbox]+label{position:relative;padding-left:2em;vertical-align:middle;-webkit-user-select:none;user-select:none;cursor:pointer;margin:0;color:#000;font-weight:300}.pure-checkbox input[type=checkbox]+label:before{box-sizing:content-box;content:\"\";color:#0079fe;position:absolute;top:50%;left:0;width:14px;height:14px;margin-top:-9px;border:2px solid #0079FE;text-align:center;transition:all .4s ease}.pure-checkbox input[type=checkbox]+label:after{box-sizing:content-box;content:\"\";background-color:#0079fe;position:absolute;top:50%;left:4px;width:10px;height:10px;margin-top:-5px;transform:scale(0);transform-origin:50%;transition:transform .2s ease-out}.pure-checkbox input[type=checkbox]:disabled+label:before{border-color:#ccc}.pure-checkbox input[type=checkbox]:disabled:focus+label:before .pure-checkbox input[type=checkbox]:disabled:hover+label:before{background-color:inherit}.pure-checkbox input[type=checkbox]:disabled:checked+label:before{background-color:#ccc}.pure-checkbox input[type=checkbox]+label:after{background-color:transparent;top:50%;left:4px;width:8px;height:3px;margin-top:-4px;border-style:solid;border-color:#fff;border-width:0 0 3px 3px;border-image:none;transform:rotate(-45deg) scale(0)}.pure-checkbox input[type=checkbox]:checked+label:after{content:\"\";transform:rotate(-45deg) scale(1);transition:transform .2s ease-out}.pure-checkbox input[type=radio]:checked+label:before{background-color:#fff}.pure-checkbox input[type=radio]:checked+label:after{transform:scale(1)}.pure-checkbox input[type=radio]+label:before{border-radius:50%}.pure-checkbox input[type=checkbox]:checked+label:before{background:#0079fe}.pure-checkbox input[type=checkbox]:checked+label:after{transform:rotate(-45deg) scale(1)}.list-message{text-align:center}.list-grp{padding:0 15px!important}.list-grp h4{text-transform:capitalize;margin:15px 0 0;font-size:14px;font-weight:700}.list-grp>li{padding-left:15px!important}.stackline-dropdown.theme-material,.stackline-dropdown.theme-dark,.stackline-dropdown.theme-custom{--ms-primary: #3f51b5;--ms-primary-soft: rgba(63, 81, 181, .12);--ms-surface: #ffffff;--ms-surface-soft: #f5f7fb;--ms-surface-muted: #e8eaf6;--ms-outline: #c5cae9;--ms-outline-strong: #7986cb;--ms-on-surface: #212121;--ms-on-surface-muted: #5f6368;--ms-chip-bg: #e8eaf6;--ms-chip-text: #303f9f;--ms-chip-remove: #303f9f;--ms-divider: rgba(125, 119, 134, .16);--ms-section-bg: rgba(247, 242, 250, .76);--ms-selected-text: var(--ms-primary);--ms-shadow: 0 1px 2px rgba(33, 33, 33, .16), 0 12px 32px rgba(63, 81, 181, .12);--ms-shadow-soft: 0 1px 2px rgba(33, 33, 33, .12), 0 4px 12px rgba(33, 33, 33, .08);display:block;width:100%;color:var(--ms-on-surface);font:inherit}.stackline-dropdown.theme-dark{--ms-primary: #8ab4f8;--ms-primary-soft: rgba(138, 180, 248, .18);--ms-surface: #151a23;--ms-surface-soft: #202736;--ms-surface-muted: #111722;--ms-outline: #384456;--ms-outline-strong: #8ab4f8;--ms-on-surface: #edf2f7;--ms-on-surface-muted: #aab6c5;--ms-chip-bg: #263247;--ms-chip-text: #d7e6ff;--ms-chip-remove: #d7e6ff;--ms-divider: rgba(170, 182, 197, .18);--ms-section-bg: #101620;--ms-selected-text: #d7e6ff;--ms-shadow: 0 20px 50px rgba(0, 0, 0, .42);--ms-shadow-soft: 0 1px 2px rgba(0, 0, 0, .45), 0 10px 24px rgba(0, 0, 0, .28)}.stackline-dropdown.theme-custom{--ms-primary: var(--stackline-ms-primary, #0f766e);--ms-primary-soft: var(--stackline-ms-primary-soft, rgba(15, 118, 110, .14));--ms-surface: var(--stackline-ms-surface, #ffffff);--ms-surface-soft: var(--stackline-ms-surface-soft, #ecfdf5);--ms-surface-muted: var(--stackline-ms-surface-muted, #d1fae5);--ms-outline: var(--stackline-ms-outline, #99f6e4);--ms-outline-strong: var(--stackline-ms-outline-strong, #0f766e);--ms-on-surface: var(--stackline-ms-on-surface, #102a2a);--ms-on-surface-muted: var(--stackline-ms-on-surface-muted, #47615f);--ms-chip-bg: var(--stackline-ms-chip-bg, #ccfbf1);--ms-chip-text: var(--stackline-ms-chip-text, #115e59);--ms-chip-remove: var(--stackline-ms-chip-remove, #115e59);--ms-divider: var(--stackline-ms-divider, rgba(15, 118, 110, .16));--ms-section-bg: var(--stackline-ms-section-bg, #f0fdfa);--ms-selected-text: var(--stackline-ms-selected-text, var(--ms-primary));--ms-shadow: var(--stackline-ms-shadow, 0 18px 42px rgba(15, 118, 110, .15));--ms-shadow-soft: var(--stackline-ms-shadow-soft, 0 1px 2px rgba(15, 118, 110, .16), 0 8px 18px rgba(15, 118, 110, .09))}.stackline-dropdown.theme-material .selected-list,.stackline-dropdown.theme-dark .selected-list,.stackline-dropdown.theme-custom .selected-list{width:100%}.stackline-dropdown.theme-material .selected-list .c-btn,.stackline-dropdown.theme-dark .selected-list .c-btn,.stackline-dropdown.theme-custom .selected-list .c-btn{position:relative;display:flex;align-items:center;flex-wrap:nowrap;gap:8px;width:100%;min-height:56px;padding:11px 54px 11px 16px;border-radius:18px;border:1px solid var(--ms-outline);background:var(--ms-surface);box-shadow:var(--ms-shadow-soft);color:var(--ms-on-surface);cursor:pointer;font-size:inherit;line-height:1.45;transition:border-color .16s ease,box-shadow .16s ease,background-color .16s ease,transform .16s ease}.stackline-dropdown.theme-material .selected-list .c-btn:hover,.stackline-dropdown.theme-dark .selected-list .c-btn:hover,.stackline-dropdown.theme-custom .selected-list .c-btn:hover{border-color:var(--ms-outline-strong)}.stackline-dropdown.theme-material .selected-list .c-btn.disabled,.stackline-dropdown.theme-dark .selected-list .c-btn.disabled,.stackline-dropdown.theme-custom .selected-list .c-btn.disabled{background:var(--ms-surface);cursor:not-allowed;opacity:.72}.stackline-dropdown.theme-material .selected-list .c-list,.stackline-dropdown.theme-dark .selected-list .c-list,.stackline-dropdown.theme-custom .selected-list .c-list{display:flex;flex:1 1 auto;flex-wrap:wrap;gap:8px;width:auto;min-width:0;margin:0;padding:0;float:none}.stackline-dropdown.theme-material .selected-list .c-list .c-token,.stackline-dropdown.theme-dark .selected-list .c-list .c-token,.stackline-dropdown.theme-custom .selected-list .c-list .c-token{position:relative;display:inline-block;vertical-align:middle;min-height:32px;max-width:100%;padding:6px 30px 6px 12px;background:var(--ms-chip-bg);color:var(--ms-chip-text);border-radius:999px;box-shadow:inset 0 0 0 1px #6750a414;line-height:1.35;white-space:normal;overflow-wrap:anywhere;margin:0;float:none}.stackline-dropdown.theme-material .selected-list .c-list .c-token .c-label,.stackline-dropdown.theme-dark .selected-list .c-list .c-token .c-label,.stackline-dropdown.theme-custom .selected-list .c-list .c-token .c-label{display:inline-flex;align-items:center;float:none;min-width:0;max-width:100%;line-height:1.3;font-weight:500;white-space:normal;overflow-wrap:anywhere}.stackline-dropdown.theme-material .selected-list .c-list .c-token .fa-remove,.stackline-dropdown.theme-dark .selected-list .c-list .c-token .fa-remove,.stackline-dropdown.theme-custom .selected-list .c-list .c-token .fa-remove{position:absolute;right:10px;top:50%;display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;margin-left:0;transform:translateY(-50%);color:var(--ms-chip-remove);cursor:pointer}.stackline-dropdown.theme-material .selected-list .countplaceholder,.stackline-dropdown.theme-dark .selected-list .countplaceholder,.stackline-dropdown.theme-custom .selected-list .countplaceholder{display:inline-flex;flex:0 0 auto;align-items:center;justify-content:center;align-self:center;margin:0;line-height:1;color:var(--ms-on-surface-muted);font-size:.8rem;font-weight:600}.stackline-dropdown.theme-material .selected-list .fa-angle-down,.stackline-dropdown.theme-dark .selected-list .fa-angle-down,.stackline-dropdown.theme-custom .selected-list .fa-angle-down,.stackline-dropdown.theme-material .selected-list .fa-angle-up,.stackline-dropdown.theme-dark .selected-list .fa-angle-up,.stackline-dropdown.theme-custom .selected-list .fa-angle-up{position:absolute;top:50%;right:16px;display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;transform:translateY(-50%);color:var(--ms-on-surface-muted);font-size:15pt;pointer-events:none}.stackline-dropdown.theme-material .dropdown-list,.stackline-dropdown.theme-dark .dropdown-list,.stackline-dropdown.theme-custom .dropdown-list{position:absolute;width:100%;padding-top:8px;z-index:99999}.stackline-dropdown.theme-material .arrow-up,.stackline-dropdown.theme-dark .arrow-up,.stackline-dropdown.theme-custom .arrow-up,.stackline-dropdown.theme-material .arrow-down,.stackline-dropdown.theme-dark .arrow-down,.stackline-dropdown.theme-custom .arrow-down,.stackline-dropdown.theme-material .arrow-2,.stackline-dropdown.theme-dark .arrow-2,.stackline-dropdown.theme-custom .arrow-2{display:none}.stackline-dropdown.theme-material .list-area,.stackline-dropdown.theme-dark .list-area,.stackline-dropdown.theme-custom .list-area{overflow:hidden;border-radius:22px;background:var(--ms-surface);border:1px solid var(--ms-outline);box-shadow:var(--ms-shadow);margin:0}.stackline-dropdown.theme-material .select-all,.stackline-dropdown.theme-dark .select-all,.stackline-dropdown.theme-custom .select-all{padding:10px 14px;border-bottom:1px solid var(--ms-divider);background:var(--ms-section-bg);text-align:left}.stackline-dropdown.theme-material .list-filter,.stackline-dropdown.theme-dark .list-filter,.stackline-dropdown.theme-custom .list-filter{position:relative;display:flex;align-items:center;min-height:52px;padding-left:48px;padding-right:44px;border-bottom:1px solid var(--ms-divider);background:var(--ms-surface)}.stackline-dropdown.theme-material .list-filter input,.stackline-dropdown.theme-dark .list-filter input,.stackline-dropdown.theme-custom .list-filter input{width:100%;height:100%;border:0;background:transparent;color:var(--ms-on-surface);font:inherit;padding:0}.stackline-dropdown.theme-material .list-filter input::placeholder,.stackline-dropdown.theme-dark .list-filter input::placeholder,.stackline-dropdown.theme-custom .list-filter input::placeholder{color:var(--ms-on-surface-muted)}.stackline-dropdown.theme-material .list-filter input:focus,.stackline-dropdown.theme-dark .list-filter input:focus,.stackline-dropdown.theme-custom .list-filter input:focus{outline:none}.stackline-dropdown.theme-material .list-filter .fa,.stackline-dropdown.theme-dark .list-filter .fa,.stackline-dropdown.theme-custom .list-filter .fa{position:absolute;top:50%;left:16px;display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;transform:translateY(-50%);color:var(--ms-on-surface-muted)}.stackline-dropdown.theme-material .dropdown-list ul,.stackline-dropdown.theme-dark .dropdown-list ul,.stackline-dropdown.theme-custom .dropdown-list ul{list-style:none;margin:0;padding:8px;overflow:auto}.stackline-dropdown.theme-material .dropdown-list ul li,.stackline-dropdown.theme-dark .dropdown-list ul li,.stackline-dropdown.theme-custom .dropdown-list ul li{align-items:center;min-height:0;margin:4px;padding:12px 14px;border-radius:14px;cursor:pointer;text-align:left;line-height:1.35;transition:background-color .16s ease,color .16s ease}.stackline-dropdown.theme-material .dropdown-list ul li:first-child,.stackline-dropdown.theme-dark .dropdown-list ul li:first-child,.stackline-dropdown.theme-custom .dropdown-list ul li:first-child{padding-top:12px}.stackline-dropdown.theme-material .dropdown-list ul li:last-child,.stackline-dropdown.theme-dark .dropdown-list ul li:last-child,.stackline-dropdown.theme-custom .dropdown-list ul li:last-child{padding-bottom:12px}.stackline-dropdown.theme-material .dropdown-list ul li:hover,.stackline-dropdown.theme-dark .dropdown-list ul li:hover,.stackline-dropdown.theme-custom .dropdown-list ul li:hover{background:var(--ms-surface-soft)}.stackline-dropdown.theme-material .pure-checkbox,.stackline-dropdown.theme-dark .pure-checkbox,.stackline-dropdown.theme-custom .pure-checkbox{position:relative}.stackline-dropdown.theme-material .pure-checkbox input[type=checkbox]+label,.stackline-dropdown.theme-dark .pure-checkbox input[type=checkbox]+label,.stackline-dropdown.theme-custom .pure-checkbox input[type=checkbox]+label{position:relative;display:block;width:100%;margin:0;padding-left:32px;color:inherit;cursor:pointer;font-weight:500;-webkit-user-select:none;user-select:none}.stackline-dropdown.theme-material .pure-checkbox input[type=checkbox]+label:before,.stackline-dropdown.theme-dark .pure-checkbox input[type=checkbox]+label:before,.stackline-dropdown.theme-custom .pure-checkbox input[type=checkbox]+label:before{box-sizing:content-box;content:\"\";position:absolute;top:50%;left:0;width:16px;height:16px;margin-top:-10px;border:2px solid var(--ms-outline-strong);border-radius:5px;background:var(--ms-surface);transition:border-color .16s ease,background-color .16s ease,box-shadow .16s ease}.stackline-dropdown.theme-material .pure-checkbox input[type=checkbox]+label:after,.stackline-dropdown.theme-dark .pure-checkbox input[type=checkbox]+label:after,.stackline-dropdown.theme-custom .pure-checkbox input[type=checkbox]+label:after{box-sizing:content-box;content:\"\";position:absolute;top:50%;left:5px;width:8px;height:3px;margin-top:-4px;border-style:solid;border-color:#fff;border-width:0 0 3px 3px;border-image:none;background:transparent;transform:rotate(-45deg) scale(0);transform-origin:50%;transition:transform .16s ease}.stackline-dropdown.theme-material .pure-checkbox input[type=checkbox]:focus+label:before,.stackline-dropdown.theme-dark .pure-checkbox input[type=checkbox]:focus+label:before,.stackline-dropdown.theme-custom .pure-checkbox input[type=checkbox]:focus+label:before,.stackline-dropdown.theme-material .pure-checkbox input[type=checkbox]:hover+label:before,.stackline-dropdown.theme-dark .pure-checkbox input[type=checkbox]:hover+label:before,.stackline-dropdown.theme-custom .pure-checkbox input[type=checkbox]:hover+label:before{border-color:var(--ms-primary);background:var(--ms-surface-soft)}.stackline-dropdown.theme-material .pure-checkbox input[type=checkbox]:checked+label:before,.stackline-dropdown.theme-dark .pure-checkbox input[type=checkbox]:checked+label:before,.stackline-dropdown.theme-custom .pure-checkbox input[type=checkbox]:checked+label:before{border-color:var(--ms-primary);background:var(--ms-primary)}.stackline-dropdown.theme-material .pure-checkbox input[type=checkbox]:checked+label:after,.stackline-dropdown.theme-dark .pure-checkbox input[type=checkbox]:checked+label:after,.stackline-dropdown.theme-custom .pure-checkbox input[type=checkbox]:checked+label:after{transform:rotate(-45deg) scale(1)}.stackline-dropdown.theme-material .list-message,.stackline-dropdown.theme-dark .list-message,.stackline-dropdown.theme-custom .list-message{margin:0;padding:20px 14px;color:var(--ms-on-surface-muted);text-align:center}\n"], dependencies: [{ kind: "directive", type: i0.forwardRef(() => i1.NgClass), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i0.forwardRef(() => i1.NgForOf), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(() => i1.NgIf), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i0.forwardRef(() => i1.NgStyle), selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i0.forwardRef(() => i2.DefaultValueAccessor), selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i0.forwardRef(() => i2.NgControlStatus), selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i0.forwardRef(() => i2.NgModel), selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i0.forwardRef(() => ClickOutsideDirective), selector: "[clickOutside]", outputs: ["clickOutside"] }, { kind: "directive", type: i0.forwardRef(() => styleDirective), selector: "[styleProp]", inputs: ["styleProp"] }, { kind: "component", type: i0.forwardRef(() => TemplateRenderer), selector: "c-templateRenderer", inputs: ["data", "item"] }, { kind: "pipe", type: i0.forwardRef(() => ListFilterPipe), name: "listFilter" }] });
362
- }
363
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AngularMultiSelect, decorators: [{
364
- type: Component,
365
- args: [{ selector: 'angular-multiselect, angular2-multiselect', template: "<div class=\"stackline-dropdown\" [ngClass]=\"getDropdownClasses()\" (clickOutside)=\"closeDropdown()\">\n <div class=\"selected-list\">\n <div class=\"c-btn\" (click)=\"toggleDropdown($event)\" [ngClass]=\"{'disabled': settings.disabled}\">\n <span *ngIf=\"selectedItems?.length == 0\">{{settings.text}}</span>\n <span *ngIf=\"settings.singleSelection\">\n <span *ngFor=\"let item of selectedItems;trackBy: trackByFn;\">\n {{item[settings.labelKey]}}\n </span>\n </span>\n <div class=\"c-list\" *ngIf=\"selectedItems?.length > 0 && !settings.singleSelection\">\n <div class=\"c-token\" *ngFor=\"let item of selectedItems;trackBy: trackByFn;let k = index\" [hidden]=\"k > settings.badgeShowLimit-1\">\n <span *ngIf=\"!badgeTempl\" class=\"c-label\">{{item[settings.labelKey]}}</span>\n <span *ngIf=\"badgeTempl\" class=\"c-label\">\n <c-templateRenderer [data]=\"badgeTempl\" [item]=\"item\"></c-templateRenderer>\n </span>\n <span class=\"fa fa-remove\" (click)=\"onItemClick(item,k,$event)\"></span>\n </div>\n </div> \n <span class=\"countplaceholder\" *ngIf=\"selectedItems?.length > settings.badgeShowLimit\">+{{selectedItems?.length - settings.badgeShowLimit }}</span>\n <span class=\"fa\" [ngClass]=\"{'fa-angle-down': !isActive,'fa-angle-up':isActive}\"></span>\n </div> \n </div>\n <div class=\"dropdown-list\" [hidden]=\"!isActive\">\n <div class=\"arrow-up arrow-2\"></div>\n <div class=\"arrow-up\"></div>\n <div class=\"list-area\">\n <div class=\"pure-checkbox select-all\" *ngIf=\"settings.enableCheckAll && !settings.singleSelection && !settings.limitSelection\" (click)=\"toggleSelectAll()\">\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelectAll\" [disabled]=\"settings.limitSelection == selectedItems?.length\"/>\n <label>\n <span [hidden]=\"isSelectAll\">{{settings.selectAllText}}</span>\n <span [hidden]=\"!isSelectAll\">{{settings.unSelectAllText}}</span>\n </label>\n </div> \n <div class=\"list-filter\" *ngIf=\"settings.enableSearchFilter && !settings.lazyLoading\">\n <span class=\"fa fa-search\"></span>\n <input #searchInput type=\"text\" [placeholder]=\"settings.searchPlaceholderText\" [(ngModel)]=\"filter\">\n </div> \n <div class=\"list-filter\" *ngIf=\"settings.enableSearchFilter && settings.lazyLoading\">\n <span class=\"fa fa-search\"></span>\n <input #searchInput type=\"text\" [placeholder]=\"settings.searchPlaceholderText\" (keyup)=\"filterInfiniteList($event)\">\n </div>\n <ul *ngIf=\"!settings.groupBy\" [style.maxHeight] = \"settings.maxHeight+'px'\" class=\"lazyContainer\" >\n <span *ngIf=\"itemTempl\">\n <li *ngFor=\"let item of data | listFilter:filter; let i = index;\" (click)=\"onItemClick(item,i,$event)\" class=\"pure-checkbox\">\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(item)\" [disabled]=\"settings.limitSelection == selectedItems?.length && !isSelected(item)\"/>\n <label></label>\n <c-templateRenderer [data]=\"itemTempl\" [item]=\"item\"></c-templateRenderer>\n </li>\n </span>\n <span *ngIf=\"!itemTempl && !settings.lazyLoading\" >\n <li *ngFor=\"let item of data | listFilter:filter; let i = index;\" (click)=\"onItemClick(item,i,$event)\" class=\"pure-checkbox\">\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(item)\" [disabled]=\"settings.limitSelection == selectedItems?.length && !isSelected(item)\"/>\n <label>{{item[settings.labelKey]}}</label>\n </li>\n </span>\n <span *ngIf=\"!itemTempl && settings.lazyLoading\" >\n <div [ngStyle]=\"{'height':totalHeight+'px'}\" style=\"position: relative;\">\n\n \n <li *ngFor=\"let item of chunkArray | listFilter:filter; let i = index;\" (click)=\"onItemClick(item,i,$event)\" style=\"position: absolute;width: 100%;\" class=\"pure-checkbox\" [styleProp]=\"chunkIndex[i]\">\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(item)\" [disabled]=\"settings.limitSelection == selectedItems?.length && !isSelected(item)\"/>\n <label>{{item[settings.labelKey]}}</label>\n </li>\n </div>\n </span>\n </ul>\n <div *ngIf=\"settings.groupBy\" [style.maxHeight] = \"settings.maxHeight+'px'\" style=\"overflow: auto;\">\n <ul *ngFor=\"let obj of groupedData ; let i = index;\" class=\"list-grp\">\n <h4 *ngIf=\"(obj.value | listFilter:filter ).length > 0\">{{obj.key}}</h4>\n <span *ngIf=\"itemTempl\" >\n <li *ngFor=\"let item of obj.value | listFilter:filter; let i = index;\" (click)=\"onItemClick(item,i,$event)\" class=\"pure-checkbox\">\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(item)\" [disabled]=\"settings.limitSelection == selectedItems?.length && !isSelected(item)\"/>\n <label></label>\n <c-templateRenderer [data]=\"itemTempl\" [item]=\"item\"></c-templateRenderer>\n </li>\n </span>\n <span *ngIf=\"!itemTempl\" >\n <li *ngFor=\"let item of obj.value | listFilter:filter; let i = index;\" (click)=\"onItemClick(item,i,$event)\" class=\"pure-checkbox\">\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(item)\" [disabled]=\"settings.limitSelection == selectedItems?.length && !isSelected(item)\"/>\n <label>{{item[settings.labelKey]}}</label>\n </li>\n </span>\n </ul>\n </div>\n <h5 class=\"list-message\" *ngIf=\"data?.length == 0\">{{settings.noDataLabel}}</h5>\n </div>\n </div>\n</div>\n", host: { '[class]': 'defaultSettings.classes' }, providers: [DROPDOWN_CONTROL_VALUE_ACCESSOR, DROPDOWN_CONTROL_VALIDATION], styles: [".stackline-dropdown{position:relative}.c-btn{display:inline-block;background:#fff;border:1px solid #ccc;border-radius:3px;font-size:14px;color:#333}.c-btn.disabled{background:#ccc}.c-btn:focus{outline:none}.selected-list .c-list{display:flex;flex:1 1 auto;align-items:center;flex-wrap:wrap;min-width:0;float:none;padding:0;margin:0;width:auto}.selected-list .c-list .c-token{list-style:none;padding:0 5px;background:#0079fe;color:#fff;border-radius:2px;margin-right:4px;margin-top:2px;float:left}.selected-list .c-list .c-token .c-label{display:block;float:left}.selected-list .c-list .c-token .fa-remove{margin-left:1px;font-size:12px}.selected-list .fa-angle-down,.selected-list .fa-angle-up{font-size:15pt;position:absolute;right:10px;top:50%;transform:translateY(-50%)}.selected-list .countplaceholder{display:inline-flex;flex:0 0 auto;align-items:center;justify-content:center;align-self:center;margin:0 0 0 6px;line-height:1}.selected-list .c-btn{box-sizing:border-box;width:100%;box-shadow:0 1px 5px #959595;padding:10px 36px 10px 10px;cursor:pointer;display:flex;align-items:center;flex-wrap:nowrap;position:relative}.dropdown-list{position:absolute;padding-top:14px;width:100%;z-index:9999}.dropdown-list ul{padding:0;list-style:none;overflow:auto;margin:0}.dropdown-list ul li{padding:10px;cursor:pointer;text-align:left}.dropdown-list ul li:first-child{padding-top:10px}.dropdown-list ul li:last-child{padding-bottom:10px}.dropdown-list ul li:hover{background:#f5f5f5}.dropdown-list ::-webkit-scrollbar{width:8px}.dropdown-list ::-webkit-scrollbar-thumb{background:#ccc;border-radius:5px}.dropdown-list ::-webkit-scrollbar-track{background:#f2f2f2}.arrow-up{width:0;height:0;border-left:13px solid transparent;border-right:13px solid transparent;border-bottom:15px solid #fff;margin-left:15px;position:absolute;top:0}.arrow-2{border-bottom:15px solid #ccc;top:-1px}.list-area{border:1px solid #ccc;border-radius:3px;background:#fff;margin:0;box-shadow:0 1px 5px #959595}.select-all{padding:10px;border-bottom:1px solid #ccc;text-align:left}.list-filter{border-bottom:1px solid #ccc;position:relative}.list-filter input{border:0px;width:100%;height:35px;padding:0 0 0 35px}.list-filter input:focus{outline:none}.list-filter .fa{position:absolute;top:10px;left:13px;color:#888}.pure-checkbox input[type=checkbox]{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.pure-checkbox input[type=checkbox]:focus+label:before,.pure-checkbox input[type=checkbox]:hover+label:before{border-color:#0079fe;background-color:#f2f2f2}.pure-checkbox input[type=checkbox]:active+label:before{transition-duration:0s}.pure-checkbox input[type=checkbox]+label{position:relative;padding-left:2em;vertical-align:middle;-webkit-user-select:none;user-select:none;cursor:pointer;margin:0;color:#000;font-weight:300}.pure-checkbox input[type=checkbox]+label:before{box-sizing:content-box;content:\"\";color:#0079fe;position:absolute;top:50%;left:0;width:14px;height:14px;margin-top:-9px;border:2px solid #0079FE;text-align:center;transition:all .4s ease}.pure-checkbox input[type=checkbox]+label:after{box-sizing:content-box;content:\"\";background-color:#0079fe;position:absolute;top:50%;left:4px;width:10px;height:10px;margin-top:-5px;transform:scale(0);transform-origin:50%;transition:transform .2s ease-out}.pure-checkbox input[type=checkbox]:disabled+label:before{border-color:#ccc}.pure-checkbox input[type=checkbox]:disabled:focus+label:before .pure-checkbox input[type=checkbox]:disabled:hover+label:before{background-color:inherit}.pure-checkbox input[type=checkbox]:disabled:checked+label:before{background-color:#ccc}.pure-checkbox input[type=checkbox]+label:after{background-color:transparent;top:50%;left:4px;width:8px;height:3px;margin-top:-4px;border-style:solid;border-color:#fff;border-width:0 0 3px 3px;border-image:none;transform:rotate(-45deg) scale(0)}.pure-checkbox input[type=checkbox]:checked+label:after{content:\"\";transform:rotate(-45deg) scale(1);transition:transform .2s ease-out}.pure-checkbox input[type=radio]:checked+label:before{background-color:#fff}.pure-checkbox input[type=radio]:checked+label:after{transform:scale(1)}.pure-checkbox input[type=radio]+label:before{border-radius:50%}.pure-checkbox input[type=checkbox]:checked+label:before{background:#0079fe}.pure-checkbox input[type=checkbox]:checked+label:after{transform:rotate(-45deg) scale(1)}.list-message{text-align:center}.list-grp{padding:0 15px!important}.list-grp h4{text-transform:capitalize;margin:15px 0 0;font-size:14px;font-weight:700}.list-grp>li{padding-left:15px!important}.stackline-dropdown.theme-material,.stackline-dropdown.theme-dark,.stackline-dropdown.theme-custom{--ms-primary: #3f51b5;--ms-primary-soft: rgba(63, 81, 181, .12);--ms-surface: #ffffff;--ms-surface-soft: #f5f7fb;--ms-surface-muted: #e8eaf6;--ms-outline: #c5cae9;--ms-outline-strong: #7986cb;--ms-on-surface: #212121;--ms-on-surface-muted: #5f6368;--ms-chip-bg: #e8eaf6;--ms-chip-text: #303f9f;--ms-chip-remove: #303f9f;--ms-divider: rgba(125, 119, 134, .16);--ms-section-bg: rgba(247, 242, 250, .76);--ms-selected-text: var(--ms-primary);--ms-shadow: 0 1px 2px rgba(33, 33, 33, .16), 0 12px 32px rgba(63, 81, 181, .12);--ms-shadow-soft: 0 1px 2px rgba(33, 33, 33, .12), 0 4px 12px rgba(33, 33, 33, .08);display:block;width:100%;color:var(--ms-on-surface);font:inherit}.stackline-dropdown.theme-dark{--ms-primary: #8ab4f8;--ms-primary-soft: rgba(138, 180, 248, .18);--ms-surface: #151a23;--ms-surface-soft: #202736;--ms-surface-muted: #111722;--ms-outline: #384456;--ms-outline-strong: #8ab4f8;--ms-on-surface: #edf2f7;--ms-on-surface-muted: #aab6c5;--ms-chip-bg: #263247;--ms-chip-text: #d7e6ff;--ms-chip-remove: #d7e6ff;--ms-divider: rgba(170, 182, 197, .18);--ms-section-bg: #101620;--ms-selected-text: #d7e6ff;--ms-shadow: 0 20px 50px rgba(0, 0, 0, .42);--ms-shadow-soft: 0 1px 2px rgba(0, 0, 0, .45), 0 10px 24px rgba(0, 0, 0, .28)}.stackline-dropdown.theme-custom{--ms-primary: var(--stackline-ms-primary, #0f766e);--ms-primary-soft: var(--stackline-ms-primary-soft, rgba(15, 118, 110, .14));--ms-surface: var(--stackline-ms-surface, #ffffff);--ms-surface-soft: var(--stackline-ms-surface-soft, #ecfdf5);--ms-surface-muted: var(--stackline-ms-surface-muted, #d1fae5);--ms-outline: var(--stackline-ms-outline, #99f6e4);--ms-outline-strong: var(--stackline-ms-outline-strong, #0f766e);--ms-on-surface: var(--stackline-ms-on-surface, #102a2a);--ms-on-surface-muted: var(--stackline-ms-on-surface-muted, #47615f);--ms-chip-bg: var(--stackline-ms-chip-bg, #ccfbf1);--ms-chip-text: var(--stackline-ms-chip-text, #115e59);--ms-chip-remove: var(--stackline-ms-chip-remove, #115e59);--ms-divider: var(--stackline-ms-divider, rgba(15, 118, 110, .16));--ms-section-bg: var(--stackline-ms-section-bg, #f0fdfa);--ms-selected-text: var(--stackline-ms-selected-text, var(--ms-primary));--ms-shadow: var(--stackline-ms-shadow, 0 18px 42px rgba(15, 118, 110, .15));--ms-shadow-soft: var(--stackline-ms-shadow-soft, 0 1px 2px rgba(15, 118, 110, .16), 0 8px 18px rgba(15, 118, 110, .09))}.stackline-dropdown.theme-material .selected-list,.stackline-dropdown.theme-dark .selected-list,.stackline-dropdown.theme-custom .selected-list{width:100%}.stackline-dropdown.theme-material .selected-list .c-btn,.stackline-dropdown.theme-dark .selected-list .c-btn,.stackline-dropdown.theme-custom .selected-list .c-btn{position:relative;display:flex;align-items:center;flex-wrap:nowrap;gap:8px;width:100%;min-height:56px;padding:11px 54px 11px 16px;border-radius:18px;border:1px solid var(--ms-outline);background:var(--ms-surface);box-shadow:var(--ms-shadow-soft);color:var(--ms-on-surface);cursor:pointer;font-size:inherit;line-height:1.45;transition:border-color .16s ease,box-shadow .16s ease,background-color .16s ease,transform .16s ease}.stackline-dropdown.theme-material .selected-list .c-btn:hover,.stackline-dropdown.theme-dark .selected-list .c-btn:hover,.stackline-dropdown.theme-custom .selected-list .c-btn:hover{border-color:var(--ms-outline-strong)}.stackline-dropdown.theme-material .selected-list .c-btn.disabled,.stackline-dropdown.theme-dark .selected-list .c-btn.disabled,.stackline-dropdown.theme-custom .selected-list .c-btn.disabled{background:var(--ms-surface);cursor:not-allowed;opacity:.72}.stackline-dropdown.theme-material .selected-list .c-list,.stackline-dropdown.theme-dark .selected-list .c-list,.stackline-dropdown.theme-custom .selected-list .c-list{display:flex;flex:1 1 auto;flex-wrap:wrap;gap:8px;width:auto;min-width:0;margin:0;padding:0;float:none}.stackline-dropdown.theme-material .selected-list .c-list .c-token,.stackline-dropdown.theme-dark .selected-list .c-list .c-token,.stackline-dropdown.theme-custom .selected-list .c-list .c-token{position:relative;display:inline-block;vertical-align:middle;min-height:32px;max-width:100%;padding:6px 30px 6px 12px;background:var(--ms-chip-bg);color:var(--ms-chip-text);border-radius:999px;box-shadow:inset 0 0 0 1px #6750a414;line-height:1.35;white-space:normal;overflow-wrap:anywhere;margin:0;float:none}.stackline-dropdown.theme-material .selected-list .c-list .c-token .c-label,.stackline-dropdown.theme-dark .selected-list .c-list .c-token .c-label,.stackline-dropdown.theme-custom .selected-list .c-list .c-token .c-label{display:inline-flex;align-items:center;float:none;min-width:0;max-width:100%;line-height:1.3;font-weight:500;white-space:normal;overflow-wrap:anywhere}.stackline-dropdown.theme-material .selected-list .c-list .c-token .fa-remove,.stackline-dropdown.theme-dark .selected-list .c-list .c-token .fa-remove,.stackline-dropdown.theme-custom .selected-list .c-list .c-token .fa-remove{position:absolute;right:10px;top:50%;display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;margin-left:0;transform:translateY(-50%);color:var(--ms-chip-remove);cursor:pointer}.stackline-dropdown.theme-material .selected-list .countplaceholder,.stackline-dropdown.theme-dark .selected-list .countplaceholder,.stackline-dropdown.theme-custom .selected-list .countplaceholder{display:inline-flex;flex:0 0 auto;align-items:center;justify-content:center;align-self:center;margin:0;line-height:1;color:var(--ms-on-surface-muted);font-size:.8rem;font-weight:600}.stackline-dropdown.theme-material .selected-list .fa-angle-down,.stackline-dropdown.theme-dark .selected-list .fa-angle-down,.stackline-dropdown.theme-custom .selected-list .fa-angle-down,.stackline-dropdown.theme-material .selected-list .fa-angle-up,.stackline-dropdown.theme-dark .selected-list .fa-angle-up,.stackline-dropdown.theme-custom .selected-list .fa-angle-up{position:absolute;top:50%;right:16px;display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;transform:translateY(-50%);color:var(--ms-on-surface-muted);font-size:15pt;pointer-events:none}.stackline-dropdown.theme-material .dropdown-list,.stackline-dropdown.theme-dark .dropdown-list,.stackline-dropdown.theme-custom .dropdown-list{position:absolute;width:100%;padding-top:8px;z-index:99999}.stackline-dropdown.theme-material .arrow-up,.stackline-dropdown.theme-dark .arrow-up,.stackline-dropdown.theme-custom .arrow-up,.stackline-dropdown.theme-material .arrow-down,.stackline-dropdown.theme-dark .arrow-down,.stackline-dropdown.theme-custom .arrow-down,.stackline-dropdown.theme-material .arrow-2,.stackline-dropdown.theme-dark .arrow-2,.stackline-dropdown.theme-custom .arrow-2{display:none}.stackline-dropdown.theme-material .list-area,.stackline-dropdown.theme-dark .list-area,.stackline-dropdown.theme-custom .list-area{overflow:hidden;border-radius:22px;background:var(--ms-surface);border:1px solid var(--ms-outline);box-shadow:var(--ms-shadow);margin:0}.stackline-dropdown.theme-material .select-all,.stackline-dropdown.theme-dark .select-all,.stackline-dropdown.theme-custom .select-all{padding:10px 14px;border-bottom:1px solid var(--ms-divider);background:var(--ms-section-bg);text-align:left}.stackline-dropdown.theme-material .list-filter,.stackline-dropdown.theme-dark .list-filter,.stackline-dropdown.theme-custom .list-filter{position:relative;display:flex;align-items:center;min-height:52px;padding-left:48px;padding-right:44px;border-bottom:1px solid var(--ms-divider);background:var(--ms-surface)}.stackline-dropdown.theme-material .list-filter input,.stackline-dropdown.theme-dark .list-filter input,.stackline-dropdown.theme-custom .list-filter input{width:100%;height:100%;border:0;background:transparent;color:var(--ms-on-surface);font:inherit;padding:0}.stackline-dropdown.theme-material .list-filter input::placeholder,.stackline-dropdown.theme-dark .list-filter input::placeholder,.stackline-dropdown.theme-custom .list-filter input::placeholder{color:var(--ms-on-surface-muted)}.stackline-dropdown.theme-material .list-filter input:focus,.stackline-dropdown.theme-dark .list-filter input:focus,.stackline-dropdown.theme-custom .list-filter input:focus{outline:none}.stackline-dropdown.theme-material .list-filter .fa,.stackline-dropdown.theme-dark .list-filter .fa,.stackline-dropdown.theme-custom .list-filter .fa{position:absolute;top:50%;left:16px;display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;transform:translateY(-50%);color:var(--ms-on-surface-muted)}.stackline-dropdown.theme-material .dropdown-list ul,.stackline-dropdown.theme-dark .dropdown-list ul,.stackline-dropdown.theme-custom .dropdown-list ul{list-style:none;margin:0;padding:8px;overflow:auto}.stackline-dropdown.theme-material .dropdown-list ul li,.stackline-dropdown.theme-dark .dropdown-list ul li,.stackline-dropdown.theme-custom .dropdown-list ul li{align-items:center;min-height:0;margin:4px;padding:12px 14px;border-radius:14px;cursor:pointer;text-align:left;line-height:1.35;transition:background-color .16s ease,color .16s ease}.stackline-dropdown.theme-material .dropdown-list ul li:first-child,.stackline-dropdown.theme-dark .dropdown-list ul li:first-child,.stackline-dropdown.theme-custom .dropdown-list ul li:first-child{padding-top:12px}.stackline-dropdown.theme-material .dropdown-list ul li:last-child,.stackline-dropdown.theme-dark .dropdown-list ul li:last-child,.stackline-dropdown.theme-custom .dropdown-list ul li:last-child{padding-bottom:12px}.stackline-dropdown.theme-material .dropdown-list ul li:hover,.stackline-dropdown.theme-dark .dropdown-list ul li:hover,.stackline-dropdown.theme-custom .dropdown-list ul li:hover{background:var(--ms-surface-soft)}.stackline-dropdown.theme-material .pure-checkbox,.stackline-dropdown.theme-dark .pure-checkbox,.stackline-dropdown.theme-custom .pure-checkbox{position:relative}.stackline-dropdown.theme-material .pure-checkbox input[type=checkbox]+label,.stackline-dropdown.theme-dark .pure-checkbox input[type=checkbox]+label,.stackline-dropdown.theme-custom .pure-checkbox input[type=checkbox]+label{position:relative;display:block;width:100%;margin:0;padding-left:32px;color:inherit;cursor:pointer;font-weight:500;-webkit-user-select:none;user-select:none}.stackline-dropdown.theme-material .pure-checkbox input[type=checkbox]+label:before,.stackline-dropdown.theme-dark .pure-checkbox input[type=checkbox]+label:before,.stackline-dropdown.theme-custom .pure-checkbox input[type=checkbox]+label:before{box-sizing:content-box;content:\"\";position:absolute;top:50%;left:0;width:16px;height:16px;margin-top:-10px;border:2px solid var(--ms-outline-strong);border-radius:5px;background:var(--ms-surface);transition:border-color .16s ease,background-color .16s ease,box-shadow .16s ease}.stackline-dropdown.theme-material .pure-checkbox input[type=checkbox]+label:after,.stackline-dropdown.theme-dark .pure-checkbox input[type=checkbox]+label:after,.stackline-dropdown.theme-custom .pure-checkbox input[type=checkbox]+label:after{box-sizing:content-box;content:\"\";position:absolute;top:50%;left:5px;width:8px;height:3px;margin-top:-4px;border-style:solid;border-color:#fff;border-width:0 0 3px 3px;border-image:none;background:transparent;transform:rotate(-45deg) scale(0);transform-origin:50%;transition:transform .16s ease}.stackline-dropdown.theme-material .pure-checkbox input[type=checkbox]:focus+label:before,.stackline-dropdown.theme-dark .pure-checkbox input[type=checkbox]:focus+label:before,.stackline-dropdown.theme-custom .pure-checkbox input[type=checkbox]:focus+label:before,.stackline-dropdown.theme-material .pure-checkbox input[type=checkbox]:hover+label:before,.stackline-dropdown.theme-dark .pure-checkbox input[type=checkbox]:hover+label:before,.stackline-dropdown.theme-custom .pure-checkbox input[type=checkbox]:hover+label:before{border-color:var(--ms-primary);background:var(--ms-surface-soft)}.stackline-dropdown.theme-material .pure-checkbox input[type=checkbox]:checked+label:before,.stackline-dropdown.theme-dark .pure-checkbox input[type=checkbox]:checked+label:before,.stackline-dropdown.theme-custom .pure-checkbox input[type=checkbox]:checked+label:before{border-color:var(--ms-primary);background:var(--ms-primary)}.stackline-dropdown.theme-material .pure-checkbox input[type=checkbox]:checked+label:after,.stackline-dropdown.theme-dark .pure-checkbox input[type=checkbox]:checked+label:after,.stackline-dropdown.theme-custom .pure-checkbox input[type=checkbox]:checked+label:after{transform:rotate(-45deg) scale(1)}.stackline-dropdown.theme-material .list-message,.stackline-dropdown.theme-dark .list-message,.stackline-dropdown.theme-custom .list-message{margin:0;padding:20px 14px;color:var(--ms-on-surface-muted);text-align:center}\n"] }]
366
- }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { data: [{
367
- type: Input
368
- }], settings: [{
369
- type: Input
370
- }], onSelect: [{
371
- type: Output,
372
- args: ['onSelect']
373
- }], onDeSelect: [{
374
- type: Output,
375
- args: ['onDeSelect']
376
- }], onSelectAll: [{
377
- type: Output,
378
- args: ['onSelectAll']
379
- }], onDeSelectAll: [{
380
- type: Output,
381
- args: ['onDeSelectAll']
382
- }], onOpen: [{
383
- type: Output,
384
- args: ['onOpen']
385
- }], onClose: [{
386
- type: Output,
387
- args: ['onClose']
388
- }], itemTempl: [{
389
- type: ContentChild,
390
- args: [Item, { static: false }]
391
- }], badgeTempl: [{
392
- type: ContentChild,
393
- args: [Badge, { static: false }]
394
- }], searchInput: [{
395
- type: ViewChild,
396
- args: ['searchInput', { static: false }]
397
- }] } });
398
- export class AngularMultiSelectModule {
399
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AngularMultiSelectModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
400
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: AngularMultiSelectModule, declarations: [AngularMultiSelect, ClickOutsideDirective, ScrollDirective, styleDirective, ListFilterPipe, Item, TemplateRenderer, Badge], imports: [CommonModule, FormsModule], exports: [AngularMultiSelect, ClickOutsideDirective, ScrollDirective, styleDirective, ListFilterPipe, Item, TemplateRenderer, Badge] });
401
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AngularMultiSelectModule, imports: [CommonModule, FormsModule] });
402
- }
403
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AngularMultiSelectModule, decorators: [{
404
- type: NgModule,
405
- args: [{
406
- imports: [CommonModule, FormsModule],
407
- declarations: [AngularMultiSelect, ClickOutsideDirective, ScrollDirective, styleDirective, ListFilterPipe, Item, TemplateRenderer, Badge],
408
- exports: [AngularMultiSelect, ClickOutsideDirective, ScrollDirective, styleDirective, ListFilterPipe, Item, TemplateRenderer, Badge]
409
- }]
410
- }] });
411
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlzZWxlY3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9tdWx0aXNlbGVjdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxRQUFRLEVBQStDLFlBQVksRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFrRCxNQUFNLGVBQWUsQ0FBQztBQUMzTixPQUFPLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUF3QixhQUFhLEVBQTBCLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0gsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBWSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU1RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7Ozs7QUFFNUQsTUFBTSxDQUFDLE1BQU0sK0JBQStCLEdBQVE7SUFDaEQsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixDQUFDO0lBQ2pELEtBQUssRUFBRSxJQUFJO0NBQ2QsQ0FBQztBQUNGLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFRO0lBQzVDLE9BQU8sRUFBRSxhQUFhO0lBQ3RCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsa0JBQWtCLENBQUM7SUFDakQsS0FBSyxFQUFFLElBQUk7Q0FDZCxDQUFBO0FBQ0QsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFO0FBQ2xCLENBQUMsQ0FB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QVksRUFBRSxXQUFXLGFBbFgxQixrQkFBa0IsRUFvWEcscUJBQXFCLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLEtBQUs7eUdBRTFILHdCQUF3QixZQUp2QixZQUFZLEVBQUUsV0FBVzs7NEZBSTFCLHdCQUF3QjtrQkFMcEMsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDO29CQUNwQyxZQUFZLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDO29CQUN6SSxPQUFPLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDO2lCQUN2SSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBOZ01vZHVsZSwgU2ltcGxlQ2hhbmdlcywgT25DaGFuZ2VzLCBWaWV3RW5jYXBzdWxhdGlvbiwgQ29udGVudENoaWxkLCBWaWV3Q2hpbGQsIGZvcndhcmRSZWYsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgRWxlbWVudFJlZiwgQWZ0ZXJWaWV3SW5pdCwgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIE5HX1ZBTFVFX0FDQ0VTU09SLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMSURBVE9SUywgVmFsaWRhdG9yLCBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBMaXN0SXRlbSwgTXlFeGNlcHRpb24gfSBmcm9tICcuL211bHRpc2VsZWN0Lm1vZGVsJztcbmltcG9ydCB7IERyb3Bkb3duU2V0dGluZ3MgfSBmcm9tICcuL211bHRpc2VsZWN0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBDbGlja091dHNpZGVEaXJlY3RpdmUsIFNjcm9sbERpcmVjdGl2ZSwgc3R5bGVEaXJlY3RpdmUgfSBmcm9tICcuL2NsaWNrT3V0c2lkZSc7XG5pbXBvcnQgeyBMaXN0RmlsdGVyUGlwZSB9IGZyb20gJy4vbGlzdC1maWx0ZXInO1xuaW1wb3J0IHsgSXRlbSwgQmFkZ2UsIFRlbXBsYXRlUmVuZGVyZXIgfSBmcm9tICcuL21lbnUtaXRlbSc7XG5cbmV4cG9ydCBjb25zdCBEUk9QRE9XTl9DT05UUk9MX1ZBTFVFX0FDQ0VTU09SOiBhbnkgPSB7XG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQW5ndWxhck11bHRpU2VsZWN0KSxcbiAgICBtdWx0aTogdHJ1ZVxufTtcbmV4cG9ydCBjb25zdCBEUk9QRE9XTl9DT05UUk9MX1ZBTElEQVRJT046IGFueSA9IHtcbiAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEFuZ3VsYXJNdWx0aVNlbGVjdCksXG4gICAgbXVsdGk6IHRydWUsXG59XG5jb25zdCBub29wID0gKCkgPT4ge1xufTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhbmd1bGFyLW11bHRpc2VsZWN0LCBhbmd1bGFyMi1tdWx0aXNlbGVjdCcsXG4gICAgdGVtcGxhdGU6IFwiPGRpdiBjbGFzcz1cXFwic3RhY2tsaW5lLWRyb3Bkb3duXFxcIiBbbmdDbGFzc109XFxcImdldERyb3Bkb3duQ2xhc3NlcygpXFxcIiAoY2xpY2tPdXRzaWRlKT1cXFwiY2xvc2VEcm9wZG93bigpXFxcIj5cXG4gICAgPGRpdiBjbGFzcz1cXFwic2VsZWN0ZWQtbGlzdFxcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjLWJ0blxcXCIgKGNsaWNrKT1cXFwidG9nZ2xlRHJvcGRvd24oJGV2ZW50KVxcXCIgW25nQ2xhc3NdPVxcXCJ7J2Rpc2FibGVkJzogc2V0dGluZ3MuZGlzYWJsZWR9XFxcIj5cXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cXFwic2VsZWN0ZWRJdGVtcz8ubGVuZ3RoID09IDBcXFwiPnt7c2V0dGluZ3MudGV4dH19PC9zcGFuPlxcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVxcXCJzZXR0aW5ncy5zaW5nbGVTZWxlY3Rpb25cXFwiPlxcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdGb3I9XFxcImxldCBpdGVtIG9mIHNlbGVjdGVkSXRlbXM7dHJhY2tCeTogdHJhY2tCeUZuO1xcXCI+XFxuICAgICAgICAgICAgICAgICAgICB7e2l0ZW1bc2V0dGluZ3MubGFiZWxLZXldfX1cXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxcbiAgICAgICAgICAgIDwvc3Bhbj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjLWxpc3RcXFwiICpuZ0lmPVxcXCJzZWxlY3RlZEl0ZW1zPy5sZW5ndGggPiAwICYmICFzZXR0aW5ncy5zaW5nbGVTZWxlY3Rpb25cXFwiPlxcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjLXRva2VuXFxcIiAqbmdGb3I9XFxcImxldCBpdGVtIG9mIHNlbGVjdGVkSXRlbXM7dHJhY2tCeTogdHJhY2tCeUZuO2xldCBrID0gaW5kZXhcXFwiIFtoaWRkZW5dPVxcXCJrID4gc2V0dGluZ3MuYmFkZ2VTaG93TGltaXQtMVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cXFwiIWJhZGdlVGVtcGxcXFwiIGNsYXNzPVxcXCJjLWxhYmVsXFxcIj57e2l0ZW1bc2V0dGluZ3MubGFiZWxLZXldfX08L3NwYW4+XFxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cXFwiYmFkZ2VUZW1wbFxcXCIgY2xhc3M9XFxcImMtbGFiZWxcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjLXRlbXBsYXRlUmVuZGVyZXIgW2RhdGFdPVxcXCJiYWRnZVRlbXBsXFxcIiBbaXRlbV09XFxcIml0ZW1cXFwiPjwvYy10ZW1wbGF0ZVJlbmRlcmVyPlxcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImZhIGZhLXJlbW92ZVxcXCIgKGNsaWNrKT1cXFwib25JdGVtQ2xpY2soaXRlbSxrLCRldmVudClcXFwiPjwvc3Bhbj5cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPC9kaXY+IFxcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJjb3VudHBsYWNlaG9sZGVyXFxcIiAqbmdJZj1cXFwic2VsZWN0ZWRJdGVtcz8ubGVuZ3RoID4gc2V0dGluZ3MuYmFkZ2VTaG93TGltaXRcXFwiPit7e3NlbGVjdGVkSXRlbXM/Lmxlbmd0aCAtIHNldHRpbmdzLmJhZGdlU2hvd0xpbWl0IH19PC9zcGFuPlxcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJmYVxcXCIgW25nQ2xhc3NdPVxcXCJ7J2ZhLWFuZ2xlLWRvd24nOiAhaXNBY3RpdmUsJ2ZhLWFuZ2xlLXVwJzppc0FjdGl2ZX1cXFwiPjwvc3Bhbj5cXG4gICAgICAgIDwvZGl2PiAgICAgIFxcbiAgICA8L2Rpdj5cXG4gICAgPGRpdiBjbGFzcz1cXFwiZHJvcGRvd24tbGlzdFxcXCIgW2hpZGRlbl09XFxcIiFpc0FjdGl2ZVxcXCI+XFxuICAgIDxkaXYgY2xhc3M9XFxcImFycm93LXVwIGFycm93LTJcXFwiPjwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJhcnJvdy11cFxcXCI+PC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcImxpc3QtYXJlYVxcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJwdXJlLWNoZWNrYm94IHNlbGVjdC1hbGxcXFwiICpuZ0lmPVxcXCJzZXR0aW5ncy5lbmFibGVDaGVja0FsbCAmJiAhc2V0dGluZ3Muc2luZ2xlU2VsZWN0aW9uICYmICFzZXR0aW5ncy5saW1pdFNlbGVjdGlvblxcXCIgKGNsaWNrKT1cXFwidG9nZ2xlU2VsZWN0QWxsKClcXFwiPlxcbiAgICAgICAgICAgIDxpbnB1dCAqbmdJZj1cXFwic2V0dGluZ3Muc2hvd0NoZWNrYm94XFxcIiB0eXBlPVxcXCJjaGVja2JveFxcXCIgW2NoZWNrZWRdPVxcXCJpc1NlbGVjdEFsbFxcXCIgW2Rpc2FibGVkXT1cXFwic2V0dGluZ3MubGltaXRTZWxlY3Rpb24gPT0gc2VsZWN0ZWRJdGVtcz8ubGVuZ3RoXFxcIi8+XFxuICAgICAgICAgICAgPGxhYmVsPlxcbiAgICAgICAgICAgICAgICA8c3BhbiBbaGlkZGVuXT1cXFwiaXNTZWxlY3RBbGxcXFwiPnt7c2V0dGluZ3Muc2VsZWN0QWxsVGV4dH19PC9zcGFuPlxcbiAgICAgICAgICAgICAgICA8c3BhbiBbaGlkZGVuXT1cXFwiIWlzU2VsZWN0QWxsXFxcIj57e3NldHRpbmdzLnVuU2VsZWN0QWxsVGV4dH19PC9zcGFuPlxcbiAgICAgICAgICAgIDwvbGFiZWw+XFxuICAgICAgICA8L2Rpdj4gICBcXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImxpc3QtZmlsdGVyXFxcIiAqbmdJZj1cXFwic2V0dGluZ3MuZW5hYmxlU2VhcmNoRmlsdGVyICYmICFzZXR0aW5ncy5sYXp5TG9hZGluZ1xcXCI+XFxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImZhIGZhLXNlYXJjaFxcXCI+PC9zcGFuPlxcbiAgICAgICAgICAgIDxpbnB1dCAjc2VhcmNoSW5wdXQgdHlwZT1cXFwidGV4dFxcXCIgW3BsYWNlaG9sZGVyXT1cXFwic2V0dGluZ3Muc2VhcmNoUGxhY2Vob2xkZXJUZXh0XFxcIiBbKG5nTW9kZWwpXT1cXFwiZmlsdGVyXFxcIj5cXG4gICAgICAgIDwvZGl2PiBcXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImxpc3QtZmlsdGVyXFxcIiAqbmdJZj1cXFwic2V0dGluZ3MuZW5hYmxlU2VhcmNoRmlsdGVyICYmIHNldHRpbmdzLmxhenlMb2FkaW5nXFxcIj5cXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiZmEgZmEtc2VhcmNoXFxcIj48L3NwYW4+XFxuICAgICAgICAgICAgPGlucHV0ICNzZWFyY2hJbnB1dCB0eXBlPVxcXCJ0ZXh0XFxcIiBbcGxhY2Vob2xkZXJdPVxcXCJzZXR0aW5ncy5zZWFyY2hQbGFjZWhvbGRlclRleHRcXFwiIChrZXl1cCk9XFxcImZpbHRlckluZmluaXRlTGlzdCgkZXZlbnQpXFxcIj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICA8dWwgKm5nSWY9XFxcIiFzZXR0aW5ncy5ncm91cEJ5XFxcIiBbc3R5bGUubWF4SGVpZ2h0XSA9IFxcXCJzZXR0aW5ncy5tYXhIZWlnaHQrJ3B4J1xcXCIgY2xhc3M9XFxcImxhenlDb250YWluZXJcXFwiID5cXG4gICAgICAgIDxzcGFuICpuZ0lmPVxcXCJpdGVtVGVtcGxcXFwiPlxcbiAgICAgICAgICAgIDxsaSAqbmdGb3I9XFxcImxldCBpdGVtIG9mIGRhdGEgfCBsaXN0RmlsdGVyOmZpbHRlcjsgbGV0IGkgPSBpbmRleDtcXFwiIChjbGljayk9XFxcIm9uSXRlbUNsaWNrKGl0ZW0saSwkZXZlbnQpXFxcIiBjbGFzcz1cXFwicHVyZS1jaGVja2JveFxcXCI+XFxuICAgICAgICAgICAgPGlucHV0ICpuZ0lmPVxcXCJzZXR0aW5ncy5zaG93Q2hlY2tib3hcXFwiIHR5cGU9XFxcImNoZWNrYm94XFxcIiBbY2hlY2tlZF09XFxcImlzU2VsZWN0ZWQoaXRlbSlcXFwiIFtkaXNhYmxlZF09XFxcInNldHRpbmdzLmxpbWl0U2VsZWN0aW9uID09IHNlbGVjdGVkSXRlbXM/Lmxlbmd0aCAmJiAhaXNTZWxlY3RlZChpdGVtKVxcXCIvPlxcbiAgICAgICAgICAgIDxsYWJlbD48L2xhYmVsPlxcbiAgICAgICAgICAgIDxjLXRlbXBsYXRlUmVuZGVyZXIgW2RhdGFdPVxcXCJpdGVtVGVtcGxcXFwiIFtpdGVtXT1cXFwiaXRlbVxcXCI+PC9jLXRlbXBsYXRlUmVuZGVyZXI+XFxuICAgICAgICA8L2xpPlxcbiAgICAgICAgPC9zcGFuPlxcbiAgICAgICAgPHNwYW4gKm5nSWY9XFxcIiFpdGVtVGVtcGwgJiYgIXNldHRpbmdzLmxhenlMb2FkaW5nXFxcIiA+XFxuICAgICAgICA8bGkgKm5nRm9yPVxcXCJsZXQgaXRlbSBvZiBkYXRhIHwgbGlzdEZpbHRlcjpmaWx0ZXI7IGxldCBpID0gaW5kZXg7XFxcIiAoY2xpY2spPVxcXCJvbkl0ZW1DbGljayhpdGVtLGksJGV2ZW50KVxcXCIgY2xhc3M9XFxcInB1cmUtY2hlY2tib3hcXFwiPlxcbiAgICAgICAgICAgIDxpbnB1dCAqbmdJZj1cXFwic2V0dGluZ3Muc2hvd0NoZWNrYm94XFxcIiB0eXBlPVxcXCJjaGVja2JveFxcXCIgW2NoZWNrZWRdPVxcXCJpc1NlbGVjdGVkKGl0ZW0pXFxcIiBbZGlzYWJsZWRdPVxcXCJzZXR0aW5ncy5saW1pdFNlbGVjdGlvbiA9PSBzZWxlY3RlZEl0ZW1zPy5sZW5ndGggJiYgIWlzU2VsZWN0ZWQoaXRlbSlcXFwiLz5cXG4gICAgICAgICAgICA8bGFiZWw+e3tpdGVtW3NldHRpbmdzLmxhYmVsS2V5XX19PC9sYWJlbD5cXG4gICAgICAgIDwvbGk+XFxuICAgICAgICA8L3NwYW4+XFxuICAgICAgICA8c3BhbiAqbmdJZj1cXFwiIWl0ZW1UZW1wbCAmJiBzZXR0aW5ncy5sYXp5TG9hZGluZ1xcXCIgPlxcbiAgICAgICAgICAgIDxkaXYgW25nU3R5bGVdPVxcXCJ7J2hlaWdodCc6dG90YWxIZWlnaHQrJ3B4J31cXFwiIHN0eWxlPVxcXCJwb3NpdGlvbjogcmVsYXRpdmU7XFxcIj5cXG5cXG4gICAgICAgICAgICBcXG4gICAgICAgIDxsaSAqbmdGb3I9XFxcImxldCBpdGVtIG9mIGNodW5rQXJyYXkgfCBsaXN0RmlsdGVyOmZpbHRlcjsgbGV0IGkgPSBpbmRleDtcXFwiIChjbGljayk9XFxcIm9uSXRlbUNsaWNrKGl0ZW0saSwkZXZlbnQpXFxcIiBzdHlsZT1cXFwicG9zaXRpb246IGFic29sdXRlO3dpZHRoOiAxMDAlO1xcXCIgY2xhc3M9XFxcInB1cmUtY2hlY2tib3hcXFwiIFtzdHlsZVByb3BdPVxcXCJjaHVua0luZGV4W2ldXFxcIj5cXG4gICAgICAgICAgICA8aW5wdXQgKm5nSWY9XFxcInNldHRpbmdzLnNob3dDaGVja2JveFxcXCIgdHlwZT1cXFwiY2hlY2tib3hcXFwiIFtjaGVja2VkXT1cXFwiaXNTZWxlY3RlZChpdGVtKVxcXCIgW2Rpc2FibGVkXT1cXFwic2V0dGluZ3MubGltaXRTZWxlY3Rpb24gPT0gc2VsZWN0ZWRJdGVtcz8ubGVuZ3RoICYmICFpc1NlbGVjdGVkKGl0ZW0pXFxcIi8+XFxuICAgICAgICAgICAgPGxhYmVsPnt7aXRlbVtzZXR0aW5ncy5sYWJlbEtleV19fTwvbGFiZWw+XFxuICAgICAgICA8L2xpPlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgICA8L3NwYW4+XFxuICAgIDwvdWw+XFxuICAgIDxkaXYgKm5nSWY9XFxcInNldHRpbmdzLmdyb3VwQnlcXFwiIFtzdHlsZS5tYXhIZWlnaHRdID0gXFxcInNldHRpbmdzLm1heEhlaWdodCsncHgnXFxcIiBzdHlsZT1cXFwib3ZlcmZsb3c6IGF1dG87XFxcIj5cXG4gICAgPHVsICpuZ0Zvcj1cXFwibGV0IG9iaiBvZiBncm91cGVkRGF0YSA7IGxldCBpID0gaW5kZXg7XFxcIiBjbGFzcz1cXFwibGlzdC1ncnBcXFwiPlxcbiAgICAgICAgPGg0ICpuZ0lmPVxcXCIob2JqLnZhbHVlIHwgbGlzdEZpbHRlcjpmaWx0ZXIgKS5sZW5ndGggPiAwXFxcIj57e29iai5rZXl9fTwvaDQ+XFxuICAgICAgICA8c3BhbiAqbmdJZj1cXFwiaXRlbVRlbXBsXFxcIiA+XFxuICAgICAgICA8bGkgKm5nRm9yPVxcXCJsZXQgaXRlbSBvZiBvYmoudmFsdWUgfCBsaXN0RmlsdGVyOmZpbHRlcjsgbGV0IGkgPSBpbmRleDtcXFwiIChjbGljayk9XFxcIm9uSXRlbUNsaWNrKGl0ZW0saSwkZXZlbnQpXFxcIiBjbGFzcz1cXFwicHVyZS1jaGVja2JveFxcXCI+XFxuICAgICAgICAgICAgPGlucHV0ICpuZ0lmPVxcXCJzZXR0aW5ncy5zaG93Q2hlY2tib3hcXFwiIHR5cGU9XFxcImNoZWNrYm94XFxcIiBbY2hlY2tlZF09XFxcImlzU2VsZWN0ZWQoaXRlbSlcXFwiIFtkaXNhYmxlZF09XFxcInNldHRpbmdzLmxpbWl0U2VsZWN0aW9uID09IHNlbGVjdGVkSXRlbXM/Lmxlbmd0aCAmJiAhaXNTZWxlY3RlZChpdGVtKVxcXCIvPlxcbiAgICAgICAgICAgIDxsYWJlbD48L2xhYmVsPlxcbiAgICAgICAgICAgIDxjLXRlbXBsYXRlUmVuZGVyZXIgW2RhdGFdPVxcXCJpdGVtVGVtcGxcXFwiIFtpdGVtXT1cXFwiaXRlbVxcXCI+PC9jLXRlbXBsYXRlUmVuZGVyZXI+XFxuICAgICAgICA8L2xpPlxcbiAgICAgICAgPC9zcGFuPlxcbiAgICAgICAgPHNwYW4gKm5nSWY9XFxcIiFpdGVtVGVtcGxcXFwiID5cXG4gICAgICAgIDxsaSAqbmdGb3I9XFxcImxldCBpdGVtIG9mIG9iai52YWx1ZSB8IGxpc3RGaWx0ZXI6ZmlsdGVyOyBsZXQgaSA9IGluZGV4O1xcXCIgKGNsaWNrKT1cXFwib25JdGVtQ2xpY2soaXRlbSxpLCRldmVudClcXFwiIGNsYXNzPVxcXCJwdXJlLWNoZWNrYm94XFxcIj5cXG4gICAgICAgICAgICA8aW5wdXQgKm5nSWY9XFxcInNldHRpbmdzLnNob3dDaGVja2JveFxcXCIgdHlwZT1cXFwiY2hlY2tib3hcXFwiIFtjaGVja2VkXT1cXFwiaXNTZWxlY3RlZChpdGVtKVxcXCIgW2Rpc2FibGVkXT1cXFwic2V0dGluZ3MubGltaXRTZWxlY3Rpb24gPT0gc2VsZWN0ZWRJdGVtcz8ubGVuZ3RoICYmICFpc1NlbGVjdGVkKGl0ZW0pXFxcIi8+XFxuICAgICAgICAgICAgPGxhYmVsPnt7aXRlbVtzZXR0aW5ncy5sYWJlbEtleV19fTwvbGFiZWw+XFxuICAgICAgICA8L2xpPlxcbiAgICAgICAgPC9zcGFuPlxcbiAgICA8L3VsPlxcbiAgICA8L2Rpdj5cXG4gICAgPGg1IGNsYXNzPVxcXCJsaXN0LW1lc3NhZ2VcXFwiICpuZ0lmPVxcXCJkYXRhPy5sZW5ndGggPT0gMFxcXCI+e3tzZXR0aW5ncy5ub0RhdGFMYWJlbH19PC9oNT5cXG4gICAgPC9kaXY+XFxuICAgIDwvZGl2PlxcbjwvZGl2PlxcblwiLFxuICAgIGhvc3Q6IHsgJ1tjbGFzc10nOiAnZGVmYXVsdFNldHRpbmdzLmNsYXNzZXMnIH0sXG4gICAgc3R5bGVzOiBbXCIuc3RhY2tsaW5lLWRyb3Bkb3duIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuXFxuLmMtYnRuIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIGJhY2tncm91bmQ6ICNmZmY7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjY2NjO1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgY29sb3I6ICMzMzM7XFxufVxcblxcbi5jLWJ0bi5kaXNhYmxlZCB7XFxuICBiYWNrZ3JvdW5kOiAjY2NjO1xcbn1cXG5cXG4uYy1idG46Zm9jdXMge1xcbiAgb3V0bGluZTogbm9uZTtcXG59XFxuXFxuLnNlbGVjdGVkLWxpc3QgLmMtbGlzdCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleDogMSAxIGF1dG87XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgZmxleC13cmFwOiB3cmFwO1xcbiAgbWluLXdpZHRoOiAwO1xcbiAgZmxvYXQ6IG5vbmU7XFxuICBwYWRkaW5nOiAwcHg7XFxuICBtYXJnaW46IDBweDtcXG4gIHdpZHRoOiBhdXRvO1xcbn1cXG4uc2VsZWN0ZWQtbGlzdCAuYy1saXN0IC5jLXRva2VuIHtcXG4gIGxpc3Qtc3R5bGU6IG5vbmU7XFxuICBwYWRkaW5nOiAwcHggNXB4O1xcbiAgYmFja2dyb3VuZDogIzAwNzlGRTtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xcbiAgbWFyZ2luLXJpZ2h0OiA0cHg7XFxuICBtYXJnaW4tdG9wOiAycHg7XFxuICBmbG9hdDogbGVmdDtcXG59XFxuLnNlbGVjdGVkLWxpc3QgLmMtbGlzdCAuYy10b2tlbiAuYy1sYWJlbCB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGZsb2F0OiBsZWZ0O1xcbiAgLyp3aWR0aDogNTBweDtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcXG4gIG92ZXJmbG93OiBoaWRkZW47Ki9cXG59XFxuLnNlbGVjdGVkLWxpc3QgLmMtbGlzdCAuYy10b2tlbiAuZmEtcmVtb3ZlIHtcXG4gIG1hcmdpbi1sZWZ0OiAxcHg7XFxuICBmb250LXNpemU6IDEycHg7XFxufVxcbi5zZWxlY3RlZC1saXN0IC5mYS1hbmdsZS1kb3duLCAuc2VsZWN0ZWQtbGlzdCAuZmEtYW5nbGUtdXAge1xcbiAgZm9udC1zaXplOiAxNXB0O1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgcmlnaHQ6IDEwcHg7XFxuICB0b3A6IDUwJTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcXG59XFxuLnNlbGVjdGVkLWxpc3QgLmNvdW50cGxhY2Vob2xkZXIge1xcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XFxuICBmbGV4OiAwIDAgYXV0bztcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIGFsaWduLXNlbGY6IGNlbnRlcjtcXG4gIG1hcmdpbjogMCAwIDAgNnB4O1xcbiAgbGluZS1oZWlnaHQ6IDE7XFxufVxcbi5zZWxlY3RlZC1saXN0IC5jLWJ0biB7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgd2lkdGg6IDEwMCU7XFxuICBib3gtc2hhZG93OiAwcHggMXB4IDVweCAjOTU5NTk1O1xcbiAgcGFkZGluZzogMTBweCAzNnB4IDEwcHggMTBweDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgZmxleC13cmFwOiBub3dyYXA7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcblxcbi5kcm9wZG93bi1saXN0IHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHBhZGRpbmctdG9wOiAxNHB4O1xcbiAgd2lkdGg6IDEwMCU7XFxuICB6LWluZGV4OiA5OTk5O1xcbn1cXG4uZHJvcGRvd24tbGlzdCB1bCB7XFxuICBwYWRkaW5nOiAwcHg7XFxuICBsaXN0LXN0eWxlOiBub25lO1xcbiAgb3ZlcmZsb3c6IGF1dG87XFxuICBtYXJnaW46IDBweDtcXG59XFxuLmRyb3Bkb3duLWxpc3QgdWwgbGkge1xcbiAgcGFkZGluZzogMTBweCAxMHB4O1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgdGV4dC1hbGlnbjogbGVmdDtcXG59XFxuLmRyb3Bkb3duLWxpc3QgdWwgbGk6Zmlyc3QtY2hpbGQge1xcbiAgcGFkZGluZy10b3A6IDEwcHg7XFxufVxcbi5kcm9wZG93bi1saXN0IHVsIGxpOmxhc3QtY2hpbGQge1xcbiAgcGFkZGluZy1ib3R0b206IDEwcHg7XFxufVxcbi5kcm9wZG93bi1saXN0IHVsIGxpOmhvdmVyIHtcXG4gIGJhY2tncm91bmQ6ICNmNWY1ZjU7XFxufVxcbi5kcm9wZG93bi1saXN0IDo6LXdlYmtpdC1zY3JvbGxiYXIge1xcbiAgd2lkdGg6IDhweDtcXG59XFxuLmRyb3Bkb3duLWxpc3QgOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XFxuICBiYWNrZ3JvdW5kOiAjY2NjY2NjO1xcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xcbn1cXG4uZHJvcGRvd24tbGlzdCA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcXG4gIGJhY2tncm91bmQ6ICNmMmYyZjI7XFxufVxcblxcbi5hcnJvdy11cCB7XFxuICB3aWR0aDogMDtcXG4gIGhlaWdodDogMDtcXG4gIGJvcmRlci1sZWZ0OiAxM3B4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXJpZ2h0OiAxM3B4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLWJvdHRvbTogMTVweCBzb2xpZCAjZmZmO1xcbiAgbWFyZ2luLWxlZnQ6IDE1cHg7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxufVxcblxcbi5hcnJvdy0yIHtcXG4gIGJvcmRlci1ib3R0b206IDE1cHggc29saWQgI2NjYztcXG4gIHRvcDogLTFweDtcXG59XFxuXFxuLmxpc3QtYXJlYSB7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjY2NjO1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgYmFja2dyb3VuZDogI2ZmZjtcXG4gIG1hcmdpbjogMHB4O1xcbiAgYm94LXNoYWRvdzogMHB4IDFweCA1cHggIzk1OTU5NTtcXG59XFxuXFxuLnNlbGVjdC1hbGwge1xcbiAgcGFkZGluZzogMTBweDtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjY2NjO1xcbiAgdGV4dC1hbGlnbjogbGVmdDtcXG59XFxuXFxuLmxpc3QtZmlsdGVyIHtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjY2NjO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4ubGlzdC1maWx0ZXIgaW5wdXQge1xcbiAgYm9yZGVyOiAwcHg7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMzVweDtcXG4gIHBhZGRpbmc6IDBweCAwcHggMHB4IDM1cHg7XFxufVxcbi5saXN0LWZpbHRlciBpbnB1dDpmb2N1cyB7XFxuICBvdXRsaW5lOiBub25lO1xcbn1cXG4ubGlzdC1maWx0ZXIgLmZhIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMTBweDtcXG4gIGxlZnQ6IDEzcHg7XFxuICBjb2xvcjogIzg4ODtcXG59XFxuXFxuLnB1cmUtY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF0ge1xcbiAgYm9yZGVyOiAwO1xcbiAgY2xpcDogcmVjdCgwIDAgMCAwKTtcXG4gIGhlaWdodDogMXB4O1xcbiAgbWFyZ2luOiAtMXB4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHBhZGRpbmc6IDA7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB3aWR0aDogMXB4O1xcbn1cXG5cXG4ucHVyZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XTpmb2N1cyArIGxhYmVsOmJlZm9yZSxcXG4ucHVyZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XTpob3ZlciArIGxhYmVsOmJlZm9yZSB7XFxuICBib3JkZXItY29sb3I6ICMwMDc5RkU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMmYyO1xcbn1cXG5cXG4ucHVyZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XTphY3RpdmUgKyBsYWJlbDpiZWZvcmUge1xcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMHM7XFxufVxcblxcbi5wdXJlLWNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdICsgbGFiZWwge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgcGFkZGluZy1sZWZ0OiAyZW07XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBtYXJnaW46IDBweDtcXG4gIGNvbG9yOiAjMDAwO1xcbiAgZm9udC13ZWlnaHQ6IDMwMDtcXG59XFxuXFxuLnB1cmUtY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF0gKyBsYWJlbDpiZWZvcmUge1xcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIGNvbG9yOiAjMDA3OUZFO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiA1MCU7XFxuICBsZWZ0OiAwO1xcbiAgd2lkdGg6IDE0cHg7XFxuICBoZWlnaHQ6IDE0cHg7XFxuICBtYXJnaW4tdG9wOiAtOXB4O1xcbiAgYm9yZGVyOiAycHggc29saWQgIzAwNzlGRTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIHRyYW5zaXRpb246IGFsbCAwLjRzIGVhc2U7XFxufVxcblxcbi5wdXJlLWNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdICsgbGFiZWw6YWZ0ZXIge1xcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDc5RkU7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDUwJTtcXG4gIGxlZnQ6IDRweDtcXG4gIHdpZHRoOiAxMHB4O1xcbiAgaGVpZ2h0OiAxMHB4O1xcbiAgbWFyZ2luLXRvcDogLTVweDtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMCk7XFxuICB0cmFuc2Zvcm0tb3JpZ2luOiA1MCU7XFxuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMjAwbXMgZWFzZS1vdXQ7XFxufVxcblxcbi5wdXJlLWNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdOmRpc2FibGVkICsgbGFiZWw6YmVmb3JlIHtcXG4gIGJvcmRlci1jb2xvcjogI2NjY2NjYztcXG59XFxuXFxuLnB1cmUtY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF06ZGlzYWJsZWQ6Zm9jdXMgKyBsYWJlbDpiZWZvcmUgLnB1cmUtY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF06ZGlzYWJsZWQ6aG92ZXIgKyBsYWJlbDpiZWZvcmUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDtcXG59XFxuXFxuLnB1cmUtY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF06ZGlzYWJsZWQ6Y2hlY2tlZCArIGxhYmVsOmJlZm9yZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2NjY2NjO1xcbn1cXG5cXG4ucHVyZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSArIGxhYmVsOmFmdGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgdG9wOiA1MCU7XFxuICBsZWZ0OiA0cHg7XFxuICB3aWR0aDogOHB4O1xcbiAgaGVpZ2h0OiAzcHg7XFxuICBtYXJnaW4tdG9wOiAtNHB4O1xcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcXG4gIGJvcmRlci1jb2xvcjogI2ZmZmZmZjtcXG4gIGJvcmRlci13aWR0aDogMCAwIDNweCAzcHg7XFxuICBib3JkZXItaW1hZ2U6IG5vbmU7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpIHNjYWxlKDApO1xcbn1cXG5cXG4ucHVyZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkICsgbGFiZWw6YWZ0ZXIge1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpIHNjYWxlKDEpO1xcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDIwMG1zIGVhc2Utb3V0O1xcbn1cXG5cXG4ucHVyZS1jaGVja2JveCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkICsgbGFiZWw6YmVmb3JlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xcbn1cXG5cXG4ucHVyZS1jaGVja2JveCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkICsgbGFiZWw6YWZ0ZXIge1xcbiAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcXG59XFxuXFxuLnB1cmUtY2hlY2tib3ggaW5wdXRbdHlwZT1yYWRpb10gKyBsYWJlbDpiZWZvcmUge1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbn1cXG5cXG4ucHVyZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkICsgbGFiZWw6YmVmb3JlIHtcXG4gIGJhY2tncm91bmQ6ICMwMDc5RkU7XFxufVxcblxcbi5wdXJlLWNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQgKyBsYWJlbDphZnRlciB7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpIHNjYWxlKDEpO1xcbn1cXG5cXG4ubGlzdC1tZXNzYWdlIHtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuXFxuLmxpc3QtZ3JwIHtcXG4gIHBhZGRpbmc6IDAgMTVweCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGlzdC1ncnAgaDQge1xcbiAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XFxuICBtYXJnaW46IDE1cHggMHB4IDBweCAwcHg7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBmb250LXdlaWdodDogNzAwO1xcbn1cXG5cXG4ubGlzdC1ncnAgPiBsaSB7XFxuICBwYWRkaW5nLWxlZnQ6IDE1cHggIWltcG9ydGFudDtcXG59XFxuXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1tYXRlcmlhbCxcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWRhcmssXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1jdXN0b20ge1xcbiAgLS1tcy1wcmltYXJ5OiAjM2Y1MWI1O1xcbiAgLS1tcy1wcmltYXJ5LXNvZnQ6IHJnYmEoNjMsIDgxLCAxODEsIDAuMTIpO1xcbiAgLS1tcy1zdXJmYWNlOiAjZmZmZmZmO1xcbiAgLS1tcy1zdXJmYWNlLXNvZnQ6ICNmNWY3ZmI7XFxuICAtLW1zLXN1cmZhY2UtbXV0ZWQ6ICNlOGVhZjY7XFxuICAtLW1zLW91dGxpbmU6ICNjNWNhZTk7XFxuICAtLW1zLW91dGxpbmUtc3Ryb25nOiAjNzk4NmNiO1xcbiAgLS1tcy1vbi1zdXJmYWNlOiAjMjEyMTIxO1xcbiAgLS1tcy1vbi1zdXJmYWNlLW11dGVkOiAjNWY2MzY4O1xcbiAgLS1tcy1jaGlwLWJnOiAjZThlYWY2O1xcbiAgLS1tcy1jaGlwLXRleHQ6ICMzMDNmOWY7XFxuICAtLW1zLWNoaXAtcmVtb3ZlOiAjMzAzZjlmO1xcbiAgLS1tcy1kaXZpZGVyOiByZ2JhKDEyNSwgMTE5LCAxMzQsIDAuMTYpO1xcbiAgLS1tcy1zZWN0aW9uLWJnOiByZ2JhKDI0NywgMjQyLCAyNTAsIDAuNzYpO1xcbiAgLS1tcy1zZWxlY3RlZC10ZXh0OiB2YXIoLS1tcy1wcmltYXJ5KTtcXG4gIC0tbXMtc2hhZG93OiAwIDFweCAycHggcmdiYSgzMywgMzMsIDMzLCAwLjE2KSwgMCAxMnB4IDMycHggcmdiYSg2MywgODEsIDE4MSwgMC4xMik7XFxuICAtLW1zLXNoYWRvdy1zb2Z0OiAwIDFweCAycHggcmdiYSgzMywgMzMsIDMzLCAwLjEyKSwgMCA0cHggMTJweCByZ2JhKDMzLCAzMywgMzMsIDAuMDgpO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aWR0aDogMTAwJTtcXG4gIGNvbG9yOiB2YXIoLS1tcy1vbi1zdXJmYWNlKTtcXG4gIGZvbnQ6IGluaGVyaXQ7XFxufVxcblxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtZGFyayB7XFxuICAtLW1zLXByaW1hcnk6ICM4YWI0Zjg7XFxuICAtLW1zLXByaW1hcnktc29mdDogcmdiYSgxMzgsIDE4MCwgMjQ4LCAwLjE4KTtcXG4gIC0tbXMtc3VyZmFjZTogIzE1MWEyMztcXG4gIC0tbXMtc3VyZmFjZS1zb2Z0OiAjMjAyNzM2O1xcbiAgLS1tcy1zdXJmYWNlLW11dGVkOiAjMTExNzIyO1xcbiAgLS1tcy1vdXRsaW5lOiAjMzg0NDU2O1xcbiAgLS1tcy1vdXRsaW5lLXN0cm9uZzogIzhhYjRmODtcXG4gIC0tbXMtb24tc3VyZmFjZTogI2VkZjJmNztcXG4gIC0tbXMtb24tc3VyZmFjZS1tdXRlZDogI2FhYjZjNTtcXG4gIC0tbXMtY2hpcC1iZzogIzI2MzI0NztcXG4gIC0tbXMtY2hpcC10ZXh0OiAjZDdlNmZmO1xcbiAgLS1tcy1jaGlwLXJlbW92ZTogI2Q3ZTZmZjtcXG4gIC0tbXMtZGl2aWRlcjogcmdiYSgxNzAsIDE4MiwgMTk3LCAwLjE4KTtcXG4gIC0tbXMtc2VjdGlvbi1iZzogIzEwMTYyMDtcXG4gIC0tbXMtc2VsZWN0ZWQtdGV4dDogI2Q3ZTZmZjtcXG4gIC0tbXMtc2hhZG93OiAwIDIwcHggNTBweCByZ2JhKDAsIDAsIDAsIDAuNDIpO1xcbiAgLS1tcy1zaGFkb3ctc29mdDogMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC40NSksIDAgMTBweCAyNHB4IHJnYmEoMCwgMCwgMCwgMC4yOCk7XFxufVxcblxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtY3VzdG9tIHtcXG4gIC0tbXMtcHJpbWFyeTogdmFyKC0tc3RhY2tsaW5lLW1zLXByaW1hcnksICMwZjc2NmUpO1xcbiAgLS1tcy1wcmltYXJ5LXNvZnQ6IHZhcigtLXN0YWNrbGluZS1tcy1wcmltYXJ5LXNvZnQsIHJnYmEoMTUsIDExOCwgMTEwLCAwLjE0KSk7XFxuICAtLW1zLXN1cmZhY2U6IHZhcigtLXN0YWNrbGluZS1tcy1zdXJmYWNlLCAjZmZmZmZmKTtcXG4gIC0tbXMtc3VyZmFjZS1zb2Z0OiB2YXIoLS1zdGFja2xpbmUtbXMtc3VyZmFjZS1zb2Z0LCAjZWNmZGY1KTtcXG4gIC0tbXMtc3VyZmFjZS1tdXRlZDogdmFyKC0tc3RhY2tsaW5lLW1zLXN1cmZhY2UtbXV0ZWQsICNkMWZhZTUpO1xcbiAgLS1tcy1vdXRsaW5lOiB2YXIoLS1zdGFja2xpbmUtbXMtb3V0bGluZSwgIzk5ZjZlNCk7XFxuICAtLW1zLW91dGxpbmUtc3Ryb25nOiB2YXIoLS1zdGFja2xpbmUtbXMtb3V0bGluZS1zdHJvbmcsICMwZjc2NmUpO1xcbiAgLS1tcy1vbi1zdXJmYWNlOiB2YXIoLS1zdGFja2xpbmUtbXMtb24tc3VyZmFjZSwgIzEwMmEyYSk7XFxuICAtLW1zLW9uLXN1cmZhY2UtbXV0ZWQ6IHZhcigtLXN0YWNrbGluZS1tcy1vbi1zdXJmYWNlLW11dGVkLCAjNDc2MTVmKTtcXG4gIC0tbXMtY2hpcC1iZzogdmFyKC0tc3RhY2tsaW5lLW1zLWNoaXAtYmcsICNjY2ZiZjEpO1xcbiAgLS1tcy1jaGlwLXRleHQ6IHZhcigtLXN0YWNrbGluZS1tcy1jaGlwLXRleHQsICMxMTVlNTkpO1xcbiAgLS1tcy1jaGlwLXJlbW92ZTogdmFyKC0tc3RhY2tsaW5lLW1zLWNoaXAtcmVtb3ZlLCAjMTE1ZTU5KTtcXG4gIC0tbXMtZGl2aWRlcjogdmFyKC0tc3RhY2tsaW5lLW1zLWRpdmlkZXIsIHJnYmEoMTUsIDExOCwgMTEwLCAwLjE2KSk7XFxuICAtLW1zLXNlY3Rpb24tYmc6IHZhcigtLXN0YWNrbGluZS1tcy1zZWN0aW9uLWJnLCAjZjBmZGZhKTtcXG4gIC0tbXMtc2VsZWN0ZWQtdGV4dDogdmFyKC0tc3RhY2tsaW5lLW1zLXNlbGVjdGVkLXRleHQsIHZhcigtLW1zLXByaW1hcnkpKTtcXG4gIC0tbXMtc2hhZG93OiB2YXIoLS1zdGFja2xpbmUtbXMtc2hhZG93LCAwIDE4cHggNDJweCByZ2JhKDE1LCAxMTgsIDExMCwgMC4xNSkpO1xcbiAgLS1tcy1zaGFkb3ctc29mdDogdmFyKC0tc3RhY2tsaW5lLW1zLXNoYWRvdy1zb2Z0LCAwIDFweCAycHggcmdiYSgxNSwgMTE4LCAxMTAsIDAuMTYpLCAwIDhweCAxOHB4IHJnYmEoMTUsIDExOCwgMTEwLCAwLjA5KSk7XFxufVxcblxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtbWF0ZXJpYWwgLnNlbGVjdGVkLWxpc3QsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1kYXJrIC5zZWxlY3RlZC1saXN0LFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtY3VzdG9tIC5zZWxlY3RlZC1saXN0IHtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG5cXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLW1hdGVyaWFsIC5zZWxlY3RlZC1saXN0IC5jLWJ0bixcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWRhcmsgLnNlbGVjdGVkLWxpc3QgLmMtYnRuLFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtY3VzdG9tIC5zZWxlY3RlZC1saXN0IC5jLWJ0biB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGZsZXgtd3JhcDogbm93cmFwO1xcbiAgZ2FwOiA4cHg7XFxuICB3aWR0aDogMTAwJTtcXG4gIG1pbi1oZWlnaHQ6IDU2cHg7XFxuICBwYWRkaW5nOiAxMXB4IDU0cHggMTFweCAxNnB4O1xcbiAgYm9yZGVyLXJhZGl1czogMThweDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1zLW91dGxpbmUpO1xcbiAgYmFja2dyb3VuZDogdmFyKC0tbXMtc3VyZmFjZSk7XFxuICBib3gtc2hhZG93OiB2YXIoLS1tcy1zaGFkb3ctc29mdCk7XFxuICBjb2xvcjogdmFyKC0tbXMtb24tc3VyZmFjZSk7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBmb250LXNpemU6IGluaGVyaXQ7XFxuICBsaW5lLWhlaWdodDogMS40NTtcXG4gIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjE2cyBlYXNlLCBib3gtc2hhZG93IDAuMTZzIGVhc2UsIGJhY2tncm91bmQtY29sb3IgMC4xNnMgZWFzZSwgdHJhbnNmb3JtIDAuMTZzIGVhc2U7XFxufVxcblxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtbWF0ZXJpYWwgLnNlbGVjdGVkLWxpc3QgLmMtYnRuOmhvdmVyLFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtZGFyayAuc2VsZWN0ZWQtbGlzdCAuYy1idG46aG92ZXIsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1jdXN0b20gLnNlbGVjdGVkLWxpc3QgLmMtYnRuOmhvdmVyIHtcXG4gIGJvcmRlci1jb2xvcjogdmFyKC0tbXMtb3V0bGluZS1zdHJvbmcpO1xcbn1cXG5cXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLW1hdGVyaWFsIC5zZWxlY3RlZC1saXN0IC5jLWJ0bi5kaXNhYmxlZCxcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWRhcmsgLnNlbGVjdGVkLWxpc3QgLmMtYnRuLmRpc2FibGVkLFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtY3VzdG9tIC5zZWxlY3RlZC1saXN0IC5jLWJ0bi5kaXNhYmxlZCB7XFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1tcy1zdXJmYWNlKTtcXG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxuICBvcGFjaXR5OiAwLjcyO1xcbn1cXG5cXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLW1hdGVyaWFsIC5zZWxlY3RlZC1saXN0IC5jLWxpc3QsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1kYXJrIC5zZWxlY3RlZC1saXN0IC5jLWxpc3QsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1jdXN0b20gLnNlbGVjdGVkLWxpc3QgLmMtbGlzdCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleDogMSAxIGF1dG87XFxuICBmbGV4LXdyYXA6IHdyYXA7XFxuICBnYXA6IDhweDtcXG4gIHdpZHRoOiBhdXRvO1xcbiAgbWluLXdpZHRoOiAwO1xcbiAgbWFyZ2luOiAwO1xcbiAgcGFkZGluZzogMDtcXG4gIGZsb2F0OiBub25lO1xcbn1cXG5cXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLW1hdGVyaWFsIC5zZWxlY3RlZC1saXN0IC5jLWxpc3QgLmMtdG9rZW4sXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1kYXJrIC5zZWxlY3RlZC1saXN0IC5jLWxpc3QgLmMtdG9rZW4sXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1jdXN0b20gLnNlbGVjdGVkLWxpc3QgLmMtbGlzdCAuYy10b2tlbiB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbiAgbWluLWhlaWdodDogMzJweDtcXG4gIG1heC13aWR0aDogMTAwJTtcXG4gIHBhZGRpbmc6IDZweCAzMHB4IDZweCAxMnB4O1xcbiAgYmFja2dyb3VuZDogdmFyKC0tbXMtY2hpcC1iZyk7XFxuICBjb2xvcjogdmFyKC0tbXMtY2hpcC10ZXh0KTtcXG4gIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMXB4IHJnYmEoMTAzLCA4MCwgMTY0LCAwLjA4KTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjM1O1xcbiAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcXG4gIG92ZXJmbG93LXdyYXA6IGFueXdoZXJlO1xcbiAgbWFyZ2luOiAwO1xcbiAgZmxvYXQ6IG5vbmU7XFxufVxcblxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtbWF0ZXJpYWwgLnNlbGVjdGVkLWxpc3QgLmMtbGlzdCAuYy10b2tlbiAuYy1sYWJlbCxcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWRhcmsgLnNlbGVjdGVkLWxpc3QgLmMtbGlzdCAuYy10b2tlbiAuYy1sYWJlbCxcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWN1c3RvbSAuc2VsZWN0ZWQtbGlzdCAuYy1saXN0IC5jLXRva2VuIC5jLWxhYmVsIHtcXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGZsb2F0OiBub25lO1xcbiAgbWluLXdpZHRoOiAwO1xcbiAgbWF4LXdpZHRoOiAxMDAlO1xcbiAgbGluZS1oZWlnaHQ6IDEuMztcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xcbiAgb3ZlcmZsb3ctd3JhcDogYW55d2hlcmU7XFxufVxcblxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtbWF0ZXJpYWwgLnNlbGVjdGVkLWxpc3QgLmMtbGlzdCAuYy10b2tlbiAuZmEtcmVtb3ZlLFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtZGFyayAuc2VsZWN0ZWQtbGlzdCAuYy1saXN0IC5jLXRva2VuIC5mYS1yZW1vdmUsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1jdXN0b20gLnNlbGVjdGVkLWxpc3QgLmMtbGlzdCAuYy10b2tlbiAuZmEtcmVtb3ZlIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHJpZ2h0OiAxMHB4O1xcbiAgdG9wOiA1MCU7XFxuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIHdpZHRoOiAxNnB4O1xcbiAgaGVpZ2h0OiAxNnB4O1xcbiAgbWFyZ2luLWxlZnQ6IDA7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XFxuICBjb2xvcjogdmFyKC0tbXMtY2hpcC1yZW1vdmUpO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLW1hdGVyaWFsIC5zZWxlY3RlZC1saXN0IC5jb3VudHBsYWNlaG9sZGVyLFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtZGFyayAuc2VsZWN0ZWQtbGlzdCAuY291bnRwbGFjZWhvbGRlcixcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWN1c3RvbSAuc2VsZWN0ZWQtbGlzdCAuY291bnRwbGFjZWhvbGRlciB7XFxuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcXG4gIGZsZXg6IDAgMCBhdXRvO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgYWxpZ24tc2VsZjogY2VudGVyO1xcbiAgbWFyZ2luOiAwO1xcbiAgbGluZS1oZWlnaHQ6IDE7XFxuICBjb2xvcjogdmFyKC0tbXMtb24tc3VyZmFjZS1tdXRlZCk7XFxuICBmb250LXNpemU6IDAuOHJlbTtcXG4gIGZvbnQtd2VpZ2h0OiA2MDA7XFxufVxcblxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtbWF0ZXJpYWwgLnNlbGVjdGVkLWxpc3QgLmZhLWFuZ2xlLWRvd24sXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1kYXJrIC5zZWxlY3RlZC1saXN0IC5mYS1hbmdsZS1kb3duLFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtY3VzdG9tIC5zZWxlY3RlZC1saXN0IC5mYS1hbmdsZS1kb3duLFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtbWF0ZXJpYWwgLnNlbGVjdGVkLWxpc3QgLmZhLWFuZ2xlLXVwLFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtZGFyayAuc2VsZWN0ZWQtbGlzdCAuZmEtYW5nbGUtdXAsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1jdXN0b20gLnNlbGVjdGVkLWxpc3QgLmZhLWFuZ2xlLXVwIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogNTAlO1xcbiAgcmlnaHQ6IDE2cHg7XFxuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIHdpZHRoOiAyMHB4O1xcbiAgaGVpZ2h0OiAyMHB4O1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xcbiAgY29sb3I6IHZhcigtLW1zLW9uLXN1cmZhY2UtbXV0ZWQpO1xcbiAgZm9udC1zaXplOiAxNXB0O1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcblxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtbWF0ZXJpYWwgLmRyb3Bkb3duLWxpc3QsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1kYXJrIC5kcm9wZG93bi1saXN0LFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtY3VzdG9tIC5kcm9wZG93bi1saXN0IHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgcGFkZGluZy10b3A6IDhweDtcXG4gIHotaW5kZXg6IDk5OTk5O1xcbn1cXG5cXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLW1hdGVyaWFsIC5hcnJvdy11cCxcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWRhcmsgLmFycm93LXVwLFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtY3VzdG9tIC5hcnJvdy11cCxcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLW1hdGVyaWFsIC5hcnJvdy1kb3duLFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtZGFyayAuYXJyb3ctZG93bixcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWN1c3RvbSAuYXJyb3ctZG93bixcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLW1hdGVyaWFsIC5hcnJvdy0yLFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtZGFyayAuYXJyb3ctMixcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWN1c3RvbSAuYXJyb3ctMiB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG5cXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLW1hdGVyaWFsIC5saXN0LWFyZWEsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1kYXJrIC5saXN0LWFyZWEsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1jdXN0b20gLmxpc3QtYXJlYSB7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgYm9yZGVyLXJhZGl1czogMjJweDtcXG4gIGJhY2tncm91bmQ6IHZhcigtLW1zLXN1cmZhY2UpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbXMtb3V0bGluZSk7XFxuICBib3gtc2hhZG93OiB2YXIoLS1tcy1zaGFkb3cpO1xcbiAgbWFyZ2luOiAwO1xcbn1cXG5cXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLW1hdGVyaWFsIC5zZWxlY3QtYWxsLFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtZGFyayAuc2VsZWN0LWFsbCxcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWN1c3RvbSAuc2VsZWN0LWFsbCB7XFxuICBwYWRkaW5nOiAxMHB4IDE0cHg7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tbXMtZGl2aWRlcik7XFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1tcy1zZWN0aW9uLWJnKTtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxufVxcblxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtbWF0ZXJpYWwgLmxpc3QtZmlsdGVyLFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtZGFyayAubGlzdC1maWx0ZXIsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1jdXN0b20gLmxpc3QtZmlsdGVyIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgbWluLWhlaWdodDogNTJweDtcXG4gIHBhZGRpbmctbGVmdDogNDhweDtcXG4gIHBhZGRpbmctcmlnaHQ6IDQ0cHg7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tbXMtZGl2aWRlcik7XFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1tcy1zdXJmYWNlKTtcXG59XFxuXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1tYXRlcmlhbCAubGlzdC1maWx0ZXIgaW5wdXQsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1kYXJrIC5saXN0LWZpbHRlciBpbnB1dCxcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWN1c3RvbSAubGlzdC1maWx0ZXIgaW5wdXQge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBib3JkZXI6IDA7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gIGNvbG9yOiB2YXIoLS1tcy1vbi1zdXJmYWNlKTtcXG4gIGZvbnQ6IGluaGVyaXQ7XFxuICBwYWRkaW5nOiAwO1xcbn1cXG5cXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLW1hdGVyaWFsIC5saXN0LWZpbHRlciBpbnB1dDo6cGxhY2Vob2xkZXIsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1kYXJrIC5saXN0LWZpbHRlciBpbnB1dDo6cGxhY2Vob2xkZXIsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1jdXN0b20gLmxpc3QtZmlsdGVyIGlucHV0OjpwbGFjZWhvbGRlciB7XFxuICBjb2xvcjogdmFyKC0tbXMtb24tc3VyZmFjZS1tdXRlZCk7XFxufVxcblxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtbWF0ZXJpYWwgLmxpc3QtZmlsdGVyIGlucHV0OmZvY3VzLFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtZGFyayAubGlzdC1maWx0ZXIgaW5wdXQ6Zm9jdXMsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1jdXN0b20gLmxpc3QtZmlsdGVyIGlucHV0OmZvY3VzIHtcXG4gIG91dGxpbmU6IG5vbmU7XFxufVxcblxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtbWF0ZXJpYWwgLmxpc3QtZmlsdGVyIC5mYSxcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWRhcmsgLmxpc3QtZmlsdGVyIC5mYSxcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWN1c3RvbSAubGlzdC1maWx0ZXIgLmZhIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogNTAlO1xcbiAgbGVmdDogMTZweDtcXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgd2lkdGg6IDE4cHg7XFxuICBoZWlnaHQ6IDE4cHg7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XFxuICBjb2xvcjogdmFyKC0tbXMtb24tc3VyZmFjZS1tdXRlZCk7XFxufVxcblxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtbWF0ZXJpYWwgLmRyb3Bkb3duLWxpc3QgdWwsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1kYXJrIC5kcm9wZG93bi1saXN0IHVsLFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtY3VzdG9tIC5kcm9wZG93bi1saXN0IHVsIHtcXG4gIGxpc3Qtc3R5bGU6IG5vbmU7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiA4cHg7XFxuICBvdmVyZmxvdzogYXV0bztcXG59XFxuXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1tYXRlcmlhbCAuZHJvcGRvd24tbGlzdCB1bCBsaSxcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWRhcmsgLmRyb3Bkb3duLWxpc3QgdWwgbGksXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1jdXN0b20gLmRyb3Bkb3duLWxpc3QgdWwgbGkge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIG1pbi1oZWlnaHQ6IDA7XFxuICBtYXJnaW46IDRweDtcXG4gIHBhZGRpbmc6IDEycHggMTRweDtcXG4gIGJvcmRlci1yYWRpdXM6IDE0cHg7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xcbiAgbGluZS1oZWlnaHQ6IDEuMzU7XFxuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMTZzIGVhc2UsIGNvbG9yIDAuMTZzIGVhc2U7XFxufVxcblxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtbWF0ZXJpYWwgLmRyb3Bkb3duLWxpc3QgdWwgbGk6Zmlyc3QtY2hpbGQsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1kYXJrIC5kcm9wZG93bi1saXN0IHVsIGxpOmZpcnN0LWNoaWxkLFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtY3VzdG9tIC5kcm9wZG93bi1saXN0IHVsIGxpOmZpcnN0LWNoaWxkIHtcXG4gIHBhZGRpbmctdG9wOiAxMnB4O1xcbn1cXG5cXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLW1hdGVyaWFsIC5kcm9wZG93bi1saXN0IHVsIGxpOmxhc3QtY2hpbGQsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1kYXJrIC5kcm9wZG93bi1saXN0IHVsIGxpOmxhc3QtY2hpbGQsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1jdXN0b20gLmRyb3Bkb3duLWxpc3QgdWwgbGk6bGFzdC1jaGlsZCB7XFxuICBwYWRkaW5nLWJvdHRvbTogMTJweDtcXG59XFxuXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1tYXRlcmlhbCAuZHJvcGRvd24tbGlzdCB1bCBsaTpob3ZlcixcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWRhcmsgLmRyb3Bkb3duLWxpc3QgdWwgbGk6aG92ZXIsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1jdXN0b20gLmRyb3Bkb3duLWxpc3QgdWwgbGk6aG92ZXIge1xcbiAgYmFja2dyb3VuZDogdmFyKC0tbXMtc3VyZmFjZS1zb2Z0KTtcXG59XFxuXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1tYXRlcmlhbCAucHVyZS1jaGVja2JveCxcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWRhcmsgLnB1cmUtY2hlY2tib3gsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1jdXN0b20gLnB1cmUtY2hlY2tib3gge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG5cXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLW1hdGVyaWFsIC5wdXJlLWNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdICsgbGFiZWwsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1kYXJrIC5wdXJlLWNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdICsgbGFiZWwsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1jdXN0b20gLnB1cmUtY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF0gKyBsYWJlbCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWFyZ2luOiAwO1xcbiAgcGFkZGluZy1sZWZ0OiAzMnB4O1xcbiAgY29sb3I6IGluaGVyaXQ7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XFxufVxcblxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtbWF0ZXJpYWwgLnB1cmUtY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF0gKyBsYWJlbDpiZWZvcmUsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1kYXJrIC5wdXJlLWNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdICsgbGFiZWw6YmVmb3JlLFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtY3VzdG9tIC5wdXJlLWNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdICsgbGFiZWw6YmVmb3JlIHtcXG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDUwJTtcXG4gIGxlZnQ6IDA7XFxuICB3aWR0aDogMTZweDtcXG4gIGhlaWdodDogMTZweDtcXG4gIG1hcmdpbi10b3A6IC0xMHB4O1xcbiAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tbXMtb3V0bGluZS1zdHJvbmcpO1xcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xcbiAgYmFja2dyb3VuZDogdmFyKC0tbXMtc3VyZmFjZSk7XFxuICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMC4xNnMgZWFzZSwgYmFja2dyb3VuZC1jb2xvciAwLjE2cyBlYXNlLCBib3gtc2hhZG93IDAuMTZzIGVhc2U7XFxufVxcblxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtbWF0ZXJpYWwgLnB1cmUtY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF0gKyBsYWJlbDphZnRlcixcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWRhcmsgLnB1cmUtY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF0gKyBsYWJlbDphZnRlcixcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWN1c3RvbSAucHVyZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSArIGxhYmVsOmFmdGVyIHtcXG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDUwJTtcXG4gIGxlZnQ6IDVweDtcXG4gIHdpZHRoOiA4cHg7XFxuICBoZWlnaHQ6IDNweDtcXG4gIG1hcmdpbi10b3A6IC00cHg7XFxuICBib3JkZXItc3R5bGU6IHNvbGlkO1xcbiAgYm9yZGVyLWNvbG9yOiAjZmZmZmZmO1xcbiAgYm9yZGVyLXdpZHRoOiAwIDAgM3B4IDNweDtcXG4gIGJvcmRlci1pbWFnZTogbm9uZTtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKSBzY2FsZSgwKTtcXG4gIHRyYW5zZm9ybS1vcmlnaW46IDUwJTtcXG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjE2cyBlYXNlO1xcbn1cXG5cXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLW1hdGVyaWFsIC5wdXJlLWNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdOmZvY3VzICsgbGFiZWw6YmVmb3JlLFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtZGFyayAucHVyZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XTpmb2N1cyArIGxhYmVsOmJlZm9yZSxcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWN1c3RvbSAucHVyZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XTpmb2N1cyArIGxhYmVsOmJlZm9yZSxcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLW1hdGVyaWFsIC5wdXJlLWNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdOmhvdmVyICsgbGFiZWw6YmVmb3JlLFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtZGFyayAucHVyZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XTpob3ZlciArIGxhYmVsOmJlZm9yZSxcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWN1c3RvbSAucHVyZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XTpob3ZlciArIGxhYmVsOmJlZm9yZSB7XFxuICBib3JkZXItY29sb3I6IHZhcigtLW1zLXByaW1hcnkpO1xcbiAgYmFja2dyb3VuZDogdmFyKC0tbXMtc3VyZmFjZS1zb2Z0KTtcXG59XFxuXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1tYXRlcmlhbCAucHVyZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkICsgbGFiZWw6YmVmb3JlLFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtZGFyayAucHVyZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkICsgbGFiZWw6YmVmb3JlLFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtY3VzdG9tIC5wdXJlLWNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQgKyBsYWJlbDpiZWZvcmUge1xcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1tcy1wcmltYXJ5KTtcXG4gIGJhY2tncm91bmQ6IHZhcigtLW1zLXByaW1hcnkpO1xcbn1cXG5cXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLW1hdGVyaWFsIC5wdXJlLWNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQgKyBsYWJlbDphZnRlcixcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWRhcmsgLnB1cmUtY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCArIGxhYmVsOmFmdGVyLFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtY3VzdG9tIC5wdXJlLWNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQgKyBsYWJlbDphZnRlciB7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpIHNjYWxlKDEpO1xcbn1cXG5cXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLW1hdGVyaWFsIC5saXN0LW1lc3NhZ2UsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1kYXJrIC5saXN0LW1lc3NhZ2UsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1jdXN0b20gLmxpc3QtbWVzc2FnZSB7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAyMHB4IDE0cHg7XFxuICBjb2xvcjogdmFyKC0tbXMtb24tc3VyZmFjZS1tdXRlZCk7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcblwiXSxcbiAgICBwcm92aWRlcnM6IFtEUk9QRE9XTl9DT05UUk9MX1ZBTFVFX0FDQ0VTU09SLCBEUk9QRE9XTl9DT05UUk9MX1ZBTElEQVRJT05dXG59KVxuXG5leHBvcnQgY2xhc3MgQW5ndWxhck11bHRpU2VsZWN0IGltcGxlbWVudHMgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25DaGFuZ2VzLCBWYWxpZGF0b3Ige1xuXG4gICAgQElucHV0KClcbiAgICBkYXRhOiBBcnJheTxMaXN0SXRlbT47XG5cbiAgICBASW5wdXQoKVxuICAgIHNldHRpbmdzOiBEcm9wZG93blNldHRpbmdzO1xuXG4gICAgQE91dHB1dCgnb25TZWxlY3QnKVxuICAgIG9uU2VsZWN0OiBFdmVudEVtaXR0ZXI8TGlzdEl0ZW0+ID0gbmV3IEV2ZW50RW1pdHRlcjxMaXN0SXRlbT4oKTtcblxuICAgIEBPdXRwdXQoJ29uRGVTZWxlY3QnKVxuICAgIG9uRGVTZWxlY3Q6IEV2ZW50RW1pdHRlcjxMaXN0SXRlbT4gPSBuZXcgRXZlbnRFbWl0dGVyPExpc3RJdGVtPigpO1xuXG4gICAgQE91dHB1dCgnb25TZWxlY3RBbGwnKVxuICAgIG9uU2VsZWN0QWxsOiBFdmVudEVtaXR0ZXI8QXJyYXk8TGlzdEl0ZW0+PiA9IG5ldyBFdmVudEVtaXR0ZXI8QXJyYXk8TGlzdEl0ZW0+PigpO1xuXG4gICAgQE91dHB1dCgnb25EZVNlbGVjdEFsbCcpXG4gICAgb25EZVNlbGVjdEFsbDogRXZlbnRFbWl0dGVyPEFycmF5PExpc3RJdGVtPj4gPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PExpc3RJdGVtPj4oKTtcblxuICAgIEBPdXRwdXQoJ29uT3BlbicpXG4gICAgb25PcGVuOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgQE91dHB1dCgnb25DbG9zZScpXG4gICAgb25DbG9zZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIEBDb250ZW50Q2hpbGQoSXRlbSwgeyBzdGF0aWM6IGZhbHNlIH0pIGl0ZW1UZW1wbDogSXRlbTtcbiAgICBAQ29udGVudENoaWxkKEJhZGdlLCB7IHN0YXRpYzogZmFsc2UgfSkgYmFkZ2VUZW1wbDogQmFkZ2U7XG5cblxuICAgIEBWaWV3Q2hpbGQoJ3NlYXJjaElucHV0JywgeyBzdGF0aWM6IGZhbHNlIH0pIHNlYXJjaElucHV0OiBFbGVtZW50UmVmO1xuXG4gICAgcHVibGljIHNlbGVjdGVkSXRlbXM6IEFycmF5PExpc3RJdGVtPjtcbiAgICBwdWJsaWMgaXNBY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgaXNTZWxlY3RBbGw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgZ3JvdXBlZERhdGE6IEFycmF5PExpc3RJdGVtPjtcbiAgICBmaWx0ZXI6IGFueTtcbiAgICBwdWJsaWMgY2h1bmtBcnJheTphbnlbXTtcbiAgICBwdWJsaWMgc2Nyb2xsVG9wOmFueTtcbiAgICBwdWJsaWMgY2h1bmtJbmRleDphbnlbXSA9IFtdO1xuICAgIHB1YmxpYyBjYWNoZWRJdGVtczphbnlbXSA9IFtdO1xuICAgIHB1YmxpYyB0b3RhbFJvd3M6YW55O1xuICAgIHB1YmxpYyBpdGVtSGVpZ2h0OmFueSA9IDQxLjY7XG4gICAgcHVibGljIHNjcmVlbkl0ZW1zTGVuOmFueTtcbiAgICBwdWJsaWMgY2FjaGVkSXRlbXNMZW46YW55O1xuICAgIHB1YmxpYyB0b3RhbEhlaWdodDogYW55O1xuICAgIHB1YmxpYyBzY3JvbGxlcjphbnk7XG4gICAgcHVibGljIG1heEJ1ZmZlcjphbnk7XG4gICAgcHVibGljIGxhc3RTY3JvbGxlZDphbnk7XG4gICAgcHVibGljIGxhc3RSZXBhaW50WTogYW55O1xuXG4gICAgZGVmYXVsdFNldHRpbmdzOiBEcm9wZG93blNldHRpbmdzID0ge1xuICAgICAgICBzaW5nbGVTZWxlY3Rpb246IGZhbHNlLFxuICAgICAgICB0ZXh0OiAnU2VsZWN0JyxcbiAgICAgICAgZW5hYmxlQ2hlY2tBbGw6IHRydWUsXG4gICAgICAgIHNlbGVjdEFsbFRleHQ6ICdTZWxlY3QgQWxsJyxcbiAgICAgICAgdW5TZWxlY3RBbGxUZXh0OiAnVW5TZWxlY3QgQWxsJyxcbiAgICAgICAgZW5hYmxlU2VhcmNoRmlsdGVyOiBmYWxzZSxcbiAgICAgICAgbWF4SGVpZ2h0OiAzMDAsXG4gICAgICAgIGJhZGdlU2hvd0xpbWl0OiA5OTk5OTk5OTk5OTksXG4gICAgICAgIGNsYXNzZXM6ICcnLFxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgICAgIHNlYXJjaFBsYWNlaG9sZGVyVGV4dDogJ1NlYXJjaCcsXG4gICAgICAgIHNob3dDaGVja2JveDogdHJ1ZSxcbiAgICAgICAgbm9EYXRhTGFiZWw6ICdObyBEYXRhIEF2YWlsYWJsZScsXG4gICAgICAgIHNlYXJjaEF1dG9mb2N1czogdHJ1ZSxcbiAgICAgICAgbGF6eUxvYWRpbmc6IGZhbHNlLFxuICAgICAgICBsYWJlbEtleTogJ2l0ZW1OYW1lJyxcbiAgICAgICAgdGhlbWU6ICdjbGFzc2ljJyxcbiAgICAgICAgc2tpbjogJ2NsYXNzaWMnXG4gICAgfVxuICAgIHB1YmxpYyBwYXJzZUVycm9yOiBib29sZWFuO1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBfZWxlbWVudFJlZiA6IEVsZW1lbnRSZWYpIHtcblxuICAgIH1cbiAgICBnZXRUaGVtZU5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHJhd1RoZW1lOiBhbnkgPSAnY2xhc3NpYyc7XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzKSB7XG4gICAgICAgICAgICByYXdUaGVtZSA9IHRoaXMuc2V0dGluZ3Muc2tpbiB8fCB0aGlzLnNldHRpbmdzLnRoZW1lIHx8ICdjbGFzc2ljJztcbiAgICAgICAgfVxuICAgICAgICBsZXQgdGhlbWUgPSBTdHJpbmcocmF3VGhlbWUpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXowLTlfLV0rL2csICctJyk7XG4gICAgICAgIHRoZW1lID0gdGhlbWUucmVwbGFjZSgvXi0rfC0rJC9nLCAnJyk7XG4gICAgICAgIHJldHVybiB0aGVtZSB8fCAnY2xhc3NpYyc7XG4gICAgfVxuICAgIGdldERyb3Bkb3duQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgICAgICBsZXQgdGhlbWUgPSB0aGlzLmdldFRoZW1lTmFtZSgpO1xuICAgICAgICBsZXQgY2xhc3NOYW1lID0gJ3RoZW1lLScgKyB0aGVtZTtcbiAgICAgICAgaWYgKHRoZW1lICE9PSAnY2xhc3NpYycgJiYgdGhlbWUgIT09ICdtYXRlcmlhbCcgJiYgdGhlbWUgIT09ICdkYXJrJyAmJiB0aGVtZSAhPT0gJ2N1c3RvbScpIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZSArPSAnIHRoZW1lLWN1c3RvbSc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNBY3RpdmUpIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZSArPSAnIGlzLW9wZW4nO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzICYmIHRoaXMuc2V0dGluZ3MuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZSArPSAnIGlzLWRpc2FibGVkJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xhc3NOYW1lO1xuICAgIH1cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24odGhpcy5kZWZhdWx0U2V0dGluZ3MsIHRoaXMuc2V0dGluZ3MpO1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5ncm91cEJ5KSB7XG4gICAgICAgICAgICB0aGlzLmdyb3VwZWREYXRhID0gdGhpcy50cmFuc2Zvcm1EYXRhKHRoaXMuZGF0YSwgdGhpcy5zZXR0aW5ncy5ncm91cEJ5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRvdGFsUm93cyA9ICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLmxlbmd0aCk7XG4gICAgICAgIHRoaXMuY2FjaGVkSXRlbXMgPSB0aGlzLmRhdGE7XG4gICAgICAgIHRoaXMuc2NyZWVuSXRlbXNMZW4gPSBNYXRoLmNlaWwodGhpcy5zZXR0aW5ncy5tYXhIZWlnaHQgLyB0aGlzLml0ZW1IZWlnaHQpO1xuICAgICAgICB0aGlzLmNhY2hlZEl0ZW1zTGVuID0gdGhpcy5zY3JlZW5JdGVtc0xlbiAqIDM7XG4gICAgICAgIHRoaXMudG90YWxIZWlnaHQgPSB0aGlzLml0ZW1IZWlnaHQgKiB0aGlzLnRvdGFsUm93cztcbiAgICAgICAgdGhpcy5tYXhCdWZmZXIgPSB0aGlzLnNjcmVlbkl0ZW1zTGVuICogdGhpcy5pdGVtSGVpZ2h0O1xuICAgICAgICB0aGlzLmxhc3RTY3JvbGxlZCA9IDA7XG4gICAgICAgIHRoaXMucmVuZGVyQ2h1bmsoMCwgdGhpcy5jYWNoZWRJdGVtc0xlbiAvIDIpO1xuICAgIH1cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGlmIChjaGFuZ2VzLmRhdGEgJiYgIWNoYW5nZXMuZGF0YS5pc0ZpcnN0Q2hhbmdlKCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmdyb3VwQnkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3VwZWREYXRhID0gdGhpcy50cmFuc2Zvcm1EYXRhKHRoaXMuZGF0YSwgdGhpcy5zZXR0aW5ncy5ncm91cEJ5KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlcy5zZXR0aW5ncyAmJiAhY2hhbmdlcy5zZXR0aW5ncy5pc0ZpcnN0Q2hhbmdlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHRoaXMuZGVmYXVsdFNldHRpbmdzLCB0aGlzLnNldHRpbmdzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ0RvQ2hlY2soKSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID09IDAgfHwgdGhpcy5kYXRhLmxlbmd0aCA9PSAwIHx8IHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPCB0aGlzLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1NlbGVjdEFsbCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgaWYodGhpcy5zZXR0aW5ncy5sYXp5TG9hZGluZyl7XG4gICAgICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImxhenlDb250YWluZXJcIilbMF0uYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vblNjcm9sbC5iaW5kKHRoaXMpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvbkl0ZW1DbGljayhpdGVtOiBMaXN0SXRlbSwgaW5kZXg6IG51bWJlciwgZXZ0OiBFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGZvdW5kID0gdGhpcy5pc1NlbGVjdGVkKGl0ZW0pO1xuICAgICAgICBsZXQgbGltaXQgPSB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoIDwgdGhpcy5zZXR0aW5ncy5saW1pdFNlbGVjdGlvbiA/IHRydWUgOiBmYWxzZTtcblxuICAgICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5saW1pdFNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgIGlmIChsaW1pdCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFNlbGVjdGVkKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uU2VsZWN0LmVtaXQoaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRTZWxlY3RlZChpdGVtKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uU2VsZWN0LmVtaXQoaXRlbSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWQoaXRlbSk7XG4gICAgICAgICAgICB0aGlzLm9uRGVTZWxlY3QuZW1pdChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc1NlbGVjdEFsbCB8fCB0aGlzLmRhdGEubGVuZ3RoID4gdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5pc1NlbGVjdEFsbCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRhdGEubGVuZ3RoID09IHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuaXNTZWxlY3RBbGwgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHB1YmxpYyB2YWxpZGF0ZShjOiBGb3JtQ29udHJvbCk6IGFueSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBwcml2YXRlIG9uVG91Y2hlZENhbGxiYWNrOiAoXzogYW55KSA9PiB2b2lkID0gbm9vcDtcbiAgICBwcml2YXRlIG9uQ2hhbmdlQ2FsbGJhY2s6IChfOiBhbnkpID0+IHZvaWQgPSBub29wO1xuXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5zaW5nbGVTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbdmFsdWVbMF1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IE15RXhjZXB0aW9uKDQwNCwgeyBcIm1zZ1wiOiBcIlNpbmdsZSBTZWxlY3Rpb24gTW9kZSwgU2VsZWN0ZWQgSXRlbXMgY2Fubm90IGhhdmUgbW9yZSB0aGFuIG9uZSBpdGVtLlwiIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlLmJvZHkubXNnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmxpbWl0U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHZhbHVlLnNwbGljZSgwLCB0aGlzLnNldHRpbmdzLmxpbWl0U2VsZWN0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PT0gdGhpcy5kYXRhLmxlbmd0aCAmJiB0aGlzLmRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzU2VsZWN0QWxsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrID0gZm47XG4gICAgfVxuXG4gICAgLy9Gcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xuICAgIH1cbiAgICB0cmFja0J5Rm4oaW5kZXg6IG51bWJlciwgaXRlbTogTGlzdEl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uaWQ7XG4gICAgfVxuICAgIGlzU2VsZWN0ZWQoY2xpY2tlZEl0ZW06IExpc3RJdGVtKSB7XG4gICAgICAgIGxldCBmb3VuZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgJiYgdGhpcy5zZWxlY3RlZEl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBpZiAoY2xpY2tlZEl0ZW0uaWQgPT09IGl0ZW0uaWQpIHtcbiAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZm91bmQ7XG4gICAgfVxuICAgIGFkZFNlbGVjdGVkKGl0ZW06IExpc3RJdGVtKSB7XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzLnNpbmdsZVNlbGVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gW107XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VEcm9wZG93bigpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sodGhpcy5zZWxlY3RlZEl0ZW1zKTtcbiAgICAgICAgdGhpcy5vblRvdWNoZWRDYWxsYmFjayh0aGlzLnNlbGVjdGVkSXRlbXMpO1xuICAgIH1cbiAgICByZW1vdmVTZWxlY3RlZChjbGlja2VkSXRlbTogTGlzdEl0ZW0pIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zICYmIHRoaXMuc2VsZWN0ZWRJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgaWYgKGNsaWNrZWRJdGVtLmlkID09PSBpdGVtLmlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnNwbGljZSh0aGlzLnNlbGVjdGVkSXRlbXMuaW5kZXhPZihpdGVtKSwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sodGhpcy5zZWxlY3RlZEl0ZW1zKTtcbiAgICAgICAgdGhpcy5vblRvdWNoZWRDYWxsYmFjayh0aGlzLnNlbGVjdGVkSXRlbXMpO1xuICAgIH1cbiAgICB0b2dnbGVEcm9wZG93bihldnQ6IGFueSkge1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNBY3RpdmUgPSAhdGhpcy5pc0FjdGl2ZTtcbiAgICAgICAgaWYgKHRoaXMuaXNBY3RpdmUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmdzLnNlYXJjaEF1dG9mb2N1cyAmJiB0aGlzLnNldHRpbmdzLmVuYWJsZVNlYXJjaEZpbHRlcikge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMub25PcGVuLmVtaXQodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9uQ2xvc2UuZW1pdChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIGNsb3NlRHJvcGRvd24oKSB7XG4gICAgICAgIGlmKHRoaXMuc2VhcmNoSW5wdXQpe1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gXCJcIjtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5jYWNoZWRJdGVtcztcbiAgICAgICAgICAgIHRoaXMudG90YWxIZWlnaHQgPSB0aGlzLml0ZW1IZWlnaHQgKiB0aGlzLmRhdGEubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy50b3RhbFJvd3MgPSB0aGlzLmRhdGEubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVWaWV3KHRoaXMuc2Nyb2xsVG9wKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbHRlciA9IFwiXCI7XG4gICAgICAgIHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5vbkNsb3NlLmVtaXQoZmFsc2UpO1xuICAgIH1cbiAgICB0b2dnbGVTZWxlY3RBbGwoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1NlbGVjdEFsbCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gW107XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLmRhdGEuc2xpY2UoKTtcbiAgICAgICAgICAgIHRoaXMuaXNTZWxlY3RBbGwgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrKHRoaXMuc2VsZWN0ZWRJdGVtcyk7XG4gICAgICAgICAgICB0aGlzLm9uVG91Y2hlZENhbGxiYWNrKHRoaXMuc2VsZWN0ZWRJdGVtcyk7XG5cbiAgICAgICAgICAgIHRoaXMub25TZWxlY3RBbGwuZW1pdCh0aGlzLnNlbGVjdGVkSXRlbXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gW107XG4gICAgICAgICAgICB0aGlzLmlzU2VsZWN0QWxsID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sodGhpcy5zZWxlY3RlZEl0ZW1zKTtcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkQ2FsbGJhY2sodGhpcy5zZWxlY3RlZEl0ZW1zKTtcblxuICAgICAgICAgICAgdGhpcy5vbkRlU2VsZWN0QWxsLmVtaXQodGhpcy5zZWxlY3RlZEl0ZW1zKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0cmFuc2Zvcm1EYXRhKGFycjogQXJyYXk8TGlzdEl0ZW0+LCBmaWVsZDogYW55KTogQXJyYXk8TGlzdEl0ZW0+IHtcbiAgICAgICAgY29uc3QgZ3JvdXBlZE9iajogYW55ID0gYXJyLnJlZHVjZSgocHJldjogYW55LCBjdXI6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFwcmV2W2N1cltmaWVsZF1dKSB7XG4gICAgICAgICAgICAgICAgcHJldltjdXJbZmllbGRdXSA9IFtjdXJdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwcmV2W2N1cltmaWVsZF1dLnB1c2goY3VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgICB9LCB7fSk7XG4gICAgICAgIGNvbnN0IHRlbXBBcnI6IGFueSA9IFtdO1xuICAgICAgICBPYmplY3Qua2V5cyhncm91cGVkT2JqKS5tYXAoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHRlbXBBcnIucHVzaCh7IGtleTogeCwgdmFsdWU6IGdyb3VwZWRPYmpbeF0gfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGVtcEFycjtcbiAgICB9XG4gICAgcmVuZGVyQ2h1bmsoZnJvbVBvczphbnksIGhvd01hbnk6YW55KSB7XG4gICAgICAgIHRoaXMuY2h1bmtBcnJheSA9IFtdO1xuICAgICAgICB0aGlzLmNodW5rSW5kZXggPSBbXTtcbiAgICAgICAgdmFyIGZpbmFsSXRlbSA9IGZyb21Qb3MgKyBob3dNYW55O1xuICAgICAgICBpZiAoZmluYWxJdGVtID4gdGhpcy50b3RhbFJvd3MpXG4gICAgICAgICAgICBmaW5hbEl0ZW0gPSB0aGlzLnRvdGFsUm93cztcblxuICAgICAgICBmb3IgKHZhciBpID0gZnJvbVBvczsgaSA8IGZpbmFsSXRlbTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaHVua0luZGV4LnB1c2goKGkgKiB0aGlzLml0ZW1IZWlnaHQpICsgJ3B4Jyk7XG4gICAgICAgICAgICAgICAgdGhpcy5jaHVua0FycmF5LnB1c2godGhpcy5kYXRhW2ldKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwdWJsaWMgb25TY3JvbGwoZTphbnkpIHtcbiAgICAgICAgdGhpcy5zY3JvbGxUb3AgPSBlLnRhcmdldC5zY3JvbGxUb3A7XG4gICAgICAgIHRoaXMudXBkYXRlVmlldyh0aGlzLnNjcm9sbFRvcCk7XG5cbiAgICB9XG4gICAgcHVibGljIHVwZGF0ZVZpZXcoc2Nyb2xsVG9wOmFueSl7XG4gICAgICAgIHZhciBzY3JvbGxQb3MgPSBzY3JvbGxUb3AgPyBzY3JvbGxUb3A6IDA7XG4gICAgICAgICB2YXIgZmlyc3QgPSAoc2Nyb2xsUG9zIC8gdGhpcy5pdGVtSGVpZ2h0KSAtIHRoaXMuc2NyZWVuSXRlbXNMZW47XG4gICAgICAgIHZhciBmaXJzdFRlbXAgPSBcIlwiK2ZpcnN0O1xuICAgICAgICBmaXJzdCA9IHBhcnNlSW50KGZpcnN0VGVtcCkgPCAwID8gMCA6IHBhcnNlSW50KGZpcnN0VGVtcCk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlckNodW5rKGZpcnN0LCB0aGlzLmNhY2hlZEl0ZW1zTGVuKTtcbiAgICAgICAgICAgIHRoaXMubGFzdFJlcGFpbnRZID0gc2Nyb2xsUG9zO1xuICAgIH1cbiAgICBwdWJsaWMgZmlsdGVySW5maW5pdGVMaXN0KGV2dDogYW55KXtcbiAgICAgICAgdmFyIGZpbHRlcmVkRWxlbXM6QXJyYXk8YW55PiA9IFtdO1xuICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmNhY2hlZEl0ZW1zLnNsaWNlKCk7XG4gICAgICAgIGlmKGV2dC50YXJnZXQudmFsdWUudG9TdHJpbmcoKSAhPSAnJyl7XG4gICAgICAgICAgdGhpcy5kYXRhLmZpbHRlcihmdW5jdGlvbihlbDphbnkpe1xuICAgICAgICAgICAgICBmb3IodmFyIHByb3AgaW4gZWwpe1xuICAgICAgICAgICAgICAgICAgaWYoZWxbcHJvcF0udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoZXZ0LnRhcmdldC52YWx1ZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpID49MCApe1xuICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkRWxlbXMucHVzaChlbCk7XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vdGhpcy5jYWNoZWRJdGVtcyA9IHRoaXMuZGF0YTtcbiAgICAgICAgICAgIHRoaXMudG90YWxIZWlnaHQgPSB0aGlzLml0ZW1IZWlnaHQgKiBmaWx0ZXJlZEVsZW1zLmxlbmd0aDtcbiAgICAgICAgICAgIHRoaXMudG90YWxSb3dzID0gZmlsdGVyZWRFbGVtcy5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IGZpbHRlcmVkRWxlbXM7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZpZXcodGhpcy5zY3JvbGxUb3ApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYoZXZ0LnRhcmdldC52YWx1ZS50b1N0cmluZygpID09ICcnICYmIHRoaXMuY2FjaGVkSXRlbXMubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHRoaXMuY2FjaGVkSXRlbXM7XG4gICAgICAgICAgICB0aGlzLnRvdGFsSGVpZ2h0ID0gdGhpcy5pdGVtSGVpZ2h0ICogdGhpcy5kYXRhLmxlbmd0aDtcbiAgICAgICAgICAgIHRoaXMudG90YWxSb3dzID0gdGhpcy5kYXRhLmxlbmd0aDtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmlldyh0aGlzLnNjcm9sbFRvcCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGVdLFxuICAgIGRlY2xhcmF0aW9uczogW0FuZ3VsYXJNdWx0aVNlbGVjdCwgQ2xpY2tPdXRzaWRlRGlyZWN0aXZlLCBTY3JvbGxEaXJlY3RpdmUsIHN0eWxlRGlyZWN0aXZlLCBMaXN0RmlsdGVyUGlwZSwgSXRlbSwgVGVtcGxhdGVSZW5kZXJlciwgQmFkZ2VdLFxuICAgIGV4cG9ydHM6IFtBbmd1bGFyTXVsdGlTZWxlY3QsIENsaWNrT3V0c2lkZURpcmVjdGl2ZSwgU2Nyb2xsRGlyZWN0aXZlLCBzdHlsZURpcmVjdGl2ZSwgTGlzdEZpbHRlclBpcGUsIEl0ZW0sIFRlbXBsYXRlUmVuZGVyZXIsIEJhZGdlXVxufSlcbmV4cG9ydCBjbGFzcyBBbmd1bGFyTXVsdGlTZWxlY3RNb2R1bGUgeyB9XG4iXX0=