atr-components 0.2.108 → 0.2.110

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.
@@ -21,4 +21,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
21
21
  name: 'dicts'
22
22
  }]
23
23
  }], ctorParameters: function () { return [{ type: i1.DictService }]; } });
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGljdHMucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2NvcmUvcGlwZS9kaWN0cy5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxJQUFJLEVBQWdCLE1BQU0sZUFBZSxDQUFDO0FBRWxELE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQzs7O0FBSTdDLE1BQU0sT0FBTyxTQUFTO0lBQ2xCLFlBQW9CLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO0lBQzVDLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBVSxFQUFFLFFBQVk7UUFDOUIsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzVCLE9BQU8sS0FBSyxDQUFBO1NBQ2Y7UUFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBQyxRQUFRLENBQUMsQ0FBQTtJQUMzRCxDQUFDOzt1R0FUUSxTQUFTO3FHQUFULFNBQVM7NEZBQVQsU0FBUztrQkFIckIsSUFBSTttQkFBQztvQkFDRixJQUFJLEVBQUUsT0FBTztpQkFDaEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1BpcGUsIFBpcGVUcmFuc2Zvcm19IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0RpY3RTZXJ2aWNlfSBmcm9tIFwiLi4vc2VydmljZXMvZGljdC9kaWN0LnNlcnZpY2VcIjtcclxuaW1wb3J0IHtUb29sc1V0aWx9IGZyb20gXCIuLi91dGlscy9Ub29sc1V0aWxcIjtcclxuQFBpcGUoe1xyXG4gICAgbmFtZTogJ2RpY3RzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRGljdHNQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRpY3RTZXJ2aWNlOiBEaWN0U2VydmljZSkge1xyXG4gICAgfVxyXG5cclxuICAgIHRyYW5zZm9ybSh2YWx1ZTogYW55LCBkaWN0Q29kZTphbnkpOiBhbnkge1xyXG4gICAgICAgIGlmIChUb29sc1V0aWwuaXNOdWxsKGRpY3RDb2RlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWVcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGljdFNlcnZpY2UuZ2V0Q29kZU5hbWVTeW5jKHZhbHVlLGRpY3RDb2RlKVxyXG4gICAgfVxyXG5cclxufVxyXG4iXX0=
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGljdHMucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2NvcmUvcGlwZS9kaWN0cy5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxJQUFJLEVBQWdCLE1BQU0sZUFBZSxDQUFDO0FBRWxELE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQzs7O0FBSTdDLE1BQU0sT0FBTyxTQUFTO0lBQ2xCLFlBQW9CLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO0lBQzVDLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBVSxFQUFFLFFBQWE7UUFDakMsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzlCLE9BQU8sS0FBSyxDQUFBO1NBQ2I7UUFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUMxRCxDQUFDOzt1R0FUUSxTQUFTO3FHQUFULFNBQVM7NEZBQVQsU0FBUztrQkFIckIsSUFBSTttQkFBQztvQkFDRixJQUFJLEVBQUUsT0FBTztpQkFDaEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1BpcGUsIFBpcGVUcmFuc2Zvcm19IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0RpY3RTZXJ2aWNlfSBmcm9tIFwiLi4vc2VydmljZXMvZGljdC9kaWN0LnNlcnZpY2VcIjtcclxuaW1wb3J0IHtUb29sc1V0aWx9IGZyb20gXCIuLi91dGlscy9Ub29sc1V0aWxcIjtcclxuQFBpcGUoe1xyXG4gICAgbmFtZTogJ2RpY3RzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRGljdHNQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRpY3RTZXJ2aWNlOiBEaWN0U2VydmljZSkge1xyXG4gICAgfVxyXG5cclxuICAgIHRyYW5zZm9ybSh2YWx1ZTogYW55LCBkaWN0Q29kZTogYW55KSB7XHJcbiAgICAgIGlmIChUb29sc1V0aWwuaXNOdWxsKGRpY3RDb2RlKSkge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0aGlzLmRpY3RTZXJ2aWNlLmdldENvZGVOYW1lU3luYyh2YWx1ZSwgZGljdENvZGUpXHJcbiAgICB9XHJcblxyXG59XHJcbiJdfQ==
@@ -331,6 +331,9 @@ export class AtrTableComponent {
331
331
  this.initHeader();
332
332
  if (this.queryOpts && this.queryOpts.tables) {
333
333
  for (let table of this.queryOpts.tables) {
334
+ if (table.type == 'dict') {
335
+ this.getDictValue(table.dictCode);
336
+ }
334
337
  if (table.sortKey) {
335
338
  table.sortable = true;
336
339
  this.sortMap[table.sortKey] = null;
@@ -411,6 +414,9 @@ export class AtrTableComponent {
411
414
  ngAfterViewInit() {
412
415
  setTimeout(() => {
413
416
  this.scrollSize.y = this.tableContent.nativeElement.offsetHeight - 100 + "px";
417
+ if (this.isHideTable) {
418
+ this.scrollSize.y = this.tableContent.nativeElement.offsetHeight + "px";
419
+ }
414
420
  let width = 0;
415
421
  if (this.queryOpts && this.queryOpts.tables) {
416
422
  for (let table of this.queryOpts.tables) {
@@ -681,10 +687,10 @@ export class AtrTableComponent {
681
687
  }
682
688
  }
683
689
  AtrTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AtrTableComponent, deps: [{ token: i1.FormBuilder }, { token: i0.Injector }, { token: LOCALE_ID }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
684
- AtrTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: AtrTableComponent, selector: "atr-table", inputs: { loading: "loading", allowDrag: "allowDrag", isHideTable: "isHideTable", queryOpts: "queryOpts", showPagination: "showPagination", title: "title" }, outputs: { tableAction: "tableAction", queryBack: "queryBack", headerAction: "headerAction" }, viewQueries: [{ propertyName: "tableContent", first: true, predicate: ["tableContent"], descendants: true, static: true }], ngImport: i0, template: "<form nz-form [formGroup]=\"atrForm\" class=\"ant-advanced-search-form\"\r\n *ngIf=\"queryOpts.headers.length >0 || queryOpts.actions.length >0\">\r\n <div nz-row [nzGutter]=\"24\">\r\n <div nz-col [hidden]=\"!header.isShow || !isCollapse\" *ngFor=\"let header of queryOpts.headers\"\r\n [nzSpan]=\"header.span\">\r\n <app-table-form-item\r\n [header]=\"header\"\r\n [ngModel]=\"header.defaultVal\"\r\n [dictList]=\"dicts[header.dictCode]\"\r\n [formControlName]=\"header.key\"\r\n (headerAction)=\"headerAction.emit($event)\"></app-table-form-item>\r\n </div>\r\n </div>\r\n <div nz-row nzType=\"flex\">\r\n <div class=\"action-area\" nz-col [nzSpan]=\"16\">\r\n <ng-container *ngFor=\"let action of queryOpts.actions\">\r\n <atr-local-upload *ngIf=\"action.gType == 'upload'\" [code]=\"action.code\" [url]=\"action.url\" [name]=\"action.name\"\r\n [withoutRole]=\"action.withoutRole\"\r\n style=\" display: inline-block;\"></atr-local-upload>\r\n <ng-container *ngIf=\"!action.gType\">\r\n <button nz-button [nzType]=\"'primary'\" nzSize=\"small\" (click)=\"doAction(action.code)\"\r\n *atrRole=\"action.withoutRole ? null:action.code\"\r\n [disabled]=\"isEnable(action.operator)\">{{action.name}}</button>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n <div nz-col [nzSpan]=\"8\" class=\"search-area\" *ngIf=\"queryOpts.headers.length >0 && !queryOpts.isHideQuery\">\r\n <button nz-button nzSize=\"small\" [nzType]=\"'primary'\" (click)=\"query(true)\">\u67E5\u8BE2</button>\r\n <button nz-button nzSize=\"small\" (click)=\"resetForm()\">\u91CD\u7F6E</button>\r\n <a class=\"collapse\" (click)=\"toggleCollapse()\" *ngIf=\"queryOpts.headers.length > 0 \">\r\n {{isCollapse ? '\u6536\u8D77':'\u5C55\u5F00'}}\r\n <i nz-icon [nzType]=\"isCollapse ? 'up' : 'down'\"></i>\r\n </a>\r\n </div>\r\n </div>\r\n <div *ngIf=\"title\" class=\"title\">{{title}}</div>\r\n</form>\r\n<div class=\"search-result-list\" #tableContent [spinLoading]=\"loading\" HqSpin>\r\n <nz-table *ngIf=\"isAllLoad && !isHideTable\" #basicTable class=\"main-table\"\r\n [nzScroll]=\"scrollSize\"\r\n nzSize=\"middle\"\r\n nzBordered\r\n [nzShowPagination]=\"showPagination\"\r\n nzShowSizeChanger\r\n [nzFrontPagination]=\"false\"\r\n [nzLoading]=\"loading\"\r\n [nzTotal]=\"total\"\r\n [(nzPageIndex)]=\"pageIndex\"\r\n [(nzPageSize)]=\"pageSize\"\r\n [nzData]=\"tableDatas\"\r\n (nzPageIndexChange)=\"query()\"\r\n (nzPageSizeChange)=\"query(true)\"\r\n [nzShowTotal]=\"totalTemplate\"\r\n >\r\n <thead>\r\n <tr (contextmenu)=\"contextMenu($event,menu)\" class=\"header-tr\">\r\n\r\n <th *ngIf=\"queryOpts.checkBox?.isShowCheckbox\"\r\n [nzLeft]=\"true\"\r\n class=\"left-zindex-header\"\r\n nzShowCheckbox\r\n style=\"z-index: 90!important;\"\r\n nzWidth=\"30px\"\r\n nzAlign=\"center\"\r\n [(nzChecked)]=\"isAllDisplayDataChecked\"\r\n [nzIndeterminate]=\"isIndeterminate\"\r\n (nzCheckedChange)=\"checkAll($event)\"\r\n ></th>\r\n <th [nzLeft]=\"true\" class=\"left-zindex-header\" *ngIf=\"queryOpts.isIndex\" nzWidth=\"30px\" nzAlign=\"center\">#</th>\r\n <th [nzLeft]=\"true\" class=\"left-zindex-header\" *ngIf=\"queryOpts.checkBox?.isRadio\" nzWidth=\"30px\"\r\n nzAlign=\"center\">#\r\n </th>\r\n <ng-container *ngFor=\"let item of queryOpts.tables; \">\r\n <th *ngIf=\"item.isShow \"\r\n [nzShowSort]=item.sortable\r\n nz-resizable\r\n nzPreview\r\n nzBounds=\"window\"\r\n [(nzSortOrder)]=\"sortMap[item.sortKey]\"\r\n (nzSortOrderChange)=\"sort(item.sortKey, $event)\"\r\n [nzWidth]=\"item.width\"\r\n [nzMaxWidth]=\"256\"\r\n [nzMinWidth]=\"60\"\r\n [nzRight]=\"item.isRight ? true : false\"\r\n [nzLeft]=\"item.isLeft ? true : false\"\r\n [ngClass]=\"{'left-zindex-header':item.isLeft ? true : false}\"\r\n (nzResizeEnd)=\"onResize($event, item.name)\">\r\n {{item.name}}<!-- {width}: { width: number }, col: string-->\r\n <nz-resize-handle nzDirection=\"right\">\r\n <div class=\"resize-trigger\"></div>\r\n </nz-resize-handle>\r\n </th>\r\n </ng-container>\r\n </tr>\r\n </thead>\r\n\r\n\r\n <tbody *ngIf=\"!allowDrag\">\r\n\r\n <tr *ngFor=\"let data of basicTable.data;index as i\" class=\"t-tr\" (click)=\"selectRow(data,i)\"\r\n [ngStyle]=\"{'color':isShowColor(data)}\"\r\n [ngClass]=\"{'selected': i == curChecked}\" (dblclick)=\"dbclickData(data,i)\">\r\n\r\n <td [nzLeft]=\"true\"\r\n class=\"left-zindex\"\r\n *ngIf=\"queryOpts.checkBox?.isShowCheckbox\"\r\n nzShowCheckbox\r\n [(nzChecked)]=\"mapOfCheckedId[data.id]\"\r\n (nzCheckedChange)=\"refreshStatus()\"\r\n ></td>\r\n <td [nzLeft]=\"true\"\r\n class=\"left-zindex\"\r\n *ngIf=\"queryOpts.checkBox?.isRadio\" nzShowCheckbox (nzCheckedChange)=\"selectRow(data,i)\"\r\n [(nzChecked)]=\"mapOfCheckedId[data.id]\"></td>\r\n <td [nzLeft]=\"true\"\r\n *ngIf=\"queryOpts.isIndex\" nzAlign=\"center\" style=\"padding:12px 0;\" nzBreakWord>{{i + 1}}</td>\r\n <ng-container *ngFor=\"let item of queryOpts.tables;\">\r\n\r\n <td [nzLeft]=\"item.isLeft ? true : false\"\r\n [ngClass]=\"{'left-zindex':item.isLeft ? true : false}\"\r\n [nzRight]=\"item.isRight ? true : false\"\r\n nzBreakWord\r\n [rowSpan]=\"checkRowSpan(item,data)\"\r\n *ngIf=\"checkShowTd(item,i) \">\r\n <app-table-td [data]=\"data\"\r\n [item]=\"item\"\r\n [i]=\"i\"\r\n (doActionByRowAction)=\"doActionByRow2($event)\"\r\n ></app-table-td>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n\r\n </tbody>\r\n <tbody *ngIf=\"allowDrag\" cdkDropList (cdkDropListDropped)=\"drop($event)\">\r\n <tr cdkDrag *ngFor=\"let data of basicTable.data;index as i\" class=\"t-tr\" (click)=\"selectRow(data,i)\"\r\n [ngClass]=\"{'selected': i == curChecked}\">\r\n <td [nzLeft]=\"true\"\r\n class=\"left-zindex\"\r\n *ngIf=\"queryOpts.checkBox?.isShowCheckbox\"\r\n nzShowCheckbox\r\n [(nzChecked)]=\"mapOfCheckedId[data.id]\"\r\n (nzCheckedChange)=\"refreshStatus()\"\r\n ></td>\r\n <!--\r\n <td [nzLeft]=\"item.isLeft ? true : false\" [ngClass]=\"{'left-zindex':item.isLeft ? true : false}\" [nzRight]=\"item.isRight ? true : false\"\r\n *ngIf=\"queryOpts.isShowCheckbox\"\r\n nzShowCheckbox\r\n [(nzChecked)]=\"mapOfCheckedId[data.id]\"\r\n (nzCheckedChange)=\"refreshStatus()\"\r\n ></td>\r\n -->\r\n <td [nzLeft]=\"true\"\r\n class=\"left-zindex\"\r\n *ngIf=\"queryOpts.checkBox?.isRadio\" nzShowCheckbox (nzCheckedChange)=\"selectRow(data,i)\"\r\n [(nzChecked)]=\"mapOfCheckedId[data.id]\"></td>\r\n <td [nzLeft]=\"true\"\r\n class=\"left-zindex\"\r\n *ngIf=\"queryOpts.isIndex\" nzAlign=\"center\" style=\"padding:12px 0;\" nzBreakWord>{{i + 1}}</td>\r\n\r\n <ng-container *ngFor=\"let item of queryOpts.tables;\">\r\n\r\n <td [nzLeft]=\"item.isLeft ? true : false\"\r\n [ngClass]=\"{'left-zindex':item.isLeft ? true : false}\"\r\n [nzRight]=\"item.isRight ? true : false\"\r\n nzBreakWord\r\n [rowSpan]=\"checkRowSpan(item,data)\"\r\n *ngIf=\"checkShowTd(item,i) \">\r\n <app-table-td [data]=\"data\"\r\n [item]=\"item\"\r\n [i]=\"i\"\r\n (doActionByRowAction)=\"doActionByRow2($event)\"\r\n ></app-table-td>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </tbody>\r\n\r\n\r\n <ng-template #totalTemplate let-total>\u5171 {{ total }} \u6761\u8BB0\u5F55</ng-template>\r\n </nz-table>\r\n <ng-content select=\"[slot1]\"></ng-content>\r\n <nz-dropdown-menu #menu=\"nzDropdownMenu\">\r\n <div class=\"tabel-colunmn\">\r\n <nz-checkbox-wrapper style=\"width: 100%;margin-top: 30px;\" (nzOnChange)=\"log($event)\">\r\n <div nz-row>\r\n <div nz-col nzSpan=\"24\" *ngFor=\"let item of queryOpts.tables\">\r\n <label nz-checkbox nzValue=\"{{item.key}}\" [ngModel]=\"item.isShow\">{{item.name}}</label>\r\n </div>\r\n </div>\r\n </nz-checkbox-wrapper>\r\n <div class=\"tabel-colunmn-header\">\u8BF7\u9009\u62E9\u5217\u8868\u663E\u793A\u5185\u5BB9</div>\r\n </div>\r\n </nz-dropdown-menu>\r\n</div>\r\n\r\n", styles: [":host{width:100%;height:100%;display:flex;flex-direction:column}:host ::ng-deep .ant-modal{top:50px;padding:0}:host .ant-advanced-search-form{padding:10px 6px 6px;background:#fbfbfb;border:1px solid #d9d9d9;border-radius:6px;margin-bottom:5px}:host .select-icon:hover{color:#1890ff}:host ::ng-deep .ant-advanced-search-form .ant-form-item{margin-bottom:5px}:host ::ng-deep .ant-table-column-title{font-size:.65rem}:host ::ng-deep .ant-table-tbody>tr.ant-table-row:hover>td{background:#d0eeea}:host ::ng-deep .ant-modal-header,:host ::ng-deep .ant-modal-content{border-radius:4px}:host ::ng-deep .ant-table-tbody>tr.selected:hover>td{background-color:#cfe1d0!important}:host ::ng-deep .ant-table{height:100%}:host ::ng-deep nz-pagination{position:absolute;bottom:0;right:0}:host .search-result-list{padding:1px;border:1px dashed #e9e9e9;border-radius:6px;background-color:#fff;flex:1;text-align:center;position:relative}:host [nz-form-label]{overflow:visible}:host button{margin:2px 4px}:host .collapse{margin-left:6px;font-size:12px}:host .action-area{text-align:left}:host .search-area{text-align:right}:host ::ng-deep .main-table{position:absolute;top:0;left:0;right:0;bottom:0}:host ::ng-deep .main-table .ant-spin-nested-loading{height:100%}:host ::ng-deep .main-table .ant-spin-container{height:100%}:host ::ng-deep .ant-table-tbody>tr.selected>td{background-color:#cfe1d0}:host ::ng-deep .ant-table-tbody>tr>td>img{display:block;width:40%;margin:0 auto}:host ::ng-deep .ant-table-body{-ms-overflow-style:none;overflow:-moz-scrollbars-none}:host ::ng-deep .ant-table-body::-webkit-scrollbar,:host ::ng-deep .ant-table-header::-webkit-scrollbar{width:6px!important;height:6px!important}:host ::ng-deep .ant-table-body::-webkit-scrollbar-track,:host ::ng-deep .ant-table-header::-webkit-scrollbar-track{width:6px!important;cursor:pointer}:host ::ng-deep .ant-table-body::-webkit-scrollbar-thumb,:host ::ng-deep .ant-table-header::-webkit-scrollbar-thumb{background:#1890ff;border-radius:3px;cursor:pointer}:host ::ng-deep .ant-table-bordered .ant-table-thead>tr>th{border-right:1px solid #ddd}:host ::ng-deep .ant-table-header{-ms-overflow-style:none;overflow:-moz-scrollbars-none;margin-bottom:-5px!important}:host ::ng-deep .ant-table-placeholder{border-bottom:none!important;border-top:none!important}:host .tabel-colunmn{display:block;width:160px;height:300px;background:#fff;border:1px solid #ddd;padding:10px;border-radius:5px;overflow-x:hidden;overflow-y:auto;position:relative}:host .tabel-colunmn-header{position:fixed;top:0;left:0;right:0;height:30px;z-index:999;line-height:30px;border-bottom:1px solid #ddd;text-align:left;font-size:13px;padding-left:10px}:host .t-tr{background:#fff}:host .t-tr:nth-child(odd){background:#f8f9fa}:host ::ng-deep .ant-table-thead>tr>th{background:#e7ebef!important;border-radius:0;word-break:break-all;white-space:pre-wrap}:host ::ng-deep .ant-table-tbody>tr>td{word-break:break-all;white-space:pre-wrap}:host ::ng-deep .ant-table-header{background:#e7ebef!important}:host td{font-size:.65rem}:host .resize-trigger{height:100%}:host .nz-resizable-preview{border-width:0;border-right-width:1px}:host ::ng-deep .ant-table-thead>tr>th .ant-table-header-column .ant-table-column-sorters>:not(.ant-table-column-sorter){position:unset}:host ::ng-deep .ant-table-tbody>tr>td{padding:5px}:host ::ng-deep .ant-table{line-height:15px}:host ::ng-deep .ant-table-middle .ant-table-footer,:host .ant-table-middle .ant-table-tbody>tr>td,:host .ant-table-middle .ant-table-thead>tr>th,:host .ant-table-middle .ant-table-title{padding:5px}:host ::ng-deep .ant-table-tbody>tr>td>img{width:35px}:host ::ng-deep .ant-modal-body{padding:10px}:host ::ng-deep .ant-table.ant-table-bordered tbody>tr>td{font-size:13px}:host ::ng-deep th{z-index:80!important}:host .left-zindex-header{z-index:90!important}:host .left-zindex{z-index:80!important}:host ::ng-deep input,:host ::ng-deep .ant-select-single:not(.ant-select-customize-input) .ant-select-selector,:host ::ng-deep .ant-picker{border-radius:5px}:host .border-text{width:100%;height:36px;line-height:36px;display:flex}:host .border-text .border-text-line{display:inline-block;border-top:1px solid #cccccc;margin-top:18px}:host .border-text .border-text-line-left{width:10px;border-left:1px solid #cccccc}:host .border-text .border-text-line-right{flex:1;border-right:1px solid #cccccc}:host .border-text .border-text-span{margin-left:5px;margin-right:5px}:host .label-title{position:absolute;display:block;top:-7px;left:10px;background-color:#fff;color:#000;font-weight:600;font-size:12px;line-height:12px}:host ::ng-deep .tabel-colunmn-header{position:absolute!important;top:0!important}:host ::ng-deep .ant-table-cell-fix-left,:host .ant-table-cell-fix-right{position:sticky!important}\n"], components: [{ type: i2.TableFormItemComponent, selector: "app-table-form-item", inputs: ["header", "value", "dictList"], outputs: ["headerAction"] }, { type: i3.LocalUploadComponent, selector: "atr-local-upload", inputs: ["url", "nzAccept", "name", "code", "withoutRole"], outputs: ["afterChange"] }, { type: i4.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { type: i5.NzTableComponent, selector: "nz-table", inputs: ["nzTableLayout", "nzShowTotal", "nzItemRender", "nzTitle", "nzFooter", "nzNoResult", "nzPageSizeOptions", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualForTrackBy", "nzLoadingDelay", "nzPageIndex", "nzPageSize", "nzTotal", "nzWidthConfig", "nzData", "nzPaginationPosition", "nzScroll", "nzPaginationType", "nzFrontPagination", "nzTemplateMode", "nzShowPagination", "nzLoading", "nzOuterBordered", "nzLoadingIndicator", "nzBordered", "nzSize", "nzShowSizeChanger", "nzHideOnSinglePage", "nzShowQuickJumper", "nzSimple"], outputs: ["nzPageSizeChange", "nzPageIndexChange", "nzQueryParams", "nzCurrentPageDataChange"], exportAs: ["nzTable"] }, { type: i5.NzTheadComponent, selector: "thead:not(.ant-table-thead)", outputs: ["nzSortOrderChange"] }, { type: i5.NzThSelectionComponent, selector: "th[nzSelections],th[nzChecked],th[nzShowCheckbox],th[nzShowRowSelection]", inputs: ["nzSelections", "nzChecked", "nzDisabled", "nzIndeterminate", "nzShowCheckbox", "nzShowRowSelection"], outputs: ["nzCheckedChange"] }, { type: i5.NzThAddOnComponent, selector: "th[nzColumnKey], th[nzSortFn], th[nzSortOrder], th[nzFilters], th[nzShowSort], th[nzShowFilter], th[nzCustomFilter]", inputs: ["nzColumnKey", "nzFilterMultiple", "nzSortOrder", "nzSortPriority", "nzSortDirections", "nzFilters", "nzSortFn", "nzFilterFn", "nzShowSort", "nzShowFilter", "nzCustomFilter"], outputs: ["nzCheckedChange", "nzSortOrderChange", "nzFilterChange"] }, { type: i6.NzResizeHandleComponent, selector: "nz-resize-handle, [nz-resize-handle]", inputs: ["nzDirection"], outputs: ["nzMouseDown"], exportAs: ["nzResizeHandle"] }, { type: i5.NzTbodyComponent, selector: "tbody" }, { type: i5.NzTdAddOnComponent, selector: "td[nzChecked], td[nzDisabled], td[nzIndeterminate], td[nzIndentSize], td[nzExpand], td[nzShowExpand], td[nzShowCheckbox]", inputs: ["nzChecked", "nzDisabled", "nzIndeterminate", "nzIndentSize", "nzShowExpand", "nzShowCheckbox", "nzExpand"], outputs: ["nzCheckedChange", "nzExpandChange"] }, { type: i7.TableTdComponent, selector: "app-table-td", inputs: ["data", "item", "i"], outputs: ["doActionByRowAction"] }, { type: i8.NzDropdownMenuComponent, selector: "nz-dropdown-menu", exportAs: ["nzDropdownMenu"] }, { type: i9.NzCheckboxWrapperComponent, selector: "nz-checkbox-wrapper", outputs: ["nzOnChange"], exportAs: ["nzCheckboxWrapper"] }, { type: i9.NzCheckboxComponent, selector: "[nz-checkbox]", inputs: ["nzValue", "nzAutoFocus", "nzDisabled", "nzIndeterminate", "nzChecked", "nzId"], outputs: ["nzCheckedChange"], exportAs: ["nzCheckbox"] }], directives: [{ type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i11.NzFormDirective, selector: "[nz-form]", inputs: ["nzLayout", "nzNoColon", "nzAutoTips", "nzDisableAutoTips", "nzTooltipIcon"], exportAs: ["nzForm"] }, { type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i12.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i12.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i13.AtrRoleDirective, selector: "[atrRole]", inputs: ["atrRole"] }, { type: i14.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }, { type: i15.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { type: i16.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { type: i17.HqSpinDirective, selector: "[HqSpin]", inputs: ["spinLoading", "text"] }, { type: i5.NzTrDirective, selector: "tr:not([mat-row]):not([mat-header-row]):not([nz-table-measure-row]):not([nzExpand]):not([nz-table-fixed-row])" }, { type: i5.NzTableCellDirective, selector: "th:not(.nz-disable-th):not([mat-cell]), td:not(.nz-disable-td):not([mat-cell])" }, { type: i5.NzThMeasureDirective, selector: "th", inputs: ["nzWidth", "colspan", "colSpan", "rowspan", "rowSpan"] }, { type: i5.NzCellAlignDirective, selector: "th[nzAlign],td[nzAlign]", inputs: ["nzAlign"] }, { type: i5.NzCellFixedDirective, selector: "td[nzRight],th[nzRight],td[nzLeft],th[nzLeft]", inputs: ["nzRight", "nzLeft", "colspan", "colSpan"] }, { type: i6.NzResizableDirective, selector: "[nz-resizable]", inputs: ["nzBounds", "nzMaxHeight", "nzMaxWidth", "nzMinHeight", "nzMinWidth", "nzGridColumnCount", "nzMaxColumn", "nzMinColumn", "nzLockAspectRatio", "nzPreview", "nzDisabled"], outputs: ["nzResize", "nzResizeEnd", "nzResizeStart"], exportAs: ["nzResizable"] }, { type: i10.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i10.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i5.NzCellBreakWordDirective, selector: "th[nzBreakWord],td[nzBreakWord]", inputs: ["nzBreakWord"] }, { type: i18.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { type: i18.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
690
+ AtrTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: AtrTableComponent, selector: "atr-table", inputs: { loading: "loading", allowDrag: "allowDrag", isHideTable: "isHideTable", queryOpts: "queryOpts", showPagination: "showPagination", title: "title" }, outputs: { tableAction: "tableAction", queryBack: "queryBack", headerAction: "headerAction" }, viewQueries: [{ propertyName: "tableContent", first: true, predicate: ["tableContent"], descendants: true, static: true }], ngImport: i0, template: "<form nz-form [formGroup]=\"atrForm\" class=\"ant-advanced-search-form\"\r\n *ngIf=\"queryOpts.headers.length >0 || queryOpts.actions.length >0\">\r\n <div nz-row [nzGutter]=\"24\">\r\n <div nz-col [hidden]=\"!header.isShow || !isCollapse\" *ngFor=\"let header of queryOpts.headers\"\r\n [nzSpan]=\"header.span\">\r\n <app-table-form-item\r\n [header]=\"header\"\r\n [ngModel]=\"header.defaultVal\"\r\n [dictList]=\"dicts[header.dictCode]\"\r\n [formControlName]=\"header.key\"\r\n (headerAction)=\"headerAction.emit($event)\"></app-table-form-item>\r\n </div>\r\n </div>\r\n <div nz-row nzType=\"flex\">\r\n <div class=\"action-area\" nz-col [nzSpan]=\"16\">\r\n <ng-container *ngFor=\"let action of queryOpts.actions\">\r\n <atr-local-upload *ngIf=\"action.gType == 'upload'\" [code]=\"action.code\" [url]=\"action.url\" [name]=\"action.name\"\r\n [withoutRole]=\"action.withoutRole\"\r\n style=\" display: inline-block;\"></atr-local-upload>\r\n <ng-container *ngIf=\"!action.gType\">\r\n <button nz-button [nzType]=\"'primary'\" nzSize=\"small\" (click)=\"doAction(action.code)\"\r\n *atrRole=\"action.withoutRole ? null:action.code\"\r\n [disabled]=\"isEnable(action.operator)\">{{action.name}}</button>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n <div nz-col [nzSpan]=\"8\" class=\"search-area\" *ngIf=\"queryOpts.headers.length >0 && !queryOpts.isHideQuery\">\r\n <button nz-button nzSize=\"small\" [nzType]=\"'primary'\" (click)=\"query(true)\">\u67E5\u8BE2</button>\r\n <button nz-button nzSize=\"small\" (click)=\"resetForm()\">\u91CD\u7F6E</button>\r\n <a class=\"collapse\" (click)=\"toggleCollapse()\" *ngIf=\"queryOpts.headers.length > 0 \">\r\n {{isCollapse ? '\u6536\u8D77':'\u5C55\u5F00'}}\r\n <i nz-icon [nzType]=\"isCollapse ? 'up' : 'down'\"></i>\r\n </a>\r\n </div>\r\n </div>\r\n <div *ngIf=\"title\" class=\"title\">{{title}}</div>\r\n</form>\r\n<div class=\"search-result-list\" #tableContent [spinLoading]=\"loading\" HqSpin>\r\n <nz-table *ngIf=\"isAllLoad \" #basicTable class=\"main-table\"\r\n [nzScroll]=\"scrollSize\"\r\n nzSize=\"middle\"\r\n nzBordered\r\n [nzShowPagination]=\"showPagination\"\r\n nzShowSizeChanger\r\n [nzFrontPagination]=\"false\"\r\n [nzLoading]=\"loading\"\r\n [nzTotal]=\"total\"\r\n [(nzPageIndex)]=\"pageIndex\"\r\n [(nzPageSize)]=\"pageSize\"\r\n [nzData]=\"tableDatas\"\r\n (nzPageIndexChange)=\"query()\"\r\n (nzPageSizeChange)=\"query(true)\"\r\n [nzShowTotal]=\"totalTemplate\"\r\n >\r\n <ng-content select=\"[slot1]\"></ng-content>\r\n <ng-container *ngIf=\"!isHideTable\">\r\n <thead>\r\n <tr (contextmenu)=\"contextMenu($event,menu)\" class=\"header-tr\">\r\n\r\n <th *ngIf=\"queryOpts.checkBox?.isShowCheckbox\"\r\n [nzLeft]=\"true\"\r\n class=\"left-zindex-header\"\r\n nzShowCheckbox\r\n style=\"z-index: 90!important;\"\r\n nzWidth=\"30px\"\r\n nzAlign=\"center\"\r\n [(nzChecked)]=\"isAllDisplayDataChecked\"\r\n [nzIndeterminate]=\"isIndeterminate\"\r\n (nzCheckedChange)=\"checkAll($event)\"\r\n ></th>\r\n <th [nzLeft]=\"true\" class=\"left-zindex-header\" *ngIf=\"queryOpts.isIndex\" nzWidth=\"30px\" nzAlign=\"center\">#</th>\r\n <th [nzLeft]=\"true\" class=\"left-zindex-header\" *ngIf=\"queryOpts.checkBox?.isRadio\" nzWidth=\"30px\"\r\n nzAlign=\"center\">#\r\n </th>\r\n <ng-container *ngFor=\"let item of queryOpts.tables; \">\r\n <th *ngIf=\"item.isShow \"\r\n [nzShowSort]=item.sortable\r\n nz-resizable\r\n nzPreview\r\n nzBounds=\"window\"\r\n [(nzSortOrder)]=\"sortMap[item.sortKey]\"\r\n (nzSortOrderChange)=\"sort(item.sortKey, $event)\"\r\n [nzWidth]=\"item.width\"\r\n [nzMaxWidth]=\"256\"\r\n [nzMinWidth]=\"60\"\r\n [nzRight]=\"item.isRight ? true : false\"\r\n [nzLeft]=\"item.isLeft ? true : false\"\r\n [ngClass]=\"{'left-zindex-header':item.isLeft ? true : false}\"\r\n (nzResizeEnd)=\"onResize($event, item.name)\">\r\n {{item.name}}<!-- {width}: { width: number }, col: string-->\r\n <nz-resize-handle nzDirection=\"right\">\r\n <div class=\"resize-trigger\"></div>\r\n </nz-resize-handle>\r\n </th>\r\n </ng-container>\r\n </tr>\r\n </thead>\r\n\r\n\r\n <tbody *ngIf=\"!allowDrag\">\r\n\r\n <tr *ngFor=\"let data of basicTable.data;index as i\" class=\"t-tr\" (click)=\"selectRow(data,i)\"\r\n [ngStyle]=\"{'color':isShowColor(data)}\"\r\n [ngClass]=\"{'selected': i == curChecked}\" (dblclick)=\"dbclickData(data,i)\">\r\n\r\n <td [nzLeft]=\"true\"\r\n class=\"left-zindex\"\r\n *ngIf=\"queryOpts.checkBox?.isShowCheckbox\"\r\n nzShowCheckbox\r\n [(nzChecked)]=\"mapOfCheckedId[data.id]\"\r\n (nzCheckedChange)=\"refreshStatus()\"\r\n ></td>\r\n <td [nzLeft]=\"true\"\r\n class=\"left-zindex\"\r\n *ngIf=\"queryOpts.checkBox?.isRadio\" nzShowCheckbox (nzCheckedChange)=\"selectRow(data,i)\"\r\n [(nzChecked)]=\"mapOfCheckedId[data.id]\"></td>\r\n <td [nzLeft]=\"true\"\r\n *ngIf=\"queryOpts.isIndex\" nzAlign=\"center\" style=\"padding:12px 0;\" nzBreakWord>{{i + 1}}</td>\r\n <ng-container *ngFor=\"let item of queryOpts.tables;\">\r\n\r\n <td [nzLeft]=\"item.isLeft ? true : false\"\r\n [ngClass]=\"{'left-zindex':item.isLeft ? true : false}\"\r\n [nzRight]=\"item.isRight ? true : false\"\r\n nzBreakWord\r\n [rowSpan]=\"checkRowSpan(item,data)\"\r\n *ngIf=\"checkShowTd(item,i) \">\r\n <app-table-td [data]=\"data\"\r\n [item]=\"item\"\r\n [i]=\"i\"\r\n (doActionByRowAction)=\"doActionByRow2($event)\"\r\n ></app-table-td>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n\r\n </tbody>\r\n <tbody *ngIf=\"allowDrag\" cdkDropList (cdkDropListDropped)=\"drop($event)\">\r\n <tr cdkDrag *ngFor=\"let data of basicTable.data;index as i\" class=\"t-tr\" (click)=\"selectRow(data,i)\"\r\n [ngClass]=\"{'selected': i == curChecked}\">\r\n <td [nzLeft]=\"true\"\r\n class=\"left-zindex\"\r\n *ngIf=\"queryOpts.checkBox?.isShowCheckbox\"\r\n nzShowCheckbox\r\n [(nzChecked)]=\"mapOfCheckedId[data.id]\"\r\n (nzCheckedChange)=\"refreshStatus()\"\r\n ></td>\r\n <!--\r\n <td [nzLeft]=\"item.isLeft ? true : false\" [ngClass]=\"{'left-zindex':item.isLeft ? true : false}\" [nzRight]=\"item.isRight ? true : false\"\r\n *ngIf=\"queryOpts.isShowCheckbox\"\r\n nzShowCheckbox\r\n [(nzChecked)]=\"mapOfCheckedId[data.id]\"\r\n (nzCheckedChange)=\"refreshStatus()\"\r\n ></td>\r\n -->\r\n <td [nzLeft]=\"true\"\r\n class=\"left-zindex\"\r\n *ngIf=\"queryOpts.checkBox?.isRadio\" nzShowCheckbox (nzCheckedChange)=\"selectRow(data,i)\"\r\n [(nzChecked)]=\"mapOfCheckedId[data.id]\"></td>\r\n <td [nzLeft]=\"true\"\r\n class=\"left-zindex\"\r\n *ngIf=\"queryOpts.isIndex\" nzAlign=\"center\" style=\"padding:12px 0;\" nzBreakWord>{{i + 1}}</td>\r\n\r\n <ng-container *ngFor=\"let item of queryOpts.tables;\">\r\n\r\n <td [nzLeft]=\"item.isLeft ? true : false\"\r\n [ngClass]=\"{'left-zindex':item.isLeft ? true : false}\"\r\n [nzRight]=\"item.isRight ? true : false\"\r\n nzBreakWord\r\n [rowSpan]=\"checkRowSpan(item,data)\"\r\n *ngIf=\"checkShowTd(item,i) \">\r\n <app-table-td [data]=\"data\"\r\n [item]=\"item\"\r\n [i]=\"i\"\r\n (doActionByRowAction)=\"doActionByRow2($event)\"\r\n ></app-table-td>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </tbody>\r\n\r\n </ng-container>\r\n\r\n\r\n <ng-template #totalTemplate let-total>\u5171 {{ total }} \u6761\u8BB0\u5F55</ng-template>\r\n </nz-table>\r\n <nz-dropdown-menu #menu=\"nzDropdownMenu\">\r\n <div class=\"tabel-colunmn\">\r\n <nz-checkbox-wrapper style=\"width: 100%;margin-top: 30px;\" (nzOnChange)=\"log($event)\">\r\n <div nz-row>\r\n <div nz-col nzSpan=\"24\" *ngFor=\"let item of queryOpts.tables\">\r\n <label nz-checkbox nzValue=\"{{item.key}}\" [ngModel]=\"item.isShow\">{{item.name}}</label>\r\n </div>\r\n </div>\r\n </nz-checkbox-wrapper>\r\n <div class=\"tabel-colunmn-header\">\u8BF7\u9009\u62E9\u5217\u8868\u663E\u793A\u5185\u5BB9</div>\r\n </div>\r\n </nz-dropdown-menu>\r\n</div>\r\n\r\n", styles: [":host{width:100%;height:100%;display:flex;flex-direction:column}:host ::ng-deep .ant-modal{top:50px;padding:0}:host .ant-advanced-search-form{padding:10px 6px 6px;background:#fbfbfb;border:1px solid #d9d9d9;border-radius:6px;margin-bottom:5px}:host .select-icon:hover{color:#1890ff}:host ::ng-deep .ant-advanced-search-form .ant-form-item{margin-bottom:5px}:host ::ng-deep .ant-table-column-title{font-size:.65rem}:host ::ng-deep .ant-table-tbody>tr.ant-table-row:hover>td{background:#d0eeea}:host ::ng-deep .ant-modal-header,:host ::ng-deep .ant-modal-content{border-radius:4px}:host ::ng-deep .ant-table-tbody>tr.selected:hover>td{background-color:#cfe1d0!important}:host ::ng-deep .ant-table{height:100%}:host ::ng-deep nz-pagination{position:absolute;bottom:0;right:0}:host .search-result-list{padding:1px;border:1px dashed #e9e9e9;border-radius:6px;background-color:#fff;flex:1;text-align:center;position:relative}:host [nz-form-label]{overflow:visible}:host button{margin:2px 4px}:host .collapse{margin-left:6px;font-size:12px}:host .action-area{text-align:left}:host .search-area{text-align:right}:host ::ng-deep .main-table{position:absolute;top:0;left:0;right:0;bottom:0}:host ::ng-deep .main-table .ant-spin-nested-loading{height:100%}:host ::ng-deep .main-table .ant-spin-container{height:100%}:host ::ng-deep .ant-table-tbody>tr.selected>td{background-color:#cfe1d0}:host ::ng-deep .ant-table-tbody>tr>td>img{display:block;width:40%;margin:0 auto}:host ::ng-deep .ant-table-body{-ms-overflow-style:none;overflow:-moz-scrollbars-none}:host ::ng-deep .ant-table-body::-webkit-scrollbar,:host ::ng-deep .ant-table-header::-webkit-scrollbar{width:6px!important;height:6px!important}:host ::ng-deep .ant-table-body::-webkit-scrollbar-track,:host ::ng-deep .ant-table-header::-webkit-scrollbar-track{width:6px!important;cursor:pointer}:host ::ng-deep .ant-table-body::-webkit-scrollbar-thumb,:host ::ng-deep .ant-table-header::-webkit-scrollbar-thumb{background:#1890ff;border-radius:3px;cursor:pointer}:host ::ng-deep .ant-table-bordered .ant-table-thead>tr>th{border-right:1px solid #ddd}:host ::ng-deep .ant-table-header{-ms-overflow-style:none;overflow:-moz-scrollbars-none;margin-bottom:-5px!important}:host ::ng-deep .ant-table-placeholder{border-bottom:none!important;border-top:none!important}:host .tabel-colunmn{display:block;width:160px;height:300px;background:#fff;border:1px solid #ddd;padding:10px;border-radius:5px;overflow-x:hidden;overflow-y:auto;position:relative}:host .tabel-colunmn-header{position:fixed;top:0;left:0;right:0;height:30px;z-index:999;line-height:30px;border-bottom:1px solid #ddd;text-align:left;font-size:13px;padding-left:10px}:host .t-tr{background:#fff}:host .t-tr:nth-child(odd){background:#f8f9fa}:host ::ng-deep .ant-table-thead>tr>th{background:#e7ebef!important;border-radius:0;word-break:break-all;white-space:pre-wrap}:host ::ng-deep .ant-table-tbody>tr>td{word-break:break-all;white-space:pre-wrap}:host ::ng-deep .ant-table-header{background:#e7ebef!important}:host td{font-size:.65rem}:host .resize-trigger{height:100%}:host .nz-resizable-preview{border-width:0;border-right-width:1px}:host ::ng-deep .ant-table-thead>tr>th .ant-table-header-column .ant-table-column-sorters>:not(.ant-table-column-sorter){position:unset}:host ::ng-deep .ant-table-tbody>tr>td{padding:5px}:host ::ng-deep .ant-table{line-height:15px}:host ::ng-deep .ant-table-middle .ant-table-footer,:host .ant-table-middle .ant-table-tbody>tr>td,:host .ant-table-middle .ant-table-thead>tr>th,:host .ant-table-middle .ant-table-title{padding:5px}:host ::ng-deep .ant-table-tbody>tr>td>img{width:35px}:host ::ng-deep .ant-modal-body{padding:10px}:host ::ng-deep .ant-table.ant-table-bordered tbody>tr>td{font-size:13px}:host ::ng-deep th{z-index:80!important}:host .left-zindex-header{z-index:90!important}:host .left-zindex{z-index:80!important}:host ::ng-deep input,:host ::ng-deep .ant-select-single:not(.ant-select-customize-input) .ant-select-selector,:host ::ng-deep .ant-picker{border-radius:5px}:host .border-text{width:100%;height:36px;line-height:36px;display:flex}:host .border-text .border-text-line{display:inline-block;border-top:1px solid #cccccc;margin-top:18px}:host .border-text .border-text-line-left{width:10px;border-left:1px solid #cccccc}:host .border-text .border-text-line-right{flex:1;border-right:1px solid #cccccc}:host .border-text .border-text-span{margin-left:5px;margin-right:5px}:host .label-title{position:absolute;display:block;top:-7px;left:10px;background-color:#fff;color:#000;font-weight:600;font-size:12px;line-height:12px}:host ::ng-deep .tabel-colunmn-header{position:absolute!important;top:0!important}:host ::ng-deep .ant-table-cell-fix-left,:host .ant-table-cell-fix-right{position:sticky!important}\n"], components: [{ type: i2.TableFormItemComponent, selector: "app-table-form-item", inputs: ["header", "value", "dictList"], outputs: ["headerAction"] }, { type: i3.LocalUploadComponent, selector: "atr-local-upload", inputs: ["url", "nzAccept", "name", "code", "withoutRole"], outputs: ["afterChange"] }, { type: i4.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { type: i5.NzTableComponent, selector: "nz-table", inputs: ["nzTableLayout", "nzShowTotal", "nzItemRender", "nzTitle", "nzFooter", "nzNoResult", "nzPageSizeOptions", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualForTrackBy", "nzLoadingDelay", "nzPageIndex", "nzPageSize", "nzTotal", "nzWidthConfig", "nzData", "nzPaginationPosition", "nzScroll", "nzPaginationType", "nzFrontPagination", "nzTemplateMode", "nzShowPagination", "nzLoading", "nzOuterBordered", "nzLoadingIndicator", "nzBordered", "nzSize", "nzShowSizeChanger", "nzHideOnSinglePage", "nzShowQuickJumper", "nzSimple"], outputs: ["nzPageSizeChange", "nzPageIndexChange", "nzQueryParams", "nzCurrentPageDataChange"], exportAs: ["nzTable"] }, { type: i5.NzTheadComponent, selector: "thead:not(.ant-table-thead)", outputs: ["nzSortOrderChange"] }, { type: i5.NzThSelectionComponent, selector: "th[nzSelections],th[nzChecked],th[nzShowCheckbox],th[nzShowRowSelection]", inputs: ["nzSelections", "nzChecked", "nzDisabled", "nzIndeterminate", "nzShowCheckbox", "nzShowRowSelection"], outputs: ["nzCheckedChange"] }, { type: i5.NzThAddOnComponent, selector: "th[nzColumnKey], th[nzSortFn], th[nzSortOrder], th[nzFilters], th[nzShowSort], th[nzShowFilter], th[nzCustomFilter]", inputs: ["nzColumnKey", "nzFilterMultiple", "nzSortOrder", "nzSortPriority", "nzSortDirections", "nzFilters", "nzSortFn", "nzFilterFn", "nzShowSort", "nzShowFilter", "nzCustomFilter"], outputs: ["nzCheckedChange", "nzSortOrderChange", "nzFilterChange"] }, { type: i6.NzResizeHandleComponent, selector: "nz-resize-handle, [nz-resize-handle]", inputs: ["nzDirection"], outputs: ["nzMouseDown"], exportAs: ["nzResizeHandle"] }, { type: i5.NzTbodyComponent, selector: "tbody" }, { type: i5.NzTdAddOnComponent, selector: "td[nzChecked], td[nzDisabled], td[nzIndeterminate], td[nzIndentSize], td[nzExpand], td[nzShowExpand], td[nzShowCheckbox]", inputs: ["nzChecked", "nzDisabled", "nzIndeterminate", "nzIndentSize", "nzShowExpand", "nzShowCheckbox", "nzExpand"], outputs: ["nzCheckedChange", "nzExpandChange"] }, { type: i7.TableTdComponent, selector: "app-table-td", inputs: ["data", "item", "i"], outputs: ["doActionByRowAction"] }, { type: i8.NzDropdownMenuComponent, selector: "nz-dropdown-menu", exportAs: ["nzDropdownMenu"] }, { type: i9.NzCheckboxWrapperComponent, selector: "nz-checkbox-wrapper", outputs: ["nzOnChange"], exportAs: ["nzCheckboxWrapper"] }, { type: i9.NzCheckboxComponent, selector: "[nz-checkbox]", inputs: ["nzValue", "nzAutoFocus", "nzDisabled", "nzIndeterminate", "nzChecked", "nzId"], outputs: ["nzCheckedChange"], exportAs: ["nzCheckbox"] }], directives: [{ type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i11.NzFormDirective, selector: "[nz-form]", inputs: ["nzLayout", "nzNoColon", "nzAutoTips", "nzDisableAutoTips", "nzTooltipIcon"], exportAs: ["nzForm"] }, { type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i12.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i12.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i13.AtrRoleDirective, selector: "[atrRole]", inputs: ["atrRole"] }, { type: i14.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }, { type: i15.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { type: i16.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { type: i17.HqSpinDirective, selector: "[HqSpin]", inputs: ["spinLoading", "text"] }, { type: i5.NzTrDirective, selector: "tr:not([mat-row]):not([mat-header-row]):not([nz-table-measure-row]):not([nzExpand]):not([nz-table-fixed-row])" }, { type: i5.NzTableCellDirective, selector: "th:not(.nz-disable-th):not([mat-cell]), td:not(.nz-disable-td):not([mat-cell])" }, { type: i5.NzThMeasureDirective, selector: "th", inputs: ["nzWidth", "colspan", "colSpan", "rowspan", "rowSpan"] }, { type: i5.NzCellAlignDirective, selector: "th[nzAlign],td[nzAlign]", inputs: ["nzAlign"] }, { type: i5.NzCellFixedDirective, selector: "td[nzRight],th[nzRight],td[nzLeft],th[nzLeft]", inputs: ["nzRight", "nzLeft", "colspan", "colSpan"] }, { type: i6.NzResizableDirective, selector: "[nz-resizable]", inputs: ["nzBounds", "nzMaxHeight", "nzMaxWidth", "nzMinHeight", "nzMinWidth", "nzGridColumnCount", "nzMaxColumn", "nzMinColumn", "nzLockAspectRatio", "nzPreview", "nzDisabled"], outputs: ["nzResize", "nzResizeEnd", "nzResizeStart"], exportAs: ["nzResizable"] }, { type: i10.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i10.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i5.NzCellBreakWordDirective, selector: "th[nzBreakWord],td[nzBreakWord]", inputs: ["nzBreakWord"] }, { type: i18.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { type: i18.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
685
691
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AtrTableComponent, decorators: [{
686
692
  type: Component,
687
- args: [{ selector: 'atr-table', template: "<form nz-form [formGroup]=\"atrForm\" class=\"ant-advanced-search-form\"\r\n *ngIf=\"queryOpts.headers.length >0 || queryOpts.actions.length >0\">\r\n <div nz-row [nzGutter]=\"24\">\r\n <div nz-col [hidden]=\"!header.isShow || !isCollapse\" *ngFor=\"let header of queryOpts.headers\"\r\n [nzSpan]=\"header.span\">\r\n <app-table-form-item\r\n [header]=\"header\"\r\n [ngModel]=\"header.defaultVal\"\r\n [dictList]=\"dicts[header.dictCode]\"\r\n [formControlName]=\"header.key\"\r\n (headerAction)=\"headerAction.emit($event)\"></app-table-form-item>\r\n </div>\r\n </div>\r\n <div nz-row nzType=\"flex\">\r\n <div class=\"action-area\" nz-col [nzSpan]=\"16\">\r\n <ng-container *ngFor=\"let action of queryOpts.actions\">\r\n <atr-local-upload *ngIf=\"action.gType == 'upload'\" [code]=\"action.code\" [url]=\"action.url\" [name]=\"action.name\"\r\n [withoutRole]=\"action.withoutRole\"\r\n style=\" display: inline-block;\"></atr-local-upload>\r\n <ng-container *ngIf=\"!action.gType\">\r\n <button nz-button [nzType]=\"'primary'\" nzSize=\"small\" (click)=\"doAction(action.code)\"\r\n *atrRole=\"action.withoutRole ? null:action.code\"\r\n [disabled]=\"isEnable(action.operator)\">{{action.name}}</button>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n <div nz-col [nzSpan]=\"8\" class=\"search-area\" *ngIf=\"queryOpts.headers.length >0 && !queryOpts.isHideQuery\">\r\n <button nz-button nzSize=\"small\" [nzType]=\"'primary'\" (click)=\"query(true)\">\u67E5\u8BE2</button>\r\n <button nz-button nzSize=\"small\" (click)=\"resetForm()\">\u91CD\u7F6E</button>\r\n <a class=\"collapse\" (click)=\"toggleCollapse()\" *ngIf=\"queryOpts.headers.length > 0 \">\r\n {{isCollapse ? '\u6536\u8D77':'\u5C55\u5F00'}}\r\n <i nz-icon [nzType]=\"isCollapse ? 'up' : 'down'\"></i>\r\n </a>\r\n </div>\r\n </div>\r\n <div *ngIf=\"title\" class=\"title\">{{title}}</div>\r\n</form>\r\n<div class=\"search-result-list\" #tableContent [spinLoading]=\"loading\" HqSpin>\r\n <nz-table *ngIf=\"isAllLoad && !isHideTable\" #basicTable class=\"main-table\"\r\n [nzScroll]=\"scrollSize\"\r\n nzSize=\"middle\"\r\n nzBordered\r\n [nzShowPagination]=\"showPagination\"\r\n nzShowSizeChanger\r\n [nzFrontPagination]=\"false\"\r\n [nzLoading]=\"loading\"\r\n [nzTotal]=\"total\"\r\n [(nzPageIndex)]=\"pageIndex\"\r\n [(nzPageSize)]=\"pageSize\"\r\n [nzData]=\"tableDatas\"\r\n (nzPageIndexChange)=\"query()\"\r\n (nzPageSizeChange)=\"query(true)\"\r\n [nzShowTotal]=\"totalTemplate\"\r\n >\r\n <thead>\r\n <tr (contextmenu)=\"contextMenu($event,menu)\" class=\"header-tr\">\r\n\r\n <th *ngIf=\"queryOpts.checkBox?.isShowCheckbox\"\r\n [nzLeft]=\"true\"\r\n class=\"left-zindex-header\"\r\n nzShowCheckbox\r\n style=\"z-index: 90!important;\"\r\n nzWidth=\"30px\"\r\n nzAlign=\"center\"\r\n [(nzChecked)]=\"isAllDisplayDataChecked\"\r\n [nzIndeterminate]=\"isIndeterminate\"\r\n (nzCheckedChange)=\"checkAll($event)\"\r\n ></th>\r\n <th [nzLeft]=\"true\" class=\"left-zindex-header\" *ngIf=\"queryOpts.isIndex\" nzWidth=\"30px\" nzAlign=\"center\">#</th>\r\n <th [nzLeft]=\"true\" class=\"left-zindex-header\" *ngIf=\"queryOpts.checkBox?.isRadio\" nzWidth=\"30px\"\r\n nzAlign=\"center\">#\r\n </th>\r\n <ng-container *ngFor=\"let item of queryOpts.tables; \">\r\n <th *ngIf=\"item.isShow \"\r\n [nzShowSort]=item.sortable\r\n nz-resizable\r\n nzPreview\r\n nzBounds=\"window\"\r\n [(nzSortOrder)]=\"sortMap[item.sortKey]\"\r\n (nzSortOrderChange)=\"sort(item.sortKey, $event)\"\r\n [nzWidth]=\"item.width\"\r\n [nzMaxWidth]=\"256\"\r\n [nzMinWidth]=\"60\"\r\n [nzRight]=\"item.isRight ? true : false\"\r\n [nzLeft]=\"item.isLeft ? true : false\"\r\n [ngClass]=\"{'left-zindex-header':item.isLeft ? true : false}\"\r\n (nzResizeEnd)=\"onResize($event, item.name)\">\r\n {{item.name}}<!-- {width}: { width: number }, col: string-->\r\n <nz-resize-handle nzDirection=\"right\">\r\n <div class=\"resize-trigger\"></div>\r\n </nz-resize-handle>\r\n </th>\r\n </ng-container>\r\n </tr>\r\n </thead>\r\n\r\n\r\n <tbody *ngIf=\"!allowDrag\">\r\n\r\n <tr *ngFor=\"let data of basicTable.data;index as i\" class=\"t-tr\" (click)=\"selectRow(data,i)\"\r\n [ngStyle]=\"{'color':isShowColor(data)}\"\r\n [ngClass]=\"{'selected': i == curChecked}\" (dblclick)=\"dbclickData(data,i)\">\r\n\r\n <td [nzLeft]=\"true\"\r\n class=\"left-zindex\"\r\n *ngIf=\"queryOpts.checkBox?.isShowCheckbox\"\r\n nzShowCheckbox\r\n [(nzChecked)]=\"mapOfCheckedId[data.id]\"\r\n (nzCheckedChange)=\"refreshStatus()\"\r\n ></td>\r\n <td [nzLeft]=\"true\"\r\n class=\"left-zindex\"\r\n *ngIf=\"queryOpts.checkBox?.isRadio\" nzShowCheckbox (nzCheckedChange)=\"selectRow(data,i)\"\r\n [(nzChecked)]=\"mapOfCheckedId[data.id]\"></td>\r\n <td [nzLeft]=\"true\"\r\n *ngIf=\"queryOpts.isIndex\" nzAlign=\"center\" style=\"padding:12px 0;\" nzBreakWord>{{i + 1}}</td>\r\n <ng-container *ngFor=\"let item of queryOpts.tables;\">\r\n\r\n <td [nzLeft]=\"item.isLeft ? true : false\"\r\n [ngClass]=\"{'left-zindex':item.isLeft ? true : false}\"\r\n [nzRight]=\"item.isRight ? true : false\"\r\n nzBreakWord\r\n [rowSpan]=\"checkRowSpan(item,data)\"\r\n *ngIf=\"checkShowTd(item,i) \">\r\n <app-table-td [data]=\"data\"\r\n [item]=\"item\"\r\n [i]=\"i\"\r\n (doActionByRowAction)=\"doActionByRow2($event)\"\r\n ></app-table-td>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n\r\n </tbody>\r\n <tbody *ngIf=\"allowDrag\" cdkDropList (cdkDropListDropped)=\"drop($event)\">\r\n <tr cdkDrag *ngFor=\"let data of basicTable.data;index as i\" class=\"t-tr\" (click)=\"selectRow(data,i)\"\r\n [ngClass]=\"{'selected': i == curChecked}\">\r\n <td [nzLeft]=\"true\"\r\n class=\"left-zindex\"\r\n *ngIf=\"queryOpts.checkBox?.isShowCheckbox\"\r\n nzShowCheckbox\r\n [(nzChecked)]=\"mapOfCheckedId[data.id]\"\r\n (nzCheckedChange)=\"refreshStatus()\"\r\n ></td>\r\n <!--\r\n <td [nzLeft]=\"item.isLeft ? true : false\" [ngClass]=\"{'left-zindex':item.isLeft ? true : false}\" [nzRight]=\"item.isRight ? true : false\"\r\n *ngIf=\"queryOpts.isShowCheckbox\"\r\n nzShowCheckbox\r\n [(nzChecked)]=\"mapOfCheckedId[data.id]\"\r\n (nzCheckedChange)=\"refreshStatus()\"\r\n ></td>\r\n -->\r\n <td [nzLeft]=\"true\"\r\n class=\"left-zindex\"\r\n *ngIf=\"queryOpts.checkBox?.isRadio\" nzShowCheckbox (nzCheckedChange)=\"selectRow(data,i)\"\r\n [(nzChecked)]=\"mapOfCheckedId[data.id]\"></td>\r\n <td [nzLeft]=\"true\"\r\n class=\"left-zindex\"\r\n *ngIf=\"queryOpts.isIndex\" nzAlign=\"center\" style=\"padding:12px 0;\" nzBreakWord>{{i + 1}}</td>\r\n\r\n <ng-container *ngFor=\"let item of queryOpts.tables;\">\r\n\r\n <td [nzLeft]=\"item.isLeft ? true : false\"\r\n [ngClass]=\"{'left-zindex':item.isLeft ? true : false}\"\r\n [nzRight]=\"item.isRight ? true : false\"\r\n nzBreakWord\r\n [rowSpan]=\"checkRowSpan(item,data)\"\r\n *ngIf=\"checkShowTd(item,i) \">\r\n <app-table-td [data]=\"data\"\r\n [item]=\"item\"\r\n [i]=\"i\"\r\n (doActionByRowAction)=\"doActionByRow2($event)\"\r\n ></app-table-td>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </tbody>\r\n\r\n\r\n <ng-template #totalTemplate let-total>\u5171 {{ total }} \u6761\u8BB0\u5F55</ng-template>\r\n </nz-table>\r\n <ng-content select=\"[slot1]\"></ng-content>\r\n <nz-dropdown-menu #menu=\"nzDropdownMenu\">\r\n <div class=\"tabel-colunmn\">\r\n <nz-checkbox-wrapper style=\"width: 100%;margin-top: 30px;\" (nzOnChange)=\"log($event)\">\r\n <div nz-row>\r\n <div nz-col nzSpan=\"24\" *ngFor=\"let item of queryOpts.tables\">\r\n <label nz-checkbox nzValue=\"{{item.key}}\" [ngModel]=\"item.isShow\">{{item.name}}</label>\r\n </div>\r\n </div>\r\n </nz-checkbox-wrapper>\r\n <div class=\"tabel-colunmn-header\">\u8BF7\u9009\u62E9\u5217\u8868\u663E\u793A\u5185\u5BB9</div>\r\n </div>\r\n </nz-dropdown-menu>\r\n</div>\r\n\r\n", styles: [":host{width:100%;height:100%;display:flex;flex-direction:column}:host ::ng-deep .ant-modal{top:50px;padding:0}:host .ant-advanced-search-form{padding:10px 6px 6px;background:#fbfbfb;border:1px solid #d9d9d9;border-radius:6px;margin-bottom:5px}:host .select-icon:hover{color:#1890ff}:host ::ng-deep .ant-advanced-search-form .ant-form-item{margin-bottom:5px}:host ::ng-deep .ant-table-column-title{font-size:.65rem}:host ::ng-deep .ant-table-tbody>tr.ant-table-row:hover>td{background:#d0eeea}:host ::ng-deep .ant-modal-header,:host ::ng-deep .ant-modal-content{border-radius:4px}:host ::ng-deep .ant-table-tbody>tr.selected:hover>td{background-color:#cfe1d0!important}:host ::ng-deep .ant-table{height:100%}:host ::ng-deep nz-pagination{position:absolute;bottom:0;right:0}:host .search-result-list{padding:1px;border:1px dashed #e9e9e9;border-radius:6px;background-color:#fff;flex:1;text-align:center;position:relative}:host [nz-form-label]{overflow:visible}:host button{margin:2px 4px}:host .collapse{margin-left:6px;font-size:12px}:host .action-area{text-align:left}:host .search-area{text-align:right}:host ::ng-deep .main-table{position:absolute;top:0;left:0;right:0;bottom:0}:host ::ng-deep .main-table .ant-spin-nested-loading{height:100%}:host ::ng-deep .main-table .ant-spin-container{height:100%}:host ::ng-deep .ant-table-tbody>tr.selected>td{background-color:#cfe1d0}:host ::ng-deep .ant-table-tbody>tr>td>img{display:block;width:40%;margin:0 auto}:host ::ng-deep .ant-table-body{-ms-overflow-style:none;overflow:-moz-scrollbars-none}:host ::ng-deep .ant-table-body::-webkit-scrollbar,:host ::ng-deep .ant-table-header::-webkit-scrollbar{width:6px!important;height:6px!important}:host ::ng-deep .ant-table-body::-webkit-scrollbar-track,:host ::ng-deep .ant-table-header::-webkit-scrollbar-track{width:6px!important;cursor:pointer}:host ::ng-deep .ant-table-body::-webkit-scrollbar-thumb,:host ::ng-deep .ant-table-header::-webkit-scrollbar-thumb{background:#1890ff;border-radius:3px;cursor:pointer}:host ::ng-deep .ant-table-bordered .ant-table-thead>tr>th{border-right:1px solid #ddd}:host ::ng-deep .ant-table-header{-ms-overflow-style:none;overflow:-moz-scrollbars-none;margin-bottom:-5px!important}:host ::ng-deep .ant-table-placeholder{border-bottom:none!important;border-top:none!important}:host .tabel-colunmn{display:block;width:160px;height:300px;background:#fff;border:1px solid #ddd;padding:10px;border-radius:5px;overflow-x:hidden;overflow-y:auto;position:relative}:host .tabel-colunmn-header{position:fixed;top:0;left:0;right:0;height:30px;z-index:999;line-height:30px;border-bottom:1px solid #ddd;text-align:left;font-size:13px;padding-left:10px}:host .t-tr{background:#fff}:host .t-tr:nth-child(odd){background:#f8f9fa}:host ::ng-deep .ant-table-thead>tr>th{background:#e7ebef!important;border-radius:0;word-break:break-all;white-space:pre-wrap}:host ::ng-deep .ant-table-tbody>tr>td{word-break:break-all;white-space:pre-wrap}:host ::ng-deep .ant-table-header{background:#e7ebef!important}:host td{font-size:.65rem}:host .resize-trigger{height:100%}:host .nz-resizable-preview{border-width:0;border-right-width:1px}:host ::ng-deep .ant-table-thead>tr>th .ant-table-header-column .ant-table-column-sorters>:not(.ant-table-column-sorter){position:unset}:host ::ng-deep .ant-table-tbody>tr>td{padding:5px}:host ::ng-deep .ant-table{line-height:15px}:host ::ng-deep .ant-table-middle .ant-table-footer,:host .ant-table-middle .ant-table-tbody>tr>td,:host .ant-table-middle .ant-table-thead>tr>th,:host .ant-table-middle .ant-table-title{padding:5px}:host ::ng-deep .ant-table-tbody>tr>td>img{width:35px}:host ::ng-deep .ant-modal-body{padding:10px}:host ::ng-deep .ant-table.ant-table-bordered tbody>tr>td{font-size:13px}:host ::ng-deep th{z-index:80!important}:host .left-zindex-header{z-index:90!important}:host .left-zindex{z-index:80!important}:host ::ng-deep input,:host ::ng-deep .ant-select-single:not(.ant-select-customize-input) .ant-select-selector,:host ::ng-deep .ant-picker{border-radius:5px}:host .border-text{width:100%;height:36px;line-height:36px;display:flex}:host .border-text .border-text-line{display:inline-block;border-top:1px solid #cccccc;margin-top:18px}:host .border-text .border-text-line-left{width:10px;border-left:1px solid #cccccc}:host .border-text .border-text-line-right{flex:1;border-right:1px solid #cccccc}:host .border-text .border-text-span{margin-left:5px;margin-right:5px}:host .label-title{position:absolute;display:block;top:-7px;left:10px;background-color:#fff;color:#000;font-weight:600;font-size:12px;line-height:12px}:host ::ng-deep .tabel-colunmn-header{position:absolute!important;top:0!important}:host ::ng-deep .ant-table-cell-fix-left,:host .ant-table-cell-fix-right{position:sticky!important}\n"] }]
693
+ args: [{ selector: 'atr-table', template: "<form nz-form [formGroup]=\"atrForm\" class=\"ant-advanced-search-form\"\r\n *ngIf=\"queryOpts.headers.length >0 || queryOpts.actions.length >0\">\r\n <div nz-row [nzGutter]=\"24\">\r\n <div nz-col [hidden]=\"!header.isShow || !isCollapse\" *ngFor=\"let header of queryOpts.headers\"\r\n [nzSpan]=\"header.span\">\r\n <app-table-form-item\r\n [header]=\"header\"\r\n [ngModel]=\"header.defaultVal\"\r\n [dictList]=\"dicts[header.dictCode]\"\r\n [formControlName]=\"header.key\"\r\n (headerAction)=\"headerAction.emit($event)\"></app-table-form-item>\r\n </div>\r\n </div>\r\n <div nz-row nzType=\"flex\">\r\n <div class=\"action-area\" nz-col [nzSpan]=\"16\">\r\n <ng-container *ngFor=\"let action of queryOpts.actions\">\r\n <atr-local-upload *ngIf=\"action.gType == 'upload'\" [code]=\"action.code\" [url]=\"action.url\" [name]=\"action.name\"\r\n [withoutRole]=\"action.withoutRole\"\r\n style=\" display: inline-block;\"></atr-local-upload>\r\n <ng-container *ngIf=\"!action.gType\">\r\n <button nz-button [nzType]=\"'primary'\" nzSize=\"small\" (click)=\"doAction(action.code)\"\r\n *atrRole=\"action.withoutRole ? null:action.code\"\r\n [disabled]=\"isEnable(action.operator)\">{{action.name}}</button>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n <div nz-col [nzSpan]=\"8\" class=\"search-area\" *ngIf=\"queryOpts.headers.length >0 && !queryOpts.isHideQuery\">\r\n <button nz-button nzSize=\"small\" [nzType]=\"'primary'\" (click)=\"query(true)\">\u67E5\u8BE2</button>\r\n <button nz-button nzSize=\"small\" (click)=\"resetForm()\">\u91CD\u7F6E</button>\r\n <a class=\"collapse\" (click)=\"toggleCollapse()\" *ngIf=\"queryOpts.headers.length > 0 \">\r\n {{isCollapse ? '\u6536\u8D77':'\u5C55\u5F00'}}\r\n <i nz-icon [nzType]=\"isCollapse ? 'up' : 'down'\"></i>\r\n </a>\r\n </div>\r\n </div>\r\n <div *ngIf=\"title\" class=\"title\">{{title}}</div>\r\n</form>\r\n<div class=\"search-result-list\" #tableContent [spinLoading]=\"loading\" HqSpin>\r\n <nz-table *ngIf=\"isAllLoad \" #basicTable class=\"main-table\"\r\n [nzScroll]=\"scrollSize\"\r\n nzSize=\"middle\"\r\n nzBordered\r\n [nzShowPagination]=\"showPagination\"\r\n nzShowSizeChanger\r\n [nzFrontPagination]=\"false\"\r\n [nzLoading]=\"loading\"\r\n [nzTotal]=\"total\"\r\n [(nzPageIndex)]=\"pageIndex\"\r\n [(nzPageSize)]=\"pageSize\"\r\n [nzData]=\"tableDatas\"\r\n (nzPageIndexChange)=\"query()\"\r\n (nzPageSizeChange)=\"query(true)\"\r\n [nzShowTotal]=\"totalTemplate\"\r\n >\r\n <ng-content select=\"[slot1]\"></ng-content>\r\n <ng-container *ngIf=\"!isHideTable\">\r\n <thead>\r\n <tr (contextmenu)=\"contextMenu($event,menu)\" class=\"header-tr\">\r\n\r\n <th *ngIf=\"queryOpts.checkBox?.isShowCheckbox\"\r\n [nzLeft]=\"true\"\r\n class=\"left-zindex-header\"\r\n nzShowCheckbox\r\n style=\"z-index: 90!important;\"\r\n nzWidth=\"30px\"\r\n nzAlign=\"center\"\r\n [(nzChecked)]=\"isAllDisplayDataChecked\"\r\n [nzIndeterminate]=\"isIndeterminate\"\r\n (nzCheckedChange)=\"checkAll($event)\"\r\n ></th>\r\n <th [nzLeft]=\"true\" class=\"left-zindex-header\" *ngIf=\"queryOpts.isIndex\" nzWidth=\"30px\" nzAlign=\"center\">#</th>\r\n <th [nzLeft]=\"true\" class=\"left-zindex-header\" *ngIf=\"queryOpts.checkBox?.isRadio\" nzWidth=\"30px\"\r\n nzAlign=\"center\">#\r\n </th>\r\n <ng-container *ngFor=\"let item of queryOpts.tables; \">\r\n <th *ngIf=\"item.isShow \"\r\n [nzShowSort]=item.sortable\r\n nz-resizable\r\n nzPreview\r\n nzBounds=\"window\"\r\n [(nzSortOrder)]=\"sortMap[item.sortKey]\"\r\n (nzSortOrderChange)=\"sort(item.sortKey, $event)\"\r\n [nzWidth]=\"item.width\"\r\n [nzMaxWidth]=\"256\"\r\n [nzMinWidth]=\"60\"\r\n [nzRight]=\"item.isRight ? true : false\"\r\n [nzLeft]=\"item.isLeft ? true : false\"\r\n [ngClass]=\"{'left-zindex-header':item.isLeft ? true : false}\"\r\n (nzResizeEnd)=\"onResize($event, item.name)\">\r\n {{item.name}}<!-- {width}: { width: number }, col: string-->\r\n <nz-resize-handle nzDirection=\"right\">\r\n <div class=\"resize-trigger\"></div>\r\n </nz-resize-handle>\r\n </th>\r\n </ng-container>\r\n </tr>\r\n </thead>\r\n\r\n\r\n <tbody *ngIf=\"!allowDrag\">\r\n\r\n <tr *ngFor=\"let data of basicTable.data;index as i\" class=\"t-tr\" (click)=\"selectRow(data,i)\"\r\n [ngStyle]=\"{'color':isShowColor(data)}\"\r\n [ngClass]=\"{'selected': i == curChecked}\" (dblclick)=\"dbclickData(data,i)\">\r\n\r\n <td [nzLeft]=\"true\"\r\n class=\"left-zindex\"\r\n *ngIf=\"queryOpts.checkBox?.isShowCheckbox\"\r\n nzShowCheckbox\r\n [(nzChecked)]=\"mapOfCheckedId[data.id]\"\r\n (nzCheckedChange)=\"refreshStatus()\"\r\n ></td>\r\n <td [nzLeft]=\"true\"\r\n class=\"left-zindex\"\r\n *ngIf=\"queryOpts.checkBox?.isRadio\" nzShowCheckbox (nzCheckedChange)=\"selectRow(data,i)\"\r\n [(nzChecked)]=\"mapOfCheckedId[data.id]\"></td>\r\n <td [nzLeft]=\"true\"\r\n *ngIf=\"queryOpts.isIndex\" nzAlign=\"center\" style=\"padding:12px 0;\" nzBreakWord>{{i + 1}}</td>\r\n <ng-container *ngFor=\"let item of queryOpts.tables;\">\r\n\r\n <td [nzLeft]=\"item.isLeft ? true : false\"\r\n [ngClass]=\"{'left-zindex':item.isLeft ? true : false}\"\r\n [nzRight]=\"item.isRight ? true : false\"\r\n nzBreakWord\r\n [rowSpan]=\"checkRowSpan(item,data)\"\r\n *ngIf=\"checkShowTd(item,i) \">\r\n <app-table-td [data]=\"data\"\r\n [item]=\"item\"\r\n [i]=\"i\"\r\n (doActionByRowAction)=\"doActionByRow2($event)\"\r\n ></app-table-td>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n\r\n </tbody>\r\n <tbody *ngIf=\"allowDrag\" cdkDropList (cdkDropListDropped)=\"drop($event)\">\r\n <tr cdkDrag *ngFor=\"let data of basicTable.data;index as i\" class=\"t-tr\" (click)=\"selectRow(data,i)\"\r\n [ngClass]=\"{'selected': i == curChecked}\">\r\n <td [nzLeft]=\"true\"\r\n class=\"left-zindex\"\r\n *ngIf=\"queryOpts.checkBox?.isShowCheckbox\"\r\n nzShowCheckbox\r\n [(nzChecked)]=\"mapOfCheckedId[data.id]\"\r\n (nzCheckedChange)=\"refreshStatus()\"\r\n ></td>\r\n <!--\r\n <td [nzLeft]=\"item.isLeft ? true : false\" [ngClass]=\"{'left-zindex':item.isLeft ? true : false}\" [nzRight]=\"item.isRight ? true : false\"\r\n *ngIf=\"queryOpts.isShowCheckbox\"\r\n nzShowCheckbox\r\n [(nzChecked)]=\"mapOfCheckedId[data.id]\"\r\n (nzCheckedChange)=\"refreshStatus()\"\r\n ></td>\r\n -->\r\n <td [nzLeft]=\"true\"\r\n class=\"left-zindex\"\r\n *ngIf=\"queryOpts.checkBox?.isRadio\" nzShowCheckbox (nzCheckedChange)=\"selectRow(data,i)\"\r\n [(nzChecked)]=\"mapOfCheckedId[data.id]\"></td>\r\n <td [nzLeft]=\"true\"\r\n class=\"left-zindex\"\r\n *ngIf=\"queryOpts.isIndex\" nzAlign=\"center\" style=\"padding:12px 0;\" nzBreakWord>{{i + 1}}</td>\r\n\r\n <ng-container *ngFor=\"let item of queryOpts.tables;\">\r\n\r\n <td [nzLeft]=\"item.isLeft ? true : false\"\r\n [ngClass]=\"{'left-zindex':item.isLeft ? true : false}\"\r\n [nzRight]=\"item.isRight ? true : false\"\r\n nzBreakWord\r\n [rowSpan]=\"checkRowSpan(item,data)\"\r\n *ngIf=\"checkShowTd(item,i) \">\r\n <app-table-td [data]=\"data\"\r\n [item]=\"item\"\r\n [i]=\"i\"\r\n (doActionByRowAction)=\"doActionByRow2($event)\"\r\n ></app-table-td>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </tbody>\r\n\r\n </ng-container>\r\n\r\n\r\n <ng-template #totalTemplate let-total>\u5171 {{ total }} \u6761\u8BB0\u5F55</ng-template>\r\n </nz-table>\r\n <nz-dropdown-menu #menu=\"nzDropdownMenu\">\r\n <div class=\"tabel-colunmn\">\r\n <nz-checkbox-wrapper style=\"width: 100%;margin-top: 30px;\" (nzOnChange)=\"log($event)\">\r\n <div nz-row>\r\n <div nz-col nzSpan=\"24\" *ngFor=\"let item of queryOpts.tables\">\r\n <label nz-checkbox nzValue=\"{{item.key}}\" [ngModel]=\"item.isShow\">{{item.name}}</label>\r\n </div>\r\n </div>\r\n </nz-checkbox-wrapper>\r\n <div class=\"tabel-colunmn-header\">\u8BF7\u9009\u62E9\u5217\u8868\u663E\u793A\u5185\u5BB9</div>\r\n </div>\r\n </nz-dropdown-menu>\r\n</div>\r\n\r\n", styles: [":host{width:100%;height:100%;display:flex;flex-direction:column}:host ::ng-deep .ant-modal{top:50px;padding:0}:host .ant-advanced-search-form{padding:10px 6px 6px;background:#fbfbfb;border:1px solid #d9d9d9;border-radius:6px;margin-bottom:5px}:host .select-icon:hover{color:#1890ff}:host ::ng-deep .ant-advanced-search-form .ant-form-item{margin-bottom:5px}:host ::ng-deep .ant-table-column-title{font-size:.65rem}:host ::ng-deep .ant-table-tbody>tr.ant-table-row:hover>td{background:#d0eeea}:host ::ng-deep .ant-modal-header,:host ::ng-deep .ant-modal-content{border-radius:4px}:host ::ng-deep .ant-table-tbody>tr.selected:hover>td{background-color:#cfe1d0!important}:host ::ng-deep .ant-table{height:100%}:host ::ng-deep nz-pagination{position:absolute;bottom:0;right:0}:host .search-result-list{padding:1px;border:1px dashed #e9e9e9;border-radius:6px;background-color:#fff;flex:1;text-align:center;position:relative}:host [nz-form-label]{overflow:visible}:host button{margin:2px 4px}:host .collapse{margin-left:6px;font-size:12px}:host .action-area{text-align:left}:host .search-area{text-align:right}:host ::ng-deep .main-table{position:absolute;top:0;left:0;right:0;bottom:0}:host ::ng-deep .main-table .ant-spin-nested-loading{height:100%}:host ::ng-deep .main-table .ant-spin-container{height:100%}:host ::ng-deep .ant-table-tbody>tr.selected>td{background-color:#cfe1d0}:host ::ng-deep .ant-table-tbody>tr>td>img{display:block;width:40%;margin:0 auto}:host ::ng-deep .ant-table-body{-ms-overflow-style:none;overflow:-moz-scrollbars-none}:host ::ng-deep .ant-table-body::-webkit-scrollbar,:host ::ng-deep .ant-table-header::-webkit-scrollbar{width:6px!important;height:6px!important}:host ::ng-deep .ant-table-body::-webkit-scrollbar-track,:host ::ng-deep .ant-table-header::-webkit-scrollbar-track{width:6px!important;cursor:pointer}:host ::ng-deep .ant-table-body::-webkit-scrollbar-thumb,:host ::ng-deep .ant-table-header::-webkit-scrollbar-thumb{background:#1890ff;border-radius:3px;cursor:pointer}:host ::ng-deep .ant-table-bordered .ant-table-thead>tr>th{border-right:1px solid #ddd}:host ::ng-deep .ant-table-header{-ms-overflow-style:none;overflow:-moz-scrollbars-none;margin-bottom:-5px!important}:host ::ng-deep .ant-table-placeholder{border-bottom:none!important;border-top:none!important}:host .tabel-colunmn{display:block;width:160px;height:300px;background:#fff;border:1px solid #ddd;padding:10px;border-radius:5px;overflow-x:hidden;overflow-y:auto;position:relative}:host .tabel-colunmn-header{position:fixed;top:0;left:0;right:0;height:30px;z-index:999;line-height:30px;border-bottom:1px solid #ddd;text-align:left;font-size:13px;padding-left:10px}:host .t-tr{background:#fff}:host .t-tr:nth-child(odd){background:#f8f9fa}:host ::ng-deep .ant-table-thead>tr>th{background:#e7ebef!important;border-radius:0;word-break:break-all;white-space:pre-wrap}:host ::ng-deep .ant-table-tbody>tr>td{word-break:break-all;white-space:pre-wrap}:host ::ng-deep .ant-table-header{background:#e7ebef!important}:host td{font-size:.65rem}:host .resize-trigger{height:100%}:host .nz-resizable-preview{border-width:0;border-right-width:1px}:host ::ng-deep .ant-table-thead>tr>th .ant-table-header-column .ant-table-column-sorters>:not(.ant-table-column-sorter){position:unset}:host ::ng-deep .ant-table-tbody>tr>td{padding:5px}:host ::ng-deep .ant-table{line-height:15px}:host ::ng-deep .ant-table-middle .ant-table-footer,:host .ant-table-middle .ant-table-tbody>tr>td,:host .ant-table-middle .ant-table-thead>tr>th,:host .ant-table-middle .ant-table-title{padding:5px}:host ::ng-deep .ant-table-tbody>tr>td>img{width:35px}:host ::ng-deep .ant-modal-body{padding:10px}:host ::ng-deep .ant-table.ant-table-bordered tbody>tr>td{font-size:13px}:host ::ng-deep th{z-index:80!important}:host .left-zindex-header{z-index:90!important}:host .left-zindex{z-index:80!important}:host ::ng-deep input,:host ::ng-deep .ant-select-single:not(.ant-select-customize-input) .ant-select-selector,:host ::ng-deep .ant-picker{border-radius:5px}:host .border-text{width:100%;height:36px;line-height:36px;display:flex}:host .border-text .border-text-line{display:inline-block;border-top:1px solid #cccccc;margin-top:18px}:host .border-text .border-text-line-left{width:10px;border-left:1px solid #cccccc}:host .border-text .border-text-line-right{flex:1;border-right:1px solid #cccccc}:host .border-text .border-text-span{margin-left:5px;margin-right:5px}:host .label-title{position:absolute;display:block;top:-7px;left:10px;background-color:#fff;color:#000;font-weight:600;font-size:12px;line-height:12px}:host ::ng-deep .tabel-colunmn-header{position:absolute!important;top:0!important}:host ::ng-deep .ant-table-cell-fix-left,:host .ant-table-cell-fix-right{position:sticky!important}\n"] }]
688
694
  }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i0.Injector }, { type: undefined, decorators: [{
689
695
  type: Inject,
690
696
  args: [LOCALE_ID]
@@ -710,4 +716,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
710
716
  type: ViewChild,
711
717
  args: ['tableContent', { static: true }]
712
718
  }] } });
713
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL3NoYXJlZC90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvc2hhcmVkL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBR1QsS0FBSyxFQUVMLFNBQVMsRUFFVCxNQUFNLEVBQ04sWUFBWSxFQUNaLFNBQVMsRUFDVCxNQUFNLEVBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF5QixXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFjLGVBQWUsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3BFLE9BQU8sRUFBQyxvQkFBb0IsRUFBMEIsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRixPQUFPLEVBQUMsZ0JBQWdCLEVBQXdELE1BQU0sK0JBQStCLENBQUM7QUFDdEgsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLDBDQUEwQyxDQUFDO0FBQ3JFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUNoRSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sK0JBQStCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBT3hELE1BQU0sT0FBTyxpQkFBaUI7SUFvQzVCLFlBQW9CLEVBQWUsRUFBVSxRQUFrQixFQUE2QixNQUFjLEVBQVUsRUFBcUI7UUFBckgsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUFVLGFBQVEsR0FBUixRQUFRLENBQVU7UUFBNkIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFVLE9BQUUsR0FBRixFQUFFLENBQW1C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LFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDakQsTUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZDO1FBQ0QsTUFBTSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQzs7K0dBanNCVSxpQkFBaUIscUVBb0M2QyxTQUFTO21HQXBDdkUsaUJBQWlCLDBhQzVCOUIsby9SQW9NQTs0RkR4S2EsaUJBQWlCO2tCQUw3QixTQUFTOytCQUNFLFdBQVc7OzBCQXdDNkMsTUFBTTsyQkFBQyxTQUFTOzRFQTVCekUsT0FBTztzQkFBZixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBV0csV0FBVztzQkFBbkIsS0FBSztnQkFNRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUVvQyxZQUFZO3NCQUF0RCxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgSW5qZWN0b3IsXHJcbiAgSW5wdXQsXHJcbiAgVmlld0NoaWxkcmVuLFxyXG4gIFZpZXdDaGlsZCxcclxuICBFbGVtZW50UmVmLFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgTE9DQUxFX0lELFxyXG4gIEluamVjdCxcclxuICBDaGFuZ2VEZXRlY3RvclJlZlxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0Zvcm1Hcm91cCwgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7Zm9ybWF0RGF0ZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtDZGtEcmFnRHJvcCwgbW92ZUl0ZW1JbkFycmF5fSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2RyYWctZHJvcFwiO1xyXG5pbXBvcnQge056Q29udGV4dE1lbnVTZXJ2aWNlLCBOekRyb3Bkb3duTWVudUNvbXBvbmVudH0gZnJvbSAnbmctem9ycm8tYW50ZC9kcm9wZG93bic7XHJcbmltcG9ydCB7YXRyX3N0YXRpY19kYXRhcywgQXRyUXVlcnlIZWFkZXIsIEF0clF1ZXlyT3B0LCBqc29uLCBUYWJsZSwgVGFibGVBY3Rpb259IGZyb20gXCIuLi8uLi8uLi9jb3JlL2Jhc2UvYXRyLWNvbW1vblwiO1xyXG5pbXBvcnQge0RpY3RTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9kaWN0L2RpY3Quc2VydmljZVwiO1xyXG5pbXBvcnQge0h0dHBTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9odHRwLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtUb29sc1V0aWx9IGZyb20gXCIuLi8uLi8uLi9jb3JlL3V0aWxzL1Rvb2xzVXRpbFwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhdHItdGFibGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUuY29tcG9uZW50Lmxlc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXRyVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIGF0ckZvcm06IEZvcm1Hcm91cCB8IGFueTtcclxuICBpc0NvbGxhcHNlID0gdHJ1ZTtcclxuICBkaWN0czogYW55ID0ge307XHJcbiAgcGFnZUluZGV4ID0gMTtcclxuXHJcbiAgcGFnZVNpemUgPSAxMDtcclxuICB0b3RhbCA9IDE7XHJcbiAgQElucHV0KCkgbG9hZGluZyA9IHRydWU7XHJcbiAgQElucHV0KCkgYWxsb3dEcmFnID0gZmFsc2U7Ly/lhYHorrjmi5bmi73mjaLkvY1cclxuICB0YWJsZURhdGFzOiBhbnkgPSBbXTtcclxuICBzY3JvbGxTaXplOiBhbnkgPSB7eDogXCJcIiwgeTogXCJcIn1cclxuICAvL+ihqOagvGNoZWNrYm94IOmFjee9rlxyXG4gIGlzQWxsRGlzcGxheURhdGFDaGVja2VkOiBib29sZWFuID0gZmFsc2VcclxuICBpc0luZGV0ZXJtaW5hdGUgPSBmYWxzZTtcclxuICBudW1iZXJPZkNoZWNrZWQgPSAwO1xyXG4gIG1hcE9mQ2hlY2tlZElkOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9O1xyXG4gIGN1ckNoZWNrZWQ6IG51bWJlciA9IC0xO1xyXG4gIGltYWdlUHJlZml4ID0gYXRyX3N0YXRpY19kYXRhcy5PU1NfVVJMO1xyXG4gIGRlZmF1bHRQYXJhbXMgPSB7fTtcclxuICBASW5wdXQoKSBpc0hpZGVUYWJsZSA9IGZhbHNlXHJcbiAgaXNBbGxMb2FkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc29ydE1hcDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xyXG4gIHJvd1NwYW5NYXA6IGFueSA9IHt9Oy8va2V5Onvlvrfnp5HniaflnLo6e251bToxfX1cclxuICBoZWFkZXJEZWZhdWx0VmFsOiBhbnkgPSB7fVxyXG5cclxuICBASW5wdXQoKSBxdWVyeU9wdHM6IEF0clF1ZXlyT3B0IHwgYW55O1xyXG4gIEBJbnB1dCgpIHNob3dQYWdpbmF0aW9uID0gdHJ1ZTtcclxuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgQE91dHB1dCgpIHRhYmxlQWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZUFjdGlvbj4oKTtcclxuICBAT3V0cHV0KCkgcXVlcnlCYWNrID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZUFjdGlvbj4oKTtcclxuICBAT3V0cHV0KCkgaGVhZGVyQWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZUFjdGlvbj4oKTtcclxuXHJcbiAgQFZpZXdDaGlsZCgndGFibGVDb250ZW50Jywge3N0YXRpYzogdHJ1ZX0pIHRhYmxlQ29udGVudDogRWxlbWVudFJlZiB8IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLCBASW5qZWN0KExPQ0FMRV9JRCkgcHJpdmF0ZSBsb2NhbGU6IHN0cmluZywgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcclxuICB9XHJcblxyXG4gIGlzU2hvd0NvbG9yKGRhdGE6IGFueSkge1xyXG4gICAgaWYgKHRoaXMucXVlcnlPcHRzLmNvbG9yICYmIHRoaXMucXVlcnlPcHRzLmNvbG9yLm9wZXJhdG9yICYmIHRoaXMuaXNTaG93QnRuKGRhdGEsIHRoaXMucXVlcnlPcHRzLmNvbG9yLm9wZXJhdG9yKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5xdWVyeU9wdHMuY29sb3IuY29sb3I7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJydcclxuICB9XHJcblxyXG4gIGRiY2xpY2tEYXRhKGRhdGE6IGFueSwgcm93Tm86IG51bWJlcikge1xyXG4gICAgbGV0IGFjdGlvbjogVGFibGVBY3Rpb24gPSB7XHJcbiAgICAgIG5hbWU6ICdkYmNsaWNrRGF0YScsXHJcbiAgICAgIGNvZGU6ICdkYmNsaWNrRGF0YScsXHJcbiAgICAgIHR5cGU6IFwicm93XCJcclxuICAgIH07XHJcbiAgICBhY3Rpb24uZGF0YSA9IGRhdGE7XHJcbiAgICBhY3Rpb24uZmlyc3REYXRhID0gZGF0YTtcclxuICAgIHRoaXMudGFibGVBY3Rpb24uZW1pdChhY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgZG9BY3Rpb25CeVJvdzIoZTogYW55KSB7XHJcbiAgICBsZXQge2RhdGEsIGNvZGUsIGV2ZW50OiBNb3VzZUV2ZW50LCBpbmRleH0gPSBlXHJcbiAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgaWYgKGV2ZW50LnN0b3BQcm9wYWdhdGlvbikge1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBhY3Rpb246IFRhYmxlQWN0aW9uID0ge1xyXG4gICAgICBuYW1lOiBjb2RlLFxyXG4gICAgICBjb2RlOiBjb2RlLFxyXG4gICAgICB0eXBlOiBcInJvd1wiXHJcbiAgICB9O1xyXG4gICAgYWN0aW9uLmRhdGEgPSBkYXRhO1xyXG4gICAgYWN0aW9uLmZpcnN0RGF0YSA9IGRhdGE7XHJcbiAgICBhY3Rpb24ubnVtYmVyT2ZDaGVja2VkID0gaW5kZXg7XHJcbiAgICB0aGlzLnRhYmxlQWN0aW9uLmVtaXQoYWN0aW9uKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0IGh0dHBTZXJ2aWNlKCk6IEh0dHBTZXJ2aWNlIHtcclxuICAgIHJldHVybiB0aGlzLmluamVjdG9yLmdldChIdHRwU2VydmljZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldCBuekNvbnRleHRNZW51U2VydmljZSgpOiBOekNvbnRleHRNZW51U2VydmljZSB7XHJcbiAgICByZXR1cm4gdGhpcy5pbmplY3Rvci5nZXQoTnpDb250ZXh0TWVudVNlcnZpY2UpO1xyXG4gIH1cclxuXHJcbiAgc2V0VGFibGVMb2FkZGluZyhsb2FkZGluZzogYm9vbGVhbikge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gbG9hZGRpbmc7XHJcbiAgfVxyXG5cclxuICBvblJlc2l6ZSh3aWR0aDogYW55LCBjb2w6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5xdWVyeU9wdHMudGFibGVzID0gdGhpcy5xdWVyeU9wdHMudGFibGVzLm1hcCgoZTogYW55KSA9PiAoZS5uYW1lID09PSBjb2wgPyB7Li4uZSwgd2lkdGg6IGAke3dpZHRofXB4YH0gOiBlKSk7XHJcbiAgICBsZXQgeCA9IDA7XHJcbiAgICBmb3IgKGxldCBpdGVtIG9mIHRoaXMucXVlcnlPcHRzLnRhYmxlcykge1xyXG5cclxuICAgICAgaWYgKGl0ZW0uaXNTaG93ICYmIGl0ZW0ud2lkdGgpIHtcclxuICAgICAgICB4ICs9IFRvb2xzVXRpbC5waXhlbFRvTnVtKGl0ZW0ud2lkdGgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoeCA+IDIyKSB7XHJcbiAgICAgIHggPSB4IC0gMjI7XHJcbiAgICAgIHRoaXMuc2Nyb2xsU2l6ZS54ID0geCArIFwicHhcIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzRW5hYmxlKG9wZXJhdG9yOiBzdHJpbmcpIHtcclxuICAgIGxldCBpc0VuYWJsZSA9IHRydWU7XHJcbiAgICBpZiAoIW9wZXJhdG9yIHx8IG9wZXJhdG9yID09IHVuZGVmaW5lZCB8fCBvcGVyYXRvciA9PSBcIlwiKVxyXG4gICAgICBpc0VuYWJsZSA9IGZhbHNlO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBvcCA9IG9wZXJhdG9yLnNwbGl0KFwifFwiKTtcclxuICAgICAgaWYgKG9wLmxlbmd0aCA+IDIpIHtcclxuICAgICAgICBsZXQga2V5ID0gb3BbMF07XHJcbiAgICAgICAgaWYgKCFrZXkpIHtcclxuICAgICAgICAgIGlzRW5hYmxlID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlzRW5hYmxlID0gIXRoaXMuY29tcGFyZSh0aGlzLm51bWJlck9mQ2hlY2tlZCwgb3BbMV0sIG9wWzJdKVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlXHJcbiAgICAgICAgaXNFbmFibGUgPSBmYWxzZVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpc0VuYWJsZVxyXG4gIH1cclxuXHJcbiAgaXNTaG93QnRuKGRhdGE6IGFueSwgb3BlcmF0b3I6IHN0cmluZywgYWN0aW9uPzogVGFibGVBY3Rpb24pOiBib29sZWFuIHtcclxuICAgIGxldCBpc1Nob3cgPSBmYWxzZTtcclxuICAgIGlmICghb3BlcmF0b3IgfHwgb3BlcmF0b3IgPT0gbnVsbCB8fCBvcGVyYXRvciA9PSBcIlwiKSB7XHJcbiAgICAgIGlzU2hvdyA9IHRydWU7XHJcbiAgICB9IGVsc2UgaWYgKG9wZXJhdG9yLmluZGV4T2YoJyYmJykgPiAwKSB7XHJcbiAgICAgIC8vIGF8ZXF8YiAmJmN8ZXF8ZFxyXG4gICAgICBjb25zdCBvcHMgPSBvcGVyYXRvci5zcGxpdCgnJiYnKTtcclxuICAgICAgaWYgKG9wcy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnByZWZlci1mb3Itb2ZcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaXNTaG93ID0gdHJ1ZVxyXG4gICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSXNTaG93QmFzZShvcHNbaV0uc3BsaXQoJ3wnKSwgZGF0YSkpIHtcclxuICAgICAgICAgICAgaXNTaG93ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChvcGVyYXRvci5pbmRleE9mKCd8fCcpID4gMCkge1xyXG4gICAgICAvLyBhfGVxfGJ8fGN8ZXF8ZFxyXG4gICAgICBjb25zdCBvcHMgPSBvcGVyYXRvci5zcGxpdCgnJiYnKTtcclxuICAgICAgaWYgKG9wcy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlzU2hvdyA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKHRoaXMuY2hlY2tJc1Nob3dCYXNlKG9wc1tpXS5zcGxpdCgnfCcpLCBkYXRhKSkge1xyXG4gICAgICAgICAgICBpc1Nob3cgPSB0cnVlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBvcCA9IG9wZXJhdG9yLnNwbGl0KFwifFwiKTtcclxuICAgICAgaXNTaG93ID0gdGhpcy5jaGVja0lzU2hvd0Jhc2Uob3AsIGRhdGEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlzU2hvdztcclxuICB9XHJcblxyXG4gIGNoZWNrSXNTaG93QmFzZShvcDogYW55LCBkYXRhOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGxldCBpc1Nob3cgPSBmYWxzZTtcclxuICAgIGlmIChvcC5sZW5ndGggPiAxKSB7XHJcbiAgICAgIGxldCB2YWx1ZSA9IGRhdGFbb3BbMF1dO1xyXG4gICAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgICAgaXNTaG93ID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaXNTaG93ID0gdGhpcy5jb21wYXJlKHZhbHVlLCBvcFsxXSwgb3BbMl0pXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZVxyXG4gICAgICBpc1Nob3cgPSBmYWxzZVxyXG5cclxuICAgIHJldHVybiBpc1Nob3c7XHJcbiAgfVxyXG5cclxuICBjb21wYXJlKHZhbHVlOiBhbnksIG9wZXJhdG9yOiBhbnksIHRhcmdldDogYW55KTogYm9vbGVhbiB7XHJcbiAgICBsZXQgaXNSaWdodCA9IGZhbHNlO1xyXG4gICAgc3dpdGNoIChvcGVyYXRvcikge1xyXG4gICAgICBjYXNlICdlcScgOlxyXG4gICAgICAgIGlmICh2YWx1ZSA9PSB0YXJnZXQpIHtcclxuICAgICAgICAgIGlzUmlnaHQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnZ2gnIDpcclxuICAgICAgICBpZiAodmFsdWUgPj0gdGFyZ2V0KSB7XHJcbiAgICAgICAgICBpc1JpZ2h0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ25vdEVtcHR5JzpcclxuICAgICAgICBpc1JpZ2h0ID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICBpc1JpZ2h0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2VtcHR5JzpcclxuICAgICAgICBpc1JpZ2h0ID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICAgICAgaXNSaWdodCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0IDpcclxuICAgICAgICBpc1JpZ2h0ID0gZmFsc2U7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXNSaWdodDtcclxuICB9XHJcblxyXG4gIHB1c2hUYWJsZURhdGFzKHRhYmxlRGF0YXM6IGFueSkge1xyXG4gICAgdGhpcy50YWJsZURhdGFzID0gdGhpcy50YWJsZURhdGFzLmNvbmNhdCh0YWJsZURhdGFzKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZURhdGFzKGtleTogYW55LCB2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLnRhYmxlRGF0YXMuZm9yRWFjaCgoaXRlbTogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChpdGVtW2tleV0gPT09IHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy50YWJsZURhdGFzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBkb0FjdGlvbihjb2RlOiBhbnkpIHtcclxuICAgIGxldCBhY3Rpb246IFRhYmxlQWN0aW9uID0ge1xyXG4gICAgICBuYW1lOiBjb2RlLFxyXG4gICAgICBjb2RlOiBjb2RlLFxyXG4gICAgICB0eXBlOiBcInJvd3NcIlxyXG4gICAgfTtcclxuICAgIGxldCBzZWxlY3REYXRhczogYW55ID0gW107XHJcbiAgICBpZiAodGhpcy50YWJsZURhdGFzICYmIHRoaXMudGFibGVEYXRhcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMudGFibGVEYXRhcy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5tYXBPZkNoZWNrZWRJZFtpdGVtLmlkXSlcclxuICAgICAgICAgIHNlbGVjdERhdGFzLnB1c2goaXRlbSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgYWN0aW9uLmRhdGFzID0gc2VsZWN0RGF0YXM7XHJcbiAgICBpZiAoc2VsZWN0RGF0YXMgJiYgc2VsZWN0RGF0YXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBhY3Rpb24uZmlyc3REYXRhID0gc2VsZWN0RGF0YXNbMF07XHJcbiAgICB9XHJcbiAgICBhY3Rpb24ubnVtYmVyT2ZDaGVja2VkID0gc2VsZWN0RGF0YXMubGVuZ3RoO1xyXG4gICAgdGhpcy50YWJsZUFjdGlvbi5lbWl0KGFjdGlvbik7XHJcbiAgfVxyXG5cclxuICBkb0FjdGlvbkJ5Um93KGRhdGE6IGFueSwgY29kZTogYW55LCBldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIHtcclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcclxuICAgIH1cclxuICAgIGxldCBhY3Rpb246IFRhYmxlQWN0aW9uID0ge1xyXG4gICAgICBuYW1lOiBjb2RlLFxyXG4gICAgICBjb2RlOiBjb2RlLFxyXG4gICAgICB0eXBlOiBcInJvd1wiXHJcbiAgICB9O1xyXG4gICAgYWN0aW9uLmRhdGEgPSBkYXRhO1xyXG4gICAgYWN0aW9uLmZpcnN0RGF0YSA9IGRhdGE7XHJcbiAgICBhY3Rpb24ubnVtYmVyT2ZDaGVja2VkID0gMTtcclxuICAgIHRoaXMudGFibGVBY3Rpb24uZW1pdChhY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsQ2hlY2tJbmZvKCk6IGFueVtdIHtcclxuICAgIGxldCBpZHM6IGFueSA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5tYXBPZkNoZWNrZWRJZCkpIHtcclxuICAgICAgaWYgKHRoaXMubWFwT2ZDaGVja2VkSWQuaGFzT3duUHJvcGVydHkoa2V5KSAmJiB0aGlzLm1hcE9mQ2hlY2tlZElkW2tleV0pIHtcclxuICAgICAgICBpZHMucHVzaChrZXkpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBpZHM7XHJcbiAgfVxyXG5cclxuICBnZXRBbGxDaGVja0RhdGFzKCk6IGFueVtdIHtcclxuICAgIGxldCBzZWxlY3REYXRhczogYW55ID0gW11cclxuICAgIHRoaXMudGFibGVEYXRhcy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHRoaXMubWFwT2ZDaGVja2VkSWRbaXRlbS5pZF0pXHJcbiAgICAgICAgc2VsZWN0RGF0YXMucHVzaChpdGVtKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHNlbGVjdERhdGFzO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tBbGwodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMudGFibGVEYXRhcy5mb3JFYWNoKChpdGVtOiBhbnkpID0+ICh0aGlzLm1hcE9mQ2hlY2tlZElkW2l0ZW0uaWRdID0gdmFsdWUpKTtcclxuICAgIHRoaXMucmVmcmVzaFN0YXR1cygpO1xyXG4gIH1cclxuXHJcbiAgcmVmcmVzaFN0YXR1cygpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNBbGxEaXNwbGF5RGF0YUNoZWNrZWQgPSB0aGlzLnRhYmxlRGF0YXNcclxuICAgICAgLmV2ZXJ5KChpdGVtOiBhbnkpID0+IHRoaXMubWFwT2ZDaGVja2VkSWRbaXRlbS5pZF0pO1xyXG4gICAgdGhpcy5pc0luZGV0ZXJtaW5hdGUgPVxyXG4gICAgICB0aGlzLnRhYmxlRGF0YXMuc29tZSgoaXRlbTogYW55KSA9PiB0aGlzLm1hcE9mQ2hlY2tlZElkW2l0ZW0uaWRdKSAmJlxyXG4gICAgICAhdGhpcy5pc0FsbERpc3BsYXlEYXRhQ2hlY2tlZDtcclxuICAgIHRoaXMubnVtYmVyT2ZDaGVja2VkID0gdGhpcy50YWJsZURhdGFzLmZpbHRlcigoaXRlbTogYW55KSA9PiB0aGlzLm1hcE9mQ2hlY2tlZElkW2l0ZW0uaWRdKS5sZW5ndGg7XHJcbiAgICB0aGlzLnRhYmxlQWN0aW9uLmVtaXQoe1xyXG4gICAgICBjb2RlOiAncmVmcmVzaFN0YXR1cycsIG5hbWU6ICdzZWxlY3QnLFxyXG4gICAgICB0eXBlOiBcInJvd1wiLCBkYXRhOiB0aGlzLmdldEFsbENoZWNrRGF0YXMoKVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHNlbGVjdFJvdyhkYXRhOiBhbnksIHJvd05vOiBudW1iZXIpIHtcclxuICAgIC8vIHRoaXMudGFibGVEYXRhcy5mb3JFYWNoKGl0ZW0gPT4gKHRoaXMubWFwT2ZDaGVja2VkSWRbZGF0YS5pZF0gPSB2YWx1ZSkpO1xyXG4gICAgdGhpcy5jdXJDaGVja2VkID0gcm93Tm87XHJcbiAgICBpZiAoIXRoaXMucXVlcnlPcHRzLmNoZWNrQm94Py5pc0ZvcmJpZCkge1xyXG4gICAgICBpZiAodGhpcy5xdWVyeU9wdHMuY2hlY2tCb3g/LmlzU2hvd0NoZWNrYm94KSB7XHJcbiAgICAgICAgdGhpcy5tYXBPZkNoZWNrZWRJZFtkYXRhLmlkXSA9ICF0aGlzLm1hcE9mQ2hlY2tlZElkW2RhdGEuaWRdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubWFwT2ZDaGVja2VkSWQgPSB7fTtcclxuICAgICAgICB0aGlzLm1hcE9mQ2hlY2tlZElkW2RhdGEuaWRdID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IGFjdGlvbjogVGFibGVBY3Rpb24gPSB7XHJcbiAgICAgIG5hbWU6ICdzZWxlY3QnLFxyXG4gICAgICBjb2RlOiAnc2VsZWN0JyxcclxuICAgICAgdHlwZTogXCJyb3dcIlxyXG4gICAgfTtcclxuICAgIGFjdGlvbi5kYXRhID0gZGF0YTtcclxuICAgIGFjdGlvbi5maXJzdERhdGEgPSBkYXRhO1xyXG4gICAgYWN0aW9uLm51bWJlck9mQ2hlY2tlZCA9IDE7XHJcbiAgICB0aGlzLnRhYmxlQWN0aW9uLmVtaXQoYWN0aW9uKTtcclxuICAgIHRoaXMucmVmcmVzaFN0YXR1cygpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmF0ckZvcm0gPSB0aGlzLmZiLmdyb3VwKHt9KTtcclxuICAgIGxldCB4ID0gdGhpcy50YWJsZUNvbnRlbnQubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCAtIDIyXHJcbiAgICBsZXQgeSA9IHRoaXMudGFibGVDb250ZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0IC0gMjAwXHJcbiAgICB0aGlzLnNjcm9sbFNpemUueCA9ICh4ID4gMCA/IHggOiAxMDApICsgXCJweFwiO1xyXG4gICAgdGhpcy5zY3JvbGxTaXplLnkgPSAoeSA+IDAgPyB5IDogMTAwKSArIFwicHhcIjtcclxuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuc2Nyb2xsU2l6ZSlcclxuICAgIHRoaXMuaW5pdEhlYWRlcigpO1xyXG4gICAgaWYgKHRoaXMucXVlcnlPcHRzICYmIHRoaXMucXVlcnlPcHRzLnRhYmxlcykge1xyXG4gICAgICBmb3IgKGxldCB0YWJsZSBvZiB0aGlzLnF1ZXJ5T3B0cy50YWJsZXMpIHtcclxuICAgICAgICBpZiAodGFibGUuc29ydEtleSkge1xyXG4gICAgICAgICAgdGFibGUuc29ydGFibGUgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5zb3J0TWFwW3RhYmxlLnNvcnRLZXldID0gbnVsbDtcclxuICAgICAgICB9IGVsc2VcclxuICAgICAgICAgIHRhYmxlLnNvcnRhYmxlID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLnF1ZXJ5T3B0cyAmJiB0aGlzLnF1ZXJ5T3B0cy5kZWZhdWx0UGFyYW1zKSB7XHJcbiAgICAgIHRoaXMuZGVmYXVsdFBhcmFtcyA9IHRoaXMucXVlcnlPcHRzLmRlZmF1bHRQYXJhbXNcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5xdWVyeU9wdHMuaXNBdXRvUXVlcnkpIHtcclxuICAgICAgdGhpcy5xdWVyeSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIC8vIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5pdEhlYWRlcigpIHtcclxuICAgIHRoaXMuaGVhZGVyRGVmYXVsdFZhbCA9IHt9O1xyXG4gICAgaWYgKHRoaXMucXVlcnlPcHRzICYmIHRoaXMucXVlcnlPcHRzLmhlYWRlcnMgJiYgdGhpcy5xdWVyeU9wdHMuaGVhZGVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMucXVlcnlPcHRzLmhlYWRlcnMuZm9yRWFjaCgoaXRlbTogYW55LCBpOiBhbnkpID0+IHtcclxuICAgICAgICBpdGVtLnNwYW4gPSBpdGVtLnNwYW4gfHwgODtcclxuICAgICAgICBpZiAoIVRvb2xzVXRpbC5pc051bGwoaXRlbS5kZWZhdWx0VmFsKSkge1xyXG4gICAgICAgICAgdGhpcy5oZWFkZXJEZWZhdWx0VmFsW2l0ZW0ua2V5XSA9IGl0ZW0uZGVmYXVsdFZhbFxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXRlbS5pc1Nob3cgIT0gZmFsc2UpIHtcclxuICAgICAgICAgIGl0ZW0uaXNTaG93ID0gaSA8IHRoaXMucXVlcnlPcHRzLnNob3dOdW1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hdHJGb3JtLmFkZENvbnRyb2woaXRlbS5rZXksIG5ldyBGb3JtQ29udHJvbCgpKTtcclxuICAgICAgICBsZXQgdHlwZSA9IGl0ZW0udHlwZTtcclxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICAgIGNhc2UgXCJzZWxlY3RcIjpcclxuICAgICAgICAgICAgdGhpcy5nZXREaWN0VmFsdWUoaXRlbS5kaWN0Q29kZSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBcInRyZWVTZWxlY3RcIjpcclxuICAgICAgICAgIGNhc2UgXCJjYXNjYWRlclwiOlxyXG4gICAgICAgICAgY2FzZSBcInNlbGVjdEN1c1wiOlxyXG4gICAgICAgICAgICBpZiAoaXRlbS5zZWxlY3RVcmwgJiYgaXRlbS5zZWxlY3RVcmwudXJsKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXREaWNMaXN0KGl0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXREaWNMaXN0KGl0ZW06IGFueSkge1xyXG4gICAgaWYgKCFpdGVtLnNlbGVjdFVybCB8fCAhaXRlbS5zZWxlY3RVcmwudXJsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBrZXlzID0gaXRlbS5zZWxlY3RVcmwuY29udmVydC5zcGxpdCgnLCcpO1xyXG4gICAgdGhpcy5odHRwU2VydmljZS5wb3N0KGl0ZW0uc2VsZWN0VXJsLnVybCwge30sIFRvb2xzVXRpbC5nZXRIdHRwT3B0aW9ucygpKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgaWYgKGl0ZW0udHlwZSA9PSAndHJlZVNlbGVjdCcpIHtcclxuICAgICAgICBpdGVtLnRyZWVMaXN0ID0gcmVzLmRhdGEuZmlsdGVyKChjaGlsZDogYW55KSA9PiB7XHJcbiAgICAgICAgICBrZXlzLmZvckVhY2goKHY6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgdnMgPSB2LnNwbGl0KFwifFwiKTtcclxuICAgICAgICAgICAgY2hpbGRbdnNbMF1dID0gY2hpbGRbdnNbMV1dO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICAvLyBjaGlsZC5rZXkgPSBjaGlsZC5pZDtcclxuICAgICAgICAgIC8vIGNoaWxkLnRpdGxlID0gY2hpbGQucmVhbE5hbWU7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKGl0ZW0udHlwZSA9PSAnc2VsZWN0Q3VzJykge1xyXG4gICAgICAgIGl0ZW0uZGljdExpc3QgPSByZXMuZGF0YS5maWx0ZXIoKGNoaWxkOiBhbnkpID0+IHtcclxuICAgICAgICAgIGtleXMuZm9yRWFjaCgodjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCB2cyA9IHYuc3BsaXQoXCJ8XCIpO1xyXG4gICAgICAgICAgICBjaGlsZFt2c1swXV0gPSBjaGlsZFt2c1sxXV07XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIC8vIGNoaWxkLnZhbHVlID0gY2hpbGQuaWQ7XHJcbiAgICAgICAgICAvLyBjaGlsZC5sYWJlbCA9IGNoaWxkLm5hbWU7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5zY3JvbGxTaXplLnkgPSB0aGlzLnRhYmxlQ29udGVudC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCAtIDEwMCArIFwicHhcIjtcclxuICAgICAgbGV0IHdpZHRoID0gMDtcclxuICAgICAgaWYgKHRoaXMucXVlcnlPcHRzICYmIHRoaXMucXVlcnlPcHRzLnRhYmxlcykge1xyXG4gICAgICAgIGZvciAobGV0IHRhYmxlIG9mIHRoaXMucXVlcnlPcHRzLnRhYmxlcykge1xyXG4gICAgICAgICAgaWYgKHRhYmxlLmlzU2hvdyAmJiB0YWJsZS53aWR0aCkge1xyXG5cclxuICAgICAgICAgICAgd2lkdGggKz0gVG9vbHNVdGlsLnBpeGVsVG9OdW0odGFibGUud2lkdGgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBsZXQgdyA9IHRoaXMudGFibGVDb250ZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggLSAyMjtcclxuICAgICAgaWYgKHdpZHRoID4gdylcclxuICAgICAgICB0aGlzLnNjcm9sbFNpemUueCA9IHdpZHRoICsgXCJweFwiO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5zY3JvbGxTaXplLnggPSB0aGlzLnRhYmxlQ29udGVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIC0gMjIgKyBcInB4XCI7XHJcblxyXG4gICAgICBjb25zb2xlLmxvZyh0aGlzLnNjcm9sbFNpemUpO1xyXG4gICAgICB0aGlzLmlzQWxsTG9hZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSwgNTAwKVxyXG5cclxuXHJcbiAgfVxyXG5cclxuICBzb3J0KHNvcnROYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuc29ydE1hcCkge1xyXG4gICAgICB0aGlzLnNvcnRNYXBba2V5XSA9IGtleSA9PT0gc29ydE5hbWUgPyB2YWx1ZSA6IG51bGw7XHJcbiAgICB9XHJcbiAgICAvLyB0aGlzLnNlYXJjaCh0aGlzLmxpc3RPZlNlYXJjaE5hbWUsIHRoaXMubGlzdE9mU2VhcmNoQWRkcmVzcyk7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnNvcnRNYXApXHJcbiAgICB0aGlzLnF1ZXJ5KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXQgZGljdFNlcnZpY2UoKTogRGljdFNlcnZpY2Uge1xyXG4gICAgcmV0dXJuIHRoaXMuaW5qZWN0b3IuZ2V0KERpY3RTZXJ2aWNlKVxyXG4gIH1cclxuXHJcbiAgZ2V0RGljdFZhbHVlKGNvZGU6IHN0cmluZykge1xyXG4gICAgY29uc29sZS5sb2coXCJwcHBwXCIpO1xyXG4gICAgdGhpcy5kaWN0U2VydmljZS5nZXREaWN0Qnljb2RlKGNvZGUpLnN1YnNjcmliZShcclxuICAgICAgcmVzdWx0ID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdCAhPSBudWxsKVxyXG4gICAgICAgICAgdGhpcy5kaWN0c1tjb2RlXSA9IHJlc3VsdC5kaWN0cztcclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmRpY3RzKVxyXG5cclxuICAgICAgfSxcclxuICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgIHRoaXMuZGljdHNbY29kZV0gPSBbXTtcclxuICAgICAgfVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlQ29sbGFwc2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzQ29sbGFwc2UgPSAhdGhpcy5pc0NvbGxhcHNlO1xyXG4gICAgLy8gdGhpcy5xdWVyeU9wdHMuaGVhZGVycy5mb3JFYWNoKChjOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgIC8vICAgYy5pc1Nob3cgPSB0aGlzLmlzQ29sbGFwc2UgPyBpbmRleCA8IHRoaXMucXVlcnlPcHRzLnNob3dOdW0gOiB0cnVlO1xyXG4gICAgLy8gfSk7XHJcbiAgfVxyXG5cclxuICByZXNldEZvcm0oKTogdm9pZCB7XHJcbiAgICB0aGlzLmF0ckZvcm0ucmVzZXQoKTtcclxuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuaGVhZGVyRGVmYXVsdFZhbCkge1xyXG4gICAgICB0aGlzLmF0ckZvcm0uZ2V0KGtleSk/LnNldFZhbHVlKHRoaXMuaGVhZGVyRGVmYXVsdFZhbFtrZXldKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlbGVjdENoYW5nZSh2YWx1ZTogYW55LCBpdGVtOiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKHZhbHVlKTtcclxuICAgIGxldCBhY3Rpb246IFRhYmxlQWN0aW9uID0ge1xyXG4gICAgICBuYW1lOiBpdGVtLmxhYmVsLFxyXG4gICAgICBjb2RlOiBpdGVtLmtleSxcclxuICAgICAgZGF0YTogaXRlbSxcclxuICAgICAgdmFsdWU6IHZhbHVlLFxyXG4gICAgfTtcclxuICAgIHRoaXMuaGVhZGVyQWN0aW9uLmVtaXQoYWN0aW9uKVxyXG5cclxuICB9XHJcblxyXG4gIGNsaWNrSWNvbih2YWx1ZTogYW55LCBpdGVtOiBBdHJRdWVyeUhlYWRlciwgJGV2ZW50OiBhbnkpIHtcclxuICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGNvbnNvbGUubG9nKHZhbHVlLCBpdGVtKTtcclxuICAgIGxldCBhY3Rpb246IFRhYmxlQWN0aW9uID0ge1xyXG4gICAgICBuYW1lOiBpdGVtLm5hbWUsXHJcbiAgICAgIGNvZGU6IGl0ZW0uaWNvbj8uY29kZSA/IGl0ZW0uaWNvbj8uY29kZSA6IFwiXCIsXHJcbiAgICAgIGRhdGE6IGl0ZW0sXHJcbiAgICAgIHZhbHVlOiB2YWx1ZSxcclxuICAgIH07XHJcbiAgICB0aGlzLmhlYWRlckFjdGlvbi5lbWl0KGFjdGlvbilcclxuICB9XHJcblxyXG4gIGdldFF1ZXJ5UGFyYW1zKHJlc2V0OiBib29sZWFuKToganNvbiB7XHJcbiAgICBpZiAocmVzZXQpIHtcclxuICAgICAgdGhpcy5wYWdlSW5kZXggPSAxO1xyXG4gICAgfVxyXG4gICAgY29uc29sZS5sb2codGhpcy5wYWdlSW5kZXgpO1xyXG4gICAgbGV0IHBhcmFtczogYW55ID0ge1xyXG4gICAgICBwYWdlOiB0aGlzLnBhZ2VJbmRleCxcclxuICAgICAgbGltaXQ6IHRoaXMucGFnZVNpemUsXHJcbiAgICAgIHNvcnQ6IHRoaXMuZ2V0U29ydEluZm8oKVxyXG4gICAgfTtcclxuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuYXRyRm9ybS52YWx1ZSkge1xyXG4gICAgICBpZiAodGhpcy5hdHJGb3JtLnZhbHVlW2tleV0gJiYgdGhpcy5hdHJGb3JtLnZhbHVlW2tleV0gIT0gbnVsbCAmJiB0aGlzLmF0ckZvcm0udmFsdWVba2V5XSAhPSBcIlwiKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0SGVkZXJUeXBlKGtleSkgPT0gXCJkYXRlUmFuZ2VcIikge1xyXG4gICAgICAgICAgbGV0IGJlZ2luID0ga2V5ICsgXCJCZWdpblwiO1xyXG4gICAgICAgICAgbGV0IGVuZCA9IGtleSArIFwiRW5kXCI7XHJcbiAgICAgICAgICBsZXQgZm9ybWF0ZSA9ICd5eXl5LU1NLWRkIDAwOjAwOjAwJ1xyXG4gICAgICAgICAgbGV0IG56U2hvd1RpbWU6IGFueSA9IHRoaXMuZ2V0SGVkZXJUeXBlKGtleSwgJ256U2hvd1RpbWUnKVxyXG4gICAgICAgICAgaWYgKG56U2hvd1RpbWUpIHtcclxuICAgICAgICAgICAgZm9ybWF0ZSA9ICd5eXl5LU1NLWRkIEhIOm1tOnNzJ1xyXG4gICAgICAgICAgICBpZiAobnpTaG93VGltZS5uekZvcm1hdCkge1xyXG4gICAgICAgICAgICAgIGZvcm1hdGUgPSAneXl5eS1NTS1kZCAnICsgbnpTaG93VGltZS5uekZvcm1hdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcGFyYW1zW2JlZ2luXSA9IGZvcm1hdERhdGUoKHRoaXMuYXRyRm9ybS52YWx1ZVtrZXldWzBdIGFzIERhdGUpLCBmb3JtYXRlLCB0aGlzLmxvY2FsZSk7XHJcbiAgICAgICAgICBwYXJhbXNbZW5kXSA9IGZvcm1hdERhdGUoKHRoaXMuYXRyRm9ybS52YWx1ZVtrZXldWzFdIGFzIERhdGUpLCBmb3JtYXRlLCB0aGlzLmxvY2FsZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdldEhlZGVyVHlwZShrZXkpID09IFwiZGF5UmFuZ2VcIikge1xyXG4gICAgICAgICAgbGV0IGJlZ2luID0ga2V5ICsgXCJCZWdpblwiO1xyXG4gICAgICAgICAgbGV0IGVuZCA9IGtleSArIFwiRW5kXCI7XHJcbiAgICAgICAgICBsZXQgZm9ybWF0ZSA9ICd5eXl5LU1NLWRkIDAwOjAwOjAwJ1xyXG4gICAgICAgICAgcGFyYW1zW2JlZ2luXSA9IGZvcm1hdERhdGUoKHRoaXMuYXRyRm9ybS52YWx1ZVtrZXldWzBdIGFzIERhdGUpLCBmb3JtYXRlLCB0aGlzLmxvY2FsZSk7XHJcbiAgICAgICAgICBwYXJhbXNbZW5kXSA9IGZvcm1hdERhdGUoKHRoaXMuYXRyRm9ybS52YWx1ZVtrZXldWzFdIGFzIERhdGUpLCBmb3JtYXRlLCB0aGlzLmxvY2FsZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdldEhlZGVyVHlwZShrZXkpID09IFwic2RhdGVcIikge1xyXG4gICAgICAgICAgcGFyYW1zW2tleV0gPSBmb3JtYXREYXRlKCh0aGlzLmF0ckZvcm0udmFsdWVba2V5XSBhcyBEYXRlKSwgJ3l5eXktTU0tZGQgMDA6MDA6MDAnLCB0aGlzLmxvY2FsZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdldEhlZGVyVHlwZShrZXkpID09IFwidHJlZVNlbGVjdFwiKSB7XHJcbiAgICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLmF0ckZvcm0udmFsdWVba2V5XTtcclxuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgcGFyYW1zW2tleV0gPSB0aGlzLmF0ckZvcm0udmFsdWVba2V5XTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHBhcmFtc1trZXldID0gdGhpcy5hdHJGb3JtLnZhbHVlW2tleV0uam9pbigpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5nZXRIZWRlclR5cGUoa2V5KSA9PSBcImNhc2NhZGVyXCIpIHtcclxuICAgICAgICAgIHBhcmFtc1trZXldID0gdGhpcy5hdHJGb3JtLnZhbHVlW2tleV0uam9pbigpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBwYXJhbXNba2V5XSA9IHRoaXMuYXRyRm9ybS52YWx1ZVtrZXldO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwYXJhbXMgPSBPYmplY3QuYXNzaWduKHBhcmFtcywgdGhpcy5kZWZhdWx0UGFyYW1zKTtcclxuICAgIGNvbnNvbGUubG9nKHBhcmFtcylcclxuICAgIHJldHVybiBwYXJhbXM7XHJcblxyXG4gIH1cclxuXHJcbiAgZ2V0SGVkZXJUeXBlKGN1c0tleTogc3RyaW5nLCB0eXBlS2V5Pzogc3RyaW5nKSB7XHJcbiAgICBsZXQgdHlwZSA9IG51bGw7XHJcbiAgICBmb3IgKGxldCBoZWFkZXIgb2YgdGhpcy5xdWVyeU9wdHMuaGVhZGVycykge1xyXG4gICAgICBpZiAoY3VzS2V5ID09IGhlYWRlci5rZXkpIHtcclxuICAgICAgICB0eXBlID0gaGVhZGVyW3R5cGVLZXkgfHwgJ3R5cGUnXTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHR5cGU7XHJcbiAgfVxyXG5cclxuICBzZXREZWZhdWx0UGFyYW1zKHBhcmFtczogYW55LCByZXNldDogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIHRoaXMuZGVmYXVsdFBhcmFtcyA9IHBhcmFtcztcclxuICAgIHRoaXMucXVlcnkocmVzZXQpO1xyXG4gIH1cclxuXHJcbiAgZ2V0U29ydEluZm8oKTogc3RyaW5nIHtcclxuICAgIGxldCBvcmRlcmJ5OiBhbnkgPSBbXTtcclxuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuc29ydE1hcCkge1xyXG4gICAgICBpZiAodGhpcy5zb3J0TWFwW2tleV0gPT0gJ2FzY2VuZCcpIHtcclxuICAgICAgICBvcmRlcmJ5LnB1c2goa2V5ICsgXCJ8XCIgKyBcImFzY1wiKVxyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc29ydE1hcFtrZXldID09ICdkZXNjZW5kJykge1xyXG4gICAgICAgIG9yZGVyYnkucHVzaChrZXkgKyBcInxcIiArIFwiZGVzY1wiKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgb3JkZXIgPSBcIlwiO1xyXG4gICAgaWYgKG9yZGVyYnkubGVuZ3RoIDwgMSAmJiB0aGlzLnF1ZXJ5T3B0cy5zb3J0KSB7XHJcbiAgICAgIG9yZGVyID0gdGhpcy5xdWVyeU9wdHMuc29ydFxyXG4gICAgfSBlbHNlXHJcbiAgICAgIG9yZGVyID0gb3JkZXJieS5qb2luKFwiLFwiKTtcclxuICAgIHJldHVybiBvcmRlcjtcclxuICB9XHJcblxyXG4gIHF1ZXJ5KHJlc2V0OiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGxldCBwYXJhbXMgPSB0aGlzLmdldFF1ZXJ5UGFyYW1zKHJlc2V0KTtcclxuICAgIGlmICh0aGlzLnF1ZXJ5T3B0cy51cmwpIHtcclxuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMuaHR0cFNlcnZpY2UucG9zdCh0aGlzLnF1ZXJ5T3B0cy51cmwsIHBhcmFtcywgVG9vbHNVdGlsLmdldEh0dHBPcHRpb25zKCkpLnN1YnNjcmliZShcclxuICAgICAgICByZXN1bHQgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PSAyMDApIHtcclxuICAgICAgICAgICAgbGV0IGFjdGlvbjogYW55ID0ge307XHJcbiAgICAgICAgICAgIGFjdGlvbltcInJlc3VsdFwiXSA9IHJlc3VsdDtcclxuICAgICAgICAgICAgYWN0aW9uW1wicGFyYW1zXCJdID0gcGFyYW1zO1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXJ5QmFjay5lbWl0KGFjdGlvbik7XHJcbiAgICAgICAgICAgIHRoaXMudG90YWwgPSByZXN1bHQ/LnBhZ2U/LnRvdGFsUmVzdWx0O1xyXG4gICAgICAgICAgICB0aGlzLnRhYmxlRGF0YXMgPSByZXN1bHQuZGF0YTtcclxuICAgICAgICAgICAgdGhpcy5nZXRSb3dTcGFuKCk7XHJcbiAgICAgICAgICAgIHRoaXMubWFwT2ZDaGVja2VkSWQgPSB7fTtcclxuICAgICAgICAgICAgdGhpcy5jdXJDaGVja2VkID0gLTE7XHJcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFN0YXR1cygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnF1ZXJ5QmFjay5lbWl0KHtuYW1lOiAnJywgY29kZTogJ3F1ZXJ5JywgZGF0YTogcGFyYW1zfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnRleHRNZW51KCRldmVudDogYW55LCBtZW51OiBOekRyb3Bkb3duTWVudUNvbXBvbmVudCkge1xyXG4gICAgY29uc29sZS5sb2coJGV2ZW50KVxyXG4gICAgdGhpcy5uekNvbnRleHRNZW51U2VydmljZS5jcmVhdGUoJGV2ZW50LCBtZW51KTtcclxuICB9XHJcblxyXG4gIGxvZyh2YWx1ZTogc3RyaW5nW10pOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKHZhbHVlKTtcclxuICAgIGZvciAobGV0IHRhYmxlIG9mIHRoaXMucXVlcnlPcHRzLnRhYmxlcykge1xyXG4gICAgICBsZXQgZmxhZyA9IGZhbHNlO1xyXG4gICAgICBmb3IgKGxldCBpdGVtIG9mIHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKGl0ZW0gPT0gdGFibGUua2V5KSB7XHJcbiAgICAgICAgICB0YWJsZS5pc1Nob3cgPSB0cnVlO1xyXG4gICAgICAgICAgZmxhZyA9IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFmbGFnKVxyXG4gICAgICAgIHRhYmxlLmlzU2hvdyA9IGZhbHNlO1xyXG5cclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKHRoaXMucXVlcnlPcHRzLnRhYmxlcyk7XHJcbiAgfVxyXG5cclxuICBjaGVja1Nob3dUZChpdGVtOiBUYWJsZSwgaW5kZXg6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFpdGVtLmlzU2hvdykge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoaXRlbS5pc1Jvd1NwYW4pIHtcclxuICAgICAgLy8g5ZCI5bm26KGMLOi/lOWbnuWAvOS4juS4iuS4gOihjOebuOWQjOWImemakOiXj+i/meS4gOihjDtcclxuICAgICAgaWYgKGluZGV4ID09IDApIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBrZXkgPSBpdGVtLmtleSA/IGl0ZW0ua2V5IDogXCJcIjtcclxuICAgICAgY29uc3QgY3VyID0gdGhpcy50YWJsZURhdGFzW2luZGV4XVtrZXldO1xyXG4gICAgICBjb25zdCBwcmUgPSB0aGlzLnRhYmxlRGF0YXNbaW5kZXggLSAxXVtrZXldO1xyXG5cclxuICAgICAgcmV0dXJuICEoY3VyID09IHByZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXRlbS5pc1Nob3c7XHJcbiAgfVxyXG5cclxuICBjaGVja1Jvd1NwYW4oaXRlbTogVGFibGUsIGRhdGE6IGFueSkge1xyXG4gICAgaWYgKGl0ZW0uaXNSb3dTcGFuKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnJvd1NwYW5NYXBbaXRlbS5rZXkgPyBpdGVtLmtleSA6IFwiXCJdW2RhdGFbaXRlbS5rZXkgPyBpdGVtLmtleSA6IFwiXCJdXS5udW1cclxuICAgIH1cclxuICAgIHJldHVybiAxO1xyXG4gIH1cclxuXHJcbiAgZ2V0Um93U3BhbigpIHtcclxuICAgIGxldCBpc1Jvd1NwYW4gPSBmYWxzZTtcclxuICAgIHRoaXMucXVlcnlPcHRzLnRhYmxlcy5mb3JFYWNoKFxyXG4gICAgICAoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0uaXNSb3dTcGFuKSB7XHJcbiAgICAgICAgICBpc1Jvd1NwYW4gPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5yb3dTcGFuTWFwW2l0ZW0ua2V5XSA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIGlmICghaXNSb3dTcGFuKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5yb3dTcGFuTWFwKTtcclxuICAgIHRoaXMudGFibGVEYXRhcy5mb3JFYWNoKFxyXG4gICAgICAoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAga2V5cy5mb3JFYWNoKFxyXG4gICAgICAgICAga2V5ID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpdGVtW2tleV07XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5yb3dTcGFuTWFwW2tleV1bdmFsdWVdKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yb3dTcGFuTWFwW2tleV1bdmFsdWVdID0ge1xyXG4gICAgICAgICAgICAgICAgbnVtOiAxXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnJvd1NwYW5NYXBba2V5XVt2YWx1ZV0ubnVtICs9IDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICApXHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBkcm9wKGV2ZW50OiBDZGtEcmFnRHJvcDxzdHJpbmdbXT4pOiB2b2lkIHtcclxuICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLnRhYmxlRGF0YXMsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XHJcbiAgICBsZXQgYWN0aW9uOiBUYWJsZUFjdGlvbiA9IHtcclxuICAgICAgbmFtZTogJ2RyYWcnLFxyXG4gICAgICBjb2RlOiAnZHJhZycsXHJcbiAgICAgIHR5cGU6IFwicm93c1wiXHJcbiAgICB9O1xyXG4gICAgYWN0aW9uLmRhdGFzID0gdGhpcy50YWJsZURhdGFzO1xyXG4gICAgaWYgKHRoaXMudGFibGVEYXRhcyAmJiB0aGlzLnRhYmxlRGF0YXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBhY3Rpb24uZmlyc3REYXRhID0gdGhpcy50YWJsZURhdGFzWzBdO1xyXG4gICAgfVxyXG4gICAgYWN0aW9uLm51bWJlck9mQ2hlY2tlZCA9IDE7XHJcbiAgICB0aGlzLnRhYmxlQWN0aW9uLmVtaXQoYWN0aW9uKTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxmb3JtIG56LWZvcm0gW2Zvcm1Hcm91cF09XCJhdHJGb3JtXCIgY2xhc3M9XCJhbnQtYWR2YW5jZWQtc2VhcmNoLWZvcm1cIlxyXG4gICAgICAqbmdJZj1cInF1ZXJ5T3B0cy5oZWFkZXJzLmxlbmd0aCA+MCB8fCBxdWVyeU9wdHMuYWN0aW9ucy5sZW5ndGggPjBcIj5cclxuICA8ZGl2IG56LXJvdyBbbnpHdXR0ZXJdPVwiMjRcIj5cclxuICAgIDxkaXYgbnotY29sIFtoaWRkZW5dPVwiIWhlYWRlci5pc1Nob3cgfHwgIWlzQ29sbGFwc2VcIiAqbmdGb3I9XCJsZXQgaGVhZGVyIG9mIHF1ZXJ5T3B0cy5oZWFkZXJzXCJcclxuICAgICAgICAgW256U3Bhbl09XCJoZWFkZXIuc3BhblwiPlxyXG4gICAgICA8YXBwLXRhYmxlLWZvcm0taXRlbVxyXG4gICAgICAgIFtoZWFkZXJdPVwiaGVhZGVyXCJcclxuICAgICAgICBbbmdNb2RlbF09XCJoZWFkZXIuZGVmYXVsdFZhbFwiXHJcbiAgICAgICAgW2RpY3RMaXN0XT1cImRpY3RzW2hlYWRlci5kaWN0Q29kZV1cIlxyXG4gICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiaGVhZGVyLmtleVwiXHJcbiAgICAgICAgKGhlYWRlckFjdGlvbik9XCJoZWFkZXJBY3Rpb24uZW1pdCgkZXZlbnQpXCI+PC9hcHAtdGFibGUtZm9ybS1pdGVtPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBuei1yb3cgbnpUeXBlPVwiZmxleFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImFjdGlvbi1hcmVhXCIgbnotY29sIFtuelNwYW5dPVwiMTZcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIHF1ZXJ5T3B0cy5hY3Rpb25zXCI+XHJcbiAgICAgICAgPGF0ci1sb2NhbC11cGxvYWQgKm5nSWY9XCJhY3Rpb24uZ1R5cGUgPT0gJ3VwbG9hZCdcIiBbY29kZV09XCJhY3Rpb24uY29kZVwiIFt1cmxdPVwiYWN0aW9uLnVybFwiIFtuYW1lXT1cImFjdGlvbi5uYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbd2l0aG91dFJvbGVdPVwiYWN0aW9uLndpdGhvdXRSb2xlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XCI+PC9hdHItbG9jYWwtdXBsb2FkPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhYWN0aW9uLmdUeXBlXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIG56LWJ1dHRvbiBbbnpUeXBlXT1cIidwcmltYXJ5J1wiIG56U2l6ZT1cInNtYWxsXCIgKGNsaWNrKT1cImRvQWN0aW9uKGFjdGlvbi5jb2RlKVwiXHJcbiAgICAgICAgICAgICAgICAgICphdHJSb2xlPVwiYWN0aW9uLndpdGhvdXRSb2xlID8gbnVsbDphY3Rpb24uY29kZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0VuYWJsZShhY3Rpb24ub3BlcmF0b3IpXCI+e3thY3Rpb24ubmFtZX19PC9idXR0b24+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IG56LWNvbCBbbnpTcGFuXT1cIjhcIiBjbGFzcz1cInNlYXJjaC1hcmVhXCIgKm5nSWY9XCJxdWVyeU9wdHMuaGVhZGVycy5sZW5ndGggPjAgJiYgIXF1ZXJ5T3B0cy5pc0hpZGVRdWVyeVwiPlxyXG4gICAgICA8YnV0dG9uIG56LWJ1dHRvbiBuelNpemU9XCJzbWFsbFwiIFtuelR5cGVdPVwiJ3ByaW1hcnknXCIgKGNsaWNrKT1cInF1ZXJ5KHRydWUpXCI+5p+l6K+iPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gbnotYnV0dG9uIG56U2l6ZT1cInNtYWxsXCIgKGNsaWNrKT1cInJlc2V0Rm9ybSgpXCI+6YeN572uPC9idXR0b24+XHJcbiAgICAgIDxhIGNsYXNzPVwiY29sbGFwc2VcIiAoY2xpY2spPVwidG9nZ2xlQ29sbGFwc2UoKVwiICpuZ0lmPVwicXVlcnlPcHRzLmhlYWRlcnMubGVuZ3RoID4gMCBcIj5cclxuICAgICAgIHt7aXNDb2xsYXBzZSA/ICfmlLbotbcnOiflsZXlvIAnfX1cclxuICAgICAgICA8aSBuei1pY29uIFtuelR5cGVdPVwiaXNDb2xsYXBzZSA/ICd1cCcgOiAnZG93bidcIj48L2k+XHJcbiAgICAgIDwvYT5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgKm5nSWY9XCJ0aXRsZVwiIGNsYXNzPVwidGl0bGVcIj57e3RpdGxlfX08L2Rpdj5cclxuPC9mb3JtPlxyXG48ZGl2IGNsYXNzPVwic2VhcmNoLXJlc3VsdC1saXN0XCIgI3RhYmxlQ29udGVudCBbc3BpbkxvYWRpbmddPVwibG9hZGluZ1wiIEhxU3Bpbj5cclxuICA8bnotdGFibGUgKm5nSWY9XCJpc0FsbExvYWQgJiYgIWlzSGlkZVRhYmxlXCIgI2Jhc2ljVGFibGUgY2xhc3M9XCJtYWluLXRhYmxlXCJcclxuICAgICAgICAgICAgW256U2Nyb2xsXT1cInNjcm9sbFNpemVcIlxyXG4gICAgICAgICAgICBuelNpemU9XCJtaWRkbGVcIlxyXG4gICAgICAgICAgICBuekJvcmRlcmVkXHJcbiAgICAgICAgICAgIFtuelNob3dQYWdpbmF0aW9uXT1cInNob3dQYWdpbmF0aW9uXCJcclxuICAgICAgICAgICAgbnpTaG93U2l6ZUNoYW5nZXJcclxuICAgICAgICAgICAgW256RnJvbnRQYWdpbmF0aW9uXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgW256TG9hZGluZ109XCJsb2FkaW5nXCJcclxuICAgICAgICAgICAgW256VG90YWxdPVwidG90YWxcIlxyXG4gICAgICAgICAgICBbKG56UGFnZUluZGV4KV09XCJwYWdlSW5kZXhcIlxyXG4gICAgICAgICAgICBbKG56UGFnZVNpemUpXT1cInBhZ2VTaXplXCJcclxuICAgICAgICAgICAgW256RGF0YV09XCJ0YWJsZURhdGFzXCJcclxuICAgICAgICAgICAgKG56UGFnZUluZGV4Q2hhbmdlKT1cInF1ZXJ5KClcIlxyXG4gICAgICAgICAgICAobnpQYWdlU2l6ZUNoYW5nZSk9XCJxdWVyeSh0cnVlKVwiXHJcbiAgICAgICAgICAgIFtuelNob3dUb3RhbF09XCJ0b3RhbFRlbXBsYXRlXCJcclxuICA+XHJcbiAgICA8dGhlYWQ+XHJcbiAgICA8dHIgKGNvbnRleHRtZW51KT1cImNvbnRleHRNZW51KCRldmVudCxtZW51KVwiIGNsYXNzPVwiaGVhZGVyLXRyXCI+XHJcblxyXG4gICAgICA8dGggKm5nSWY9XCJxdWVyeU9wdHMuY2hlY2tCb3g/LmlzU2hvd0NoZWNrYm94XCJcclxuICAgICAgICAgIFtuekxlZnRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICBjbGFzcz1cImxlZnQtemluZGV4LWhlYWRlclwiXHJcbiAgICAgICAgICBuelNob3dDaGVja2JveFxyXG4gICAgICAgICAgc3R5bGU9XCJ6LWluZGV4OiA5MCFpbXBvcnRhbnQ7XCJcclxuICAgICAgICAgIG56V2lkdGg9XCIzMHB4XCJcclxuICAgICAgICAgIG56QWxpZ249XCJjZW50ZXJcIlxyXG4gICAgICAgICAgWyhuekNoZWNrZWQpXT1cImlzQWxsRGlzcGxheURhdGFDaGVja2VkXCJcclxuICAgICAgICAgIFtuekluZGV0ZXJtaW5hdGVdPVwiaXNJbmRldGVybWluYXRlXCJcclxuICAgICAgICAgIChuekNoZWNrZWRDaGFuZ2UpPVwiY2hlY2tBbGwoJGV2ZW50KVwiXHJcbiAgICAgID48L3RoPlxyXG4gICAgICA8dGggW256TGVmdF09XCJ0cnVlXCIgY2xhc3M9XCJsZWZ0LXppbmRleC1oZWFkZXJcIiAqbmdJZj1cInF1ZXJ5T3B0cy5pc0luZGV4XCIgbnpXaWR0aD1cIjMwcHhcIiBuekFsaWduPVwiY2VudGVyXCI+IzwvdGg+XHJcbiAgICAgIDx0aCBbbnpMZWZ0XT1cInRydWVcIiBjbGFzcz1cImxlZnQtemluZGV4LWhlYWRlclwiICpuZ0lmPVwicXVlcnlPcHRzLmNoZWNrQm94Py5pc1JhZGlvXCIgbnpXaWR0aD1cIjMwcHhcIlxyXG4gICAgICAgICAgbnpBbGlnbj1cImNlbnRlclwiPiNcclxuICAgICAgPC90aD5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBxdWVyeU9wdHMudGFibGVzOyBcIj5cclxuICAgICAgICA8dGggKm5nSWY9XCJpdGVtLmlzU2hvdyBcIlxyXG4gICAgICAgICAgICBbbnpTaG93U29ydF09aXRlbS5zb3J0YWJsZVxyXG4gICAgICAgICAgICBuei1yZXNpemFibGVcclxuICAgICAgICAgICAgbnpQcmV2aWV3XHJcbiAgICAgICAgICAgIG56Qm91bmRzPVwid2luZG93XCJcclxuICAgICAgICAgICAgWyhuelNvcnRPcmRlcildPVwic29ydE1hcFtpdGVtLnNvcnRLZXldXCJcclxuICAgICAgICAgICAgKG56U29ydE9yZGVyQ2hhbmdlKT1cInNvcnQoaXRlbS5zb3J0S2V5LCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgW256V2lkdGhdPVwiaXRlbS53aWR0aFwiXHJcbiAgICAgICAgICAgIFtuek1heFdpZHRoXT1cIjI1NlwiXHJcbiAgICAgICAgICAgIFtuek1pbldpZHRoXT1cIjYwXCJcclxuICAgICAgICAgICAgW256UmlnaHRdPVwiaXRlbS5pc1JpZ2h0ID8gdHJ1ZSA6IGZhbHNlXCJcclxuICAgICAgICAgICAgW256TGVmdF09XCJpdGVtLmlzTGVmdCA/IHRydWUgOiBmYWxzZVwiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnbGVmdC16aW5kZXgtaGVhZGVyJzppdGVtLmlzTGVmdCA/IHRydWUgOiBmYWxzZX1cIlxyXG4gICAgICAgICAgICAobnpSZXNpemVFbmQpPVwib25SZXNpemUoJGV2ZW50LCBpdGVtLm5hbWUpXCI+XHJcbiAgICAgICAgICB7e2l0ZW0ubmFtZX19PCEtLSB7d2lkdGh9OiB7IHdpZHRoOiBudW1iZXIgfSwgY29sOiBzdHJpbmctLT5cclxuICAgICAgICAgIDxuei1yZXNpemUtaGFuZGxlIG56RGlyZWN0aW9uPVwicmlnaHRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc2l6ZS10cmlnZ2VyXCI+PC9kaXY+XHJcbiAgICAgICAgICA8L256LXJlc2l6ZS1oYW5kbGU+XHJcbiAgICAgICAgPC90aD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L3RyPlxyXG4gICAgPC90aGVhZD5cclxuXHJcblxyXG4gICAgPHRib2R5ICpuZ0lmPVwiIWFsbG93RHJhZ1wiPlxyXG5cclxuICAgIDx0ciAqbmdGb3I9XCJsZXQgZGF0YSBvZiBiYXNpY1RhYmxlLmRhdGE7aW5kZXggYXMgaVwiIGNsYXNzPVwidC10clwiIChjbGljayk9XCJzZWxlY3RSb3coZGF0YSxpKVwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwieydjb2xvcic6aXNTaG93Q29sb3IoZGF0YSl9XCJcclxuICAgICAgICBbbmdDbGFzc109XCJ7J3NlbGVjdGVkJzogaSA9PSBjdXJDaGVja2VkfVwiIChkYmxjbGljayk9XCJkYmNsaWNrRGF0YShkYXRhLGkpXCI+XHJcblxyXG4gICAgICA8dGQgW256TGVmdF09XCJ0cnVlXCJcclxuICAgICAgICAgIGNsYXNzPVwibGVmdC16aW5kZXhcIlxyXG4gICAgICAgICAgKm5nSWY9XCJxdWVyeU9wdHMuY2hlY2tCb3g/LmlzU2hvd0NoZWNrYm94XCJcclxuICAgICAgICAgIG56U2hvd0NoZWNrYm94XHJcbiAgICAgICAgICBbKG56Q2hlY2tlZCldPVwibWFwT2ZDaGVja2VkSWRbZGF0YS5pZF1cIlxyXG4gICAgICAgICAgKG56Q2hlY2tlZENoYW5nZSk9XCJyZWZyZXNoU3RhdHVzKClcIlxyXG4gICAgICA+PC90ZD5cclxuICAgICAgPHRkIFtuekxlZnRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICBjbGFzcz1cImxlZnQtemluZGV4XCJcclxuICAgICAgICAgICpuZ0lmPVwicXVlcnlPcHRzLmNoZWNrQm94Py5pc1JhZGlvXCIgbnpTaG93Q2hlY2tib3ggKG56Q2hlY2tlZENoYW5nZSk9XCJzZWxlY3RSb3coZGF0YSxpKVwiXHJcbiAgICAgICAgICBbKG56Q2hlY2tlZCldPVwibWFwT2ZDaGVja2VkSWRbZGF0YS5pZF1cIj48L3RkPlxyXG4gICAgICA8dGQgW256TGVmdF09XCJ0cnVlXCJcclxuICAgICAgICAgICpuZ0lmPVwicXVlcnlPcHRzLmlzSW5kZXhcIiBuekFsaWduPVwiY2VudGVyXCIgc3R5bGU9XCJwYWRkaW5nOjEycHggMDtcIiBuekJyZWFrV29yZD57e2kgKyAxfX08L3RkPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHF1ZXJ5T3B0cy50YWJsZXM7XCI+XHJcblxyXG4gICAgICAgIDx0ZCBbbnpMZWZ0XT1cIml0ZW0uaXNMZWZ0ID8gdHJ1ZSA6IGZhbHNlXCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieydsZWZ0LXppbmRleCc6aXRlbS5pc0xlZnQgPyB0cnVlIDogZmFsc2V9XCJcclxuICAgICAgICAgICAgW256UmlnaHRdPVwiaXRlbS5pc1JpZ2h0ID8gdHJ1ZSA6IGZhbHNlXCJcclxuICAgICAgICAgICAgbnpCcmVha1dvcmRcclxuICAgICAgICAgICAgW3Jvd1NwYW5dPVwiY2hlY2tSb3dTcGFuKGl0ZW0sZGF0YSlcIlxyXG4gICAgICAgICAgICAqbmdJZj1cImNoZWNrU2hvd1RkKGl0ZW0saSkgXCI+XHJcbiAgICAgICAgICA8YXBwLXRhYmxlLXRkIFtkYXRhXT1cImRhdGFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2ldPVwiaVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChkb0FjdGlvbkJ5Um93QWN0aW9uKT1cImRvQWN0aW9uQnlSb3cyKCRldmVudClcIlxyXG4gICAgICAgICAgPjwvYXBwLXRhYmxlLXRkPlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC90cj5cclxuXHJcbiAgICA8L3Rib2R5PlxyXG4gICAgPHRib2R5ICpuZ0lmPVwiYWxsb3dEcmFnXCIgY2RrRHJvcExpc3QgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wKCRldmVudClcIj5cclxuICAgIDx0ciBjZGtEcmFnICpuZ0Zvcj1cImxldCBkYXRhIG9mIGJhc2ljVGFibGUuZGF0YTtpbmRleCBhcyBpXCIgY2xhc3M9XCJ0LXRyXCIgKGNsaWNrKT1cInNlbGVjdFJvdyhkYXRhLGkpXCJcclxuICAgICAgICBbbmdDbGFzc109XCJ7J3NlbGVjdGVkJzogaSA9PSBjdXJDaGVja2VkfVwiPlxyXG4gICAgICA8dGQgW256TGVmdF09XCJ0cnVlXCJcclxuICAgICAgICAgIGNsYXNzPVwibGVmdC16aW5kZXhcIlxyXG4gICAgICAgICAgKm5nSWY9XCJxdWVyeU9wdHMuY2hlY2tCb3g/LmlzU2hvd0NoZWNrYm94XCJcclxuICAgICAgICAgIG56U2hvd0NoZWNrYm94XHJcbiAgICAgICAgICBbKG56Q2hlY2tlZCldPVwibWFwT2ZDaGVja2VkSWRbZGF0YS5pZF1cIlxyXG4gICAgICAgICAgKG56Q2hlY2tlZENoYW5nZSk9XCJyZWZyZXNoU3RhdHVzKClcIlxyXG4gICAgICA+PC90ZD5cclxuICAgICAgPCEtLVxyXG4gICAgICAgICAgICAgICAgPHRkIFtuekxlZnRdPVwiaXRlbS5pc0xlZnQgPyB0cnVlIDogZmFsc2VcIiBbbmdDbGFzc109XCJ7J2xlZnQtemluZGV4JzppdGVtLmlzTGVmdCA/IHRydWUgOiBmYWxzZX1cIiAgIFtuelJpZ2h0XT1cIml0ZW0uaXNSaWdodCA/IHRydWUgOiBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVyeU9wdHMuaXNTaG93Q2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgIG56U2hvd0NoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAgICAgWyhuekNoZWNrZWQpXT1cIm1hcE9mQ2hlY2tlZElkW2RhdGEuaWRdXCJcclxuICAgICAgICAgICAgICAgICAgICAobnpDaGVja2VkQ2hhbmdlKT1cInJlZnJlc2hTdGF0dXMoKVwiXHJcbiAgICAgICAgICAgICAgICA+PC90ZD5cclxuICAgICAgLS0+XHJcbiAgICAgIDx0ZCBbbnpMZWZ0XT1cInRydWVcIlxyXG4gICAgICAgICAgY2xhc3M9XCJsZWZ0LXppbmRleFwiXHJcbiAgICAgICAgICAqbmdJZj1cInF1ZXJ5T3B0cy5jaGVja0JveD8uaXNSYWRpb1wiIG56U2hvd0NoZWNrYm94IChuekNoZWNrZWRDaGFuZ2UpPVwic2VsZWN0Um93KGRhdGEsaSlcIlxyXG4gICAgICAgICAgWyhuekNoZWNrZWQpXT1cIm1hcE9mQ2hlY2tlZElkW2RhdGEuaWRdXCI+PC90ZD5cclxuICAgICAgPHRkIFtuekxlZnRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICBjbGFzcz1cImxlZnQtemluZGV4XCJcclxuICAgICAgICAgICpuZ0lmPVwicXVlcnlPcHRzLmlzSW5kZXhcIiBuekFsaWduPVwiY2VudGVyXCIgc3R5bGU9XCJwYWRkaW5nOjEycHggMDtcIiBuekJyZWFrV29yZD57e2kgKyAxfX08L3RkPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBxdWVyeU9wdHMudGFibGVzO1wiPlxyXG5cclxuICAgICAgICA8dGQgW256TGVmdF09XCJpdGVtLmlzTGVmdCA/IHRydWUgOiBmYWxzZVwiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnbGVmdC16aW5kZXgnOml0ZW0uaXNMZWZ0ID8gdHJ1ZSA6IGZhbHNlfVwiXHJcbiAgICAgICAgICAgIFtuelJpZ2h0XT1cIml0ZW0uaXNSaWdodCA/IHRydWUgOiBmYWxzZVwiXHJcbiAgICAgICAgICAgIG56QnJlYWtXb3JkXHJcbiAgICAgICAgICAgIFtyb3dTcGFuXT1cImNoZWNrUm93U3BhbihpdGVtLGRhdGEpXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJjaGVja1Nob3dUZChpdGVtLGkpIFwiPlxyXG4gICAgICAgICAgPGFwcC10YWJsZS10ZCBbZGF0YV09XCJkYXRhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpXT1cImlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoZG9BY3Rpb25CeVJvd0FjdGlvbik9XCJkb0FjdGlvbkJ5Um93MigkZXZlbnQpXCJcclxuICAgICAgICAgID48L2FwcC10YWJsZS10ZD5cclxuICAgICAgICA8L3RkPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvdHI+XHJcbiAgICA8L3Rib2R5PlxyXG5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgI3RvdGFsVGVtcGxhdGUgbGV0LXRvdGFsPuWFsSB7eyB0b3RhbCB9fSDmnaHorrDlvZU8L25nLXRlbXBsYXRlPlxyXG4gIDwvbnotdGFibGU+XHJcbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3Nsb3QxXVwiPjwvbmctY29udGVudD5cclxuICA8bnotZHJvcGRvd24tbWVudSAjbWVudT1cIm56RHJvcGRvd25NZW51XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwidGFiZWwtY29sdW5tblwiPlxyXG4gICAgICA8bnotY2hlY2tib3gtd3JhcHBlciBzdHlsZT1cIndpZHRoOiAxMDAlO21hcmdpbi10b3A6IDMwcHg7XCIgKG56T25DaGFuZ2UpPVwibG9nKCRldmVudClcIj5cclxuICAgICAgICA8ZGl2IG56LXJvdz5cclxuICAgICAgICAgIDxkaXYgbnotY29sIG56U3Bhbj1cIjI0XCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcXVlcnlPcHRzLnRhYmxlc1wiPlxyXG4gICAgICAgICAgICA8bGFiZWwgbnotY2hlY2tib3ggbnpWYWx1ZT1cInt7aXRlbS5rZXl9fVwiIFtuZ01vZGVsXT1cIml0ZW0uaXNTaG93XCI+e3tpdGVtLm5hbWV9fTwvbGFiZWw+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uei1jaGVja2JveC13cmFwcGVyPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGFiZWwtY29sdW5tbi1oZWFkZXJcIj7or7fpgInmi6nliJfooajmmL7npLrlhoXlrrk8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbnotZHJvcGRvd24tbWVudT5cclxuPC9kaXY+XHJcblxyXG4iXX0=
719
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL3NoYXJlZC90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvc2hhcmVkL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBR1QsS0FBSyxFQUVMLFNBQVMsRUFFVCxNQUFNLEVBQ04sWUFBWSxFQUNaLFNBQVMsRUFDVCxNQUFNLEVBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF5QixXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFjLGVBQWUsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3BFLE9BQU8sRUFBQyxvQkFBb0IsRUFBMEIsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRixPQUFPLEVBQUMsZ0JBQWdCLEVBQXdELE1BQU0sK0JBQStCLENBQUM7QUFDdEgsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLDBDQUEwQyxDQUFDO0FBQ3JFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUNoRSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sK0JBQStCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBT3hELE1BQU0sT0FBTyxpQkFBaUI7SUFvQzVCLFlBQW9CLEVBQWUsRUFBVSxRQUFrQixFQUE2QixNQUFjLEVBQVUsRUFBcUI7UUFBckgsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUFVLGFBQVEsR0FBUixRQUFRLENBQVU7UUFBNkIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFVLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBbEN6SSxlQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLFVBQUssR0FBUSxFQUFFLENBQUM7UUFDaEIsY0FBUyxHQUFHLENBQUMsQ0FBQztRQUVkLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFDZCxVQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ0QsWUFBTyxHQUFHLElBQUksQ0FBQztRQUNmLGNBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQSxRQUFRO1FBQ25DLGVBQVUsR0FBUSxFQUFFLENBQUM7UUFDckIsZUFBVSxHQUFRLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUE7UUFDaEMsZUFBZTtRQUNmLDRCQUF1QixHQUFZLEtBQUssQ0FBQTtRQUN4QyxvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUN4QixvQkFBZSxHQUFHLENBQUMsQ0FBQztRQUNwQixtQkFBYyxHQUErQixFQUFFLENBQUM7UUFDaEQsZUFBVSxHQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLGdCQUFXLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO1FBQ3ZDLGtCQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ1YsZ0JBQVcsR0FBRyxLQUFLLENBQUE7UUFDNUIsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixZQUFPLEdBQTJCLEVBQUUsQ0FBQztRQUNyQyxlQUFVLEdBQVEsRUFBRSxDQUFDLENBQUEsb0JBQW9CO1FBQ3pDLHFCQUFnQixHQUFRLEVBQUUsQ0FBQTtRQUdqQixtQkFBYyxHQUFHLElBQUksQ0FBQztRQUN0QixVQUFLLEdBQVcsRUFBRSxDQUFDO1FBRWxCLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQWUsQ0FBQztRQUM5QyxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQWUsQ0FBQztRQUM1QyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFlLENBQUM7SUFLekQsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFTO1FBQ25CLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2hILE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1NBQ25DO1FBQ0QsT0FBTyxFQUFFLENBQUE7SUFDWCxDQUFDO0lBRUQsV0FBVyxDQUFDLElBQVMsRUFBRSxLQUFhO1FBQ2xDLElBQUksTUFBTSxHQUFnQjtZQUN4QixJQUFJLEVBQUUsYUFBYTtZQUNuQixJQUFJLEVBQUUsYUFBYTtZQUNuQixJQUFJLEVBQUUsS0FBSztTQUNaLENBQUM7UUFDRixNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNuQixNQUFNLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsY0FBYyxDQUFDLENBQU07UUFDbkIsSUFBSSxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUMsR0FBRyxDQUFDLENBQUE7UUFDOUMsSUFBSSxLQUFLLEVBQUU7WUFDVCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsSUFBSSxLQUFLLENBQUMsZUFBZSxFQUFFO2dCQUN6QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUE7YUFDeEI7U0FDRjtRQUNELElBQUksTUFBTSxHQUFnQjtZQUN4QixJQUFJLEVBQUUsSUFBSTtZQUNWLElBQUksRUFBRSxJQUFJO1lBQ1YsSUFBSSxFQUFFLEtBQUs7U0FDWixDQUFDO1FBQ0YsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDbkIsTUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDeEIsTUFBTSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDL0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQVksV0FBVztRQUNyQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxJQUFZLG9CQUFvQjtRQUM5QixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELGdCQUFnQixDQUFDLFFBQWlCO1FBQ2hDLElBQUksQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDO0lBQzFCLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBVSxFQUFFLEdBQVc7UUFDOUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEtBQUssSUFBSSxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEgsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1YsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRTtZQUV0QyxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDN0IsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3ZDO1NBQ0Y7UUFDRCxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDVixDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNYLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7U0FDOUI7SUFDSCxDQUFDO0lBRUQsUUFBUSxDQUFDLFFBQWdCO1FBQ3ZCLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsUUFBUSxJQUFJLFFBQVEsSUFBSSxTQUFTLElBQUksUUFBUSxJQUFJLEVBQUU7WUFDdEQsUUFBUSxHQUFHLEtBQUssQ0FBQzthQUNkO1lBQ0gsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM3QixJQUFJLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNqQixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hCLElBQUksQ0FBQyxHQUFHLEVBQUU7b0JBQ1IsUUFBUSxHQUFHLEtBQUssQ0FBQztpQkFDbEI7cUJBQU07b0JBQ0wsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtpQkFDN0Q7YUFDRjs7Z0JBQ0MsUUFBUSxHQUFHLEtBQUssQ0FBQTtTQUNuQjtRQUVELE9BQU8sUUFBUSxDQUFBO0lBQ2pCLENBQUM7SUFFRCxTQUFTLENBQUMsSUFBUyxFQUFFLFFBQWdCLEVBQUUsTUFBb0I7UUFDekQsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxRQUFRLElBQUksUUFBUSxJQUFJLElBQUksSUFBSSxRQUFRLElBQUksRUFBRSxFQUFFO1lBQ25ELE1BQU0sR0FBRyxJQUFJLENBQUM7U0FDZjthQUFNLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDckMsa0JBQWtCO1lBQ2xCLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakMsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDbEIseUNBQXlDO2dCQUN6QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDbkMsTUFBTSxHQUFHLElBQUksQ0FBQTtvQkFDYixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFO3dCQUNsRCxNQUFNLEdBQUcsS0FBSyxDQUFDO3dCQUNmLE1BQU07cUJBQ1A7aUJBQ0Y7YUFDRjtTQUNGO2FBQU0sSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNyQyxpQkFBaUI7WUFDakIsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNsQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDbkMsTUFBTSxHQUFHLEtBQUssQ0FBQztvQkFDZixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRTt3QkFDakQsTUFBTSxHQUFHLElBQUksQ0FBQzt3QkFDZCxNQUFNO3FCQUNQO2lCQUNGO2FBQ0Y7U0FDRjthQUFNO1lBQ0wsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM3QixNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDekM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsZUFBZSxDQUFDLEVBQU8sRUFBRSxJQUFTO1FBQ2hDLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2pCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4QixJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNWLE1BQU0sR0FBRyxLQUFLLENBQUM7YUFDaEI7aUJBQU07Z0JBQ0wsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTthQUMzQztTQUNGOztZQUNDLE1BQU0sR0FBRyxLQUFLLENBQUE7UUFFaEIsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUFVLEVBQUUsUUFBYSxFQUFFLE1BQVc7UUFDNUMsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLFFBQVEsUUFBUSxFQUFFO1lBQ2hCLEtBQUssSUFBSTtnQkFDUCxJQUFJLEtBQUssSUFBSSxNQUFNLEVBQUU7b0JBQ25CLE9BQU8sR0FBRyxJQUFJLENBQUM7aUJBQ2hCO2dCQUNELE1BQU07WUFDUixLQUFLLElBQUk7Z0JBQ1AsSUFBSSxLQUFLLElBQUksTUFBTSxFQUFFO29CQUNuQixPQUFPLEdBQUcsSUFBSSxDQUFDO2lCQUNoQjtnQkFDRCxNQUFNO1lBQ1IsS0FBSyxVQUFVO2dCQUNiLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQ2hCLElBQUksS0FBSyxFQUFFO29CQUNULE9BQU8sR0FBRyxJQUFJLENBQUM7aUJBQ2hCO2dCQUNELE1BQU07WUFDUixLQUFLLE9BQU87Z0JBQ1YsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDaEIsSUFBSSxDQUFDLEtBQUssRUFBRTtvQkFDVixPQUFPLEdBQUcsSUFBSSxDQUFDO2lCQUNoQjtnQkFDRCxNQUFNO1lBQ1I7Z0JBQ0UsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDaEIsTUFBTTtTQUNUO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELGNBQWMsQ0FBQyxVQUFlO1FBQzVCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFRLEVBQUUsS0FBVTtRQUM5QixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQVMsRUFBRSxLQUFVLEVBQUUsRUFBRTtZQUNoRCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQzthQUNsQztRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFTO1FBQ2hCLElBQUksTUFBTSxHQUFnQjtZQUN4QixJQUFJLEVBQUUsSUFBSTtZQUNWLElBQUksRUFBRSxJQUFJO1lBQ1YsSUFBSSxFQUFFLE1BQU07U0FDYixDQUFDO1FBQ0YsSUFBSSxXQUFXLEdBQVEsRUFBRSxDQUFDO1FBQzFCLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDakQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtnQkFDcEMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQzlCLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0IsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUNELE1BQU0sQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDO1FBQzNCLElBQUksV0FBVyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3pDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ25DO1FBQ0QsTUFBTSxDQUFDLGVBQWUsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDO1FBQzVDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxhQUFhLENBQUMsSUFBUyxFQUFFLElBQVMsRUFBRSxLQUFpQjtRQUNuRCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsSUFBSSxLQUFLLENBQUMsZUFBZSxFQUFFO1lBQ3pCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQTtTQUN4QjtRQUNELElBQUksTUFBTSxHQUFnQjtZQUN4QixJQUFJLEVBQUUsSUFBSTtZQUNWLElBQUksRUFBRSxJQUFJO1lBQ1YsSUFBSSxFQUFFLEtBQUs7U0FDWixDQUFDO1FBQ0YsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDbkIsTUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDeEIsTUFBTSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLEdBQUcsR0FBUSxFQUFFLENBQUM7UUFDbEIsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRTtZQUNsRCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3ZFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7YUFDZDtTQUNGO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsSUFBSSxXQUFXLEdBQVEsRUFBRSxDQUFBO1FBQ3pCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7WUFDcEMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQWM7UUFDckIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMvRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLFVBQVU7YUFDM0MsS0FBSyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxlQUFlO1lBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDakUsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUM7UUFDaEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDbEcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDcEIsSUFBSSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsUUFBUTtZQUNyQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7U0FDM0MsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELFNBQVMsQ0FBQyxJQUFTLEVBQUUsS0FBYTtRQUNoQywyRUFBMkU7UUFDM0UsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRTtZQUN0QyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLGNBQWMsRUFBRTtnQkFDM0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUM5RDtpQkFBTTtnQkFDTCxJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO2FBQ3JDO1NBQ0Y7UUFDRCxJQUFJLE1BQU0sR0FBZ0I7WUFDeEIsSUFBSSxFQUFFLFFBQVE7WUFDZCxJQUFJLEVBQUUsUUFBUTtZQUNkLElBQUksRUFBRSxLQUFLO1NBQ1osQ0FBQztRQUNGLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQTtRQUN4RCxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFBO1FBQzFELElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDN0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUM3QywrQkFBK0I7UUFDL0IsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRTtZQUMzQyxLQUFLLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFO2dCQUN2QyxJQUFHLEtBQUssQ0FBQyxJQUFJLElBQUksTUFBTSxFQUFDO29CQUN0QixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDbkM7Z0JBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFO29CQUNqQixLQUFLLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztvQkFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDO2lCQUNwQzs7b0JBQ0MsS0FBSyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7YUFDMUI7U0FDRjtRQUNELElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRTtZQUNsRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFBO1NBQ2xEO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFO1lBQy9CLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNkO2FBQU07WUFDTCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNyQiwyQkFBMkI7U0FDNUI7SUFDSCxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDM0IsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDakYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBUyxFQUFFLENBQU0sRUFBRSxFQUFFO2dCQUNuRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDO2dCQUMzQixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUU7b0JBQ3RDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQTtpQkFDbEQ7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLEtBQUssRUFBRTtvQkFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUE7aUJBQ3pDO2dCQUNELElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxXQUFXLEVBQUUsQ0FBQyxDQUFDO2dCQUNyRCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUNyQixRQUFRLElBQUksRUFBRTtvQkFDWixLQUFLLFFBQVE7d0JBQ1gsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQ2pDLE1BQU07b0JBQ1IsS0FBSyxZQUFZLENBQUM7b0JBQ2xCLEtBQUssVUFBVSxDQUFDO29CQUNoQixLQUFLLFdBQVc7d0JBQ2QsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFOzRCQUN4QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO3lCQUN2Qjt3QkFDRCxNQUFNO2lCQUNUO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsSUFBUztRQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQzFDLE9BQU87U0FDUjtRQUNELElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3hGLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxZQUFZLEVBQUU7Z0JBQzdCLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtvQkFDN0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO3dCQUN0QixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUN0QixLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUM5QixDQUFDLENBQUMsQ0FBQztvQkFDSCx3QkFBd0I7b0JBQ3hCLGdDQUFnQztvQkFDaEMsT0FBTyxJQUFJLENBQUE7Z0JBQ2IsQ0FBQyxDQUFDLENBQUM7YUFDSjtpQkFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksV0FBVyxFQUFFO2dCQUNuQyxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7b0JBQzdDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTt3QkFDdEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDdEIsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDOUIsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsMEJBQTBCO29CQUMxQiw0QkFBNEI7b0JBQzVCLE9BQU8sSUFBSSxDQUFDO2dCQUNkLENBQUMsQ0FBQyxDQUFDO2FBQ0o7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxlQUFlO1FBRWIsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLFlBQVksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO1lBQzlFLElBQUcsSUFBSSxDQUFDLFdBQVcsRUFBQztnQkFDbEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQzthQUN6RTtZQUNELElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztZQUNkLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRTtnQkFDM0MsS0FBSyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRTtvQkFDdkMsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUU7d0JBRS9CLEtBQUssSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztxQkFDNUM7aUJBQ0Y7YUFDRjtZQUNELElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7WUFDekQsSUFBSSxLQUFLLEdBQUcsQ0FBQztnQkFDWCxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDOztnQkFFakMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsV0FBVyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7WUFFOUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDdEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMxQixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUE7SUFHVCxDQUFDO0lBRUQsSUFBSSxDQUFDLFFBQWdCLEVBQUUsS0FBVTtRQUMvQixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztTQUNyRDtRQUNELGdFQUFnRTtRQUNoRSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFFRCxJQUFZLFdBQVc7UUFDckIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUN2QyxDQUFDO0lBRUQsWUFBWSxDQUFDLElBQVk7UUFDdkIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQzVDLE1BQU0sQ0FBQyxFQUFFO1lBQ1AsSUFBSSxNQUFNLElBQUksTUFBTSxJQUFJLElBQUk7Z0JBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUNsQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUV6QixDQUFDLEVBQ0QsS0FBSyxDQUFDLEVBQUU7WUFDTixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN4QixDQUFDLENBQ0YsQ0FBQTtJQUNILENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDbkMsMkRBQTJEO1FBQzNELHdFQUF3RTtRQUN4RSxNQUFNO0lBQ1IsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3JCLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3ZDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUM3RDtJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsS0FBVSxFQUFFLElBQVM7UUFDaEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQixJQUFJLE1BQU0sR0FBZ0I7WUFDeEIsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2hCLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRztZQUNkLElBQUksRUFBRSxJQUFJO1lBQ1YsS0FBSyxFQUFFLEtBQUs7U0FDYixDQUFDO1FBQ0YsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7SUFFaEMsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFVLEVBQUUsSUFBb0IsRUFBRSxNQUFXO1FBQ3JELE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN6QixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6QixJQUFJLE1BQU0sR0FBZ0I7WUFDeEIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUM1QyxJQUFJLEVBQUUsSUFBSTtZQUNWLEtBQUssRUFBRSxLQUFLO1NBQ2IsQ0FBQztRQUNGLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ2hDLENBQUM7SUFFRCxjQUFjLENBQUMsS0FBYztRQUMzQixJQUFJLEtBQUssRUFBRTtZQUNULElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1NBQ3BCO1FBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDNUIsSUFBSSxNQUFNLEdBQVE7WUFDaEIsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3BCLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUTtZQUNwQixJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRTtTQUN6QixDQUFDO1FBQ0YsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRTtZQUNwQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQy9GLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxXQUFXLEVBQUU7b0JBQ3pDLElBQUksS0FBSyxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUM7b0JBQzFCLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUM7b0JBQ3RCLElBQUksT0FBTyxHQUFHLHFCQUFxQixDQUFBO29CQUNuQyxJQUFJLFVBQVUsR0FBUSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQTtvQkFDMUQsSUFBSSxVQUFVLEVBQUU7d0JBQ2QsT0FBTyxHQUFHLHFCQUFxQixDQUFBO3dCQUMvQixJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUU7NEJBQ3ZCLE9BQU8sR0FBRyxhQUFhLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQzt5QkFDL0M7cUJBQ0Y7b0JBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLFVBQVUsQ0FBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQVUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN2RixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBVSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQ3RGO3FCQUFNLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxVQUFVLEVBQUU7b0JBQy9DLElBQUksS0FBSyxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUM7b0JBQzFCLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUM7b0JBQ3RCLElBQUksT0FBTyxHQUFHLHFCQUFxQixDQUFBO29CQUNuQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsVUFBVSxDQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBVSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3ZGLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFVLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDdEY7cUJBQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLE9BQU8sRUFBRTtvQkFDNUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQVUsRUFBRSxxQkFBcUIsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQ2pHO3FCQUFNLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxZQUFZLEVBQUU7b0JBQ2pELElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNwQyxJQUFJLE9BQU8sS0FBSyxJQUFJLFFBQVEsRUFBRTt3QkFDNUIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3FCQUN2Qzt5QkFBTTt3QkFDTCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7cUJBQzlDO2lCQUNGO3FCQUFNLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxVQUFVLEVBQUU7b0JBQy9DLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztpQkFDOUM7cUJBQU07b0JBQ0wsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUN2QzthQUVGO1NBQ0Y7UUFFRCxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ25ELE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDbkIsT0FBTyxNQUFNLENBQUM7SUFFaEIsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFjLEVBQUUsT0FBZ0I7UUFDM0MsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLEtBQUssSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUU7WUFDekMsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRTtnQkFDeEIsSUFBSSxHQUFHLE1BQU0sQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLENBQUM7Z0JBQ2pDLE1BQU07YUFDUDtTQUNGO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsTUFBVyxFQUFFLFFBQWlCLElBQUk7UUFDakQsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7UUFDNUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwQixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksT0FBTyxHQUFRLEVBQUUsQ0FBQztRQUN0QixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDOUIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLFFBQVEsRUFBRTtnQkFDakMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFBO2FBQ2hDO2lCQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxTQUFTLEVBQUU7Z0JBQ3pDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQTthQUNqQztTQUNGO1FBQ0QsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2YsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtZQUM3QyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUE7U0FDNUI7O1lBQ0MsS0FBSyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQWlCLEtBQUs7UUFDMUIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBRXBCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQ3JGLE1BQU0sQ0FBQyxFQUFFO2dCQUNQLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUNyQixJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxFQUFFO29CQUN4QixJQUFJLE1BQU0sR0FBUSxFQUFFLENBQUM7b0JBQ3JCLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7b0JBQzFCLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7b0JBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUM1QixJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDO29CQUN2QyxJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7b0JBQzlCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDbEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ3JCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztpQkFDdEI7WUFDSCxDQUFDLEVBQ0QsS0FBSyxDQUFDLEVBQUU7Z0JBQ04sSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDdkIsQ0FBQyxDQUNGLENBQUE7U0FDRjthQUFNO1lBQ0wsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUE7U0FDN0Q7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQVcsRUFBRSxJQUE2QjtRQUNwRCxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ25CLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxHQUFHLENBQUMsS0FBZTtRQUNqQixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25CLEtBQUssSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUU7WUFDdkMsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDO1lBQ2pCLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxFQUFFO2dCQUN0QixJQUFJLElBQUksSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFO29CQUNyQixLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztvQkFDcEIsSUFBSSxHQUFHLElBQUksQ0FBQTtpQkFDWjthQUNGO1lBQ0QsSUFBSSxDQUFDLElBQUk7Z0JBQ1AsS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7U0FFeEI7UUFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFXLEVBQUUsS0FBVTtRQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNoQixPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2xCLHVCQUF1QjtZQUN2QixJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUU7Z0JBQ2QsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUNELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNyQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3hDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRTVDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztTQUN0QjtRQUNELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRUQsWUFBWSxDQUFDLElBQVcsRUFBRSxJQUFTO1FBQ2pDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNsQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFBO1NBQ3JGO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQzNCLENBQUMsSUFBUyxFQUFFLEVBQUU7WUFDWixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ2xCLFNBQVMsR0FBRyxJQUFJLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQzthQUNoQztRQUNILENBQUMsQ0FDRixDQUFDO1FBQ0YsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNkLE9BQU87U0FDUjtRQUNELElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUNyQixDQUFDLElBQVMsRUFBRSxFQUFFO1lBQ1osSUFBSSxDQUFDLE9BQU8sQ0FDVixHQUFHLENBQUMsRUFBRTtnQkFDSixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUNoQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHO3dCQUM1QixHQUFHLEVBQUUsQ0FBQztxQkFDUCxDQUFDO2lCQUNIO3FCQUFNO29CQUNMLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztpQkFDdEM7WUFDSCxDQUFDLENBQ0YsQ0FBQTtRQUNILENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksQ0FBQyxLQUE0QjtRQUMvQixlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMxRSxJQUFJLE1BQU0sR0FBZ0I7WUFDeEIsSUFBSSxFQUFFLE1BQU07WUFDWixJQUFJLEVBQUUsTUFBTTtZQUNaLElBQUksRUFBRSxNQUFNO1NBQ2IsQ0FBQztRQUNGLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUMvQixJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2pELE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN2QztRQUNELE1BQU0sQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7OytHQXZzQlUsaUJBQWlCLHFFQW9DNkMsU0FBUzttR0FwQ3ZFLGlCQUFpQiwwYUM1QjlCLG14U0F1TUE7NEZEM0thLGlCQUFpQjtrQkFMN0IsU0FBUzsrQkFDRSxXQUFXOzswQkF3QzZDLE1BQU07MkJBQUMsU0FBUzs0RUE1QnpFLE9BQU87c0JBQWYsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQVdHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBTUcsU0FBUztzQkFBakIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFFSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFFb0MsWUFBWTtzQkFBdEQsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG4gIEluamVjdG9yLFxyXG4gIElucHV0LFxyXG4gIFZpZXdDaGlsZHJlbixcclxuICBWaWV3Q2hpbGQsXHJcbiAgRWxlbWVudFJlZixcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIExPQ0FMRV9JRCxcclxuICBJbmplY3QsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWZcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtGb3JtR3JvdXAsIEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge2Zvcm1hdERhdGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7Q2RrRHJhZ0Ryb3AsIG1vdmVJdGVtSW5BcnJheX0gZnJvbSBcIkBhbmd1bGFyL2Nkay9kcmFnLWRyb3BcIjtcclxuaW1wb3J0IHtOekNvbnRleHRNZW51U2VydmljZSwgTnpEcm9wZG93bk1lbnVDb21wb25lbnR9IGZyb20gJ25nLXpvcnJvLWFudGQvZHJvcGRvd24nO1xyXG5pbXBvcnQge2F0cl9zdGF0aWNfZGF0YXMsIEF0clF1ZXJ5SGVhZGVyLCBBdHJRdWV5ck9wdCwganNvbiwgVGFibGUsIFRhYmxlQWN0aW9ufSBmcm9tIFwiLi4vLi4vLi4vY29yZS9iYXNlL2F0ci1jb21tb25cIjtcclxuaW1wb3J0IHtEaWN0U2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvc2VydmljZXMvZGljdC9kaWN0LnNlcnZpY2VcIjtcclxuaW1wb3J0IHtIdHRwU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvc2VydmljZXMvaHR0cC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7VG9vbHNVdGlsfSBmcm9tIFwiLi4vLi4vLi4vY29yZS91dGlscy9Ub29sc1V0aWxcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXRyLXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLmNvbXBvbmVudC5sZXNzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEF0clRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBhdHJGb3JtOiBGb3JtR3JvdXAgfCBhbnk7XHJcbiAgaXNDb2xsYXBzZSA9IHRydWU7XHJcbiAgZGljdHM6IGFueSA9IHt9O1xyXG4gIHBhZ2VJbmRleCA9IDE7XHJcblxyXG4gIHBhZ2VTaXplID0gMTA7XHJcbiAgdG90YWwgPSAxO1xyXG4gIEBJbnB1dCgpIGxvYWRpbmcgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGFsbG93RHJhZyA9IGZhbHNlOy8v5YWB6K645ouW5ou95o2i5L2NXHJcbiAgdGFibGVEYXRhczogYW55ID0gW107XHJcbiAgc2Nyb2xsU2l6ZTogYW55ID0ge3g6IFwiXCIsIHk6IFwiXCJ9XHJcbiAgLy/ooajmoLxjaGVja2JveCDphY3nva5cclxuICBpc0FsbERpc3BsYXlEYXRhQ2hlY2tlZDogYm9vbGVhbiA9IGZhbHNlXHJcbiAgaXNJbmRldGVybWluYXRlID0gZmFsc2U7XHJcbiAgbnVtYmVyT2ZDaGVja2VkID0gMDtcclxuICBtYXBPZkNoZWNrZWRJZDogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0gPSB7fTtcclxuICBjdXJDaGVja2VkOiBudW1iZXIgPSAtMTtcclxuICBpbWFnZVByZWZpeCA9IGF0cl9zdGF0aWNfZGF0YXMuT1NTX1VSTDtcclxuICBkZWZhdWx0UGFyYW1zID0ge307XHJcbiAgQElucHV0KCkgaXNIaWRlVGFibGUgPSBmYWxzZVxyXG4gIGlzQWxsTG9hZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNvcnRNYXA6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcclxuICByb3dTcGFuTWFwOiBhbnkgPSB7fTsvL2tleTp75b6356eR54mn5Zy6OntudW06MX19XHJcbiAgaGVhZGVyRGVmYXVsdFZhbDogYW55ID0ge31cclxuXHJcbiAgQElucHV0KCkgcXVlcnlPcHRzOiBBdHJRdWV5ck9wdCB8IGFueTtcclxuICBASW5wdXQoKSBzaG93UGFnaW5hdGlvbiA9IHRydWU7XHJcbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIEBPdXRwdXQoKSB0YWJsZUFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVBY3Rpb24+KCk7XHJcbiAgQE91dHB1dCgpIHF1ZXJ5QmFjayA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVBY3Rpb24+KCk7XHJcbiAgQE91dHB1dCgpIGhlYWRlckFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVBY3Rpb24+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3RhYmxlQ29udGVudCcsIHtzdGF0aWM6IHRydWV9KSB0YWJsZUNvbnRlbnQ6IEVsZW1lbnRSZWYgfCBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLCBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvciwgQEluamVjdChMT0NBTEVfSUQpIHByaXZhdGUgbG9jYWxlOiBzdHJpbmcsIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmKSB7XHJcbiAgfVxyXG5cclxuICBpc1Nob3dDb2xvcihkYXRhOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLnF1ZXJ5T3B0cy5jb2xvciAmJiB0aGlzLnF1ZXJ5T3B0cy5jb2xvci5vcGVyYXRvciAmJiB0aGlzLmlzU2hvd0J0bihkYXRhLCB0aGlzLnF1ZXJ5T3B0cy5jb2xvci5vcGVyYXRvcikpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucXVlcnlPcHRzLmNvbG9yLmNvbG9yO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICcnXHJcbiAgfVxyXG5cclxuICBkYmNsaWNrRGF0YShkYXRhOiBhbnksIHJvd05vOiBudW1iZXIpIHtcclxuICAgIGxldCBhY3Rpb246IFRhYmxlQWN0aW9uID0ge1xyXG4gICAgICBuYW1lOiAnZGJjbGlja0RhdGEnLFxyXG4gICAgICBjb2RlOiAnZGJjbGlja0RhdGEnLFxyXG4gICAgICB0eXBlOiBcInJvd1wiXHJcbiAgICB9O1xyXG4gICAgYWN0aW9uLmRhdGEgPSBkYXRhO1xyXG4gICAgYWN0aW9uLmZpcnN0RGF0YSA9IGRhdGE7XHJcbiAgICB0aGlzLnRhYmxlQWN0aW9uLmVtaXQoYWN0aW9uKTtcclxuICB9XHJcblxyXG4gIGRvQWN0aW9uQnlSb3cyKGU6IGFueSkge1xyXG4gICAgbGV0IHtkYXRhLCBjb2RlLCBldmVudDogTW91c2VFdmVudCwgaW5kZXh9ID0gZVxyXG4gICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIHtcclxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgYWN0aW9uOiBUYWJsZUFjdGlvbiA9IHtcclxuICAgICAgbmFtZTogY29kZSxcclxuICAgICAgY29kZTogY29kZSxcclxuICAgICAgdHlwZTogXCJyb3dcIlxyXG4gICAgfTtcclxuICAgIGFjdGlvbi5kYXRhID0gZGF0YTtcclxuICAgIGFjdGlvbi5maXJzdERhdGEgPSBkYXRhO1xyXG4gICAgYWN0aW9uLm51bWJlck9mQ2hlY2tlZCA9IGluZGV4O1xyXG4gICAgdGhpcy50YWJsZUFjdGlvbi5lbWl0KGFjdGlvbik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldCBodHRwU2VydmljZSgpOiBIdHRwU2VydmljZSB7XHJcbiAgICByZXR1cm4gdGhpcy5pbmplY3Rvci5nZXQoSHR0cFNlcnZpY2UpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXQgbnpDb250ZXh0TWVudVNlcnZpY2UoKTogTnpDb250ZXh0TWVudVNlcnZpY2Uge1xyXG4gICAgcmV0dXJuIHRoaXMuaW5qZWN0b3IuZ2V0KE56Q29udGV4dE1lbnVTZXJ2aWNlKTtcclxuICB9XHJcblxyXG4gIHNldFRhYmxlTG9hZGRpbmcobG9hZGRpbmc6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMubG9hZGluZyA9IGxvYWRkaW5nO1xyXG4gIH1cclxuXHJcbiAgb25SZXNpemUod2lkdGg6IGFueSwgY29sOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMucXVlcnlPcHRzLnRhYmxlcyA9IHRoaXMucXVlcnlPcHRzLnRhYmxlcy5tYXAoKGU6IGFueSkgPT4gKGUubmFtZSA9PT0gY29sID8gey4uLmUsIHdpZHRoOiBgJHt3aWR0aH1weGB9IDogZSkpO1xyXG4gICAgbGV0IHggPSAwO1xyXG4gICAgZm9yIChsZXQgaXRlbSBvZiB0aGlzLnF1ZXJ5T3B0cy50YWJsZXMpIHtcclxuXHJcbiAgICAgIGlmIChpdGVtLmlzU2hvdyAmJiBpdGVtLndpZHRoKSB7XHJcbiAgICAgICAgeCArPSBUb29sc1V0aWwucGl4ZWxUb051bShpdGVtLndpZHRoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHggPiAyMikge1xyXG4gICAgICB4ID0geCAtIDIyO1xyXG4gICAgICB0aGlzLnNjcm9sbFNpemUueCA9IHggKyBcInB4XCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc0VuYWJsZShvcGVyYXRvcjogc3RyaW5nKSB7XHJcbiAgICBsZXQgaXNFbmFibGUgPSB0cnVlO1xyXG4gICAgaWYgKCFvcGVyYXRvciB8fCBvcGVyYXRvciA9PSB1bmRlZmluZWQgfHwgb3BlcmF0b3IgPT0gXCJcIilcclxuICAgICAgaXNFbmFibGUgPSBmYWxzZTtcclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgb3AgPSBvcGVyYXRvci5zcGxpdChcInxcIik7XHJcbiAgICAgIGlmIChvcC5sZW5ndGggPiAyKSB7XHJcbiAgICAgICAgbGV0IGtleSA9IG9wWzBdO1xyXG4gICAgICAgIGlmICgha2V5KSB7XHJcbiAgICAgICAgICBpc0VuYWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpc0VuYWJsZSA9ICF0aGlzLmNvbXBhcmUodGhpcy5udW1iZXJPZkNoZWNrZWQsIG9wWzFdLCBvcFsyXSlcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZVxyXG4gICAgICAgIGlzRW5hYmxlID0gZmFsc2VcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaXNFbmFibGVcclxuICB9XHJcblxyXG4gIGlzU2hvd0J0bihkYXRhOiBhbnksIG9wZXJhdG9yOiBzdHJpbmcsIGFjdGlvbj86IFRhYmxlQWN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgaXNTaG93ID0gZmFsc2U7XHJcbiAgICBpZiAoIW9wZXJhdG9yIHx8IG9wZXJhdG9yID09IG51bGwgfHwgb3BlcmF0b3IgPT0gXCJcIikge1xyXG4gICAgICBpc1Nob3cgPSB0cnVlO1xyXG4gICAgfSBlbHNlIGlmIChvcGVyYXRvci5pbmRleE9mKCcmJicpID4gMCkge1xyXG4gICAgICAvLyBhfGVxfGIgJiZjfGVxfGRcclxuICAgICAgY29uc3Qgb3BzID0gb3BlcmF0b3Iuc3BsaXQoJyYmJyk7XHJcbiAgICAgIGlmIChvcHMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpwcmVmZXItZm9yLW9mXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlzU2hvdyA9IHRydWVcclxuICAgICAgICAgIGlmICghdGhpcy5jaGVja0lzU2hvd0Jhc2Uob3BzW2ldLnNwbGl0KCd8JyksIGRhdGEpKSB7XHJcbiAgICAgICAgICAgIGlzU2hvdyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAob3BlcmF0b3IuaW5kZXhPZignfHwnKSA+IDApIHtcclxuICAgICAgLy8gYXxlcXxifHxjfGVxfGRcclxuICAgICAgY29uc3Qgb3BzID0gb3BlcmF0b3Iuc3BsaXQoJyYmJyk7XHJcbiAgICAgIGlmIChvcHMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3BzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpc1Nob3cgPSBmYWxzZTtcclxuICAgICAgICAgIGlmICh0aGlzLmNoZWNrSXNTaG93QmFzZShvcHNbaV0uc3BsaXQoJ3wnKSwgZGF0YSkpIHtcclxuICAgICAgICAgICAgaXNTaG93ID0gdHJ1ZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgb3AgPSBvcGVyYXRvci5zcGxpdChcInxcIik7XHJcbiAgICAgIGlzU2hvdyA9IHRoaXMuY2hlY2tJc1Nob3dCYXNlKG9wLCBkYXRhKTtcclxuICAgIH1cclxuICAgIHJldHVybiBpc1Nob3c7XHJcbiAgfVxyXG5cclxuICBjaGVja0lzU2hvd0Jhc2Uob3A6IGFueSwgZGF0YTogYW55KTogYm9vbGVhbiB7XHJcbiAgICBsZXQgaXNTaG93ID0gZmFsc2U7XHJcbiAgICBpZiAob3AubGVuZ3RoID4gMSkge1xyXG4gICAgICBsZXQgdmFsdWUgPSBkYXRhW29wWzBdXTtcclxuICAgICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICAgIGlzU2hvdyA9IGZhbHNlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlzU2hvdyA9IHRoaXMuY29tcGFyZSh2YWx1ZSwgb3BbMV0sIG9wWzJdKVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2VcclxuICAgICAgaXNTaG93ID0gZmFsc2VcclxuXHJcbiAgICByZXR1cm4gaXNTaG93O1xyXG4gIH1cclxuXHJcbiAgY29tcGFyZSh2YWx1ZTogYW55LCBvcGVyYXRvcjogYW55LCB0YXJnZXQ6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGlzUmlnaHQgPSBmYWxzZTtcclxuICAgIHN3aXRjaCAob3BlcmF0b3IpIHtcclxuICAgICAgY2FzZSAnZXEnIDpcclxuICAgICAgICBpZiAodmFsdWUgPT0gdGFyZ2V0KSB7XHJcbiAgICAgICAgICBpc1JpZ2h0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2doJyA6XHJcbiAgICAgICAgaWYgKHZhbHVlID49IHRhcmdldCkge1xyXG4gICAgICAgICAgaXNSaWdodCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdub3RFbXB0eSc6XHJcbiAgICAgICAgaXNSaWdodCA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgaXNSaWdodCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdlbXB0eSc6XHJcbiAgICAgICAgaXNSaWdodCA9IGZhbHNlO1xyXG4gICAgICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgICAgIGlzUmlnaHQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdCA6XHJcbiAgICAgICAgaXNSaWdodCA9IGZhbHNlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlzUmlnaHQ7XHJcbiAgfVxyXG5cclxuICBwdXNoVGFibGVEYXRhcyh0YWJsZURhdGFzOiBhbnkpIHtcclxuICAgIHRoaXMudGFibGVEYXRhcyA9IHRoaXMudGFibGVEYXRhcy5jb25jYXQodGFibGVEYXRhcyk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVEYXRhcyhrZXk6IGFueSwgdmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy50YWJsZURhdGFzLmZvckVhY2goKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoaXRlbVtrZXldID09PSB2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudGFibGVEYXRhcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZG9BY3Rpb24oY29kZTogYW55KSB7XHJcbiAgICBsZXQgYWN0aW9uOiBUYWJsZUFjdGlvbiA9IHtcclxuICAgICAgbmFtZTogY29kZSxcclxuICAgICAgY29kZTogY29kZSxcclxuICAgICAgdHlwZTogXCJyb3dzXCJcclxuICAgIH07XHJcbiAgICBsZXQgc2VsZWN0RGF0YXM6IGFueSA9IFtdO1xyXG4gICAgaWYgKHRoaXMudGFibGVEYXRhcyAmJiB0aGlzLnRhYmxlRGF0YXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnRhYmxlRGF0YXMuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMubWFwT2ZDaGVja2VkSWRbaXRlbS5pZF0pXHJcbiAgICAgICAgICBzZWxlY3REYXRhcy5wdXNoKGl0ZW0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGFjdGlvbi5kYXRhcyA9IHNlbGVjdERhdGFzO1xyXG4gICAgaWYgKHNlbGVjdERhdGFzICYmIHNlbGVjdERhdGFzLmxlbmd0aCA+IDApIHtcclxuICAgICAgYWN0aW9uLmZpcnN0RGF0YSA9IHNlbGVjdERhdGFzWzBdO1xyXG4gICAgfVxyXG4gICAgYWN0aW9uLm51bWJlck9mQ2hlY2tlZCA9IHNlbGVjdERhdGFzLmxlbmd0aDtcclxuICAgIHRoaXMudGFibGVBY3Rpb24uZW1pdChhY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgZG9BY3Rpb25CeVJvdyhkYXRhOiBhbnksIGNvZGU6IGFueSwgZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBpZiAoZXZlbnQuc3RvcFByb3BhZ2F0aW9uKSB7XHJcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXHJcbiAgICB9XHJcbiAgICBsZXQgYWN0aW9uOiBUYWJsZUFjdGlvbiA9IHtcclxuICAgICAgbmFtZTogY29kZSxcclxuICAgICAgY29kZTogY29kZSxcclxuICAgICAgdHlwZTogXCJyb3dcIlxyXG4gICAgfTtcclxuICAgIGFjdGlvbi5kYXRhID0gZGF0YTtcclxuICAgIGFjdGlvbi5maXJzdERhdGEgPSBkYXRhO1xyXG4gICAgYWN0aW9uLm51bWJlck9mQ2hlY2tlZCA9IDE7XHJcbiAgICB0aGlzLnRhYmxlQWN0aW9uLmVtaXQoYWN0aW9uKTtcclxuICB9XHJcblxyXG4gIGdldEFsbENoZWNrSW5mbygpOiBhbnlbXSB7XHJcbiAgICBsZXQgaWRzOiBhbnkgPSBbXTtcclxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRoaXMubWFwT2ZDaGVja2VkSWQpKSB7XHJcbiAgICAgIGlmICh0aGlzLm1hcE9mQ2hlY2tlZElkLmhhc093blByb3BlcnR5KGtleSkgJiYgdGhpcy5tYXBPZkNoZWNrZWRJZFtrZXldKSB7XHJcbiAgICAgICAgaWRzLnB1c2goa2V5KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaWRzO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsQ2hlY2tEYXRhcygpOiBhbnlbXSB7XHJcbiAgICBsZXQgc2VsZWN0RGF0YXM6IGFueSA9IFtdXHJcbiAgICB0aGlzLnRhYmxlRGF0YXMuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLm1hcE9mQ2hlY2tlZElkW2l0ZW0uaWRdKVxyXG4gICAgICAgIHNlbGVjdERhdGFzLnB1c2goaXRlbSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBzZWxlY3REYXRhcztcclxuICB9XHJcblxyXG4gIGNoZWNrQWxsKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLnRhYmxlRGF0YXMuZm9yRWFjaCgoaXRlbTogYW55KSA9PiAodGhpcy5tYXBPZkNoZWNrZWRJZFtpdGVtLmlkXSA9IHZhbHVlKSk7XHJcbiAgICB0aGlzLnJlZnJlc2hTdGF0dXMoKTtcclxuICB9XHJcblxyXG4gIHJlZnJlc2hTdGF0dXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzQWxsRGlzcGxheURhdGFDaGVja2VkID0gdGhpcy50YWJsZURhdGFzXHJcbiAgICAgIC5ldmVyeSgoaXRlbTogYW55KSA9PiB0aGlzLm1hcE9mQ2hlY2tlZElkW2l0ZW0uaWRdKTtcclxuICAgIHRoaXMuaXNJbmRldGVybWluYXRlID1cclxuICAgICAgdGhpcy50YWJsZURhdGFzLnNvbWUoKGl0ZW06IGFueSkgPT4gdGhpcy5tYXBPZkNoZWNrZWRJZFtpdGVtLmlkXSkgJiZcclxuICAgICAgIXRoaXMuaXNBbGxEaXNwbGF5RGF0YUNoZWNrZWQ7XHJcbiAgICB0aGlzLm51bWJlck9mQ2hlY2tlZCA9IHRoaXMudGFibGVEYXRhcy5maWx0ZXIoKGl0ZW06IGFueSkgPT4gdGhpcy5tYXBPZkNoZWNrZWRJZFtpdGVtLmlkXSkubGVuZ3RoO1xyXG4gICAgdGhpcy50YWJsZUFjdGlvbi5lbWl0KHtcclxuICAgICAgY29kZTogJ3JlZnJlc2hTdGF0dXMnLCBuYW1lOiAnc2VsZWN0JyxcclxuICAgICAgdHlwZTogXCJyb3dcIiwgZGF0YTogdGhpcy5nZXRBbGxDaGVja0RhdGFzKClcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBzZWxlY3RSb3coZGF0YTogYW55LCByb3dObzogbnVtYmVyKSB7XHJcbiAgICAvLyB0aGlzLnRhYmxlRGF0YXMuZm9yRWFjaChpdGVtID0+ICh0aGlzLm1hcE9mQ2hlY2tlZElkW2RhdGEuaWRdID0gdmFsdWUpKTtcclxuICAgIHRoaXMuY3VyQ2hlY2tlZCA9IHJvd05vO1xyXG4gICAgaWYgKCF0aGlzLnF1ZXJ5T3B0cy5jaGVja0JveD8uaXNGb3JiaWQpIHtcclxuICAgICAgaWYgKHRoaXMucXVlcnlPcHRzLmNoZWNrQm94Py5pc1Nob3dDaGVja2JveCkge1xyXG4gICAgICAgIHRoaXMubWFwT2ZDaGVja2VkSWRbZGF0YS5pZF0gPSAhdGhpcy5tYXBPZkNoZWNrZWRJZFtkYXRhLmlkXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLm1hcE9mQ2hlY2tlZElkID0ge307XHJcbiAgICAgICAgdGhpcy5tYXBPZkNoZWNrZWRJZFtkYXRhLmlkXSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBhY3Rpb246IFRhYmxlQWN0aW9uID0ge1xyXG4gICAgICBuYW1lOiAnc2VsZWN0JyxcclxuICAgICAgY29kZTogJ3NlbGVjdCcsXHJcbiAgICAgIHR5cGU6IFwicm93XCJcclxuICAgIH07XHJcbiAgICBhY3Rpb24uZGF0YSA9IGRhdGE7XHJcbiAgICBhY3Rpb24uZmlyc3REYXRhID0gZGF0YTtcclxuICAgIGFjdGlvbi5udW1iZXJPZkNoZWNrZWQgPSAxO1xyXG4gICAgdGhpcy50YWJsZUFjdGlvbi5lbWl0KGFjdGlvbik7XHJcbiAgICB0aGlzLnJlZnJlc2hTdGF0dXMoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5hdHJGb3JtID0gdGhpcy5mYi5ncm91cCh7fSk7XHJcbiAgICBsZXQgeCA9IHRoaXMudGFibGVDb250ZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggLSAyMlxyXG4gICAgbGV0IHkgPSB0aGlzLnRhYmxlQ29udGVudC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCAtIDIwMFxyXG4gICAgdGhpcy5zY3JvbGxTaXplLnggPSAoeCA+IDAgPyB4IDogMTAwKSArIFwicHhcIjtcclxuICAgIHRoaXMuc2Nyb2xsU2l6ZS55ID0gKHkgPiAwID8geSA6IDEwMCkgKyBcInB4XCI7XHJcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnNjcm9sbFNpemUpXHJcbiAgICB0aGlzLmluaXRIZWFkZXIoKTtcclxuICAgIGlmICh0aGlzLnF1ZXJ5T3B0cyAmJiB0aGlzLnF1ZXJ5T3B0cy50YWJsZXMpIHtcclxuICAgICAgZm9yIChsZXQgdGFibGUgb2YgdGhpcy5xdWVyeU9wdHMudGFibGVzKSB7XHJcbiAgICAgICAgaWYodGFibGUudHlwZSA9PSAnZGljdCcpe1xyXG4gICAgICAgICAgdGhpcy5nZXREaWN0VmFsdWUodGFibGUuZGljdENvZGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGFibGUuc29ydEtleSkge1xyXG4gICAgICAgICAgdGFibGUuc29ydGFibGUgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5zb3J0TWFwW3RhYmxlLnNvcnRLZXldID0gbnVsbDtcclxuICAgICAgICB9IGVsc2VcclxuICAgICAgICAgIHRhYmxlLnNvcnRhYmxlID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLnF1ZXJ5T3B0cyAmJiB0aGlzLnF1ZXJ5T3B0cy5kZWZhdWx0UGFyYW1zKSB7XHJcbiAgICAgIHRoaXMuZGVmYXVsdFBhcmFtcyA9IHRoaXMucXVlcnlPcHRzLmRlZmF1bHRQYXJhbXNcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5xdWVyeU9wdHMuaXNBdXRvUXVlcnkpIHtcclxuICAgICAgdGhpcy5xdWVyeSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIC8vIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5pdEhlYWRlcigpIHtcclxuICAgIHRoaXMuaGVhZGVyRGVmYXVsdFZhbCA9IHt9O1xyXG4gICAgaWYgKHRoaXMucXVlcnlPcHRzICYmIHRoaXMucXVlcnlPcHRzLmhlYWRlcnMgJiYgdGhpcy5xdWVyeU9wdHMuaGVhZGVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMucXVlcnlPcHRzLmhlYWRlcnMuZm9yRWFjaCgoaXRlbTogYW55LCBpOiBhbnkpID0+IHtcclxuICAgICAgICBpdGVtLnNwYW4gPSBpdGVtLnNwYW4gfHwgODtcclxuICAgICAgICBpZiAoIVRvb2xzVXRpbC5pc051bGwoaXRlbS5kZWZhdWx0VmFsKSkge1xyXG4gICAgICAgICAgdGhpcy5oZWFkZXJEZWZhdWx0VmFsW2l0ZW0ua2V5XSA9IGl0ZW0uZGVmYXVsdFZhbFxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXRlbS5pc1Nob3cgIT0gZmFsc2UpIHtcclxuICAgICAgICAgIGl0ZW0uaXNTaG93ID0gaSA8IHRoaXMucXVlcnlPcHRzLnNob3dOdW1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hdHJGb3JtLmFkZENvbnRyb2woaXRlbS5rZXksIG5ldyBGb3JtQ29udHJvbCgpKTtcclxuICAgICAgICBsZXQgdHlwZSA9IGl0ZW0udHlwZTtcclxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICAgIGNhc2UgXCJzZWxlY3RcIjpcclxuICAgICAgICAgICAgdGhpcy5nZXREaWN0VmFsdWUoaXRlbS5kaWN0Q29kZSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBcInRyZWVTZWxlY3RcIjpcclxuICAgICAgICAgIGNhc2UgXCJjYXNjYWRlclwiOlxyXG4gICAgICAgICAgY2FzZSBcInNlbGVjdEN1c1wiOlxyXG4gICAgICAgICAgICBpZiAoaXRlbS5zZWxlY3RVcmwgJiYgaXRlbS5zZWxlY3RVcmwudXJsKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXREaWNMaXN0KGl0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXREaWNMaXN0KGl0ZW06IGFueSkge1xyXG4gICAgaWYgKCFpdGVtLnNlbGVjdFVybCB8fCAhaXRlbS5zZWxlY3RVcmwudXJsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBrZXlzID0gaXRlbS5zZWxlY3RVcmwuY29udmVydC5zcGxpdCgnLCcpO1xyXG4gICAgdGhpcy5odHRwU2VydmljZS5wb3N0KGl0ZW0uc2VsZWN0VXJsLnVybCwge30sIFRvb2xzVXRpbC5nZXRIdHRwT3B0aW9ucygpKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgaWYgKGl0ZW0udHlwZSA9PSAndHJlZVNlbGVjdCcpIHtcclxuICAgICAgICBpdGVtLnRyZWVMaXN0ID0gcmVzLmRhdGEuZmlsdGVyKChjaGlsZDogYW55KSA9PiB7XHJcbiAgICAgICAgICBrZXlzLmZvckVhY2goKHY6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgdnMgPSB2LnNwbGl0KFwifFwiKTtcclxuICAgICAgICAgICAgY2hpbGRbdnNbMF1dID0gY2hpbGRbdnNbMV1dO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICAvLyBjaGlsZC5rZXkgPSBjaGlsZC5pZDtcclxuICAgICAgICAgIC8vIGNoaWxkLnRpdGxlID0gY2hpbGQucmVhbE5hbWU7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKGl0ZW0udHlwZSA9PSAnc2VsZWN0Q3VzJykge1xyXG4gICAgICAgIGl0ZW0uZGljdExpc3QgPSByZXMuZGF0YS5maWx0ZXIoKGNoaWxkOiBhbnkpID0+IHtcclxuICAgICAgICAgIGtleXMuZm9yRWFjaCgodjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCB2cyA9IHYuc3BsaXQoXCJ8XCIpO1xyXG4gICAgICAgICAgICBjaGlsZFt2c1swXV0gPSBjaGlsZFt2c1sxXV07XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIC8vIGNoaWxkLnZhbHVlID0gY2hpbGQuaWQ7XHJcbiAgICAgICAgICAvLyBjaGlsZC5sYWJlbCA9IGNoaWxkLm5hbWU7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5zY3JvbGxTaXplLnkgPSB0aGlzLnRhYmxlQ29udGVudC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCAtIDEwMCArIFwicHhcIjtcclxuICAgICAgaWYodGhpcy5pc0hpZGVUYWJsZSl7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxTaXplLnkgPSB0aGlzLnRhYmxlQ29udGVudC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCArIFwicHhcIjtcclxuICAgICAgfVxyXG4gICAgICBsZXQgd2lkdGggPSAwO1xyXG4gICAgICBpZiAodGhpcy5xdWVyeU9wdHMgJiYgdGhpcy5xdWVyeU9wdHMudGFibGVzKSB7XHJcbiAgICAgICAgZm9yIChsZXQgdGFibGUgb2YgdGhpcy5xdWVyeU9wdHMudGFibGVzKSB7XHJcbiAgICAgICAgICBpZiAodGFibGUuaXNTaG93ICYmIHRhYmxlLndpZHRoKSB7XHJcblxyXG4gICAgICAgICAgICB3aWR0aCArPSBUb29sc1V0aWwucGl4ZWxUb051bSh0YWJsZS53aWR0aCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGxldCB3ID0gdGhpcy50YWJsZUNvbnRlbnQubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCAtIDIyO1xyXG4gICAgICBpZiAod2lkdGggPiB3KVxyXG4gICAgICAgIHRoaXMuc2Nyb2xsU2l6ZS54ID0gd2lkdGggKyBcInB4XCI7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICB0aGlzLnNjcm9sbFNpemUueCA9IHRoaXMudGFibGVDb250ZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggLSAyMiArIFwicHhcIjtcclxuXHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuc2Nyb2xsU2l6ZSk7XHJcbiAgICAgIHRoaXMuaXNBbGxMb2FkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9LCA1MDApXHJcblxyXG5cclxuICB9XHJcblxyXG4gIHNvcnQoc29ydE5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5zb3J0TWFwKSB7XHJcbiAgICAgIHRoaXMuc29ydE1hcFtrZXldID0ga2V5ID09PSBzb3J0TmFtZSA/IHZhbHVlIDogbnVsbDtcclxuICAgIH1cclxuICAgIC8vIHRoaXMuc2VhcmNoKHRoaXMubGlzdE9mU2VhcmNoTmFtZSwgdGhpcy5saXN0T2ZTZWFyY2hBZGRyZXNzKTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMuc29ydE1hcClcclxuICAgIHRoaXMucXVlcnkodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldCBkaWN0U2VydmljZSgpOiBEaWN0U2VydmljZSB7XHJcbiAgICByZXR1cm4gdGhpcy5pbmplY3Rvci5nZXQoRGljdFNlcnZpY2UpXHJcbiAgfVxyXG5cclxuICBnZXREaWN0VmFsdWUoY29kZTogc3RyaW5nKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcInBwcHBcIik7XHJcbiAgICB0aGlzLmRpY3RTZXJ2aWNlLmdldERpY3RCeWNvZGUoY29kZSkuc3Vic2NyaWJlKFxyXG4gICAgICByZXN1bHQgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0ICE9IG51bGwpXHJcbiAgICAgICAgICB0aGlzLmRpY3RzW2NvZGVdID0gcmVzdWx0LmRpY3RzO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZGljdHMpXHJcblxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgdGhpcy5kaWN0c1tjb2RlXSA9IFtdO1xyXG4gICAgICB9XHJcbiAgICApXHJcbiAgfVxyXG5cclxuICB0b2dnbGVDb2xsYXBzZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNDb2xsYXBzZSA9ICF0aGlzLmlzQ29sbGFwc2U7XHJcbiAgICAvLyB0aGlzLnF1ZXJ5T3B0cy5oZWFkZXJzLmZvckVhY2goKGM6IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgLy8gICBjLmlzU2hvdyA9IHRoaXMuaXNDb2xsYXBzZSA/IGluZGV4IDwgdGhpcy5xdWVyeU9wdHMuc2hvd051bSA6IHRydWU7XHJcbiAgICAvLyB9KTtcclxuICB9XHJcblxyXG4gIHJlc2V0Rm9ybSgpOiB2b2lkIHtcclxuICAgIHRoaXMuYXRyRm9ybS5yZXNldCgpO1xyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5oZWFkZXJEZWZhdWx0VmFsKSB7XHJcbiAgICAgIHRoaXMuYXRyRm9ybS5nZXQoa2V5KT8uc2V0VmFsdWUodGhpcy5oZWFkZXJEZWZhdWx0VmFsW2tleV0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0Q2hhbmdlKHZhbHVlOiBhbnksIGl0ZW06IGFueSkge1xyXG4gICAgY29uc29sZS5sb2codmFsdWUpO1xyXG4gICAgbGV0IGFjdGlvbjogVGFibGVBY3Rpb24gPSB7XHJcbiAgICAgIG5hbWU6IGl0ZW0ubGFiZWwsXHJcbiAgICAgIGNvZGU6IGl0ZW0ua2V5LFxyXG4gICAgICBkYXRhOiBpdGVtLFxyXG4gICAgICB2YWx1ZTogdmFsdWUsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5oZWFkZXJBY3Rpb24uZW1pdChhY3Rpb24pXHJcblxyXG4gIH1cclxuXHJcbiAgY2xpY2tJY29uKHZhbHVlOiBhbnksIGl0ZW06IEF0clF1ZXJ5SGVhZGVyLCAkZXZlbnQ6IGFueSkge1xyXG4gICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgY29uc29sZS5sb2codmFsdWUsIGl0ZW0pO1xyXG4gICAgbGV0IGFjdGlvbjogVGFibGVBY3Rpb24gPSB7XHJcbiAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcclxuICAgICAgY29kZTogaXRlbS5pY29uPy5jb2RlID8gaXRlbS5pY29uPy5jb2RlIDogXCJcIixcclxuICAgICAgZGF0YTogaXRlbSxcclxuICAgICAgdmFsdWU6IHZhbHVlLFxyXG4gICAgfTtcclxuICAgIHRoaXMuaGVhZGVyQWN0aW9uLmVtaXQoYWN0aW9uKVxyXG4gIH1cclxuXHJcbiAgZ2V0UXVlcnlQYXJhbXMocmVzZXQ6IGJvb2xlYW4pOiBqc29uIHtcclxuICAgIGlmIChyZXNldCkge1xyXG4gICAgICB0aGlzLnBhZ2VJbmRleCA9IDE7XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnBhZ2VJbmRleCk7XHJcbiAgICBsZXQgcGFyYW1zOiBhbnkgPSB7XHJcbiAgICAgIHBhZ2U6IHRoaXMucGFnZUluZGV4LFxyXG4gICAgICBsaW1pdDogdGhpcy5wYWdlU2l6ZSxcclxuICAgICAgc29ydDogdGhpcy5nZXRTb3J0SW5mbygpXHJcbiAgICB9O1xyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5hdHJGb3JtLnZhbHVlKSB7XHJcbiAgICAgIGlmICh0aGlzLmF0ckZvcm0udmFsdWVba2V5XSAmJiB0aGlzLmF0ckZvcm0udmFsdWVba2V5XSAhPSBudWxsICYmIHRoaXMuYXRyRm9ybS52YWx1ZVtrZXldICE9IFwiXCIpIHtcclxuICAgICAgICBpZiAodGhpcy5nZXRIZWRlclR5cGUoa2V5KSA9PSBcImRhdGVSYW5nZVwiKSB7XHJcbiAgICAgICAgICBsZXQgYmVnaW4gPSBrZXkgKyBcIkJlZ2luXCI7XHJcbiAgICAgICAgICBsZXQgZW5kID0ga2V5ICsgXCJFbmRcIjtcclxuICAgICAgICAgIGxldCBmb3JtYXRlID0gJ3l5eXktTU0tZGQgMDA6MDA6MDAnXHJcbiAgICAgICAgICBsZXQgbnpTaG93VGltZTogYW55ID0gdGhpcy5nZXRIZWRlclR5cGUoa2V5LCAnbnpTaG93VGltZScpXHJcbiAgICAgICAgICBpZiAobnpTaG93VGltZSkge1xyXG4gICAgICAgICAgICBmb3JtYXRlID0gJ3l5eXktTU0tZGQgSEg6bW06c3MnXHJcbiAgICAgICAgICAgIGlmIChuelNob3dUaW1lLm56Rm9ybWF0KSB7XHJcbiAgICAgICAgICAgICAgZm9ybWF0ZSA9ICd5eXl5LU1NLWRkICcgKyBuelNob3dUaW1lLm56Rm9ybWF0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBwYXJhbXNbYmVnaW5dID0gZm9ybWF0RGF0ZSgodGhpcy5hdHJGb3JtLnZhbHVlW2tleV1bMF0gYXMgRGF0ZSksIGZvcm1hdGUsIHRoaXMubG9jYWxlKTtcclxuICAgICAgICAgIHBhcmFtc1tlbmRdID0gZm9ybWF0RGF0ZSgodGhpcy5hdHJGb3JtLnZhbHVlW2tleV1bMV0gYXMgRGF0ZSksIGZvcm1hdGUsIHRoaXMubG9jYWxlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0SGVkZXJUeXBlKGtleSkgPT0gXCJkYXlSYW5nZVwiKSB7XHJcbiAgICAgICAgICBsZXQgYmVnaW4gPSBrZXkgKyBcIkJlZ2luXCI7XHJcbiAgICAgICAgICBsZXQgZW5kID0ga2V5ICsgXCJFbmRcIjtcclxuICAgICAgICAgIGxldCBmb3JtYXRlID0gJ3l5eXktTU0tZGQgMDA6MDA6MDAnXHJcbiAgICAgICAgICBwYXJhbXNbYmVnaW5dID0gZm9ybWF0RGF0ZSgodGhpcy5hdHJGb3JtLnZhbHVlW2tleV1bMF0gYXMgRGF0ZSksIGZvcm1hdGUsIHRoaXMubG9jYWxlKTtcclxuICAgICAgICAgIHBhcmFtc1tlbmRdID0gZm9ybWF0RGF0ZSgodGhpcy5hdHJGb3JtLnZhbHVlW2tleV1bMV0gYXMgRGF0ZSksIGZvcm1hdGUsIHRoaXMubG9jYWxlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0SGVkZXJUeXBlKGtleSkgPT0gXCJzZGF0ZVwiKSB7XHJcbiAgICAgICAgICBwYXJhbXNba2V5XSA9IGZvcm1hdERhdGUoKHRoaXMuYXRyRm9ybS52YWx1ZVtrZXldIGFzIERhdGUpLCAneXl5eS1NTS1kZCAwMDowMDowMCcsIHRoaXMubG9jYWxlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0SGVkZXJUeXBlKGtleSkgPT0gXCJ0cmVlU2VsZWN0XCIpIHtcclxuICAgICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuYXRyRm9ybS52YWx1ZVtrZXldO1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBwYXJhbXNba2V5XSA9IHRoaXMuYXRyRm9ybS52YWx1ZVtrZXldO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcGFyYW1zW2tleV0gPSB0aGlzLmF0ckZvcm0udmFsdWVba2V5XS5qb2luKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdldEhlZGVyVHlwZShrZXkpID09IFwiY2FzY2FkZXJcIikge1xyXG4gICAgICAgICAgcGFyYW1zW2tleV0gPSB0aGlzLmF0ckZvcm0udmFsdWVba2V5XS5qb2luKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHBhcmFtc1trZXldID0gdGhpcy5hdHJGb3JtLnZhbHVlW2tleV07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHBhcmFtcyA9IE9iamVjdC5hc3NpZ24ocGFyYW1zLCB0aGlzLmRlZmF1bHRQYXJhbXMpO1xyXG4gICAgY29uc29sZS5sb2cocGFyYW1zKVxyXG4gICAgcmV0dXJuIHBhcmFtcztcclxuXHJcbiAgfVxyXG5cclxuICBnZXRIZWRlclR5cGUoY3VzS2V5OiBzdHJpbmcsIHR5cGVLZXk/OiBzdHJpbmcpIHtcclxuICAgIGxldCB0eXBlID0gbnVsbDtcclxuICAgIGZvciAobGV0IGhlYWRlciBvZiB0aGlzLnF1ZXJ5T3B0cy5oZWFkZXJzKSB7XHJcbiAgICAgIGlmIChjdXNLZXkgPT0gaGVhZGVyLmtleSkge1xyXG4gICAgICAgIHR5cGUgPSBoZWFkZXJbdHlwZUtleSB8fCAndHlwZSddO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHlwZTtcclxuICB9XHJcblxyXG4gIHNldERlZmF1bHRQYXJhbXMocGFyYW1zOiBhbnksIHJlc2V0OiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgdGhpcy5kZWZhdWx0UGFyYW1zID0gcGFyYW1zO1xyXG4gICAgdGhpcy5xdWVyeShyZXNldCk7XHJcbiAgfVxyXG5cclxuICBnZXRTb3J0SW5mbygpOiBzdHJpbmcge1xyXG4gICAgbGV0IG9yZGVyYnk6IGFueSA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5zb3J0TWFwKSB7XHJcbiAgICAgIGlmICh0aGlzLnNvcnRNYXBba2V5XSA9PSAnYXNjZW5kJykge1xyXG4gICAgICAgIG9yZGVyYnkucHVzaChrZXkgKyBcInxcIiArIFwiYXNjXCIpXHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zb3J0TWFwW2tleV0gPT0gJ2Rlc2NlbmQnKSB7XHJcbiAgICAgICAgb3JkZXJieS5wdXNoKGtleSArIFwifFwiICsgXCJkZXNjXCIpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBvcmRlciA9IFwiXCI7XHJcbiAgICBpZiAob3JkZXJieS5sZW5ndGggPCAxICYmIHRoaXMucXVlcnlPcHRzLnNvcnQpIHtcclxuICAgICAgb3JkZXIgPSB0aGlzLnF1ZXJ5T3B0cy5zb3J0XHJcbiAgICB9IGVsc2VcclxuICAgICAgb3JkZXIgPSBvcmRlcmJ5LmpvaW4oXCIsXCIpO1xyXG4gICAgcmV0dXJuIG9yZGVyO1xyXG4gIH1cclxuXHJcbiAgcXVlcnkocmVzZXQ6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgbGV0IHBhcmFtcyA9IHRoaXMuZ2V0UXVlcnlQYXJhbXMocmVzZXQpO1xyXG4gICAgaWYgKHRoaXMucXVlcnlPcHRzLnVybCkge1xyXG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgdGhpcy5odHRwU2VydmljZS5wb3N0KHRoaXMucXVlcnlPcHRzLnVybCwgcGFyYW1zLCBUb29sc1V0aWwuZ2V0SHR0cE9wdGlvbnMoKSkuc3Vic2NyaWJlKFxyXG4gICAgICAgIHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09IDIwMCkge1xyXG4gICAgICAgICAgICBsZXQgYWN0aW9uOiBhbnkgPSB7fTtcclxuICAgICAgICAgICAgYWN0aW9uW1wicmVzdWx0XCJdID0gcmVzdWx0O1xyXG4gICAgICAgICAgICBhY3Rpb25bXCJwYXJhbXNcIl0gPSBwYXJhbXM7XHJcbiAgICAgICAgICAgIHRoaXMucXVlcnlCYWNrLmVtaXQoYWN0aW9uKTtcclxuICAgICAgICAgICAgdGhpcy50b3RhbCA9IHJlc3VsdD8ucGFnZT8udG90YWxSZXN1bHQ7XHJcbiAgICAgICAgICAgIHRoaXMudGFibGVEYXRhcyA9IHJlc3VsdC5kYXRhO1xyXG4gICAgICAgICAgICB0aGlzLmdldFJvd1NwYW4oKTtcclxuICAgICAgICAgICAgdGhpcy5tYXBPZkNoZWNrZWRJZCA9IHt9O1xyXG4gICAgICAgICAgICB0aGlzLmN1ckNoZWNrZWQgPSAtMTtcclxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoU3RhdHVzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucXVlcnlCYWNrLmVtaXQoe25hbWU6ICcnLCBjb2RlOiAncXVlcnknLCBkYXRhOiBwYXJhbXN9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29udGV4dE1lbnUoJGV2ZW50OiBhbnksIG1lbnU6IE56RHJvcGRvd25NZW51Q29tcG9uZW50KSB7XHJcbiAgICBjb25zb2xlLmxvZygkZXZlbnQpXHJcbiAgICB0aGlzLm56Q29udGV4dE1lbnVTZXJ2aWNlLmNyZWF0ZSgkZXZlbnQsIG1lbnUpO1xyXG4gIH1cclxuXHJcbiAgbG9nKHZhbHVlOiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2codmFsdWUpO1xyXG4gICAgZm9yIChsZXQgdGFibGUgb2YgdGhpcy5xdWVyeU9wdHMudGFibGVzKSB7XHJcbiAgICAgIGxldCBmbGFnID0gZmFsc2U7XHJcbiAgICAgIGZvciAobGV0IGl0ZW0gb2YgdmFsdWUpIHtcclxuICAgICAgICBpZiAoaXRlbSA9PSB0YWJsZS5rZXkpIHtcclxuICAgICAgICAgIHRhYmxlLmlzU2hvdyA9IHRydWU7XHJcbiAgICAgICAgICBmbGFnID0gdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoIWZsYWcpXHJcbiAgICAgICAgdGFibGUuaXNTaG93ID0gZmFsc2U7XHJcblxyXG4gICAgfVxyXG4gICAgY29uc29sZS5sb2codGhpcy5xdWVyeU9wdHMudGFibGVzKTtcclxuICB9XHJcblxyXG4gIGNoZWNrU2hvd1RkKGl0ZW06IFRhYmxlLCBpbmRleDogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIWl0ZW0uaXNTaG93KSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChpdGVtLmlzUm93U3Bhbikge1xyXG4gICAgICAvLyDlkIjlubbooYws6L+U5Zue5YC85LiO5LiK5LiA6KGM55u45ZCM5YiZ6ZqQ6JeP6L+Z5LiA6KGMO1xyXG4gICAgICBpZiAoaW5kZXggPT0gMCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGtleSA9IGl0ZW0ua2V5ID8gaXRlbS5rZXkgOiBcIlwiO1xyXG4gICAgICBjb25zdCBjdXIgPSB0aGlzLnRhYmxlRGF0YXNbaW5kZXhdW2tleV07XHJcbiAgICAgIGNvbnN0IHByZSA9IHRoaXMudGFibGVEYXRhc1tpbmRleCAtIDFdW2tleV07XHJcblxyXG4gICAgICByZXR1cm4gIShjdXIgPT0gcHJlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBpdGVtLmlzU2hvdztcclxuICB9XHJcblxyXG4gIGNoZWNrUm93U3BhbihpdGVtOiBUYWJsZSwgZGF0YTogYW55KSB7XHJcbiAgICBpZiAoaXRlbS5pc1Jvd1NwYW4pIHtcclxuICAgICAgcmV0dXJuIHRoaXMucm93U3Bhbk1hcFtpdGVtLmtleSA/IGl0ZW0ua2V5IDogXCJcIl1bZGF0YVtpdGVtLmtleSA/IGl0ZW0ua2V5IDogXCJcIl1dLm51bVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIDE7XHJcbiAgfVxyXG5cclxuICBnZXRSb3dTcGFuKCkge1xyXG4gICAgbGV0IGlzUm93U3BhbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5xdWVyeU9wdHMudGFibGVzLmZvckVhY2goXHJcbiAgICAgIChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoaXRlbS5pc1Jvd1NwYW4pIHtcclxuICAgICAgICAgIGlzUm93U3BhbiA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnJvd1NwYW5NYXBbaXRlbS5rZXldID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgaWYgKCFpc1Jvd1NwYW4pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLnJvd1NwYW5NYXApO1xyXG4gICAgdGhpcy50YWJsZURhdGFzLmZvckVhY2goXHJcbiAgICAgIChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICBrZXlzLmZvckVhY2goXHJcbiAgICAgICAgICBrZXkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGl0ZW1ba2V5XTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnJvd1NwYW5NYXBba2V5XVt2YWx1ZV0pIHtcclxuICAgICAgICAgICAgICB0aGlzLnJvd1NwYW5NYXBba2V5XVt2YWx1ZV0gPSB7XHJcbiAgICAgICAgICAgICAgICBudW06IDFcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMucm93U3Bhbk1hcFtrZXldW3ZhbHVlXS5udW0gKz0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIClcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGRyb3AoZXZlbnQ6IENka0RyYWdEcm9wPHN0cmluZ1tdPik6IHZvaWQge1xyXG4gICAgbW92ZUl0ZW1JbkFycmF5KHRoaXMudGFibGVEYXRhcywgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcclxuICAgIGxldCBhY3Rpb246IFRhYmxlQWN0aW9uID0ge1xyXG4gICAgICBuYW1lOiAnZHJhZycsXHJcbiAgICAgIGNvZGU6ICdkcmFnJyxcclxuICAgICAgdHlwZTogXCJyb3dzXCJcclxuICAgIH07XHJcbiAgICBhY3Rpb24uZGF0YXMgPSB0aGlzLnRhYmxlRGF0YXM7XHJcbiAgICBpZiAodGhpcy50YWJsZURhdGFzICYmIHRoaXMudGFibGVEYXRhcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGFjdGlvbi5maXJzdERhdGEgPSB0aGlzLnRhYmxlRGF0YXNbMF07XHJcbiAgICB9XHJcbiAgICBhY3Rpb24ubnVtYmVyT2ZDaGVja2VkID0gMTtcclxuICAgIHRoaXMudGFibGVBY3Rpb24uZW1pdChhY3Rpb24pO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPGZvcm0gbnotZm9ybSBbZm9ybUdyb3VwXT1cImF0ckZvcm1cIiBjbGFzcz1cImFudC1hZHZhbmNlZC1zZWFyY2gtZm9ybVwiXHJcbiAgICAgICpuZ0lmPVwicXVlcnlPcHRzLmhlYWRlcnMubGVuZ3RoID4wIHx8IHF1ZXJ5T3B0cy5hY3Rpb25zLmxlbmd0aCA+MFwiPlxyXG4gIDxkaXYgbnotcm93IFtuekd1dHRlcl09XCIyNFwiPlxyXG4gICAgPGRpdiBuei1jb2wgW2hpZGRlbl09XCIhaGVhZGVyLmlzU2hvdyB8fCAhaXNDb2xsYXBzZVwiICpuZ0Zvcj1cImxldCBoZWFkZXIgb2YgcXVlcnlPcHRzLmhlYWRlcnNcIlxyXG4gICAgICAgICBbbnpTcGFuXT1cImhlYWRlci5zcGFuXCI+XHJcbiAgICAgIDxhcHAtdGFibGUtZm9ybS1pdGVtXHJcbiAgICAgICAgW2hlYWRlcl09XCJoZWFkZXJcIlxyXG4gICAgICAgIFtuZ01vZGVsXT1cImhlYWRlci5kZWZhdWx0VmFsXCJcclxuICAgICAgICBbZGljdExpc3RdPVwiZGljdHNbaGVhZGVyLmRpY3RDb2RlXVwiXHJcbiAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJoZWFkZXIua2V5XCJcclxuICAgICAgICAoaGVhZGVyQWN0aW9uKT1cImhlYWRlckFjdGlvbi5lbWl0KCRldmVudClcIj48L2FwcC10YWJsZS1mb3JtLWl0ZW0+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IG56LXJvdyBuelR5cGU9XCJmbGV4XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWFyZWFcIiBuei1jb2wgW256U3Bhbl09XCIxNlwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgcXVlcnlPcHRzLmFjdGlvbnNcIj5cclxuICAgICAgICA8YXRyLWxvY2FsLXVwbG9hZCAqbmdJZj1cImFjdGlvbi5nVHlwZSA9PSAndXBsb2FkJ1wiIFtjb2RlXT1cImFjdGlvbi5jb2RlXCIgW3VybF09XCJhY3Rpb24udXJsXCIgW25hbWVdPVwiYWN0aW9uLm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt3aXRob3V0Um9sZV09XCJhY3Rpb24ud2l0aG91dFJvbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcIj48L2F0ci1sb2NhbC11cGxvYWQ+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFhY3Rpb24uZ1R5cGVcIj5cclxuICAgICAgICAgIDxidXR0b24gbnotYnV0dG9uIFtuelR5cGVdPVwiJ3ByaW1hcnknXCIgbnpTaXplPVwic21hbGxcIiAoY2xpY2spPVwiZG9BY3Rpb24oYWN0aW9uLmNvZGUpXCJcclxuICAgICAgICAgICAgICAgICAgKmF0clJvbGU9XCJhY3Rpb24ud2l0aG91dFJvbGUgPyBudWxsOmFjdGlvbi5jb2RlXCJcclxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRW5hYmxlKGFjdGlvbi5vcGVyYXRvcilcIj57e2FjdGlvbi5uYW1lfX08L2J1dHRvbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgbnotY29sIFtuelNwYW5dPVwiOFwiIGNsYXNzPVwic2VhcmNoLWFyZWFcIiAqbmdJZj1cInF1ZXJ5T3B0cy5oZWFkZXJzLmxlbmd0aCA+MCAmJiAhcXVlcnlPcHRzLmlzSGlkZVF1ZXJ5XCI+XHJcbiAgICAgIDxidXR0b24gbnotYnV0dG9uIG56U2l6ZT1cInNtYWxsXCIgW256VHlwZV09XCIncHJpbWFyeSdcIiAoY2xpY2spPVwicXVlcnkodHJ1ZSlcIj7mn6Xor6I8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBuei1idXR0b24gbnpTaXplPVwic21hbGxcIiAoY2xpY2spPVwicmVzZXRGb3JtKClcIj7ph43nva48L2J1dHRvbj5cclxuICAgICAgPGEgY2xhc3M9XCJjb2xsYXBzZVwiIChjbGljayk9XCJ0b2dnbGVDb2xsYXBzZSgpXCIgKm5nSWY9XCJxdWVyeU9wdHMuaGVhZGVycy5sZW5ndGggPiAwIFwiPlxyXG4gICAgICAge3tpc0NvbGxhcHNlID8gJ+aUtui1tyc6J+WxleW8gCd9fVxyXG4gICAgICAgIDxpIG56LWljb24gW256VHlwZV09XCJpc0NvbGxhcHNlID8gJ3VwJyA6ICdkb3duJ1wiPjwvaT5cclxuICAgICAgPC9hPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiAqbmdJZj1cInRpdGxlXCIgY2xhc3M9XCJ0aXRsZVwiPnt7dGl0bGV9fTwvZGl2PlxyXG48L2Zvcm0+XHJcbjxkaXYgY2xhc3M9XCJzZWFyY2gtcmVzdWx0LWxpc3RcIiAjdGFibGVDb250ZW50IFtzcGluTG9hZGluZ109XCJsb2FkaW5nXCIgSHFTcGluPlxyXG4gIDxuei10YWJsZSAqbmdJZj1cImlzQWxsTG9hZCBcIiAjYmFzaWNUYWJsZSBjbGFzcz1cIm1haW4tdGFibGVcIlxyXG4gICAgICAgICAgICBbbnpTY3JvbGxdPVwic2Nyb2xsU2l6ZVwiXHJcbiAgICAgICAgICAgIG56U2l6ZT1cIm1pZGRsZVwiXHJcbiAgICAgICAgICAgIG56Qm9yZGVyZWRcclxuICAgICAgICAgICAgW256U2hvd1BhZ2luYXRpb25dPVwic2hvd1BhZ2luYXRpb25cIlxyXG4gICAgICAgICAgICBuelNob3dTaXplQ2hhbmdlclxyXG4gICAgICAgICAgICBbbnpGcm9udFBhZ2luYXRpb25dPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICBbbnpMb2FkaW5nXT1cImxvYWRpbmdcIlxyXG4gICAgICAgICAgICBbbnpUb3RhbF09XCJ0b3RhbFwiXHJcbiAgICAgICAgICAgIFsobnpQYWdlSW5kZXgpXT1cInBhZ2VJbmRleFwiXHJcbiAgICAgICAgICAgIFsobnpQYWdlU2l6ZSldPVwicGFnZVNpemVcIlxyXG4gICAgICAgICAgICBbbnpEYXRhXT1cInRhYmxlRGF0YXNcIlxyXG4gICAgICAgICAgICAobnpQYWdlSW5kZXhDaGFuZ2UpPVwicXVlcnkoKVwiXHJcbiAgICAgICAgICAgIChuelBhZ2VTaXplQ2hhbmdlKT1cInF1ZXJ5KHRydWUpXCJcclxuICAgICAgICAgICAgW256U2hvd1RvdGFsXT1cInRvdGFsVGVtcGxhdGVcIlxyXG4gID5cclxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltzbG90MV1cIj48L25nLWNvbnRlbnQ+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzSGlkZVRhYmxlXCI+XHJcbiAgICAgIDx0aGVhZD5cclxuICAgICAgPHRyIChjb250ZXh0bWVudSk9XCJjb250ZXh0TWVudSgkZXZlbnQsbWVudSlcIiBjbGFzcz1cImhlYWRlci10clwiPlxyXG5cclxuICAgICAgICA8dGggKm5nSWY9XCJxdWVyeU9wdHMuY2hlY2tCb3g/LmlzU2hvd0NoZWNrYm94XCJcclxuICAgICAgICAgICAgW256TGVmdF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJsZWZ0LXppbmRleC1oZWFkZXJcIlxyXG4gICAgICAgICAgICBuelNob3dDaGVja2JveFxyXG4gICAgICAgICAgICBzdHlsZT1cInotaW5kZXg6IDkwIWltcG9ydGFudDtcIlxyXG4gICAgICAgICAgICBueldpZHRoPVwiMzBweFwiXHJcbiAgICAgICAgICAgIG56QWxpZ249XCJjZW50ZXJcIlxyXG4gICAgICAgICAgICBbKG56Q2hlY2tlZCldPVwiaXNBbGxEaXNwbGF5RGF0YUNoZWNrZWRcIlxyXG4gICAgICAgICAgICBbbnpJbmRldGVybWluYXRlXT1cImlzSW5kZXRlcm1pbmF0ZVwiXHJcbiAgICAgICAgICAgIChuekNoZWNrZWRDaGFuZ2UpPVwiY2hlY2tBbGwoJGV2ZW50KVwiXHJcbiAgICAgICAgPjwvdGg+XHJcbiAgICAgICAgPHRoIFtuekxlZnRdPVwidHJ1ZVwiIGNsYXNzPVwibGVmdC16aW5kZXgtaGVhZGVyXCIgKm5nSWY9XCJxdWVyeU9wdHMuaXNJbmRleFwiIG56V2lkdGg9XCIzMHB4XCIgbnpBbGlnbj1cImNlbnRlclwiPiM8L3RoPlxyXG4gICAgICAgIDx0aCBbbnpMZWZ0XT1cInRydWVcIiBjbGFzcz1cImxlZnQtemluZGV4LWhlYWRlclwiICpuZ0lmPVwicXVlcnlPcHRzLmNoZWNrQm94Py5pc1JhZGlvXCIgbnpXaWR0aD1cIjMwcHhcIlxyXG4gICAgICAgICAgICBuekFsaWduPVwiY2VudGVyXCI+I1xyXG4gICAgICAgIDwvdGg+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBxdWVyeU9wdHMudGFibGVzOyBcIj5cclxuICAgICAgICAgIDx0aCAqbmdJZj1cIml0ZW0uaXNTaG93IFwiXHJcbiAgICAgICAgICAgICAgW256U2hvd1NvcnRdPWl0ZW0uc29ydGFibGVcclxuICAgICAgICAgICAgICBuei1yZXNpemFibGVcclxuICAgICAgICAgICAgICBuelByZXZpZXdcclxuICAgICAgICAgICAgICBuekJvdW5kcz1cIndpbmRvd1wiXHJcbiAgICAgICAgICAgICAgWyhuelNvcnRPcmRlcildPVwic29ydE1hcFtpdGVtLnNvcnRLZXldXCJcclxuICAgICAgICAgICAgICAobnpTb3J0T3JkZXJDaGFuZ2UpPVwic29ydChpdGVtLnNvcnRLZXksICRldmVudClcIlxyXG4gICAgICAgICAgICAgIFtueldpZHRoXT1cIml0ZW0ud2lkdGhcIlxyXG4gICAgICAgICAgICAgIFtuek1heFdpZHRoXT1cIjI1NlwiXHJcbiAgICAgICAgICAgICAgW256TWluV2lkdGhdPVwiNjBcIlxyXG4gICAgICAgICAgICAgIFtuelJpZ2h0XT1cIml0ZW0uaXNSaWdodCA/IHRydWUgOiBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgW256TGVmdF09XCJpdGVtLmlzTGVmdCA/IHRydWUgOiBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydsZWZ0LXppbmRleC1oZWFkZXInOml0ZW0uaXNMZWZ0ID8gdHJ1ZSA6IGZhbHNlfVwiXHJcbiAgICAgICAgICAgICAgKG56UmVzaXplRW5kKT1cIm9uUmVzaXplKCRldmVudCwgaXRlbS5uYW1lKVwiPlxyXG4gICAgICAgICAgICB7e2l0ZW0ubmFtZX19PCEtLSB7d2lkdGh9OiB7IHdpZHRoOiBudW1iZXIgfSwgY29sOiBzdHJpbmctLT5cclxuICAgICAgICAgICAgPG56LXJlc2l6ZS1oYW5kbGUgbnpEaXJlY3Rpb249XCJyaWdodFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXNpemUtdHJpZ2dlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L256LXJlc2l6ZS1oYW5kbGU+XHJcbiAgICAgICAgICA8L3RoPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L3RyPlxyXG4gICAgICA8L3RoZWFkPlxyXG5cclxuXHJcbiAgICAgIDx0Ym9keSAqbmdJZj1cIiFhbGxvd0RyYWdcIj5cclxuXHJcbiAgICAgIDx0ciAqbmdGb3I9XCJsZXQgZGF0YSBvZiBiYXNpY1RhYmxlLmRhdGE7aW5kZXggYXMgaVwiIGNsYXNzPVwidC10clwiIChjbGljayk9XCJzZWxlY3RSb3coZGF0YSxpKVwiXHJcbiAgICAgICAgICBbbmdTdHlsZV09XCJ7J2NvbG9yJzppc1Nob3dDb2xvcihkYXRhKX1cIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwieydzZWxlY3RlZCc6IGkgPT0gY3VyQ2hlY2tlZH1cIiAoZGJsY2xpY2spPVwiZGJjbGlja0RhdGEoZGF0YSxpKVwiPlxyXG5cclxuICAgICAgICA8dGQgW256TGVmdF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJsZWZ0LXppbmRleFwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwicXVlcnlPcHRzLmNoZWNrQm94Py5pc1Nob3dDaGVja2JveFwiXHJcbiAgICAgICAgICAgIG56U2hvd0NoZWNrYm94XHJcbiAgICAgICAgICAgIFsobnpDaGVja2VkKV09XCJtYXBPZkNoZWNrZWRJZFtkYXRhLmlkXVwiXHJcbiAgICAgICAgICAgIChuekNoZWNrZWRDaGFuZ2UpPVwicmVmcmVzaFN0YXR1cygpXCJcclxuICAgICAgICA+PC90ZD5cclxuICAgICAgICA8dGQgW256TGVmdF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJsZWZ0LXppbmRleFwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwicXVlcnlPcHRzLmNoZWNrQm94Py5pc1JhZGlvXCIgbnpTaG93Q2hlY2tib3ggKG56Q2hlY2tlZENoYW5nZSk9XCJzZWxlY3RSb3coZGF0YSxpKVwiXHJcbiAgICAgICAgICAgIFsobnpDaGVja2VkKV09XCJtYXBPZkNoZWNrZWRJZFtkYXRhLmlkXVwiPjwvdGQ+XHJcbiAgICAgICAgPHRkIFtuekxlZnRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwicXVlcnlPcHRzLmlzSW5kZXhcIiBuekFsaWduPVwiY2VudGVyXCIgc3R5bGU9XCJwYWRkaW5nOjEycHggMDtcIiBuekJyZWFrV29yZD57e2kgKyAxfX08L3RkPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcXVlcnlPcHRzLnRhYmxlcztcIj5cclxuXHJcbiAgICAgICAgICA8dGQgW256TGVmdF09XCJpdGVtLmlzTGVmdCA/IHRydWUgOiBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydsZWZ0LXppbmRleCc6aXRlbS5pc0xlZnQgPyB0cnVlIDogZmFsc2V9XCJcclxuICAgICAgICAgICAgICBbbnpSaWdodF09XCJpdGVtLmlzUmlnaHQgPyB0cnVlIDogZmFsc2VcIlxyXG4gICAgICAgICAgICAgIG56QnJlYWtXb3JkXHJcbiAgICAgICAgICAgICAgW3Jvd1NwYW5dPVwiY2hlY2tSb3dTcGFuKGl0ZW0sZGF0YSlcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiY2hlY2tTaG93VGQoaXRlbSxpKSBcIj5cclxuICAgICAgICAgICAgPGFwcC10YWJsZS10ZCBbZGF0YV09XCJkYXRhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbaV09XCJpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAoZG9BY3Rpb25CeVJvd0FjdGlvbik9XCJkb0FjdGlvbkJ5Um93MigkZXZlbnQpXCJcclxuICAgICAgICAgICAgPjwvYXBwLXRhYmxlLXRkPlxyXG4gICAgICAgICAgPC90ZD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC90cj5cclxuXHJcbiAgICAgIDwvdGJvZHk+XHJcbiAgICAgIDx0Ym9keSAqbmdJZj1cImFsbG93RHJhZ1wiIGNka0Ryb3BMaXN0IChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcCgkZXZlbnQpXCI+XHJcbiAgICAgIDx0ciBjZGtEcmFnICpuZ0Zvcj1cImxldCBkYXRhIG9mIGJhc2ljVGFibGUuZGF0YTtpbmRleCBhcyBpXCIgY2xhc3M9XCJ0LXRyXCIgKGNsaWNrKT1cInNlbGVjdFJvdyhkYXRhLGkpXCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsnc2VsZWN0ZWQnOiBpID09IGN1ckNoZWNrZWR9XCI+XHJcbiAgICAgICAgPHRkIFtuekxlZnRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwibGVmdC16aW5kZXhcIlxyXG4gICAgICAgICAgICAqbmdJZj1cInF1ZXJ5T3B0cy5jaGVja0JveD8uaXNTaG93Q2hlY2tib3hcIlxyXG4gICAgICAgICAgICBuelNob3dDaGVja2JveFxyXG4gICAgICAgICAgICBbKG56Q2hlY2tlZCldPVwibWFwT2ZDaGVja2VkSWRbZGF0YS5pZF1cIlxyXG4gICAgICAgICAgICAobnpDaGVja2VkQ2hhbmdlKT1cInJlZnJlc2hTdGF0dXMoKVwiXHJcbiAgICAgICAgPjwvdGQ+XHJcbiAgICAgICAgPCEtLVxyXG4gICAgICAgICAgICAgICAgICA8dGQgW256TGVmdF09XCJpdGVtLmlzTGVmdCA/IHRydWUgOiBmYWxzZVwiIFtuZ0NsYXNzXT1cInsnbGVmdC16aW5kZXgnOml0ZW0uaXNMZWZ0ID8gdHJ1ZSA6IGZhbHNlfVwiICAgW256UmlnaHRdPVwiaXRlbS5pc1JpZ2h0ID8gdHJ1ZSA6IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlcnlPcHRzLmlzU2hvd0NoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgIG56U2hvd0NoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAgICAgICBbKG56Q2hlY2tlZCldPVwibWFwT2ZDaGVja2VkSWRbZGF0YS5pZF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKG56Q2hlY2tlZENoYW5nZSk9XCJyZWZyZXNoU3RhdHVzKClcIlxyXG4gICAgICAgICAgICAgICAgICA+PC90ZD5cclxuICAgICAgICAtLT5cclxuICAgICAgICA8dGQgW256TGVmdF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJsZWZ0LXppbmRleFwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwicXVlcnlPcHRzLmNoZWNrQm94Py5pc1JhZGlvXCIgbnpTaG93Q2hlY2tib3ggKG56Q2hlY2tlZENoYW5nZSk9XCJzZWxlY3RSb3coZGF0YSxpKVwiXHJcbiAgICAgICAgICAgIFsobnpDaGVja2VkKV09XCJtYXBPZkNoZWNrZWRJZFtkYXRhLmlkXVwiPjwvdGQ+XHJcbiAgICAgICAgPHRkIFtuekxlZnRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwibGVmdC16aW5kZXhcIlxyXG4gICAgICAgICAgICAqbmdJZj1cInF1ZXJ5T3B0cy5pc0luZGV4XCIgbnpBbGlnbj1cImNlbnRlclwiIHN0eWxlPVwicGFkZGluZzoxMnB4IDA7XCIgbnpCcmVha1dvcmQ+e3tpICsgMX19PC90ZD5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBxdWVyeU9wdHMudGFibGVzO1wiPlxyXG5cclxuICAgICAgICAgIDx0ZCBbbnpMZWZ0XT1cIml0ZW0uaXNMZWZ0ID8gdHJ1ZSA6IGZhbHNlXCJcclxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2xlZnQtemluZGV4JzppdGVtLmlzTGVmdCA/IHRydWUgOiBmYWxzZX1cIlxyXG4gICAgICAgICAgICAgIFtuelJpZ2h0XT1cIml0ZW0uaXNSaWdodCA/IHRydWUgOiBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgbnpCcmVha1dvcmRcclxuICAgICAgICAgICAgICBbcm93U3Bhbl09XCJjaGVja1Jvd1NwYW4oaXRlbSxkYXRhKVwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJjaGVja1Nob3dUZChpdGVtLGkpIFwiPlxyXG4gICAgICAgICAgICA8YXBwLXRhYmxlLXRkIFtkYXRhXT1cImRhdGFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpXT1cImlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChkb0FjdGlvbkJ5Um93QWN0aW9uKT1cImRvQWN0aW9uQnlSb3cyKCRldmVudClcIlxyXG4gICAgICAgICAgICA+PC9hcHAtdGFibGUtdGQ+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L3RyPlxyXG4gICAgICA8L3Rib2R5PlxyXG5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgI3RvdGFsVGVtcGxhdGUgbGV0LXRvdGFsPuWFsSB7eyB0b3RhbCB9fSDmnaHorrDlvZU8L25nLXRlbXBsYXRlPlxyXG4gIDwvbnotdGFibGU+XHJcbiAgPG56LWRyb3Bkb3duLW1lbnUgI21lbnU9XCJuekRyb3Bkb3duTWVudVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInRhYmVsLWNvbHVubW5cIj5cclxuICAgICAgPG56LWNoZWNrYm94LXdyYXBwZXIgc3R5bGU9XCJ3aWR0aDogMTAwJTttYXJnaW4tdG9wOiAzMHB4O1wiIChuek9uQ2hhbmdlKT1cImxvZygkZXZlbnQpXCI+XHJcbiAgICAgICAgPGRpdiBuei1yb3c+XHJcbiAgICAgICAgICA8ZGl2IG56LWNvbCBuelNwYW49XCIyNFwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIHF1ZXJ5T3B0cy50YWJsZXNcIj5cclxuICAgICAgICAgICAgPGxhYmVsIG56LWNoZWNrYm94IG56VmFsdWU9XCJ7e2l0ZW0ua2V5fX1cIiBbbmdNb2RlbF09XCJpdGVtLmlzU2hvd1wiPnt7aXRlbS5uYW1lfX08L2xhYmVsPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbnotY2hlY2tib3gtd3JhcHBlcj5cclxuICAgICAgPGRpdiBjbGFzcz1cInRhYmVsLWNvbHVubW4taGVhZGVyXCI+6K+36YCJ5oup5YiX6KGo5pi+56S65YaF5a65PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L256LWRyb3Bkb3duLW1lbnU+XHJcbjwvZGl2PlxyXG5cclxuIl19