fantasy-ngzorro 2.2.19 → 2.2.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -0
- package/bundles/fantasy-ngzorro.umd.js +70 -9
- package/bundles/fantasy-ngzorro.umd.js.map +1 -1
- package/bundles/fantasy-ngzorro.umd.min.js +1 -1
- package/bundles/fantasy-ngzorro.umd.min.js.map +1 -1
- package/esm2015/hd-detail-lines/hd-detail-lines.component.js +3 -3
- package/esm2015/hd-filter/hd-filter.component.js +42 -5
- package/esm2015/hd-form-lines/hd-form-lines.component.js +3 -3
- package/esm2015/hd-table/hd-table.component.js +16 -2
- package/esm5/hd-detail-lines/hd-detail-lines.component.js +3 -3
- package/esm5/hd-filter/hd-filter.component.js +52 -5
- package/esm5/hd-form-lines/hd-form-lines.component.js +3 -3
- package/esm5/hd-table/hd-table.component.js +16 -2
- package/fantasy-ngzorro.metadata.json +1 -1
- package/fesm2015/fantasy-ngzorro.js +60 -9
- package/fesm2015/fantasy-ngzorro.js.map +1 -1
- package/fesm5/fantasy-ngzorro.js +70 -9
- package/fesm5/fantasy-ngzorro.js.map +1 -1
- package/hd-filter/hd-filter.component.d.ts +4 -0
- package/hd-table/hd-table.component.d.ts +2 -0
- package/package.json +2 -2
|
@@ -329,6 +329,42 @@ var HdFilterComponent = /** @class */ (function () {
|
|
|
329
329
|
return;
|
|
330
330
|
}
|
|
331
331
|
};
|
|
332
|
+
/** 当前展示的筛选项数量(尊重 item.show,与展开/收起一致) */
|
|
333
|
+
/**
|
|
334
|
+
* 当前展示的筛选项数量(尊重 item.show,与展开/收起一致)
|
|
335
|
+
* @return {?}
|
|
336
|
+
*/
|
|
337
|
+
HdFilterComponent.prototype.getVisibleFilterCount = /**
|
|
338
|
+
* 当前展示的筛选项数量(尊重 item.show,与展开/收起一致)
|
|
339
|
+
* @return {?}
|
|
340
|
+
*/
|
|
341
|
+
function () {
|
|
342
|
+
return (this.filterList || []).filter((/**
|
|
343
|
+
* @param {?} item
|
|
344
|
+
* @return {?}
|
|
345
|
+
*/
|
|
346
|
+
function (item) { return item.show !== false; })).length;
|
|
347
|
+
};
|
|
348
|
+
/** 少条件时加宽字段列:1→18、2→9、≥3→6 */
|
|
349
|
+
/**
|
|
350
|
+
* 少条件时加宽字段列:1→18、2→9、≥3→6
|
|
351
|
+
* @return {?}
|
|
352
|
+
*/
|
|
353
|
+
HdFilterComponent.prototype.getFilterColSpan = /**
|
|
354
|
+
* 少条件时加宽字段列:1→18、2→9、≥3→6
|
|
355
|
+
* @return {?}
|
|
356
|
+
*/
|
|
357
|
+
function () {
|
|
358
|
+
/** @type {?} */
|
|
359
|
+
var n = this.getVisibleFilterCount();
|
|
360
|
+
if (n === 1) {
|
|
361
|
+
return 18;
|
|
362
|
+
}
|
|
363
|
+
if (n === 2) {
|
|
364
|
+
return 9;
|
|
365
|
+
}
|
|
366
|
+
return 6;
|
|
367
|
+
};
|
|
332
368
|
/**
|
|
333
369
|
* @return {?}
|
|
334
370
|
*/
|
|
@@ -336,10 +372,21 @@ var HdFilterComponent = /** @class */ (function () {
|
|
|
336
372
|
* @return {?}
|
|
337
373
|
*/
|
|
338
374
|
function () {
|
|
339
|
-
|
|
375
|
+
/** @type {?} */
|
|
376
|
+
var visibleCount = this.getVisibleFilterCount();
|
|
377
|
+
// ≤2 个可见条件时字段已加宽占满一行剩余,按钮不再 offset
|
|
378
|
+
if (visibleCount <= 2) {
|
|
379
|
+
return 0;
|
|
380
|
+
}
|
|
381
|
+
/** @type {?} */
|
|
382
|
+
var modular = visibleCount % 4;
|
|
383
|
+
if (visibleCount === 4) {
|
|
340
384
|
return 18;
|
|
341
385
|
}
|
|
342
|
-
|
|
386
|
+
// ≥3:沿用原 %4 逻辑,按可见数计算(避免收起后错位)
|
|
387
|
+
return this.isShowMore
|
|
388
|
+
? ((modular === 0 || visibleCount > 7) ? 0 : (3 - modular) * 6)
|
|
389
|
+
: (modular === 0 ? 18 : (3 - modular) * 6);
|
|
343
390
|
};
|
|
344
391
|
/**
|
|
345
392
|
* @private
|
|
@@ -1186,8 +1233,8 @@ var HdFilterComponent = /** @class */ (function () {
|
|
|
1186
1233
|
HdFilterComponent.decorators = [
|
|
1187
1234
|
{ type: Component, args: [{
|
|
1188
1235
|
selector: 'hd-filter',
|
|
1189
|
-
template: "<form nz-form [formGroup]=\"validateFilterForm\" class=\"ant-advanced-search-form hd-filter-container\"\n [class.hd-filter-container--no-padding]=\"hidePadding\">\n <!-- \u6574\u4F53\u7ED3\u6784 -->\n <div nz-row [nzGutter]=\"24\">\n <!-- \u5BF9\u7EC4\u4EF6\u5217\u8868\u5FAA\u73AF\u5904\u7406 -->\n <ng-container *ngFor=\"let filter of filterList\">\n <div nz-col [nzSpan]=\"6\" [hidden]=\"!filter.show\">\n <nz-form-item nzFlex>\n <nz-form-label class=\"hd-filter-label\" [nzNoColon]=\"true\"><span class=\"hd-red\" *ngIf=\"filter.require\">*</span>{{ filter.label }}\n </nz-form-label>\n <nz-form-control class=\"hd-filter-control\">\n <ng-container [ngSwitch]=\"filter.type\">\n <!-- \u8FD9\u91CC\u6570\u5B57\u5BF9\u5E94\u679A\u4E3E\u7C7B\u578B\uFF0C\u53EF\u5728hd-filter.service.ts\u6587\u4EF6\u4E2D\u67E5\u770B\u5BF9\u5E94\u5173\u7CFB -->\n <ng-container *ngSwitchCase=\"0\">\n <nz-input-group [nzSuffix]=\"inputCleanTemplate\">\n <input nz-input [placeholder]=\"filter.placeholder ? filter.placeholder : '\u8BF7\u8F93\u5165' + filter.label\"\n [formControlName]=\"filter.name\"\n (blur)=\"triggerEvent(filter.onBlurEvent || null, validateFilterForm.get(filter.name).value)\"/>\n </nz-input-group>\n <ng-template #inputCleanTemplate><i nz-icon nz-tooltip class=\"ant-input-clear-icon\" nzTheme=\"fill\"\n nzType=\"close-circle\" *ngIf=\"isAllowClear(filter) && validateFilterForm.get(filter.name).value\"\n (click)=\"inputClean(filter)\"></i></ng-template>\n </ng-container>\n <ng-container *ngSwitchCase=\"1\">\n <nz-select\n [nzShowSearch]=\"filter.selectOption.hdShowSearch != null ? filter.selectOption.hdShowSearch : true\"\n [nzAllowClear]=\"isAllowClear(filter)\"\n [nzServerSearch]=\"filter.selectOption.hdServerSearch || false\"\n [nzDropdownMatchSelectWidth]=\"filter.selectOption.hdDropdownMatchSelectWidth ? filter.selectOption.hdDropdownMatchSelectWidth : false\"\n (nzOpenChange)=\"onOpenChangeEvent(filter.onOpenChangeEvent || null, $event, filter.onOpenChangeEventDebounceTime, filter)\"\n (nzOnSearch)=\"onSearchEvent(filter.onSearchEvent || null, $event, filter.onSearchEventEventDebounceTime, filter.selectOption)\"\n [nzPlaceHolder]=\"filter.placeholder ? filter.placeholder : '\u8BF7\u9009\u62E9' + filter.label\"\n [formControlName]=\"filter.name\">\n <nz-option *ngFor=\"let selectItem of filter.selectOption.selectList\"\n [nzValue]=\"selectItem[filter.selectOption.value]\" [nzLabel]=\"filter.selectOption.showLabelAndValue ? '['+ selectItem[filter.selectOption.value] +']' +\n selectItem[filter.selectOption.label] : selectItem[filter.selectOption.label]\"></nz-option>\n </nz-select>\n </ng-container>\n <ng-container *ngSwitchCase=\"2\">\n <nz-date-picker *ngIf=\"filter.showTime\"\n [nzPlaceHolder]=\"filter.placeholder ? filter.placeholder : '\u8BF7\u9009\u62E9' + filter.label\"\n [formControlName]=\"filter.name\" [nzDisabledDate]=\"filter.hdDisabledDate\"\n [nzAllowClear]=\"isAllowClear(filter)\"\n nzShowTime nzFormat=\"yyyy-MM-dd HH:mm:ss\">\n </nz-date-picker>\n <nz-date-picker *ngIf=\"!filter.showTime\"\n [nzPlaceHolder]=\"filter.placeholder ? filter.placeholder : '\u8BF7\u9009\u62E9' + filter.label\"\n [formControlName]=\"filter.name\" [nzDisabledDate]=\"filter.hdDisabledDate\"\n [nzAllowClear]=\"isAllowClear(filter)\">\n </nz-date-picker>\n </ng-container>\n <ng-container *ngSwitchCase=\"3\">\n <nz-range-picker [nzPlaceHolder]=\"['\u5F00\u59CB\u65E5\u671F','\u7ED3\u675F\u65E5\u671F']\" [nzDisabledDate]=\"filter.hdDisabledDate\"\n [nzAllowClear]=\"isAllowClear(filter)\" [formControlName]=\"filter.name\">\n </nz-range-picker>\n </ng-container>\n <!-- \u591A\u9879\u9009\u62E9\u5668 -->\n <ng-container *ngSwitchCase=\"4\">\n <nz-select\n [nzDropdownMatchSelectWidth]=\"filter.selectOption.hdDropdownMatchSelectWidth ? filter.selectOption.hdDropdownMatchSelectWidth : false\"\n nzMode=\"multiple\"\n [nzShowSearch]=\"filter.selectOption.hdShowSearch != null ? filter.selectOption.hdShowSearch : true\"\n [nzAllowClear]=\"isAllowClear(filter)\"\n [nzPlaceHolder]=\"filter.placeholder ? filter.placeholder : '\u8BF7\u9009\u62E9' + filter.label\"\n [formControlName]=\"filter.name\" [nzServerSearch]=\"filter.selectOption.hdServerSearch || false\"\n (nzOpenChange)=\"onOpenChangeEvent(filter.onOpenChangeEvent || null, $event, filter.onOpenChangeEventDebounceTime, filter)\"\n (nzOnSearch)=\"onSearchEvent(filter.onSearchEvent || null, $event, filter.onSearchEventEventDebounceTime, filter.selectOption)\">\n <nz-option *ngFor=\"let selectItem of filter.selectOption.selectList\"\n [nzValue]=\"selectItem[filter.selectOption.value]\" [nzLabel]=\"filter.selectOption.showLabelAndValue ? '['+ selectItem[filter.selectOption.value] +']' +\n selectItem[filter.selectOption.label] : selectItem[filter.selectOption.label]\"></nz-option>\n </nz-select>\n </ng-container>\n <ng-container *ngSwitchCase=\"5\">\n <nz-cascader [nzOptions]=\"filter.cascaderOption.options\" [formControlName]=\"filter.name\"\n [nzAllowClear]=\"isAllowClear(filter)\"\n [nzShowSearch]=\"getCascaderShowSearch(filter.cascaderOption)\"\n [nzMenuClassName]=\"getCascaderMenuClassName(filter.cascaderOption)\"\n [nzMenuStyle]=\"getCascaderMenuStyle(filter.cascaderOption)\"\n [nzPlaceHolder]=\"filter.placeholder ? filter.placeholder : '\u8BF7\u9009\u62E9' + filter.label\">\n </nz-cascader>\n </ng-container>\n <ng-container *ngSwitchCase=\"6\">\n <nz-month-picker [formControlName]=\"filter.name\"\n [nzAllowClear]=\"isAllowClear(filter)\"\n [nzPlaceHolder]=\"filter.placeholder ? filter.placeholder : '\u8BF7\u9009\u62E9' + filter.label\"></nz-month-picker>\n </ng-container>\n <ng-container *ngSwitchCase=\"7\">\n <nz-input-number [formControlName]=\"filter.name\" [nzMin]=\"filter?.inputNumber?.min || 0\"\n [nzMax]=\"filter?.inputNumber?.max || 99999999\" [nzStep]=\"filter?.inputNumber?.step || 1\"\n [nzPlaceHolder]=\"'\u8BF7\u8F93\u5165' + filter.label\"\n [nzPrecision]=\"filter?.inputNumber?.precision != null ? filter.inputNumber.precision : 4\"\n (nzBlur)=\"triggerEvent(filter.onBlurEvent || null, validateFilterForm.get(filter.name).value)\">\n </nz-input-number>\n </ng-container>\n </ng-container>\n </nz-form-control>\n </nz-form-item>\n </div>\n </ng-container>\n\n <div class=\"hd-filter-btn\" nz-col [nzSpan]=\"6\" [nzOffset]=\"computeOffset()\">\n <!-- \u7A3F\u9762\u987A\u5E8F\uFF1A\u9ED8\u8BA4\u6761\u4EF6 \u2192 \u64CD\u4F5C(\u9F7F\u8F6E) \u2192 \u6536\u8D77 \u2192 \u67E5\u8BE2 \u2192 \u91CD\u7F6E -->\n <ng-container *ngIf=\"canUseScheme\">\n <a class=\"hd-filter-scheme-name\" (click)=\"openSwitchModal()\" nz-tooltip [nzTitle]=\"currentSchemeName\">\n <span class=\"hd-filter-scheme-name-text\">{{ currentSchemeName }}</span>\n <i nz-icon nzType=\"down\" nzTheme=\"outline\"></i>\n </a>\n <a class=\"hd-filter-scheme-op\" nz-dropdown [nzDropdownMenu]=\"schemeOpMenu\" nzTrigger=\"click\">\n <i nz-icon nzType=\"setting\" nzTheme=\"outline\"></i>\n \u64CD\u4F5C\n </a>\n <nz-dropdown-menu #schemeOpMenu=\"nzDropdownMenu\">\n <ul nz-menu>\n <li nz-menu-item (click)=\"saveCurrentScheme()\">\u4FDD\u5B58\u4E3A\u5F53\u524D</li>\n <li nz-menu-item (click)=\"openSaveAsModal()\">\u53E6\u5B58\u4E3A</li>\n <li nz-menu-item *ngIf=\"canDeleteCurrent()\"\n class=\"hd-filter-scheme-op-delete\"\n nz-popconfirm\n nzTitle=\"\u786E\u5B9A\u5220\u9664\u5F53\u524D\u7B5B\u9009\u7EC4\u5417\uFF1F\"\n nzPopconfirmPlacement=\"bottomRight\"\n (nzOnConfirm)=\"deleteCurrentScheme()\">\u5220\u9664</li>\n </ul>\n </nz-dropdown-menu>\n </ng-container>\n <a *ngIf=\"filterList.length > 7\" class=\"hd-filter-more\" (click)=\"showMore()\">\n {{ isShowMore ? '\u5C55\u5F00' : '\u6536\u8D77' }}\n <i nz-icon [nzType]=\"isShowMore ? 'down' : 'up'\"></i>\n </a>\n <hd-button type=\"primary\" (click)=\"submitForm()\">\u67E5\u8BE2</hd-button>\n <hd-button type=\"reset\" (click)=\"resetForm()\">\u91CD\u7F6E</hd-button>\n </div>\n </div>\n</form>\n\n<!-- \u9009\u62E9\u7B5B\u9009\u7EC4\uFF1A*ngIf \u907F\u514D\u672A\u6253\u5F00\u65F6 hd-form \u7A7A formList \u5BFC\u81F4 formGroup \u672A\u521D\u59CB\u5316\u62A5\u9519 -->\n<nz-modal\n [(nzVisible)]=\"switchModalVisible\"\n nzTitle=\"\u9009\u62E9\u7B5B\u9009\u7EC4\"\n nzWidth=\"560px\"\n [nzOkLoading]=\"schemeLoading\"\n (nzOnCancel)=\"closeSwitchModal()\"\n (nzOnOk)=\"confirmSwitch()\">\n <hd-form *ngIf=\"switchModalVisible\" [formList]=\"switchFormList\" (changeEvent)=\"switchFormChangeEvent($event)\"></hd-form>\n</nz-modal>\n\n<!-- \u53E6\u5B58\u4E3A -->\n<nz-modal\n [(nzVisible)]=\"saveAsModalVisible\"\n nzTitle=\"\u4FDD\u5B58\u7B5B\u9009\u7EC4\"\n nzWidth=\"560px\"\n [nzOkLoading]=\"schemeSaving\"\n (nzOnCancel)=\"closeSaveAsModal()\"\n (nzOnOk)=\"confirmSaveAs()\">\n <hd-form *ngIf=\"saveAsModalVisible\" [formList]=\"saveAsFormList\" (changeEvent)=\"saveAsFormChangeEvent($event)\"></hd-form>\n</nz-modal>\n",
|
|
1190
|
-
styles: ["::ng-deep .common-btn-group>a{font-size:14px;font-weight:400;color:#20b95d!important;white-space:nowrap}::ng-deep .common-btn-group .common-danger-btn:hover{color:#f05b24!important}::ng-deep .common-btn-group>a:hover{color:#20bd62!important}::ng-deep .common-btn-group>a:not(:last-child)::after{content:'';margin:0 2px}::ng-deep .common-billNumber>a{color:#3b77e3}button{box-shadow:unset;text-shadow:unset}::ng-deep .ant-form-item-label>label{color:#4b504e;font-size:14px}::ng-deep .ant-input-number-input{height:32px}::ng-deep .ant-input-number{height:32px}textarea.ant-input{height:auto;min-height:32px}::ng-deep .ant-select-selection--multiple{min-height:32px}::ng-deep .ant-select-selection--multiple .ant-select-selection__rendered>ul>li.ant-select-search--inline:only-child{margin-left:4px}::ng-deep .ant-select-selection__rendered>ul>li{height:26px!important;margin-top:3px!important;line-height:26px!important}::ng-deep .ant-advanced-search-form .ant-form-item{margin-bottom:0!important}::ng-deep .ant-select-selection--single{height:32px!important}::ng-deep .ant-input{height:32px}::ng-deep .ant-input[disabled]:hover{border-color:#d9d9d9!important}::ng-deep .ant-select-selection__rendered{line-height:32px!important}::ng-deep .ant-calendar-range-picker-input{text-align:left!important}::ng-deep .ant-calendar-picker{width:100%!important}::ng-deep .ant-row{margin-right:0!important;margin-left:0!important}::ng-deep .ant-col-6{padding-left:12px;padding-right:12px}::ng-deep .ant-col-12{padding-left:12px;padding-right:12px}::ng-deep .ant-col-18{padding-left:12px;padding-right:12px}::ng-deep .ant-col-24{padding-left:12px;padding-right:12px}::ng-deep .ant-alert-info{background-color:#f5f8f6;border:1px solid #cfe3d4}::ng-deep .hd-table-container .ant-table-td-left-sticky,::ng-deep .hd-table-container .ant-table-td-right-sticky,::ng-deep .hd-table-container .ant-table-th-left-sticky,::ng-deep .hd-table-container .ant-table-th-right-sticky{z-index:2;transform:translateZ(0)}::ng-deep .hd-table-container .ant-table-thead>tr>th.ant-table-th-left-sticky,::ng-deep .hd-table-container .ant-table-thead>tr>th.ant-table-th-right-sticky{background:#f5f8f6!important}::ng-deep .hd-table-container .ant-table-tbody>tr>td.ant-table-td-left-sticky,::ng-deep .hd-table-container .ant-table-tbody>tr>td.ant-table-td-right-sticky{background:#fff}::ng-deep .hd-table-container .ant-table-tbody>tr.ant-table-row-hover>td.ant-table-td-left-sticky,::ng-deep .hd-table-container .ant-table-tbody>tr.ant-table-row-hover>td.ant-table-td-right-sticky,::ng-deep .hd-table-container .ant-table-tbody>tr:hover>td.ant-table-td-left-sticky,::ng-deep .hd-table-container .ant-table-tbody>tr:hover>td.ant-table-td-right-sticky{background:#ecf8f1!important}::ng-deep .hd-table-container .ant-table-scroll-position-left .ant-table-td-right-sticky,::ng-deep .hd-table-container .ant-table-scroll-position-left .ant-table-th-right-sticky,::ng-deep .hd-table-container .ant-table-scroll-position-middle .ant-table-td-right-sticky,::ng-deep .hd-table-container .ant-table-scroll-position-middle .ant-table-th-right-sticky,::ng-deep .hd-table-container .ant-table-scroll-position-right .ant-table-td-right-sticky,::ng-deep .hd-table-container .ant-table-scroll-position-right .ant-table-th-right-sticky{box-shadow:none!important}::ng-deep .hd-table-container .ant-table-fixed-right{right:0!important}:host ::ng-deep th{background:#f5f8f6!important;font-weight:700!important;white-space:nowrap;font-size:14px;font-family:PingFangSC-Medium,PingFang SC;color:#2a3634;padding:8px!important;box-sizing:border-box}:host ::ng-deep td{font-weight:400;font-style:normal;font-size:14px;color:#2a3634;text-align:left;white-space:nowrap;padding:8px!important;box-sizing:border-box}::ng-deep .ant-pagination-options{display:inline-flex;align-items:center}::ng-deep .ant-pagination-options .ant-select,::ng-deep .ant-pagination-options .ant-select-selection--single{min-width:100px}::ng-deep .ant-pagination-options-size-changer.ant-select{min-width:100px}::ng-deep .ant-time-picker{width:100%}::ng-deep .cdk-overlay-pane .hd-cascader-menus.ant-cascader-menus>.ant-cascader-menu:only-child{width:-webkit-max-content!important;width:-moz-max-content!important;width:max-content!important;min-width:var(--hd-cascader-menu-min-width,auto);max-width:560px}::ng-deep .cdk-overlay-pane .hd-cascader-menus.ant-cascader-menus>.ant-cascader-menu:only-child .ant-cascader-menu-item{white-space:nowrap}.ant-input-number-disabled,.ant-input[disabled],.ant-select-disabled{color:#4b504e}.hd-filter-container{padding:20px 23px;background:#fff;border-radius:4px;margin-bottom:8px!important;font-size:14px}.hd-filter-container.hd-filter-container--no-padding{padding:0}.hd-filter-container .ant-row{display:flex;flex-wrap:wrap;align-items:flex-start;row-gap:4px;margin-right:0!important;margin-left:0!important}.hd-filter-container .ant-row::after,.hd-filter-container .ant-row::before{display:none}.hd-filter-container .ant-col
|
|
1236
|
+
template: "<form nz-form [formGroup]=\"validateFilterForm\" class=\"ant-advanced-search-form hd-filter-container\"\n [class.hd-filter-container--no-padding]=\"hidePadding\">\n <!-- \u6574\u4F53\u7ED3\u6784 -->\n <div nz-row [nzGutter]=\"24\">\n <!-- \u5BF9\u7EC4\u4EF6\u5217\u8868\u5FAA\u73AF\u5904\u7406 -->\n <ng-container *ngFor=\"let filter of filterList\">\n <div nz-col [nzSpan]=\"getFilterColSpan()\" [hidden]=\"!filter.show\">\n <nz-form-item nzFlex>\n <nz-form-label class=\"hd-filter-label\" [nzNoColon]=\"true\"><span class=\"hd-red\" *ngIf=\"filter.require\">*</span>{{ filter.label }}\n </nz-form-label>\n <nz-form-control class=\"hd-filter-control\">\n <ng-container [ngSwitch]=\"filter.type\">\n <!-- \u8FD9\u91CC\u6570\u5B57\u5BF9\u5E94\u679A\u4E3E\u7C7B\u578B\uFF0C\u53EF\u5728hd-filter.service.ts\u6587\u4EF6\u4E2D\u67E5\u770B\u5BF9\u5E94\u5173\u7CFB -->\n <ng-container *ngSwitchCase=\"0\">\n <nz-input-group [nzSuffix]=\"inputCleanTemplate\">\n <input nz-input [placeholder]=\"filter.placeholder ? filter.placeholder : '\u8BF7\u8F93\u5165' + filter.label\"\n [formControlName]=\"filter.name\"\n (blur)=\"triggerEvent(filter.onBlurEvent || null, validateFilterForm.get(filter.name).value)\"/>\n </nz-input-group>\n <ng-template #inputCleanTemplate><i nz-icon nz-tooltip class=\"ant-input-clear-icon\" nzTheme=\"fill\"\n nzType=\"close-circle\" *ngIf=\"isAllowClear(filter) && validateFilterForm.get(filter.name).value\"\n (click)=\"inputClean(filter)\"></i></ng-template>\n </ng-container>\n <ng-container *ngSwitchCase=\"1\">\n <nz-select\n [nzShowSearch]=\"filter.selectOption.hdShowSearch != null ? filter.selectOption.hdShowSearch : true\"\n [nzAllowClear]=\"isAllowClear(filter)\"\n [nzServerSearch]=\"filter.selectOption.hdServerSearch || false\"\n [nzDropdownMatchSelectWidth]=\"filter.selectOption.hdDropdownMatchSelectWidth ? filter.selectOption.hdDropdownMatchSelectWidth : false\"\n (nzOpenChange)=\"onOpenChangeEvent(filter.onOpenChangeEvent || null, $event, filter.onOpenChangeEventDebounceTime, filter)\"\n (nzOnSearch)=\"onSearchEvent(filter.onSearchEvent || null, $event, filter.onSearchEventEventDebounceTime, filter.selectOption)\"\n [nzPlaceHolder]=\"filter.placeholder ? filter.placeholder : '\u8BF7\u9009\u62E9' + filter.label\"\n [formControlName]=\"filter.name\">\n <nz-option *ngFor=\"let selectItem of filter.selectOption.selectList\"\n [nzValue]=\"selectItem[filter.selectOption.value]\" [nzLabel]=\"filter.selectOption.showLabelAndValue ? '['+ selectItem[filter.selectOption.value] +']' +\n selectItem[filter.selectOption.label] : selectItem[filter.selectOption.label]\"></nz-option>\n </nz-select>\n </ng-container>\n <ng-container *ngSwitchCase=\"2\">\n <nz-date-picker *ngIf=\"filter.showTime\"\n [nzPlaceHolder]=\"filter.placeholder ? filter.placeholder : '\u8BF7\u9009\u62E9' + filter.label\"\n [formControlName]=\"filter.name\" [nzDisabledDate]=\"filter.hdDisabledDate\"\n [nzAllowClear]=\"isAllowClear(filter)\"\n nzShowTime nzFormat=\"yyyy-MM-dd HH:mm:ss\">\n </nz-date-picker>\n <nz-date-picker *ngIf=\"!filter.showTime\"\n [nzPlaceHolder]=\"filter.placeholder ? filter.placeholder : '\u8BF7\u9009\u62E9' + filter.label\"\n [formControlName]=\"filter.name\" [nzDisabledDate]=\"filter.hdDisabledDate\"\n [nzAllowClear]=\"isAllowClear(filter)\">\n </nz-date-picker>\n </ng-container>\n <ng-container *ngSwitchCase=\"3\">\n <nz-range-picker [nzPlaceHolder]=\"['\u5F00\u59CB\u65E5\u671F','\u7ED3\u675F\u65E5\u671F']\" [nzDisabledDate]=\"filter.hdDisabledDate\"\n [nzAllowClear]=\"isAllowClear(filter)\" [formControlName]=\"filter.name\">\n </nz-range-picker>\n </ng-container>\n <!-- \u591A\u9879\u9009\u62E9\u5668 -->\n <ng-container *ngSwitchCase=\"4\">\n <nz-select\n [nzDropdownMatchSelectWidth]=\"filter.selectOption.hdDropdownMatchSelectWidth ? filter.selectOption.hdDropdownMatchSelectWidth : false\"\n nzMode=\"multiple\"\n [nzShowSearch]=\"filter.selectOption.hdShowSearch != null ? filter.selectOption.hdShowSearch : true\"\n [nzAllowClear]=\"isAllowClear(filter)\"\n [nzPlaceHolder]=\"filter.placeholder ? filter.placeholder : '\u8BF7\u9009\u62E9' + filter.label\"\n [formControlName]=\"filter.name\" [nzServerSearch]=\"filter.selectOption.hdServerSearch || false\"\n (nzOpenChange)=\"onOpenChangeEvent(filter.onOpenChangeEvent || null, $event, filter.onOpenChangeEventDebounceTime, filter)\"\n (nzOnSearch)=\"onSearchEvent(filter.onSearchEvent || null, $event, filter.onSearchEventEventDebounceTime, filter.selectOption)\">\n <nz-option *ngFor=\"let selectItem of filter.selectOption.selectList\"\n [nzValue]=\"selectItem[filter.selectOption.value]\" [nzLabel]=\"filter.selectOption.showLabelAndValue ? '['+ selectItem[filter.selectOption.value] +']' +\n selectItem[filter.selectOption.label] : selectItem[filter.selectOption.label]\"></nz-option>\n </nz-select>\n </ng-container>\n <ng-container *ngSwitchCase=\"5\">\n <nz-cascader [nzOptions]=\"filter.cascaderOption.options\" [formControlName]=\"filter.name\"\n [nzAllowClear]=\"isAllowClear(filter)\"\n [nzShowSearch]=\"getCascaderShowSearch(filter.cascaderOption)\"\n [nzMenuClassName]=\"getCascaderMenuClassName(filter.cascaderOption)\"\n [nzMenuStyle]=\"getCascaderMenuStyle(filter.cascaderOption)\"\n [nzPlaceHolder]=\"filter.placeholder ? filter.placeholder : '\u8BF7\u9009\u62E9' + filter.label\">\n </nz-cascader>\n </ng-container>\n <ng-container *ngSwitchCase=\"6\">\n <nz-month-picker [formControlName]=\"filter.name\"\n [nzAllowClear]=\"isAllowClear(filter)\"\n [nzPlaceHolder]=\"filter.placeholder ? filter.placeholder : '\u8BF7\u9009\u62E9' + filter.label\"></nz-month-picker>\n </ng-container>\n <ng-container *ngSwitchCase=\"7\">\n <nz-input-number [formControlName]=\"filter.name\" [nzMin]=\"filter?.inputNumber?.min || 0\"\n [nzMax]=\"filter?.inputNumber?.max || 99999999\" [nzStep]=\"filter?.inputNumber?.step || 1\"\n [nzPlaceHolder]=\"'\u8BF7\u8F93\u5165' + filter.label\"\n [nzPrecision]=\"filter?.inputNumber?.precision != null ? filter.inputNumber.precision : 4\"\n (nzBlur)=\"triggerEvent(filter.onBlurEvent || null, validateFilterForm.get(filter.name).value)\">\n </nz-input-number>\n </ng-container>\n </ng-container>\n </nz-form-control>\n </nz-form-item>\n </div>\n </ng-container>\n\n <div class=\"hd-filter-btn\" nz-col [nzSpan]=\"6\" [nzOffset]=\"computeOffset()\">\n <!-- \u7A3F\u9762\u987A\u5E8F\uFF1A\u9ED8\u8BA4\u6761\u4EF6 \u2192 \u64CD\u4F5C(\u9F7F\u8F6E) \u2192 \u6536\u8D77 \u2192 \u67E5\u8BE2 \u2192 \u91CD\u7F6E -->\n <ng-container *ngIf=\"canUseScheme\">\n <a class=\"hd-filter-scheme-name\" (click)=\"openSwitchModal()\" nz-tooltip [nzTitle]=\"currentSchemeName\">\n <span class=\"hd-filter-scheme-name-text\">{{ currentSchemeName }}</span>\n <i nz-icon nzType=\"down\" nzTheme=\"outline\"></i>\n </a>\n <a class=\"hd-filter-scheme-op\" nz-dropdown [nzDropdownMenu]=\"schemeOpMenu\" nzTrigger=\"click\">\n <i nz-icon nzType=\"setting\" nzTheme=\"outline\"></i>\n \u64CD\u4F5C\n </a>\n <nz-dropdown-menu #schemeOpMenu=\"nzDropdownMenu\">\n <ul nz-menu>\n <li nz-menu-item (click)=\"saveCurrentScheme()\">\u4FDD\u5B58\u4E3A\u5F53\u524D</li>\n <li nz-menu-item (click)=\"openSaveAsModal()\">\u53E6\u5B58\u4E3A</li>\n <li nz-menu-item *ngIf=\"canDeleteCurrent()\"\n class=\"hd-filter-scheme-op-delete\"\n nz-popconfirm\n nzTitle=\"\u786E\u5B9A\u5220\u9664\u5F53\u524D\u7B5B\u9009\u7EC4\u5417\uFF1F\"\n nzPopconfirmPlacement=\"bottomRight\"\n (nzOnConfirm)=\"deleteCurrentScheme()\">\u5220\u9664</li>\n </ul>\n </nz-dropdown-menu>\n </ng-container>\n <a *ngIf=\"filterList.length > 7\" class=\"hd-filter-more\" (click)=\"showMore()\">\n {{ isShowMore ? '\u5C55\u5F00' : '\u6536\u8D77' }}\n <i nz-icon [nzType]=\"isShowMore ? 'down' : 'up'\"></i>\n </a>\n <hd-button type=\"primary\" (click)=\"submitForm()\">\u67E5\u8BE2</hd-button>\n <hd-button type=\"reset\" (click)=\"resetForm()\">\u91CD\u7F6E</hd-button>\n </div>\n </div>\n</form>\n\n<!-- \u9009\u62E9\u7B5B\u9009\u7EC4\uFF1A*ngIf \u907F\u514D\u672A\u6253\u5F00\u65F6 hd-form \u7A7A formList \u5BFC\u81F4 formGroup \u672A\u521D\u59CB\u5316\u62A5\u9519 -->\n<nz-modal\n [(nzVisible)]=\"switchModalVisible\"\n nzTitle=\"\u9009\u62E9\u7B5B\u9009\u7EC4\"\n nzWidth=\"560px\"\n [nzOkLoading]=\"schemeLoading\"\n (nzOnCancel)=\"closeSwitchModal()\"\n (nzOnOk)=\"confirmSwitch()\">\n <hd-form *ngIf=\"switchModalVisible\" [formList]=\"switchFormList\" (changeEvent)=\"switchFormChangeEvent($event)\"></hd-form>\n</nz-modal>\n\n<!-- \u53E6\u5B58\u4E3A -->\n<nz-modal\n [(nzVisible)]=\"saveAsModalVisible\"\n nzTitle=\"\u4FDD\u5B58\u7B5B\u9009\u7EC4\"\n nzWidth=\"560px\"\n [nzOkLoading]=\"schemeSaving\"\n (nzOnCancel)=\"closeSaveAsModal()\"\n (nzOnOk)=\"confirmSaveAs()\">\n <hd-form *ngIf=\"saveAsModalVisible\" [formList]=\"saveAsFormList\" (changeEvent)=\"saveAsFormChangeEvent($event)\"></hd-form>\n</nz-modal>\n",
|
|
1237
|
+
styles: ["::ng-deep .common-btn-group>a{font-size:14px;font-weight:400;color:#20b95d!important;white-space:nowrap}::ng-deep .common-btn-group .common-danger-btn:hover{color:#f05b24!important}::ng-deep .common-btn-group>a:hover{color:#20bd62!important}::ng-deep .common-btn-group>a:not(:last-child)::after{content:'';margin:0 2px}::ng-deep .common-billNumber>a{color:#3b77e3}button{box-shadow:unset;text-shadow:unset}::ng-deep .ant-form-item-label>label{color:#4b504e;font-size:14px}::ng-deep .ant-input-number-input{height:32px}::ng-deep .ant-input-number{height:32px}textarea.ant-input{height:auto;min-height:32px}::ng-deep .ant-select-selection--multiple{min-height:32px}::ng-deep .ant-select-selection--multiple .ant-select-selection__rendered>ul>li.ant-select-search--inline:only-child{margin-left:4px}::ng-deep .ant-select-selection__rendered>ul>li{height:26px!important;margin-top:3px!important;line-height:26px!important}::ng-deep .ant-advanced-search-form .ant-form-item{margin-bottom:0!important}::ng-deep .ant-select-selection--single{height:32px!important}::ng-deep .ant-input{height:32px}::ng-deep .ant-input[disabled]:hover{border-color:#d9d9d9!important}::ng-deep .ant-select-selection__rendered{line-height:32px!important}::ng-deep .ant-calendar-range-picker-input{text-align:left!important}::ng-deep .ant-calendar-picker{width:100%!important}::ng-deep .ant-row{margin-right:0!important;margin-left:0!important}::ng-deep .ant-col-6{padding-left:12px;padding-right:12px}::ng-deep .ant-col-12{padding-left:12px;padding-right:12px}::ng-deep .ant-col-18{padding-left:12px;padding-right:12px}::ng-deep .ant-col-24{padding-left:12px;padding-right:12px}::ng-deep .ant-alert-info{background-color:#f5f8f6;border:1px solid #cfe3d4}::ng-deep .hd-table-container .ant-table-td-left-sticky,::ng-deep .hd-table-container .ant-table-td-right-sticky,::ng-deep .hd-table-container .ant-table-th-left-sticky,::ng-deep .hd-table-container .ant-table-th-right-sticky{z-index:2;transform:translateZ(0)}::ng-deep .hd-table-container .ant-table-thead>tr>th.ant-table-th-left-sticky,::ng-deep .hd-table-container .ant-table-thead>tr>th.ant-table-th-right-sticky{background:#f5f8f6!important}::ng-deep .hd-table-container .ant-table-tbody>tr>td.ant-table-td-left-sticky,::ng-deep .hd-table-container .ant-table-tbody>tr>td.ant-table-td-right-sticky{background:#fff}::ng-deep .hd-table-container .ant-table-tbody>tr.ant-table-row-hover>td.ant-table-td-left-sticky,::ng-deep .hd-table-container .ant-table-tbody>tr.ant-table-row-hover>td.ant-table-td-right-sticky,::ng-deep .hd-table-container .ant-table-tbody>tr:hover>td.ant-table-td-left-sticky,::ng-deep .hd-table-container .ant-table-tbody>tr:hover>td.ant-table-td-right-sticky{background:#ecf8f1!important}::ng-deep .hd-table-container .ant-table-scroll-position-left .ant-table-td-right-sticky,::ng-deep .hd-table-container .ant-table-scroll-position-left .ant-table-th-right-sticky,::ng-deep .hd-table-container .ant-table-scroll-position-middle .ant-table-td-right-sticky,::ng-deep .hd-table-container .ant-table-scroll-position-middle .ant-table-th-right-sticky,::ng-deep .hd-table-container .ant-table-scroll-position-right .ant-table-td-right-sticky,::ng-deep .hd-table-container .ant-table-scroll-position-right .ant-table-th-right-sticky{box-shadow:none!important}::ng-deep .hd-table-container .ant-table-fixed-right{right:0!important}:host ::ng-deep th{background:#f5f8f6!important;font-weight:700!important;white-space:nowrap;font-size:14px;font-family:PingFangSC-Medium,PingFang SC;color:#2a3634;padding:8px!important;box-sizing:border-box}:host ::ng-deep td{font-weight:400;font-style:normal;font-size:14px;color:#2a3634;text-align:left;white-space:nowrap;padding:8px!important;box-sizing:border-box}::ng-deep .ant-pagination-options{display:inline-flex;align-items:center}::ng-deep .ant-pagination-options .ant-select,::ng-deep .ant-pagination-options .ant-select-selection--single{min-width:100px}::ng-deep .ant-pagination-options-size-changer.ant-select{min-width:100px}::ng-deep .ant-time-picker{width:100%}::ng-deep .cdk-overlay-pane .hd-cascader-menus.ant-cascader-menus>.ant-cascader-menu:only-child{width:-webkit-max-content!important;width:-moz-max-content!important;width:max-content!important;min-width:var(--hd-cascader-menu-min-width,auto);max-width:560px}::ng-deep .cdk-overlay-pane .hd-cascader-menus.ant-cascader-menus>.ant-cascader-menu:only-child .ant-cascader-menu-item{white-space:nowrap}.ant-input-number-disabled,.ant-input[disabled],.ant-select-disabled{color:#4b504e}:host{display:block;width:100%}.hd-filter-container{width:100%;box-sizing:border-box;padding:20px 23px;background:#fff;border-radius:4px;margin-bottom:8px!important;font-size:14px}.hd-filter-container.hd-filter-container--no-padding{padding:0}.hd-filter-container .ant-row{display:flex;flex-wrap:wrap;align-items:flex-start;width:100%;row-gap:4px;margin-right:0!important;margin-left:0!important}.hd-filter-container .ant-row::after,.hd-filter-container .ant-row::before{display:none}.hd-filter-container .ant-row>[class*=ant-col]{float:none;padding-left:0!important;padding-right:0!important;box-sizing:border-box}.hd-filter-container .ant-col-6{flex:0 0 25%;max-width:25%}.hd-filter-container .ant-col-9{flex:0 0 37.5%;max-width:37.5%}.hd-filter-container .ant-col-18{flex:0 0 75%;max-width:75%}.hd-filter-container .hd-filter-label{width:124px;word-break:break-all;font-size:14px}.hd-filter-container .hd-filter-label ::ng-deep label{font-size:14px}.hd-filter-container .hd-filter-control{width:calc(100% - 124px)}.hd-filter-container ::ng-deep .ant-calendar-picker{width:100%}.hd-filter-container .hd-filter-more{color:#20b95d;white-space:nowrap;flex-shrink:0}.hd-filter-container .hd-filter-btn{height:40px;display:inline-flex;align-items:center;justify-content:flex-end;gap:10px;max-width:100%;min-width:0;padding-left:12px;box-sizing:border-box}.hd-filter-container hd-button{margin-left:0;flex-shrink:0}.hd-filter-container ::ng-deep .ant-advanced-search-form .ant-form-item{margin-bottom:0!important}.hd-filter-container ::ng-deep .ant-select-selection--single{height:32px!important}.hd-filter-container ::ng-deep .ant-input{height:32px!important}.hd-filter-container ::ng-deep .ant-calendar-range-picker-input{text-align:left!important}.hd-filter-container .ant-input-number{width:100%}.hd-filter-container .hd-red{color:#f5222d}.hd-filter-container .hd-filter-scheme-name,.hd-filter-container .hd-filter-scheme-op{color:#4e5369;white-space:nowrap;display:inline-flex;align-items:center;gap:4px;padding:3px;margin:0;box-sizing:border-box}.hd-filter-container .hd-filter-scheme-name i[nz-icon],.hd-filter-container .hd-filter-scheme-op i[nz-icon]{font-size:14px;flex-shrink:0}.hd-filter-container .hd-filter-scheme-name{flex:0 1 auto;max-width:160px;min-width:0;overflow:hidden}.hd-filter-container .hd-filter-scheme-name .hd-filter-scheme-name-text{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.hd-filter-container .hd-filter-scheme-name i[nz-icon]{font-size:12px}.hd-filter-container .hd-filter-scheme-op{flex-shrink:0}::ng-deep .hd-filter-scheme-op-delete{color:#f5222d!important}"]
|
|
1191
1238
|
}] }
|
|
1192
1239
|
];
|
|
1193
1240
|
/** @nocollapse */
|
|
@@ -1339,4 +1386,4 @@ if (false) {
|
|
|
1339
1386
|
*/
|
|
1340
1387
|
HdFilterComponent.prototype.schemeStore;
|
|
1341
1388
|
}
|
|
1342
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGQtZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2ZhbnRhc3ktbmd6b3Jyby8iLCJzb3VyY2VzIjpbImhkLWZpbHRlci9oZC1maWx0ZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFJTCxRQUFRLEVBQ1IsTUFBTSxFQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQVUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0QsT0FBTyxFQUFZLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsb0JBQW9CLEVBQ3BCLHFCQUFxQixHQUN0QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFDTCw2QkFBNkIsRUFDN0Isc0JBQXNCLEVBRXRCLG1CQUFtQixFQUNwQixNQUFNLG9CQUFvQixDQUFDO0FBRTVCO0lBb0RFLDJCQUNVLEVBQWUsRUFDNkIsV0FBZ0M7UUFGdEYsaUJBY0M7UUFiUyxPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQzZCLGdCQUFXLEdBQVgsV0FBVyxDQUFxQjs7OztRQTdDN0QsdUJBQWtCLEdBQUcsS0FBSyxDQUFDOzs7O1FBSTNCLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBRW5DLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqQyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUcxQyxlQUFVLEdBQVksSUFB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REFBOEM7Ozs7O0lBRTlDLCtDQUFxRDs7Ozs7SUFDckQsbURBQXlEOzs7OztJQUN6RCwwQ0FBZ0Q7Ozs7O0lBQ2hELDRDQUFrRDs7Ozs7O0lBR2xELGdEQUF5RDs7Ozs7SUFDekQsa0RBQXNDOztJQUV0Qyx1Q0FBdUM7O0lBQ3ZDLDBDQUFxQzs7SUFDckMsOENBQWtEOztJQUNsRCwwQ0FBc0I7O0lBQ3RCLHlDQUFxQjs7SUFFckIsK0NBQTJCOztJQUMzQiwyQ0FBcUM7O0lBQ3JDLCtDQUE4Qjs7SUFFOUIsK0NBQTJCOztJQUMzQiwyQ0FBcUM7O0lBQ3JDLCtDQUE4Qjs7SUFFOUIsOENBQTJEOzs7OztJQUMzRCw2Q0FBa0Q7O0lBK25CbEQsa0RBQThDOztJQUM5QyxxREFBb0Q7O0lBQ3BELGlEQUE0Qzs7Ozs7SUE5bkIxQywrQkFBdUI7Ozs7O0lBQ3ZCLHdDQUFvRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZpbHRlciwgRmlsdGVyTGlzdFR5cGUgfSBmcm9tICcuL2hkLWZpbHRlci5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1JdGVtLCBGb3JtTGlzdFR5cGUgfSBmcm9tICcuLi9oZC1mb3JtL2hkLWZvcm0uc2VydmljZSc7XG5pbXBvcnQge1xuICBnZXRDYXNjYWRlck1lbnVDbGFzc05hbWUsXG4gIGdldENhc2NhZGVyTWVudVN0eWxlLFxuICBnZXRDYXNjYWRlclNob3dTZWFyY2gsXG59IGZyb20gJy4uL3V0aWxzL2Nhc2NhZGVyLnV0aWwnO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJbnB1dEJvb2xlYW4gfSBmcm9tICduZy16b3Jyby1hbnRkJztcbmltcG9ydCB7XG4gIEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FLFxuICBIRF9GSUxURVJfU0NIRU1FX1NUT1JFLFxuICBIZEZpbHRlclNjaGVtZSxcbiAgSGRGaWx0ZXJTY2hlbWVTdG9yZVxufSBmcm9tICcuL2hkLWZpbHRlci1zY2hlbWUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdoZC1maWx0ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vaGQtZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaGQtZmlsdGVyLmNvbXBvbmVudC5sZXNzJ11cbn0pXG5leHBvcnQgY2xhc3MgSGRGaWx0ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcblxuICBASW5wdXQoKSBmaWx0ZXJMaXN0OiBBcnJheTxGaWx0ZXI+O1xuICAvKiog5piv5ZCm5ZCv55So562b6YCJ57uE77yI6buY6K6k5YWz6Zet77yJICovXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBlbmFibGVGaWx0ZXJTY2hlbWUgPSBmYWxzZTtcbiAgLyoqIOetm+mAieWZqOagh+ivhu+8jOW8gOWQr+etm+mAiee7hOaXtuW/heS8oCAqL1xuICBASW5wdXQoKSBmaWx0ZXJTY2hlbWVLZXk6IHN0cmluZztcbiAgLyoqIOaYr+WQpuWOu+aOiSBoZC1maWx0ZXItY29udGFpbmVyIOeahCBwYWRkaW5n77yM6buY6K6kIGZhbHNlICovXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBoaWRlUGFkZGluZyA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSBzZWFyY2hFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHJlc2V0RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgdmFsaWRhdGVGaWx0ZXJGb3JtOiBGb3JtR3JvdXA7XG4gIGlzU2hvd01vcmU6IGJvb2xlYW4gPSB0cnVlO1xuICBmaWx0ZXJMaXN0TW9kdWxhcjogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBzZWFyY2hTdWJqZWN0ID0gbmV3IFN1YmplY3Q8eyBmbjogYW55LCBldmVudDogYW55LCBzZWxlY3RPcHRpb24/OiBhbnk7IH0+KCk7XG4gIHByaXZhdGUgZGVib3VuY2VUaW1lb3V0OiBudW1iZXIgPSAwO1xuICBwcml2YXRlIG9wZW5DaGFuZ2VTdWJqZWN0ID0gbmV3IFN1YmplY3Q8eyBmbjogYW55OyBldmVudDogYW55IH0+KCk7XG4gIHByaXZhdGUgb3BlbkNoYW5nZURlYm91bmNlVGltZW91dDogbnVtYmVyID0gMDtcblxuICBwcml2YXRlIHNlYXJjaFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIG9wZW5DaGFuZ2VTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBzY2hlbWVMb2FkU3ViOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgc2NoZW1lQWN0aW9uU3ViOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG5cbiAgLyoqIOmhtemdoumFjee9rueahOWIneWni+WAvO+8iOiZmuaLn+OAjOm7mOiupOadoeS7tuOAje+8iSAqL1xuICBwcml2YXRlIGRlZmF1bHRGaWx0ZXJWYWx1ZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgcHJpdmF0ZSBkZWZhdWx0VmFsdWVzQ2FwdHVyZWQgPSBmYWxzZTtcblxuICBzY2hlbWVMaXN0OiBBcnJheTxIZEZpbHRlclNjaGVtZT4gPSBbXTtcbiAgY3VycmVudFNjaGVtZTogSGRGaWx0ZXJTY2hlbWUgPSBudWxsO1xuICBjdXJyZW50U2NoZW1lTmFtZSA9IEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FO1xuICBzY2hlbWVMb2FkaW5nID0gZmFsc2U7XG4gIHNjaGVtZVNhdmluZyA9IGZhbHNlO1xuXG4gIHN3aXRjaE1vZGFsVmlzaWJsZSA9IGZhbHNlO1xuICBzd2l0Y2hGb3JtTGlzdDogQXJyYXk8Rm9ybUl0ZW0+ID0gW107XG4gIHN3aXRjaFZhbGlkYXRlRm9ybTogRm9ybUdyb3VwO1xuXG4gIHNhdmVBc01vZGFsVmlzaWJsZSA9IGZhbHNlO1xuICBzYXZlQXNGb3JtTGlzdDogQXJyYXk8Rm9ybUl0ZW0+ID0gW107XG4gIHNhdmVBc1ZhbGlkYXRlRm9ybTogRm9ybUdyb3VwO1xuXG4gIHJlYWRvbmx5IGRlZmF1bHRTY2hlbWVOYW1lID0gSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUU7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3dpdGNoRGVmYXVsdEtleSA9ICdfX0RFRkFVTFRfXyc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChIRF9GSUxURVJfU0NIRU1FX1NUT1JFKSBwcml2YXRlIHNjaGVtZVN0b3JlOiBIZEZpbHRlclNjaGVtZVN0b3JlXG4gICkge1xuICAgIHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uID0gdGhpcy5zZWFyY2hTdWJqZWN0LnBpcGUoXG4gICAgICBkZWJvdW5jZVRpbWUodGhpcy5kZWJvdW5jZVRpbWVvdXQpXG4gICAgKS5zdWJzY3JpYmUoKHsgZm4sIGV2ZW50LCBzZWxlY3RPcHRpb24gfSkgPT4gdGhpcy50cmlnZ2VyRXZlbnQoZm4sIGV2ZW50LCBzZWxlY3RPcHRpb24pKTtcbiAgICB0aGlzLm9wZW5DaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLm9wZW5DaGFuZ2VTdWJqZWN0XG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUodGhpcy5vcGVuQ2hhbmdlRGVib3VuY2VUaW1lb3V0KSlcbiAgICAgIC5zdWJzY3JpYmUoKHsgZm4sIGV2ZW50IH0pID0+IHtcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoZm4sIGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmluaXQoKTtcbiAgICAvLyDpppbmrKHliqDovb3lj6rlnKjov5nph4zor7fmsYLkuIDmrKHvvJtuZ09uQ2hhbmdlcyDpppbmrKHkuZ/kvJrluKbkuIogZW5hYmxlRmlsdGVyU2NoZW1lL2ZpbHRlclNjaGVtZUtlee+8jOmBv+WFjemHjeWkjeiwg+aOpeWPo1xuICAgIHRoaXMudHJ5TG9hZFNjaGVtZXModHJ1ZSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXNbJ2ZpbHRlckxpc3QnXSkge1xuICAgICAgdGhpcy5pbml0KCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydlbmFibGVGaWx0ZXJTY2hlbWUnXSB8fCBjaGFuZ2VzWydmaWx0ZXJTY2hlbWVLZXknXSkge1xuICAgICAgLy8g6aaW5qyh5Y+Y5pu05LiOIG5nT25Jbml0IOmHjeWkje+8iOesrOS6jOasoeS8miB1bnN1YnNjcmliZSDnrKzkuIDmrKHvvIzooajnjrDkuLror7fmsYLml6Dov5Tlm57vvInvvJvku4XlkI7nu63liIfmjaLlho3liqDovb1cbiAgICAgIGNvbnN0IGVuYWJsZUxhdGVyID0gY2hhbmdlc1snZW5hYmxlRmlsdGVyU2NoZW1lJ10gJiYgIWNoYW5nZXNbJ2VuYWJsZUZpbHRlclNjaGVtZSddLmZpcnN0Q2hhbmdlO1xuICAgICAgY29uc3Qga2V5TGF0ZXIgPSBjaGFuZ2VzWydmaWx0ZXJTY2hlbWVLZXknXSAmJiAhY2hhbmdlc1snZmlsdGVyU2NoZW1lS2V5J10uZmlyc3RDaGFuZ2U7XG4gICAgICBpZiAoZW5hYmxlTGF0ZXIgfHwga2V5TGF0ZXIpIHtcbiAgICAgICAgdGhpcy50cnlMb2FkU2NoZW1lcyh0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5zZWFyY2hTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wZW5DaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMub3BlbkNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zY2hlbWVMb2FkU3ViKSB7XG4gICAgICB0aGlzLnNjaGVtZUxvYWRTdWIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2NoZW1lQWN0aW9uU3ViKSB7XG4gICAgICB0aGlzLnNjaGVtZUFjdGlvblN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBjYW5Vc2VTY2hlbWUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhKHRoaXMuZW5hYmxlRmlsdGVyU2NoZW1lICYmIHRoaXMuZmlsdGVyU2NoZW1lS2V5ICYmIHRoaXMuc2NoZW1lU3RvcmUpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaXNTaG93TW9yZSA9IHRydWU7XG4gICAgaWYgKCF0aGlzLmNoZWNrTGlzdCh0aGlzLmZpbHRlckxpc3QpKSB7XG4gICAgICB0aHJvdyAnZmlsdGVy57uE5Lu25pWw5o2u5qC85byP5LiN6KeE6IyDJztcbiAgICB9XG4gICAgaWYgKCF0aGlzLmZpbHRlckxpc3QpIHtcbiAgICAgIHRoaXMuZmlsdGVyTGlzdCA9IFtdO1xuICAgIH1cbiAgICB0aGlzLmZpbHRlckxpc3RNb2R1bGFyID0gdGhpcy5maWx0ZXJMaXN0Lmxlbmd0aCAlIDQ7XG4gICAgY29uc3QgZm9ybUdyb3VwTGlzdCA9IHt9O1xuICAgIHRoaXMuZmlsdGVyTGlzdC5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgZm9ybUdyb3VwTGlzdFtpdGVtLm5hbWVdID0gdGhpcy5mYi5jb250cm9sKGl0ZW0udmFsdWUsIFtdKTtcbiAgICAgIGl0ZW0uc2hvdyA9IGluZGV4IDwgNztcbiAgICB9KTtcbiAgICB0aGlzLnZhbGlkYXRlRmlsdGVyRm9ybSA9IHRoaXMuZmIuZ3JvdXAoZm9ybUdyb3VwTGlzdCk7XG4gICAgaWYgKCF0aGlzLmRlZmF1bHRWYWx1ZXNDYXB0dXJlZCkge1xuICAgICAgdGhpcy5kZWZhdWx0RmlsdGVyVmFsdWVzID0gdGhpcy5jbG9uZVBsYWluKHRoaXMuZ2V0RmlsdGVyRGF0YSgpKTtcbiAgICAgIHRoaXMuZGVmYXVsdFZhbHVlc0NhcHR1cmVkID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5maWx0ZXJMaXN0LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGlmIChpdGVtLm9uQ2hhbmdlRXZlbnQpIHtcbiAgICAgICAgaWYgKGl0ZW0ub25DaGFuZ2VFdmVudERlYm91bmNlVGltZSkge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGVGaWx0ZXJGb3JtLmdldChpdGVtLm5hbWUpLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIGRlYm91bmNlVGltZShpdGVtLm9uQ2hhbmdlRXZlbnREZWJvdW5jZVRpbWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHZhbHVlID0+IHRoaXMudHJpZ2dlckV2ZW50KGl0ZW0ub25DaGFuZ2VFdmVudCwgdmFsdWUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRlRmlsdGVyRm9ybS5nZXQoaXRlbS5uYW1lKS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHZhbHVlID0+IHRoaXMudHJpZ2dlckV2ZW50KGl0ZW0ub25DaGFuZ2VFdmVudCwgdmFsdWUpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb25TZWFyY2hFdmVudChmbjogYW55LCBldmVudDogYW55LCBvblNlYXJjaEV2ZW50RGVib3VuY2VUaW1lOiBhbnksIHNlbGVjdE9wdGlvbj86IGFueSkge1xuICAgIGlmIChvblNlYXJjaEV2ZW50RGVib3VuY2VUaW1lKSB7XG4gICAgICB0aGlzLmRlYm91bmNlVGltZW91dCA9IG9uU2VhcmNoRXZlbnREZWJvdW5jZVRpbWU7XG4gICAgICBpZiAodGhpcy5zZWFyY2hTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgdGhpcy5zZWFyY2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uID0gdGhpcy5zZWFyY2hTdWJqZWN0LnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlVGltZW91dClcbiAgICAgICkuc3Vic2NyaWJlKCh7IGZuLCBldmVudCwgc2VsZWN0T3B0aW9uIH0pID0+IHRoaXMudHJpZ2dlckV2ZW50KGZuLCBldmVudCwgc2VsZWN0T3B0aW9uKSk7XG4gICAgICB0aGlzLnNlYXJjaFN1YmplY3QubmV4dCh7IGZuLCBldmVudCwgc2VsZWN0T3B0aW9uIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRyaWdnZXJFdmVudChmbiwgZXZlbnQsIHNlbGVjdE9wdGlvbik7XG4gICAgfVxuICB9XG5cbiAgb25PcGVuQ2hhbmdlRXZlbnQoXG4gICAgZm46IGFueSxcbiAgICBvcGVuOiBib29sZWFuLFxuICAgIG9uT3BlbkNoYW5nZUV2ZW50RGVib3VuY2VUaW1lOiBhbnksXG4gICAgZmlsdGVyPzogRmlsdGVyLFxuICApIHtcbiAgICBpZiAoIWZuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIOWxleW8gOaXtuWFiOa4heepuuaXpyBvcHRpb25z77yM6YG/5YWN5p2h5Lu25Y+Y5YyW5ZCO6K+35rGC6L+U5Zue5YmN5LuN5bGV56S65LiK5LiA5om55LiL5ouJ5pWw5o2uXG4gICAgaWYgKG9wZW4pIHtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3RPcHRpb25zT25PcGVuKGZpbHRlcik7XG4gICAgfVxuICAgIGNvbnN0IGRlYm91bmNlTXMgPVxuICAgICAgb25PcGVuQ2hhbmdlRXZlbnREZWJvdW5jZVRpbWUgIT0gbnVsbFxuICAgICAgICA/IG9uT3BlbkNoYW5nZUV2ZW50RGVib3VuY2VUaW1lXG4gICAgICAgIDogMDtcbiAgICAvLyDmnKrphY3nva7miJbkuLogMO+8muWQjOatpeinpuWPke+8jOS4jei1sCBkZWJvdW5jZVRpbWXvvIjpgb/lhY3lvILmraXvvIlcbiAgICBpZiAoIWRlYm91bmNlTXMpIHtcbiAgICAgIGlmIChvcGVuKSB7XG4gICAgICAgIHRoaXMudHJpZ2dlckV2ZW50KGZuLCBvcGVuKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vcGVuQ2hhbmdlRGVib3VuY2VUaW1lb3V0ID0gZGVib3VuY2VNcztcbiAgICBpZiAodGhpcy5vcGVuQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLm9wZW5DaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgdGhpcy5vcGVuQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5vcGVuQ2hhbmdlU3ViamVjdFxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMub3BlbkNoYW5nZURlYm91bmNlVGltZW91dCkpXG4gICAgICAuc3Vic2NyaWJlKCh7IGZuLCBldmVudCB9KSA9PiB7XG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgIHRoaXMudHJpZ2dlckV2ZW50KGZuLCBldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIHRoaXMub3BlbkNoYW5nZVN1YmplY3QubmV4dCh7IGZuLCBldmVudDogb3BlbiB9KTtcbiAgfVxuXG4gIC8qKiDmnIkgb25PcGVuQ2hhbmdlRXZlbnQg5pe25bGV5byA5LiL5ouJ5YWI5riF56m66YCJ6aG577yM55Sx5Lia5Yqh5Zue6LCD5YaN5YaZ5YWl5paw5pWw5o2uICovXG4gIHByaXZhdGUgY2xlYXJTZWxlY3RPcHRpb25zT25PcGVuKGZpbHRlcjogRmlsdGVyKTogdm9pZCB7XG4gICAgaWYgKCFmaWx0ZXIgfHwgIWZpbHRlci5zZWxlY3RPcHRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgb3B0ID0gZmlsdGVyLnNlbGVjdE9wdGlvbjtcbiAgICBpZiAob3B0LnNlbGVjdExpc3QgIT0gbnVsbCkge1xuICAgICAgb3B0LnNlbGVjdExpc3QgPSBbXTtcbiAgICB9XG4gIH1cblxuICB0cmlnZ2VyRXZlbnQoZm46IGFueSwgZXZlbnQ6IGFueSwgc2VsZWN0T3B0aW9uPzogYW55KSB7XG4gICAgaWYgKGZuICYmIHNlbGVjdE9wdGlvbikge1xuICAgICAgZm4oZXZlbnQsIHNlbGVjdE9wdGlvbik7XG4gICAgfSBlbHNlIGlmIChmbikge1xuICAgICAgZm4oZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgY29tcHV0ZU9mZnNldCgpIHtcbiAgICBpZiAodGhpcy5maWx0ZXJMaXN0Lmxlbmd0aCA9PT0gNCkge1xuICAgICAgcmV0dXJuIDE4O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5pc1Nob3dNb3JlID8gKCh0aGlzLmZpbHRlckxpc3RNb2R1bGFyID09PSAwIHx8IHRoaXMuZmlsdGVyTGlzdC5sZW5ndGggPiA3KSA/IDAgOiAoMyAtIHRoaXMuZmlsdGVyTGlzdE1vZHVsYXIpICogNikgOiAodGhpcy5maWx0ZXJMaXN0TW9kdWxhciA9PT0gMCA/IDE4IDogKDMgLSB0aGlzLmZpbHRlckxpc3RNb2R1bGFyKSAqIDYpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0xpc3QobGlzdDogQXJyYXk8RmlsdGVyPik6IGJvb2xlYW4ge1xuICAgIGlmICghbGlzdCB8fCAobGlzdCAmJiBsaXN0Lmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBuYW1lTGlzdCA9IFtdO1xuICAgIGxpc3QuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgbmFtZUxpc3QucHVzaChpdGVtLm5hbWUpO1xuICAgIH0pO1xuICAgIGlmIChbLi4ubmV3IFNldChuYW1lTGlzdCldLmxlbmd0aCAhPT0gbGlzdC5sZW5ndGgpIHtcbiAgICAgIHRocm93ICdmaWx0ZXLnu4Tku7bmlbDmja7moLzlvI/kuI3op4TojIPvvIzlrZjlnKjph43lpI1uYW1l5YC8ISc7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHVibGljIHN1Ym1pdEZvcm0oKTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hFdmVudC5lbWl0KHRoaXMudmFsaWRhdGVGaWx0ZXJGb3JtLmdldFJhd1ZhbHVlKCkpO1xuICB9XG5cbiAgcHVibGljIHJlc2V0Rm9ybSgpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2V0RmlsdGVyRm9ybVdpdGhWYWx1ZSgpO1xuICAgIGlmICh0aGlzLnJlc2V0RXZlbnQub2JzZXJ2ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucmVzZXRFdmVudC5lbWl0KHRoaXMudmFsaWRhdGVGaWx0ZXJGb3JtLmdldFJhd1ZhbHVlKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlYXJjaEV2ZW50LmVtaXQodGhpcy52YWxpZGF0ZUZpbHRlckZvcm0uZ2V0UmF3VmFsdWUoKSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlc2V0RmlsdGVyRm9ybVdpdGhWYWx1ZSgpIHtcbiAgICBjb25zdCByZXNldFZhbHVlOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgdGhpcy5maWx0ZXJMaXN0LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIHJlc2V0VmFsdWVbaXRlbS5uYW1lXSA9IGl0ZW0udmFsdWU7XG4gICAgfSk7XG4gICAgdGhpcy52YWxpZGF0ZUZpbHRlckZvcm0ucGF0Y2hWYWx1ZShyZXNldFZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGaWx0ZXJEYXRhKCkge1xuICAgIHJldHVybiB0aGlzLnZhbGlkYXRlRmlsdGVyRm9ybS5nZXRSYXdWYWx1ZSgpO1xuICB9XG5cbiAgcHVibGljIHNob3dNb3JlKCk6IHZvaWQge1xuICAgIHRoaXMuaXNTaG93TW9yZSA9ICF0aGlzLmlzU2hvd01vcmU7XG4gICAgdGhpcy5maWx0ZXJMaXN0LmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICBpdGVtLnNob3cgPSB0aGlzLmlzU2hvd01vcmUgPyBpbmRleCA8IDcgOiB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGlucHV0Q2xlYW4oZmlsdGVyOiBGaWx0ZXIpOiB2b2lkIHtcbiAgICBjb25zdCBwYXRjaE9iamVjdCA9IHt9O1xuICAgIHBhdGNoT2JqZWN0W2ZpbHRlci5uYW1lXSA9IG51bGw7XG4gICAgdGhpcy52YWxpZGF0ZUZpbHRlckZvcm0ucGF0Y2hWYWx1ZShwYXRjaE9iamVjdCk7XG4gIH1cblxuICBpc0FsbG93Q2xlYXIoaXRlbTogRmlsdGVyKTogYm9vbGVhbiB7XG4gICAgaWYgKCFpdGVtKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGl0ZW0uaGRBbGxvd0NsZWFyICE9IG51bGwpIHtcbiAgICAgIHJldHVybiAhIWl0ZW0uaGRBbGxvd0NsZWFyO1xuICAgIH1cbiAgICBpZiAoaXRlbS5zZWxlY3RPcHRpb24gJiYgaXRlbS5zZWxlY3RPcHRpb24uaGRBbGxvd0NsZWFyICE9IG51bGwpIHtcbiAgICAgIHJldHVybiAhIWl0ZW0uc2VsZWN0T3B0aW9uLmhkQWxsb3dDbGVhcjtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tIOetm+mAiee7hCAtLS0tLS0tLS0tXG5cbiAgcHJpdmF0ZSB0cnlMb2FkU2NoZW1lcyhhcHBseURlZmF1bHQ6IGJvb2xlYW4pIHtcbiAgICBpZiAoIXRoaXMuY2FuVXNlU2NoZW1lKSB7XG4gICAgICB0aGlzLnNjaGVtZUxpc3QgPSBbXTtcbiAgICAgIHRoaXMuY3VycmVudFNjaGVtZSA9IG51bGw7XG4gICAgICB0aGlzLmN1cnJlbnRTY2hlbWVOYW1lID0gSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2NoZW1lTG9hZGluZyA9IHRydWU7XG4gICAgaWYgKHRoaXMuc2NoZW1lTG9hZFN1Yikge1xuICAgICAgdGhpcy5zY2hlbWVMb2FkU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIHRoaXMuc2NoZW1lTG9hZFN1YiA9IHRoaXMuc2NoZW1lU3RvcmUucXVlcnlCeUZpbHRlcktleSh0aGlzLmZpbHRlclNjaGVtZUtleSkuc3Vic2NyaWJlKFxuICAgICAgKGxpc3QpID0+IHtcbiAgICAgICAgdGhpcy5zY2hlbWVMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2NoZW1lTGlzdCA9IGxpc3QgfHwgW107XG4gICAgICAgIGlmIChhcHBseURlZmF1bHQpIHtcbiAgICAgICAgICB0aGlzLmFwcGx5U2NoZW1lQnlOYW1lKEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRTY2hlbWUgJiYgdGhpcy5jdXJyZW50U2NoZW1lLnV1aWQpIHtcbiAgICAgICAgICBjb25zdCBmb3VuZCA9IHRoaXMuc2NoZW1lTGlzdC5maW5kKHMgPT4gcy51dWlkID09PSB0aGlzLmN1cnJlbnRTY2hlbWUudXVpZCk7XG4gICAgICAgICAgdGhpcy5jdXJyZW50U2NoZW1lID0gZm91bmQgfHwgbnVsbDtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRTY2hlbWVOYW1lID0gZm91bmQgPyBmb3VuZC50ZW1wbGF0ZU5hbWUgOiBIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5zY2hlbWVMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2hvd0Vycm9yKCfliqDovb3nrZvpgInmqKHniYjlpLHotKXvvJonICsgKGVyciB8fCAnJykpO1xuICAgICAgICBpZiAoYXBwbHlEZWZhdWx0KSB7XG4gICAgICAgICAgdGhpcy5hcHBseVNjaGVtZUJ5TmFtZShIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLyoqIOWxleekuueUqOWIl+ihqO+8muS/neivgeacieOAjOm7mOiupOadoeS7tuOAjSAqL1xuICBnZXREaXNwbGF5U2NoZW1lTGlzdCgpOiBBcnJheTxIZEZpbHRlclNjaGVtZT4ge1xuICAgIGNvbnN0IHJlc3VsdDogQXJyYXk8SGRGaWx0ZXJTY2hlbWU+ID0gW107XG4gICAgY29uc3QgZnJvbURiID0gdGhpcy5zY2hlbWVMaXN0LmZpbmQocyA9PiBzLnRlbXBsYXRlTmFtZSA9PT0gSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUUpO1xuICAgIGlmIChmcm9tRGIpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGZyb21EYik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgZmlsdGVyS2V5OiB0aGlzLmZpbHRlclNjaGVtZUtleSxcbiAgICAgICAgdGVtcGxhdGVOYW1lOiBIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRSxcbiAgICAgICAgZmlsdGVyVmFsdWU6IEpTT04uc3RyaW5naWZ5KHRoaXMuZGVmYXVsdEZpbHRlclZhbHVlcyB8fCB7fSlcbiAgICAgIH0pO1xuICAgIH1cbiAgICAodGhpcy5zY2hlbWVMaXN0IHx8IFtdKS5mb3JFYWNoKHMgPT4ge1xuICAgICAgaWYgKHMudGVtcGxhdGVOYW1lICE9PSBIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRSkge1xuICAgICAgICByZXN1bHQucHVzaChzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgb3BlblN3aXRjaE1vZGFsKCkge1xuICAgIGlmICghdGhpcy5jYW5Vc2VTY2hlbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuY3VycmVudFNjaGVtZVxuICAgICAgfHwge1xuICAgICAgICBmaWx0ZXJLZXk6IHRoaXMuZmlsdGVyU2NoZW1lS2V5LFxuICAgICAgICB0ZW1wbGF0ZU5hbWU6IHRoaXMuY3VycmVudFNjaGVtZU5hbWUgfHwgSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUUsXG4gICAgICAgIGZpbHRlclZhbHVlOiAnJ1xuICAgICAgfTtcbiAgICB0aGlzLmJ1aWxkU3dpdGNoRm9ybUxpc3QodGhpcy5nZXRTd2l0Y2hPcHRpb25LZXkoY3VycmVudCkpO1xuICAgIHRoaXMuc3dpdGNoTW9kYWxWaXNpYmxlID0gdHJ1ZTtcbiAgfVxuXG4gIGNsb3NlU3dpdGNoTW9kYWwoKSB7XG4gICAgdGhpcy5zd2l0Y2hNb2RhbFZpc2libGUgPSBmYWxzZTtcbiAgfVxuXG4gIHN3aXRjaEZvcm1DaGFuZ2VFdmVudChmb3JtOiBGb3JtR3JvdXApIHtcbiAgICB0aGlzLnN3aXRjaFZhbGlkYXRlRm9ybSA9IGZvcm07XG4gIH1cblxuICBnZXRTd2l0Y2hPcHRpb25LZXkoaXRlbTogSGRGaWx0ZXJTY2hlbWUpOiBzdHJpbmcge1xuICAgIGlmICghaXRlbSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3dpdGNoRGVmYXVsdEtleTtcbiAgICB9XG4gICAgaWYgKGl0ZW0udXVpZCkge1xuICAgICAgcmV0dXJuIGl0ZW0udXVpZDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3dpdGNoRGVmYXVsdEtleTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRTd2l0Y2hGb3JtTGlzdChzZWxlY3RlZEtleTogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2VsZWN0TGlzdCA9IHRoaXMuZ2V0RGlzcGxheVNjaGVtZUxpc3QoKS5tYXAoaXRlbSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogdGhpcy5nZXRTd2l0Y2hPcHRpb25LZXkoaXRlbSksXG4gICAgICAgIGxhYmVsOiBpdGVtLnRlbXBsYXRlTmFtZVxuICAgICAgfTtcbiAgICB9KTtcbiAgICB0aGlzLnN3aXRjaEZvcm1MaXN0ID0gW1xuICAgICAge1xuICAgICAgICB0eXBlOiBGb3JtTGlzdFR5cGUuU2VsZWN0LFxuICAgICAgICBsYWJlbDogJ+etm+mAiee7hCcsXG4gICAgICAgIG5hbWU6ICdzY2hlbWVLZXknLFxuICAgICAgICByZXF1aXJlOiB0cnVlLFxuICAgICAgICB3aWR0aDogNCxcbiAgICAgICAgdmFsdWU6IHNlbGVjdGVkS2V5LFxuICAgICAgICBwbGFjZWhvbGRlcjogJ+ivt+mAieaLqeetm+mAiee7hCcsXG4gICAgICAgIHNlbGVjdE9wdGlvbjoge1xuICAgICAgICAgIHZhbHVlOiAndmFsdWUnLFxuICAgICAgICAgIGxhYmVsOiAnbGFiZWwnLFxuICAgICAgICAgIGhkU2hvd1NlYXJjaDogdHJ1ZSxcbiAgICAgICAgICBzZWxlY3RMaXN0OiBzZWxlY3RMaXN0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdO1xuICB9XG5cbiAgY29uZmlybVN3aXRjaCgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuc3dpdGNoVmFsaWRhdGVGb3JtIHx8ICF0aGlzLnN3aXRjaFZhbGlkYXRlRm9ybS52YWxpZCkge1xuICAgICAgdGhpcy5zaG93RXJyb3IoJ+ivt+mAieaLqeetm+mAiee7hCcpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBzY2hlbWVLZXkgPSB0aGlzLnN3aXRjaFZhbGlkYXRlRm9ybS5nZXRSYXdWYWx1ZSgpLnNjaGVtZUtleTtcbiAgICBpZiAoc2NoZW1lS2V5ID09IG51bGwgfHwgc2NoZW1lS2V5ID09PSAnJykge1xuICAgICAgdGhpcy5zaG93RXJyb3IoJ+ivt+mAieaLqeetm+mAiee7hCcpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBsaXN0ID0gdGhpcy5nZXREaXNwbGF5U2NoZW1lTGlzdCgpO1xuICAgIGxldCB0YXJnZXQ6IEhkRmlsdGVyU2NoZW1lID0gbnVsbDtcbiAgICBpZiAoc2NoZW1lS2V5ID09PSB0aGlzLnN3aXRjaERlZmF1bHRLZXkpIHtcbiAgICAgIHRhcmdldCA9IGxpc3QuZmluZChzID0+IHMudGVtcGxhdGVOYW1lID09PSBIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRSAmJiAhcy51dWlkKVxuICAgICAgICB8fCBsaXN0LmZpbmQocyA9PiBzLnRlbXBsYXRlTmFtZSA9PT0gSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YXJnZXQgPSBsaXN0LmZpbmQocyA9PiBzLnV1aWQgPT09IHNjaGVtZUtleSk7XG4gICAgfVxuICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICB0aGlzLnNob3dFcnJvcign6K+36YCJ5oup562b6YCJ57uEJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuYXBwbHlTY2hlbWUodGFyZ2V0LCB0cnVlKTtcbiAgICB0aGlzLnN3aXRjaE1vZGFsVmlzaWJsZSA9IGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaXNEZWZhdWx0U2NoZW1lKGl0ZW06IEhkRmlsdGVyU2NoZW1lKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhKGl0ZW0gJiYgaXRlbS50ZW1wbGF0ZU5hbWUgPT09IEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FKTtcbiAgfVxuXG4gIGNhbkRlbGV0ZUN1cnJlbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhKHRoaXMuY3VycmVudFNjaGVtZSAmJiB0aGlzLmN1cnJlbnRTY2hlbWUudXVpZFxuICAgICAgJiYgdGhpcy5jdXJyZW50U2NoZW1lLnRlbXBsYXRlTmFtZSAhPT0gSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUUpO1xuICB9XG5cbiAgc2F2ZUN1cnJlbnRTY2hlbWUoKSB7XG4gICAgaWYgKCF0aGlzLmNhblVzZVNjaGVtZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBuYW1lID0gdGhpcy5jdXJyZW50U2NoZW1lTmFtZSB8fCBIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRTtcbiAgICBjb25zdCBib2R5OiBIZEZpbHRlclNjaGVtZSA9IHtcbiAgICAgIHV1aWQ6IHRoaXMuY3VycmVudFNjaGVtZSAmJiB0aGlzLmN1cnJlbnRTY2hlbWUudXVpZCA/IHRoaXMuY3VycmVudFNjaGVtZS51dWlkIDogbnVsbCxcbiAgICAgIGZpbHRlcktleTogdGhpcy5maWx0ZXJTY2hlbWVLZXksXG4gICAgICB0ZW1wbGF0ZU5hbWU6IG5hbWUsXG4gICAgICBmaWx0ZXJWYWx1ZTogdGhpcy5zZXJpYWxpemVGaWx0ZXJWYWx1ZSgpXG4gICAgfTtcbiAgICB0aGlzLnNjaGVtZVNhdmluZyA9IHRydWU7XG4gICAgaWYgKHRoaXMuc2NoZW1lQWN0aW9uU3ViKSB7XG4gICAgICB0aGlzLnNjaGVtZUFjdGlvblN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB0aGlzLnNjaGVtZUFjdGlvblN1YiA9IHRoaXMuc2NoZW1lU3RvcmUuc2F2ZShib2R5KS5zdWJzY3JpYmUoXG4gICAgICAoc2F2ZWQpID0+IHtcbiAgICAgICAgdGhpcy5zY2hlbWVTYXZpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93U3VjY2Vzcygn5L+d5a2Y5oiQ5YqfJyk7XG4gICAgICAgIHRoaXMuY3VycmVudFNjaGVtZSA9IHNhdmVkO1xuICAgICAgICB0aGlzLmN1cnJlbnRTY2hlbWVOYW1lID0gc2F2ZWQudGVtcGxhdGVOYW1lO1xuICAgICAgICB0aGlzLnJlZnJlc2hTY2hlbWVMaXN0S2VlcEN1cnJlbnQoKTtcbiAgICAgIH0sXG4gICAgICAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMuc2NoZW1lU2F2aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2hvd0Vycm9yKCfkv53lrZjlpLHotKXvvJonICsgKGVyciB8fCAnJykpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBvcGVuU2F2ZUFzTW9kYWwoKSB7XG4gICAgdGhpcy5idWlsZFNhdmVBc0Zvcm1MaXN0KCk7XG4gICAgdGhpcy5zYXZlQXNNb2RhbFZpc2libGUgPSB0cnVlO1xuICB9XG5cbiAgY2xvc2VTYXZlQXNNb2RhbCgpIHtcbiAgICB0aGlzLnNhdmVBc01vZGFsVmlzaWJsZSA9IGZhbHNlO1xuICB9XG5cbiAgc2F2ZUFzRm9ybUNoYW5nZUV2ZW50KGZvcm06IEZvcm1Hcm91cCkge1xuICAgIHRoaXMuc2F2ZUFzVmFsaWRhdGVGb3JtID0gZm9ybTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRTYXZlQXNGb3JtTGlzdCgpIHtcbiAgICB0aGlzLnNhdmVBc0Zvcm1MaXN0ID0gW1xuICAgICAge1xuICAgICAgICB0eXBlOiBGb3JtTGlzdFR5cGUuSW5wdXQsXG4gICAgICAgIGxhYmVsOiAn562b6YCJ57uE5ZCN56ewJyxcbiAgICAgICAgbmFtZTogJ3RlbXBsYXRlTmFtZScsXG4gICAgICAgIHJlcXVpcmU6IHRydWUsXG4gICAgICAgIHdpZHRoOiA0LFxuICAgICAgICBtYXhMZW5ndGg6IDUwLFxuICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICfor7fovpPlhaXnrZvpgInnu4TlkI3np7AnXG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIGNvbmZpcm1TYXZlQXMoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnNhdmVBc1ZhbGlkYXRlRm9ybSB8fCAhdGhpcy5zYXZlQXNWYWxpZGF0ZUZvcm0udmFsaWQpIHtcbiAgICAgIHRoaXMuc2hvd0Vycm9yKCfor7fovpPlhaXnrZvpgInnu4TlkI3np7AnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgbmFtZSA9ICgodGhpcy5zYXZlQXNWYWxpZGF0ZUZvcm0uZ2V0UmF3VmFsdWUoKS50ZW1wbGF0ZU5hbWUpIHx8ICcnKS50cmltKCk7XG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICB0aGlzLnNob3dFcnJvcign6K+36L6T5YWl562b6YCJ57uE5ZCN56ewJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChuYW1lID09PSBIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRSkge1xuICAgICAgdGhpcy5zaG93RXJyb3IoJ+S4jeiDveS9v+eUqOOAjOm7mOiupOadoeS7tuOAjeS9nOS4uuetm+mAiee7hOWQjeensO+8jOivt+S9v+eUqOOAjOS/neWtmOS4uuW9k+WJjeOAjeimhueblum7mOiupOadoeS7ticpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBleGlzdHMgPSAodGhpcy5zY2hlbWVMaXN0IHx8IFtdKS5zb21lKHMgPT4gcy50ZW1wbGF0ZU5hbWUgPT09IG5hbWUpO1xuICAgIGlmIChleGlzdHMpIHtcbiAgICAgIHRoaXMuc2hvd0Vycm9yKCfnrZvpgInnu4TlkI3np7Dlt7LlrZjlnKgnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgYm9keTogSGRGaWx0ZXJTY2hlbWUgPSB7XG4gICAgICBmaWx0ZXJLZXk6IHRoaXMuZmlsdGVyU2NoZW1lS2V5LFxuICAgICAgdGVtcGxhdGVOYW1lOiBuYW1lLFxuICAgICAgZmlsdGVyVmFsdWU6IHRoaXMuc2VyaWFsaXplRmlsdGVyVmFsdWUoKVxuICAgIH07XG4gICAgdGhpcy5zY2hlbWVTYXZpbmcgPSB0cnVlO1xuICAgIGlmICh0aGlzLnNjaGVtZUFjdGlvblN1Yikge1xuICAgICAgdGhpcy5zY2hlbWVBY3Rpb25TdWIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgdGhpcy5zY2hlbWVBY3Rpb25TdWIgPSB0aGlzLnNjaGVtZVN0b3JlLnNhdmUoYm9keSkuc3Vic2NyaWJlKFxuICAgICAgKHNhdmVkKSA9PiB7XG4gICAgICAgIHRoaXMuc2NoZW1lU2F2aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2F2ZUFzTW9kYWxWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2hvd1N1Y2Nlc3MoJ+WPpuWtmOS4uuaIkOWKnycpO1xuICAgICAgICB0aGlzLmN1cnJlbnRTY2hlbWUgPSBzYXZlZDtcbiAgICAgICAgdGhpcy5jdXJyZW50U2NoZW1lTmFtZSA9IHNhdmVkLnRlbXBsYXRlTmFtZTtcbiAgICAgICAgdGhpcy5yZWZyZXNoU2NoZW1lTGlzdEtlZXBDdXJyZW50KCk7XG4gICAgICB9LFxuICAgICAgKGVycikgPT4ge1xuICAgICAgICB0aGlzLnNjaGVtZVNhdmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dFcnJvcign5Y+m5a2Y5Li65aSx6LSl77yaJyArIChlcnIgfHwgJycpKTtcbiAgICAgIH1cbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGRlbGV0ZUN1cnJlbnRTY2hlbWUoKSB7XG4gICAgaWYgKCF0aGlzLmNhbkRlbGV0ZUN1cnJlbnQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB1dWlkID0gdGhpcy5jdXJyZW50U2NoZW1lLnV1aWQ7XG4gICAgdGhpcy5zY2hlbWVTYXZpbmcgPSB0cnVlO1xuICAgIGlmICh0aGlzLnNjaGVtZUFjdGlvblN1Yikge1xuICAgICAgdGhpcy5zY2hlbWVBY3Rpb25TdWIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgdGhpcy5zY2hlbWVBY3Rpb25TdWIgPSB0aGlzLnNjaGVtZVN0b3JlLmRlbGV0ZSh1dWlkKS5zdWJzY3JpYmUoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuc2NoZW1lU2F2aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2hvd1N1Y2Nlc3MoJ+WIoOmZpOaIkOWKnycpO1xuICAgICAgICB0aGlzLnNjaGVtZUxpc3QgPSAodGhpcy5zY2hlbWVMaXN0IHx8IFtdKS5maWx0ZXIocyA9PiBzLnV1aWQgIT09IHV1aWQpO1xuICAgICAgICB0aGlzLmFwcGx5U2NoZW1lQnlOYW1lKEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FLCB0cnVlKTtcbiAgICAgIH0sXG4gICAgICAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMuc2NoZW1lU2F2aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2hvd0Vycm9yKCfliKDpmaTlpLHotKXvvJonICsgKGVyciB8fCAnJykpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlZnJlc2hTY2hlbWVMaXN0S2VlcEN1cnJlbnQoKSB7XG4gICAgaWYgKCF0aGlzLmNhblVzZVNjaGVtZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNjaGVtZVN0b3JlLnF1ZXJ5QnlGaWx0ZXJLZXkodGhpcy5maWx0ZXJTY2hlbWVLZXkpLnN1YnNjcmliZShcbiAgICAgIChsaXN0KSA9PiB7XG4gICAgICAgIHRoaXMuc2NoZW1lTGlzdCA9IGxpc3QgfHwgW107XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRTY2hlbWUgJiYgdGhpcy5jdXJyZW50U2NoZW1lLnV1aWQpIHtcbiAgICAgICAgICBjb25zdCBmb3VuZCA9IHRoaXMuc2NoZW1lTGlzdC5maW5kKHMgPT4gcy51dWlkID09PSB0aGlzLmN1cnJlbnRTY2hlbWUudXVpZCk7XG4gICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTY2hlbWUgPSBmb3VuZDtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFNjaGVtZU5hbWUgPSBmb3VuZC50ZW1wbGF0ZU5hbWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgKCkgPT4geyAvKiBpZ25vcmUgKi8gfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5U2NoZW1lQnlOYW1lKG5hbWU6IHN0cmluZywgZW1pdFNlYXJjaDogYm9vbGVhbikge1xuICAgIGNvbnN0IGxpc3QgPSB0aGlzLmdldERpc3BsYXlTY2hlbWVMaXN0KCk7XG4gICAgY29uc3QgdGFyZ2V0ID0gbGlzdC5maW5kKHMgPT4gcy50ZW1wbGF0ZU5hbWUgPT09IG5hbWUpO1xuICAgIGlmICh0YXJnZXQpIHtcbiAgICAgIHRoaXMuYXBwbHlTY2hlbWUodGFyZ2V0LCBlbWl0U2VhcmNoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGx5U2NoZW1lKHNjaGVtZTogSGRGaWx0ZXJTY2hlbWUsIGVtaXRTZWFyY2g6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmN1cnJlbnRTY2hlbWUgPSBzY2hlbWUgJiYgc2NoZW1lLnV1aWQgPyBzY2hlbWUgOiB7XG4gICAgICBmaWx0ZXJLZXk6IHRoaXMuZmlsdGVyU2NoZW1lS2V5LFxuICAgICAgdGVtcGxhdGVOYW1lOiBzY2hlbWUgPyBzY2hlbWUudGVtcGxhdGVOYW1lIDogSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUUsXG4gICAgICBmaWx0ZXJWYWx1ZTogc2NoZW1lID8gc2NoZW1lLmZpbHRlclZhbHVlIDogSlNPTi5zdHJpbmdpZnkodGhpcy5kZWZhdWx0RmlsdGVyVmFsdWVzIHx8IHt9KVxuICAgIH07XG4gICAgdGhpcy5jdXJyZW50U2NoZW1lTmFtZSA9IHRoaXMuY3VycmVudFNjaGVtZS50ZW1wbGF0ZU5hbWUgfHwgSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUU7XG5cbiAgICBsZXQgdmFsdWVzOiBhbnkgPSB7fTtcbiAgICBpZiAodGhpcy5jdXJyZW50U2NoZW1lTmFtZSA9PT0gSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUUgJiYgIShzY2hlbWUgJiYgc2NoZW1lLnV1aWQpKSB7XG4gICAgICB2YWx1ZXMgPSB0aGlzLmNsb25lUGxhaW4odGhpcy5kZWZhdWx0RmlsdGVyVmFsdWVzIHx8IHt9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFsdWVzID0gSlNPTi5wYXJzZShzY2hlbWUuZmlsdGVyVmFsdWUgfHwgJ3t9Jyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHZhbHVlcyA9IHt9O1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY3VycmVudFNjaGVtZU5hbWUgPT09IEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FKSB7XG4gICAgICAgIC8vIOW6k+S4rem7mOiupOadoeS7tuimhuebluWIneWni+WAvO+8muS7pem7mOiupOWAvOS4uuW6le+8jOWGjeWPoOWKoOW6k+WAvFxuICAgICAgICB2YWx1ZXMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmRlZmF1bHRGaWx0ZXJWYWx1ZXMgfHwge30sIHZhbHVlcyB8fCB7fSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucGF0Y2hGaWx0ZXJWYWx1ZXModmFsdWVzKTtcbiAgICBpZiAoZW1pdFNlYXJjaCkge1xuICAgICAgdGhpcy5zdWJtaXRGb3JtKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXJpYWxpemVGaWx0ZXJWYWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLmdldEZpbHRlckRhdGEoKSB8fCB7fSk7XG4gIH1cblxuICBwcml2YXRlIHBhdGNoRmlsdGVyVmFsdWVzKHZhbHVlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkge1xuICAgIGlmICghdGhpcy52YWxpZGF0ZUZpbHRlckZvcm0gfHwgIXRoaXMuZmlsdGVyTGlzdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwYXRjaDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIHRoaXMuZmlsdGVyTGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgaWYgKHZhbHVlcyAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWVzLCBpdGVtLm5hbWUpKSB7XG4gICAgICAgIHBhdGNoW2l0ZW0ubmFtZV0gPSB0aGlzLnJldml2ZUZpbHRlclZhbHVlKGl0ZW0sIHZhbHVlc1tpdGVtLm5hbWVdKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnZhbGlkYXRlRmlsdGVyRm9ybS5wYXRjaFZhbHVlKHBhdGNoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmV2aXZlRmlsdGVyVmFsdWUoZmlsdGVyOiBGaWx0ZXIsIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmIChmaWx0ZXIudHlwZSA9PT0gRmlsdGVyTGlzdFR5cGUuRGF0ZVJhbmdlKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLm1hcCh2ID0+IHRoaXMucGFyc2VEYXRlTGlrZSh2KSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmIChmaWx0ZXIudHlwZSA9PT0gRmlsdGVyTGlzdFR5cGUuRGF0ZSB8fCBmaWx0ZXIudHlwZSA9PT0gRmlsdGVyTGlzdFR5cGUuTW9udGgpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlRGF0ZUxpa2UodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlRGF0ZUxpa2UodmFsdWU6IGFueSk6IGFueSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIC9eXFxkezR9LVxcZHsyfS1cXGR7Mn0vLnRlc3QodmFsdWUpKSB7XG4gICAgICBjb25zdCBkID0gbmV3IERhdGUodmFsdWUpO1xuICAgICAgcmV0dXJuIGlzTmFOKGQuZ2V0VGltZSgpKSA/IHZhbHVlIDogZDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIGNvbnN0IGQgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICByZXR1cm4gaXNOYU4oZC5nZXRUaW1lKCkpID8gdmFsdWUgOiBkO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGNsb25lUGxhaW4ob2JqOiBhbnkpOiBhbnkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmogPT0gbnVsbCA/IHt9IDogb2JqKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2hvd1N1Y2Nlc3MobXNnOiBzdHJpbmcpIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgKHdpbmRvdyBhcyBhbnkpLmhkTWVzc2FnZVNlcnZpY2UpIHtcbiAgICAgICh3aW5kb3cgYXMgYW55KS5oZE1lc3NhZ2VTZXJ2aWNlLnByb3RvdHlwZS5zdWNjZXNzKG1zZyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzaG93RXJyb3IobXNnOiBzdHJpbmcpIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgKHdpbmRvdyBhcyBhbnkpLmhkTWVzc2FnZVNlcnZpY2UpIHtcbiAgICAgICh3aW5kb3cgYXMgYW55KS5oZE1lc3NhZ2VTZXJ2aWNlLnByb3RvdHlwZS5lcnJvcihtc2cpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS5lcnJvcihtc2cpO1xuICAgIH1cbiAgfVxuXG4gIGdldENhc2NhZGVyU2hvd1NlYXJjaCA9IGdldENhc2NhZGVyU2hvd1NlYXJjaDtcbiAgZ2V0Q2FzY2FkZXJNZW51Q2xhc3NOYW1lID0gZ2V0Q2FzY2FkZXJNZW51Q2xhc3NOYW1lO1xuICBnZXRDYXNjYWRlck1lbnVTdHlsZSA9IGdldENhc2NhZGVyTWVudVN0eWxlO1xufVxuIl19
|
|
1389
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGQtZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2ZhbnRhc3ktbmd6b3Jyby8iLCJzb3VyY2VzIjpbImhkLWZpbHRlci9oZC1maWx0ZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFJTCxRQUFRLEVBQ1IsTUFBTSxFQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQVUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0QsT0FBTyxFQUFZLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsb0JBQW9CLEVBQ3BCLHFCQUFxQixHQUN0QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFDTCw2QkFBNkIsRUFDN0Isc0JBQXNCLEVBRXRCLG1CQUFtQixFQUNwQixNQUFNLG9CQUFvQixDQUFDO0FBRTVCO0lBb0RFLDJCQUNVLEVBQWUsRUFDNkIsV0FBZ0M7UUFGdEYsaUJBY0M7UUFiUyxPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQzZCLGdCQUFXLEdBQVgsV0FBVyxDQUFxQjs7OztRQTdDN0QsdUJBQWtCLEdBQUcsS0FBSyxDQUFDOzs7O1FBSTNCLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBRW5DLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqQyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUcxQyxlQUFVLEdBQVksSUFB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aXR0ZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRmlsdGVyLCBGaWx0ZXJMaXN0VHlwZSB9IGZyb20gJy4vaGQtZmlsdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9ybUl0ZW0sIEZvcm1MaXN0VHlwZSB9IGZyb20gJy4uL2hkLWZvcm0vaGQtZm9ybS5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIGdldENhc2NhZGVyTWVudUNsYXNzTmFtZSxcbiAgZ2V0Q2FzY2FkZXJNZW51U3R5bGUsXG4gIGdldENhc2NhZGVyU2hvd1NlYXJjaCxcbn0gZnJvbSAnLi4vdXRpbHMvY2FzY2FkZXIudXRpbCc7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IElucHV0Qm9vbGVhbiB9IGZyb20gJ25nLXpvcnJvLWFudGQnO1xuaW1wb3J0IHtcbiAgSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUUsXG4gIEhEX0ZJTFRFUl9TQ0hFTUVfU1RPUkUsXG4gIEhkRmlsdGVyU2NoZW1lLFxuICBIZEZpbHRlclNjaGVtZVN0b3JlXG59IGZyb20gJy4vaGQtZmlsdGVyLXNjaGVtZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2hkLWZpbHRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9oZC1maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9oZC1maWx0ZXIuY29tcG9uZW50Lmxlc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBIZEZpbHRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuXG4gIEBJbnB1dCgpIGZpbHRlckxpc3Q6IEFycmF5PEZpbHRlcj47XG4gIC8qKiDmmK/lkKblkK/nlKjnrZvpgInnu4TvvIjpu5jorqTlhbPpl63vvIkgKi9cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIGVuYWJsZUZpbHRlclNjaGVtZSA9IGZhbHNlO1xuICAvKiog562b6YCJ5Zmo5qCH6K+G77yM5byA5ZCv562b6YCJ57uE5pe25b+F5LygICovXG4gIEBJbnB1dCgpIGZpbHRlclNjaGVtZUtleTogc3RyaW5nO1xuICAvKiog5piv5ZCm5Y675o6JIGhkLWZpbHRlci1jb250YWluZXIg55qEIHBhZGRpbmfvvIzpu5jorqQgZmFsc2UgKi9cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIGhpZGVQYWRkaW5nID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIHNlYXJjaEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcmVzZXRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICB2YWxpZGF0ZUZpbHRlckZvcm06IEZvcm1Hcm91cDtcbiAgaXNTaG93TW9yZTogYm9vbGVhbiA9IHRydWU7XG4gIGZpbHRlckxpc3RNb2R1bGFyOiBudW1iZXIgPSAwO1xuICBwcml2YXRlIHNlYXJjaFN1YmplY3QgPSBuZXcgU3ViamVjdDx7IGZuOiBhbnksIGV2ZW50OiBhbnksIHNlbGVjdE9wdGlvbj86IGFueTsgfT4oKTtcbiAgcHJpdmF0ZSBkZWJvdW5jZVRpbWVvdXQ6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgb3BlbkNoYW5nZVN1YmplY3QgPSBuZXcgU3ViamVjdDx7IGZuOiBhbnk7IGV2ZW50OiBhbnkgfT4oKTtcbiAgcHJpdmF0ZSBvcGVuQ2hhbmdlRGVib3VuY2VUaW1lb3V0OiBudW1iZXIgPSAwO1xuXG4gIHByaXZhdGUgc2VhcmNoU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgb3BlbkNoYW5nZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHNjaGVtZUxvYWRTdWI6IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBzY2hlbWVBY3Rpb25TdWI6IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcblxuICAvKiog6aG16Z2i6YWN572u55qE5Yid5aeL5YC877yI6Jma5ouf44CM6buY6K6k5p2h5Lu244CN77yJICovXG4gIHByaXZhdGUgZGVmYXVsdEZpbHRlclZhbHVlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICBwcml2YXRlIGRlZmF1bHRWYWx1ZXNDYXB0dXJlZCA9IGZhbHNlO1xuXG4gIHNjaGVtZUxpc3Q6IEFycmF5PEhkRmlsdGVyU2NoZW1lPiA9IFtdO1xuICBjdXJyZW50U2NoZW1lOiBIZEZpbHRlclNjaGVtZSA9IG51bGw7XG4gIGN1cnJlbnRTY2hlbWVOYW1lID0gSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUU7XG4gIHNjaGVtZUxvYWRpbmcgPSBmYWxzZTtcbiAgc2NoZW1lU2F2aW5nID0gZmFsc2U7XG5cbiAgc3dpdGNoTW9kYWxWaXNpYmxlID0gZmFsc2U7XG4gIHN3aXRjaEZvcm1MaXN0OiBBcnJheTxGb3JtSXRlbT4gPSBbXTtcbiAgc3dpdGNoVmFsaWRhdGVGb3JtOiBGb3JtR3JvdXA7XG5cbiAgc2F2ZUFzTW9kYWxWaXNpYmxlID0gZmFsc2U7XG4gIHNhdmVBc0Zvcm1MaXN0OiBBcnJheTxGb3JtSXRlbT4gPSBbXTtcbiAgc2F2ZUFzVmFsaWRhdGVGb3JtOiBGb3JtR3JvdXA7XG5cbiAgcmVhZG9ubHkgZGVmYXVsdFNjaGVtZU5hbWUgPSBIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRTtcbiAgcHJpdmF0ZSByZWFkb25seSBzd2l0Y2hEZWZhdWx0S2V5ID0gJ19fREVGQVVMVF9fJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEhEX0ZJTFRFUl9TQ0hFTUVfU1RPUkUpIHByaXZhdGUgc2NoZW1lU3RvcmU6IEhkRmlsdGVyU2NoZW1lU3RvcmVcbiAgKSB7XG4gICAgdGhpcy5zZWFyY2hTdWJzY3JpcHRpb24gPSB0aGlzLnNlYXJjaFN1YmplY3QucGlwZShcbiAgICAgIGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlVGltZW91dClcbiAgICApLnN1YnNjcmliZSgoeyBmbiwgZXZlbnQsIHNlbGVjdE9wdGlvbiB9KSA9PiB0aGlzLnRyaWdnZXJFdmVudChmbiwgZXZlbnQsIHNlbGVjdE9wdGlvbikpO1xuICAgIHRoaXMub3BlbkNoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMub3BlbkNoYW5nZVN1YmplY3RcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSh0aGlzLm9wZW5DaGFuZ2VEZWJvdW5jZVRpbWVvdXQpKVxuICAgICAgLnN1YnNjcmliZSgoeyBmbiwgZXZlbnQgfSkgPT4ge1xuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLnRyaWdnZXJFdmVudChmbiwgZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaW5pdCgpO1xuICAgIC8vIOmmluasoeWKoOi9veWPquWcqOi/memHjOivt+axguS4gOasoe+8m25nT25DaGFuZ2VzIOmmluasoeS5n+S8muW4puS4iiBlbmFibGVGaWx0ZXJTY2hlbWUvZmlsdGVyU2NoZW1lS2V577yM6YG/5YWN6YeN5aSN6LCD5o6l5Y+jXG4gICAgdGhpcy50cnlMb2FkU2NoZW1lcyh0cnVlKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlc1snZmlsdGVyTGlzdCddKSB7XG4gICAgICB0aGlzLmluaXQoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2VuYWJsZUZpbHRlclNjaGVtZSddIHx8IGNoYW5nZXNbJ2ZpbHRlclNjaGVtZUtleSddKSB7XG4gICAgICAvLyDpppbmrKHlj5jmm7TkuI4gbmdPbkluaXQg6YeN5aSN77yI56ys5LqM5qyh5LyaIHVuc3Vic2NyaWJlIOesrOS4gOasoe+8jOihqOeOsOS4uuivt+axguaXoOi/lOWbnu+8ie+8m+S7heWQjue7reWIh+aNouWGjeWKoOi9vVxuICAgICAgY29uc3QgZW5hYmxlTGF0ZXIgPSBjaGFuZ2VzWydlbmFibGVGaWx0ZXJTY2hlbWUnXSAmJiAhY2hhbmdlc1snZW5hYmxlRmlsdGVyU2NoZW1lJ10uZmlyc3RDaGFuZ2U7XG4gICAgICBjb25zdCBrZXlMYXRlciA9IGNoYW5nZXNbJ2ZpbHRlclNjaGVtZUtleSddICYmICFjaGFuZ2VzWydmaWx0ZXJTY2hlbWVLZXknXS5maXJzdENoYW5nZTtcbiAgICAgIGlmIChlbmFibGVMYXRlciB8fCBrZXlMYXRlcikge1xuICAgICAgICB0aGlzLnRyeUxvYWRTY2hlbWVzKHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLnNlYXJjaFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zZWFyY2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMub3BlbkNoYW5nZVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5vcGVuQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNjaGVtZUxvYWRTdWIpIHtcbiAgICAgIHRoaXMuc2NoZW1lTG9hZFN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zY2hlbWVBY3Rpb25TdWIpIHtcbiAgICAgIHRoaXMuc2NoZW1lQWN0aW9uU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGNhblVzZVNjaGVtZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEodGhpcy5lbmFibGVGaWx0ZXJTY2hlbWUgJiYgdGhpcy5maWx0ZXJTY2hlbWVLZXkgJiYgdGhpcy5zY2hlbWVTdG9yZSk7XG4gIH1cblxuICBwcml2YXRlIGluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pc1Nob3dNb3JlID0gdHJ1ZTtcbiAgICBpZiAoIXRoaXMuY2hlY2tMaXN0KHRoaXMuZmlsdGVyTGlzdCkpIHtcbiAgICAgIHRocm93ICdmaWx0ZXLnu4Tku7bmlbDmja7moLzlvI/kuI3op4TojIMnO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuZmlsdGVyTGlzdCkge1xuICAgICAgdGhpcy5maWx0ZXJMaXN0ID0gW107XG4gICAgfVxuICAgIHRoaXMuZmlsdGVyTGlzdE1vZHVsYXIgPSB0aGlzLmZpbHRlckxpc3QubGVuZ3RoICUgNDtcbiAgICBjb25zdCBmb3JtR3JvdXBMaXN0ID0ge307XG4gICAgdGhpcy5maWx0ZXJMaXN0LmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICBmb3JtR3JvdXBMaXN0W2l0ZW0ubmFtZV0gPSB0aGlzLmZiLmNvbnRyb2woaXRlbS52YWx1ZSwgW10pO1xuICAgICAgaXRlbS5zaG93ID0gaW5kZXggPCA3O1xuICAgIH0pO1xuICAgIHRoaXMudmFsaWRhdGVGaWx0ZXJGb3JtID0gdGhpcy5mYi5ncm91cChmb3JtR3JvdXBMaXN0KTtcbiAgICBpZiAoIXRoaXMuZGVmYXVsdFZhbHVlc0NhcHR1cmVkKSB7XG4gICAgICB0aGlzLmRlZmF1bHRGaWx0ZXJWYWx1ZXMgPSB0aGlzLmNsb25lUGxhaW4odGhpcy5nZXRGaWx0ZXJEYXRhKCkpO1xuICAgICAgdGhpcy5kZWZhdWx0VmFsdWVzQ2FwdHVyZWQgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLmZpbHRlckxpc3QuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgaWYgKGl0ZW0ub25DaGFuZ2VFdmVudCkge1xuICAgICAgICBpZiAoaXRlbS5vbkNoYW5nZUV2ZW50RGVib3VuY2VUaW1lKSB7XG4gICAgICAgICAgdGhpcy52YWxpZGF0ZUZpbHRlckZvcm0uZ2V0KGl0ZW0ubmFtZSkudmFsdWVDaGFuZ2VzXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKGl0ZW0ub25DaGFuZ2VFdmVudERlYm91bmNlVGltZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUodmFsdWUgPT4gdGhpcy50cmlnZ2VyRXZlbnQoaXRlbS5vbkNoYW5nZUV2ZW50LCB2YWx1ZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGVGaWx0ZXJGb3JtLmdldChpdGVtLm5hbWUpLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodmFsdWUgPT4gdGhpcy50cmlnZ2VyRXZlbnQoaXRlbS5vbkNoYW5nZUV2ZW50LCB2YWx1ZSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvblNlYXJjaEV2ZW50KGZuOiBhbnksIGV2ZW50OiBhbnksIG9uU2VhcmNoRXZlbnREZWJvdW5jZVRpbWU6IGFueSwgc2VsZWN0T3B0aW9uPzogYW55KSB7XG4gICAgaWYgKG9uU2VhcmNoRXZlbnREZWJvdW5jZVRpbWUpIHtcbiAgICAgIHRoaXMuZGVib3VuY2VUaW1lb3V0ID0gb25TZWFyY2hFdmVudERlYm91bmNlVGltZTtcbiAgICAgIGlmICh0aGlzLnNlYXJjaFN1YnNjcmlwdGlvbikge1xuICAgICAgICB0aGlzLnNlYXJjaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWFyY2hTdWJzY3JpcHRpb24gPSB0aGlzLnNlYXJjaFN1YmplY3QucGlwZShcbiAgICAgICAgZGVib3VuY2VUaW1lKHRoaXMuZGVib3VuY2VUaW1lb3V0KVxuICAgICAgKS5zdWJzY3JpYmUoKHsgZm4sIGV2ZW50LCBzZWxlY3RPcHRpb24gfSkgPT4gdGhpcy50cmlnZ2VyRXZlbnQoZm4sIGV2ZW50LCBzZWxlY3RPcHRpb24pKTtcbiAgICAgIHRoaXMuc2VhcmNoU3ViamVjdC5uZXh0KHsgZm4sIGV2ZW50LCBzZWxlY3RPcHRpb24gfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudHJpZ2dlckV2ZW50KGZuLCBldmVudCwgc2VsZWN0T3B0aW9uKTtcbiAgICB9XG4gIH1cblxuICBvbk9wZW5DaGFuZ2VFdmVudChcbiAgICBmbjogYW55LFxuICAgIG9wZW46IGJvb2xlYW4sXG4gICAgb25PcGVuQ2hhbmdlRXZlbnREZWJvdW5jZVRpbWU6IGFueSxcbiAgICBmaWx0ZXI/OiBGaWx0ZXIsXG4gICkge1xuICAgIGlmICghZm4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8g5bGV5byA5pe25YWI5riF56m65penIG9wdGlvbnPvvIzpgb/lhY3mnaHku7blj5jljJblkI7or7fmsYLov5Tlm57liY3ku43lsZXnpLrkuIrkuIDmibnkuIvmi4nmlbDmja5cbiAgICBpZiAob3Blbikge1xuICAgICAgdGhpcy5jbGVhclNlbGVjdE9wdGlvbnNPbk9wZW4oZmlsdGVyKTtcbiAgICB9XG4gICAgY29uc3QgZGVib3VuY2VNcyA9XG4gICAgICBvbk9wZW5DaGFuZ2VFdmVudERlYm91bmNlVGltZSAhPSBudWxsXG4gICAgICAgID8gb25PcGVuQ2hhbmdlRXZlbnREZWJvdW5jZVRpbWVcbiAgICAgICAgOiAwO1xuICAgIC8vIOacqumFjee9ruaIluS4uiAw77ya5ZCM5q2l6Kem5Y+R77yM5LiN6LWwIGRlYm91bmNlVGltZe+8iOmBv+WFjeW8guatpe+8iVxuICAgIGlmICghZGVib3VuY2VNcykge1xuICAgICAgaWYgKG9wZW4pIHtcbiAgICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoZm4sIG9wZW4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm9wZW5DaGFuZ2VEZWJvdW5jZVRpbWVvdXQgPSBkZWJvdW5jZU1zO1xuICAgIGlmICh0aGlzLm9wZW5DaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMub3BlbkNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB0aGlzLm9wZW5DaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLm9wZW5DaGFuZ2VTdWJqZWN0XG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUodGhpcy5vcGVuQ2hhbmdlRGVib3VuY2VUaW1lb3V0KSlcbiAgICAgIC5zdWJzY3JpYmUoKHsgZm4sIGV2ZW50IH0pID0+IHtcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoZm4sIGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgdGhpcy5vcGVuQ2hhbmdlU3ViamVjdC5uZXh0KHsgZm4sIGV2ZW50OiBvcGVuIH0pO1xuICB9XG5cbiAgLyoqIOaciSBvbk9wZW5DaGFuZ2VFdmVudCDml7blsZXlvIDkuIvmi4nlhYjmuIXnqbrpgInpobnvvIznlLHkuJrliqHlm57osIPlho3lhpnlhaXmlrDmlbDmja4gKi9cbiAgcHJpdmF0ZSBjbGVhclNlbGVjdE9wdGlvbnNPbk9wZW4oZmlsdGVyOiBGaWx0ZXIpOiB2b2lkIHtcbiAgICBpZiAoIWZpbHRlciB8fCAhZmlsdGVyLnNlbGVjdE9wdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvcHQgPSBmaWx0ZXIuc2VsZWN0T3B0aW9uO1xuICAgIGlmIChvcHQuc2VsZWN0TGlzdCAhPSBudWxsKSB7XG4gICAgICBvcHQuc2VsZWN0TGlzdCA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIHRyaWdnZXJFdmVudChmbjogYW55LCBldmVudDogYW55LCBzZWxlY3RPcHRpb24/OiBhbnkpIHtcbiAgICBpZiAoZm4gJiYgc2VsZWN0T3B0aW9uKSB7XG4gICAgICBmbihldmVudCwgc2VsZWN0T3B0aW9uKTtcbiAgICB9IGVsc2UgaWYgKGZuKSB7XG4gICAgICBmbihldmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICAvKiog5b2T5YmN5bGV56S655qE562b6YCJ6aG55pWw6YeP77yI5bCK6YeNIGl0ZW0uc2hvd++8jOS4juWxleW8gC/mlLbotbfkuIDoh7TvvIkgKi9cbiAgZ2V0VmlzaWJsZUZpbHRlckNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuICh0aGlzLmZpbHRlckxpc3QgfHwgW10pLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5zaG93ICE9PSBmYWxzZSkubGVuZ3RoO1xuICB9XG5cbiAgLyoqIOWwkeadoeS7tuaXtuWKoOWuveWtl+auteWIl++8mjHihpIxOOOAgTLihpI544CB4omlM+KGkjYgKi9cbiAgZ2V0RmlsdGVyQ29sU3BhbigpOiBudW1iZXIge1xuICAgIGNvbnN0IG4gPSB0aGlzLmdldFZpc2libGVGaWx0ZXJDb3VudCgpO1xuICAgIGlmIChuID09PSAxKSB7XG4gICAgICByZXR1cm4gMTg7XG4gICAgfVxuICAgIGlmIChuID09PSAyKSB7XG4gICAgICByZXR1cm4gOTtcbiAgICB9XG4gICAgcmV0dXJuIDY7XG4gIH1cblxuICBjb21wdXRlT2Zmc2V0KCkge1xuICAgIGNvbnN0IHZpc2libGVDb3VudCA9IHRoaXMuZ2V0VmlzaWJsZUZpbHRlckNvdW50KCk7XG4gICAgLy8g4omkMiDkuKrlj6/op4HmnaHku7bml7blrZfmrrXlt7LliqDlrr3ljaDmu6HkuIDooYzliankvZnvvIzmjInpkq7kuI3lho0gb2Zmc2V0XG4gICAgaWYgKHZpc2libGVDb3VudCA8PSAyKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgY29uc3QgbW9kdWxhciA9IHZpc2libGVDb3VudCAlIDQ7XG4gICAgaWYgKHZpc2libGVDb3VudCA9PT0gNCkge1xuICAgICAgcmV0dXJuIDE4O1xuICAgIH1cbiAgICAvLyDiiaUz77ya5rK/55So5Y6fICU0IOmAu+i+ke+8jOaMieWPr+ingeaVsOiuoeeul++8iOmBv+WFjeaUtui1t+WQjumUmeS9je+8iVxuICAgIHJldHVybiB0aGlzLmlzU2hvd01vcmVcbiAgICAgID8gKChtb2R1bGFyID09PSAwIHx8IHZpc2libGVDb3VudCA+IDcpID8gMCA6ICgzIC0gbW9kdWxhcikgKiA2KVxuICAgICAgOiAobW9kdWxhciA9PT0gMCA/IDE4IDogKDMgLSBtb2R1bGFyKSAqIDYpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0xpc3QobGlzdDogQXJyYXk8RmlsdGVyPik6IGJvb2xlYW4ge1xuICAgIGlmICghbGlzdCB8fCAobGlzdCAmJiBsaXN0Lmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBuYW1lTGlzdCA9IFtdO1xuICAgIGxpc3QuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgbmFtZUxpc3QucHVzaChpdGVtLm5hbWUpO1xuICAgIH0pO1xuICAgIGlmIChbLi4ubmV3IFNldChuYW1lTGlzdCldLmxlbmd0aCAhPT0gbGlzdC5sZW5ndGgpIHtcbiAgICAgIHRocm93ICdmaWx0ZXLnu4Tku7bmlbDmja7moLzlvI/kuI3op4TojIPvvIzlrZjlnKjph43lpI1uYW1l5YC8ISc7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHVibGljIHN1Ym1pdEZvcm0oKTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hFdmVudC5lbWl0KHRoaXMudmFsaWRhdGVGaWx0ZXJGb3JtLmdldFJhd1ZhbHVlKCkpO1xuICB9XG5cbiAgcHVibGljIHJlc2V0Rm9ybSgpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2V0RmlsdGVyRm9ybVdpdGhWYWx1ZSgpO1xuICAgIGlmICh0aGlzLnJlc2V0RXZlbnQub2JzZXJ2ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucmVzZXRFdmVudC5lbWl0KHRoaXMudmFsaWRhdGVGaWx0ZXJGb3JtLmdldFJhd1ZhbHVlKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlYXJjaEV2ZW50LmVtaXQodGhpcy52YWxpZGF0ZUZpbHRlckZvcm0uZ2V0UmF3VmFsdWUoKSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlc2V0RmlsdGVyRm9ybVdpdGhWYWx1ZSgpIHtcbiAgICBjb25zdCByZXNldFZhbHVlOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgdGhpcy5maWx0ZXJMaXN0LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIHJlc2V0VmFsdWVbaXRlbS5uYW1lXSA9IGl0ZW0udmFsdWU7XG4gICAgfSk7XG4gICAgdGhpcy52YWxpZGF0ZUZpbHRlckZvcm0ucGF0Y2hWYWx1ZShyZXNldFZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGaWx0ZXJEYXRhKCkge1xuICAgIHJldHVybiB0aGlzLnZhbGlkYXRlRmlsdGVyRm9ybS5nZXRSYXdWYWx1ZSgpO1xuICB9XG5cbiAgcHVibGljIHNob3dNb3JlKCk6IHZvaWQge1xuICAgIHRoaXMuaXNTaG93TW9yZSA9ICF0aGlzLmlzU2hvd01vcmU7XG4gICAgdGhpcy5maWx0ZXJMaXN0LmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICBpdGVtLnNob3cgPSB0aGlzLmlzU2hvd01vcmUgPyBpbmRleCA8IDcgOiB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGlucHV0Q2xlYW4oZmlsdGVyOiBGaWx0ZXIpOiB2b2lkIHtcbiAgICBjb25zdCBwYXRjaE9iamVjdCA9IHt9O1xuICAgIHBhdGNoT2JqZWN0W2ZpbHRlci5uYW1lXSA9IG51bGw7XG4gICAgdGhpcy52YWxpZGF0ZUZpbHRlckZvcm0ucGF0Y2hWYWx1ZShwYXRjaE9iamVjdCk7XG4gIH1cblxuICBpc0FsbG93Q2xlYXIoaXRlbTogRmlsdGVyKTogYm9vbGVhbiB7XG4gICAgaWYgKCFpdGVtKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGl0ZW0uaGRBbGxvd0NsZWFyICE9IG51bGwpIHtcbiAgICAgIHJldHVybiAhIWl0ZW0uaGRBbGxvd0NsZWFyO1xuICAgIH1cbiAgICBpZiAoaXRlbS5zZWxlY3RPcHRpb24gJiYgaXRlbS5zZWxlY3RPcHRpb24uaGRBbGxvd0NsZWFyICE9IG51bGwpIHtcbiAgICAgIHJldHVybiAhIWl0ZW0uc2VsZWN0T3B0aW9uLmhkQWxsb3dDbGVhcjtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tIOetm+mAiee7hCAtLS0tLS0tLS0tXG5cbiAgcHJpdmF0ZSB0cnlMb2FkU2NoZW1lcyhhcHBseURlZmF1bHQ6IGJvb2xlYW4pIHtcbiAgICBpZiAoIXRoaXMuY2FuVXNlU2NoZW1lKSB7XG4gICAgICB0aGlzLnNjaGVtZUxpc3QgPSBbXTtcbiAgICAgIHRoaXMuY3VycmVudFNjaGVtZSA9IG51bGw7XG4gICAgICB0aGlzLmN1cnJlbnRTY2hlbWVOYW1lID0gSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2NoZW1lTG9hZGluZyA9IHRydWU7XG4gICAgaWYgKHRoaXMuc2NoZW1lTG9hZFN1Yikge1xuICAgICAgdGhpcy5zY2hlbWVMb2FkU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIHRoaXMuc2NoZW1lTG9hZFN1YiA9IHRoaXMuc2NoZW1lU3RvcmUucXVlcnlCeUZpbHRlcktleSh0aGlzLmZpbHRlclNjaGVtZUtleSkuc3Vic2NyaWJlKFxuICAgICAgKGxpc3QpID0+IHtcbiAgICAgICAgdGhpcy5zY2hlbWVMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2NoZW1lTGlzdCA9IGxpc3QgfHwgW107XG4gICAgICAgIGlmIChhcHBseURlZmF1bHQpIHtcbiAgICAgICAgICB0aGlzLmFwcGx5U2NoZW1lQnlOYW1lKEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRTY2hlbWUgJiYgdGhpcy5jdXJyZW50U2NoZW1lLnV1aWQpIHtcbiAgICAgICAgICBjb25zdCBmb3VuZCA9IHRoaXMuc2NoZW1lTGlzdC5maW5kKHMgPT4gcy51dWlkID09PSB0aGlzLmN1cnJlbnRTY2hlbWUudXVpZCk7XG4gICAgICAgICAgdGhpcy5jdXJyZW50U2NoZW1lID0gZm91bmQgfHwgbnVsbDtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRTY2hlbWVOYW1lID0gZm91bmQgPyBmb3VuZC50ZW1wbGF0ZU5hbWUgOiBIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5zY2hlbWVMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2hvd0Vycm9yKCfliqDovb3nrZvpgInmqKHniYjlpLHotKXvvJonICsgKGVyciB8fCAnJykpO1xuICAgICAgICBpZiAoYXBwbHlEZWZhdWx0KSB7XG4gICAgICAgICAgdGhpcy5hcHBseVNjaGVtZUJ5TmFtZShIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLyoqIOWxleekuueUqOWIl+ihqO+8muS/neivgeacieOAjOm7mOiupOadoeS7tuOAjSAqL1xuICBnZXREaXNwbGF5U2NoZW1lTGlzdCgpOiBBcnJheTxIZEZpbHRlclNjaGVtZT4ge1xuICAgIGNvbnN0IHJlc3VsdDogQXJyYXk8SGRGaWx0ZXJTY2hlbWU+ID0gW107XG4gICAgY29uc3QgZnJvbURiID0gdGhpcy5zY2hlbWVMaXN0LmZpbmQocyA9PiBzLnRlbXBsYXRlTmFtZSA9PT0gSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUUpO1xuICAgIGlmIChmcm9tRGIpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGZyb21EYik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgZmlsdGVyS2V5OiB0aGlzLmZpbHRlclNjaGVtZUtleSxcbiAgICAgICAgdGVtcGxhdGVOYW1lOiBIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRSxcbiAgICAgICAgZmlsdGVyVmFsdWU6IEpTT04uc3RyaW5naWZ5KHRoaXMuZGVmYXVsdEZpbHRlclZhbHVlcyB8fCB7fSlcbiAgICAgIH0pO1xuICAgIH1cbiAgICAodGhpcy5zY2hlbWVMaXN0IHx8IFtdKS5mb3JFYWNoKHMgPT4ge1xuICAgICAgaWYgKHMudGVtcGxhdGVOYW1lICE9PSBIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRSkge1xuICAgICAgICByZXN1bHQucHVzaChzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgb3BlblN3aXRjaE1vZGFsKCkge1xuICAgIGlmICghdGhpcy5jYW5Vc2VTY2hlbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuY3VycmVudFNjaGVtZVxuICAgICAgfHwge1xuICAgICAgICBmaWx0ZXJLZXk6IHRoaXMuZmlsdGVyU2NoZW1lS2V5LFxuICAgICAgICB0ZW1wbGF0ZU5hbWU6IHRoaXMuY3VycmVudFNjaGVtZU5hbWUgfHwgSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUUsXG4gICAgICAgIGZpbHRlclZhbHVlOiAnJ1xuICAgICAgfTtcbiAgICB0aGlzLmJ1aWxkU3dpdGNoRm9ybUxpc3QodGhpcy5nZXRTd2l0Y2hPcHRpb25LZXkoY3VycmVudCkpO1xuICAgIHRoaXMuc3dpdGNoTW9kYWxWaXNpYmxlID0gdHJ1ZTtcbiAgfVxuXG4gIGNsb3NlU3dpdGNoTW9kYWwoKSB7XG4gICAgdGhpcy5zd2l0Y2hNb2RhbFZpc2libGUgPSBmYWxzZTtcbiAgfVxuXG4gIHN3aXRjaEZvcm1DaGFuZ2VFdmVudChmb3JtOiBGb3JtR3JvdXApIHtcbiAgICB0aGlzLnN3aXRjaFZhbGlkYXRlRm9ybSA9IGZvcm07XG4gIH1cblxuICBnZXRTd2l0Y2hPcHRpb25LZXkoaXRlbTogSGRGaWx0ZXJTY2hlbWUpOiBzdHJpbmcge1xuICAgIGlmICghaXRlbSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3dpdGNoRGVmYXVsdEtleTtcbiAgICB9XG4gICAgaWYgKGl0ZW0udXVpZCkge1xuICAgICAgcmV0dXJuIGl0ZW0udXVpZDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3dpdGNoRGVmYXVsdEtleTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRTd2l0Y2hGb3JtTGlzdChzZWxlY3RlZEtleTogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2VsZWN0TGlzdCA9IHRoaXMuZ2V0RGlzcGxheVNjaGVtZUxpc3QoKS5tYXAoaXRlbSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogdGhpcy5nZXRTd2l0Y2hPcHRpb25LZXkoaXRlbSksXG4gICAgICAgIGxhYmVsOiBpdGVtLnRlbXBsYXRlTmFtZVxuICAgICAgfTtcbiAgICB9KTtcbiAgICB0aGlzLnN3aXRjaEZvcm1MaXN0ID0gW1xuICAgICAge1xuICAgICAgICB0eXBlOiBGb3JtTGlzdFR5cGUuU2VsZWN0LFxuICAgICAgICBsYWJlbDogJ+etm+mAiee7hCcsXG4gICAgICAgIG5hbWU6ICdzY2hlbWVLZXknLFxuICAgICAgICByZXF1aXJlOiB0cnVlLFxuICAgICAgICB3aWR0aDogNCxcbiAgICAgICAgdmFsdWU6IHNlbGVjdGVkS2V5LFxuICAgICAgICBwbGFjZWhvbGRlcjogJ+ivt+mAieaLqeetm+mAiee7hCcsXG4gICAgICAgIHNlbGVjdE9wdGlvbjoge1xuICAgICAgICAgIHZhbHVlOiAndmFsdWUnLFxuICAgICAgICAgIGxhYmVsOiAnbGFiZWwnLFxuICAgICAgICAgIGhkU2hvd1NlYXJjaDogdHJ1ZSxcbiAgICAgICAgICBzZWxlY3RMaXN0OiBzZWxlY3RMaXN0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdO1xuICB9XG5cbiAgY29uZmlybVN3aXRjaCgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuc3dpdGNoVmFsaWRhdGVGb3JtIHx8ICF0aGlzLnN3aXRjaFZhbGlkYXRlRm9ybS52YWxpZCkge1xuICAgICAgdGhpcy5zaG93RXJyb3IoJ+ivt+mAieaLqeetm+mAiee7hCcpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBzY2hlbWVLZXkgPSB0aGlzLnN3aXRjaFZhbGlkYXRlRm9ybS5nZXRSYXdWYWx1ZSgpLnNjaGVtZUtleTtcbiAgICBpZiAoc2NoZW1lS2V5ID09IG51bGwgfHwgc2NoZW1lS2V5ID09PSAnJykge1xuICAgICAgdGhpcy5zaG93RXJyb3IoJ+ivt+mAieaLqeetm+mAiee7hCcpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBsaXN0ID0gdGhpcy5nZXREaXNwbGF5U2NoZW1lTGlzdCgpO1xuICAgIGxldCB0YXJnZXQ6IEhkRmlsdGVyU2NoZW1lID0gbnVsbDtcbiAgICBpZiAoc2NoZW1lS2V5ID09PSB0aGlzLnN3aXRjaERlZmF1bHRLZXkpIHtcbiAgICAgIHRhcmdldCA9IGxpc3QuZmluZChzID0+IHMudGVtcGxhdGVOYW1lID09PSBIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRSAmJiAhcy51dWlkKVxuICAgICAgICB8fCBsaXN0LmZpbmQocyA9PiBzLnRlbXBsYXRlTmFtZSA9PT0gSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YXJnZXQgPSBsaXN0LmZpbmQocyA9PiBzLnV1aWQgPT09IHNjaGVtZUtleSk7XG4gICAgfVxuICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICB0aGlzLnNob3dFcnJvcign6K+36YCJ5oup562b6YCJ57uEJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuYXBwbHlTY2hlbWUodGFyZ2V0LCB0cnVlKTtcbiAgICB0aGlzLnN3aXRjaE1vZGFsVmlzaWJsZSA9IGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaXNEZWZhdWx0U2NoZW1lKGl0ZW06IEhkRmlsdGVyU2NoZW1lKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhKGl0ZW0gJiYgaXRlbS50ZW1wbGF0ZU5hbWUgPT09IEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FKTtcbiAgfVxuXG4gIGNhbkRlbGV0ZUN1cnJlbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhKHRoaXMuY3VycmVudFNjaGVtZSAmJiB0aGlzLmN1cnJlbnRTY2hlbWUudXVpZFxuICAgICAgJiYgdGhpcy5jdXJyZW50U2NoZW1lLnRlbXBsYXRlTmFtZSAhPT0gSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUUpO1xuICB9XG5cbiAgc2F2ZUN1cnJlbnRTY2hlbWUoKSB7XG4gICAgaWYgKCF0aGlzLmNhblVzZVNjaGVtZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBuYW1lID0gdGhpcy5jdXJyZW50U2NoZW1lTmFtZSB8fCBIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRTtcbiAgICBjb25zdCBib2R5OiBIZEZpbHRlclNjaGVtZSA9IHtcbiAgICAgIHV1aWQ6IHRoaXMuY3VycmVudFNjaGVtZSAmJiB0aGlzLmN1cnJlbnRTY2hlbWUudXVpZCA/IHRoaXMuY3VycmVudFNjaGVtZS51dWlkIDogbnVsbCxcbiAgICAgIGZpbHRlcktleTogdGhpcy5maWx0ZXJTY2hlbWVLZXksXG4gICAgICB0ZW1wbGF0ZU5hbWU6IG5hbWUsXG4gICAgICBmaWx0ZXJWYWx1ZTogdGhpcy5zZXJpYWxpemVGaWx0ZXJWYWx1ZSgpXG4gICAgfTtcbiAgICB0aGlzLnNjaGVtZVNhdmluZyA9IHRydWU7XG4gICAgaWYgKHRoaXMuc2NoZW1lQWN0aW9uU3ViKSB7XG4gICAgICB0aGlzLnNjaGVtZUFjdGlvblN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB0aGlzLnNjaGVtZUFjdGlvblN1YiA9IHRoaXMuc2NoZW1lU3RvcmUuc2F2ZShib2R5KS5zdWJzY3JpYmUoXG4gICAgICAoc2F2ZWQpID0+IHtcbiAgICAgICAgdGhpcy5zY2hlbWVTYXZpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93U3VjY2Vzcygn5L+d5a2Y5oiQ5YqfJyk7XG4gICAgICAgIHRoaXMuY3VycmVudFNjaGVtZSA9IHNhdmVkO1xuICAgICAgICB0aGlzLmN1cnJlbnRTY2hlbWVOYW1lID0gc2F2ZWQudGVtcGxhdGVOYW1lO1xuICAgICAgICB0aGlzLnJlZnJlc2hTY2hlbWVMaXN0S2VlcEN1cnJlbnQoKTtcbiAgICAgIH0sXG4gICAgICAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMuc2NoZW1lU2F2aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2hvd0Vycm9yKCfkv53lrZjlpLHotKXvvJonICsgKGVyciB8fCAnJykpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBvcGVuU2F2ZUFzTW9kYWwoKSB7XG4gICAgdGhpcy5idWlsZFNhdmVBc0Zvcm1MaXN0KCk7XG4gICAgdGhpcy5zYXZlQXNNb2RhbFZpc2libGUgPSB0cnVlO1xuICB9XG5cbiAgY2xvc2VTYXZlQXNNb2RhbCgpIHtcbiAgICB0aGlzLnNhdmVBc01vZGFsVmlzaWJsZSA9IGZhbHNlO1xuICB9XG5cbiAgc2F2ZUFzRm9ybUNoYW5nZUV2ZW50KGZvcm06IEZvcm1Hcm91cCkge1xuICAgIHRoaXMuc2F2ZUFzVmFsaWRhdGVGb3JtID0gZm9ybTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRTYXZlQXNGb3JtTGlzdCgpIHtcbiAgICB0aGlzLnNhdmVBc0Zvcm1MaXN0ID0gW1xuICAgICAge1xuICAgICAgICB0eXBlOiBGb3JtTGlzdFR5cGUuSW5wdXQsXG4gICAgICAgIGxhYmVsOiAn562b6YCJ57uE5ZCN56ewJyxcbiAgICAgICAgbmFtZTogJ3RlbXBsYXRlTmFtZScsXG4gICAgICAgIHJlcXVpcmU6IHRydWUsXG4gICAgICAgIHdpZHRoOiA0LFxuICAgICAgICBtYXhMZW5ndGg6IDUwLFxuICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICfor7fovpPlhaXnrZvpgInnu4TlkI3np7AnXG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIGNvbmZpcm1TYXZlQXMoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnNhdmVBc1ZhbGlkYXRlRm9ybSB8fCAhdGhpcy5zYXZlQXNWYWxpZGF0ZUZvcm0udmFsaWQpIHtcbiAgICAgIHRoaXMuc2hvd0Vycm9yKCfor7fovpPlhaXnrZvpgInnu4TlkI3np7AnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgbmFtZSA9ICgodGhpcy5zYXZlQXNWYWxpZGF0ZUZvcm0uZ2V0UmF3VmFsdWUoKS50ZW1wbGF0ZU5hbWUpIHx8ICcnKS50cmltKCk7XG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICB0aGlzLnNob3dFcnJvcign6K+36L6T5YWl562b6YCJ57uE5ZCN56ewJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChuYW1lID09PSBIRF9GSUxURVJfREVGQVVMVF9TQ0hFTUVfTkFNRSkge1xuICAgICAgdGhpcy5zaG93RXJyb3IoJ+S4jeiDveS9v+eUqOOAjOm7mOiupOadoeS7tuOAjeS9nOS4uuetm+mAiee7hOWQjeensO+8jOivt+S9v+eUqOOAjOS/neWtmOS4uuW9k+WJjeOAjeimhueblum7mOiupOadoeS7ticpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBleGlzdHMgPSAodGhpcy5zY2hlbWVMaXN0IHx8IFtdKS5zb21lKHMgPT4gcy50ZW1wbGF0ZU5hbWUgPT09IG5hbWUpO1xuICAgIGlmIChleGlzdHMpIHtcbiAgICAgIHRoaXMuc2hvd0Vycm9yKCfnrZvpgInnu4TlkI3np7Dlt7LlrZjlnKgnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgYm9keTogSGRGaWx0ZXJTY2hlbWUgPSB7XG4gICAgICBmaWx0ZXJLZXk6IHRoaXMuZmlsdGVyU2NoZW1lS2V5LFxuICAgICAgdGVtcGxhdGVOYW1lOiBuYW1lLFxuICAgICAgZmlsdGVyVmFsdWU6IHRoaXMuc2VyaWFsaXplRmlsdGVyVmFsdWUoKVxuICAgIH07XG4gICAgdGhpcy5zY2hlbWVTYXZpbmcgPSB0cnVlO1xuICAgIGlmICh0aGlzLnNjaGVtZUFjdGlvblN1Yikge1xuICAgICAgdGhpcy5zY2hlbWVBY3Rpb25TdWIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgdGhpcy5zY2hlbWVBY3Rpb25TdWIgPSB0aGlzLnNjaGVtZVN0b3JlLnNhdmUoYm9keSkuc3Vic2NyaWJlKFxuICAgICAgKHNhdmVkKSA9PiB7XG4gICAgICAgIHRoaXMuc2NoZW1lU2F2aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2F2ZUFzTW9kYWxWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2hvd1N1Y2Nlc3MoJ+WPpuWtmOS4uuaIkOWKnycpO1xuICAgICAgICB0aGlzLmN1cnJlbnRTY2hlbWUgPSBzYXZlZDtcbiAgICAgICAgdGhpcy5jdXJyZW50U2NoZW1lTmFtZSA9IHNhdmVkLnRlbXBsYXRlTmFtZTtcbiAgICAgICAgdGhpcy5yZWZyZXNoU2NoZW1lTGlzdEtlZXBDdXJyZW50KCk7XG4gICAgICB9LFxuICAgICAgKGVycikgPT4ge1xuICAgICAgICB0aGlzLnNjaGVtZVNhdmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dFcnJvcign5Y+m5a2Y5Li65aSx6LSl77yaJyArIChlcnIgfHwgJycpKTtcbiAgICAgIH1cbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGRlbGV0ZUN1cnJlbnRTY2hlbWUoKSB7XG4gICAgaWYgKCF0aGlzLmNhbkRlbGV0ZUN1cnJlbnQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB1dWlkID0gdGhpcy5jdXJyZW50U2NoZW1lLnV1aWQ7XG4gICAgdGhpcy5zY2hlbWVTYXZpbmcgPSB0cnVlO1xuICAgIGlmICh0aGlzLnNjaGVtZUFjdGlvblN1Yikge1xuICAgICAgdGhpcy5zY2hlbWVBY3Rpb25TdWIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgdGhpcy5zY2hlbWVBY3Rpb25TdWIgPSB0aGlzLnNjaGVtZVN0b3JlLmRlbGV0ZSh1dWlkKS5zdWJzY3JpYmUoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuc2NoZW1lU2F2aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2hvd1N1Y2Nlc3MoJ+WIoOmZpOaIkOWKnycpO1xuICAgICAgICB0aGlzLnNjaGVtZUxpc3QgPSAodGhpcy5zY2hlbWVMaXN0IHx8IFtdKS5maWx0ZXIocyA9PiBzLnV1aWQgIT09IHV1aWQpO1xuICAgICAgICB0aGlzLmFwcGx5U2NoZW1lQnlOYW1lKEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FLCB0cnVlKTtcbiAgICAgIH0sXG4gICAgICAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMuc2NoZW1lU2F2aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2hvd0Vycm9yKCfliKDpmaTlpLHotKXvvJonICsgKGVyciB8fCAnJykpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlZnJlc2hTY2hlbWVMaXN0S2VlcEN1cnJlbnQoKSB7XG4gICAgaWYgKCF0aGlzLmNhblVzZVNjaGVtZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNjaGVtZVN0b3JlLnF1ZXJ5QnlGaWx0ZXJLZXkodGhpcy5maWx0ZXJTY2hlbWVLZXkpLnN1YnNjcmliZShcbiAgICAgIChsaXN0KSA9PiB7XG4gICAgICAgIHRoaXMuc2NoZW1lTGlzdCA9IGxpc3QgfHwgW107XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRTY2hlbWUgJiYgdGhpcy5jdXJyZW50U2NoZW1lLnV1aWQpIHtcbiAgICAgICAgICBjb25zdCBmb3VuZCA9IHRoaXMuc2NoZW1lTGlzdC5maW5kKHMgPT4gcy51dWlkID09PSB0aGlzLmN1cnJlbnRTY2hlbWUudXVpZCk7XG4gICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTY2hlbWUgPSBmb3VuZDtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFNjaGVtZU5hbWUgPSBmb3VuZC50ZW1wbGF0ZU5hbWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgKCkgPT4geyAvKiBpZ25vcmUgKi8gfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5U2NoZW1lQnlOYW1lKG5hbWU6IHN0cmluZywgZW1pdFNlYXJjaDogYm9vbGVhbikge1xuICAgIGNvbnN0IGxpc3QgPSB0aGlzLmdldERpc3BsYXlTY2hlbWVMaXN0KCk7XG4gICAgY29uc3QgdGFyZ2V0ID0gbGlzdC5maW5kKHMgPT4gcy50ZW1wbGF0ZU5hbWUgPT09IG5hbWUpO1xuICAgIGlmICh0YXJnZXQpIHtcbiAgICAgIHRoaXMuYXBwbHlTY2hlbWUodGFyZ2V0LCBlbWl0U2VhcmNoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGx5U2NoZW1lKHNjaGVtZTogSGRGaWx0ZXJTY2hlbWUsIGVtaXRTZWFyY2g6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmN1cnJlbnRTY2hlbWUgPSBzY2hlbWUgJiYgc2NoZW1lLnV1aWQgPyBzY2hlbWUgOiB7XG4gICAgICBmaWx0ZXJLZXk6IHRoaXMuZmlsdGVyU2NoZW1lS2V5LFxuICAgICAgdGVtcGxhdGVOYW1lOiBzY2hlbWUgPyBzY2hlbWUudGVtcGxhdGVOYW1lIDogSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUUsXG4gICAgICBmaWx0ZXJWYWx1ZTogc2NoZW1lID8gc2NoZW1lLmZpbHRlclZhbHVlIDogSlNPTi5zdHJpbmdpZnkodGhpcy5kZWZhdWx0RmlsdGVyVmFsdWVzIHx8IHt9KVxuICAgIH07XG4gICAgdGhpcy5jdXJyZW50U2NoZW1lTmFtZSA9IHRoaXMuY3VycmVudFNjaGVtZS50ZW1wbGF0ZU5hbWUgfHwgSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUU7XG5cbiAgICBsZXQgdmFsdWVzOiBhbnkgPSB7fTtcbiAgICBpZiAodGhpcy5jdXJyZW50U2NoZW1lTmFtZSA9PT0gSERfRklMVEVSX0RFRkFVTFRfU0NIRU1FX05BTUUgJiYgIShzY2hlbWUgJiYgc2NoZW1lLnV1aWQpKSB7XG4gICAgICB2YWx1ZXMgPSB0aGlzLmNsb25lUGxhaW4odGhpcy5kZWZhdWx0RmlsdGVyVmFsdWVzIHx8IHt9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFsdWVzID0gSlNPTi5wYXJzZShzY2hlbWUuZmlsdGVyVmFsdWUgfHwgJ3t9Jyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHZhbHVlcyA9IHt9O1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY3VycmVudFNjaGVtZU5hbWUgPT09IEhEX0ZJTFRFUl9ERUZBVUxUX1NDSEVNRV9OQU1FKSB7XG4gICAgICAgIC8vIOW6k+S4rem7mOiupOadoeS7tuimhuebluWIneWni+WAvO+8muS7pem7mOiupOWAvOS4uuW6le+8jOWGjeWPoOWKoOW6k+WAvFxuICAgICAgICB2YWx1ZXMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmRlZmF1bHRGaWx0ZXJWYWx1ZXMgfHwge30sIHZhbHVlcyB8fCB7fSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucGF0Y2hGaWx0ZXJWYWx1ZXModmFsdWVzKTtcbiAgICBpZiAoZW1pdFNlYXJjaCkge1xuICAgICAgdGhpcy5zdWJtaXRGb3JtKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXJpYWxpemVGaWx0ZXJWYWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLmdldEZpbHRlckRhdGEoKSB8fCB7fSk7XG4gIH1cblxuICBwcml2YXRlIHBhdGNoRmlsdGVyVmFsdWVzKHZhbHVlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkge1xuICAgIGlmICghdGhpcy52YWxpZGF0ZUZpbHRlckZvcm0gfHwgIXRoaXMuZmlsdGVyTGlzdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwYXRjaDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIHRoaXMuZmlsdGVyTGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgaWYgKHZhbHVlcyAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWVzLCBpdGVtLm5hbWUpKSB7XG4gICAgICAgIHBhdGNoW2l0ZW0ubmFtZV0gPSB0aGlzLnJldml2ZUZpbHRlclZhbHVlKGl0ZW0sIHZhbHVlc1tpdGVtLm5hbWVdKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnZhbGlkYXRlRmlsdGVyRm9ybS5wYXRjaFZhbHVlKHBhdGNoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmV2aXZlRmlsdGVyVmFsdWUoZmlsdGVyOiBGaWx0ZXIsIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmIChmaWx0ZXIudHlwZSA9PT0gRmlsdGVyTGlzdFR5cGUuRGF0ZVJhbmdlKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLm1hcCh2ID0+IHRoaXMucGFyc2VEYXRlTGlrZSh2KSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmIChmaWx0ZXIudHlwZSA9PT0gRmlsdGVyTGlzdFR5cGUuRGF0ZSB8fCBmaWx0ZXIudHlwZSA9PT0gRmlsdGVyTGlzdFR5cGUuTW9udGgpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlRGF0ZUxpa2UodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlRGF0ZUxpa2UodmFsdWU6IGFueSk6IGFueSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIC9eXFxkezR9LVxcZHsyfS1cXGR7Mn0vLnRlc3QodmFsdWUpKSB7XG4gICAgICBjb25zdCBkID0gbmV3IERhdGUodmFsdWUpO1xuICAgICAgcmV0dXJuIGlzTmFOKGQuZ2V0VGltZSgpKSA/IHZhbHVlIDogZDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIGNvbnN0IGQgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICByZXR1cm4gaXNOYU4oZC5nZXRUaW1lKCkpID8gdmFsdWUgOiBkO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGNsb25lUGxhaW4ob2JqOiBhbnkpOiBhbnkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmogPT0gbnVsbCA/IHt9IDogb2JqKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2hvd1N1Y2Nlc3MobXNnOiBzdHJpbmcpIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgKHdpbmRvdyBhcyBhbnkpLmhkTWVzc2FnZVNlcnZpY2UpIHtcbiAgICAgICh3aW5kb3cgYXMgYW55KS5oZE1lc3NhZ2VTZXJ2aWNlLnByb3RvdHlwZS5zdWNjZXNzKG1zZyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzaG93RXJyb3IobXNnOiBzdHJpbmcpIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgKHdpbmRvdyBhcyBhbnkpLmhkTWVzc2FnZVNlcnZpY2UpIHtcbiAgICAgICh3aW5kb3cgYXMgYW55KS5oZE1lc3NhZ2VTZXJ2aWNlLnByb3RvdHlwZS5lcnJvcihtc2cpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS5lcnJvcihtc2cpO1xuICAgIH1cbiAgfVxuXG4gIGdldENhc2NhZGVyU2hvd1NlYXJjaCA9IGdldENhc2NhZGVyU2hvd1NlYXJjaDtcbiAgZ2V0Q2FzY2FkZXJNZW51Q2xhc3NOYW1lID0gZ2V0Q2FzY2FkZXJNZW51Q2xhc3NOYW1lO1xuICBnZXRDYXNjYWRlck1lbnVTdHlsZSA9IGdldENhc2NhZGVyTWVudVN0eWxlO1xufVxuIl19
|