@stackline/angular-multiselect-dropdown 14.0.0 → 16.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.
@@ -0,0 +1,411 @@
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: "16.2.12", ngImport: i0, type: AngularMultiSelect, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
361
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", 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(function () { return i1.NgClass; }), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i0.forwardRef(function () { return i1.NgForOf; }), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(function () { return i1.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i0.forwardRef(function () { return i1.NgStyle; }), selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i0.forwardRef(function () { return 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(function () { return i2.NgControlStatus; }), selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgModel; }), selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i0.forwardRef(function () { return ClickOutsideDirective; }), selector: "[clickOutside]", outputs: ["clickOutside"] }, { kind: "directive", type: i0.forwardRef(function () { return styleDirective; }), selector: "[styleProp]", inputs: ["styleProp"] }, { kind: "component", type: i0.forwardRef(function () { return TemplateRenderer; }), selector: "c-templateRenderer", inputs: ["data", "item"] }, { kind: "pipe", type: i0.forwardRef(function () { return ListFilterPipe; }), name: "listFilter" }] });
362
+ }
363
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", 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: function () { return [{ 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: "16.2.12", ngImport: i0, type: AngularMultiSelectModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
400
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", 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: "16.2.12", ngImport: i0, type: AngularMultiSelectModule, imports: [CommonModule, FormsModule] });
402
+ }
403
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlzZWxlY3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9tdWx0aXNlbGVjdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxRQUFRLEVBQStDLFlBQVksRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFrRCxNQUFNLGVBQWUsQ0FBQztBQUMzTixPQUFPLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUF3QixhQUFhLEVBQTBCLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0gsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBWSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU1RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7Ozs7QUFFNUQsTUFBTSxDQUFDLE1BQU0sK0JBQStCLEdBQVE7SUFDaEQsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixDQUFDO0lBQ2pELEtBQUssRUFBRSxJQUFJO0NBQ2QsQ0FBQztBQUNGLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFRO0lBQzVDLE9BQU8sRUFBRSxhQUFhO0lBQ3RCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsa0JBQWtCLENBQUM7SUFDakQsS0FBSyxFQUFFLElBQUk7Q0FDZCxDQUFBO0FBQ0QsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFO0FBQ2xCLENBQUMsQ0FBQztBQVVGLE1BQU0sT0FBTyxrQkFBa0I7SUF3RVI7SUFyRW5CLElBQUksQ0FBa0I7SUFHdEIsUUFBUSxDQUFtQjtJQUczQixRQUFRLEdBQTJCLElBQUksWUFBWSxFQUFZLENBQUM7SUFHaEUsVUFBVSxHQUEyQixJQUFJLFlBQVksRUFBWSxDQUFDO0lBR2xFLFdBQVcsR0FBa0MsSUFBSSxZQUFZLEVBQW1CLENBQUM7SUFHakYsYUFBYSxHQUFrQyxJQUFJLFlBQVksRUFBbUIsQ0FBQztJQUduRixNQUFNLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7SUFHcEQsT0FBTyxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO0lBRWQsU0FBUyxDQUFPO0lBQ2YsVUFBVSxDQUFRO0lBR2IsV0FBVyxDQUFhO0lBRTlELGFBQWEsQ0FBa0I7SUFDL0IsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUMxQixXQUFXLEdBQVksS0FBSyxDQUFDO0lBQzdCLFdBQVcsQ0FBa0I7SUFDcEMsTUFBTSxDQUFNO0lBQ0wsVUFBVSxDQUFPO0lBQ2pCLFNBQVMsQ0FBSztJQUNkLFVBQVUsR0FBUyxFQUFFLENBQUM7SUFDdEIsV0FBVyxHQUFTLEVBQUUsQ0FBQztJQUN2QixTQUFTLENBQUs7SUFDZCxVQUFVLEdBQU8sSUFBSSxDQUFDO0lBQ3RCLGNBQWMsQ0FBSztJQUNuQixjQUFjLENBQUs7SUFDbkIsV0FBVyxDQUFNO0lBQ2pCLFFBQVEsQ0FBSztJQUNiLFNBQVMsQ0FBSztJQUNkLFlBQVksQ0FBSztJQUNqQixZQUFZLENBQU07SUFFekIsZUFBZSxHQUFxQjtRQUNoQyxlQUFlLEVBQUUsS0FBSztRQUN0QixJQUFJLEVBQUUsUUFBUTtRQUNkLGNBQWMsRUFBRSxJQUFJO1FBQ3BCLGFBQWEsRUFBRSxZQUFZO1FBQzNCLGVBQWUsRUFBRSxjQUFjO1FBQy9CLGtCQUFrQixFQUFFLEtBQUs7UUFDekIsU0FBUyxFQUFFLEdBQUc7UUFDZCxjQUFjLEVBQUUsWUFBWTtRQUM1QixPQUFPLEVBQUUsRUFBRTtRQUNYLFFBQVEsRUFBRSxLQUFLO1FBQ2YscUJBQXFCLEVBQUUsUUFBUTtRQUMvQixZQUFZLEVBQUUsSUFBSTtRQUNsQixXQUFXLEVBQUUsbUJBQW1CO1FBQ2hDLGVBQWUsRUFBRSxJQUFJO1FBQ3JCLFdBQVcsRUFBRSxLQUFLO1FBQ2xCLFFBQVEsRUFBRSxVQUFVO1FBQ3BCLEtBQUssRUFBRSxTQUFTO1FBQ2hCLElBQUksRUFBRSxTQUFTO0tBQ2xCLENBQUE7SUFDTSxVQUFVLENBQVU7SUFDM0IsWUFBbUIsV0FBd0I7UUFBeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7SUFFM0MsQ0FBQztJQUNELFlBQVk7UUFDUixJQUFJLFFBQVEsR0FBUSxTQUFTLENBQUM7UUFDOUIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxJQUFJLFNBQVMsQ0FBQztTQUNyRTtRQUNELElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3pFLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN0QyxPQUFPLEtBQUssSUFBSSxTQUFTLENBQUM7SUFDOUIsQ0FBQztJQUNELGtCQUFrQjtRQUNkLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNoQyxJQUFJLFNBQVMsR0FBRyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pDLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssVUFBVSxJQUFJLEtBQUssS0FBSyxNQUFNLElBQUksS0FBSyxLQUFLLFFBQVEsRUFBRTtZQUN2RixTQUFTLElBQUksZUFBZSxDQUFDO1NBQ2hDO1FBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsU0FBUyxJQUFJLFVBQVUsQ0FBQztTQUMzQjtRQUNELElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtZQUN6QyxTQUFTLElBQUksY0FBYyxDQUFDO1NBQy9CO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUNELFFBQVE7UUFDSixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkUsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRTtZQUN2QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzNFO1FBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDN0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzRSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ3BELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUNELFdBQVcsQ0FBQyxPQUFzQjtRQUM5QixJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFO1lBQy9DLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3hFLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO29CQUN2QixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztpQkFDM0I7YUFDSjtTQUNKO1FBQ0QsSUFBSSxPQUFPLENBQUMsUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsRUFBRTtZQUN2RCxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDdEU7SUFDTCxDQUFDO0lBQ0QsU0FBUztRQUNMLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNwQixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ3pHLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO2FBQzVCO1NBQ0o7SUFDTCxDQUFDO0lBQ0QsZUFBZTtRQUNYLElBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUM7WUFDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDbEk7SUFDTCxDQUFDO0lBQ0QsV0FBVyxDQUFDLElBQWMsRUFBRSxLQUFhLEVBQUUsR0FBVTtRQUNqRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFO1lBQ3hCLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBRUQsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFFcEYsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNSLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUU7Z0JBQzlCLElBQUksS0FBSyxFQUFFO29CQUNQLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3ZCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUM1QjthQUNKO2lCQUNJO2dCQUNELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzVCO1NBRUo7YUFDSTtZQUNELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDOUI7UUFDRCxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUU7WUFDbEUsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7U0FDNUI7UUFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFO1lBQy9DLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1NBQzNCO0lBQ0wsQ0FBQztJQUNNLFFBQVEsQ0FBQyxDQUFjO1FBQzFCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFDTyxpQkFBaUIsR0FBcUIsSUFBSSxDQUFDO0lBQzNDLGdCQUFnQixHQUFxQixJQUFJLENBQUM7SUFFbEQsVUFBVSxDQUFDLEtBQVU7UUFDakIsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUU7WUFDdkMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRTtnQkFDL0IsSUFBSTtvQkFFQSxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO3dCQUNsQixJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ2hDLE1BQU0sSUFBSSxXQUFXLENBQUMsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLHVFQUF1RSxFQUFFLENBQUMsQ0FBQztxQkFDbEg7eUJBQ0k7d0JBQ0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7cUJBQzlCO2lCQUNKO2dCQUNELE9BQU8sQ0FBQyxFQUFFO29CQUNOLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDN0I7YUFFSjtpQkFDSTtnQkFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUFFO29CQUM5QixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7aUJBQ3RFO3FCQUNJO29CQUNELElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO2lCQUM5QjtnQkFDRCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDeEUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7aUJBQzNCO2FBQ0o7U0FDSjthQUFNO1lBQ0gsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7U0FDM0I7SUFDTCxDQUFDO0lBRUQscUNBQXFDO0lBQ3JDLGdCQUFnQixDQUFDLEVBQU87UUFDcEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQscUNBQXFDO0lBQ3JDLGlCQUFpQixDQUFDLEVBQU87UUFDckIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBQ0QsU0FBUyxDQUFDLEtBQWEsRUFBRSxJQUFjO1FBQ25DLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBQ0QsVUFBVSxDQUFDLFdBQXFCO1FBQzVCLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNsQixJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3BELElBQUksV0FBVyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxFQUFFO2dCQUM1QixLQUFLLEdBQUcsSUFBSSxDQUFDO2FBQ2hCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBQ0QsV0FBVyxDQUFDLElBQWM7UUFDdEIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRTtZQUMvQixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDeEI7O1lBRUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFDRCxjQUFjLENBQUMsV0FBcUI7UUFDaEMsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNwRCxJQUFJLFdBQVcsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsRUFBRTtnQkFDNUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDbEU7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBQ0QsY0FBYyxDQUFDLEdBQVE7UUFDbkIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtZQUN4QixPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQy9CLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNmLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRTtnQkFDbkUsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDWixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDM0MsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ1Q7WUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMxQjthQUNJO1lBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDNUI7UUFDRCxHQUFHLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUNELGFBQWE7UUFDVCxJQUFHLElBQUksQ0FBQyxXQUFXLEVBQUM7WUFDaEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUM3QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDdEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNsQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUNuQztRQUNELElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFDRCxlQUFlO1FBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUUzQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDN0M7YUFDSTtZQUNELElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUUzQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDL0M7SUFDTCxDQUFDO0lBQ0QsYUFBYSxDQUFDLEdBQW9CLEVBQUUsS0FBVTtRQUMxQyxNQUFNLFVBQVUsR0FBUSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBUyxFQUFFLEdBQVEsRUFBRSxFQUFFO1lBQ3ZELElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQ25CLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQzVCO2lCQUFNO2dCQUNILElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDOUI7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDUCxNQUFNLE9BQU8sR0FBUSxFQUFFLENBQUM7UUFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO1lBQ25DLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztJQUNELFdBQVcsQ0FBQyxPQUFXLEVBQUUsT0FBVztRQUNoQyxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFJLFNBQVMsR0FBRyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ2xDLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTO1lBQzFCLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBRS9CLEtBQUssSUFBSSxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDbEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMxQztJQUNMLENBQUM7SUFDTSxRQUFRLENBQUMsQ0FBSztRQUNqQixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRXBDLENBQUM7SUFDTSxVQUFVLENBQUMsU0FBYTtRQUMzQixJQUFJLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLElBQUksS0FBSyxHQUFHLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQ2pFLElBQUksU0FBUyxHQUFHLEVBQUUsR0FBQyxLQUFLLENBQUM7UUFDekIsS0FBSyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQztJQUN0QyxDQUFDO0lBQ00sa0JBQWtCLENBQUMsR0FBUTtRQUM5QixJQUFJLGFBQWEsR0FBYyxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3JDLElBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFDO1lBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVMsRUFBTTtnQkFDNUIsS0FBSSxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUM7b0JBQ2YsSUFBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUcsQ0FBQyxFQUFFO3dCQUN6RixhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUN2QixNQUFNO3FCQUNUO2lCQUNKO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDRCwrQkFBK0I7WUFDL0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUM7WUFDMUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxhQUFhLENBQUM7WUFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDbkM7YUFDSSxJQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUM7WUFDckUsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDN0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ3RELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDbEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDbkM7SUFDTCxDQUFDO3dHQTlXUSxrQkFBa0I7NEZBQWxCLGtCQUFrQixpVkFIaEIsQ0FBQywrQkFBK0IsRUFBRSwyQkFBMkIsQ0FBQyxpRUE2QjNELElBQUksNkVBQ0osS0FBSyxpTEFqQ1QsbzlMQUFvOUwsNCtrQkF5WDM3TCxxQkFBcUIsNkhBQW1CLGNBQWMsc0hBQXdCLGdCQUFnQiwySEFBdEMsY0FBYzs7NEZBblhoRyxrQkFBa0I7a0JBUjlCLFNBQVM7K0JBQ0ksMkNBQTJDLFlBQzNDLG85TEFBbzlMLFFBQ3g5TCxFQUFFLFNBQVMsRUFBRSx5QkFBeUIsRUFBRSxhQUVuQyxDQUFDLCtCQUErQixFQUFFLDJCQUEyQixDQUFDO2lHQU16RSxJQUFJO3NCQURILEtBQUs7Z0JBSU4sUUFBUTtzQkFEUCxLQUFLO2dCQUlOLFFBQVE7c0JBRFAsTUFBTTt1QkFBQyxVQUFVO2dCQUlsQixVQUFVO3NCQURULE1BQU07dUJBQUMsWUFBWTtnQkFJcEIsV0FBVztzQkFEVixNQUFNO3VCQUFDLGFBQWE7Z0JBSXJCLGFBQWE7c0JBRFosTUFBTTt1QkFBQyxlQUFlO2dCQUl2QixNQUFNO3NCQURMLE1BQU07dUJBQUMsUUFBUTtnQkFJaEIsT0FBTztzQkFETixNQUFNO3VCQUFDLFNBQVM7Z0JBR3NCLFNBQVM7c0JBQS9DLFlBQVk7dUJBQUMsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDRyxVQUFVO3NCQUFqRCxZQUFZO3VCQUFDLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBR08sV0FBVztzQkFBdkQsU0FBUzt1QkFBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFOztBQXdWL0MsTUFBTSxPQUFPLHdCQUF3Qjt3R0FBeEIsd0JBQXdCO3lHQUF4Qix3QkFBd0IsaUJBdFh4QixrQkFBa0IsRUFtWFEscUJBQXFCLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLEtBQUssYUFEOUgsWUFBWSxFQUFFLFdBQVcsYUFsWDFCLGtCQUFrQixFQW9YRyxxQkFBcUIsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSzt5R0FFMUgsd0JBQXdCLFlBSnZCLFlBQVksRUFBRSxXQUFXOzs0RkFJMUIsd0JBQXdCO2tCQUxwQyxRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUM7b0JBQ3BDLFlBQVksRUFBRSxDQUFDLGtCQUFrQixFQUFFLHFCQUFxQixFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLENBQUM7b0JBQ3pJLE9BQU8sRUFBRSxDQUFDLGtCQUFrQixFQUFFLHFCQUFxQixFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLENBQUM7aUJBQ3ZJIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE5nTW9kdWxlLCBTaW1wbGVDaGFuZ2VzLCBPbkNoYW5nZXMsIFZpZXdFbmNhcHN1bGF0aW9uLCBDb250ZW50Q2hpbGQsIFZpZXdDaGlsZCwgZm9yd2FyZFJlZiwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBFbGVtZW50UmVmLCBBZnRlclZpZXdJbml0LCBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgTkdfVkFMVUVfQUNDRVNTT1IsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxJREFUT1JTLCBWYWxpZGF0b3IsIEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IExpc3RJdGVtLCBNeUV4Y2VwdGlvbiB9IGZyb20gJy4vbXVsdGlzZWxlY3QubW9kZWwnO1xuaW1wb3J0IHsgRHJvcGRvd25TZXR0aW5ncyB9IGZyb20gJy4vbXVsdGlzZWxlY3QuaW50ZXJmYWNlJztcbmltcG9ydCB7IENsaWNrT3V0c2lkZURpcmVjdGl2ZSwgU2Nyb2xsRGlyZWN0aXZlLCBzdHlsZURpcmVjdGl2ZSB9IGZyb20gJy4vY2xpY2tPdXRzaWRlJztcbmltcG9ydCB7IExpc3RGaWx0ZXJQaXBlIH0gZnJvbSAnLi9saXN0LWZpbHRlcic7XG5pbXBvcnQgeyBJdGVtLCBCYWRnZSwgVGVtcGxhdGVSZW5kZXJlciB9IGZyb20gJy4vbWVudS1pdGVtJztcblxuZXhwb3J0IGNvbnN0IERST1BET1dOX0NPTlRST0xfVkFMVUVfQUNDRVNTT1I6IGFueSA9IHtcbiAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBBbmd1bGFyTXVsdGlTZWxlY3QpLFxuICAgIG11bHRpOiB0cnVlXG59O1xuZXhwb3J0IGNvbnN0IERST1BET1dOX0NPTlRST0xfVkFMSURBVElPTjogYW55ID0ge1xuICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQW5ndWxhck11bHRpU2VsZWN0KSxcbiAgICBtdWx0aTogdHJ1ZSxcbn1cbmNvbnN0IG5vb3AgPSAoKSA9PiB7XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FuZ3VsYXItbXVsdGlzZWxlY3QsIGFuZ3VsYXIyLW11bHRpc2VsZWN0JyxcbiAgICB0ZW1wbGF0ZTogXCI8ZGl2IGNsYXNzPVxcXCJzdGFja2xpbmUtZHJvcGRvd25cXFwiIFtuZ0NsYXNzXT1cXFwiZ2V0RHJvcGRvd25DbGFzc2VzKClcXFwiIChjbGlja091dHNpZGUpPVxcXCJjbG9zZURyb3Bkb3duKClcXFwiPlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJzZWxlY3RlZC1saXN0XFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImMtYnRuXFxcIiAoY2xpY2spPVxcXCJ0b2dnbGVEcm9wZG93bigkZXZlbnQpXFxcIiBbbmdDbGFzc109XFxcInsnZGlzYWJsZWQnOiBzZXR0aW5ncy5kaXNhYmxlZH1cXFwiPlxcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVxcXCJzZWxlY3RlZEl0ZW1zPy5sZW5ndGggPT0gMFxcXCI+e3tzZXR0aW5ncy50ZXh0fX08L3NwYW4+XFxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XFxcInNldHRpbmdzLnNpbmdsZVNlbGVjdGlvblxcXCI+XFxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0Zvcj1cXFwibGV0IGl0ZW0gb2Ygc2VsZWN0ZWRJdGVtczt0cmFja0J5OiB0cmFja0J5Rm47XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIHt7aXRlbVtzZXR0aW5ncy5sYWJlbEtleV19fVxcbiAgICAgICAgICAgICAgICA8L3NwYW4+XFxuICAgICAgICAgICAgPC9zcGFuPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImMtbGlzdFxcXCIgKm5nSWY9XFxcInNlbGVjdGVkSXRlbXM/Lmxlbmd0aCA+IDAgJiYgIXNldHRpbmdzLnNpbmdsZVNlbGVjdGlvblxcXCI+XFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImMtdG9rZW5cXFwiICpuZ0Zvcj1cXFwibGV0IGl0ZW0gb2Ygc2VsZWN0ZWRJdGVtczt0cmFja0J5OiB0cmFja0J5Rm47bGV0IGsgPSBpbmRleFxcXCIgW2hpZGRlbl09XFxcImsgPiBzZXR0aW5ncy5iYWRnZVNob3dMaW1pdC0xXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVxcXCIhYmFkZ2VUZW1wbFxcXCIgY2xhc3M9XFxcImMtbGFiZWxcXFwiPnt7aXRlbVtzZXR0aW5ncy5sYWJlbEtleV19fTwvc3Bhbj5cXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVxcXCJiYWRnZVRlbXBsXFxcIiBjbGFzcz1cXFwiYy1sYWJlbFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPGMtdGVtcGxhdGVSZW5kZXJlciBbZGF0YV09XFxcImJhZGdlVGVtcGxcXFwiIFtpdGVtXT1cXFwiaXRlbVxcXCI+PC9jLXRlbXBsYXRlUmVuZGVyZXI+XFxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XFxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiZmEgZmEtcmVtb3ZlXFxcIiAoY2xpY2spPVxcXCJvbkl0ZW1DbGljayhpdGVtLGssJGV2ZW50KVxcXCI+PC9zcGFuPlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICA8L2Rpdj4gXFxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImNvdW50cGxhY2Vob2xkZXJcXFwiICpuZ0lmPVxcXCJzZWxlY3RlZEl0ZW1zPy5sZW5ndGggPiBzZXR0aW5ncy5iYWRnZVNob3dMaW1pdFxcXCI+K3t7c2VsZWN0ZWRJdGVtcz8ubGVuZ3RoIC0gc2V0dGluZ3MuYmFkZ2VTaG93TGltaXQgfX08L3NwYW4+XFxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImZhXFxcIiBbbmdDbGFzc109XFxcInsnZmEtYW5nbGUtZG93bic6ICFpc0FjdGl2ZSwnZmEtYW5nbGUtdXAnOmlzQWN0aXZlfVxcXCI+PC9zcGFuPlxcbiAgICAgICAgPC9kaXY+ICAgICAgXFxuICAgIDwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJkcm9wZG93bi1saXN0XFxcIiBbaGlkZGVuXT1cXFwiIWlzQWN0aXZlXFxcIj5cXG4gICAgPGRpdiBjbGFzcz1cXFwiYXJyb3ctdXAgYXJyb3ctMlxcXCI+PC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcImFycm93LXVwXFxcIj48L2Rpdj5cXG4gICAgPGRpdiBjbGFzcz1cXFwibGlzdC1hcmVhXFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcInB1cmUtY2hlY2tib3ggc2VsZWN0LWFsbFxcXCIgKm5nSWY9XFxcInNldHRpbmdzLmVuYWJsZUNoZWNrQWxsICYmICFzZXR0aW5ncy5zaW5nbGVTZWxlY3Rpb24gJiYgIXNldHRpbmdzLmxpbWl0U2VsZWN0aW9uXFxcIiAoY2xpY2spPVxcXCJ0b2dnbGVTZWxlY3RBbGwoKVxcXCI+XFxuICAgICAgICAgICAgPGlucHV0ICpuZ0lmPVxcXCJzZXR0aW5ncy5zaG93Q2hlY2tib3hcXFwiIHR5cGU9XFxcImNoZWNrYm94XFxcIiBbY2hlY2tlZF09XFxcImlzU2VsZWN0QWxsXFxcIiBbZGlzYWJsZWRdPVxcXCJzZXR0aW5ncy5saW1pdFNlbGVjdGlvbiA9PSBzZWxlY3RlZEl0ZW1zPy5sZW5ndGhcXFwiLz5cXG4gICAgICAgICAgICA8bGFiZWw+XFxuICAgICAgICAgICAgICAgIDxzcGFuIFtoaWRkZW5dPVxcXCJpc1NlbGVjdEFsbFxcXCI+e3tzZXR0aW5ncy5zZWxlY3RBbGxUZXh0fX08L3NwYW4+XFxuICAgICAgICAgICAgICAgIDxzcGFuIFtoaWRkZW5dPVxcXCIhaXNTZWxlY3RBbGxcXFwiPnt7c2V0dGluZ3MudW5TZWxlY3RBbGxUZXh0fX08L3NwYW4+XFxuICAgICAgICAgICAgPC9sYWJlbD5cXG4gICAgICAgIDwvZGl2PiAgIFxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwibGlzdC1maWx0ZXJcXFwiICpuZ0lmPVxcXCJzZXR0aW5ncy5lbmFibGVTZWFyY2hGaWx0ZXIgJiYgIXNldHRpbmdzLmxhenlMb2FkaW5nXFxcIj5cXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiZmEgZmEtc2VhcmNoXFxcIj48L3NwYW4+XFxuICAgICAgICAgICAgPGlucHV0ICNzZWFyY2hJbnB1dCB0eXBlPVxcXCJ0ZXh0XFxcIiBbcGxhY2Vob2xkZXJdPVxcXCJzZXR0aW5ncy5zZWFyY2hQbGFjZWhvbGRlclRleHRcXFwiIFsobmdNb2RlbCldPVxcXCJmaWx0ZXJcXFwiPlxcbiAgICAgICAgPC9kaXY+IFxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwibGlzdC1maWx0ZXJcXFwiICpuZ0lmPVxcXCJzZXR0aW5ncy5lbmFibGVTZWFyY2hGaWx0ZXIgJiYgc2V0dGluZ3MubGF6eUxvYWRpbmdcXFwiPlxcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJmYSBmYS1zZWFyY2hcXFwiPjwvc3Bhbj5cXG4gICAgICAgICAgICA8aW5wdXQgI3NlYXJjaElucHV0IHR5cGU9XFxcInRleHRcXFwiIFtwbGFjZWhvbGRlcl09XFxcInNldHRpbmdzLnNlYXJjaFBsYWNlaG9sZGVyVGV4dFxcXCIgKGtleXVwKT1cXFwiZmlsdGVySW5maW5pdGVMaXN0KCRldmVudClcXFwiPlxcbiAgICAgICAgPC9kaXY+XFxuICAgIDx1bCAqbmdJZj1cXFwiIXNldHRpbmdzLmdyb3VwQnlcXFwiIFtzdHlsZS5tYXhIZWlnaHRdID0gXFxcInNldHRpbmdzLm1heEhlaWdodCsncHgnXFxcIiBjbGFzcz1cXFwibGF6eUNvbnRhaW5lclxcXCIgPlxcbiAgICAgICAgPHNwYW4gKm5nSWY9XFxcIml0ZW1UZW1wbFxcXCI+XFxuICAgICAgICAgICAgPGxpICpuZ0Zvcj1cXFwibGV0IGl0ZW0gb2YgZGF0YSB8IGxpc3RGaWx0ZXI6ZmlsdGVyOyBsZXQgaSA9IGluZGV4O1xcXCIgKGNsaWNrKT1cXFwib25JdGVtQ2xpY2soaXRlbSxpLCRldmVudClcXFwiIGNsYXNzPVxcXCJwdXJlLWNoZWNrYm94XFxcIj5cXG4gICAgICAgICAgICA8aW5wdXQgKm5nSWY9XFxcInNldHRpbmdzLnNob3dDaGVja2JveFxcXCIgdHlwZT1cXFwiY2hlY2tib3hcXFwiIFtjaGVja2VkXT1cXFwiaXNTZWxlY3RlZChpdGVtKVxcXCIgW2Rpc2FibGVkXT1cXFwic2V0dGluZ3MubGltaXRTZWxlY3Rpb24gPT0gc2VsZWN0ZWRJdGVtcz8ubGVuZ3RoICYmICFpc1NlbGVjdGVkKGl0ZW0pXFxcIi8+XFxuICAgICAgICAgICAgPGxhYmVsPjwvbGFiZWw+XFxuICAgICAgICAgICAgPGMtdGVtcGxhdGVSZW5kZXJlciBbZGF0YV09XFxcIml0ZW1UZW1wbFxcXCIgW2l0ZW1dPVxcXCJpdGVtXFxcIj48L2MtdGVtcGxhdGVSZW5kZXJlcj5cXG4gICAgICAgIDwvbGk+XFxuICAgICAgICA8L3NwYW4+XFxuICAgICAgICA8c3BhbiAqbmdJZj1cXFwiIWl0ZW1UZW1wbCAmJiAhc2V0dGluZ3MubGF6eUxvYWRpbmdcXFwiID5cXG4gICAgICAgIDxsaSAqbmdGb3I9XFxcImxldCBpdGVtIG9mIGRhdGEgfCBsaXN0RmlsdGVyOmZpbHRlcjsgbGV0IGkgPSBpbmRleDtcXFwiIChjbGljayk9XFxcIm9uSXRlbUNsaWNrKGl0ZW0saSwkZXZlbnQpXFxcIiBjbGFzcz1cXFwicHVyZS1jaGVja2JveFxcXCI+XFxuICAgICAgICAgICAgPGlucHV0ICpuZ0lmPVxcXCJzZXR0aW5ncy5zaG93Q2hlY2tib3hcXFwiIHR5cGU9XFxcImNoZWNrYm94XFxcIiBbY2hlY2tlZF09XFxcImlzU2VsZWN0ZWQoaXRlbSlcXFwiIFtkaXNhYmxlZF09XFxcInNldHRpbmdzLmxpbWl0U2VsZWN0aW9uID09IHNlbGVjdGVkSXRlbXM/Lmxlbmd0aCAmJiAhaXNTZWxlY3RlZChpdGVtKVxcXCIvPlxcbiAgICAgICAgICAgIDxsYWJlbD57e2l0ZW1bc2V0dGluZ3MubGFiZWxLZXldfX08L2xhYmVsPlxcbiAgICAgICAgPC9saT5cXG4gICAgICAgIDwvc3Bhbj5cXG4gICAgICAgIDxzcGFuICpuZ0lmPVxcXCIhaXRlbVRlbXBsICYmIHNldHRpbmdzLmxhenlMb2FkaW5nXFxcIiA+XFxuICAgICAgICAgICAgPGRpdiBbbmdTdHlsZV09XFxcInsnaGVpZ2h0Jzp0b3RhbEhlaWdodCsncHgnfVxcXCIgc3R5bGU9XFxcInBvc2l0aW9uOiByZWxhdGl2ZTtcXFwiPlxcblxcbiAgICAgICAgICAgIFxcbiAgICAgICAgPGxpICpuZ0Zvcj1cXFwibGV0IGl0ZW0gb2YgY2h1bmtBcnJheSB8IGxpc3RGaWx0ZXI6ZmlsdGVyOyBsZXQgaSA9IGluZGV4O1xcXCIgKGNsaWNrKT1cXFwib25JdGVtQ2xpY2soaXRlbSxpLCRldmVudClcXFwiIHN0eWxlPVxcXCJwb3NpdGlvbjogYWJzb2x1dGU7d2lkdGg6IDEwMCU7XFxcIiBjbGFzcz1cXFwicHVyZS1jaGVja2JveFxcXCIgW3N0eWxlUHJvcF09XFxcImNodW5rSW5kZXhbaV1cXFwiPlxcbiAgICAgICAgICAgIDxpbnB1dCAqbmdJZj1cXFwic2V0dGluZ3Muc2hvd0NoZWNrYm94XFxcIiB0eXBlPVxcXCJjaGVja2JveFxcXCIgW2NoZWNrZWRdPVxcXCJpc1NlbGVjdGVkKGl0ZW0pXFxcIiBbZGlzYWJsZWRdPVxcXCJzZXR0aW5ncy5saW1pdFNlbGVjdGlvbiA9PSBzZWxlY3RlZEl0ZW1zPy5sZW5ndGggJiYgIWlzU2VsZWN0ZWQoaXRlbSlcXFwiLz5cXG4gICAgICAgICAgICA8bGFiZWw+e3tpdGVtW3NldHRpbmdzLmxhYmVsS2V5XX19PC9sYWJlbD5cXG4gICAgICAgIDwvbGk+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvc3Bhbj5cXG4gICAgPC91bD5cXG4gICAgPGRpdiAqbmdJZj1cXFwic2V0dGluZ3MuZ3JvdXBCeVxcXCIgW3N0eWxlLm1heEhlaWdodF0gPSBcXFwic2V0dGluZ3MubWF4SGVpZ2h0KydweCdcXFwiIHN0eWxlPVxcXCJvdmVyZmxvdzogYXV0bztcXFwiPlxcbiAgICA8dWwgKm5nRm9yPVxcXCJsZXQgb2JqIG9mIGdyb3VwZWREYXRhIDsgbGV0IGkgPSBpbmRleDtcXFwiIGNsYXNzPVxcXCJsaXN0LWdycFxcXCI+XFxuICAgICAgICA8aDQgKm5nSWY9XFxcIihvYmoudmFsdWUgfCBsaXN0RmlsdGVyOmZpbHRlciApLmxlbmd0aCA+IDBcXFwiPnt7b2JqLmtleX19PC9oND5cXG4gICAgICAgIDxzcGFuICpuZ0lmPVxcXCJpdGVtVGVtcGxcXFwiID5cXG4gICAgICAgIDxsaSAqbmdGb3I9XFxcImxldCBpdGVtIG9mIG9iai52YWx1ZSB8IGxpc3RGaWx0ZXI6ZmlsdGVyOyBsZXQgaSA9IGluZGV4O1xcXCIgKGNsaWNrKT1cXFwib25JdGVtQ2xpY2soaXRlbSxpLCRldmVudClcXFwiIGNsYXNzPVxcXCJwdXJlLWNoZWNrYm94XFxcIj5cXG4gICAgICAgICAgICA8aW5wdXQgKm5nSWY9XFxcInNldHRpbmdzLnNob3dDaGVja2JveFxcXCIgdHlwZT1cXFwiY2hlY2tib3hcXFwiIFtjaGVja2VkXT1cXFwiaXNTZWxlY3RlZChpdGVtKVxcXCIgW2Rpc2FibGVkXT1cXFwic2V0dGluZ3MubGltaXRTZWxlY3Rpb24gPT0gc2VsZWN0ZWRJdGVtcz8ubGVuZ3RoICYmICFpc1NlbGVjdGVkKGl0ZW0pXFxcIi8+XFxuICAgICAgICAgICAgPGxhYmVsPjwvbGFiZWw+XFxuICAgICAgICAgICAgPGMtdGVtcGxhdGVSZW5kZXJlciBbZGF0YV09XFxcIml0ZW1UZW1wbFxcXCIgW2l0ZW1dPVxcXCJpdGVtXFxcIj48L2MtdGVtcGxhdGVSZW5kZXJlcj5cXG4gICAgICAgIDwvbGk+XFxuICAgICAgICA8L3NwYW4+XFxuICAgICAgICA8c3BhbiAqbmdJZj1cXFwiIWl0ZW1UZW1wbFxcXCIgPlxcbiAgICAgICAgPGxpICpuZ0Zvcj1cXFwibGV0IGl0ZW0gb2Ygb2JqLnZhbHVlIHwgbGlzdEZpbHRlcjpmaWx0ZXI7IGxldCBpID0gaW5kZXg7XFxcIiAoY2xpY2spPVxcXCJvbkl0ZW1DbGljayhpdGVtLGksJGV2ZW50KVxcXCIgY2xhc3M9XFxcInB1cmUtY2hlY2tib3hcXFwiPlxcbiAgICAgICAgICAgIDxpbnB1dCAqbmdJZj1cXFwic2V0dGluZ3Muc2hvd0NoZWNrYm94XFxcIiB0eXBlPVxcXCJjaGVja2JveFxcXCIgW2NoZWNrZWRdPVxcXCJpc1NlbGVjdGVkKGl0ZW0pXFxcIiBbZGlzYWJsZWRdPVxcXCJzZXR0aW5ncy5saW1pdFNlbGVjdGlvbiA9PSBzZWxlY3RlZEl0ZW1zPy5sZW5ndGggJiYgIWlzU2VsZWN0ZWQoaXRlbSlcXFwiLz5cXG4gICAgICAgICAgICA8bGFiZWw+e3tpdGVtW3NldHRpbmdzLmxhYmVsS2V5XX19PC9sYWJlbD5cXG4gICAgICAgIDwvbGk+XFxuICAgICAgICA8L3NwYW4+XFxuICAgIDwvdWw+XFxuICAgIDwvZGl2PlxcbiAgICA8aDUgY2xhc3M9XFxcImxpc3QtbWVzc2FnZVxcXCIgKm5nSWY9XFxcImRhdGE/Lmxlbmd0aCA9PSAwXFxcIj57e3NldHRpbmdzLm5vRGF0YUxhYmVsfX08L2g1PlxcbiAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuPC9kaXY+XFxuXCIsXG4gICAgaG9zdDogeyAnW2NsYXNzXSc6ICdkZWZhdWx0U2V0dGluZ3MuY2xhc3NlcycgfSxcbiAgICBzdHlsZXM6IFtcIi5zdGFja2xpbmUtZHJvcGRvd24ge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG5cXG4uYy1idG4ge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgYmFja2dyb3VuZDogI2ZmZjtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBjb2xvcjogIzMzMztcXG59XFxuXFxuLmMtYnRuLmRpc2FibGVkIHtcXG4gIGJhY2tncm91bmQ6ICNjY2M7XFxufVxcblxcbi5jLWJ0bjpmb2N1cyB7XFxuICBvdXRsaW5lOiBub25lO1xcbn1cXG5cXG4uc2VsZWN0ZWQtbGlzdCAuYy1saXN0IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4OiAxIDEgYXV0bztcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBmbGV4LXdyYXA6IHdyYXA7XFxuICBtaW4td2lkdGg6IDA7XFxuICBmbG9hdDogbm9uZTtcXG4gIHBhZGRpbmc6IDBweDtcXG4gIG1hcmdpbjogMHB4O1xcbiAgd2lkdGg6IGF1dG87XFxufVxcbi5zZWxlY3RlZC1saXN0IC5jLWxpc3QgLmMtdG9rZW4ge1xcbiAgbGlzdC1zdHlsZTogbm9uZTtcXG4gIHBhZGRpbmc6IDBweCA1cHg7XFxuICBiYWNrZ3JvdW5kOiAjMDA3OUZFO1xcbiAgY29sb3I6ICNmZmY7XFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxuICBtYXJnaW4tcmlnaHQ6IDRweDtcXG4gIG1hcmdpbi10b3A6IDJweDtcXG4gIGZsb2F0OiBsZWZ0O1xcbn1cXG4uc2VsZWN0ZWQtbGlzdCAuYy1saXN0IC5jLXRva2VuIC5jLWxhYmVsIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgZmxvYXQ6IGxlZnQ7XFxuICAvKndpZHRoOiA1MHB4O1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjsqL1xcbn1cXG4uc2VsZWN0ZWQtbGlzdCAuYy1saXN0IC5jLXRva2VuIC5mYS1yZW1vdmUge1xcbiAgbWFyZ2luLWxlZnQ6IDFweDtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG59XFxuLnNlbGVjdGVkLWxpc3QgLmZhLWFuZ2xlLWRvd24sIC5zZWxlY3RlZC1saXN0IC5mYS1hbmdsZS11cCB7XFxuICBmb250LXNpemU6IDE1cHQ7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICByaWdodDogMTBweDtcXG4gIHRvcDogNTAlO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xcbn1cXG4uc2VsZWN0ZWQtbGlzdCAuY291bnRwbGFjZWhvbGRlciB7XFxuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcXG4gIGZsZXg6IDAgMCBhdXRvO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgYWxpZ24tc2VsZjogY2VudGVyO1xcbiAgbWFyZ2luOiAwIDAgMCA2cHg7XFxuICBsaW5lLWhlaWdodDogMTtcXG59XFxuLnNlbGVjdGVkLWxpc3QgLmMtYnRuIHtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICB3aWR0aDogMTAwJTtcXG4gIGJveC1zaGFkb3c6IDBweCAxcHggNXB4ICM5NTk1OTU7XFxuICBwYWRkaW5nOiAxMHB4IDM2cHggMTBweCAxMHB4O1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBmbGV4LXdyYXA6IG5vd3JhcDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuXFxuLmRyb3Bkb3duLWxpc3Qge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgcGFkZGluZy10b3A6IDE0cHg7XFxuICB3aWR0aDogMTAwJTtcXG4gIHotaW5kZXg6IDk5OTk7XFxufVxcbi5kcm9wZG93bi1saXN0IHVsIHtcXG4gIHBhZGRpbmc6IDBweDtcXG4gIGxpc3Qtc3R5bGU6IG5vbmU7XFxuICBvdmVyZmxvdzogYXV0bztcXG4gIG1hcmdpbjogMHB4O1xcbn1cXG4uZHJvcGRvd24tbGlzdCB1bCBsaSB7XFxuICBwYWRkaW5nOiAxMHB4IDEwcHg7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xcbn1cXG4uZHJvcGRvd24tbGlzdCB1bCBsaTpmaXJzdC1jaGlsZCB7XFxuICBwYWRkaW5nLXRvcDogMTBweDtcXG59XFxuLmRyb3Bkb3duLWxpc3QgdWwgbGk6bGFzdC1jaGlsZCB7XFxuICBwYWRkaW5nLWJvdHRvbTogMTBweDtcXG59XFxuLmRyb3Bkb3duLWxpc3QgdWwgbGk6aG92ZXIge1xcbiAgYmFja2dyb3VuZDogI2Y1ZjVmNTtcXG59XFxuLmRyb3Bkb3duLWxpc3QgOjotd2Via2l0LXNjcm9sbGJhciB7XFxuICB3aWR0aDogOHB4O1xcbn1cXG4uZHJvcGRvd24tbGlzdCA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcXG4gIGJhY2tncm91bmQ6ICNjY2NjY2M7XFxuICBib3JkZXItcmFkaXVzOiA1cHg7XFxufVxcbi5kcm9wZG93bi1saXN0IDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sge1xcbiAgYmFja2dyb3VuZDogI2YyZjJmMjtcXG59XFxuXFxuLmFycm93LXVwIHtcXG4gIHdpZHRoOiAwO1xcbiAgaGVpZ2h0OiAwO1xcbiAgYm9yZGVyLWxlZnQ6IDEzcHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItcmlnaHQ6IDEzcHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItYm90dG9tOiAxNXB4IHNvbGlkICNmZmY7XFxuICBtYXJnaW4tbGVmdDogMTVweDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG59XFxuXFxuLmFycm93LTIge1xcbiAgYm9yZGVyLWJvdHRvbTogMTVweCBzb2xpZCAjY2NjO1xcbiAgdG9wOiAtMXB4O1xcbn1cXG5cXG4ubGlzdC1hcmVhIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxuICBiYWNrZ3JvdW5kOiAjZmZmO1xcbiAgbWFyZ2luOiAwcHg7XFxuICBib3gtc2hhZG93OiAwcHggMXB4IDVweCAjOTU5NTk1O1xcbn1cXG5cXG4uc2VsZWN0LWFsbCB7XFxuICBwYWRkaW5nOiAxMHB4O1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNjY2M7XFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xcbn1cXG5cXG4ubGlzdC1maWx0ZXIge1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNjY2M7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi5saXN0LWZpbHRlciBpbnB1dCB7XFxuICBib3JkZXI6IDBweDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiAzNXB4O1xcbiAgcGFkZGluZzogMHB4IDBweCAwcHggMzVweDtcXG59XFxuLmxpc3QtZmlsdGVyIGlucHV0OmZvY3VzIHtcXG4gIG91dGxpbmU6IG5vbmU7XFxufVxcbi5saXN0LWZpbHRlciAuZmEge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAxMHB4O1xcbiAgbGVmdDogMTNweDtcXG4gIGNvbG9yOiAjODg4O1xcbn1cXG5cXG4ucHVyZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSB7XFxuICBib3JkZXI6IDA7XFxuICBjbGlwOiByZWN0KDAgMCAwIDApO1xcbiAgaGVpZ2h0OiAxcHg7XFxuICBtYXJnaW46IC0xcHg7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgcGFkZGluZzogMDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHdpZHRoOiAxcHg7XFxufVxcblxcbi5wdXJlLWNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdOmZvY3VzICsgbGFiZWw6YmVmb3JlLFxcbi5wdXJlLWNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdOmhvdmVyICsgbGFiZWw6YmVmb3JlIHtcXG4gIGJvcmRlci1jb2xvcjogIzAwNzlGRTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmMmYyZjI7XFxufVxcblxcbi5wdXJlLWNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdOmFjdGl2ZSArIGxhYmVsOmJlZm9yZSB7XFxuICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwcztcXG59XFxuXFxuLnB1cmUtY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF0gKyBsYWJlbCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBwYWRkaW5nLWxlZnQ6IDJlbTtcXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxuICB1c2VyLXNlbGVjdDogbm9uZTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIG1hcmdpbjogMHB4O1xcbiAgY29sb3I6ICMwMDA7XFxuICBmb250LXdlaWdodDogMzAwO1xcbn1cXG5cXG4ucHVyZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSArIGxhYmVsOmJlZm9yZSB7XFxuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgY29sb3I6ICMwMDc5RkU7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDUwJTtcXG4gIGxlZnQ6IDA7XFxuICB3aWR0aDogMTRweDtcXG4gIGhlaWdodDogMTRweDtcXG4gIG1hcmdpbi10b3A6IC05cHg7XFxuICBib3JkZXI6IDJweCBzb2xpZCAjMDA3OUZFO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgdHJhbnNpdGlvbjogYWxsIDAuNHMgZWFzZTtcXG59XFxuXFxuLnB1cmUtY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF0gKyBsYWJlbDphZnRlciB7XFxuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwNzlGRTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogNTAlO1xcbiAgbGVmdDogNHB4O1xcbiAgd2lkdGg6IDEwcHg7XFxuICBoZWlnaHQ6IDEwcHg7XFxuICBtYXJnaW4tdG9wOiAtNXB4O1xcbiAgdHJhbnNmb3JtOiBzY2FsZSgwKTtcXG4gIHRyYW5zZm9ybS1vcmlnaW46IDUwJTtcXG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAyMDBtcyBlYXNlLW91dDtcXG59XFxuXFxuLnB1cmUtY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF06ZGlzYWJsZWQgKyBsYWJlbDpiZWZvcmUge1xcbiAgYm9yZGVyLWNvbG9yOiAjY2NjY2NjO1xcbn1cXG5cXG4ucHVyZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XTpkaXNhYmxlZDpmb2N1cyArIGxhYmVsOmJlZm9yZSAucHVyZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XTpkaXNhYmxlZDpob3ZlciArIGxhYmVsOmJlZm9yZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xcbn1cXG5cXG4ucHVyZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XTpkaXNhYmxlZDpjaGVja2VkICsgbGFiZWw6YmVmb3JlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjY2NjY2M7XFxufVxcblxcbi5wdXJlLWNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdICsgbGFiZWw6YWZ0ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICB0b3A6IDUwJTtcXG4gIGxlZnQ6IDRweDtcXG4gIHdpZHRoOiA4cHg7XFxuICBoZWlnaHQ6IDNweDtcXG4gIG1hcmdpbi10b3A6IC00cHg7XFxuICBib3JkZXItc3R5bGU6IHNvbGlkO1xcbiAgYm9yZGVyLWNvbG9yOiAjZmZmZmZmO1xcbiAgYm9yZGVyLXdpZHRoOiAwIDAgM3B4IDNweDtcXG4gIGJvcmRlci1pbWFnZTogbm9uZTtcXG4gIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZykgc2NhbGUoMCk7XFxufVxcblxcbi5wdXJlLWNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQgKyBsYWJlbDphZnRlciB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZykgc2NhbGUoMSk7XFxuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMjAwbXMgZWFzZS1vdXQ7XFxufVxcblxcbi5wdXJlLWNoZWNrYm94IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQgKyBsYWJlbDpiZWZvcmUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XFxufVxcblxcbi5wdXJlLWNoZWNrYm94IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQgKyBsYWJlbDphZnRlciB7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xcbn1cXG5cXG4ucHVyZS1jaGVja2JveCBpbnB1dFt0eXBlPXJhZGlvXSArIGxhYmVsOmJlZm9yZSB7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxufVxcblxcbi5wdXJlLWNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQgKyBsYWJlbDpiZWZvcmUge1xcbiAgYmFja2dyb3VuZDogIzAwNzlGRTtcXG59XFxuXFxuLnB1cmUtY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCArIGxhYmVsOmFmdGVyIHtcXG4gIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZykgc2NhbGUoMSk7XFxufVxcblxcbi5saXN0LW1lc3NhZ2Uge1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG5cXG4ubGlzdC1ncnAge1xcbiAgcGFkZGluZzogMCAxNXB4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5saXN0LWdycCBoNCB7XFxuICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcXG4gIG1hcmdpbjogMTVweCAwcHggMHB4IDBweDtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIGZvbnQtd2VpZ2h0OiA3MDA7XFxufVxcblxcbi5saXN0LWdycCA+IGxpIHtcXG4gIHBhZGRpbmctbGVmdDogMTVweCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLW1hdGVyaWFsLFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtZGFyayxcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWN1c3RvbSB7XFxuICAtLW1zLXByaW1hcnk6ICMzZjUxYjU7XFxuICAtLW1zLXByaW1hcnktc29mdDogcmdiYSg2MywgODEsIDE4MSwgMC4xMik7XFxuICAtLW1zLXN1cmZhY2U6ICNmZmZmZmY7XFxuICAtLW1zLXN1cmZhY2Utc29mdDogI2Y1ZjdmYjtcXG4gIC0tbXMtc3VyZmFjZS1tdXRlZDogI2U4ZWFmNjtcXG4gIC0tbXMtb3V0bGluZTogI2M1Y2FlOTtcXG4gIC0tbXMtb3V0bGluZS1zdHJvbmc6ICM3OTg2Y2I7XFxuICAtLW1zLW9uLXN1cmZhY2U6ICMyMTIxMjE7XFxuICAtLW1zLW9uLXN1cmZhY2UtbXV0ZWQ6ICM1ZjYzNjg7XFxuICAtLW1zLWNoaXAtYmc6ICNlOGVhZjY7XFxuICAtLW1zLWNoaXAtdGV4dDogIzMwM2Y5ZjtcXG4gIC0tbXMtY2hpcC1yZW1vdmU6ICMzMDNmOWY7XFxuICAtLW1zLWRpdmlkZXI6IHJnYmEoMTI1LCAxMTksIDEzNCwgMC4xNik7XFxuICAtLW1zLXNlY3Rpb24tYmc6IHJnYmEoMjQ3LCAyNDIsIDI1MCwgMC43Nik7XFxuICAtLW1zLXNlbGVjdGVkLXRleHQ6IHZhcigtLW1zLXByaW1hcnkpO1xcbiAgLS1tcy1zaGFkb3c6IDAgMXB4IDJweCByZ2JhKDMzLCAzMywgMzMsIDAuMTYpLCAwIDEycHggMzJweCByZ2JhKDYzLCA4MSwgMTgxLCAwLjEyKTtcXG4gIC0tbXMtc2hhZG93LXNvZnQ6IDAgMXB4IDJweCByZ2JhKDMzLCAzMywgMzMsIDAuMTIpLCAwIDRweCAxMnB4IHJnYmEoMzMsIDMzLCAzMywgMC4wOCk7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAxMDAlO1xcbiAgY29sb3I6IHZhcigtLW1zLW9uLXN1cmZhY2UpO1xcbiAgZm9udDogaW5oZXJpdDtcXG59XFxuXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1kYXJrIHtcXG4gIC0tbXMtcHJpbWFyeTogIzhhYjRmODtcXG4gIC0tbXMtcHJpbWFyeS1zb2Z0OiByZ2JhKDEzOCwgMTgwLCAyNDgsIDAuMTgpO1xcbiAgLS1tcy1zdXJmYWNlOiAjMTUxYTIzO1xcbiAgLS1tcy1zdXJmYWNlLXNvZnQ6ICMyMDI3MzY7XFxuICAtLW1zLXN1cmZhY2UtbXV0ZWQ6ICMxMTE3MjI7XFxuICAtLW1zLW91dGxpbmU6ICMzODQ0NTY7XFxuICAtLW1zLW91dGxpbmUtc3Ryb25nOiAjOGFiNGY4O1xcbiAgLS1tcy1vbi1zdXJmYWNlOiAjZWRmMmY3O1xcbiAgLS1tcy1vbi1zdXJmYWNlLW11dGVkOiAjYWFiNmM1O1xcbiAgLS1tcy1jaGlwLWJnOiAjMjYzMjQ3O1xcbiAgLS1tcy1jaGlwLXRleHQ6ICNkN2U2ZmY7XFxuICAtLW1zLWNoaXAtcmVtb3ZlOiAjZDdlNmZmO1xcbiAgLS1tcy1kaXZpZGVyOiByZ2JhKDE3MCwgMTgyLCAxOTcsIDAuMTgpO1xcbiAgLS1tcy1zZWN0aW9uLWJnOiAjMTAxNjIwO1xcbiAgLS1tcy1zZWxlY3RlZC10ZXh0OiAjZDdlNmZmO1xcbiAgLS1tcy1zaGFkb3c6IDAgMjBweCA1MHB4IHJnYmEoMCwgMCwgMCwgMC40Mik7XFxuICAtLW1zLXNoYWRvdy1zb2Z0OiAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjQ1KSwgMCAxMHB4IDI0cHggcmdiYSgwLCAwLCAwLCAwLjI4KTtcXG59XFxuXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1jdXN0b20ge1xcbiAgLS1tcy1wcmltYXJ5OiB2YXIoLS1zdGFja2xpbmUtbXMtcHJpbWFyeSwgIzBmNzY2ZSk7XFxuICAtLW1zLXByaW1hcnktc29mdDogdmFyKC0tc3RhY2tsaW5lLW1zLXByaW1hcnktc29mdCwgcmdiYSgxNSwgMTE4LCAxMTAsIDAuMTQpKTtcXG4gIC0tbXMtc3VyZmFjZTogdmFyKC0tc3RhY2tsaW5lLW1zLXN1cmZhY2UsICNmZmZmZmYpO1xcbiAgLS1tcy1zdXJmYWNlLXNvZnQ6IHZhcigtLXN0YWNrbGluZS1tcy1zdXJmYWNlLXNvZnQsICNlY2ZkZjUpO1xcbiAgLS1tcy1zdXJmYWNlLW11dGVkOiB2YXIoLS1zdGFja2xpbmUtbXMtc3VyZmFjZS1tdXRlZCwgI2QxZmFlNSk7XFxuICAtLW1zLW91dGxpbmU6IHZhcigtLXN0YWNrbGluZS1tcy1vdXRsaW5lLCAjOTlmNmU0KTtcXG4gIC0tbXMtb3V0bGluZS1zdHJvbmc6IHZhcigtLXN0YWNrbGluZS1tcy1vdXRsaW5lLXN0cm9uZywgIzBmNzY2ZSk7XFxuICAtLW1zLW9uLXN1cmZhY2U6IHZhcigtLXN0YWNrbGluZS1tcy1vbi1zdXJmYWNlLCAjMTAyYTJhKTtcXG4gIC0tbXMtb24tc3VyZmFjZS1tdXRlZDogdmFyKC0tc3RhY2tsaW5lLW1zLW9uLXN1cmZhY2UtbXV0ZWQsICM0NzYxNWYpO1xcbiAgLS1tcy1jaGlwLWJnOiB2YXIoLS1zdGFja2xpbmUtbXMtY2hpcC1iZywgI2NjZmJmMSk7XFxuICAtLW1zLWNoaXAtdGV4dDogdmFyKC0tc3RhY2tsaW5lLW1zLWNoaXAtdGV4dCwgIzExNWU1OSk7XFxuICAtLW1zLWNoaXAtcmVtb3ZlOiB2YXIoLS1zdGFja2xpbmUtbXMtY2hpcC1yZW1vdmUsICMxMTVlNTkpO1xcbiAgLS1tcy1kaXZpZGVyOiB2YXIoLS1zdGFja2xpbmUtbXMtZGl2aWRlciwgcmdiYSgxNSwgMTE4LCAxMTAsIDAuMTYpKTtcXG4gIC0tbXMtc2VjdGlvbi1iZzogdmFyKC0tc3RhY2tsaW5lLW1zLXNlY3Rpb24tYmcsICNmMGZkZmEpO1xcbiAgLS1tcy1zZWxlY3RlZC10ZXh0OiB2YXIoLS1zdGFja2xpbmUtbXMtc2VsZWN0ZWQtdGV4dCwgdmFyKC0tbXMtcHJpbWFyeSkpO1xcbiAgLS1tcy1zaGFkb3c6IHZhcigtLXN0YWNrbGluZS1tcy1zaGFkb3csIDAgMThweCA0MnB4IHJnYmEoMTUsIDExOCwgMTEwLCAwLjE1KSk7XFxuICAtLW1zLXNoYWRvdy1zb2Z0OiB2YXIoLS1zdGFja2xpbmUtbXMtc2hhZG93LXNvZnQsIDAgMXB4IDJweCByZ2JhKDE1LCAxMTgsIDExMCwgMC4xNiksIDAgOHB4IDE4cHggcmdiYSgxNSwgMTE4LCAxMTAsIDAuMDkpKTtcXG59XFxuXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1tYXRlcmlhbCAuc2VsZWN0ZWQtbGlzdCxcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWRhcmsgLnNlbGVjdGVkLWxpc3QsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1jdXN0b20gLnNlbGVjdGVkLWxpc3Qge1xcbiAgd2lkdGg6IDEwMCU7XFxufVxcblxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtbWF0ZXJpYWwgLnNlbGVjdGVkLWxpc3QgLmMtYnRuLFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtZGFyayAuc2VsZWN0ZWQtbGlzdCAuYy1idG4sXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1jdXN0b20gLnNlbGVjdGVkLWxpc3QgLmMtYnRuIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgZmxleC13cmFwOiBub3dyYXA7XFxuICBnYXA6IDhweDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWluLWhlaWdodDogNTZweDtcXG4gIHBhZGRpbmc6IDExcHggNTRweCAxMXB4IDE2cHg7XFxuICBib3JkZXItcmFkaXVzOiAxOHB4O1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbXMtb3V0bGluZSk7XFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1tcy1zdXJmYWNlKTtcXG4gIGJveC1zaGFkb3c6IHZhcigtLW1zLXNoYWRvdy1zb2Z0KTtcXG4gIGNvbG9yOiB2YXIoLS1tcy1vbi1zdXJmYWNlKTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGZvbnQtc2l6ZTogaW5oZXJpdDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjQ1O1xcbiAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMTZzIGVhc2UsIGJveC1zaGFkb3cgMC4xNnMgZWFzZSwgYmFja2dyb3VuZC1jb2xvciAwLjE2cyBlYXNlLCB0cmFuc2Zvcm0gMC4xNnMgZWFzZTtcXG59XFxuXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1tYXRlcmlhbCAuc2VsZWN0ZWQtbGlzdCAuYy1idG46aG92ZXIsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1kYXJrIC5zZWxlY3RlZC1saXN0IC5jLWJ0bjpob3ZlcixcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWN1c3RvbSAuc2VsZWN0ZWQtbGlzdCAuYy1idG46aG92ZXIge1xcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1tcy1vdXRsaW5lLXN0cm9uZyk7XFxufVxcblxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtbWF0ZXJpYWwgLnNlbGVjdGVkLWxpc3QgLmMtYnRuLmRpc2FibGVkLFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtZGFyayAuc2VsZWN0ZWQtbGlzdCAuYy1idG4uZGlzYWJsZWQsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1jdXN0b20gLnNlbGVjdGVkLWxpc3QgLmMtYnRuLmRpc2FibGVkIHtcXG4gIGJhY2tncm91bmQ6IHZhcigtLW1zLXN1cmZhY2UpO1xcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG4gIG9wYWNpdHk6IDAuNzI7XFxufVxcblxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtbWF0ZXJpYWwgLnNlbGVjdGVkLWxpc3QgLmMtbGlzdCxcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWRhcmsgLnNlbGVjdGVkLWxpc3QgLmMtbGlzdCxcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWN1c3RvbSAuc2VsZWN0ZWQtbGlzdCAuYy1saXN0IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4OiAxIDEgYXV0bztcXG4gIGZsZXgtd3JhcDogd3JhcDtcXG4gIGdhcDogOHB4O1xcbiAgd2lkdGg6IGF1dG87XFxuICBtaW4td2lkdGg6IDA7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbiAgZmxvYXQ6IG5vbmU7XFxufVxcblxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtbWF0ZXJpYWwgLnNlbGVjdGVkLWxpc3QgLmMtbGlzdCAuYy10b2tlbixcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWRhcmsgLnNlbGVjdGVkLWxpc3QgLmMtbGlzdCAuYy10b2tlbixcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWN1c3RvbSAuc2VsZWN0ZWQtbGlzdCAuYy1saXN0IC5jLXRva2VuIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxuICBtaW4taGVpZ2h0OiAzMnB4O1xcbiAgbWF4LXdpZHRoOiAxMDAlO1xcbiAgcGFkZGluZzogNnB4IDMwcHggNnB4IDEycHg7XFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1tcy1jaGlwLWJnKTtcXG4gIGNvbG9yOiB2YXIoLS1tcy1jaGlwLXRleHQpO1xcbiAgYm9yZGVyLXJhZGl1czogOTk5cHg7XFxuICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAxcHggcmdiYSgxMDMsIDgwLCAxNjQsIDAuMDgpO1xcbiAgbGluZS1oZWlnaHQ6IDEuMzU7XFxuICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xcbiAgb3ZlcmZsb3ctd3JhcDogYW55d2hlcmU7XFxuICBtYXJnaW46IDA7XFxuICBmbG9hdDogbm9uZTtcXG59XFxuXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1tYXRlcmlhbCAuc2VsZWN0ZWQtbGlzdCAuYy1saXN0IC5jLXRva2VuIC5jLWxhYmVsLFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtZGFyayAuc2VsZWN0ZWQtbGlzdCAuYy1saXN0IC5jLXRva2VuIC5jLWxhYmVsLFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtY3VzdG9tIC5zZWxlY3RlZC1saXN0IC5jLWxpc3QgLmMtdG9rZW4gLmMtbGFiZWwge1xcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgZmxvYXQ6IG5vbmU7XFxuICBtaW4td2lkdGg6IDA7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxuICBsaW5lLWhlaWdodDogMS4zO1xcbiAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XFxuICBvdmVyZmxvdy13cmFwOiBhbnl3aGVyZTtcXG59XFxuXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1tYXRlcmlhbCAuc2VsZWN0ZWQtbGlzdCAuYy1saXN0IC5jLXRva2VuIC5mYS1yZW1vdmUsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1kYXJrIC5zZWxlY3RlZC1saXN0IC5jLWxpc3QgLmMtdG9rZW4gLmZhLXJlbW92ZSxcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWN1c3RvbSAuc2VsZWN0ZWQtbGlzdCAuYy1saXN0IC5jLXRva2VuIC5mYS1yZW1vdmUge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgcmlnaHQ6IDEwcHg7XFxuICB0b3A6IDUwJTtcXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgd2lkdGg6IDE2cHg7XFxuICBoZWlnaHQ6IDE2cHg7XFxuICBtYXJnaW4tbGVmdDogMDtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcXG4gIGNvbG9yOiB2YXIoLS1tcy1jaGlwLXJlbW92ZSk7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtbWF0ZXJpYWwgLnNlbGVjdGVkLWxpc3QgLmNvdW50cGxhY2Vob2xkZXIsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1kYXJrIC5zZWxlY3RlZC1saXN0IC5jb3VudHBsYWNlaG9sZGVyLFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtY3VzdG9tIC5zZWxlY3RlZC1saXN0IC5jb3VudHBsYWNlaG9sZGVyIHtcXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbiAgZmxleDogMCAwIGF1dG87XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICBhbGlnbi1zZWxmOiBjZW50ZXI7XFxuICBtYXJnaW46IDA7XFxuICBsaW5lLWhlaWdodDogMTtcXG4gIGNvbG9yOiB2YXIoLS1tcy1vbi1zdXJmYWNlLW11dGVkKTtcXG4gIGZvbnQtc2l6ZTogMC44cmVtO1xcbiAgZm9udC13ZWlnaHQ6IDYwMDtcXG59XFxuXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1tYXRlcmlhbCAuc2VsZWN0ZWQtbGlzdCAuZmEtYW5nbGUtZG93bixcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWRhcmsgLnNlbGVjdGVkLWxpc3QgLmZhLWFuZ2xlLWRvd24sXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1jdXN0b20gLnNlbGVjdGVkLWxpc3QgLmZhLWFuZ2xlLWRvd24sXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1tYXRlcmlhbCAuc2VsZWN0ZWQtbGlzdCAuZmEtYW5nbGUtdXAsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1kYXJrIC5zZWxlY3RlZC1saXN0IC5mYS1hbmdsZS11cCxcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWN1c3RvbSAuc2VsZWN0ZWQtbGlzdCAuZmEtYW5nbGUtdXAge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiA1MCU7XFxuICByaWdodDogMTZweDtcXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgd2lkdGg6IDIwcHg7XFxuICBoZWlnaHQ6IDIwcHg7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XFxuICBjb2xvcjogdmFyKC0tbXMtb24tc3VyZmFjZS1tdXRlZCk7XFxuICBmb250LXNpemU6IDE1cHQ7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1tYXRlcmlhbCAuZHJvcGRvd24tbGlzdCxcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWRhcmsgLmRyb3Bkb3duLWxpc3QsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1jdXN0b20gLmRyb3Bkb3duLWxpc3Qge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBwYWRkaW5nLXRvcDogOHB4O1xcbiAgei1pbmRleDogOTk5OTk7XFxufVxcblxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtbWF0ZXJpYWwgLmFycm93LXVwLFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtZGFyayAuYXJyb3ctdXAsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1jdXN0b20gLmFycm93LXVwLFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtbWF0ZXJpYWwgLmFycm93LWRvd24sXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1kYXJrIC5hcnJvdy1kb3duLFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtY3VzdG9tIC5hcnJvdy1kb3duLFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtbWF0ZXJpYWwgLmFycm93LTIsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1kYXJrIC5hcnJvdy0yLFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtY3VzdG9tIC5hcnJvdy0yIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcblxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtbWF0ZXJpYWwgLmxpc3QtYXJlYSxcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWRhcmsgLmxpc3QtYXJlYSxcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWN1c3RvbSAubGlzdC1hcmVhIHtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBib3JkZXItcmFkaXVzOiAyMnB4O1xcbiAgYmFja2dyb3VuZDogdmFyKC0tbXMtc3VyZmFjZSk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tcy1vdXRsaW5lKTtcXG4gIGJveC1zaGFkb3c6IHZhcigtLW1zLXNoYWRvdyk7XFxuICBtYXJnaW46IDA7XFxufVxcblxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtbWF0ZXJpYWwgLnNlbGVjdC1hbGwsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1kYXJrIC5zZWxlY3QtYWxsLFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtY3VzdG9tIC5zZWxlY3QtYWxsIHtcXG4gIHBhZGRpbmc6IDEwcHggMTRweDtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1tcy1kaXZpZGVyKTtcXG4gIGJhY2tncm91bmQ6IHZhcigtLW1zLXNlY3Rpb24tYmcpO1xcbiAgdGV4dC1hbGlnbjogbGVmdDtcXG59XFxuXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1tYXRlcmlhbCAubGlzdC1maWx0ZXIsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1kYXJrIC5saXN0LWZpbHRlcixcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWN1c3RvbSAubGlzdC1maWx0ZXIge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBtaW4taGVpZ2h0OiA1MnB4O1xcbiAgcGFkZGluZy1sZWZ0OiA0OHB4O1xcbiAgcGFkZGluZy1yaWdodDogNDRweDtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1tcy1kaXZpZGVyKTtcXG4gIGJhY2tncm91bmQ6IHZhcigtLW1zLXN1cmZhY2UpO1xcbn1cXG5cXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLW1hdGVyaWFsIC5saXN0LWZpbHRlciBpbnB1dCxcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWRhcmsgLmxpc3QtZmlsdGVyIGlucHV0LFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtY3VzdG9tIC5saXN0LWZpbHRlciBpbnB1dCB7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIGJvcmRlcjogMDtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgY29sb3I6IHZhcigtLW1zLW9uLXN1cmZhY2UpO1xcbiAgZm9udDogaW5oZXJpdDtcXG4gIHBhZGRpbmc6IDA7XFxufVxcblxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtbWF0ZXJpYWwgLmxpc3QtZmlsdGVyIGlucHV0OjpwbGFjZWhvbGRlcixcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWRhcmsgLmxpc3QtZmlsdGVyIGlucHV0OjpwbGFjZWhvbGRlcixcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWN1c3RvbSAubGlzdC1maWx0ZXIgaW5wdXQ6OnBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1tcy1vbi1zdXJmYWNlLW11dGVkKTtcXG59XFxuXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1tYXRlcmlhbCAubGlzdC1maWx0ZXIgaW5wdXQ6Zm9jdXMsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1kYXJrIC5saXN0LWZpbHRlciBpbnB1dDpmb2N1cyxcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWN1c3RvbSAubGlzdC1maWx0ZXIgaW5wdXQ6Zm9jdXMge1xcbiAgb3V0bGluZTogbm9uZTtcXG59XFxuXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1tYXRlcmlhbCAubGlzdC1maWx0ZXIgLmZhLFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtZGFyayAubGlzdC1maWx0ZXIgLmZhLFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtY3VzdG9tIC5saXN0LWZpbHRlciAuZmEge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiA1MCU7XFxuICBsZWZ0OiAxNnB4O1xcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICB3aWR0aDogMThweDtcXG4gIGhlaWdodDogMThweDtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcXG4gIGNvbG9yOiB2YXIoLS1tcy1vbi1zdXJmYWNlLW11dGVkKTtcXG59XFxuXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1tYXRlcmlhbCAuZHJvcGRvd24tbGlzdCB1bCxcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWRhcmsgLmRyb3Bkb3duLWxpc3QgdWwsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1jdXN0b20gLmRyb3Bkb3duLWxpc3QgdWwge1xcbiAgbGlzdC1zdHlsZTogbm9uZTtcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDhweDtcXG4gIG92ZXJmbG93OiBhdXRvO1xcbn1cXG5cXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLW1hdGVyaWFsIC5kcm9wZG93bi1saXN0IHVsIGxpLFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtZGFyayAuZHJvcGRvd24tbGlzdCB1bCBsaSxcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWN1c3RvbSAuZHJvcGRvd24tbGlzdCB1bCBsaSB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgbWluLWhlaWdodDogMDtcXG4gIG1hcmdpbjogNHB4O1xcbiAgcGFkZGluZzogMTJweCAxNHB4O1xcbiAgYm9yZGVyLXJhZGl1czogMTRweDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxuICBsaW5lLWhlaWdodDogMS4zNTtcXG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4xNnMgZWFzZSwgY29sb3IgMC4xNnMgZWFzZTtcXG59XFxuXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1tYXRlcmlhbCAuZHJvcGRvd24tbGlzdCB1bCBsaTpmaXJzdC1jaGlsZCxcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWRhcmsgLmRyb3Bkb3duLWxpc3QgdWwgbGk6Zmlyc3QtY2hpbGQsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1jdXN0b20gLmRyb3Bkb3duLWxpc3QgdWwgbGk6Zmlyc3QtY2hpbGQge1xcbiAgcGFkZGluZy10b3A6IDEycHg7XFxufVxcblxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtbWF0ZXJpYWwgLmRyb3Bkb3duLWxpc3QgdWwgbGk6bGFzdC1jaGlsZCxcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWRhcmsgLmRyb3Bkb3duLWxpc3QgdWwgbGk6bGFzdC1jaGlsZCxcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWN1c3RvbSAuZHJvcGRvd24tbGlzdCB1bCBsaTpsYXN0LWNoaWxkIHtcXG4gIHBhZGRpbmctYm90dG9tOiAxMnB4O1xcbn1cXG5cXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLW1hdGVyaWFsIC5kcm9wZG93bi1saXN0IHVsIGxpOmhvdmVyLFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtZGFyayAuZHJvcGRvd24tbGlzdCB1bCBsaTpob3ZlcixcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWN1c3RvbSAuZHJvcGRvd24tbGlzdCB1bCBsaTpob3ZlciB7XFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1tcy1zdXJmYWNlLXNvZnQpO1xcbn1cXG5cXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLW1hdGVyaWFsIC5wdXJlLWNoZWNrYm94LFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtZGFyayAucHVyZS1jaGVja2JveCxcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWN1c3RvbSAucHVyZS1jaGVja2JveCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcblxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtbWF0ZXJpYWwgLnB1cmUtY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF0gKyBsYWJlbCxcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWRhcmsgLnB1cmUtY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF0gKyBsYWJlbCxcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWN1c3RvbSAucHVyZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSArIGxhYmVsIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nLWxlZnQ6IDMycHg7XFxuICBjb2xvcjogaW5oZXJpdDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICB1c2VyLXNlbGVjdDogbm9uZTtcXG59XFxuXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1tYXRlcmlhbCAucHVyZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSArIGxhYmVsOmJlZm9yZSxcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWRhcmsgLnB1cmUtY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF0gKyBsYWJlbDpiZWZvcmUsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1jdXN0b20gLnB1cmUtY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF0gKyBsYWJlbDpiZWZvcmUge1xcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogNTAlO1xcbiAgbGVmdDogMDtcXG4gIHdpZHRoOiAxNnB4O1xcbiAgaGVpZ2h0OiAxNnB4O1xcbiAgbWFyZ2luLXRvcDogLTEwcHg7XFxuICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1tcy1vdXRsaW5lLXN0cm9uZyk7XFxuICBib3JkZXItcmFkaXVzOiA1cHg7XFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1tcy1zdXJmYWNlKTtcXG4gIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjE2cyBlYXNlLCBiYWNrZ3JvdW5kLWNvbG9yIDAuMTZzIGVhc2UsIGJveC1zaGFkb3cgMC4xNnMgZWFzZTtcXG59XFxuXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1tYXRlcmlhbCAucHVyZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSArIGxhYmVsOmFmdGVyLFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtZGFyayAucHVyZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSArIGxhYmVsOmFmdGVyLFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtY3VzdG9tIC5wdXJlLWNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdICsgbGFiZWw6YWZ0ZXIge1xcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogNTAlO1xcbiAgbGVmdDogNXB4O1xcbiAgd2lkdGg6IDhweDtcXG4gIGhlaWdodDogM3B4O1xcbiAgbWFyZ2luLXRvcDogLTRweDtcXG4gIGJvcmRlci1zdHlsZTogc29saWQ7XFxuICBib3JkZXItY29sb3I6ICNmZmZmZmY7XFxuICBib3JkZXItd2lkdGg6IDAgMCAzcHggM3B4O1xcbiAgYm9yZGVyLWltYWdlOiBub25lO1xcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpIHNjYWxlKDApO1xcbiAgdHJhbnNmb3JtLW9yaWdpbjogNTAlO1xcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMTZzIGVhc2U7XFxufVxcblxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtbWF0ZXJpYWwgLnB1cmUtY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF06Zm9jdXMgKyBsYWJlbDpiZWZvcmUsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1kYXJrIC5wdXJlLWNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdOmZvY3VzICsgbGFiZWw6YmVmb3JlLFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtY3VzdG9tIC5wdXJlLWNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdOmZvY3VzICsgbGFiZWw6YmVmb3JlLFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtbWF0ZXJpYWwgLnB1cmUtY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF06aG92ZXIgKyBsYWJlbDpiZWZvcmUsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1kYXJrIC5wdXJlLWNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdOmhvdmVyICsgbGFiZWw6YmVmb3JlLFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtY3VzdG9tIC5wdXJlLWNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdOmhvdmVyICsgbGFiZWw6YmVmb3JlIHtcXG4gIGJvcmRlci1jb2xvcjogdmFyKC0tbXMtcHJpbWFyeSk7XFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1tcy1zdXJmYWNlLXNvZnQpO1xcbn1cXG5cXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLW1hdGVyaWFsIC5wdXJlLWNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQgKyBsYWJlbDpiZWZvcmUsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1kYXJrIC5wdXJlLWNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQgKyBsYWJlbDpiZWZvcmUsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1jdXN0b20gLnB1cmUtY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCArIGxhYmVsOmJlZm9yZSB7XFxuICBib3JkZXItY29sb3I6IHZhcigtLW1zLXByaW1hcnkpO1xcbiAgYmFja2dyb3VuZDogdmFyKC0tbXMtcHJpbWFyeSk7XFxufVxcblxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtbWF0ZXJpYWwgLnB1cmUtY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCArIGxhYmVsOmFmdGVyLFxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtZGFyayAucHVyZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkICsgbGFiZWw6YWZ0ZXIsXFxuLnN0YWNrbGluZS1kcm9wZG93bi50aGVtZS1jdXN0b20gLnB1cmUtY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCArIGxhYmVsOmFmdGVyIHtcXG4gIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZykgc2NhbGUoMSk7XFxufVxcblxcbi5zdGFja2xpbmUtZHJvcGRvd24udGhlbWUtbWF0ZXJpYWwgLmxpc3QtbWVzc2FnZSxcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWRhcmsgLmxpc3QtbWVzc2FnZSxcXG4uc3RhY2tsaW5lLWRyb3Bkb3duLnRoZW1lLWN1c3RvbSAubGlzdC1tZXNzYWdlIHtcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDIwcHggMTRweDtcXG4gIGNvbG9yOiB2YXIoLS1tcy1vbi1zdXJmYWNlLW11dGVkKTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuXCJdLFxuICAgIHByb3ZpZGVyczogW0RST1BET1dOX0NPTlRST0xfVkFMVUVfQUNDRVNTT1IsIERST1BET1dOX0NPTlRST0xfVkFMSURBVElPTl1cbn0pXG5cbmV4cG9ydCBjbGFzcyBBbmd1bGFyTXVsdGlTZWxlY3QgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkNoYW5nZXMsIFZhbGlkYXRvciB7XG5cbiAgICBASW5wdXQoKVxuICAgIGRhdGE6IEFycmF5PExpc3RJdGVtPjtcblxuICAgIEBJbnB1dCgpXG4gICAgc2V0dGluZ3M6IERyb3Bkb3duU2V0dGluZ3M7XG5cbiAgICBAT3V0cHV0KCdvblNlbGVjdCcpXG4gICAgb25TZWxlY3Q6IEV2ZW50RW1pdHRlcjxMaXN0SXRlbT4gPSBuZXcgRXZlbnRFbWl0dGVyPExpc3RJdGVtPigpO1xuXG4gICAgQE91dHB1dCgnb25EZVNlbGVjdCcpXG4gICAgb25EZVNlbGVjdDogRXZlbnRFbWl0dGVyPExpc3RJdGVtPiA9IG5ldyBFdmVudEVtaXR0ZXI8TGlzdEl0ZW0+KCk7XG5cbiAgICBAT3V0cHV0KCdvblNlbGVjdEFsbCcpXG4gICAgb25TZWxlY3RBbGw6IEV2ZW50RW1pdHRlcjxBcnJheTxMaXN0SXRlbT4+ID0gbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxMaXN0SXRlbT4+KCk7XG5cbiAgICBAT3V0cHV0KCdvbkRlU2VsZWN0QWxsJylcbiAgICBvbkRlU2VsZWN0QWxsOiBFdmVudEVtaXR0ZXI8QXJyYXk8TGlzdEl0ZW0+PiA9IG5ldyBFdmVudEVtaXR0ZXI8QXJyYXk8TGlzdEl0ZW0+PigpO1xuXG4gICAgQE91dHB1dCgnb25PcGVuJylcbiAgICBvbk9wZW46IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICBAT3V0cHV0KCdvbkNsb3NlJylcbiAgICBvbkNsb3NlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgQENvbnRlbnRDaGlsZChJdGVtLCB7IHN0YXRpYzogZmFsc2UgfSkgaXRlbVRlbXBsOiBJdGVtO1xuICAgIEBDb250ZW50Q2hpbGQoQmFkZ2UsIHsgc3RhdGljOiBmYWxzZSB9KSBiYWRnZVRlbXBsOiBCYWRnZTtcblxuXG4gICAgQFZpZXdDaGlsZCgnc2VhcmNoSW5wdXQnLCB7IHN0YXRpYzogZmFsc2UgfSkgc2VhcmNoSW5wdXQ6IEVsZW1lbnRSZWY7XG5cbiAgICBwdWJsaWMgc2VsZWN0ZWRJdGVtczogQXJyYXk8TGlzdEl0ZW0+O1xuICAgIHB1YmxpYyBpc0FjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBpc1NlbGVjdEFsbDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBncm91cGVkRGF0YTogQXJyYXk8TGlzdEl0ZW0+O1xuICAgIGZpbHRlcjogYW55O1xuICAgIHB1YmxpYyBjaHVua0FycmF5OmFueVtdO1xuICAgIHB1YmxpYyBzY3JvbGxUb3A6YW55O1xuICAgIHB1YmxpYyBjaHVua0luZGV4OmFueVtdID0gW107XG4gICAgcHVibGljIGNhY2hlZEl0ZW1zOmFueVtdID0gW107XG4gICAgcHVibGljIHRvdGFsUm93czphbnk7XG4gICAgcHVibGljIGl0ZW1IZWlnaHQ6YW55ID0gNDEuNjtcbiAgICBwdWJsaWMgc2NyZWVuSXRlbXNMZW46YW55O1xuICAgIHB1YmxpYyBjYWNoZWRJdGVtc0xlbjphbnk7XG4gICAgcHVibGljIHRvdGFsSGVpZ2h0OiBhbnk7XG4gICAgcHVibGljIHNjcm9sbGVyOmFueTtcbiAgICBwdWJsaWMgbWF4QnVmZmVyOmFueTtcbiAgICBwdWJsaWMgbGFzdFNjcm9sbGVkOmFueTtcbiAgICBwdWJsaWMgbGFzdFJlcGFpbnRZOiBhbnk7XG5cbiAgICBkZWZhdWx0U2V0dGluZ3M6IERyb3Bkb3duU2V0dGluZ3MgPSB7XG4gICAgICAgIHNpbmdsZVNlbGVjdGlvbjogZmFsc2UsXG4gICAgICAgIHRleHQ6ICdTZWxlY3QnLFxuICAgICAgICBlbmFibGVDaGVja0FsbDogdHJ1ZSxcbiAgICAgICAgc2VsZWN0QWxsVGV4dDogJ1NlbGVjdCBBbGwnLFxuICAgICAgICB1blNlbGVjdEFsbFRleHQ6ICdVblNlbGVjdCBBbGwnLFxuICAgICAgICBlbmFibGVTZWFyY2hGaWx0ZXI6IGZhbHNlLFxuICAgICAgICBtYXhIZWlnaHQ6IDMwMCxcbiAgICAgICAgYmFkZ2VTaG93TGltaXQ6IDk5OTk5OTk5OTk5OSxcbiAgICAgICAgY2xhc3NlczogJycsXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgICAgc2VhcmNoUGxhY2Vob2xkZXJUZXh0OiAnU2VhcmNoJyxcbiAgICAgICAgc2hvd0NoZWNrYm94OiB0cnVlLFxuICAgICAgICBub0RhdGFMYWJlbDogJ05vIERhdGEgQXZhaWxhYmxlJyxcbiAgICAgICAgc2VhcmNoQXV0b2ZvY3VzOiB0cnVlLFxuICAgICAgICBsYXp5TG9hZGluZzogZmFsc2UsXG4gICAgICAgIGxhYmVsS2V5OiAnaXRlbU5hbWUnLFxuICAgICAgICB0aGVtZTogJ2NsYXNzaWMnLFxuICAgICAgICBza2luOiAnY2xhc3NpYydcbiAgICB9XG4gICAgcHVibGljIHBhcnNlRXJyb3I6IGJvb2xlYW47XG4gICAgY29uc3RydWN0b3IocHVibGljIF9lbGVtZW50UmVmIDogRWxlbWVudFJlZikge1xuXG4gICAgfVxuICAgIGdldFRoZW1lTmFtZSgpOiBzdHJpbmcge1xuICAgICAgICBsZXQgcmF3VGhlbWU6IGFueSA9ICdjbGFzc2ljJztcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MpIHtcbiAgICAgICAgICAgIHJhd1RoZW1lID0gdGhpcy5zZXR0aW5ncy5za2luIHx8IHRoaXMuc2V0dGluZ3MudGhlbWUgfHwgJ2NsYXNzaWMnO1xuICAgICAgICB9XG4gICAgICAgIGxldCB0aGVtZSA9IFN0cmluZyhyYXdUaGVtZSkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXmEtejAtOV8tXSsvZywgJy0nKTtcbiAgICAgICAgdGhlbWUgPSB0aGVtZS5yZXBsYWNlKC9eLSt8LSskL2csICcnKTtcbiAgICAgICAgcmV0dXJuIHRoZW1lIHx8ICdjbGFzc2ljJztcbiAgICB9XG4gICAgZ2V0RHJvcGRvd25DbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgICAgIGxldCB0aGVtZSA9IHRoaXMuZ2V0VGhlbWVOYW1lKCk7XG4gICAgICAgIGxldCBjbGFzc05hbWUgPSAndGhlbWUtJyArIHRoZW1lO1xuICAgICAgICBpZiAodGhlbWUgIT09ICdjbGFzc2ljJyAmJiB0aGVtZSAhPT0gJ21hdGVyaWFsJyAmJiB0aGVtZSAhPT0gJ2RhcmsnICYmIHRoZW1lICE9PSAnY3VzdG9tJykge1xuICAgICAgICAgICAgY2xhc3NOYW1lICs9ICcgdGhlbWUtY3VzdG9tJztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgY2xhc3NOYW1lICs9ICcgaXMtb3Blbic7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MgJiYgdGhpcy5zZXR0aW5ncy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgY2xhc3NOYW1lICs9ICcgaXMtZGlzYWJsZWQnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbGFzc05hbWU7XG4gICAgfVxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih0aGlzLmRlZmF1bHRTZXR0aW5ncywgdGhpcy5zZXR0aW5ncyk7XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmdyb3VwQnkpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBlZERhdGEgPSB0aGlzLnRyYW5zZm9ybURhdGEodGhpcy5kYXRhLCB0aGlzLnNldHRpbmdzLmdyb3VwQnkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudG90YWxSb3dzID0gKHRoaXMuZGF0YSAmJiB0aGlzLmRhdGEubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5jYWNoZWRJdGVtcyA9IHRoaXMuZGF0YTtcbiAgICAgICAgdGhpcy5zY3JlZW5JdGVtc0xlbiA9IE1hdGguY2VpbCh0aGlzLnNldHRpbmdzLm1heEhlaWdodCAvIHRoaXMuaXRlbUhlaWdodCk7XG4gICAgICAgIHRoaXMuY2FjaGVkSXRlbXNMZW4gPSB0aGlzLnNjcmVlbkl0ZW1zTGVuICogMztcbiAgICAgICAgdGhpcy50b3RhbEhlaWdodCA9IHRoaXMuaXRlbUhlaWdodCAqIHRoaXMudG90YWxSb3dzO1xuICAgICAgICB0aGlzLm1heEJ1ZmZlciA9IHRoaXMuc2NyZWVuSXRlbXNMZW4gKiB0aGlzLml0ZW1IZWlnaHQ7XG4gICAgICAgIHRoaXMubGFzdFNjcm9sbGVkID0gMDtcbiAgICAgICAgdGhpcy5yZW5kZXJDaHVuaygwLCB0aGlzLmNhY2hlZEl0ZW1zTGVuIC8gMik7XG4gICAgfVxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgaWYgKGNoYW5nZXMuZGF0YSAmJiAhY2hhbmdlcy5kYXRhLmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuZ3JvdXBCeSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBlZERhdGEgPSB0aGlzLnRyYW5zZm9ybURhdGEodGhpcy5kYXRhLCB0aGlzLnNldHRpbmdzLmdyb3VwQnkpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGEubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzLnNldHRpbmdzICYmICFjaGFuZ2VzLnNldHRpbmdzLmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24odGhpcy5kZWZhdWx0U2V0dGluZ3MsIHRoaXMuc2V0dGluZ3MpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nRG9DaGVjaygpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT0gMCB8fCB0aGlzLmRhdGEubGVuZ3RoID09IDAgfHwgdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA8IHRoaXMuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2VsZWN0QWxsID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBpZih0aGlzLnNldHRpbmdzLmxhenlMb2FkaW5nKXtcbiAgICAgICAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibGF6eUNvbnRhaW5lclwiKVswXS5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLm9uU2Nyb2xsLmJpbmQodGhpcykpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9uSXRlbUNsaWNrKGl0ZW06IExpc3RJdGVtLCBpbmRleDogbnVtYmVyLCBldnQ6IEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZm91bmQgPSB0aGlzLmlzU2VsZWN0ZWQoaXRlbSk7XG4gICAgICAgIGxldCBsaW1pdCA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPCB0aGlzLnNldHRpbmdzLmxpbWl0U2VsZWN0aW9uID8gdHJ1ZSA6IGZhbHNlO1xuXG4gICAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmxpbWl0U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxpbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkU2VsZWN0ZWQoaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25TZWxlY3QuZW1pdChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFNlbGVjdGVkKGl0ZW0pO1xuICAgICAgICAgICAgICAgIHRoaXMub25TZWxlY3QuZW1pdChpdGVtKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVTZWxlY3RlZChpdGVtKTtcbiAgICAgICAgICAgIHRoaXMub25EZVNlbGVjdC5lbWl0KGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzU2VsZWN0QWxsIHx8IHRoaXMuZGF0YS5sZW5ndGggPiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmlzU2VsZWN0QWxsID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGF0YS5sZW5ndGggPT0gdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5pc1NlbGVjdEFsbCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHVibGljIHZhbGlkYXRlKGM6IEZvcm1Db250cm9sKTogYW55IHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHByaXZhdGUgb25Ub3VjaGVkQ2FsbGJhY2s6IChfOiBhbnkpID0+IHZvaWQgPSBub29wO1xuICAgIHByaXZhdGUgb25DaGFuZ2VDYWxsYmFjazogKF86IGFueSkgPT4gdm9pZCA9IG5vb3A7XG5cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmdzLnNpbmdsZVNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFt2YWx1ZVswXV07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTXlFeGNlcHRpb24oNDA0LCB7IFwibXNnXCI6IFwiU2luZ2xlIFNlbGVjdGlvbiBNb2RlLCBTZWxlY3RlZCBJdGVtcyBjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gb25lIGl0ZW0uXCIgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUuYm9keS5tc2cpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MubGltaXRTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdmFsdWUuc3BsaWNlKDAsIHRoaXMuc2V0dGluZ3MubGltaXRTZWxlY3Rpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID09PSB0aGlzLmRhdGEubGVuZ3RoICYmIHRoaXMuZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTZWxlY3RBbGwgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy9Gcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgICB9XG5cbiAgICAvL0Zyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSkge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZENhbGxiYWNrID0gZm47XG4gICAgfVxuICAgIHRyYWNrQnlGbihpbmRleDogbnVtYmVyLCBpdGVtOiBMaXN0SXRlbSkge1xuICAgICAgICByZXR1cm4gaXRlbS5pZDtcbiAgICB9XG4gICAgaXNTZWxlY3RlZChjbGlja2VkSXRlbTogTGlzdEl0ZW0pIHtcbiAgICAgICAgbGV0IGZvdW5kID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyAmJiB0aGlzLnNlbGVjdGVkSXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGlmIChjbGlja2VkSXRlbS5pZCA9PT0gaXRlbS5pZCkge1xuICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmb3VuZDtcbiAgICB9XG4gICAgYWRkU2VsZWN0ZWQoaXRlbTogTGlzdEl0ZW0pIHtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3Muc2luZ2xlU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayh0aGlzLnNlbGVjdGVkSXRlbXMpO1xuICAgICAgICB0aGlzLm9uVG91Y2hlZENhbGxiYWNrKHRoaXMuc2VsZWN0ZWRJdGVtcyk7XG4gICAgfVxuICAgIHJlbW92ZVNlbGVjdGVkKGNsaWNrZWRJdGVtOiBMaXN0SXRlbSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgJiYgdGhpcy5zZWxlY3RlZEl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBpZiAoY2xpY2tlZEl0ZW0uaWQgPT09IGl0ZW0uaWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuc3BsaWNlKHRoaXMuc2VsZWN0ZWRJdGVtcy5pbmRleE9mKGl0ZW0pLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayh0aGlzLnNlbGVjdGVkSXRlbXMpO1xuICAgICAgICB0aGlzLm9uVG91Y2hlZENhbGxiYWNrKHRoaXMuc2VsZWN0ZWRJdGVtcyk7XG4gICAgfVxuICAgIHRvZ2dsZURyb3Bkb3duKGV2dDogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0FjdGl2ZSA9ICF0aGlzLmlzQWN0aXZlO1xuICAgICAgICBpZiAodGhpcy5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3Muc2VhcmNoQXV0b2ZvY3VzICYmIHRoaXMuc2V0dGluZ3MuZW5hYmxlU2VhcmNoRmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5vbk9wZW4uZW1pdCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25DbG9zZS5lbWl0KGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgY2xvc2VEcm9wZG93bigpIHtcbiAgICAgICAgaWYodGhpcy5zZWFyY2hJbnB1dCl7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBcIlwiO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gW107XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmNhY2hlZEl0ZW1zO1xuICAgICAgICAgICAgdGhpcy50b3RhbEhlaWdodCA9IHRoaXMuaXRlbUhlaWdodCAqIHRoaXMuZGF0YS5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLnRvdGFsUm93cyA9IHRoaXMuZGF0YS5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZpZXcodGhpcy5zY3JvbGxUb3ApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlsdGVyID0gXCJcIjtcbiAgICAgICAgdGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9uQ2xvc2UuZW1pdChmYWxzZSk7XG4gICAgfVxuICAgIHRvZ2dsZVNlbGVjdEFsbCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzU2VsZWN0QWxsKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuZGF0YS5zbGljZSgpO1xuICAgICAgICAgICAgdGhpcy5pc1NlbGVjdEFsbCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sodGhpcy5zZWxlY3RlZEl0ZW1zKTtcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkQ2FsbGJhY2sodGhpcy5zZWxlY3RlZEl0ZW1zKTtcblxuICAgICAgICAgICAgdGhpcy5vblNlbGVjdEFsbC5lbWl0KHRoaXMuc2VsZWN0ZWRJdGVtcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuaXNTZWxlY3RBbGwgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayh0aGlzLnNlbGVjdGVkSXRlbXMpO1xuICAgICAgICAgICAgdGhpcy5vblRvdWNoZWRDYWxsYmFjayh0aGlzLnNlbGVjdGVkSXRlbXMpO1xuXG4gICAgICAgICAgICB0aGlzLm9uRGVTZWxlY3RBbGwuZW1pdCh0aGlzLnNlbGVjdGVkSXRlbXMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRyYW5zZm9ybURhdGEoYXJyOiBBcnJheTxMaXN0SXRlbT4sIGZpZWxkOiBhbnkpOiBBcnJheTxMaXN0SXRlbT4ge1xuICAgICAgICBjb25zdCBncm91cGVkT2JqOiBhbnkgPSBhcnIucmVkdWNlKChwcmV2OiBhbnksIGN1cjogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoIXByZXZbY3VyW2ZpZWxkXV0pIHtcbiAgICAgICAgICAgICAgICBwcmV2W2N1cltmaWVsZF1dID0gW2N1cl07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHByZXZbY3VyW2ZpZWxkXV0ucHVzaChjdXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICAgIH0sIHt9KTtcbiAgICAgICAgY29uc3QgdGVtcEFycjogYW55ID0gW107XG4gICAgICAgIE9iamVjdC5rZXlzKGdyb3VwZWRPYmopLm1hcChmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgdGVtcEFyci5wdXNoKHsga2V5OiB4LCB2YWx1ZTogZ3JvdXBlZE9ialt4XSB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0ZW1wQXJyO1xuICAgIH1cbiAgICByZW5kZXJDaHVuayhmcm9tUG9zOmFueSwgaG93TWFueTphbnkpIHtcbiAgICAgICAgdGhpcy5jaHVua0FycmF5ID0gW107XG4gICAgICAgIHRoaXMuY2h1bmtJbmRleCA9IFtdO1xuICAgICAgICB2YXIgZmluYWxJdGVtID0gZnJvbVBvcyArIGhvd01hbnk7XG4gICAgICAgIGlmIChmaW5hbEl0ZW0gPiB0aGlzLnRvdGFsUm93cylcbiAgICAgICAgICAgIGZpbmFsSXRlbSA9IHRoaXMudG90YWxSb3dzO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSBmcm9tUG9zOyBpIDwgZmluYWxJdGVtOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNodW5rSW5kZXgucHVzaCgoaSAqIHRoaXMuaXRlbUhlaWdodCkgKyAncHgnKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNodW5rQXJyYXkucHVzaCh0aGlzLmRhdGFbaV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHB1YmxpYyBvblNjcm9sbChlOmFueSkge1xuICAgICAgICB0aGlzLnNjcm9sbFRvcCA9IGUudGFyZ2V0LnNjcm9sbFRvcDtcbiAgICAgICAgdGhpcy51cGRhdGVWaWV3KHRoaXMuc2Nyb2xsVG9wKTtcblxuICAgIH1cbiAgICBwdWJsaWMgdXBkYXRlVmlldyhzY3JvbGxUb3A6YW55KXtcbiAgICAgICAgdmFyIHNjcm9sbFBvcyA9IHNjcm9sbFRvcCA/IHNjcm9sbFRvcDogMDtcbiAgICAgICAgIHZhciBmaXJzdCA9IChzY3JvbGxQb3MgLyB0aGlzLml0ZW1IZWlnaHQpIC0gdGhpcy5zY3JlZW5JdGVtc0xlbjtcbiAgICAgICAgdmFyIGZpcnN0VGVtcCA9IFwiXCIrZmlyc3Q7XG4gICAgICAgIGZpcnN0ID0gcGFyc2VJbnQoZmlyc3RUZW1wKSA8IDAgPyAwIDogcGFyc2VJbnQoZmlyc3RUZW1wKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyQ2h1bmsoZmlyc3QsIHRoaXMuY2FjaGVkSXRlbXNMZW4pO1xuICAgICAgICAgICAgdGhpcy5sYXN0UmVwYWludFkgPSBzY3JvbGxQb3M7XG4gICAgfVxuICAgIHB1YmxpYyBmaWx0ZXJJbmZpbml0ZUxpc3QoZXZ0OiBhbnkpe1xuICAgICAgICB2YXIgZmlsdGVyZWRFbGVtczpBcnJheTxhbnk+ID0gW107XG4gICAgICAgIHRoaXMuZGF0YSA9IHRoaXMuY2FjaGVkSXRlbXMuc2xpY2UoKTtcbiAgICAgICAgaWYoZXZ0LnRhcmdldC52YWx1ZS50b1N0cmluZygpICE9ICcnKXtcbiAgICAgICAgICB0aGlzLmRhdGEuZmlsdGVyKGZ1bmN0aW9uKGVsOmFueSl7XG4gICAgICAgICAgICAgIGZvcih2YXIgcHJvcCBpbiBlbCl7XG4gICAgICAgICAgICAgICAgICBpZihlbFtwcm9wXS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihldnQudGFyZ2V0LnZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkgPj0wICl7XG4gICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRFbGVtcy5wdXNoKGVsKTtcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy90aGlzLmNhY2hlZEl0ZW1zID0gdGhpcy5kYXRhO1xuICAgICAgICAgICAgdGhpcy50b3RhbEhlaWdodCA9IHRoaXMuaXRlbUhlaWdodCAqIGZpbHRlcmVkRWxlbXMubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy50b3RhbFJvd3MgPSBmaWx0ZXJlZEVsZW1zLmxlbmd0aDtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gZmlsdGVyZWRFbGVtcztcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmlldyh0aGlzLnNjcm9sbFRvcCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihldnQudGFyZ2V0LnZhbHVlLnRvU3RyaW5nKCkgPT0gJycgJiYgdGhpcy5jYWNoZWRJdGVtcy5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5jYWNoZWRJdGVtcztcbiAgICAgICAgICAgIHRoaXMudG90YWxIZWlnaHQgPSB0aGlzLml0ZW1IZWlnaHQgKiB0aGlzLmRhdGEubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy50b3RhbFJvd3MgPSB0aGlzLmRhdGEubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVWaWV3KHRoaXMuc2Nyb2xsVG9wKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZV0sXG4gICAgZGVjbGFyYXRpb25zOiBbQW5ndWxhck11bHRpU2VsZWN0LCBDbGlja091dHNpZGVEaXJlY3RpdmUsIFNjcm9sbERpcmVjdGl2ZSwgc3R5bGVEaXJlY3RpdmUsIExpc3RGaWx0ZXJQaXBlLCBJdGVtLCBUZW1wbGF0ZVJlbmRlcmVyLCBCYWRnZV0sXG4gICAgZXhwb3J0czogW0FuZ3VsYXJNdWx0aVNlbGVjdCwgQ2xpY2tPdXRzaWRlRGlyZWN0aXZlLCBTY3JvbGxEaXJlY3RpdmUsIHN0eWxlRGlyZWN0aXZlLCBMaXN0RmlsdGVyUGlwZSwgSXRlbSwgVGVtcGxhdGVSZW5kZXJlciwgQmFkZ2VdXG59KVxuZXhwb3J0IGNsYXNzIEFuZ3VsYXJNdWx0aVNlbGVjdE1vZHVsZSB7IH1cbiJdfQ==