@libs-ui/services-diagram-draw 0.2.356-41 → 0.2.356-43

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.
@@ -444,15 +444,13 @@ export class LibsUiDiagramDrawService {
444
444
  return undefined;
445
445
  }
446
446
  const labelDiv = document.createElement('div');
447
- labelDiv.className = 'branch-label';
447
+ labelDiv.className = `branch-label ${branch.labelClassName || 'libs-ui-font-h7r'}`;
448
448
  labelDiv.textContent = branch.label || '';
449
449
  labelDiv.style.position = 'absolute';
450
450
  labelDiv.style.padding = '2px 7px';
451
451
  labelDiv.style.borderRadius = '10px';
452
452
  labelDiv.style.backgroundColor = branch.labelBgColor || '#f3f4f6';
453
- labelDiv.style.fontSize = '11px';
454
- labelDiv.style.fontFamily = 'system-ui, -apple-system, sans-serif';
455
- labelDiv.style.color = '#374151';
453
+ labelDiv.style.color = branch.labelColor || '#374151';
456
454
  labelDiv.style.whiteSpace = 'nowrap';
457
455
  labelDiv.style.zIndex = '2';
458
456
  labelDiv.style.pointerEvents = 'none';
@@ -717,4 +715,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
717
715
  providedIn: 'root',
718
716
  }]
719
717
  }] });
720
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhZ3JhbS1kcmF3LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL3NlcnZpY2VzL2RpYWdyYW0tZHJhdy9zcmMvZGlhZ3JhbS1kcmF3LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBS2xELE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25GLE9BQU8sRUFBRSwrQ0FBK0MsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ2pILE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDOztBQUVoRyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQWdCO0lBQ3pDLDZDQUE2QyxFQUFFLEVBQUU7SUFDakQsc0JBQXNCLEVBQUUsRUFBRTtJQUMxQiw2QkFBNkIsRUFBRSxFQUFFO0lBQ2pDLHFDQUFxQyxFQUFFLEVBQUU7SUFDekMsOEJBQThCLEVBQUUsR0FBRztJQUNuQyxvQkFBb0IsRUFBRSxFQUFFO0lBQ3hCLHdCQUF3QixFQUFFLFFBQVE7SUFDbEMsd0JBQXdCLEVBQUUsR0FBRztJQUM3Qiw4Q0FBOEMsRUFBRSxFQUFFO0lBRWxELGdCQUFnQixFQUFFLEVBQUU7SUFDcEIsZUFBZSxFQUFFLEVBQUU7SUFDbkIsb0JBQW9CLEVBQUUsRUFBRTtJQUN4QiwwQkFBMEIsRUFBRSxDQUFDO0lBRTdCLGlCQUFpQixFQUFFLE1BQU07SUFDekIscUJBQXFCLEVBQUUsVUFBVTtJQUNqQyxxQkFBcUIsRUFBRSxHQUFHO0lBQzFCLHNCQUFzQixFQUFFLEVBQUU7SUFFMUIsaUJBQWlCLEVBQUUs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LGlCQUFpQixDQUFDO1FBQ25ELE1BQU0sQ0FBQyxHQUFHLG9CQUFvQixFQUFFLENBQUMsc0JBQXNCLENBQUM7UUFFeEQsMkNBQTJDO1FBQzNDLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUM7UUFDbEMsSUFBSSxFQUFFLEVBQUUsVUFBVSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2pDLE9BQU8sQ0FBQyxFQUFFLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLGNBQWMsSUFBSSxvQkFBb0IsRUFBRSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25ILENBQUM7UUFDRCw0REFBNEQ7UUFDNUQsT0FBTyxDQUFDLE1BQU0sQ0FBQyx1QkFBdUIsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0QsQ0FBQzt3R0E5dUJVLHdCQUF3Qjs0R0FBeEIsd0JBQXdCLGNBRnZCLE1BQU07OzRGQUVQLHdCQUF3QjtrQkFIcEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRSZWYsIEluamVjdGFibGUsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSURyYXdMaW5lRGF0YUlucHV0IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1kcmF3LWxpbmUnO1xuaW1wb3J0IHsgc2V0U3R5bGVzRWxlbWVudCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IElSdWxlQ29ubmVjdGFibGUsIFREcm9wWm9uZUNhbkRyb3BGbiB9IGZyb20gJy4vaW50ZXJmYWNlcy9jYW52YXMuaW50ZXJmYWNlJztcbmltcG9ydCB7IElEYXRhRGlhZ3JhbUNvbmZpZ1N2ZyB9IGZyb20gJy4vaW50ZXJmYWNlcy9jb29yZGluYXRlcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUNhbnZhc0NvbmZpZywgSUN1c3RvbUNhbnZhc0NvbmZpZywgSURpYWdyYW1FbGVtZW50LCBJRGlhZ3JhbUVsZW1lbnRCcmFuY2gsIElEcm9wWm9uZUluZGljYXRvclN0eWxlIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2RpYWdyYW0uaW50ZXJmYWNlJztcbmltcG9ydCB7IElOYXZpZ2F0aW9uTGluZVN0eWxlQ29uZmlnIH0gZnJvbSAnLi9pbnRlcmZhY2VzL25hdmlnYXRpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IE1vTGliRGlhZ3JhbUNhbGN1bGF0b3JDb29yZGluYXRlc1V0aWwgfSBmcm9tICcuL3V0aWxzL2NhbGN1bGF0b3ItZWxlbWVudC51dGlsJztcbmltcG9ydCB7IGFwcGx5RWxlbWVudFN0eWxlLCBzZXRBdHRyaWJ1dGVTdmdBbmRBcHBlbmQgfSBmcm9tICcuL3V0aWxzL2RpYWdyYW0udXRpbCc7XG5pbXBvcnQgeyBNb0xpYkRpYWdyYW1Ib3Jpem9udGFsQ2FsY3VsYXRvckNvb3JkaW5hdGVzVXRpbCB9IGZyb20gJy4vdXRpbHMvaG9yaXpvbnRhbC9jYWxjdWxhdG9yLWNvb3JkaW5hdGVzLnV0aWwnO1xuaW1wb3J0IHsgTGlic1VpRGlhZ3JhbURyYXdOYXZpZ2F0aW9uVXRpbCB9IGZyb20gJy4vdXRpbHMvbmF2aWdhdGlvbi9idWlsZC1uYXZpZ2F0aW9uLWRhdGEudXRpbCc7XG5cbmNvbnN0IGNhbnZhc0NvbmZpZyA9IHNpZ25hbDxJQ2FudmFzQ29uZmlnPih7XG4gIEVMRU1FTlRfV0lEVEhfREVGQVVMVF9CUkFOQ0hfV0hFTl9OT1RfRUxFTUVOVDogNjAsXG4gIEVMRU1FTlRfTUFSR0lOX0RFRkFVTFQ6IDYwLFxuICBFTEVNRU5UX01BUkdJTl9ERUZBVUxUX0JSQU5DSDogMTYsXG4gIEVMRU1FTlRfTUFSR0lOX0JFVFdFRU5fQlJBTkNIX0RFRkFVTFQ6IDYwLFxuICBERUZBVUxUX0JSQU5DSF9XSEVOX05PX0VMRU1FTlQ6IDEwMCxcbiAgRUxFTUVOVF9IRUlHSFRfQ1VSVkU6IDEwLFxuICBFTEVNRU5UX1NWR19TVFJPS0VfQ09MT1I6ICc5Y2EyYWQnLFxuICBFTEVNRU5UX1NWR19TVFJPS0VfV0lEVEg6ICcxJyxcbiAgRUxFTUVOVF9NQVJHSU5fREVGQVVMVF9CUkFOQ0hfVE9fRUxFTUVOVF9GSVJTVDogNzgsXG5cbiAgRElTVEFOQ0VfVE9fV0FJVDogMzAsXG4gIFdBSVRfVE9fRUxFTUVOVDogNTAsXG4gIEVMRU1FTlRfV0FJVF9ERUZBVUxUOiAyOCxcbiAgRElTVEFOQ0VfV0FJVF9UT19ORVhUX0xJTkU6IDQsXG5cbiAgVFlQRV9FTEVNRU5UX0VYSVQ6ICdFWElUJyxcbiAgVFlQRV9FTEVNRU5UX1dPUktGTE9XOiAnV09SS0ZMT1cnLFxuICBXSURUSF9FTEVNRU5UX0RFRkFVTFQ6IDE2NSxcbiAgSEVJR0hUX0VMRU1FTlRfREVGQVVMVDogNDgsXG5cbiAgQUREX0lDT05fRElBTUVURVI6IDI0LFxufSk7XG5cbmV4cG9ydCBjb25zdCBjYW52YXNDb25maWdSZWFkb25seSA9IGNhbnZhc0NvbmZpZy5hc1JlYWRvbmx5KCk7XG5leHBvcnQgY29uc3Qgc3RvcmVEYXRhRGVmYXVsdCA9IHtcbiAgcG9zaXRpb25NYXhMZWZ0OiAwLFxuICBwb3NpdGlvbk1heFRvcDogMCxcbiAgd2lkdGhIZWlnaHRTdmdDYW52YXM6IHsgaGVpZ2h0U3ZnOiB3aW5kb3cuaW5uZXJIZWlnaHQsIHdpZHRoU3ZnOiB3aW5kb3cuaW5uZXJXaWR0aCB9LFxufTtcbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlEaWFncmFtRHJhd1NlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZ0NhbnZhcyA9IHNpZ25hbDxJQ3VzdG9tQ2FudmFzQ29uZmlnIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICByZWFkb25seSBvcmllbnRhdGlvbiA9IHNpZ25hbDwndmVydGljYWwnIHwgJ2hvcml6b250YWwnPigndmVydGljYWwnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50U3ZnID0gc2lnbmFsPFNWR1BhdGhFbGVtZW50IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIHJlYWRvbmx5IGF0dHJpYnV0ZVN2Z0QgPSBzaWduYWw8c3RyaW5nPignJyk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHByaXZhdGUgcmVhZG9ubHkgY29tcG9uZW50UmVmcyA9IHNpZ25hbDxDb21wb25lbnRSZWY8YW55PltdPihbXSk7XG5cbiAgLy8gVmlydHVhbGl6YXRpb24gVHJhY2tpbmdcbiAgcHJpdmF0ZSB2aXJ0dWFsVmlld3BvcnQ/OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9O1xuICBwcml2YXRlIHZpcnR1YWxGbGF0RWxlbWVudHM6IHsgZWxlbWVudDogSURpYWdyYW1FbGVtZW50OyBicmFuY2g/OiBJRGlhZ3JhbUVsZW1lbnRCcmFuY2g7IHNob3VsZFNob3dBcnJvdzogYm9vbGVhbjsgaXNPdGhlckNvbmZpZzogYm9vbGVhbjsgcGFyZW50SWQ/OiBzdHJpbmcgfCBudW1iZXIgfVtdID0gW107XG4gIHByaXZhdGUgdmlydHVhbEZsYXRCcmFuY2hlczogSURpYWdyYW1FbGVtZW50QnJhbmNoW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSB2aXJ0dWFsTm9kZXNNYXAgPSBuZXcgTWFwPHN0cmluZywgeyBjb21wb25lbnQ/OiBDb21wb25lbnRSZWY8YW55PjsgYXJyb3c/OiBIVE1MRWxlbWVudDsgbGFiZWw/OiBIVE1MRWxlbWVudCB9PigpO1xuXG4gIHB1YmxpYyB1cGRhdGVWaWV3cG9ydCh2cDogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSkge1xuICAgIHRoaXMudmlydHVhbFZpZXdwb3J0ID0gdnA7XG4gICAgaWYgKHRoaXMuY29uZmlnQ2FudmFzKCk/LnVzZVZpcnR1YWxpemF0aW9uVGVtcGxhdGUpIHtcbiAgICAgIHRoaXMuYXBwbHlWaXJ0dWFsaXphdGlvbkRpZmYoKTtcbiAgICB9XG4gIH1cblxuICBzZXQgc2V0Q29uZmlnKGNvbmZpZzogSUN1c3RvbUNhbnZhc0NvbmZpZykge1xuICAgIHRoaXMuY29uZmlnQ2FudmFzLnNldChjb25maWcpO1xuICB9XG5cbiAgc2V0IHNldENvbmZpZ0NhbnZhcyhjb25maWc6IFBhcnRpYWw8SUNhbnZhc0NvbmZpZz4pIHtcbiAgICBpZiAoIWNvbmZpZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNhbnZhc0NvbmZpZy51cGRhdGUoKGN1cnJlbnQpID0+ICh7IC4uLmN1cnJlbnQsIC4uLmNvbmZpZyB9KSk7XG4gIH1cblxuICBjb25maWdYWUVsZW1lbnRzKGVsZW1lbnRzOiBBcnJheTxJRGlhZ3JhbUVsZW1lbnQ+LCB1cGRhdGVTVkc/OiBib29sZWFuLCBwb3NpdGlvblg/OiBudW1iZXIpIHtcbiAgICBjb25zdCBzdG9yZURhdGEgPSB0aGlzLmNvbmZpZ0NhbnZhcygpPy5zdG9yZURhdGFEZWZpbmUgPz8gc3RvcmVEYXRhRGVmYXVsdDtcbiAgICBjb25zdCBtYXhMZWZ0T3JpZ2luID0gc3RvcmVEYXRhLnBvc2l0aW9uTWF4TGVmdDtcbiAgICBjb25zdCBtYXhUb3BPcmlnaW4gPSBzdG9yZURhdGEucG9zaXRpb25NYXhUb3AgPz8gMDtcblxuICAgIGlmICh0aGlzLm9yaWVudGF0aW9uKCkgPT09ICdob3Jpem9udGFsJykge1xuICAgICAgTW9MaWJEaWFncmFtSG9yaXpvbnRhbENhbGN1bGF0b3JDb29yZGluYXRlc1V0aWwuc2V0WFlFbGVtZW50cyhlbGVtZW50cywgc3RvcmVEYXRhLCBwb3NpdGlvblgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBNb0xpYkRpYWdyYW1DYWxjdWxhdG9yQ29vcmRpbmF0ZXNVdGlsLnNldFhZRWxlbWVudHMoZWxlbWVudHMsIHN0b3JlRGF0YSwgcG9zaXRpb25YKTtcbiAgICB9XG5cbiAgICBjb25zdCBtYXhMZWZ0TmV3ID0gc3RvcmVEYXRhLnBvc2l0aW9uTWF4TGVmdDtcbiAgICBjb25zdCBtYXhUb3BOZXcgPSBzdG9yZURhdGEucG9zaXRpb25NYXhUb3AgPz8gMDtcblxuICAgIGlmICghdGhpcy5lbGVtZW50U3ZnKCkpIHtcbiAgICAgIHRoaXMuZWxlbWVudFN2Zy5zZXQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdwYXRoJykpO1xuICAgIH1cblxuICAgIGlmICghdXBkYXRlU1ZHICYmIHRoaXMuY29uZmlnQ2FudmFzKCk/LnN2Z0NvbnRhaW5lciAmJiB0aGlzLmVsZW1lbnRTdmcoKSkge1xuICAgICAgc2V0QXR0cmlidXRlU3ZnQW5kQXBwZW5kKHRoaXMuY29uZmlnQ2FudmFzKCk/LnN2Z0NvbnRhaW5lciwgdGhpcy5lbGVtZW50U3ZnKCksICcnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcmllbnRhdGlvbigpID09PSAnaG9yaXpvbnRhbCcgJiYgbWF4VG9wT3JpZ2luICE9PSBtYXhUb3BOZXcpIHtcbiAgICAgIHRoaXMudXBkYXRlUG9zaXRpb25FbGVtZW50cyhtYXhUb3BOZXcsIGVsZW1lbnRzLCBzdG9yZURhdGEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcmllbnRhdGlvbigpID09PSAndmVydGljYWwnICYmIG1heExlZnRPcmlnaW4gIT09IG1heExlZnROZXcpIHtcbiAgICAgIHRoaXMudXBkYXRlUG9zaXRpb25FbGVtZW50cyhtYXhMZWZ0TmV3LCBlbGVtZW50cywgc3RvcmVEYXRhKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5lbGVtZW50U3ZnKCkpIHtcbiAgICAgIHRoaXMuYXR0cmlidXRlU3ZnRC5zZXQoJycpO1xuICAgICAgdGhpcy5idWlsZFN2Z0VsZW1lbnQoZWxlbWVudHMpO1xuICAgICAgdGhpcy5lbGVtZW50U3ZnKCk/LnNldEF0dHJpYnV0ZSgnZCcsIHRoaXMuYXR0cmlidXRlU3ZnRCgpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVBvc2l0aW9uRWxlbWVudHMocG9zaXRpb25PZmZzZXQ6IG51bWJlciwgZWxlbWVudHM6IEFycmF5PElEaWFncmFtRWxlbWVudD4sIGNvbmZpZzogSURhdGFEaWFncmFtQ29uZmlnU3ZnKSB7XG4gICAgaWYgKHBvc2l0aW9uT2Zmc2V0ICYmIHBvc2l0aW9uT2Zmc2V0IDwgMCkge1xuICAgICAgcG9zaXRpb25PZmZzZXQgPSBwb3NpdGlvbk9mZnNldCAqIC0xICsgMjAwOyAvLyAxMDAgbMOgIGtob+G6o25nIGPDoWNoIGPDoWNoIGJpw6puXG4gICAgfVxuICAgIGlmICh0aGlzLm9yaWVudGF0aW9uKCkgPT09ICdob3Jpem9udGFsJykge1xuICAgICAgTW9MaWJEaWFncmFtSG9yaXpvbnRhbENhbGN1bGF0b3JDb29yZGluYXRlc1V0aWwuc2V0WFlFbGVtZW50cyhlbGVtZW50cywgeyAuLi5jb25maWcsIHVwZGF0ZVNWRzogdHJ1ZSB9LCBwb3NpdGlvbk9mZnNldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIE1vTGliRGlhZ3JhbUNhbGN1bGF0b3JDb29yZGluYXRlc1V0aWwuc2V0WFlFbGVtZW50cyhlbGVtZW50cywgeyAuLi5jb25maWcsIHVwZGF0ZVNWRzogdHJ1ZSB9LCBwb3NpdGlvbk9mZnNldCk7XG4gICAgfVxuICAgIGlmICghdGhpcy5lbGVtZW50U3ZnKCkpIHtcbiAgICAgIHRoaXMuZWxlbWVudFN2Zy5zZXQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdwYXRoJykpO1xuICAgIH1cbiAgICBpZiAodGhpcy5lbGVtZW50U3ZnKCkpIHtcbiAgICAgIHRoaXMuYXR0cmlidXRlU3ZnRC5zZXQoJycpO1xuICAgICAgdGhpcy5idWlsZFN2Z0VsZW1lbnQoZWxlbWVudHMpO1xuICAgICAgdGhpcy5lbGVtZW50U3ZnKCk/LnNldEF0dHJpYnV0ZSgnZCcsIHRoaXMuYXR0cmlidXRlU3ZnRCgpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU3ZnRWxlbWVudChlbGVtZW50czogQXJyYXk8SURpYWdyYW1FbGVtZW50Pikge1xuICAgIGVsZW1lbnRzLmZvckVhY2goKGN1cnJlbnRFbGVtZW50KSA9PiB7XG4gICAgICBpZiAoY3VycmVudEVsZW1lbnQuYXR0cmlidXRlU3ZnRCkge1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZVN2Z0QudXBkYXRlKChwcmV2KSA9PiBgJHtwcmV2ID8/ICcnfSAke2N1cnJlbnRFbGVtZW50LmF0dHJpYnV0ZVN2Z0R9YCk7XG4gICAgICB9XG4gICAgICBpZiAoY3VycmVudEVsZW1lbnQubm9kZU90aGVyQ29uZmlnPy5hdHRyaWJ1dGVTdmdEKSB7XG4gICAgICAgIHRoaXMuYXR0cmlidXRlU3ZnRC51cGRhdGUoKHByZXYpID0+IGAke3ByZXYgPz8gJyd9ICR7Y3VycmVudEVsZW1lbnQubm9kZU90aGVyQ29uZmlnPy5hdHRyaWJ1dGVTdmdEfWApO1xuICAgICAgfVxuICAgICAgaWYgKCFjdXJyZW50RWxlbWVudC5icmFuY2hlcz8ubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY3VycmVudEVsZW1lbnQuYnJhbmNoZXMuZm9yRWFjaCgoYnJhbmNoKSA9PiB7XG4gICAgICAgIGlmIChicmFuY2guYXR0cmlidXRlU3ZnRCkge1xuICAgICAgICAgIHRoaXMuYXR0cmlidXRlU3ZnRC51cGRhdGUoKHByZXYpID0+IGAke3ByZXYgPz8gJyd9ICR7YnJhbmNoLmF0dHJpYnV0ZVN2Z0R9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJyYW5jaC5ub2RlT3RoZXJDb25maWc/LmF0dHJpYnV0ZVN2Z0QpIHtcbiAgICAgICAgICB0aGlzLmF0dHJpYnV0ZVN2Z0QudXBkYXRlKChwcmV2KSA9PiBgJHtwcmV2ID8/ICcnfSAke2JyYW5jaC5ub2RlT3RoZXJDb25maWc/LmF0dHJpYnV0ZVN2Z0R9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWJyYW5jaC5lbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJ1aWxkU3ZnRWxlbWVudChicmFuY2guZWxlbWVudHMpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVyIHThuqV0IGPhuqMgbm9kZXMgdOG7qyBlbGVtZW50cyBhcnJheVxuICAgKi9cbiAgcmVuZGVyTm9kZXMoZWxlbWVudHM6IEFycmF5PElEaWFncmFtRWxlbWVudD4pIHtcbiAgICBpZiAodGhpcy5jb25maWdDYW52YXMoKT8udXNlVmlydHVhbGl6YXRpb25UZW1wbGF0ZSkge1xuICAgICAgdGhpcy5leHRyYWN0VmlydHVhbEVsZW1lbnRzKGVsZW1lbnRzKTtcbiAgICAgIHRoaXMuYXBwbHlWaXJ0dWFsaXphdGlvbkRpZmYoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNsZWFyTm9kZXMoKTtcbiAgICB0aGlzLnJlbmRlckVsZW1lbnRzUmVjdXJzaXZlbHkoZWxlbWVudHMsIHRydWUpO1xuICAgIHRoaXMucmVuZGVyQnJhbmNoTGFiZWxzKGVsZW1lbnRzKTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdFZpcnR1YWxFbGVtZW50cyhlbGVtZW50czogSURpYWdyYW1FbGVtZW50W10pIHtcbiAgICB0aGlzLnZpcnR1YWxGbGF0RWxlbWVudHMgPSBbXTtcbiAgICB0aGlzLnZpcnR1YWxGbGF0QnJhbmNoZXMgPSBbXTtcbiAgICBjb25zdCBzY2FuID0gKGxpc3Q6IElEaWFncmFtRWxlbWVudFtdLCBicmFuY2g/OiBJRGlhZ3JhbUVsZW1lbnRCcmFuY2gsIGlzRmlyc3RMZXZlbCA9IHRydWUpID0+IHtcbiAgICAgIGxpc3QuZm9yRWFjaCgoZWwsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHNob3VsZFNob3dBcnJvdyA9ICEoaXNGaXJzdExldmVsICYmIGluZGV4ID09PSAwKTtcbiAgICAgICAgdGhpcy52aXJ0dWFsRmxhdEVsZW1lbnRzLnB1c2goeyBlbGVtZW50OiBlbCwgYnJhbmNoLCBpc090aGVyQ29uZmlnOiBmYWxzZSwgc2hvdWxkU2hvd0Fycm93LCBwYXJlbnRJZDogZWwuaWQgfSk7XG4gICAgICAgIGlmIChlbC5ub2RlT3RoZXJDb25maWcpIHRoaXMudmlydHVhbEZsYXRFbGVtZW50cy5wdXNoKHsgZWxlbWVudDogZWwubm9kZU90aGVyQ29uZmlnLCBicmFuY2gsIGlzT3RoZXJDb25maWc6IHRydWUsIHNob3VsZFNob3dBcnJvdzogZmFsc2UsIHBhcmVudElkOiBlbC5pZCB9KTtcbiAgICAgICAgaWYgKGVsLmJyYW5jaGVzKSB7XG4gICAgICAgICAgZWwuYnJhbmNoZXMuZm9yRWFjaCgoYiwgYkluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoIWIubGFiZWwpIGIubGFiZWwgPSBgTmjDoW5oICR7YkluZGV4ICsgMX1gO1xuICAgICAgICAgICAgdGhpcy52aXJ0dWFsRmxhdEJyYW5jaGVzLnB1c2goYik7XG4gICAgICAgICAgICBpZiAoYi5lbGVtZW50cykgc2NhbihiLmVsZW1lbnRzLCBiLCBmYWxzZSk7XG4gICAgICAgICAgICBpZiAoYi5ub2RlT3RoZXJDb25maWcpIHRoaXMudmlydHVhbEZsYXRFbGVtZW50cy5wdXNoKHsgZWxlbWVudDogYi5ub2RlT3RoZXJDb25maWcsIGJyYW5jaDogYiwgaXNPdGhlckNvbmZpZzogdHJ1ZSwgc2hvdWxkU2hvd0Fycm93OiBmYWxzZSwgcGFyZW50SWQ6ICdicmFuY2hfJyArIGJJbmRleCArICdfJyArIGVsLmlkIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHNjYW4oZWxlbWVudHMsIHVuZGVmaW5lZCwgdHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5VmlydHVhbGl6YXRpb25EaWZmKCkge1xuICAgIGNvbnN0IHZwID0gdGhpcy52aXJ0dWFsVmlld3BvcnQ7XG4gICAgaWYgKCF2cCkgcmV0dXJuO1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnQ2FudmFzKCk7XG4gICAgY29uc3QgY29udGFpbmVyID0gY29uZmlnPy5ub2Rlc0NvbnRhaW5lcj8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoIWNvbnRhaW5lciB8fCAhY29uZmlnKSByZXR1cm47XG5cbiAgICBjb25zdCBidWZmZXIgPSAzMDA7XG4gICAgY29uc3QgdmlzaWJsZUlkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgdGhpcy52aXJ0dWFsRmxhdEVsZW1lbnRzLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IGVsID0gaXRlbS5lbGVtZW50O1xuICAgICAgaWYgKGVsLnRyYW5zbGF0ZVggPT09IHVuZGVmaW5lZCB8fCBlbC50cmFuc2xhdGVZID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgICAgIGlmIChlbC50cmFuc2xhdGVYICsgKGVsLnNwZWNpZmljX3dpZHRoIHx8IDE2NSkgPCB2cC54IC0gYnVmZmVyIHx8IGVsLnRyYW5zbGF0ZVggPiB2cC54ICsgdnAud2lkdGggKyBidWZmZXIgfHwgZWwudHJhbnNsYXRlWSArIChlbC5zcGVjaWZpY19oZWlnaHQgfHwgNDgpIDwgdnAueSAtIGJ1ZmZlciB8fCBlbC50cmFuc2xhdGVZID4gdnAueSArIHZwLmhlaWdodCArIGJ1ZmZlcikgcmV0dXJuO1xuXG4gICAgICBjb25zdCBpZCA9IFN0cmluZyhpdGVtLnBhcmVudElkKSArIChpdGVtLmlzT3RoZXJDb25maWcgPyAnX290aGVyJyA6ICcnKTtcbiAgICAgIHZpc2libGVJZHMuYWRkKGlkKTtcblxuICAgICAgaWYgKCF0aGlzLnZpcnR1YWxOb2Rlc01hcC5oYXMoaWQpKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudFR5cGUgPSBpdGVtLmlzT3RoZXJDb25maWcgPyBjb25maWcubm9kZU90aGVyQ29uZmlnQ29tcG9uZW50VHlwZSA6IGNvbmZpZy5ub2RlQ29tcG9uZW50VHlwZTtcbiAgICAgICAgaWYgKGNvbXBvbmVudFR5cGUgJiYgY29uZmlnLnZpZXdDb250YWluZXJSZWYpIHtcbiAgICAgICAgICBjb25zdCByZWYgPSBjb25maWcudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50VHlwZSk7XG4gICAgICAgICAgcmVmLnNldElucHV0KCdlbGVtZW50JywgZWwpO1xuICAgICAgICAgIGlmIChpdGVtLmJyYW5jaCkgcmVmLnNldElucHV0KCdicmFuY2gnLCBpdGVtLmJyYW5jaCk7XG4gICAgICAgICAgcmVmLnNldElucHV0KCdvcmllbnRhdGlvbicsIHRoaXMub3JpZW50YXRpb24oKSk7XG5cbiAgICAgICAgICBjb25zdCBkb21FbCA9IHJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgIGRvbUVsLmNsYXNzTGlzdC5hZGQoJ2RpYWdyYW0tbm9kZS1keW5hbWljJyk7XG4gICAgICAgICAgYXBwbHlFbGVtZW50U3R5bGUoZG9tRWwsIGVsKTtcbiAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZG9tRWwpO1xuXG4gICAgICAgICAgbGV0IGFycm93OiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZDtcbiAgICAgICAgICBpZiAoaXRlbS5zaG91bGRTaG93QXJyb3cgJiYgIWl0ZW0uaXNPdGhlckNvbmZpZykge1xuICAgICAgICAgICAgYXJyb3cgPSB0aGlzLmNyZWF0ZUFycm93SW5kaWNhdG9yKGVsLCBjb250YWluZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnZpcnR1YWxOb2Rlc01hcC5zZXQoaWQsIHsgY29tcG9uZW50OiByZWYsIGFycm93IH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjYWNoZSA9IHRoaXMudmlydHVhbE5vZGVzTWFwLmdldChpZCk7XG4gICAgICAgIGlmIChjYWNoZSkge1xuICAgICAgICAgIGlmIChjYWNoZS5jb21wb25lbnQpIGFwcGx5RWxlbWVudFN0eWxlKGNhY2hlLmNvbXBvbmVudC5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LCBlbCk7XG4gICAgICAgICAgaWYgKGNhY2hlLmFycm93KSB7XG4gICAgICAgICAgICBjb25zdCBhcnJvd1NpemUgPSAxNjtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVXaWR0aCA9IGVsLnNwZWNpZmljX3dpZHRoID8/IDE2NTtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVIZWlnaHQgPSBlbC5zcGVjaWZpY19oZWlnaHQgPz8gNDg7XG4gICAgICAgICAgICBpZiAodGhpcy5vcmllbnRhdGlvbigpID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgICAgICAgICAgY2FjaGUuYXJyb3cuaW5uZXJIVE1MID0gYFxuICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiJHthcnJvd1NpemV9XCIgaGVpZ2h0PVwiJHthcnJvd1NpemV9XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOCA0TDE2IDhMOCAxMlpcIiBmaWxsPVwiIzljYTNhZlwiLz5cbiAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICBgO1xuICAgICAgICAgICAgICBjYWNoZS5hcnJvdy5zdHlsZS5sZWZ0ID0gYCR7ZWwudHJhbnNsYXRlWCAtIGFycm93U2l6ZX1weGA7XG4gICAgICAgICAgICAgIGNhY2hlLmFycm93LnN0eWxlLnRvcCA9IGAke2VsLnRyYW5zbGF0ZVkgKyBub2RlSGVpZ2h0IC8gMiAtIGFycm93U2l6ZSAvIDJ9cHhgO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY2FjaGUuYXJyb3cuaW5uZXJIVE1MID0gYFxuICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiJHthcnJvd1NpemV9XCIgaGVpZ2h0PVwiJHthcnJvd1NpemV9XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOCAxNkw0IDEySDEyTDggMTZaXCIgZmlsbD1cIiM5Y2EzYWZcIi8+XG4gICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgYDtcbiAgICAgICAgICAgICAgY2FjaGUuYXJyb3cuc3R5bGUubGVmdCA9IGAke2VsLnRyYW5zbGF0ZVggKyBub2RlV2lkdGggLyAyIC0gYXJyb3dTaXplIC8gMn1weGA7XG4gICAgICAgICAgICAgIGNhY2hlLmFycm93LnN0eWxlLnRvcCA9IGAke2VsLnRyYW5zbGF0ZVkgLSBhcnJvd1NpemV9cHhgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy52aXJ0dWFsRmxhdEJyYW5jaGVzLmZvckVhY2goKGJyYW5jaCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHggPSBicmFuY2guc3BlY2lmaWNfc3RhcnRfYnJhbmNoX3g7XG4gICAgICBjb25zdCB5ID0gYnJhbmNoLnNwZWNpZmljX3N0YXJ0X2JyYW5jaF95O1xuICAgICAgaWYgKHggPT09IHVuZGVmaW5lZCB8fCB5ID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgICAgIGlmICh4IDwgdnAueCAtIGJ1ZmZlciB8fCB4ID4gdnAueCArIHZwLndpZHRoICsgYnVmZmVyIHx8IHkgPCB2cC55IC0gYnVmZmVyIHx8IHkgPiB2cC55ICsgdnAuaGVpZ2h0ICsgYnVmZmVyKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IGlkID0gJ2JyYW5jaF8nICsgaW5kZXggKyAnXycgKyBNYXRoLnJvdW5kKHgpICsgJ18nICsgTWF0aC5yb3VuZCh5KTtcbiAgICAgIHZpc2libGVJZHMuYWRkKGlkKTtcblxuICAgICAgaWYgKCF0aGlzLnZpcnR1YWxOb2Rlc01hcC5oYXMoaWQpKSB7XG4gICAgICAgIGNvbnN0IGxhYmVsRGl2ID0gdGhpcy5jcmVhdGVCcmFuY2hMYWJlbChicmFuY2gpO1xuICAgICAgICBpZiAobGFiZWxEaXYpIHRoaXMudmlydHVhbE5vZGVzTWFwLnNldChpZCwgeyBsYWJlbDogbGFiZWxEaXYgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjYWNoZSA9IHRoaXMudmlydHVhbE5vZGVzTWFwLmdldChpZCk7XG4gICAgICAgIGlmIChjYWNoZT8ubGFiZWwpIHtcbiAgICAgICAgICBjb25zdCBsYWJlbERpdiA9IGNhY2hlLmxhYmVsO1xuICAgICAgICAgIGNvbnN0IGxhYmVsUmVjdCA9IGxhYmVsRGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgIGNvbnN0IGxhYmVsVyA9IGxhYmVsUmVjdC53aWR0aCB8fCBsYWJlbERpdi5vZmZzZXRXaWR0aDtcbiAgICAgICAgICBjb25zdCBsYWJlbEggPSBsYWJlbFJlY3QuaGVpZ2h0IHx8IGxhYmVsRGl2Lm9mZnNldEhlaWdodDtcbiAgICAgICAgICBpZiAodGhpcy5vcmllbnRhdGlvbigpID09PSAndmVydGljYWwnKSB7XG4gICAgICAgICAgICBsYWJlbERpdi5zdHlsZS5sZWZ0ID0gYCR7eCAtIGxhYmVsVyAvIDIgLSA0fXB4YDtcbiAgICAgICAgICAgIGxhYmVsRGl2LnN0eWxlLnRvcCA9IGAke3kgLSBsYWJlbEggLyAyICsgNH1weGA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxhYmVsRGl2LnN0eWxlLmxlZnQgPSBgJHt4ICsgNH1weGA7XG4gICAgICAgICAgICBsYWJlbERpdi5zdHlsZS50b3AgPSBgJHt5IC0gbGFiZWxIIC8gMn1weGA7IC8vIGNlbnRlciBvdmVyIHdpcmVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIEFycmF5LmZyb20odGhpcy52aXJ0dWFsTm9kZXNNYXAuZW50cmllcygpKS5mb3JFYWNoKChbaWQsIGNhY2hlXSkgPT4ge1xuICAgICAgaWYgKCF2aXNpYmxlSWRzLmhhcyhpZCkpIHtcbiAgICAgICAgY2FjaGUuY29tcG9uZW50Py5kZXN0cm95KCk7XG4gICAgICAgIGNhY2hlLmFycm93Py5yZW1vdmUoKTtcbiAgICAgICAgY2FjaGUubGFiZWw/LnJlbW92ZSgpO1xuICAgICAgICB0aGlzLnZpcnR1YWxOb2Rlc01hcC5kZWxldGUoaWQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciBlbGVtZW50cyB2w6AgYnJhbmNoZXMgbeG7mXQgY8OhY2ggxJHhu4cgcXV5XG4gICAqL1xuICBwcml2YXRlIHJlbmRlckVsZW1lbnRzUmVjdXJzaXZlbHkoZWxlbWVudHM6IEFycmF5PElEaWFncmFtRWxlbWVudD4sIGlzRmlyc3RMZXZlbCA9IHRydWUsIGJyYW5jaD86IElEaWFncmFtRWxlbWVudEJyYW5jaCkge1xuICAgIGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoZWxlbWVudC50cmFuc2xhdGVYICE9PSB1bmRlZmluZWQgJiYgZWxlbWVudC50cmFuc2xhdGVZICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gTWFpbiBub2RlOiBjw7MgYXJyb3cgbuG6v3Uga2jDtG5nIHBo4bqjaSBlbGVtZW50IMSR4bqndSB0acOqbiBj4bunYSBsZXZlbCDEkeG6p3VcbiAgICAgICAgY29uc3Qgc2hvdWxkU2hvd0Fycm93ID0gIShpc0ZpcnN0TGV2ZWwgJiYgaW5kZXggPT09IDApO1xuICAgICAgICB0aGlzLmNyZWF0ZU5vZGUoZWxlbWVudCwgYnJhbmNoLCBzaG91bGRTaG93QXJyb3csIGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVuZGVyIG5vZGVPdGhlckNvbmZpZyBu4bq/dSBjw7MgKG5vZGVzIHBo4bulKSAtIEtIw5RORyBjw7MgYXJyb3dcbiAgICAgIGlmIChlbGVtZW50Lm5vZGVPdGhlckNvbmZpZz8udHJhbnNsYXRlWCAhPT0gdW5kZWZpbmVkICYmIGVsZW1lbnQubm9kZU90aGVyQ29uZmlnLnRyYW5zbGF0ZVkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmNyZWF0ZU5vZGUoZWxlbWVudC5ub2RlT3RoZXJDb25maWcsIGJyYW5jaCwgZmFsc2UsIHRydWUpO1xuICAgICAgfVxuXG4gICAgICAvLyBSZW5kZXIgYnJhbmNoZXMgbuG6v3UgY8OzXG4gICAgICBpZiAoZWxlbWVudC5icmFuY2hlcyAmJiBlbGVtZW50LmJyYW5jaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZWxlbWVudC5icmFuY2hlcy5mb3JFYWNoKChicmFuY2gpID0+IHtcbiAgICAgICAgICBpZiAoYnJhbmNoLmVsZW1lbnRzICYmIGJyYW5jaC5lbGVtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlckVsZW1lbnRzUmVjdXJzaXZlbHkoYnJhbmNoLmVsZW1lbnRzLCBmYWxzZSwgYnJhbmNoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGJyYW5jaC5ub2RlT3RoZXJDb25maWc/LnRyYW5zbGF0ZVggIT09IHVuZGVmaW5lZCAmJiBicmFuY2gubm9kZU90aGVyQ29uZmlnLnRyYW5zbGF0ZVkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVOb2RlKGJyYW5jaC5ub2RlT3RoZXJDb25maWcsIGJyYW5jaCwgZmFsc2UsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVOG6oW8gbeG7mXQgbm9kZSBjb21wb25lbnQgxJHhu5luZ1xuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgcHJpdmF0ZSBjcmVhdGVOb2RlKGVsZW1lbnQ6IElEaWFncmFtRWxlbWVudCwgYnJhbmNoOiBJRGlhZ3JhbUVsZW1lbnRCcmFuY2ggfCB1bmRlZmluZWQsIHNob3VsZFNob3dBcnJvdzogYm9vbGVhbiwgaXNOb2RlT3RoZXJDb25maWc6IGJvb2xlYW4pOiBDb21wb25lbnRSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWdDYW52YXMoKTtcbiAgICBpZiAoIWNvbmZpZz8udmlld0NvbnRhaW5lclJlZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjb25maWcudXNlVmlydHVhbGl6YXRpb25UZW1wbGF0ZSkge1xuICAgICAgaWYgKGNvbmZpZy5ub2Rlc0NvbnRhaW5lcj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICBpZiAoc2hvdWxkU2hvd0Fycm93ICYmICFpc05vZGVPdGhlckNvbmZpZykge1xuICAgICAgICAgIHRoaXMuY3JlYXRlQXJyb3dJbmRpY2F0b3IoZWxlbWVudCwgY29uZmlnLm5vZGVzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29tcG9uZW50VHlwZSA9IGlzTm9kZU90aGVyQ29uZmlnID8gY29uZmlnLm5vZGVPdGhlckNvbmZpZ0NvbXBvbmVudFR5cGUgOiBjb25maWcubm9kZUNvbXBvbmVudFR5cGU7XG5cbiAgICBpZiAoIWNvbXBvbmVudFR5cGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjb21wb25lbnRSZWYgPSBjb25maWcudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50VHlwZSk7XG4gICAgY29uc3QgZWwgPSBjb21wb25lbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcblxuICAgIGNvbXBvbmVudFJlZi5zZXRJbnB1dCgnZWxlbWVudCcsIGVsZW1lbnQpO1xuICAgIGlmIChicmFuY2gpIHtcbiAgICAgIGNvbXBvbmVudFJlZi5zZXRJbnB1dCgnYnJhbmNoJywgYnJhbmNoKTtcbiAgICB9XG4gICAgY29tcG9uZW50UmVmLnNldElucHV0KCdvcmllbnRhdGlvbicsIHRoaXMub3JpZW50YXRpb24oKSk7XG4gICAgZWwuY2xhc3NMaXN0LmFkZCgnZGlhZ3JhbS1ub2RlLWR5bmFtaWMnKTtcblxuICAgIGFwcGx5RWxlbWVudFN0eWxlKGVsLCBlbGVtZW50KTtcblxuICAgIGlmIChjb25maWcubm9kZXNDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGNvbmZpZy5ub2Rlc0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKGVsKTtcblxuICAgICAgaWYgKHNob3VsZFNob3dBcnJvdyAmJiAhaXNOb2RlT3RoZXJDb25maWcpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVBcnJvd0luZGljYXRvcihlbGVtZW50LCBjb25maWcubm9kZXNDb250YWluZXIubmF0aXZlRWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jb21wb25lbnRSZWZzLnVwZGF0ZSgocmVmcykgPT4gWy4uLnJlZnMsIGNvbXBvbmVudFJlZl0pOyAvLyBMxrB1IHJlZmVyZW5jZSDEkeG7gyBjbGVhbnVwIHNhdVxuXG4gICAgcmV0dXJuIGNvbXBvbmVudFJlZjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciB04bqldCBj4bqjIG5vZGVzIMSRw6MgdOG6oW9cbiAgICovXG4gIGNsZWFyTm9kZXMoKSB7XG4gICAgdGhpcy5jb21wb25lbnRSZWZzKCkuZm9yRWFjaCgocmVmKSA9PiB7XG4gICAgICByZWYuZGVzdHJveSgpO1xuICAgIH0pO1xuICAgIHRoaXMuY29tcG9uZW50UmVmcy5zZXQoW10pO1xuXG4gICAgQXJyYXkuZnJvbSh0aGlzLnZpcnR1YWxOb2Rlc01hcC52YWx1ZXMoKSkuZm9yRWFjaCgoY2FjaGUpID0+IHtcbiAgICAgIGNhY2hlLmNvbXBvbmVudD8uZGVzdHJveSgpO1xuICAgICAgY2FjaGUuYXJyb3c/LnJlbW92ZSgpO1xuICAgICAgY2FjaGUubGFiZWw/LnJlbW92ZSgpO1xuICAgIH0pO1xuICAgIHRoaXMudmlydHVhbE5vZGVzTWFwLmNsZWFyKCk7XG5cbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZ0NhbnZhcygpO1xuICAgIGNvbnN0IG5vZGVzQ29udGFpbmVyID0gY29uZmlnPy5ub2Rlc0NvbnRhaW5lcj8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAobm9kZXNDb250YWluZXIpIHtcbiAgICAgIGlmICghY29uZmlnPy51c2VWaXJ0dWFsaXphdGlvblRlbXBsYXRlKSB7XG4gICAgICAgIGNvbnN0IGR5bmFtaWNOb2RlcyA9IG5vZGVzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJy5kaWFncmFtLW5vZGUtZHluYW1pYycpO1xuICAgICAgICBkeW5hbWljTm9kZXMuZm9yRWFjaCgobm9kZTogRWxlbWVudCkgPT4gbm9kZS5yZW1vdmUoKSk7XG4gICAgICB9XG4gICAgICBjb25zdCBsYWJlbHMgPSBub2Rlc0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcuYnJhbmNoLWxhYmVsJyk7XG4gICAgICBsYWJlbHMuZm9yRWFjaCgobGFiZWw6IEVsZW1lbnQpID0+IGxhYmVsLnJlbW92ZSgpKTtcbiAgICAgIGNvbnN0IGFycm93cyA9IG5vZGVzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJy5ub2RlLWFycm93LWluZGljYXRvcicpO1xuICAgICAgYXJyb3dzLmZvckVhY2goKGFycm93OiBFbGVtZW50KSA9PiBhcnJvdy5yZW1vdmUoKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFThuqFvIG3FqWkgdMOqbiBpbmRpY2F0b3IgY2jhu4kgaMaw4bubbmcgdsOgbyBub2RlLlxuICAgKiAtIHZlcnRpY2FsOiAgIG3FqWkgdMOqbiDilrwgcGjDrWEgVFLDik4gbm9kZSAgKGx14buTbmcgdHLDqm4g4oaSIHh14buRbmcpXG4gICAqIC0gaG9yaXpvbnRhbDogbcWpaSB0w6puIOKWuiBwaMOtYSBUUsOBSSBub2RlICAobHXhu5NuZyB0csOhaSDihpIgcGjhuqNpKVxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVBcnJvd0luZGljYXRvcihlbGVtZW50OiBJRGlhZ3JhbUVsZW1lbnQsIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGVsZW1lbnQudHJhbnNsYXRlWCA9PT0gdW5kZWZpbmVkIHx8IGVsZW1lbnQudHJhbnNsYXRlWSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGFycm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgYXJyb3cuY2xhc3NOYW1lID0gJ25vZGUtYXJyb3ctaW5kaWNhdG9yJztcbiAgICBhcnJvdy5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgYXJyb3cuc3R5bGUuekluZGV4ID0gJzEnO1xuICAgIGFycm93LnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG5cbiAgICBjb25zdCBhcnJvd1NpemUgPSAxNjtcbiAgICBjb25zdCBub2RlV2lkdGggPSBlbGVtZW50LnNwZWNpZmljX3dpZHRoID8/IDA7XG4gICAgY29uc3Qgbm9kZUhlaWdodCA9IGVsZW1lbnQuc3BlY2lmaWNfaGVpZ2h0ID8/IDA7XG5cbiAgICBpZiAodGhpcy5vcmllbnRhdGlvbigpID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgIC8vIE3FqWkgdMOqbiDilrog4bufIGLDqm4gVFLDgUkgbm9kZSwgY8SDbiBnaeG7r2EgdGhlbyBjaGnhu4F1IGNhb1xuICAgICAgYXJyb3cuaW5uZXJIVE1MID0gYFxuICAgICAgICA8c3ZnIHdpZHRoPVwiJHthcnJvd1NpemV9XCIgaGVpZ2h0PVwiJHthcnJvd1NpemV9XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgIDxwYXRoIGQ9XCJNOCA0TDE2IDhMOCAxMlpcIiBmaWxsPVwiIzljYTNhZlwiLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICBgO1xuICAgICAgYXJyb3cuc3R5bGUubGVmdCA9IGAke2VsZW1lbnQudHJhbnNsYXRlWCAtIGFycm93U2l6ZX1weGA7XG4gICAgICBhcnJvdy5zdHlsZS50b3AgPSBgJHtlbGVtZW50LnRyYW5zbGF0ZVkgKyBub2RlSGVpZ2h0IC8gMiAtIGFycm93U2l6ZSAvIDJ9cHhgO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBNxalpIHTDqm4g4pa8IOG7nyBwaMOtYSBUUsOKTiBub2RlLCBjxINuIGdp4buvYSB0aGVvIGNoaeG7gXUgcuG7mW5nXG4gICAgICBhcnJvdy5pbm5lckhUTUwgPSBgXG4gICAgICAgIDxzdmcgd2lkdGg9XCIke2Fycm93U2l6ZX1cIiBoZWlnaHQ9XCIke2Fycm93U2l6ZX1cIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgPHBhdGggZD1cIk04IDE2TDQgMTJIMTJMOCAxNlpcIiBmaWxsPVwiIzljYTNhZlwiLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICBgO1xuICAgICAgYXJyb3cuc3R5bGUubGVmdCA9IGAke2VsZW1lbnQudHJhbnNsYXRlWCArIG5vZGVXaWR0aCAvIDIgLSBhcnJvd1NpemUgLyAyfXB4YDtcbiAgICAgIGFycm93LnN0eWxlLnRvcCA9IGAke2VsZW1lbnQudHJhbnNsYXRlWSAtIGFycm93U2l6ZX1weGA7XG4gICAgfVxuXG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGFycm93KTtcbiAgICByZXR1cm4gYXJyb3c7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVyIGJyYW5jaCBsYWJlbHMgKHRleHQgYW5ub3RhdGlvbnMgb24gYnJhbmNoZXMpXG4gICAqL1xuICBwcml2YXRlIHJlbmRlckJyYW5jaExhYmVscyhlbGVtZW50czogQXJyYXk8SURpYWdyYW1FbGVtZW50Pikge1xuICAgIGNvbnN0IHN2Z0NvbnRhaW5lciA9IHRoaXMuY29uZmlnQ2FudmFzKCk/LnN2Z0NvbnRhaW5lcj8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoIXN2Z0NvbnRhaW5lcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgIGlmIChlbGVtZW50LmJyYW5jaGVzICYmIGVsZW1lbnQuYnJhbmNoZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBlbGVtZW50LmJyYW5jaGVzLmZvckVhY2goKGJyYW5jaCwgaW5kZXgpID0+IHtcbiAgICAgICAgICBpZiAoYnJhbmNoLnNwZWNpZmljX3N0YXJ0X2JyYW5jaF94ICE9PSB1bmRlZmluZWQgJiYgYnJhbmNoLnNwZWNpZmljX3N0YXJ0X2JyYW5jaF95ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmICghYnJhbmNoLmxhYmVsKSB7XG4gICAgICAgICAgICAgIGJyYW5jaC5sYWJlbCA9IGBOaMOhbmggJHtpbmRleCArIDF9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQnJhbmNoTGFiZWwoYnJhbmNoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoYnJhbmNoLmVsZW1lbnRzICYmIGJyYW5jaC5lbGVtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlckJyYW5jaExhYmVscyhicmFuY2guZWxlbWVudHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUJyYW5jaExhYmVsKGJyYW5jaDogSURpYWdyYW1FbGVtZW50QnJhbmNoKTogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnQ2FudmFzKCk7XG4gICAgY29uc3QgY29udGFpbmVyID0gY29uZmlnPy5ub2Rlc0NvbnRhaW5lcj8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoIWNvbnRhaW5lcikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBsYWJlbERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGxhYmVsRGl2LmNsYXNzTmFtZSA9ICdicmFuY2gtbGFiZWwnO1xuICAgIGxhYmVsRGl2LnRleHRDb250ZW50ID0gYnJhbmNoLmxhYmVsIHx8ICcnO1xuXG4gICAgbGFiZWxEaXYuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIGxhYmVsRGl2LnN0eWxlLnBhZGRpbmcgPSAnMnB4IDdweCc7XG4gICAgbGFiZWxEaXYuc3R5bGUuYm9yZGVyUmFkaXVzID0gJzEwcHgnO1xuICAgIGxhYmVsRGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGJyYW5jaC5sYWJlbEJnQ29sb3IgfHwgJyNmM2Y0ZjYnO1xuICAgIGxhYmVsRGl2LnN0eWxlLmZvbnRTaXplID0gJzExcHgnO1xuICAgIGxhYmVsRGl2LnN0eWxlLmZvbnRGYW1pbHkgPSAnc3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBzYW5zLXNlcmlmJztcbiAgICBsYWJlbERpdi5zdHlsZS5jb2xvciA9ICcjMzc0MTUxJztcbiAgICBsYWJlbERpdi5zdHlsZS53aGl0ZVNwYWNlID0gJ25vd3JhcCc7XG4gICAgbGFiZWxEaXYuc3R5bGUuekluZGV4ID0gJzInO1xuICAgIGxhYmVsRGl2LnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG5cbiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQobGFiZWxEaXYpO1xuXG4gICAgY29uc3Qgc3RhcnRYID0gYnJhbmNoLnNwZWNpZmljX3N0YXJ0X2JyYW5jaF94ID8/IDA7XG4gICAgY29uc3Qgc3RhcnRZID0gYnJhbmNoLnNwZWNpZmljX3N0YXJ0X2JyYW5jaF95ID8/IDA7XG4gICAgY29uc3QgbGFiZWxXID0gbGFiZWxEaXYub2Zmc2V0V2lkdGg7XG4gICAgY29uc3QgbGFiZWxIID0gbGFiZWxEaXYub2Zmc2V0SGVpZ2h0IHx8IDE4O1xuXG4gICAgaWYgKHRoaXMub3JpZW50YXRpb24oKSA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICAvKipcbiAgICAgICAqIEhvcml6b250YWw6IGxhYmVsIG7hurFtIFRSw4pOIMSRxrDhu51uZyBsaW5lIG7hurFtIG5nYW5nLlxuICAgICAgICogc3BlY2lmaWNfc3RhcnRfYnJhbmNoID0gxJFp4buDbSBi4bqvdCDEkeG6p3UgxJFv4bqhbiB0aOG6s25nIG5nYW5nIMSR4bq/biBlbGVtZW50LlxuICAgICAgICogxJDhurd0IGxhYmVsIHThu4tuaCB0aeG6v24gc2FuZyBwaOG6o2kgOHB4IHThu6sgbmdv4bq3dCBuaMOhbmgsIHbDoCBjxINuIGdp4buvYSBkw6J5LlxuICAgICAgICovXG4gICAgICBsYWJlbERpdi5zdHlsZS5sZWZ0ID0gYCR7c3RhcnRYICsgNH1weGA7XG4gICAgICBsYWJlbERpdi5zdHlsZS50b3AgPSBgJHtzdGFydFkgLSBsYWJlbEggLyAyfXB4YDtcbiAgICB9IGVsc2Uge1xuICAgICAgLyoqXG4gICAgICAgKiBWZXJ0aWNhbDogbGFiZWwgbuG6sW0gQsOKTiBUUsOBSSDEkcaw4budbmcgbmdhbmcsIGPEg24gZ2nhu69hIHRoZW8gWS5cbiAgICAgICAqIHNwZWNpZmljX3N0YXJ0X2JyYW5jaCA9IMSRaeG7g20gxJHhuqd1IMSRb+G6oW4gdGjhurNuZyDEkeG6v24gZWxlbWVudCAoc2F1IGN1cnZlKS5cbiAgICAgICAqL1xuICAgICAgbGFiZWxEaXYuc3R5bGUubGVmdCA9IGAke3N0YXJ0WCAtIGxhYmVsVyAvIDIgLSA0fXB4YDtcbiAgICAgIGxhYmVsRGl2LnN0eWxlLnRvcCA9IGAke3N0YXJ0WSAtIGxhYmVsSCAvIDIgKyA0fXB4YDtcbiAgICB9XG4gICAgcmV0dXJuIGxhYmVsRGl2O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciBk4bqldSBcIitcIiB04bqhaSBt4buXaSB24buLIHRyw60gY8OzIHRo4buDIHRo4bqjIGVsZW1lbnQgdOG7qyBzaWRlYmFyLlxuICAgKiBTZXJ2aWNlIHThu7EgdOG6oW8gRE9NIGVsZW1lbnRzIHbDoCBpbmplY3QgdsOgbyBub2Rlc0NvbnRhaW5lci5cbiAgICogQHBhcmFtIGZsYXRFbGVtZW50cyBEYW5oIHPDoWNoIGZsYXQgZWxlbWVudHMgxJHDoyB0w61uaCB0b8OhbiB24buLIHRyw61cbiAgICogQHBhcmFtIG9uRHJvcCBDYWxsYmFjayBraGkgbmfGsOG7nWkgZMO5bmcgdGjhuqMgZWxlbWVudCB2w6BvIG3hu5l0IFwiK1wiXG4gICAqIEBwYXJhbSBjYW5Ecm9wRm4gKHTDuXkgY2jhu41uKSBGdW5jdGlvbiBraeG7g20gdHJhIMSRaeG7gXUga2nhu4duIGhp4buDbiB0aOG7iyBkcm9wIHpvbmUuXG4gICAqIGBgYFxuICAgKi9cbiAgcmVuZGVyRHJvcFpvbmVzKGZsYXRFbGVtZW50czogSURpYWdyYW1FbGVtZW50W10sIG9uRHJvcDogKGVsZW1lbnQ6IElEaWFncmFtRWxlbWVudCwgYnJhbmNoOiBJRGlhZ3JhbUVsZW1lbnRCcmFuY2ggfCB1bmRlZmluZWQsIGRyYWdEYXRhOiBzdHJpbmcpID0+IHZvaWQsIGNhbkRyb3BGbjogVERyb3Bab25lQ2FuRHJvcEZuLCBydWxlQ29ubmVjdGFibGVFbGVtZW50czogQXJyYXk8SVJ1bGVDb25uZWN0YWJsZT4pOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyRHJvcFpvbmVzKCk7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5jb25maWdDYW52YXMoKT8ubm9kZXNDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQ7XG4gICAgaWYgKCFjb250YWluZXIpIHJldHVybjtcblxuICAgIGZsYXRFbGVtZW50cy5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgaWYgKGVsLmNvZGUgPT09IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuVFlQRV9FTEVNRU5UX0VYSVQpIHJldHVybjtcblxuICAgICAgaWYgKGVsLmVsZW1lbnRfdHlwZSA9PT0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5UWVBFX0VMRU1FTlRfV09SS0ZMT1cpIHtcbiAgICAgICAgZWwuYnJhbmNoZXM/LmZvckVhY2goKGJyYW5jaCkgPT4ge1xuICAgICAgICAgIGlmIChjYW5Ecm9wRm4odW5kZWZpbmVkLCBlbCwgYnJhbmNoLCBydWxlQ29ubmVjdGFibGVFbGVtZW50cykpIHJldHVybjtcblxuICAgICAgICAgIGNvbnN0IHRvcCA9IHRoaXMub3JpZW50YXRpb24oKSA9PT0gJ2hvcml6b250YWwnID8gdGhpcy5jYWxjRHJvcFpvbmVUb3BCcmFuY2hIKGVsLCBicmFuY2gpIDogdGhpcy5jYWxjRHJvcFpvbmVUb3BCcmFuY2goZWwsIGJyYW5jaCk7XG4gICAgICAgICAgY29uc3QgbGVmdCA9IHRoaXMub3JpZW50YXRpb24oKSA9PT0gJ2hvcml6b250YWwnID8gdGhpcy5jYWxjRHJvcFpvbmVMZWZ0QnJhbmNoSChlbCwgYnJhbmNoKSA6IHRoaXMuY2FsY0Ryb3Bab25lTGVmdEJyYW5jaChlbCwgYnJhbmNoKTtcbiAgICAgICAgICB0aGlzLmNyZWF0ZURyb3Bab25lRWwoY29udGFpbmVyLCB0b3AsIGxlZnQsIGVsLCBicmFuY2gsIG9uRHJvcCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFjYW5Ecm9wRm4odW5kZWZpbmVkLCBlbCwgdW5kZWZpbmVkLCBydWxlQ29ubmVjdGFibGVFbGVtZW50cykpIHJldHVybjtcblxuICAgICAgICBjb25zdCB0b3AgPSB0aGlzLm9yaWVudGF0aW9uKCkgPT09ICdob3Jpem9udGFsJyA/IHRoaXMuY2FsY0Ryb3Bab25lVG9wTm9kZUgoZWwpIDogdGhpcy5jYWxjRHJvcFpvbmVUb3BOb2RlKGVsKTtcbiAgICAgICAgY29uc3QgbGVmdCA9IHRoaXMub3JpZW50YXRpb24oKSA9PT0gJ2hvcml6b250YWwnID8gdGhpcy5jYWxjRHJvcFpvbmVMZWZ0Tm9kZUgoZWwpIDogdGhpcy5jYWxjRHJvcFpvbmVMZWZ0Tm9kZShlbCk7XG4gICAgICAgIHRoaXMuY3JlYXRlRHJvcFpvbmVFbChjb250YWluZXIsIHRvcCwgbGVmdCwgZWwsIHVuZGVmaW5lZCwgb25Ecm9wKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBk4buvIGxp4buHdSBuYXZpZ2F0aW9uIGxpbmUgKG5leHRfb3RoZXJfaWQpIHThu6sgZmxhdCBlbGVtZW50cyDEkeG7gyByZW5kZXIgcXVhIGRyYXctbGluZSBkaXJlY3RpdmUuXG4gICAqIFNlcnZpY2UgdOG7sSDEkeG7jWMgYG9yaWVudGF0aW9uKClgIMSR4buDIGNo4buNbiBwYXR0ZXJuIGVuZHBvaW50IHBow7kgaOG7o3AuXG4gICAqIENhbGxlciBjaOG7iSBj4bqnbiB0cnV54buBbiB2w6BvIGBkcmF3TGluZUZ1bmN0aW9uQ29udHJvbC5zZXREYXRhKC4uLilgLlxuICAgKi9cbiAgYnVpbGROYXZpZ2F0aW9uRGF0YShmbGF0RWxlbWVudHM6IElEaWFncmFtRWxlbWVudFtdLCBzdHlsZUNvbmZpZz86IElOYXZpZ2F0aW9uTGluZVN0eWxlQ29uZmlnKTogSURyYXdMaW5lRGF0YUlucHV0W10ge1xuICAgIHJldHVybiBMaWJzVWlEaWFncmFtRHJhd05hdmlnYXRpb25VdGlsLmJ1aWxkTmF2aWdhdGlvbkRhdGEoZmxhdEVsZW1lbnRzLCB0aGlzLm9yaWVudGF0aW9uKCksIHN0eWxlQ29uZmlnKTtcbiAgfVxuXG4gIC8qKiBYw7NhIHThuqV0IGPhuqMgZHJvcCB6b25lIFwiK1wiIGto4buPaSBET00gKi9cbiAgY2xlYXJEcm9wWm9uZXMoKTogdm9pZCB7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5jb25maWdDYW52YXMoKT8ubm9kZXNDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQ7XG4gICAgaWYgKCFjb250YWluZXIpIHJldHVybjtcbiAgICBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnLmRpYWdyYW0tZHJvcC16b25lJykuZm9yRWFjaCgoZWwpID0+IGVsLnJlbW92ZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRHJvcFpvbmVFbChcbiAgICBjb250YWluZXI6IEhUTUxFbGVtZW50LFxuICAgIHRvcDogbnVtYmVyLFxuICAgIGxlZnQ6IG51bWJlcixcbiAgICBlbGVtZW50OiBJRGlhZ3JhbUVsZW1lbnQsXG4gICAgYnJhbmNoOiBJRGlhZ3JhbUVsZW1lbnRCcmFuY2ggfCB1bmRlZmluZWQsXG4gICAgb25Ecm9wOiAoZWxlbWVudDogSURpYWdyYW1FbGVtZW50LCBicmFuY2g6IElEaWFncmFtRWxlbWVudEJyYW5jaCB8IHVuZGVmaW5lZCwgZHJhZ0RhdGE6IHN0cmluZykgPT4gdm9pZFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBpbmRpY2F0b3JTdHlsZTogSURyb3Bab25lSW5kaWNhdG9yU3R5bGUgfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZ0NhbnZhcygpPy5kcm9wWm9uZVN0eWxlO1xuICAgIGNvbnN0IFJFQ1RfVyA9IGVsZW1lbnQuc3BlY2lmaWNfd2lkdGggPz8gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5XSURUSF9FTEVNRU5UX0RFRkFVTFQ7XG4gICAgY29uc3QgUkVDVF9IID0gZWxlbWVudC5zcGVjaWZpY19oZWlnaHQgPz8gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5IRUlHSFRfRUxFTUVOVF9ERUZBVUxUO1xuXG4gICAgLy8gVMOibSBj4bunYSBuw7p0IHRyw7JuXG4gICAgY29uc3QgY2VudGVyWCA9IGxlZnQgKyBjYW52YXNDb25maWdSZWFkb25seSgpLkFERF9JQ09OX0RJQU1FVEVSIC8gMjtcbiAgICBjb25zdCBjZW50ZXJZID0gdG9wICsgY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5BRERfSUNPTl9ESUFNRVRFUiAvIDI7XG5cbiAgICAvLyBIaXQgem9uZSB2w7QgaMOsbmg6IHLhu5luZyBoxqFuIHJlY3RhbmdsZSBt4buZdCBraG/huqNuIHBhZGRpbmcgxJHhu4MgYuG6r3QgZHJhZyBz4bubbSBoxqFuXG4gICAgY29uc3QgSElUX1BBRCA9IDIwO1xuICAgIGNvbnN0IEhJVF9XID0gUkVDVF9XICsgSElUX1BBRCAqIDI7XG4gICAgY29uc3QgSElUX0ggPSBSRUNUX0ggKyBISVRfUEFEICogMjtcbiAgICBjb25zdCBoaXRMZWZ0ID0gY2VudGVyWCAtIEhJVF9XIC8gMjtcbiAgICBjb25zdCBoaXRUb3AgPSBjZW50ZXJZIC0gSElUX0ggLyAyO1xuXG4gICAgLy8g4pSA4pSAIEhpdCB6b25lICh3cmFwcGVyIHbDtCBow6xuaCwgdsO5bmcgbmjhuq1uIGRyYWcgcuG7mW5nKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICBjb25zdCBoaXRab25lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgaGl0Wm9uZS5jbGFzc05hbWUgPSAnZGlhZ3JhbS1kcm9wLXpvbmUnO1xuICAgIGhpdFpvbmUuc3R5bGUuY3NzVGV4dCA9IGBcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogJHtoaXRUb3B9cHg7XG4gICAgICBsZWZ0OiAke2hpdExlZnR9cHg7XG4gICAgICB6LWluZGV4OiA5O1xuICAgICAgd2lkdGg6ICR7SElUX1d9cHg7XG4gICAgICBoZWlnaHQ6ICR7SElUX0h9cHg7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgYDtcblxuICAgIC8vIOKUgOKUgCBJbmRpY2F0b3IgKGNvbiBiw6puIHRyb25nLCBwaOG6p24gaGnhu4NuIHRo4buLKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICBjb25zdCBpbmRpY2F0b3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBpbmRpY2F0b3Iuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJzsgLy8gdHLDoW5oIHRyYW5oIGNo4bqlcCBldmVudCB24bubaSBoaXRab25lXG5cbiAgICAvLyBW4buLIHRyw60gZG90IHRyb25nIGhpdFpvbmUgKGPEg24gZ2nhu69hIGhpdFpvbmUpXG4gICAgY29uc3QgZG90T2Zmc2V0TGVmdCA9IEhJVF9XIC8gMiAtIGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuQUREX0lDT05fRElBTUVURVIgLyAyO1xuICAgIGNvbnN0IGRvdE9mZnNldFRvcCA9IEhJVF9IIC8gMiAtIGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuQUREX0lDT05fRElBTUVURVIgLyAyO1xuXG4gICAgLy8gVuG7iyB0csOtIHJlY3RhbmdsZSB0cm9uZyBoaXRab25lIChjxINuIGdp4buvYSBoaXRab25lKVxuICAgIGNvbnN0IHJlY3RPZmZzZXRMZWZ0ID0gSElUX1BBRDtcbiAgICBjb25zdCByZWN0T2Zmc2V0VG9wID0gSElUX0ggLyAyIC0gUkVDVF9IIC8gMjtcblxuICAgIGNvbnN0IGFwcGx5RG90U3R5bGUgPSAoKSA9PiB7XG4gICAgICBjb25zdCBzID0gaW5kaWNhdG9yU3R5bGU7XG4gICAgICBjb25zdCBzaXplID0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5BRERfSUNPTl9ESUFNRVRFUjtcbiAgICAgIGNvbnN0IGJnID0gcz8uYmFja2dyb3VuZENvbG9yID8/ICcjM2I4MmY2JztcbiAgICAgIGNvbnN0IGljb25Db2xvciA9IHM/Lmljb25Db2xvciA/PyAnI2ZmZmZmZic7XG4gICAgICBjb25zdCBvcGFjaXR5ID0gcz8ub3BhY2l0eSA/PyAwLjk1O1xuICAgICAgY29uc3QgYm9yZGVyUmFkaXVzID0gcz8uYm9yZGVyUmFkaXVzID8/ICc1MCUnO1xuXG4gICAgICBzZXRTdHlsZXNFbGVtZW50KGluZGljYXRvciwge1xuICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgdG9wOiBgJHtkb3RPZmZzZXRUb3B9cHhgLFxuICAgICAgICBsZWZ0OiBgJHtkb3RPZmZzZXRMZWZ0fXB4YCxcbiAgICAgICAgd2lkdGg6IGAke3NpemV9cHhgLFxuICAgICAgICBoZWlnaHQ6IGAke3NpemV9cHhgLFxuICAgICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgdHJhbnNpdGlvbjogJ29wYWNpdHkgMC4xNXMgZWFzZScsXG4gICAgICAgIGJvcmRlcjogJ25vbmUnLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChzPy5yZW5kZXJJbmRpY2F0b3IpIHtcbiAgICAgICAgaW5kaWNhdG9yLmlubmVySFRNTCA9IHMucmVuZGVySW5kaWNhdG9yKHNpemUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5kaWNhdG9yLmlubmVySFRNTCA9IGBcbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiXG4gICAgICAgICAgICB3aWR0aDogJHtzaXplfXB4O1xuICAgICAgICAgICAgaGVpZ2h0OiAke3NpemV9cHg7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2JnfTtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICR7Ym9yZGVyUmFkaXVzfTtcbiAgICAgICAgICAgIG9wYWNpdHk6ICR7b3BhY2l0eX07XG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgICAgXCI+PGkgY2xhc3M9XCJsaWJzLXVpLWljb24tYWRkIGJlZm9yZTp0ZXh0LVske2ljb25Db2xvcn1dXCI+PC9pPjwvZGl2PlxuICAgICAgICBgO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBhcHBseVJlY3RTdHlsZSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHMgPSBpbmRpY2F0b3JTdHlsZTtcbiAgICAgIGNvbnN0IGhvdmVyQmcgPSBzPy5ob3ZlckJhY2tncm91bmRDb2xvciA/PyAnI2VlZjRmZic7XG4gICAgICBjb25zdCBob3ZlckJvcmRlciA9IHM/LmhvdmVyQm9yZGVyQ29sb3IgPz8gJ3JnYmEoNTksIDEzMCwgMjQ2LCAwLjcpJztcbiAgICAgIGNvbnN0IGhvdmVyQm9yZGVyU3R5bGUgPSBzPy5ob3ZlckJvcmRlclN0eWxlID8/ICdkYXNoZWQnO1xuICAgICAgY29uc3QgaG92ZXJSYWRpdXMgPSBzPy5ob3ZlckJvcmRlclJhZGl1cyA/PyAxMDtcblxuICAgICAgc2V0U3R5bGVzRWxlbWVudChpbmRpY2F0b3IsIHtcbiAgICAgICAgdG9wOiBgJHtyZWN0T2Zmc2V0VG9wfXB4YCxcbiAgICAgICAgbGVmdDogYCR7cmVjdE9mZnNldExlZnR9cHhgLFxuICAgICAgICB3aWR0aDogYCR7UkVDVF9XfXB4YCxcbiAgICAgICAgaGVpZ2h0OiBgJHtSRUNUX0h9cHhgLFxuICAgICAgICBib3JkZXJSYWRpdXM6IGAke2hvdmVyUmFkaXVzfXB4YCxcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBob3ZlckJnLFxuICAgICAgICBib3JkZXI6IGAycHggJHtob3ZlckJvcmRlclN0eWxlfSAke2hvdmVyQm9yZGVyfWAsXG4gICAgICAgIHRyYW5zaXRpb246ICdhbGwgMC4ycyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpJyxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBO4bq/dSBjw7MgaMOgbSByZW5kZXIgxJHhu5luZyBjaG8gdHLhuqFuZyB0aMOhaSBob3ZlciDigJQgZ+G7jWkgbsOzXG4gICAgICBpbmRpY2F0b3IuaW5uZXJIVE1MID0gcz8ucmVuZGVySG92ZXJJbmRpY2F0b3IgPyBzLnJlbmRlckhvdmVySW5kaWNhdG9yKCkgOiAnJztcbiAgICB9O1xuXG4gICAgYXBwbHlEb3RTdHlsZSgpO1xuICAgIGhpdFpvbmUuYXBwZW5kQ2hpbGQoaW5kaWNhdG9yKTtcblxuICAgIGhpdFpvbmUuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VudGVyJywgKGU6IERyYWdFdmVudCkgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgYXBwbHlSZWN0U3R5bGUoKTtcbiAgICB9KTtcblxuICAgIGhpdFpvbmUuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCAoZTogRHJhZ0V2ZW50KSA9PiB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBpZiAoZS5kYXRhVHJhbnNmZXIpIGUuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnY29weSc7XG4gICAgfSk7XG5cbiAgICBoaXRab25lLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdsZWF2ZScsIChlOiBEcmFnRXZlbnQpID0+IHtcbiAgICAgIGlmICghaGl0Wm9uZS5jb250YWlucyhlLnJlbGF0ZWRUYXJnZXQgYXMgTm9kZSkpIHtcbiAgICAgICAgYXBwbHlEb3RTdHlsZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaGl0Wm9uZS5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgKGU6IERyYWdFdmVudCkgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGNvbnN0IHJhdyA9IGUuZGF0YVRyYW5zZmVyPy5nZXREYXRhKCdhcHBsaWNhdGlvbi9qc29uJykgPz8gJyc7XG4gICAgICBvbkRyb3AoZWxlbWVudCwgYnJhbmNoLCByYXcpO1xuICAgIH0pO1xuXG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGhpdFpvbmUpO1xuICB9XG5cbiAgLy8g4pSA4pSAIFZlcnRpY2FsIGRyb3Agem9uZSBoZWxwZXJzIChleGlzdGluZykg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIHByaXZhdGUgY2FsY0Ryb3Bab25lVG9wQnJhbmNoKGVsOiBJRGlhZ3JhbUVsZW1lbnQsIGJyYW5jaDogSURpYWdyYW1FbGVtZW50QnJhbmNoKTogbnVtYmVyIHtcbiAgICBjb25zdCBvYyA9IGJyYW5jaC5ub2RlT3RoZXJDb25maWc7XG4gICAgaWYgKG9jKSByZXR1cm4gKG9jLnNwZWNpZmljX3kgPz8gMCkgKyAob2Muc3BlY2lmaWNfaGVpZ2h0ID8/IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRUxFTUVOVF9XQUlUX0RFRkFVTFQpICsgMTA7XG4gICAgcmV0dXJuIChicmFuY2guc3BlY2lmaWNfc3RhcnRfYnJhbmNoX3kgPz8gMCkgKyAzMDtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY0Ryb3Bab25lTGVmdEJyYW5jaChlbDogSURpYWdyYW1FbGVtZW50LCBicmFuY2g6IElEaWFncmFtRWxlbWVudEJyYW5jaCk6IG51bWJlciB7XG4gICAgY29uc3QgZmlyc3RFbCA9IGJyYW5jaC5lbGVtZW50cz8uWzBdO1xuICAgIGlmIChmaXJzdEVsPy50cmFuc2xhdGVYICE9PSB1bmRlZmluZWQpIHJldHVybiBmaXJzdEVsLnRyYW5zbGF0ZVggKyAoZmlyc3RFbC5zcGVjaWZpY193aWR0aCA/PyBjYW52YXNDb25maWdSZWFkb25seSgpLldJRFRIX0VMRU1FTlRfREVGQVVMVCkgLyAyIC0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5BRERfSUNPTl9ESUFNRVRFUiAvIDI7XG4gICAgcmV0dXJuIChlbC50cmFuc2xhdGVYID8/IDApICsgKGVsLnNwZWNpZmljX3dpZHRoID8/IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuV0lEVEhfRUxFTUVOVF9ERUZBVUxUKSAvIDIgLSBjYW52YXNDb25maWdSZWFkb25seSgpLkFERF9JQ09OX0RJQU1FVEVSIC8gMjtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY0Ryb3Bab25lVG9wTm9kZShlbDogSURpYWdyYW1FbGVtZW50KTogbnVtYmVyIHtcbiAgICBjb25zdCBvYyA9IGVsLm5vZGVPdGhlckNvbmZpZztcbiAgICBpZiAob2MpIHJldHVybiAob2Muc3BlY2lmaWNfeSA/PyAwKSArIChvYy5zcGVjaWZpY19oZWlnaHQgPz8gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5FTEVNRU5UX1dBSVRfREVGQVVMVCkgKyAxMDtcbiAgICByZXR1cm4gKGVsLnRyYW5zbGF0ZVkgPz8gMCkgKyAoZWwuc3BlY2lmaWNfaGVpZ2h0ID8/IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuSEVJR0hUX0VMRU1FTlRfREVGQVVMVCkgKyAxMDtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY0Ryb3Bab25lTGVmdE5vZGUoZWw6IElEaWFncmFtRWxlbWVudCk6IG51bWJlciB7XG4gICAgcmV0dXJuIChlbC50cmFuc2xhdGVYID8/IDApICsgKGVsLnNwZWNpZmljX3dpZHRoID8/IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuV0lEVEhfRUxFTUVOVF9ERUZBVUxUKSAvIDIgLSBjYW52YXNDb25maWdSZWFkb25seSgpLkFERF9JQ09OX0RJQU1FVEVSIC8gMjtcbiAgfVxuXG4gIC8vIOKUgOKUgCBIb3Jpem9udGFsIGRyb3Agem9uZSBoZWxwZXJzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvKipcbiAgICogSG9yaXpvbnRhbCBub2RlOiBcIitcIiBu4bqxbSBnaeG7r2EgxJHGsOG7nW5nIGxpbmUgbuG7kWkgMiBub2RlIOKAlCBjxINuIGdp4buvYSBZIGPhu6dhIGVsZW1lbnQuXG4gICAqL1xuICBwcml2YXRlIGNhbGNEcm9wWm9uZVRvcE5vZGVIKGVsOiBJRGlhZ3JhbUVsZW1lbnQpOiBudW1iZXIge1xuICAgIGNvbnN0IEQgPSBjYW52YXNDb25maWdSZWFkb25seSgpLkFERF9JQ09OX0RJQU1FVEVSO1xuICAgIGNvbnN0IGNlbnRlclkgPSAoZWwudHJhbnNsYXRlWSA/PyAwKSArIChlbC5zcGVjaWZpY19oZWlnaHQgPz8gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5IRUlHSFRfRUxFTUVOVF9ERUZBVUxUKSAvIDI7XG4gICAgcmV0dXJuIGNlbnRlclkgLSBEIC8gMjtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY0Ryb3Bab25lTGVmdE5vZGVIKGVsOiBJRGlhZ3JhbUVsZW1lbnQpOiBudW1iZXIge1xuICAgIGNvbnN0IEQgPSBjYW52YXNDb25maWdSZWFkb25seSgpLkFERF9JQ09OX0RJQU1FVEVSO1xuICAgIGNvbnN0IE0gPSBjYW52YXNDb25maWdSZWFkb25seSgpLkVMRU1FTlRfTUFSR0lOX0RFRkFVTFQ7XG4gICAgY29uc3Qgb2MgPSBlbC5ub2RlT3RoZXJDb25maWc7XG5cbiAgICBpZiAob2MpIHtcbiAgICAgIGNvbnN0IHJpZ2h0ID0gKG9jLnNwZWNpZmljX3ggPz8gMCkgKyAob2Muc3BlY2lmaWNfd2lkdGggPz8gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5FTEVNRU5UX1dBSVRfREVGQVVMVCk7XG4gICAgICByZXR1cm4gcmlnaHQgKyBNIC8gMiAtIEQgLyAyO1xuICAgIH1cblxuICAgIGNvbnN0IHJpZ2h0ID0gKGVsLnRyYW5zbGF0ZVggPz8gMCkgKyAoZWwuc3BlY2lmaWNfd2lkdGggPz8gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5XSURUSF9FTEVNRU5UX0RFRkFVTFQpO1xuICAgIC8vIE1pZHBvaW50IGPhu6dhIGtob+G6o25nIHRy4buRbmcgZ2nhu69hIG5vZGUgdsOgIG5vZGUgdGnhur9wIHRoZW8gKGdhcCA9IEVMRU1FTlRfTUFSR0lOX0RFRkFVTFQpXG4gICAgcmV0dXJuIHJpZ2h0ICsgTSAvIDIgLSBEIC8gMjtcbiAgfVxuXG4gIC8qKlxuICAgKiBIb3Jpem9udGFsIGJyYW5jaDogXCIrXCIgbuG6sW0gY8SDbiBnaeG7r2EgWSBj4bunYSBicmFuY2ggbGluZSwgc2F1IHBo4bqnbiB04butIGN14buRaSB0cm9uZyBuaMOhbmguXG4gICAqL1xuICBwcml2YXRlIGNhbGNEcm9wWm9uZVRvcEJyYW5jaEgoZWw6IElEaWFncmFtRWxlbWVudCwgYnJhbmNoOiBJRGlhZ3JhbUVsZW1lbnRCcmFuY2gpOiBudW1iZXIge1xuICAgIGNvbnN0IEQgPSBjYW52YXNDb25maWdSZWFkb25seSgpLkFERF9JQ09OX0RJQU1FVEVSO1xuICAgIC8vIHNwZWNpZmljX3N0YXJ0X2JyYW5jaF95ID0gdMOibSBZIGPhu6dhIMSRxrDhu51uZyBuaMOhbmhcbiAgICBjb25zdCBjZW50ZXJZID0gYnJhbmNoLnNwZWNpZmljX3N0YXJ0X2JyYW5jaF95ID8/IDA7XG4gICAgcmV0dXJuIGNlbnRlclkgLSBEIC8gMjtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY0Ryb3Bab25lTGVmdEJyYW5jaEgoZWw6IElEaWFncmFtRWxlbWVudCwgYnJhbmNoOiBJRGlhZ3JhbUVsZW1lbnRCcmFuY2gpOiBudW1iZXIge1xuICAgIGNvbnN0IEQgPSBjYW52YXNDb25maWdSZWFkb25seSgpLkFERF9JQ09OX0RJQU1FVEVSO1xuICAgIGNvbnN0IE0gPSBjYW52YXNDb25maWdSZWFkb25seSgpLkVMRU1FTlRfTUFSR0lOX0RFRkFVTFQ7XG5cbiAgICAvLyBTYXUgbm9kZU90aGVyQ29uZmlnIGPhu6dhIG5ow6FuaCAoY+G7lSBuaMOhbmgpXG4gICAgY29uc3Qgb2MgPSBicmFuY2gubm9kZU90aGVyQ29uZmlnO1xuICAgIGlmIChvYz8uc3BlY2lmaWNfeCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gKG9jLnNwZWNpZmljX3ggPz8gMCkgKyAob2Muc3BlY2lmaWNfd2lkdGggPz8gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5FTEVNRU5UX1dBSVRfREVGQVVMVCkgKyBNIC8gMiAtIEQgLyAyO1xuICAgIH1cbiAgICAvLyBO4bq/dSBuaMOhbmgga2jDtG5nIGPDsyBub2RlT3RoZXJDb25maWc6IMSR4bq3dCBzYXUgxJFp4buDbSBy4bq9IG5ow6FuaFxuICAgIHJldHVybiAoYnJhbmNoLnNwZWNpZmljX3N0YXJ0X2JyYW5jaF94ID8/IDApICsgTSAvIDIgLSBEIC8gMjtcbiAgfVxufVxuIl19
718
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhZ3JhbS1kcmF3LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL3NlcnZpY2VzL2RpYWdyYW0tZHJhdy9zcmMvZGlhZ3JhbS1kcmF3LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBS2xELE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25GLE9BQU8sRUFBRSwrQ0FBK0MsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ2pILE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDOztBQUVoRyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQWdCO0lBQ3pDLDZDQUE2QyxFQUFFLEVBQUU7SUFDakQsc0JBQXNCLEVBQUUsRUFBRTtJQUMxQiw2QkFBNkIsRUFBRSxFQUFFO0lBQ2pDLHFDQUFxQyxFQUFFLEVBQUU7SUFDekMsOEJBQThCLEVBQUUsR0FBRztJQUNuQyxvQkFBb0IsRUFBRSxFQUFFO0lBQ3hCLHdCQUF3QixFQUFFLFFBQVE7SUFDbEMsd0JBQXdCLEVBQUUsR0FBRztJQUM3Qiw4Q0FBOEMsRUFBRSxFQUFFO0lBRWxELGdCQUFnQixFQUFFLEVBQUU7SUFDcEIsZUFBZSxFQUFFLEVBQUU7SUFDbkIsb0JBQW9CLEVBQUUsRUFBRTtJQUN4QiwwQkFBMEIsRUFBRSxDQUFDO0lBRTdCLGlCQUFpQixFQUFFLE1BQU07SUFDekIscUJBQXFCLEVBQUUsVUFBVTtJQUNqQyxxQkFBcUIsRUFBRSxHQUFHO0lBQzFCLHNCQUFzQixFQUFFLEVBQUU7SUFFMUIsaUJBQWlCLEVBQUUsRUFBRTtDQUN0QixDQUFDLENBQUM7QUFFSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDOUQsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUc7SUFDOUIsZUFBZSxFQUFFLENBQUM7SUFDbEIsY0FBYyxFQUFFLENBQUM7SUFDakIsb0JBQW9CLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRTtDQUNyRixDQUFDO0FBSUYsTUFBTSxPQUFPLHdCQUF3QjtJQUNsQixZQUFZLEdBQUcsTUFBTSxDQUFrQyxTQUFTLENBQUMsQ0FBQztJQUMxRSxXQUFXLEdBQUcsTUFBTSxDQUE0QixVQUFVLENBQUMsQ0FBQztJQUNwRCxVQUFVLEdBQUcsTUFBTSxDQUE2QixTQUFTLENBQUMsQ0FBQztJQUMzRCxhQUFhLEdBQUcsTUFBTSxDQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELDhEQUE4RDtJQUM3QyxhQUFhLEdBQUcsTUFBTSxDQUFzQixFQUFFLENBQUMsQ0FBQztJQUVqRSwwQkFBMEI7SUFDbEIsZUFBZSxDQUEyRDtJQUMxRSxtQkFBbUIsR0FBaUosRUFBRSxDQUFDO0lBQ3ZLLG1CQUFtQixHQUE0QixFQUFFLENBQUM7SUFDekMsZUFBZSxHQUFHLElBQUksR0FBRyxFQUF1RixDQUFDO0lBRTNILGNBQWMsQ0FBQyxFQUEyRDtRQUMvRSxJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSx5QkFBeUIsRUFBRSxDQUFDO1lBQ25ELElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQ2pDLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxTQUFTLENBQUMsTUFBMkI7UUFDdkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQUksZUFBZSxDQUFDLE1BQThCO1FBQ2hELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE9BQU87UUFDVCxDQUFDO1FBRUQsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsT0FBTyxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxRQUFnQyxFQUFFLFNBQW1CLEVBQUUsU0FBa0I7UUFDeEYsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLGVBQWUsSUFBSSxnQkFBZ0IsQ0FBQztRQUMzRSxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsZUFBZSxDQUFDO1FBQ2hELE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDO1FBRW5ELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLFlBQVksRUFBRSxDQUFDO1lBQ3hDLCtDQUErQyxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2hHLENBQUM7YUFBTSxDQUFDO1lBQ04scUNBQXFDLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDdEYsQ0FBQztRQUVELE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxlQUFlLENBQUM7UUFDN0MsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLGNBQWMsSUFBSSxDQUFDLENBQUM7UUFFaEQsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsNEJBQTRCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN0RixDQUFDO1FBRUQsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsWUFBWSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQ3pFLHdCQUF3QixDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3JGLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxZQUFZLElBQUksWUFBWSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3RFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQzVELE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssVUFBVSxJQUFJLGFBQWEsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUN0RSxJQUFJLENBQUMsc0JBQXNCLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUM3RCxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDM0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsWUFBWSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztRQUM3RCxDQUFDO0lBQ0gsQ0FBQztJQUVPLHNCQUFzQixDQUFDLGNBQXNCLEVBQUUsUUFBZ0MsRUFBRSxNQUE2QjtRQUNwSCxJQUFJLGNBQWMsSUFBSSxjQUFjLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDekMsY0FBYyxHQUFHLGNBQWMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQywrQkFBK0I7UUFDN0UsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLFlBQVksRUFBRSxDQUFDO1lBQ3hDLCtDQUErQyxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxHQUFHLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDMUgsQ0FBQzthQUFNLENBQUM7WUFDTixxQ0FBcUMsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLEVBQUUsR0FBRyxNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ2hILENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyw0QkFBNEIsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3RGLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzNCLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLFlBQVksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDN0QsQ0FBQztJQUNILENBQUM7SUFFTyxlQUFlLENBQUMsUUFBZ0M7UUFDdEQsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLGNBQWMsRUFBRSxFQUFFO1lBQ2xDLElBQUksY0FBYyxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLElBQUksRUFBRSxJQUFJLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZGLENBQUM7WUFDRCxJQUFJLGNBQWMsQ0FBQyxlQUFlLEVBQUUsYUFBYSxFQUFFLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksSUFBSSxFQUFFLElBQUksY0FBYyxDQUFDLGVBQWUsRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDO1lBQ3hHLENBQUM7WUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQztnQkFDckMsT0FBTztZQUNULENBQUM7WUFFRCxjQUFjLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUN6QyxJQUFJLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDekIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLEVBQUUsSUFBSSxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztnQkFDL0UsQ0FBQztnQkFDRCxJQUFJLE1BQU0sQ0FBQyxlQUFlLEVBQUUsYUFBYSxFQUFFLENBQUM7b0JBQzFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksSUFBSSxFQUFFLElBQUksTUFBTSxDQUFDLGVBQWUsRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDO2dCQUNoRyxDQUFDO2dCQUVELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUM1QixPQUFPO2dCQUNULENBQUM7Z0JBRUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDeEMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVcsQ0FBQyxRQUFnQztRQUMxQyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSx5QkFBeUIsRUFBRSxDQUFDO1lBQ25ELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUMvQixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMseUJBQXlCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRU8sc0JBQXNCLENBQUMsUUFBMkI7UUFDeEQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1FBQzlCLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBdUIsRUFBRSxNQUE4QixFQUFFLFlBQVksR0FBRyxJQUFJLEVBQUUsRUFBRTtZQUM1RixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUN6QixNQUFNLGVBQWUsR0FBRyxDQUFDLENBQUMsWUFBWSxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDdkQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDL0csSUFBSSxFQUFFLENBQUMsZUFBZTtvQkFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxlQUFlLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQzdKLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNoQixFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRTt3QkFDaEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLOzRCQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsU0FBUyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7d0JBQzlDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ2pDLElBQUksQ0FBQyxDQUFDLFFBQVE7NEJBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO3dCQUMzQyxJQUFJLENBQUMsQ0FBQyxlQUFlOzRCQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLGVBQWUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxHQUFHLE1BQU0sR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQzNMLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQztRQUNGLElBQUksQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFTyx1QkFBdUI7UUFDN0IsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUNoQyxJQUFJLENBQUMsRUFBRTtZQUFFLE9BQU87UUFDaEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ25DLE1BQU0sU0FBUyxHQUFHLE1BQU0sRUFBRSxjQUFjLEVBQUUsYUFBYSxDQUFDO1FBQ3hELElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUVsQyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFDbkIsTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUVyQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDeEMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUN4QixJQUFJLEVBQUUsQ0FBQyxVQUFVLEtBQUssU0FBUyxJQUFJLEVBQUUsQ0FBQyxVQUFVLEtBQUssU0FBUztnQkFBRSxPQUFPO1lBQ3ZFLElBQUksRUFBRSxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxjQUFjLElBQUksR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFLENBQUMsZUFBZSxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxHQUFHLE1BQU07Z0JBQUUsT0FBTztZQUU5TixNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN4RSxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBRW5CLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztnQkFDMUcsSUFBSSxhQUFhLElBQUksTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUM7b0JBQzdDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBQ25FLEdBQUcsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUM1QixJQUFJLElBQUksQ0FBQyxNQUFNO3dCQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDckQsR0FBRyxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7b0JBRWhELE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsYUFBNEIsQ0FBQztvQkFDeEQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQztvQkFDNUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUM3QixTQUFTLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUU3QixJQUFJLEtBQThCLENBQUM7b0JBQ25DLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQzt3QkFDaEQsS0FBSyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7b0JBQ25ELENBQUM7b0JBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUMxRCxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUMzQyxJQUFJLEtBQUssRUFBRSxDQUFDO29CQUNWLElBQUksS0FBSyxDQUFDLFNBQVM7d0JBQUUsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUNuRixJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDaEIsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO3dCQUNyQixNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUMsY0FBYyxJQUFJLEdBQUcsQ0FBQzt3QkFDM0MsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUM7d0JBQzVDLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLFlBQVksRUFBRSxDQUFDOzRCQUN4QyxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRzsrQkFDUCxTQUFTLGFBQWEsU0FBUzs7O2dCQUc5QyxDQUFDOzRCQUNILEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxVQUFVLEdBQUcsU0FBUyxJQUFJLENBQUM7NEJBQzFELEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxVQUFVLEdBQUcsVUFBVSxHQUFHLENBQUMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUM7d0JBQ2hGLENBQUM7NkJBQU0sQ0FBQzs0QkFDTixLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRzsrQkFDUCxTQUFTLGFBQWEsU0FBUzs7O2dCQUc5QyxDQUFDOzRCQUNILEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxVQUFVLEdBQUcsU0FBUyxHQUFHLENBQUMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUM7NEJBQzlFLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxVQUFVLEdBQUcsU0FBUyxJQUFJLENBQUM7d0JBQzNELENBQUM7b0JBQ0gsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNqRCxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsdUJBQXVCLENBQUM7WUFDekMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDO1lBQ3pDLElBQUksQ0FBQyxLQUFLLFNBQVMsSUFBSSxDQUFDLEtBQUssU0FBUztnQkFBRSxPQUFPO1lBQy9DLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxHQUFHLE1BQU07Z0JBQUUsT0FBTztZQUVwSCxNQUFNLEVBQUUsR0FBRyxTQUFTLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pFLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFFbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDaEQsSUFBSSxRQUFRO29CQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ2xFLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDM0MsSUFBSSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7b0JBQ2pCLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7b0JBQzdCLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO29CQUNuRCxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsS0FBSyxJQUFJLFFBQVEsQ0FBQyxXQUFXLENBQUM7b0JBQ3ZELE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLFlBQVksQ0FBQztvQkFDekQsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssVUFBVSxFQUFFLENBQUM7d0JBQ3RDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7d0JBQ2hELFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7b0JBQ2pELENBQUM7eUJBQU0sQ0FBQzt3QkFDTixRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQzt3QkFDbkMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsbUJBQW1CO29CQUNqRSxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQ2pFLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3hCLEtBQUssQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUM7Z0JBQzNCLEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUM7Z0JBQ3RCLEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNLLHlCQUF5QixDQUFDLFFBQWdDLEVBQUUsWUFBWSxHQUFHLElBQUksRUFBRSxNQUE4QjtRQUNySCxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ2xDLElBQUksT0FBTyxDQUFDLFVBQVUsS0FBSyxTQUFTLElBQUksT0FBTyxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDekUsb0VBQW9FO2dCQUNwRSxNQUFNLGVBQWUsR0FBRyxDQUFDLENBQUMsWUFBWSxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDdkQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMzRCxDQUFDO1lBRUQsNkRBQTZEO1lBQzdELElBQUksT0FBTyxDQUFDLGVBQWUsRUFBRSxVQUFVLEtBQUssU0FBUyxJQUFJLE9BQU8sQ0FBQyxlQUFlLENBQUMsVUFBVSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUMxRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNoRSxDQUFDO1lBRUQseUJBQXlCO1lBQ3pCLElBQUksT0FBTyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDcEQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtvQkFDbEMsSUFBSSxNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO3dCQUNsRCxJQUFJLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBQ2pFLENBQUM7b0JBQ0QsSUFBSSxNQUFNLENBQUMsZUFBZSxFQUFFLFVBQVUsS0FBSyxTQUFTLElBQUksTUFBTSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFFLENBQUM7d0JBQ3hHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUMvRCxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsOERBQThEO0lBQ3RELFVBQVUsQ0FBQyxPQUF3QixFQUFFLE1BQXlDLEVBQUUsZUFBd0IsRUFBRSxpQkFBMEI7UUFDMUksTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztZQUM5QixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksTUFBTSxDQUFDLHlCQUF5QixFQUFFLENBQUM7WUFDckMsSUFBSSxNQUFNLENBQUMsY0FBYyxFQUFFLGFBQWEsRUFBRSxDQUFDO2dCQUN6QyxJQUFJLGVBQWUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7b0JBQzFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDMUUsQ0FBQztZQUNILENBQUM7WUFDRCxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sYUFBYSxHQUFHLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztRQUV6RyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDbkIsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzVFLE1BQU0sRUFBRSxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsYUFBNEIsQ0FBQztRQUU5RCxZQUFZLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMxQyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsWUFBWSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDMUMsQ0FBQztRQUNELFlBQVksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFFekMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRS9CLElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRSxhQUFhLEVBQUUsQ0FBQztZQUN6QyxNQUFNLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7WUFFcEQsSUFBSSxlQUFlLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUMxQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDMUUsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsK0JBQStCO1FBRTdGLE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7T0FFRztJQUNILFVBQVU7UUFDUixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDbkMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFM0IsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDMUQsS0FBSyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUMzQixLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ3RCLEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRTdCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNuQyxNQUFNLGNBQWMsR0FBRyxNQUFNLEVBQUUsY0FBYyxFQUFFLGFBQWEsQ0FBQztRQUM3RCxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxNQUFNLEVBQUUseUJBQXlCLEVBQUUsQ0FBQztnQkFDdkMsTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDLGdCQUFnQixDQUFDLHVCQUF1QixDQUFDLENBQUM7Z0JBQzlFLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFhLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELENBQUM7WUFDRCxNQUFNLE1BQU0sR0FBRyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDaEUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQWMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDbkQsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLGdCQUFnQixDQUFDLHVCQUF1QixDQUFDLENBQUM7WUFDeEUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQWMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDckQsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssb0JBQW9CLENBQUMsT0FBd0IsRUFBRSxTQUFzQjtRQUMzRSxJQUFJLE9BQU8sQ0FBQyxVQUFVLEtBQUssU0FBUyxJQUFJLE9BQU8sQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDekUsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxzQkFBc0IsQ0FBQztRQUN6QyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7UUFDbEMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO1FBQ3pCLEtBQUssQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQztRQUVuQyxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDckIsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLGNBQWMsSUFBSSxDQUFDLENBQUM7UUFDOUMsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLGVBQWUsSUFBSSxDQUFDLENBQUM7UUFFaEQsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssWUFBWSxFQUFFLENBQUM7WUFDeEMscURBQXFEO1lBQ3JELEtBQUssQ0FBQyxTQUFTLEdBQUc7c0JBQ0YsU0FBUyxhQUFhLFNBQVM7OztPQUc5QyxDQUFDO1lBQ0YsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsR0FBRyxPQUFPLENBQUMsVUFBVSxHQUFHLFNBQVMsSUFBSSxDQUFDO1lBQ3pELEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsT0FBTyxDQUFDLFVBQVUsR0FBRyxVQUFVLEdBQUcsQ0FBQyxHQUFHLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQztRQUMvRSxDQUFDO2FBQU0sQ0FBQztZQUNOLHVEQUF1RDtZQUN2RCxLQUFLLENBQUMsU0FBUyxHQUFHO3NCQUNGLFNBQVMsYUFBYSxTQUFTOzs7T0FHOUMsQ0FBQztZQUNGLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEdBQUcsT0FBTyxDQUFDLFVBQVUsR0FBRyxTQUFTLEdBQUcsQ0FBQyxHQUFHLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQztZQUM3RSxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQyxVQUFVLEdBQUcsU0FBUyxJQUFJLENBQUM7UUFDMUQsQ0FBQztRQUVELFNBQVMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7O09BRUc7SUFDSyxrQkFBa0IsQ0FBQyxRQUFnQztRQUN6RCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsWUFBWSxFQUFFLGFBQWEsQ0FBQztRQUN0RSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbEIsT0FBTztRQUNULENBQUM7UUFFRCxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDM0IsSUFBSSxPQUFPLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNwRCxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtvQkFDekMsSUFBSSxNQUFNLENBQUMsdUJBQXVCLEtBQUssU0FBUyxJQUFJLE1BQU0sQ0FBQyx1QkFBdUIsS0FBSyxTQUFTLEVBQUUsQ0FBQzt3QkFDakcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQzs0QkFDbEIsTUFBTSxDQUFDLEtBQUssR0FBRyxTQUFTLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQzt3QkFDdEMsQ0FBQzt3QkFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ2pDLENBQUM7b0JBRUQsSUFBSSxNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO3dCQUNsRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUMzQyxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGlCQUFpQixDQUFDLE1BQTZCO1FBQ3JELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNuQyxNQUFNLFNBQVMsR0FBRyxNQUFNLEVBQUUsY0FBYyxFQUFFLGFBQWEsQ0FBQztRQUN4RCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDZixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQyxRQUFRLENBQUMsU0FBUyxHQUFHLGdCQUFnQixNQUFNLENBQUMsY0FBYyxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDbkYsUUFBUSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUUxQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7UUFDckMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDO1FBQ25DLFFBQVEsQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQztRQUNyQyxRQUFRLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUMsWUFBWSxJQUFJLFNBQVMsQ0FBQztRQUNsRSxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsVUFBVSxJQUFJLFNBQVMsQ0FBQztRQUN0RCxRQUFRLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUM7UUFDckMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO1FBQzVCLFFBQVEsQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQztRQUV0QyxTQUFTLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRWhDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyx1QkFBdUIsSUFBSSxDQUFDLENBQUM7UUFDbkQsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixJQUFJLENBQUMsQ0FBQztRQUNuRCxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDO1FBQ3BDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDO1FBRTNDLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLFlBQVksRUFBRSxDQUFDO1lBQ3hDOzs7O2VBSUc7WUFDSCxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxHQUFHLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQztZQUN4QyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDbEQsQ0FBQzthQUFNLENBQUM7WUFDTjs7O2VBR0c7WUFDSCxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO1lBQ3JELFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDdEQsQ0FBQztRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsZUFBZSxDQUFDLFlBQStCLEVBQUUsTUFBdUcsRUFBRSxTQUE2QixFQUFFLHVCQUFnRDtRQUN2TyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLGNBQWMsRUFBRSxhQUF3QyxDQUFDO1FBQ2hHLElBQUksQ0FBQyxTQUFTO1lBQUUsT0FBTztRQUV2QixZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUU7WUFDMUIsSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLG9CQUFvQixFQUFFLENBQUMsaUJBQWlCO2dCQUFFLE9BQU87WUFFakUsSUFBSSxFQUFFLENBQUMsWUFBWSxLQUFLLG9CQUFvQixFQUFFLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDckUsRUFBRSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtvQkFDOUIsSUFBSSxTQUFTLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsdUJBQXVCLENBQUM7d0JBQUUsT0FBTztvQkFFdEUsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFDbkksTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFDdEksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ2xFLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsdUJBQXVCLENBQUM7b0JBQUUsT0FBTztnQkFFMUUsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQy9HLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNsSCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNyRSxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILG1CQUFtQixDQUFDLFlBQStCLEVBQUUsV0FBd0M7UUFDM0YsT0FBTywrQkFBK0IsQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzVHLENBQUM7SUFFRCx3Q0FBd0M7SUFDeEMsY0FBYztRQUNaLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxjQUFjLEVBQUUsYUFBd0MsQ0FBQztRQUNoRyxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU87UUFDdkIsU0FBUyxDQUFDLGdCQUFnQixDQUFDLG9CQUFvQixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRU8sZ0JBQWdCLENBQ3RCLFNBQXNCLEVBQ3RCLEdBQVcsRUFDWCxJQUFZLEVBQ1osT0FBd0IsRUFDeEIsTUFBeUMsRUFDekMsTUFBdUc7UUFFdkcsTUFBTSxjQUFjLEdBQXdDLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxhQUFhLENBQUM7UUFDL0YsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLGNBQWMsSUFBSSxvQkFBb0IsRUFBRSxDQUFDLHFCQUFxQixDQUFDO1FBQ3RGLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxlQUFlLElBQUksb0JBQW9CLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztRQUV4RixtQkFBbUI7UUFDbkIsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLG9CQUFvQixFQUFFLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sT0FBTyxHQUFHLEdBQUcsR0FBRyxvQkFBb0IsRUFBRSxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQztRQUVuRSw2RUFBNkU7UUFDN0UsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ25CLE1BQU0sS0FBSyxHQUFHLE1BQU0sR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sS0FBSyxHQUFHLE1BQU0sR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sT0FBTyxHQUFHLE9BQU8sR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sTUFBTSxHQUFHLE9BQU8sR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBRW5DLHVFQUF1RTtRQUN2RSxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsbUJBQW1CLENBQUM7UUFDeEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUc7O2FBRWYsTUFBTTtjQUNMLE9BQU87O2VBRU4sS0FBSztnQkFDSixLQUFLOztLQUVoQixDQUFDO1FBRUYsd0VBQXdFO1FBQ3hFLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEQsU0FBUyxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLENBQUMscUNBQXFDO1FBRTdFLDhDQUE4QztRQUM5QyxNQUFNLGFBQWEsR0FBRyxLQUFLLEdBQUcsQ0FBQyxHQUFHLG9CQUFvQixFQUFFLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO1FBQy9FLE1BQU0sWUFBWSxHQUFHLEtBQUssR0FBRyxDQUFDLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUM7UUFFOUUsb0RBQW9EO1FBQ3BELE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQztRQUMvQixNQUFNLGFBQWEsR0FBRyxLQUFLLEdBQUcsQ0FBQyxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFFN0MsTUFBTSxhQUFhLEdBQUcsR0FBRyxFQUFFO1lBQ3pCLE1BQU0sQ0FBQyxHQUFHLGNBQWMsQ0FBQztZQUN6QixNQUFNLElBQUksR0FBRyxvQkFBb0IsRUFBRSxDQUFDLGlCQUFpQixDQUFDO1lBQ3RELE1BQU0sRUFBRSxHQUFHLENBQUMsRUFBRSxlQUFlLElBQUksU0FBUyxDQUFDO1lBQzNDLE1BQU0sU0FBUyxHQUFHLENBQUMsRUFBRSxTQUFTLElBQUksU0FBUyxDQUFDO1lBQzVDLE1BQU0sT0FBTyxHQUFHLENBQUMsRUFBRSxPQUFPLElBQUksSUFBSSxDQUFDO1lBQ25DLE1BQU0sWUFBWSxHQUFHLENBQUMsRUFBRSxZQUFZLElBQUksS0FBSyxDQUFDO1lBRTlDLGdCQUFnQixDQUFDLFNBQVMsRUFBRTtnQkFDMUIsUUFBUSxFQUFFLFVBQVU7Z0JBQ3BCLEdBQUcsRUFBRSxHQUFHLFlBQVksSUFBSTtnQkFDeEIsSUFBSSxFQUFFLEdBQUcsYUFBYSxJQUFJO2dCQUMxQixLQUFLLEVBQUUsR0FBRyxJQUFJLElBQUk7Z0JBQ2xCLE1BQU0sRUFBRSxHQUFHLElBQUksSUFBSTtnQkFDbkIsYUFBYSxFQUFFLE1BQU07Z0JBQ3JCLE9BQU8sRUFBRSxNQUFNO2dCQUNmLFVBQVUsRUFBRSxRQUFRO2dCQUNwQixjQUFjLEVBQUUsUUFBUTtnQkFDeEIsVUFBVSxFQUFFLG9CQUFvQjtnQkFDaEMsTUFBTSxFQUFFLE1BQU07YUFDZixDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQztnQkFDdkIsU0FBUyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hELENBQUM7aUJBQU0sQ0FBQztnQkFDTixTQUFTLENBQUMsU0FBUyxHQUFHOztxQkFFVCxJQUFJO3NCQUNILElBQUk7Z0NBQ00sRUFBRTs2QkFDTCxZQUFZO3VCQUNsQixPQUFPOzs7OztzREFLd0IsU0FBUztTQUN0RCxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUMsQ0FBQztRQUVGLE1BQU0sY0FBYyxHQUFHLEdBQUcsRUFBRTtZQUMxQixNQUFNLENBQUMsR0FBRyxjQUFjLENBQUM7WUFDekIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxFQUFFLG9CQUFvQixJQUFJLFNBQVMsQ0FBQztZQUNyRCxNQUFNLFdBQVcsR0FBRyxDQUFDLEVBQUUsZ0JBQWdCLElBQUkseUJBQXlCLENBQUM7WUFDckUsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEVBQUUsZ0JBQWdCLElBQUksUUFBUSxDQUFDO1lBQ3pELE1BQU0sV0FBVyxHQUFHLENBQUMsRUFBRSxpQkFBaUIsSUFBSSxFQUFFLENBQUM7WUFFL0MsZ0JBQWdCLENBQUMsU0FBUyxFQUFFO2dCQUMxQixHQUFHLEVBQUUsR0FBRyxhQUFhLElBQUk7Z0JBQ3pCLElBQUksRUFBRSxHQUFHLGNBQWMsSUFBSTtnQkFDM0IsS0FBSyxFQUFFLEdBQUcsTUFBTSxJQUFJO2dCQUNwQixNQUFNLEVBQUUsR0FBRyxNQUFNLElBQUk7Z0JBQ3JCLFlBQVksRUFBRSxHQUFHLFdBQVcsSUFBSTtnQkFDaEMsZUFBZSxFQUFFLE9BQU87Z0JBQ3hCLE1BQU0sRUFBRSxPQUFPLGdCQUFnQixJQUFJLFdBQVcsRUFBRTtnQkFDaEQsVUFBVSxFQUFFLHVDQUF1QzthQUNwRCxDQUFDLENBQUM7WUFFSCx1REFBdUQ7WUFDdkQsU0FBUyxDQUFDLFNBQVMsR0FBRyxDQUFDLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDaEYsQ0FBQyxDQUFDO1FBRUYsYUFBYSxFQUFFLENBQUM7UUFDaEIsT0FBTyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUUvQixPQUFPLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBWSxFQUFFLEVBQUU7WUFDckQsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ25CLGNBQWMsRUFBRSxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxDQUFDLENBQVksRUFBRSxFQUFFO1lBQ3BELENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsQ0FBQyxZQUFZO2dCQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztRQUN6RCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFZLEVBQUUsRUFBRTtZQUNyRCxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsYUFBcUIsQ0FBQyxFQUFFLENBQUM7Z0JBQy9DLGFBQWEsRUFBRSxDQUFDO1lBQ2xCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFZLEVBQUUsRUFBRTtZQUNoRCxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDbkIsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxDQUFDO1lBQzlELE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO1FBRUgsU0FBUyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsK0VBQStFO0lBQ3ZFLHFCQUFxQixDQUFDLEVBQW1CLEVBQUUsTUFBNkI7UUFDOUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQztRQUNsQyxJQUFJLEVBQUU7WUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxlQUFlLElBQUksb0JBQW9CLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMvRyxPQUFPLENBQUMsTUFBTSxDQUFDLHVCQUF1QixJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNwRCxDQUFDO0lBRU8sc0JBQXNCLENBQUMsRUFBbUIsRUFBRSxNQUE2QjtRQUMvRSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckMsSUFBSSxPQUFPLEVBQUUsVUFBVSxLQUFLLFNBQVM7WUFBRSxPQUFPLE9BQU8sQ0FBQyxVQUFVLEdBQUcsQ0FBQyxPQUFPLENBQUMsY0FBYyxJQUFJLG9CQUFvQixFQUFFLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUM7UUFDL0wsT0FBTyxDQUFDLEVBQUUsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsY0FBYyxJQUFJLG9CQUFvQixFQUFFLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUM7SUFDdkosQ0FBQztJQUVPLG1CQUFtQixDQUFDLEVBQW1CO1FBQzdDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUM7UUFDOUIsSUFBSSxFQUFFO1lBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsZUFBZSxJQUFJLG9CQUFvQixFQUFFLENBQUMsb0JBQW9CLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDL0csT0FBTyxDQUFDLEVBQUUsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsZUFBZSxJQUFJLG9CQUFvQixFQUFFLENBQUMsc0JBQXNCLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDM0csQ0FBQztJQUVPLG9CQUFvQixDQUFDLEVBQW1CO1FBQzlDLE9BQU8sQ0FBQyxFQUFFLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLGNBQWMsSUFBSSxvQkFBb0IsRUFBRSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxHQUFHLG9CQUFvQixFQUFFLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZKLENBQUM7SUFFRCxnRkFBZ0Y7SUFDaEY7O09BRUc7SUFDSyxvQkFBb0IsQ0FBQyxFQUFtQjtRQUM5QyxNQUFNLENBQUMsR0FBRyxvQkFBb0IsRUFBRSxDQUFDLGlCQUFpQixDQUFDO1FBQ25ELE1BQU0sT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxlQUFlLElBQUksb0JBQW9CLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqSCxPQUFPLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxFQUFtQjtRQUMvQyxNQUFNLENBQUMsR0FBRyxvQkFBb0IsRUFBRSxDQUFDLGlCQUFpQixDQUFDO1FBQ25ELE1BQU0sQ0FBQyxHQUFHLG9CQUFvQixFQUFFLENBQUMsc0JBQXNCLENBQUM7UUFDeEQsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQztRQUU5QixJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ1AsTUFBTSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLGNBQWMsSUFBSSxvQkFBb0IsRUFBRSxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDeEcsT0FBTyxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLENBQUM7UUFFRCxNQUFNLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsY0FBYyxJQUFJLG9CQUFvQixFQUFFLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUN6Ryx1RkFBdUY7UUFDdkYsT0FBTyxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRDs7T0FFRztJQUNLLHNCQUFzQixDQUFDLEVBQW1CLEVBQUUsTUFBNkI7UUFDL0UsTUFBTSxDQUFDLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztRQUNuRCxrREFBa0Q7UUFDbEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixJQUFJLENBQUMsQ0FBQztRQUNwRCxPQUFPLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFTyx1QkFBdUIsQ0FBQyxFQUFtQixFQUFFLE1BQTZCO1FBQ2hGLE1BQU0sQ0FBQyxHQUFHLG9CQUFvQixFQUFFLENBQUMsaUJBQWlCLENBQUM7UUFDbkQsTUFBTSxDQUFDLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztRQUV4RCwyQ0FBMkM7UUFDM0MsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQztRQUNsQyxJQUFJLEVBQUUsRUFBRSxVQUFVLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDakMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsY0FBYyxJQUFJLG9CQUFvQixFQUFFLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkgsQ0FBQztRQUNELDREQUE0RDtRQUM1RCxPQUFPLENBQUMsTUFBTSxDQUFDLHVCQUF1QixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvRCxDQUFDO3dHQTV1QlUsd0JBQXdCOzRHQUF4Qix3QkFBd0IsY0FGdkIsTUFBTTs7NEZBRVAsd0JBQXdCO2tCQUhwQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudFJlZiwgSW5qZWN0YWJsZSwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJRHJhd0xpbmVEYXRhSW5wdXQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWRyYXctbGluZSc7XG5pbXBvcnQgeyBzZXRTdHlsZXNFbGVtZW50IH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgSVJ1bGVDb25uZWN0YWJsZSwgVERyb3Bab25lQ2FuRHJvcEZuIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2NhbnZhcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSURhdGFEaWFncmFtQ29uZmlnU3ZnIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2Nvb3JkaW5hdGVzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJQ2FudmFzQ29uZmlnLCBJQ3VzdG9tQ2FudmFzQ29uZmlnLCBJRGlhZ3JhbUVsZW1lbnQsIElEaWFncmFtRWxlbWVudEJyYW5jaCwgSURyb3Bab25lSW5kaWNhdG9yU3R5bGUgfSBmcm9tICcuL2ludGVyZmFjZXMvZGlhZ3JhbS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSU5hdmlnYXRpb25MaW5lU3R5bGVDb25maWcgfSBmcm9tICcuL2ludGVyZmFjZXMvbmF2aWdhdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTW9MaWJEaWFncmFtQ2FsY3VsYXRvckNvb3JkaW5hdGVzVXRpbCB9IGZyb20gJy4vdXRpbHMvY2FsY3VsYXRvci1lbGVtZW50LnV0aWwnO1xuaW1wb3J0IHsgYXBwbHlFbGVtZW50U3R5bGUsIHNldEF0dHJpYnV0ZVN2Z0FuZEFwcGVuZCB9IGZyb20gJy4vdXRpbHMvZGlhZ3JhbS51dGlsJztcbmltcG9ydCB7IE1vTGliRGlhZ3JhbUhvcml6b250YWxDYWxjdWxhdG9yQ29vcmRpbmF0ZXNVdGlsIH0gZnJvbSAnLi91dGlscy9ob3Jpem9udGFsL2NhbGN1bGF0b3ItY29vcmRpbmF0ZXMudXRpbCc7XG5pbXBvcnQgeyBMaWJzVWlEaWFncmFtRHJhd05hdmlnYXRpb25VdGlsIH0gZnJvbSAnLi91dGlscy9uYXZpZ2F0aW9uL2J1aWxkLW5hdmlnYXRpb24tZGF0YS51dGlsJztcblxuY29uc3QgY2FudmFzQ29uZmlnID0gc2lnbmFsPElDYW52YXNDb25maWc+KHtcbiAgRUxFTUVOVF9XSURUSF9ERUZBVUxUX0JSQU5DSF9XSEVOX05PVF9FTEVNRU5UOiA2MCxcbiAgRUxFTUVOVF9NQVJHSU5fREVGQVVMVDogNjAsXG4gIEVMRU1FTlRfTUFSR0lOX0RFRkFVTFRfQlJBTkNIOiAxNixcbiAgRUxFTUVOVF9NQVJHSU5fQkVUV0VFTl9CUkFOQ0hfREVGQVVMVDogNjAsXG4gIERFRkFVTFRfQlJBTkNIX1dIRU5fTk9fRUxFTUVOVDogMTAwLFxuICBFTEVNRU5UX0hFSUdIVF9DVVJWRTogMTAsXG4gIEVMRU1FTlRfU1ZHX1NUUk9LRV9DT0xPUjogJzljYTJhZCcsXG4gIEVMRU1FTlRfU1ZHX1NUUk9LRV9XSURUSDogJzEnLFxuICBFTEVNRU5UX01BUkdJTl9ERUZBVUxUX0JSQU5DSF9UT19FTEVNRU5UX0ZJUlNUOiA3OCxcblxuICBESVNUQU5DRV9UT19XQUlUOiAzMCxcbiAgV0FJVF9UT19FTEVNRU5UOiA1MCxcbiAgRUxFTUVOVF9XQUlUX0RFRkFVTFQ6IDI4LFxuICBESVNUQU5DRV9XQUlUX1RPX05FWFRfTElORTogNCxcblxuICBUWVBFX0VMRU1FTlRfRVhJVDogJ0VYSVQnLFxuICBUWVBFX0VMRU1FTlRfV09SS0ZMT1c6ICdXT1JLRkxPVycsXG4gIFdJRFRIX0VMRU1FTlRfREVGQVVMVDogMTY1LFxuICBIRUlHSFRfRUxFTUVOVF9ERUZBVUxUOiA0OCxcblxuICBBRERfSUNPTl9ESUFNRVRFUjogMjQsXG59KTtcblxuZXhwb3J0IGNvbnN0IGNhbnZhc0NvbmZpZ1JlYWRvbmx5ID0gY2FudmFzQ29uZmlnLmFzUmVhZG9ubHkoKTtcbmV4cG9ydCBjb25zdCBzdG9yZURhdGFEZWZhdWx0ID0ge1xuICBwb3NpdGlvbk1heExlZnQ6IDAsXG4gIHBvc2l0aW9uTWF4VG9wOiAwLFxuICB3aWR0aEhlaWdodFN2Z0NhbnZhczogeyBoZWlnaHRTdmc6IHdpbmRvdy5pbm5lckhlaWdodCwgd2lkdGhTdmc6IHdpbmRvdy5pbm5lcldpZHRoIH0sXG59O1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaURpYWdyYW1EcmF3U2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnQ2FudmFzID0gc2lnbmFsPElDdXN0b21DYW52YXNDb25maWcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IG9yaWVudGF0aW9uID0gc2lnbmFsPCd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCc+KCd2ZXJ0aWNhbCcpO1xuICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRTdmcgPSBzaWduYWw8U1ZHUGF0aEVsZW1lbnQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXR0cmlidXRlU3ZnRCA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgcHJpdmF0ZSByZWFkb25seSBjb21wb25lbnRSZWZzID0gc2lnbmFsPENvbXBvbmVudFJlZjxhbnk+W10+KFtdKTtcblxuICAvLyBWaXJ0dWFsaXphdGlvbiBUcmFja2luZ1xuICBwcml2YXRlIHZpcnR1YWxWaWV3cG9ydD86IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH07XG4gIHByaXZhdGUgdmlydHVhbEZsYXRFbGVtZW50czogeyBlbGVtZW50OiBJRGlhZ3JhbUVsZW1lbnQ7IGJyYW5jaD86IElEaWFncmFtRWxlbWVudEJyYW5jaDsgc2hvdWxkU2hvd0Fycm93OiBib29sZWFuOyBpc090aGVyQ29uZmlnOiBib29sZWFuOyBwYXJlbnRJZD86IHN0cmluZyB8IG51bWJlciB9W10gPSBbXTtcbiAgcHJpdmF0ZSB2aXJ0dWFsRmxhdEJyYW5jaGVzOiBJRGlhZ3JhbUVsZW1lbnRCcmFuY2hbXSA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IHZpcnR1YWxOb2Rlc01hcCA9IG5ldyBNYXA8c3RyaW5nLCB7IGNvbXBvbmVudD86IENvbXBvbmVudFJlZjxhbnk+OyBhcnJvdz86IEhUTUxFbGVtZW50OyBsYWJlbD86IEhUTUxFbGVtZW50IH0+KCk7XG5cbiAgcHVibGljIHVwZGF0ZVZpZXdwb3J0KHZwOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9KSB7XG4gICAgdGhpcy52aXJ0dWFsVmlld3BvcnQgPSB2cDtcbiAgICBpZiAodGhpcy5jb25maWdDYW52YXMoKT8udXNlVmlydHVhbGl6YXRpb25UZW1wbGF0ZSkge1xuICAgICAgdGhpcy5hcHBseVZpcnR1YWxpemF0aW9uRGlmZigpO1xuICAgIH1cbiAgfVxuXG4gIHNldCBzZXRDb25maWcoY29uZmlnOiBJQ3VzdG9tQ2FudmFzQ29uZmlnKSB7XG4gICAgdGhpcy5jb25maWdDYW52YXMuc2V0KGNvbmZpZyk7XG4gIH1cblxuICBzZXQgc2V0Q29uZmlnQ2FudmFzKGNvbmZpZzogUGFydGlhbDxJQ2FudmFzQ29uZmlnPikge1xuICAgIGlmICghY29uZmlnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY2FudmFzQ29uZmlnLnVwZGF0ZSgoY3VycmVudCkgPT4gKHsgLi4uY3VycmVudCwgLi4uY29uZmlnIH0pKTtcbiAgfVxuXG4gIGNvbmZpZ1hZRWxlbWVudHMoZWxlbWVudHM6IEFycmF5PElEaWFncmFtRWxlbWVudD4sIHVwZGF0ZVNWRz86IGJvb2xlYW4sIHBvc2l0aW9uWD86IG51bWJlcikge1xuICAgIGNvbnN0IHN0b3JlRGF0YSA9IHRoaXMuY29uZmlnQ2FudmFzKCk/LnN0b3JlRGF0YURlZmluZSA/PyBzdG9yZURhdGFEZWZhdWx0O1xuICAgIGNvbnN0IG1heExlZnRPcmlnaW4gPSBzdG9yZURhdGEucG9zaXRpb25NYXhMZWZ0O1xuICAgIGNvbnN0IG1heFRvcE9yaWdpbiA9IHN0b3JlRGF0YS5wb3NpdGlvbk1heFRvcCA/PyAwO1xuXG4gICAgaWYgKHRoaXMub3JpZW50YXRpb24oKSA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICBNb0xpYkRpYWdyYW1Ib3Jpem9udGFsQ2FsY3VsYXRvckNvb3JkaW5hdGVzVXRpbC5zZXRYWUVsZW1lbnRzKGVsZW1lbnRzLCBzdG9yZURhdGEsIHBvc2l0aW9uWCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIE1vTGliRGlhZ3JhbUNhbGN1bGF0b3JDb29yZGluYXRlc1V0aWwuc2V0WFlFbGVtZW50cyhlbGVtZW50cywgc3RvcmVEYXRhLCBwb3NpdGlvblgpO1xuICAgIH1cblxuICAgIGNvbnN0IG1heExlZnROZXcgPSBzdG9yZURhdGEucG9zaXRpb25NYXhMZWZ0O1xuICAgIGNvbnN0IG1heFRvcE5ldyA9IHN0b3JlRGF0YS5wb3NpdGlvbk1heFRvcCA/PyAwO1xuXG4gICAgaWYgKCF0aGlzLmVsZW1lbnRTdmcoKSkge1xuICAgICAgdGhpcy5lbGVtZW50U3ZnLnNldChkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3BhdGgnKSk7XG4gICAgfVxuXG4gICAgaWYgKCF1cGRhdGVTVkcgJiYgdGhpcy5jb25maWdDYW52YXMoKT8uc3ZnQ29udGFpbmVyICYmIHRoaXMuZWxlbWVudFN2ZygpKSB7XG4gICAgICBzZXRBdHRyaWJ1dGVTdmdBbmRBcHBlbmQodGhpcy5jb25maWdDYW52YXMoKT8uc3ZnQ29udGFpbmVyLCB0aGlzLmVsZW1lbnRTdmcoKSwgJycpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9yaWVudGF0aW9uKCkgPT09ICdob3Jpem9udGFsJyAmJiBtYXhUb3BPcmlnaW4gIT09IG1heFRvcE5ldykge1xuICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbkVsZW1lbnRzKG1heFRvcE5ldywgZWxlbWVudHMsIHN0b3JlRGF0YSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLm9yaWVudGF0aW9uKCkgPT09ICd2ZXJ0aWNhbCcgJiYgbWF4TGVmdE9yaWdpbiAhPT0gbWF4TGVmdE5ldykge1xuICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbkVsZW1lbnRzKG1heExlZnROZXcsIGVsZW1lbnRzLCBzdG9yZURhdGEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmVsZW1lbnRTdmcoKSkge1xuICAgICAgdGhpcy5hdHRyaWJ1dGVTdmdELnNldCgnJyk7XG4gICAgICB0aGlzLmJ1aWxkU3ZnRWxlbWVudChlbGVtZW50cyk7XG4gICAgICB0aGlzLmVsZW1lbnRTdmcoKT8uc2V0QXR0cmlidXRlKCdkJywgdGhpcy5hdHRyaWJ1dGVTdmdEKCkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlUG9zaXRpb25FbGVtZW50cyhwb3NpdGlvbk9mZnNldDogbnVtYmVyLCBlbGVtZW50czogQXJyYXk8SURpYWdyYW1FbGVtZW50PiwgY29uZmlnOiBJRGF0YURpYWdyYW1Db25maWdTdmcpIHtcbiAgICBpZiAocG9zaXRpb25PZmZzZXQgJiYgcG9zaXRpb25PZmZzZXQgPCAwKSB7XG4gICAgICBwb3NpdGlvbk9mZnNldCA9IHBvc2l0aW9uT2Zmc2V0ICogLTEgKyAyMDA7IC8vIDEwMCBsw6Aga2hv4bqjbmcgY8OhY2ggY8OhY2ggYmnDqm5cbiAgICB9XG4gICAgaWYgKHRoaXMub3JpZW50YXRpb24oKSA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICBNb0xpYkRpYWdyYW1Ib3Jpem9udGFsQ2FsY3VsYXRvckNvb3JkaW5hdGVzVXRpbC5zZXRYWUVsZW1lbnRzKGVsZW1lbnRzLCB7IC4uLmNvbmZpZywgdXBkYXRlU1ZHOiB0cnVlIH0sIHBvc2l0aW9uT2Zmc2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgTW9MaWJEaWFncmFtQ2FsY3VsYXRvckNvb3JkaW5hdGVzVXRpbC5zZXRYWUVsZW1lbnRzKGVsZW1lbnRzLCB7IC4uLmNvbmZpZywgdXBkYXRlU1ZHOiB0cnVlIH0sIHBvc2l0aW9uT2Zmc2V0KTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmVsZW1lbnRTdmcoKSkge1xuICAgICAgdGhpcy5lbGVtZW50U3ZnLnNldChkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3BhdGgnKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmVsZW1lbnRTdmcoKSkge1xuICAgICAgdGhpcy5hdHRyaWJ1dGVTdmdELnNldCgnJyk7XG4gICAgICB0aGlzLmJ1aWxkU3ZnRWxlbWVudChlbGVtZW50cyk7XG4gICAgICB0aGlzLmVsZW1lbnRTdmcoKT8uc2V0QXR0cmlidXRlKCdkJywgdGhpcy5hdHRyaWJ1dGVTdmdEKCkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRTdmdFbGVtZW50KGVsZW1lbnRzOiBBcnJheTxJRGlhZ3JhbUVsZW1lbnQ+KSB7XG4gICAgZWxlbWVudHMuZm9yRWFjaCgoY3VycmVudEVsZW1lbnQpID0+IHtcbiAgICAgIGlmIChjdXJyZW50RWxlbWVudC5hdHRyaWJ1dGVTdmdEKSB7XG4gICAgICAgIHRoaXMuYXR0cmlidXRlU3ZnRC51cGRhdGUoKHByZXYpID0+IGAke3ByZXYgPz8gJyd9ICR7Y3VycmVudEVsZW1lbnQuYXR0cmlidXRlU3ZnRH1gKTtcbiAgICAgIH1cbiAgICAgIGlmIChjdXJyZW50RWxlbWVudC5ub2RlT3RoZXJDb25maWc/LmF0dHJpYnV0ZVN2Z0QpIHtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVTdmdELnVwZGF0ZSgocHJldikgPT4gYCR7cHJldiA/PyAnJ30gJHtjdXJyZW50RWxlbWVudC5ub2RlT3RoZXJDb25maWc/LmF0dHJpYnV0ZVN2Z0R9YCk7XG4gICAgICB9XG4gICAgICBpZiAoIWN1cnJlbnRFbGVtZW50LmJyYW5jaGVzPy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50RWxlbWVudC5icmFuY2hlcy5mb3JFYWNoKChicmFuY2gpID0+IHtcbiAgICAgICAgaWYgKGJyYW5jaC5hdHRyaWJ1dGVTdmdEKSB7XG4gICAgICAgICAgdGhpcy5hdHRyaWJ1dGVTdmdELnVwZGF0ZSgocHJldikgPT4gYCR7cHJldiA/PyAnJ30gJHticmFuY2guYXR0cmlidXRlU3ZnRH1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYnJhbmNoLm5vZGVPdGhlckNvbmZpZz8uYXR0cmlidXRlU3ZnRCkge1xuICAgICAgICAgIHRoaXMuYXR0cmlidXRlU3ZnRC51cGRhdGUoKHByZXYpID0+IGAke3ByZXYgPz8gJyd9ICR7YnJhbmNoLm5vZGVPdGhlckNvbmZpZz8uYXR0cmlidXRlU3ZnRH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghYnJhbmNoLmVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYnVpbGRTdmdFbGVtZW50KGJyYW5jaC5lbGVtZW50cyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgdOG6pXQgY+G6oyBub2RlcyB04burIGVsZW1lbnRzIGFycmF5XG4gICAqL1xuICByZW5kZXJOb2RlcyhlbGVtZW50czogQXJyYXk8SURpYWdyYW1FbGVtZW50Pikge1xuICAgIGlmICh0aGlzLmNvbmZpZ0NhbnZhcygpPy51c2VWaXJ0dWFsaXphdGlvblRlbXBsYXRlKSB7XG4gICAgICB0aGlzLmV4dHJhY3RWaXJ0dWFsRWxlbWVudHMoZWxlbWVudHMpO1xuICAgICAgdGhpcy5hcHBseVZpcnR1YWxpemF0aW9uRGlmZigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2xlYXJOb2RlcygpO1xuICAgIHRoaXMucmVuZGVyRWxlbWVudHNSZWN1cnNpdmVseShlbGVtZW50cywgdHJ1ZSk7XG4gICAgdGhpcy5yZW5kZXJCcmFuY2hMYWJlbHMoZWxlbWVudHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0VmlydHVhbEVsZW1lbnRzKGVsZW1lbnRzOiBJRGlhZ3JhbUVsZW1lbnRbXSkge1xuICAgIHRoaXMudmlydHVhbEZsYXRFbGVtZW50cyA9IFtdO1xuICAgIHRoaXMudmlydHVhbEZsYXRCcmFuY2hlcyA9IFtdO1xuICAgIGNvbnN0IHNjYW4gPSAobGlzdDogSURpYWdyYW1FbGVtZW50W10sIGJyYW5jaD86IElEaWFncmFtRWxlbWVudEJyYW5jaCwgaXNGaXJzdExldmVsID0gdHJ1ZSkgPT4ge1xuICAgICAgbGlzdC5mb3JFYWNoKChlbCwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3Qgc2hvdWxkU2hvd0Fycm93ID0gIShpc0ZpcnN0TGV2ZWwgJiYgaW5kZXggPT09IDApO1xuICAgICAgICB0aGlzLnZpcnR1YWxGbGF0RWxlbWVudHMucHVzaCh7IGVsZW1lbnQ6IGVsLCBicmFuY2gsIGlzT3RoZXJDb25maWc6IGZhbHNlLCBzaG91bGRTaG93QXJyb3csIHBhcmVudElkOiBlbC5pZCB9KTtcbiAgICAgICAgaWYgKGVsLm5vZGVPdGhlckNvbmZpZykgdGhpcy52aXJ0dWFsRmxhdEVsZW1lbnRzLnB1c2goeyBlbGVtZW50OiBlbC5ub2RlT3RoZXJDb25maWcsIGJyYW5jaCwgaXNPdGhlckNvbmZpZzogdHJ1ZSwgc2hvdWxkU2hvd0Fycm93OiBmYWxzZSwgcGFyZW50SWQ6IGVsLmlkIH0pO1xuICAgICAgICBpZiAoZWwuYnJhbmNoZXMpIHtcbiAgICAgICAgICBlbC5icmFuY2hlcy5mb3JFYWNoKChiLCBiSW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmICghYi5sYWJlbCkgYi5sYWJlbCA9IGBOaMOhbmggJHtiSW5kZXggKyAxfWA7XG4gICAgICAgICAgICB0aGlzLnZpcnR1YWxGbGF0QnJhbmNoZXMucHVzaChiKTtcbiAgICAgICAgICAgIGlmIChiLmVsZW1lbnRzKSBzY2FuKGIuZWxlbWVudHMsIGIsIGZhbHNlKTtcbiAgICAgICAgICAgIGlmIChiLm5vZGVPdGhlckNvbmZpZykgdGhpcy52aXJ0dWFsRmxhdEVsZW1lbnRzLnB1c2goeyBlbGVtZW50OiBiLm5vZGVPdGhlckNvbmZpZywgYnJhbmNoOiBiLCBpc090aGVyQ29uZmlnOiB0cnVlLCBzaG91bGRTaG93QXJyb3c6IGZhbHNlLCBwYXJlbnRJZDogJ2JyYW5jaF8nICsgYkluZGV4ICsgJ18nICsgZWwuaWQgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgc2NhbihlbGVtZW50cywgdW5kZWZpbmVkLCB0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlWaXJ0dWFsaXphdGlvbkRpZmYoKSB7XG4gICAgY29uc3QgdnAgPSB0aGlzLnZpcnR1YWxWaWV3cG9ydDtcbiAgICBpZiAoIXZwKSByZXR1cm47XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWdDYW52YXMoKTtcbiAgICBjb25zdCBjb250YWluZXIgPSBjb25maWc/Lm5vZGVzQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50O1xuICAgIGlmICghY29udGFpbmVyIHx8ICFjb25maWcpIHJldHVybjtcblxuICAgIGNvbnN0IGJ1ZmZlciA9IDMwMDtcbiAgICBjb25zdCB2aXNpYmxlSWRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICB0aGlzLnZpcnR1YWxGbGF0RWxlbWVudHMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgY29uc3QgZWwgPSBpdGVtLmVsZW1lbnQ7XG4gICAgICBpZiAoZWwudHJhbnNsYXRlWCA9PT0gdW5kZWZpbmVkIHx8IGVsLnRyYW5zbGF0ZVkgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgICAgaWYgKGVsLnRyYW5zbGF0ZVggKyAoZWwuc3BlY2lmaWNfd2lkdGggfHwgMTY1KSA8IHZwLnggLSBidWZmZXIgfHwgZWwudHJhbnNsYXRlWCA+IHZwLnggKyB2cC53aWR0aCArIGJ1ZmZlciB8fCBlbC50cmFuc2xhdGVZICsgKGVsLnNwZWNpZmljX2hlaWdodCB8fCA0OCkgPCB2cC55IC0gYnVmZmVyIHx8IGVsLnRyYW5zbGF0ZVkgPiB2cC55ICsgdnAuaGVpZ2h0ICsgYnVmZmVyKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IGlkID0gU3RyaW5nKGl0ZW0ucGFyZW50SWQpICsgKGl0ZW0uaXNPdGhlckNvbmZpZyA/ICdfb3RoZXInIDogJycpO1xuICAgICAgdmlzaWJsZUlkcy5hZGQoaWQpO1xuXG4gICAgICBpZiAoIXRoaXMudmlydHVhbE5vZGVzTWFwLmhhcyhpZCkpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50VHlwZSA9IGl0ZW0uaXNPdGhlckNvbmZpZyA/IGNvbmZpZy5ub2RlT3RoZXJDb25maWdDb21wb25lbnRUeXBlIDogY29uZmlnLm5vZGVDb21wb25lbnRUeXBlO1xuICAgICAgICBpZiAoY29tcG9uZW50VHlwZSAmJiBjb25maWcudmlld0NvbnRhaW5lclJlZikge1xuICAgICAgICAgIGNvbnN0IHJlZiA9IGNvbmZpZy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRUeXBlKTtcbiAgICAgICAgICByZWYuc2V0SW5wdXQoJ2VsZW1lbnQnLCBlbCk7XG4gICAgICAgICAgaWYgKGl0ZW0uYnJhbmNoKSByZWYuc2V0SW5wdXQoJ2JyYW5jaCcsIGl0ZW0uYnJhbmNoKTtcbiAgICAgICAgICByZWYuc2V0SW5wdXQoJ29yaWVudGF0aW9uJywgdGhpcy5vcmllbnRhdGlvbigpKTtcblxuICAgICAgICAgIGNvbnN0IGRvbUVsID0gcmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgZG9tRWwuY2xhc3NMaXN0LmFkZCgnZGlhZ3JhbS1ub2RlLWR5bmFtaWMnKTtcbiAgICAgICAgICBhcHBseUVsZW1lbnRTdHlsZShkb21FbCwgZWwpO1xuICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChkb21FbCk7XG5cbiAgICAgICAgICBsZXQgYXJyb3c6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkO1xuICAgICAgICAgIGlmIChpdGVtLnNob3VsZFNob3dBcnJvdyAmJiAhaXRlbS5pc090aGVyQ29uZmlnKSB7XG4gICAgICAgICAgICBhcnJvdyA9IHRoaXMuY3JlYXRlQXJyb3dJbmRpY2F0b3IoZWwsIGNvbnRhaW5lcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMudmlydHVhbE5vZGVzTWFwLnNldChpZCwgeyBjb21wb25lbnQ6IHJlZiwgYXJyb3cgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNhY2hlID0gdGhpcy52aXJ0dWFsTm9kZXNNYXAuZ2V0KGlkKTtcbiAgICAgICAgaWYgKGNhY2hlKSB7XG4gICAgICAgICAgaWYgKGNhY2hlLmNvbXBvbmVudCkgYXBwbHlFbGVtZW50U3R5bGUoY2FjaGUuY29tcG9uZW50LmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQsIGVsKTtcbiAgICAgICAgICBpZiAoY2FjaGUuYXJyb3cpIHtcbiAgICAgICAgICAgIGNvbnN0IGFycm93U2l6ZSA9IDE2O1xuICAgICAgICAgICAgY29uc3Qgbm9kZVdpZHRoID0gZWwuc3BlY2lmaWNfd2lkdGggPz8gMTY1O1xuICAgICAgICAgICAgY29uc3Qgbm9kZUhlaWdodCA9IGVsLnNwZWNpZmljX2hlaWdodCA/PyA0ODtcbiAgICAgICAgICAgIGlmICh0aGlzLm9yaWVudGF0aW9uKCkgPT09ICdob3Jpem9udGFsJykge1xuICAgICAgICAgICAgICBjYWNoZS5hcnJvdy5pbm5lckhUTUwgPSBgXG4gICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIke2Fycm93U2l6ZX1cIiBoZWlnaHQ9XCIke2Fycm93U2l6ZX1cIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk04IDRMMTYgOEw4IDEyWlwiIGZpbGw9XCIjOWNhM2FmXCIvPlxuICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgIGA7XG4gICAgICAgICAgICAgIGNhY2hlLmFycm93LnN0eWxlLmxlZnQgPSBgJHtlbC50cmFuc2xhdGVYIC0gYXJyb3dTaXplfXB4YDtcbiAgICAgICAgICAgICAgY2FjaGUuYXJyb3cuc3R5bGUudG9wID0gYCR7ZWwudHJhbnNsYXRlWSArIG5vZGVIZWlnaHQgLyAyIC0gYXJyb3dTaXplIC8gMn1weGA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjYWNoZS5hcnJvdy5pbm5lckhUTUwgPSBgXG4gICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIke2Fycm93U2l6ZX1cIiBoZWlnaHQ9XCIke2Fycm93U2l6ZX1cIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk04IDE2TDQgMTJIMTJMOCAxNlpcIiBmaWxsPVwiIzljYTNhZlwiLz5cbiAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICBgO1xuICAgICAgICAgICAgICBjYWNoZS5hcnJvdy5zdHlsZS5sZWZ0ID0gYCR7ZWwudHJhbnNsYXRlWCArIG5vZGVXaWR0aCAvIDIgLSBhcnJvd1NpemUgLyAyfXB4YDtcbiAgICAgICAgICAgICAgY2FjaGUuYXJyb3cuc3R5bGUudG9wID0gYCR7ZWwudHJhbnNsYXRlWSAtIGFycm93U2l6ZX1weGA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnZpcnR1YWxGbGF0QnJhbmNoZXMuZm9yRWFjaCgoYnJhbmNoLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgeCA9IGJyYW5jaC5zcGVjaWZpY19zdGFydF9icmFuY2hfeDtcbiAgICAgIGNvbnN0IHkgPSBicmFuY2guc3BlY2lmaWNfc3RhcnRfYnJhbmNoX3k7XG4gICAgICBpZiAoeCA9PT0gdW5kZWZpbmVkIHx8IHkgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgICAgaWYgKHggPCB2cC54IC0gYnVmZmVyIHx8IHggPiB2cC54ICsgdnAud2lkdGggKyBidWZmZXIgfHwgeSA8IHZwLnkgLSBidWZmZXIgfHwgeSA+IHZwLnkgKyB2cC5oZWlnaHQgKyBidWZmZXIpIHJldHVybjtcblxuICAgICAgY29uc3QgaWQgPSAnYnJhbmNoXycgKyBpbmRleCArICdfJyArIE1hdGgucm91bmQoeCkgKyAnXycgKyBNYXRoLnJvdW5kKHkpO1xuICAgICAgdmlzaWJsZUlkcy5hZGQoaWQpO1xuXG4gICAgICBpZiAoIXRoaXMudmlydHVhbE5vZGVzTWFwLmhhcyhpZCkpIHtcbiAgICAgICAgY29uc3QgbGFiZWxEaXYgPSB0aGlzLmNyZWF0ZUJyYW5jaExhYmVsKGJyYW5jaCk7XG4gICAgICAgIGlmIChsYWJlbERpdikgdGhpcy52aXJ0dWFsTm9kZXNNYXAuc2V0KGlkLCB7IGxhYmVsOiBsYWJlbERpdiB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNhY2hlID0gdGhpcy52aXJ0dWFsTm9kZXNNYXAuZ2V0KGlkKTtcbiAgICAgICAgaWYgKGNhY2hlPy5sYWJlbCkge1xuICAgICAgICAgIGNvbnN0IGxhYmVsRGl2ID0gY2FjaGUubGFiZWw7XG4gICAgICAgICAgY29uc3QgbGFiZWxSZWN0ID0gbGFiZWxEaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgY29uc3QgbGFiZWxXID0gbGFiZWxSZWN0LndpZHRoIHx8IGxhYmVsRGl2Lm9mZnNldFdpZHRoO1xuICAgICAgICAgIGNvbnN0IGxhYmVsSCA9IGxhYmVsUmVjdC5oZWlnaHQgfHwgbGFiZWxEaXYub2Zmc2V0SGVpZ2h0O1xuICAgICAgICAgIGlmICh0aGlzLm9yaWVudGF0aW9uKCkgPT09ICd2ZXJ0aWNhbCcpIHtcbiAgICAgICAgICAgIGxhYmVsRGl2LnN0eWxlLmxlZnQgPSBgJHt4IC0gbGFiZWxXIC8gMiAtIDR9cHhgO1xuICAgICAgICAgICAgbGFiZWxEaXYuc3R5bGUudG9wID0gYCR7eSAtIGxhYmVsSCAvIDIgKyA0fXB4YDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGFiZWxEaXYuc3R5bGUubGVmdCA9IGAke3ggKyA0fXB4YDtcbiAgICAgICAgICAgIGxhYmVsRGl2LnN0eWxlLnRvcCA9IGAke3kgLSBsYWJlbEggLyAyfXB4YDsgLy8gY2VudGVyIG92ZXIgd2lyZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgQXJyYXkuZnJvbSh0aGlzLnZpcnR1YWxOb2Rlc01hcC5lbnRyaWVzKCkpLmZvckVhY2goKFtpZCwgY2FjaGVdKSA9PiB7XG4gICAgICBpZiAoIXZpc2libGVJZHMuaGFzKGlkKSkge1xuICAgICAgICBjYWNoZS5jb21wb25lbnQ/LmRlc3Ryb3koKTtcbiAgICAgICAgY2FjaGUuYXJyb3c/LnJlbW92ZSgpO1xuICAgICAgICBjYWNoZS5sYWJlbD8ucmVtb3ZlKCk7XG4gICAgICAgIHRoaXMudmlydHVhbE5vZGVzTWFwLmRlbGV0ZShpZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVyIGVsZW1lbnRzIHbDoCBicmFuY2hlcyBt4buZdCBjw6FjaCDEkeG7hyBxdXlcbiAgICovXG4gIHByaXZhdGUgcmVuZGVyRWxlbWVudHNSZWN1cnNpdmVseShlbGVtZW50czogQXJyYXk8SURpYWdyYW1FbGVtZW50PiwgaXNGaXJzdExldmVsID0gdHJ1ZSwgYnJhbmNoPzogSURpYWdyYW1FbGVtZW50QnJhbmNoKSB7XG4gICAgZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChlbGVtZW50LnRyYW5zbGF0ZVggIT09IHVuZGVmaW5lZCAmJiBlbGVtZW50LnRyYW5zbGF0ZVkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBNYWluIG5vZGU6IGPDsyBhcnJvdyBu4bq/dSBraMO0bmcgcGjhuqNpIGVsZW1lbnQgxJHhuqd1IHRpw6puIGPhu6dhIGxldmVsIMSR4bqndVxuICAgICAgICBjb25zdCBzaG91bGRTaG93QXJyb3cgPSAhKGlzRmlyc3RMZXZlbCAmJiBpbmRleCA9PT0gMCk7XG4gICAgICAgIHRoaXMuY3JlYXRlTm9kZShlbGVtZW50LCBicmFuY2gsIHNob3VsZFNob3dBcnJvdywgZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICAvLyBSZW5kZXIgbm9kZU90aGVyQ29uZmlnIG7hur91IGPDsyAobm9kZXMgcGjhu6UpIC0gS0jDlE5HIGPDsyBhcnJvd1xuICAgICAgaWYgKGVsZW1lbnQubm9kZU90aGVyQ29uZmlnPy50cmFuc2xhdGVYICE9PSB1bmRlZmluZWQgJiYgZWxlbWVudC5ub2RlT3RoZXJDb25maWcudHJhbnNsYXRlWSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuY3JlYXRlTm9kZShlbGVtZW50Lm5vZGVPdGhlckNvbmZpZywgYnJhbmNoLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlbmRlciBicmFuY2hlcyBu4bq/dSBjw7NcbiAgICAgIGlmIChlbGVtZW50LmJyYW5jaGVzICYmIGVsZW1lbnQuYnJhbmNoZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBlbGVtZW50LmJyYW5jaGVzLmZvckVhY2goKGJyYW5jaCkgPT4ge1xuICAgICAgICAgIGlmIChicmFuY2guZWxlbWVudHMgJiYgYnJhbmNoLmVsZW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyRWxlbWVudHNSZWN1cnNpdmVseShicmFuY2guZWxlbWVudHMsIGZhbHNlLCBicmFuY2gpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYnJhbmNoLm5vZGVPdGhlckNvbmZpZz8udHJhbnNsYXRlWCAhPT0gdW5kZWZpbmVkICYmIGJyYW5jaC5ub2RlT3RoZXJDb25maWcudHJhbnNsYXRlWSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZU5vZGUoYnJhbmNoLm5vZGVPdGhlckNvbmZpZywgYnJhbmNoLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBU4bqhbyBt4buZdCBub2RlIGNvbXBvbmVudCDEkeG7mW5nXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBwcml2YXRlIGNyZWF0ZU5vZGUoZWxlbWVudDogSURpYWdyYW1FbGVtZW50LCBicmFuY2g6IElEaWFncmFtRWxlbWVudEJyYW5jaCB8IHVuZGVmaW5lZCwgc2hvdWxkU2hvd0Fycm93OiBib29sZWFuLCBpc05vZGVPdGhlckNvbmZpZzogYm9vbGVhbik6IENvbXBvbmVudFJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZ0NhbnZhcygpO1xuICAgIGlmICghY29uZmlnPy52aWV3Q29udGFpbmVyUmVmKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy51c2VWaXJ0dWFsaXphdGlvblRlbXBsYXRlKSB7XG4gICAgICBpZiAoY29uZmlnLm5vZGVzQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIGlmIChzaG91bGRTaG93QXJyb3cgJiYgIWlzTm9kZU90aGVyQ29uZmlnKSB7XG4gICAgICAgICAgdGhpcy5jcmVhdGVBcnJvd0luZGljYXRvcihlbGVtZW50LCBjb25maWcubm9kZXNDb250YWluZXIubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjb21wb25lbnRUeXBlID0gaXNOb2RlT3RoZXJDb25maWcgPyBjb25maWcubm9kZU90aGVyQ29uZmlnQ29tcG9uZW50VHlwZSA6IGNvbmZpZy5ub2RlQ29tcG9uZW50VHlwZTtcblxuICAgIGlmICghY29tcG9uZW50VHlwZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IGNvbmZpZy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRUeXBlKTtcbiAgICBjb25zdCBlbCA9IGNvbXBvbmVudFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuXG4gICAgY29tcG9uZW50UmVmLnNldElucHV0KCdlbGVtZW50JywgZWxlbWVudCk7XG4gICAgaWYgKGJyYW5jaCkge1xuICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KCdicmFuY2gnLCBicmFuY2gpO1xuICAgIH1cbiAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoJ29yaWVudGF0aW9uJywgdGhpcy5vcmllbnRhdGlvbigpKTtcbiAgICBlbC5jbGFzc0xpc3QuYWRkKCdkaWFncmFtLW5vZGUtZHluYW1pYycpO1xuXG4gICAgYXBwbHlFbGVtZW50U3R5bGUoZWwsIGVsZW1lbnQpO1xuXG4gICAgaWYgKGNvbmZpZy5ub2Rlc0NvbnRhaW5lcj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgY29uZmlnLm5vZGVzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZWwpO1xuXG4gICAgICBpZiAoc2hvdWxkU2hvd0Fycm93ICYmICFpc05vZGVPdGhlckNvbmZpZykge1xuICAgICAgICB0aGlzLmNyZWF0ZUFycm93SW5kaWNhdG9yKGVsZW1lbnQsIGNvbmZpZy5ub2Rlc0NvbnRhaW5lci5uYXRpdmVFbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNvbXBvbmVudFJlZnMudXBkYXRlKChyZWZzKSA9PiBbLi4ucmVmcywgY29tcG9uZW50UmVmXSk7IC8vIEzGsHUgcmVmZXJlbmNlIMSR4buDIGNsZWFudXAgc2F1XG5cbiAgICByZXR1cm4gY29tcG9uZW50UmVmO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIHThuqV0IGPhuqMgbm9kZXMgxJHDoyB04bqhb1xuICAgKi9cbiAgY2xlYXJOb2RlcygpIHtcbiAgICB0aGlzLmNvbXBvbmVudFJlZnMoKS5mb3JFYWNoKChyZWYpID0+IHtcbiAgICAgIHJlZi5kZXN0cm95KCk7XG4gICAgfSk7XG4gICAgdGhpcy5jb21wb25lbnRSZWZzLnNldChbXSk7XG5cbiAgICBBcnJheS5mcm9tKHRoaXMudmlydHVhbE5vZGVzTWFwLnZhbHVlcygpKS5mb3JFYWNoKChjYWNoZSkgPT4ge1xuICAgICAgY2FjaGUuY29tcG9uZW50Py5kZXN0cm95KCk7XG4gICAgICBjYWNoZS5hcnJvdz8ucmVtb3ZlKCk7XG4gICAgICBjYWNoZS5sYWJlbD8ucmVtb3ZlKCk7XG4gICAgfSk7XG4gICAgdGhpcy52aXJ0dWFsTm9kZXNNYXAuY2xlYXIoKTtcblxuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnQ2FudmFzKCk7XG4gICAgY29uc3Qgbm9kZXNDb250YWluZXIgPSBjb25maWc/Lm5vZGVzQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50O1xuICAgIGlmIChub2Rlc0NvbnRhaW5lcikge1xuICAgICAgaWYgKCFjb25maWc/LnVzZVZpcnR1YWxpemF0aW9uVGVtcGxhdGUpIHtcbiAgICAgICAgY29uc3QgZHluYW1pY05vZGVzID0gbm9kZXNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnLmRpYWdyYW0tbm9kZS1keW5hbWljJyk7XG4gICAgICAgIGR5bmFtaWNOb2Rlcy5mb3JFYWNoKChub2RlOiBFbGVtZW50KSA9PiBub2RlLnJlbW92ZSgpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxhYmVscyA9IG5vZGVzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJy5icmFuY2gtbGFiZWwnKTtcbiAgICAgIGxhYmVscy5mb3JFYWNoKChsYWJlbDogRWxlbWVudCkgPT4gbGFiZWwucmVtb3ZlKCkpO1xuICAgICAgY29uc3QgYXJyb3dzID0gbm9kZXNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnLm5vZGUtYXJyb3ctaW5kaWNhdG9yJyk7XG4gICAgICBhcnJvd3MuZm9yRWFjaCgoYXJyb3c6IEVsZW1lbnQpID0+IGFycm93LnJlbW92ZSgpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVOG6oW8gbcWpaSB0w6puIGluZGljYXRvciBjaOG7iSBoxrDhu5tuZyB2w6BvIG5vZGUuXG4gICAqIC0gdmVydGljYWw6ICAgbcWpaSB0w6puIOKWvCBwaMOtYSBUUsOKTiBub2RlICAobHXhu5NuZyB0csOqbiDihpIgeHXhu5FuZylcbiAgICogLSBob3Jpem9udGFsOiBtxalpIHTDqm4g4pa6IHBow61hIFRSw4FJIG5vZGUgIChsdeG7k25nIHRyw6FpIOKGkiBwaOG6o2kpXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUFycm93SW5kaWNhdG9yKGVsZW1lbnQ6IElEaWFncmFtRWxlbWVudCwgY29udGFpbmVyOiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoZWxlbWVudC50cmFuc2xhdGVYID09PSB1bmRlZmluZWQgfHwgZWxlbWVudC50cmFuc2xhdGVZID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgYXJyb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBhcnJvdy5jbGFzc05hbWUgPSAnbm9kZS1hcnJvdy1pbmRpY2F0b3InO1xuICAgIGFycm93LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICBhcnJvdy5zdHlsZS56SW5kZXggPSAnMSc7XG4gICAgYXJyb3cuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcblxuICAgIGNvbnN0IGFycm93U2l6ZSA9IDE2O1xuICAgIGNvbnN0IG5vZGVXaWR0aCA9IGVsZW1lbnQuc3BlY2lmaWNfd2lkdGggPz8gMDtcbiAgICBjb25zdCBub2RlSGVpZ2h0ID0gZWxlbWVudC5zcGVjaWZpY19oZWlnaHQgPz8gMDtcblxuICAgIGlmICh0aGlzLm9yaWVudGF0aW9uKCkgPT09ICdob3Jpem9udGFsJykge1xuICAgICAgLy8gTcWpaSB0w6puIOKWuiDhu58gYsOqbiBUUsOBSSBub2RlLCBjxINuIGdp4buvYSB0aGVvIGNoaeG7gXUgY2FvXG4gICAgICBhcnJvdy5pbm5lckhUTUwgPSBgXG4gICAgICAgIDxzdmcgd2lkdGg9XCIke2Fycm93U2l6ZX1cIiBoZWlnaHQ9XCIke2Fycm93U2l6ZX1cIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgPHBhdGggZD1cIk04IDRMMTYgOEw4IDEyWlwiIGZpbGw9XCIjOWNhM2FmXCIvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIGA7XG4gICAgICBhcnJvdy5zdHlsZS5sZWZ0ID0gYCR7ZWxlbWVudC50cmFuc2xhdGVYIC0gYXJyb3dTaXplfXB4YDtcbiAgICAgIGFycm93LnN0eWxlLnRvcCA9IGAke2VsZW1lbnQudHJhbnNsYXRlWSArIG5vZGVIZWlnaHQgLyAyIC0gYXJyb3dTaXplIC8gMn1weGA7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE3FqWkgdMOqbiDilrwg4bufIHBow61hIFRSw4pOIG5vZGUsIGPEg24gZ2nhu69hIHRoZW8gY2hp4buBdSBy4buZbmdcbiAgICAgIGFycm93LmlubmVySFRNTCA9IGBcbiAgICAgICAgPHN2ZyB3aWR0aD1cIiR7YXJyb3dTaXplfVwiIGhlaWdodD1cIiR7YXJyb3dTaXplfVwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICA8cGF0aCBkPVwiTTggMTZMNCAxMkgxMkw4IDE2WlwiIGZpbGw9XCIjOWNhM2FmXCIvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIGA7XG4gICAgICBhcnJvdy5zdHlsZS5sZWZ0ID0gYCR7ZWxlbWVudC50cmFuc2xhdGVYICsgbm9kZVdpZHRoIC8gMiAtIGFycm93U2l6ZSAvIDJ9cHhgO1xuICAgICAgYXJyb3cuc3R5bGUudG9wID0gYCR7ZWxlbWVudC50cmFuc2xhdGVZIC0gYXJyb3dTaXplfXB4YDtcbiAgICB9XG5cbiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoYXJyb3cpO1xuICAgIHJldHVybiBhcnJvdztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgYnJhbmNoIGxhYmVscyAodGV4dCBhbm5vdGF0aW9ucyBvbiBicmFuY2hlcylcbiAgICovXG4gIHByaXZhdGUgcmVuZGVyQnJhbmNoTGFiZWxzKGVsZW1lbnRzOiBBcnJheTxJRGlhZ3JhbUVsZW1lbnQ+KSB7XG4gICAgY29uc3Qgc3ZnQ29udGFpbmVyID0gdGhpcy5jb25maWdDYW52YXMoKT8uc3ZnQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50O1xuICAgIGlmICghc3ZnQ29udGFpbmVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgaWYgKGVsZW1lbnQuYnJhbmNoZXMgJiYgZWxlbWVudC5icmFuY2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGVsZW1lbnQuYnJhbmNoZXMuZm9yRWFjaCgoYnJhbmNoLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGlmIChicmFuY2guc3BlY2lmaWNfc3RhcnRfYnJhbmNoX3ggIT09IHVuZGVmaW5lZCAmJiBicmFuY2guc3BlY2lmaWNfc3RhcnRfYnJhbmNoX3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKCFicmFuY2gubGFiZWwpIHtcbiAgICAgICAgICAgICAgYnJhbmNoLmxhYmVsID0gYE5ow6FuaCAke2luZGV4ICsgMX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jcmVhdGVCcmFuY2hMYWJlbChicmFuY2gpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChicmFuY2guZWxlbWVudHMgJiYgYnJhbmNoLmVsZW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyQnJhbmNoTGFiZWxzKGJyYW5jaC5lbGVtZW50cyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQnJhbmNoTGFiZWwoYnJhbmNoOiBJRGlhZ3JhbUVsZW1lbnRCcmFuY2gpOiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWdDYW52YXMoKTtcbiAgICBjb25zdCBjb250YWluZXIgPSBjb25maWc/Lm5vZGVzQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50O1xuICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGxhYmVsRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgbGFiZWxEaXYuY2xhc3NOYW1lID0gYGJyYW5jaC1sYWJlbCAke2JyYW5jaC5sYWJlbENsYXNzTmFtZSB8fCAnbGlicy11aS1mb250LWg3cid9YDtcbiAgICBsYWJlbERpdi50ZXh0Q29udGVudCA9IGJyYW5jaC5sYWJlbCB8fCAnJztcblxuICAgIGxhYmVsRGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICBsYWJlbERpdi5zdHlsZS5wYWRkaW5nID0gJzJweCA3cHgnO1xuICAgIGxhYmVsRGl2LnN0eWxlLmJvcmRlclJhZGl1cyA9ICcxMHB4JztcbiAgICBsYWJlbERpdi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBicmFuY2gubGFiZWxCZ0NvbG9yIHx8ICcjZjNmNGY2JztcbiAgICBsYWJlbERpdi5zdHlsZS5jb2xvciA9IGJyYW5jaC5sYWJlbENvbG9yIHx8ICcjMzc0MTUxJztcbiAgICBsYWJlbERpdi5zdHlsZS53aGl0ZVNwYWNlID0gJ25vd3JhcCc7XG4gICAgbGFiZWxEaXYuc3R5bGUuekluZGV4ID0gJzInO1xuICAgIGxhYmVsRGl2LnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG5cbiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQobGFiZWxEaXYpO1xuXG4gICAgY29uc3Qgc3RhcnRYID0gYnJhbmNoLnNwZWNpZmljX3N0YXJ0X2JyYW5jaF94ID8/IDA7XG4gICAgY29uc3Qgc3RhcnRZID0gYnJhbmNoLnNwZWNpZmljX3N0YXJ0X2JyYW5jaF95ID8/IDA7XG4gICAgY29uc3QgbGFiZWxXID0gbGFiZWxEaXYub2Zmc2V0V2lkdGg7XG4gICAgY29uc3QgbGFiZWxIID0gbGFiZWxEaXYub2Zmc2V0SGVpZ2h0IHx8IDE4O1xuXG4gICAgaWYgKHRoaXMub3JpZW50YXRpb24oKSA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICAvKipcbiAgICAgICAqIEhvcml6b250YWw6IGxhYmVsIG7hurFtIFRSw4pOIMSRxrDhu51uZyBsaW5lIG7hurFtIG5nYW5nLlxuICAgICAgICogc3BlY2lmaWNfc3RhcnRfYnJhbmNoID0gxJFp4buDbSBi4bqvdCDEkeG6p3UgxJFv4bqhbiB0aOG6s25nIG5nYW5nIMSR4bq/biBlbGVtZW50LlxuICAgICAgICogxJDhurd0IGxhYmVsIHThu4tuaCB0aeG6v24gc2FuZyBwaOG6o2kgOHB4IHThu6sgbmdv4bq3dCBuaMOhbmgsIHbDoCBjxINuIGdp4buvYSBkw6J5LlxuICAgICAgICovXG4gICAgICBsYWJlbERpdi5zdHlsZS5sZWZ0ID0gYCR7c3RhcnRYICsgNH1weGA7XG4gICAgICBsYWJlbERpdi5zdHlsZS50b3AgPSBgJHtzdGFydFkgLSBsYWJlbEggLyAyfXB4YDtcbiAgICB9IGVsc2Uge1xuICAgICAgLyoqXG4gICAgICAgKiBWZXJ0aWNhbDogbGFiZWwgbuG6sW0gQsOKTiBUUsOBSSDEkcaw4budbmcgbmdhbmcsIGPEg24gZ2nhu69hIHRoZW8gWS5cbiAgICAgICAqIHNwZWNpZmljX3N0YXJ0X2JyYW5jaCA9IMSRaeG7g20gxJHhuqd1IMSRb+G6oW4gdGjhurNuZyDEkeG6v24gZWxlbWVudCAoc2F1IGN1cnZlKS5cbiAgICAgICAqL1xuICAgICAgbGFiZWxEaXYuc3R5bGUubGVmdCA9IGAke3N0YXJ0WCAtIGxhYmVsVyAvIDIgLSA0fXB4YDtcbiAgICAgIGxhYmVsRGl2LnN0eWxlLnRvcCA9IGAke3N0YXJ0WSAtIGxhYmVsSCAvIDIgKyA0fXB4YDtcbiAgICB9XG4gICAgcmV0dXJuIGxhYmVsRGl2O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciBk4bqldSBcIitcIiB04bqhaSBt4buXaSB24buLIHRyw60gY8OzIHRo4buDIHRo4bqjIGVsZW1lbnQgdOG7qyBzaWRlYmFyLlxuICAgKiBTZXJ2aWNlIHThu7EgdOG6oW8gRE9NIGVsZW1lbnRzIHbDoCBpbmplY3QgdsOgbyBub2Rlc0NvbnRhaW5lci5cbiAgICogQHBhcmFtIGZsYXRFbGVtZW50cyBEYW5oIHPDoWNoIGZsYXQgZWxlbWVudHMgxJHDoyB0w61uaCB0b8OhbiB24buLIHRyw61cbiAgICogQHBhcmFtIG9uRHJvcCBDYWxsYmFjayBraGkgbmfGsOG7nWkgZMO5bmcgdGjhuqMgZWxlbWVudCB2w6BvIG3hu5l0IFwiK1wiXG4gICAqIEBwYXJhbSBjYW5Ecm9wRm4gKHTDuXkgY2jhu41uKSBGdW5jdGlvbiBraeG7g20gdHJhIMSRaeG7gXUga2nhu4duIGhp4buDbiB0aOG7iyBkcm9wIHpvbmUuXG4gICAqIGBgYFxuICAgKi9cbiAgcmVuZGVyRHJvcFpvbmVzKGZsYXRFbGVtZW50czogSURpYWdyYW1FbGVtZW50W10sIG9uRHJvcDogKGVsZW1lbnQ6IElEaWFncmFtRWxlbWVudCwgYnJhbmNoOiBJRGlhZ3JhbUVsZW1lbnRCcmFuY2ggfCB1bmRlZmluZWQsIGRyYWdEYXRhOiBzdHJpbmcpID0+IHZvaWQsIGNhbkRyb3BGbjogVERyb3Bab25lQ2FuRHJvcEZuLCBydWxlQ29ubmVjdGFibGVFbGVtZW50czogQXJyYXk8SVJ1bGVDb25uZWN0YWJsZT4pOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyRHJvcFpvbmVzKCk7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5jb25maWdDYW52YXMoKT8ubm9kZXNDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQ7XG4gICAgaWYgKCFjb250YWluZXIpIHJldHVybjtcblxuICAgIGZsYXRFbGVtZW50cy5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgaWYgKGVsLmNvZGUgPT09IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuVFlQRV9FTEVNRU5UX0VYSVQpIHJldHVybjtcblxuICAgICAgaWYgKGVsLmVsZW1lbnRfdHlwZSA9PT0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5UWVBFX0VMRU1FTlRfV09SS0ZMT1cpIHtcbiAgICAgICAgZWwuYnJhbmNoZXM/LmZvckVhY2goKGJyYW5jaCkgPT4ge1xuICAgICAgICAgIGlmIChjYW5Ecm9wRm4odW5kZWZpbmVkLCBlbCwgYnJhbmNoLCBydWxlQ29ubmVjdGFibGVFbGVtZW50cykpIHJldHVybjtcblxuICAgICAgICAgIGNvbnN0IHRvcCA9IHRoaXMub3JpZW50YXRpb24oKSA9PT0gJ2hvcml6b250YWwnID8gdGhpcy5jYWxjRHJvcFpvbmVUb3BCcmFuY2hIKGVsLCBicmFuY2gpIDogdGhpcy5jYWxjRHJvcFpvbmVUb3BCcmFuY2goZWwsIGJyYW5jaCk7XG4gICAgICAgICAgY29uc3QgbGVmdCA9IHRoaXMub3JpZW50YXRpb24oKSA9PT0gJ2hvcml6b250YWwnID8gdGhpcy5jYWxjRHJvcFpvbmVMZWZ0QnJhbmNoSChlbCwgYnJhbmNoKSA6IHRoaXMuY2FsY0Ryb3Bab25lTGVmdEJyYW5jaChlbCwgYnJhbmNoKTtcbiAgICAgICAgICB0aGlzLmNyZWF0ZURyb3Bab25lRWwoY29udGFpbmVyLCB0b3AsIGxlZnQsIGVsLCBicmFuY2gsIG9uRHJvcCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFjYW5Ecm9wRm4odW5kZWZpbmVkLCBlbCwgdW5kZWZpbmVkLCBydWxlQ29ubmVjdGFibGVFbGVtZW50cykpIHJldHVybjtcblxuICAgICAgICBjb25zdCB0b3AgPSB0aGlzLm9yaWVudGF0aW9uKCkgPT09ICdob3Jpem9udGFsJyA/IHRoaXMuY2FsY0Ryb3Bab25lVG9wTm9kZUgoZWwpIDogdGhpcy5jYWxjRHJvcFpvbmVUb3BOb2RlKGVsKTtcbiAgICAgICAgY29uc3QgbGVmdCA9IHRoaXMub3JpZW50YXRpb24oKSA9PT0gJ2hvcml6b250YWwnID8gdGhpcy5jYWxjRHJvcFpvbmVMZWZ0Tm9kZUgoZWwpIDogdGhpcy5jYWxjRHJvcFpvbmVMZWZ0Tm9kZShlbCk7XG4gICAgICAgIHRoaXMuY3JlYXRlRHJvcFpvbmVFbChjb250YWluZXIsIHRvcCwgbGVmdCwgZWwsIHVuZGVmaW5lZCwgb25Ecm9wKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBk4buvIGxp4buHdSBuYXZpZ2F0aW9uIGxpbmUgKG5leHRfb3RoZXJfaWQpIHThu6sgZmxhdCBlbGVtZW50cyDEkeG7gyByZW5kZXIgcXVhIGRyYXctbGluZSBkaXJlY3RpdmUuXG4gICAqIFNlcnZpY2UgdOG7sSDEkeG7jWMgYG9yaWVudGF0aW9uKClgIMSR4buDIGNo4buNbiBwYXR0ZXJuIGVuZHBvaW50IHBow7kgaOG7o3AuXG4gICAqIENhbGxlciBjaOG7iSBj4bqnbiB0cnV54buBbiB2w6BvIGBkcmF3TGluZUZ1bmN0aW9uQ29udHJvbC5zZXREYXRhKC4uLilgLlxuICAgKi9cbiAgYnVpbGROYXZpZ2F0aW9uRGF0YShmbGF0RWxlbWVudHM6IElEaWFncmFtRWxlbWVudFtdLCBzdHlsZUNvbmZpZz86IElOYXZpZ2F0aW9uTGluZVN0eWxlQ29uZmlnKTogSURyYXdMaW5lRGF0YUlucHV0W10ge1xuICAgIHJldHVybiBMaWJzVWlEaWFncmFtRHJhd05hdmlnYXRpb25VdGlsLmJ1aWxkTmF2aWdhdGlvbkRhdGEoZmxhdEVsZW1lbnRzLCB0aGlzLm9yaWVudGF0aW9uKCksIHN0eWxlQ29uZmlnKTtcbiAgfVxuXG4gIC8qKiBYw7NhIHThuqV0IGPhuqMgZHJvcCB6b25lIFwiK1wiIGto4buPaSBET00gKi9cbiAgY2xlYXJEcm9wWm9uZXMoKTogdm9pZCB7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5jb25maWdDYW52YXMoKT8ubm9kZXNDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQ7XG4gICAgaWYgKCFjb250YWluZXIpIHJldHVybjtcbiAgICBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnLmRpYWdyYW0tZHJvcC16b25lJykuZm9yRWFjaCgoZWwpID0+IGVsLnJlbW92ZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRHJvcFpvbmVFbChcbiAgICBjb250YWluZXI6IEhUTUxFbGVtZW50LFxuICAgIHRvcDogbnVtYmVyLFxuICAgIGxlZnQ6IG51bWJlcixcbiAgICBlbGVtZW50OiBJRGlhZ3JhbUVsZW1lbnQsXG4gICAgYnJhbmNoOiBJRGlhZ3JhbUVsZW1lbnRCcmFuY2ggfCB1bmRlZmluZWQsXG4gICAgb25Ecm9wOiAoZWxlbWVudDogSURpYWdyYW1FbGVtZW50LCBicmFuY2g6IElEaWFncmFtRWxlbWVudEJyYW5jaCB8IHVuZGVmaW5lZCwgZHJhZ0RhdGE6IHN0cmluZykgPT4gdm9pZFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBpbmRpY2F0b3JTdHlsZTogSURyb3Bab25lSW5kaWNhdG9yU3R5bGUgfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZ0NhbnZhcygpPy5kcm9wWm9uZVN0eWxlO1xuICAgIGNvbnN0IFJFQ1RfVyA9IGVsZW1lbnQuc3BlY2lmaWNfd2lkdGggPz8gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5XSURUSF9FTEVNRU5UX0RFRkFVTFQ7XG4gICAgY29uc3QgUkVDVF9IID0gZWxlbWVudC5zcGVjaWZpY19oZWlnaHQgPz8gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5IRUlHSFRfRUxFTUVOVF9ERUZBVUxUO1xuXG4gICAgLy8gVMOibSBj4bunYSBuw7p0IHRyw7JuXG4gICAgY29uc3QgY2VudGVyWCA9IGxlZnQgKyBjYW52YXNDb25maWdSZWFkb25seSgpLkFERF9JQ09OX0RJQU1FVEVSIC8gMjtcbiAgICBjb25zdCBjZW50ZXJZID0gdG9wICsgY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5BRERfSUNPTl9ESUFNRVRFUiAvIDI7XG5cbiAgICAvLyBIaXQgem9uZSB2w7QgaMOsbmg6IHLhu5luZyBoxqFuIHJlY3RhbmdsZSBt4buZdCBraG/huqNuIHBhZGRpbmcgxJHhu4MgYuG6r3QgZHJhZyBz4bubbSBoxqFuXG4gICAgY29uc3QgSElUX1BBRCA9IDIwO1xuICAgIGNvbnN0IEhJVF9XID0gUkVDVF9XICsgSElUX1BBRCAqIDI7XG4gICAgY29uc3QgSElUX0ggPSBSRUNUX0ggKyBISVRfUEFEICogMjtcbiAgICBjb25zdCBoaXRMZWZ0ID0gY2VudGVyWCAtIEhJVF9XIC8gMjtcbiAgICBjb25zdCBoaXRUb3AgPSBjZW50ZXJZIC0gSElUX0ggLyAyO1xuXG4gICAgLy8g4pSA4pSAIEhpdCB6b25lICh3cmFwcGVyIHbDtCBow6xuaCwgdsO5bmcgbmjhuq1uIGRyYWcgcuG7mW5nKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICBjb25zdCBoaXRab25lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgaGl0Wm9uZS5jbGFzc05hbWUgPSAnZGlhZ3JhbS1kcm9wLXpvbmUnO1xuICAgIGhpdFpvbmUuc3R5bGUuY3NzVGV4dCA9IGBcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogJHtoaXRUb3B9cHg7XG4gICAgICBsZWZ0OiAke2hpdExlZnR9cHg7XG4gICAgICB6LWluZGV4OiA5O1xuICAgICAgd2lkdGg6ICR7SElUX1d9cHg7XG4gICAgICBoZWlnaHQ6ICR7SElUX0h9cHg7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgYDtcblxuICAgIC8vIOKUgOKUgCBJbmRpY2F0b3IgKGNvbiBiw6puIHRyb25nLCBwaOG6p24gaGnhu4NuIHRo4buLKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICBjb25zdCBpbmRpY2F0b3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBpbmRpY2F0b3Iuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJzsgLy8gdHLDoW5oIHRyYW5oIGNo4bqlcCBldmVudCB24bubaSBoaXRab25lXG5cbiAgICAvLyBW4buLIHRyw60gZG90IHRyb25nIGhpdFpvbmUgKGPEg24gZ2nhu69hIGhpdFpvbmUpXG4gICAgY29uc3QgZG90T2Zmc2V0TGVmdCA9IEhJVF9XIC8gMiAtIGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuQUREX0lDT05fRElBTUVURVIgLyAyO1xuICAgIGNvbnN0IGRvdE9mZnNldFRvcCA9IEhJVF9IIC8gMiAtIGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuQUREX0lDT05fRElBTUVURVIgLyAyO1xuXG4gICAgLy8gVuG7iyB0csOtIHJlY3RhbmdsZSB0cm9uZyBoaXRab25lIChjxINuIGdp4buvYSBoaXRab25lKVxuICAgIGNvbnN0IHJlY3RPZmZzZXRMZWZ0ID0gSElUX1BBRDtcbiAgICBjb25zdCByZWN0T2Zmc2V0VG9wID0gSElUX0ggLyAyIC0gUkVDVF9IIC8gMjtcblxuICAgIGNvbnN0IGFwcGx5RG90U3R5bGUgPSAoKSA9PiB7XG4gICAgICBjb25zdCBzID0gaW5kaWNhdG9yU3R5bGU7XG4gICAgICBjb25zdCBzaXplID0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5BRERfSUNPTl9ESUFNRVRFUjtcbiAgICAgIGNvbnN0IGJnID0gcz8uYmFja2dyb3VuZENvbG9yID8/ICcjM2I4MmY2JztcbiAgICAgIGNvbnN0IGljb25Db2xvciA9IHM/Lmljb25Db2xvciA/PyAnI2ZmZmZmZic7XG4gICAgICBjb25zdCBvcGFjaXR5ID0gcz8ub3BhY2l0eSA/PyAwLjk1O1xuICAgICAgY29uc3QgYm9yZGVyUmFkaXVzID0gcz8uYm9yZGVyUmFkaXVzID8/ICc1MCUnO1xuXG4gICAgICBzZXRTdHlsZXNFbGVtZW50KGluZGljYXRvciwge1xuICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgdG9wOiBgJHtkb3RPZmZzZXRUb3B9cHhgLFxuICAgICAgICBsZWZ0OiBgJHtkb3RPZmZzZXRMZWZ0fXB4YCxcbiAgICAgICAgd2lkdGg6IGAke3NpemV9cHhgLFxuICAgICAgICBoZWlnaHQ6IGAke3NpemV9cHhgLFxuICAgICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgdHJhbnNpdGlvbjogJ29wYWNpdHkgMC4xNXMgZWFzZScsXG4gICAgICAgIGJvcmRlcjogJ25vbmUnLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChzPy5yZW5kZXJJbmRpY2F0b3IpIHtcbiAgICAgICAgaW5kaWNhdG9yLmlubmVySFRNTCA9IHMucmVuZGVySW5kaWNhdG9yKHNpemUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5kaWNhdG9yLmlubmVySFRNTCA9IGBcbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiXG4gICAgICAgICAgICB3aWR0aDogJHtzaXplfXB4O1xuICAgICAgICAgICAgaGVpZ2h0OiAke3NpemV9cHg7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2JnfTtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICR7Ym9yZGVyUmFkaXVzfTtcbiAgICAgICAgICAgIG9wYWNpdHk6ICR7b3BhY2l0eX07XG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgICAgXCI+PGkgY2xhc3M9XCJsaWJzLXVpLWljb24tYWRkIGJlZm9yZTp0ZXh0LVske2ljb25Db2xvcn1dXCI+PC9pPjwvZGl2PlxuICAgICAgICBgO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBhcHBseVJlY3RTdHlsZSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHMgPSBpbmRpY2F0b3JTdHlsZTtcbiAgICAgIGNvbnN0IGhvdmVyQmcgPSBzPy5ob3ZlckJhY2tncm91bmRDb2xvciA/PyAnI2VlZjRmZic7XG4gICAgICBjb25zdCBob3ZlckJvcmRlciA9IHM/LmhvdmVyQm9yZGVyQ29sb3IgPz8gJ3JnYmEoNTksIDEzMCwgMjQ2LCAwLjcpJztcbiAgICAgIGNvbnN0IGhvdmVyQm9yZGVyU3R5bGUgPSBzPy5ob3ZlckJvcmRlclN0eWxlID8/ICdkYXNoZWQnO1xuICAgICAgY29uc3QgaG92ZXJSYWRpdXMgPSBzPy5ob3ZlckJvcmRlclJhZGl1cyA/PyAxMDtcblxuICAgICAgc2V0U3R5bGVzRWxlbWVudChpbmRpY2F0b3IsIHtcbiAgICAgICAgdG9wOiBgJHtyZWN0T2Zmc2V0VG9wfXB4YCxcbiAgICAgICAgbGVmdDogYCR7cmVjdE9mZnNldExlZnR9cHhgLFxuICAgICAgICB3aWR0aDogYCR7UkVDVF9XfXB4YCxcbiAgICAgICAgaGVpZ2h0OiBgJHtSRUNUX0h9cHhgLFxuICAgICAgICBib3JkZXJSYWRpdXM6IGAke2hvdmVyUmFkaXVzfXB4YCxcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBob3ZlckJnLFxuICAgICAgICBib3JkZXI6IGAycHggJHtob3ZlckJvcmRlclN0eWxlfSAke2hvdmVyQm9yZGVyfWAsXG4gICAgICAgIHRyYW5zaXRpb246ICdhbGwgMC4ycyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpJyxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBO4bq/dSBjw7MgaMOgbSByZW5kZXIgxJHhu5luZyBjaG8gdHLhuqFuZyB0aMOhaSBob3ZlciDigJQgZ+G7jWkgbsOzXG4gICAgICBpbmRpY2F0b3IuaW5uZXJIVE1MID0gcz8ucmVuZGVySG92ZXJJbmRpY2F0b3IgPyBzLnJlbmRlckhvdmVySW5kaWNhdG9yKCkgOiAnJztcbiAgICB9O1xuXG4gICAgYXBwbHlEb3RTdHlsZSgpO1xuICAgIGhpdFpvbmUuYXBwZW5kQ2hpbGQoaW5kaWNhdG9yKTtcblxuICAgIGhpdFpvbmUuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VudGVyJywgKGU6IERyYWdFdmVudCkgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgYXBwbHlSZWN0U3R5bGUoKTtcbiAgICB9KTtcblxuICAgIGhpdFpvbmUuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCAoZTogRHJhZ0V2ZW50KSA9PiB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBpZiAoZS5kYXRhVHJhbnNmZXIpIGUuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnY29weSc7XG4gICAgfSk7XG5cbiAgICBoaXRab25lLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdsZWF2ZScsIChlOiBEcmFnRXZlbnQpID0+IHtcbiAgICAgIGlmICghaGl0Wm9uZS5jb250YWlucyhlLnJlbGF0ZWRUYXJnZXQgYXMgTm9kZSkpIHtcbiAgICAgICAgYXBwbHlEb3RTdHlsZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaGl0Wm9uZS5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgKGU6IERyYWdFdmVudCkgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGNvbnN0IHJhdyA9IGUuZGF0YVRyYW5zZmVyPy5nZXREYXRhKCdhcHBsaWNhdGlvbi9qc29uJykgPz8gJyc7XG4gICAgICBvbkRyb3AoZWxlbWVudCwgYnJhbmNoLCByYXcpO1xuICAgIH0pO1xuXG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGhpdFpvbmUpO1xuICB9XG5cbiAgLy8g4pSA4pSAIFZlcnRpY2FsIGRyb3Agem9uZSBoZWxwZXJzIChleGlzdGluZykg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIHByaXZhdGUgY2FsY0Ryb3Bab25lVG9wQnJhbmNoKGVsOiBJRGlhZ3JhbUVsZW1lbnQsIGJyYW5jaDogSURpYWdyYW1FbGVtZW50QnJhbmNoKTogbnVtYmVyIHtcbiAgICBjb25zdCBvYyA9IGJyYW5jaC5ub2RlT3RoZXJDb25maWc7XG4gICAgaWYgKG9jKSByZXR1cm4gKG9jLnNwZWNpZmljX3kgPz8gMCkgKyAob2Muc3BlY2lmaWNfaGVpZ2h0ID8/IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRUxFTUVOVF9XQUlUX0RFRkFVTFQpICsgMTA7XG4gICAgcmV0dXJuIChicmFuY2guc3BlY2lmaWNfc3RhcnRfYnJhbmNoX3kgPz8gMCkgKyAzMDtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY0Ryb3Bab25lTGVmdEJyYW5jaChlbDogSURpYWdyYW1FbGVtZW50LCBicmFuY2g6IElEaWFncmFtRWxlbWVudEJyYW5jaCk6IG51bWJlciB7XG4gICAgY29uc3QgZmlyc3RFbCA9IGJyYW5jaC5lbGVtZW50cz8uWzBdO1xuICAgIGlmIChmaXJzdEVsPy50cmFuc2xhdGVYICE9PSB1bmRlZmluZWQpIHJldHVybiBmaXJzdEVsLnRyYW5zbGF0ZVggKyAoZmlyc3RFbC5zcGVjaWZpY193aWR0aCA/PyBjYW52YXNDb25maWdSZWFkb25seSgpLldJRFRIX0VMRU1FTlRfREVGQVVMVCkgLyAyIC0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5BRERfSUNPTl9ESUFNRVRFUiAvIDI7XG4gICAgcmV0dXJuIChlbC50cmFuc2xhdGVYID8/IDApICsgKGVsLnNwZWNpZmljX3dpZHRoID8/IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuV0lEVEhfRUxFTUVOVF9ERUZBVUxUKSAvIDIgLSBjYW52YXNDb25maWdSZWFkb25seSgpLkFERF9JQ09OX0RJQU1FVEVSIC8gMjtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY0Ryb3Bab25lVG9wTm9kZShlbDogSURpYWdyYW1FbGVtZW50KTogbnVtYmVyIHtcbiAgICBjb25zdCBvYyA9IGVsLm5vZGVPdGhlckNvbmZpZztcbiAgICBpZiAob2MpIHJldHVybiAob2Muc3BlY2lmaWNfeSA/PyAwKSArIChvYy5zcGVjaWZpY19oZWlnaHQgPz8gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5FTEVNRU5UX1dBSVRfREVGQVVMVCkgKyAxMDtcbiAgICByZXR1cm4gKGVsLnRyYW5zbGF0ZVkgPz8gMCkgKyAoZWwuc3BlY2lmaWNfaGVpZ2h0ID8/IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuSEVJR0hUX0VMRU1FTlRfREVGQVVMVCkgKyAxMDtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY0Ryb3Bab25lTGVmdE5vZGUoZWw6IElEaWFncmFtRWxlbWVudCk6IG51bWJlciB7XG4gICAgcmV0dXJuIChlbC50cmFuc2xhdGVYID8/IDApICsgKGVsLnNwZWNpZmljX3dpZHRoID8/IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuV0lEVEhfRUxFTUVOVF9ERUZBVUxUKSAvIDIgLSBjYW52YXNDb25maWdSZWFkb25seSgpLkFERF9JQ09OX0RJQU1FVEVSIC8gMjtcbiAgfVxuXG4gIC8vIOKUgOKUgCBIb3Jpem9udGFsIGRyb3Agem9uZSBoZWxwZXJzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvKipcbiAgICogSG9yaXpvbnRhbCBub2RlOiBcIitcIiBu4bqxbSBnaeG7r2EgxJHGsOG7nW5nIGxpbmUgbuG7kWkgMiBub2RlIOKAlCBjxINuIGdp4buvYSBZIGPhu6dhIGVsZW1lbnQuXG4gICAqL1xuICBwcml2YXRlIGNhbGNEcm9wWm9uZVRvcE5vZGVIKGVsOiBJRGlhZ3JhbUVsZW1lbnQpOiBudW1iZXIge1xuICAgIGNvbnN0IEQgPSBjYW52YXNDb25maWdSZWFkb25seSgpLkFERF9JQ09OX0RJQU1FVEVSO1xuICAgIGNvbnN0IGNlbnRlclkgPSAoZWwudHJhbnNsYXRlWSA/PyAwKSArIChlbC5zcGVjaWZpY19oZWlnaHQgPz8gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5IRUlHSFRfRUxFTUVOVF9ERUZBVUxUKSAvIDI7XG4gICAgcmV0dXJuIGNlbnRlclkgLSBEIC8gMjtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY0Ryb3Bab25lTGVmdE5vZGVIKGVsOiBJRGlhZ3JhbUVsZW1lbnQpOiBudW1iZXIge1xuICAgIGNvbnN0IEQgPSBjYW52YXNDb25maWdSZWFkb25seSgpLkFERF9JQ09OX0RJQU1FVEVSO1xuICAgIGNvbnN0IE0gPSBjYW52YXNDb25maWdSZWFkb25seSgpLkVMRU1FTlRfTUFSR0lOX0RFRkFVTFQ7XG4gICAgY29uc3Qgb2MgPSBlbC5ub2RlT3RoZXJDb25maWc7XG5cbiAgICBpZiAob2MpIHtcbiAgICAgIGNvbnN0IHJpZ2h0ID0gKG9jLnNwZWNpZmljX3ggPz8gMCkgKyAob2Muc3BlY2lmaWNfd2lkdGggPz8gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5FTEVNRU5UX1dBSVRfREVGQVVMVCk7XG4gICAgICByZXR1cm4gcmlnaHQgKyBNIC8gMiAtIEQgLyAyO1xuICAgIH1cblxuICAgIGNvbnN0IHJpZ2h0ID0gKGVsLnRyYW5zbGF0ZVggPz8gMCkgKyAoZWwuc3BlY2lmaWNfd2lkdGggPz8gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5XSURUSF9FTEVNRU5UX0RFRkFVTFQpO1xuICAgIC8vIE1pZHBvaW50IGPhu6dhIGtob+G6o25nIHRy4buRbmcgZ2nhu69hIG5vZGUgdsOgIG5vZGUgdGnhur9wIHRoZW8gKGdhcCA9IEVMRU1FTlRfTUFSR0lOX0RFRkFVTFQpXG4gICAgcmV0dXJuIHJpZ2h0ICsgTSAvIDIgLSBEIC8gMjtcbiAgfVxuXG4gIC8qKlxuICAgKiBIb3Jpem9udGFsIGJyYW5jaDogXCIrXCIgbuG6sW0gY8SDbiBnaeG7r2EgWSBj4bunYSBicmFuY2ggbGluZSwgc2F1IHBo4bqnbiB04butIGN14buRaSB0cm9uZyBuaMOhbmguXG4gICAqL1xuICBwcml2YXRlIGNhbGNEcm9wWm9uZVRvcEJyYW5jaEgoZWw6IElEaWFncmFtRWxlbWVudCwgYnJhbmNoOiBJRGlhZ3JhbUVsZW1lbnRCcmFuY2gpOiBudW1iZXIge1xuICAgIGNvbnN0IEQgPSBjYW52YXNDb25maWdSZWFkb25seSgpLkFERF9JQ09OX0RJQU1FVEVSO1xuICAgIC8vIHNwZWNpZmljX3N0YXJ0X2JyYW5jaF95ID0gdMOibSBZIGPhu6dhIMSRxrDhu51uZyBuaMOhbmhcbiAgICBjb25zdCBjZW50ZXJZID0gYnJhbmNoLnNwZWNpZmljX3N0YXJ0X2JyYW5jaF95ID8/IDA7XG4gICAgcmV0dXJuIGNlbnRlclkgLSBEIC8gMjtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY0Ryb3Bab25lTGVmdEJyYW5jaEgoZWw6IElEaWFncmFtRWxlbWVudCwgYnJhbmNoOiBJRGlhZ3JhbUVsZW1lbnRCcmFuY2gpOiBudW1iZXIge1xuICAgIGNvbnN0IEQgPSBjYW52YXNDb25maWdSZWFkb25seSgpLkFERF9JQ09OX0RJQU1FVEVSO1xuICAgIGNvbnN0IE0gPSBjYW52YXNDb25maWdSZWFkb25seSgpLkVMRU1FTlRfTUFSR0lOX0RFRkFVTFQ7XG5cbiAgICAvLyBTYXUgbm9kZU90aGVyQ29uZmlnIGPhu6dhIG5ow6FuaCAoY+G7lSBuaMOhbmgpXG4gICAgY29uc3Qgb2MgPSBicmFuY2gubm9kZU90aGVyQ29uZmlnO1xuICAgIGlmIChvYz8uc3BlY2lmaWNfeCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gKG9jLnNwZWNpZmljX3ggPz8gMCkgKyAob2Muc3BlY2lmaWNfd2lkdGggPz8gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5FTEVNRU5UX1dBSVRfREVGQVVMVCkgKyBNIC8gMiAtIEQgLyAyO1xuICAgIH1cbiAgICAvLyBO4bq/dSBuaMOhbmgga2jDtG5nIGPDsyBub2RlT3RoZXJDb25maWc6IMSR4bq3dCBzYXUgxJFp4buDbSBy4bq9IG5ow6FuaFxuICAgIHJldHVybiAoYnJhbmNoLnNwZWNpZmljX3N0YXJ0X2JyYW5jaF94ID8/IDApICsgTSAvIDIgLSBEIC8gMjtcbiAgfVxufVxuIl19
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhZ3JhbS5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL3NlcnZpY2VzL2RpYWdyYW0tZHJhdy9zcmMvaW50ZXJmYWNlcy9kaWFncmFtLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudFJlZiwgVHlwZSwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElEaWFncmFtRWxlbWVudCB7XG4gIC8vIGNvbmZpZyDEkeG7gyB24bq9IGRpYWdyYW1cbiAgY29kZT86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgYnJhbmNoZXM/OiBBcnJheTxJRGlhZ3JhbUVsZW1lbnRCcmFuY2g+O1xuICBzcGVjaWZpY194PzogbnVtYmVyO1xuICBzcGVjaWZpY195PzogbnVtYmVyO1xuICBzcGVjaWZpY193aWR0aD86IG51bWJlcjtcbiAgc3BlY2lmaWNfaGVpZ2h0PzogbnVtYmVyO1xuICBlbGVtZW50U3ZnPzogU1ZHUGF0aEVsZW1lbnQ7XG4gIGF0dHJpYnV0ZVN2Z0Q/OiBzdHJpbmc7XG4gIG1heEhlaWdodEJyYW5jaD86IG51bWJlcjtcbiAgcG9zaXRpb25fZW5kX2JyYW5jaD86IG51bWJlcjtcbiAgcG9zaXRpb25fZW5kPzogbnVtYmVyO1xuICB0cmFuc2xhdGVYPzogbnVtYmVyO1xuICB0cmFuc2xhdGVZPzogbnVtYmVyO1xuICBhdHRyaWJ1dGVTdmdEQ29ubmVjdFRvT3RoZXJFbGVtZW50PzogQXJyYXk8e1xuICAgIGVsZW1lbnRTdmc/OiBTVkdQYXRoRWxlbWVudDtcbiAgICBwYXRoOiBzdHJpbmc7XG4gIH0+O1xuICBwcmVfb3RoZXJfaWQ/OiBBcnJheTxzdHJpbmc+O1xuICBuZXh0X290aGVyX2lkPzogQXJyYXk8c3RyaW5nPjtcbiAgc3ViQ29kZU9mRWxlbWVudD86IHN0cmluZztcbiAgbmV4dF9pZD86IHN0cmluZztcbiAgbm9kZU90aGVyQ29uZmlnPzogSURpYWdyYW1FbGVtZW50O1xuICBkaXNhYmxlPzogYm9vbGVhbjtcblxuICAvLyBjb25maWcgY+G7p2EgZWxlbWVudCBj4bqnbiBjw7NcbiAgaWQ/OiBzdHJpbmc7XG4gIGVsZW1lbnRfdHlwZT86IHN0cmluZztcbiAgc3BlY2lmaWNfY291bnRlcl9jdXJyZW50X2NvZGU/OiBudW1iZXI7IC8vIGzGsHUgbOG6oWkgxJHhu4MgdMSDbmcgY2hvIGPDoWMga2jhu5FpIHRp4bq/cCB0aGVvIGtoaSBrw6lvIHbDoG87XG4gIHByZV9pZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRGlhZ3JhbUVsZW1lbnRCcmFuY2gge1xuICBjb2RlPzogc3RyaW5nO1xuICBsYWJlbD86IHN0cmluZzsgLy8gTGFiZWwgaGnhu4NuIHRo4buLIHRyw6puIGJyYW5jaCAodmQ6IFwiMTAwIFByb2ZpbGVzXCIsIFwiQ8OybiBs4bqhaVwiKVxuICBsYWJlbEJnQ29sb3I/OiBzdHJpbmc7IC8vIEJhY2tncm91bmQgY29sb3IgY+G7p2EgbGFiZWwgKHZkOiBcIiNmM2Y0ZjZcIilcbiAgZWxlbWVudHM6IEFycmF5PElEaWFncmFtRWxlbWVudD47XG4gIGVsZW1lbnRTdmc/OiBTVkdQYXRoRWxlbWVudDtcbiAgYXR0cmlidXRlU3ZnRD86IHN0cmluZztcbiAgb25UaGVTaWRlPzogJ2Fib3ZlJyB8ICd1bmRlcicgfCAnY2VudGVyJztcbiAgcG9zaXRpb25NYXhMZWZ0PzogbnVtYmVyO1xuICBwb3NpdGlvbk1heFRvcD86IG51bWJlcjtcbiAgc3BlY2lmaWNfc3RhcnRfYnJhbmNoX3g/OiBudW1iZXI7XG4gIHNwZWNpZmljX3N0YXJ0X2JyYW5jaF95PzogbnVtYmVyO1xuICB3aWR0aEJyYW5jaD86IHtcbiAgICB3aWR0aD86IG51bWJlcjtcbiAgICBhYm92ZT86IG51bWJlcjtcbiAgICB1bmRlcj86IG51bWJlcjtcbiAgfTtcbiAgbmV4dF9vdGhlcl9pZD86IEFycmF5PHN0cmluZz47XG4gIGlzRGlyZWN0aW9uPzogYm9vbGVhbjsgLy8gYmnhur9uIG7DoHkgZMO5bmcgc+G7rSBk4bulbmcgdOG6oW0gxJHhu4MgY2hlY2sgeGVtIG5ow6FuaCBjw7MgxJHGsOG7o2MgxJFp4buBdSBoxrDhu5tuZyBoYXkga2jDtG5nO1xuXG4gIG5vZGVPdGhlckNvbmZpZz86IElEaWFncmFtRWxlbWVudDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ2FudmFzQ29uZmlnIHtcbiAgRUxFTUVOVF9XSURUSF9ERUZBVUxUX0JSQU5DSF9XSEVOX05PVF9FTEVNRU5UOiBudW1iZXI7XG4gIEVMRU1FTlRfTUFSR0lOX0RFRkFVTFQ6IG51bWJlcjtcbiAgRUxFTUVOVF9NQVJHSU5fREVGQVVMVF9CUkFOQ0g6IG51bWJlcjtcbiAgRUxFTUVOVF9NQVJHSU5fQkVUV0VFTl9CUkFOQ0hfREVGQVVMVDogbnVtYmVyO1xuICBERUZBVUxUX0JSQU5DSF9XSEVOX05PX0VMRU1FTlQ6IG51bWJlcjtcbiAgRUxFTUVOVF9IRUlHSFRfQ1VSVkU6IG51bWJlcjtcbiAgRUxFTUVOVF9TVkdfU1RST0tFX0NPTE9SOiBzdHJpbmc7XG4gIEVMRU1FTlRfU1ZHX1NUUk9LRV9XSURUSDogc3RyaW5nO1xuICBFTEVNRU5UX01BUkdJTl9ERUZBVUxUX0JSQU5DSF9UT19FTEVNRU5UX0ZJUlNUOiBudW1iZXI7XG5cbiAgLy8gY29uZmlnIG90aGVyIG5vZGVcbiAgRElTVEFOQ0VfVE9fV0FJVDogbnVtYmVyO1xuICBXQUlUX1RPX0VMRU1FTlQ6IG51bWJlcjtcbiAgRUxFTUVOVF9XQUlUX0RFRkFVTFQ6IG51bWJlcjtcbiAgRElTVEFOQ0VfV0FJVF9UT19ORVhUX0xJTkU6IG51bWJlcjtcblxuICAvLyBjb25maWcgZWxlbWVudFxuICBUWVBFX0VMRU1FTlRfRVhJVDogc3RyaW5nO1xuICBUWVBFX0VMRU1FTlRfV09SS0ZMT1c6IHN0cmluZztcbiAgV0lEVEhfRUxFTUVOVF9ERUZBVUxUOiBudW1iZXI7XG4gIEhFSUdIVF9FTEVNRU5UX0RFRkFVTFQ6IG51bWJlcjtcblxuICBBRERfSUNPTl9ESUFNRVRFUjogbnVtYmVyO1xufVxuXG4vKipcbiAqIFN0eWxlIGNvbmZpZyBjaG8gaW5kaWNhdG9yIChuw7p0IFwiK1wiKSBj4bunYSBkcm9wIHpvbmUuXG4gKiBU4bqldCBj4bqjIGPDoWMgZmllbGQgxJHhu4F1IG9wdGlvbmFsIOKAkyBnacOhIHRy4buLIG7DoG8ga2jDtG5nIHRydXnhu4FuIHPhur0gZMO5bmcgbeG6t2MgxJHhu4tuaC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRHJvcFpvbmVJbmRpY2F0b3JTdHlsZSB7XG4gIGJvcmRlclJhZGl1cz86IHN0cmluZztcbiAgYmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xuICBpY29uQ29sb3I/OiBzdHJpbmc7XG4gIG9wYWNpdHk/OiBudW1iZXI7XG4gIGhvdmVyQmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xuICBob3ZlckJvcmRlckNvbG9yPzogc3RyaW5nO1xuICBob3ZlckJvcmRlclN0eWxlPzogc3RyaW5nO1xuICBob3ZlckJvcmRlclJhZGl1cz86IG51bWJlcjtcblxuICAvKiogSMOgbSByZW5kZXIgKirEkeG7mW5nKiogbuG7mWkgZHVuZyBpbmRpY2F0b3Ig4bufIHRy4bqhbmcgdGjDoWkgYsOsbmggdGjGsOG7nW5nLiAqL1xuICByZW5kZXJJbmRpY2F0b3I/OiAoc2l6ZTogbnVtYmVyKSA9PiBzdHJpbmc7XG5cbiAgLyoqIEjDoG0gcmVuZGVyICoqxJHhu5luZyoqIG7hu5lpIGR1bmcgaW5kaWNhdG9yIOG7nyB0cuG6oW5nIHRow6FpIGhvdmVyL2RyYWctZW50ZXIuKi9cbiAgcmVuZGVySG92ZXJJbmRpY2F0b3I/OiAoKSA9PiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUN1c3RvbUNhbnZhc0NvbmZpZyB7XG4gIHN0b3JlRGF0YURlZmluZTogSURpYWdyYW1TdG9yZURhdGE7XG4gIHN2Z0NvbnRhaW5lcj86IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBub2Rlc0NvbnRhaW5lcj86IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICB2aWV3Q29udGFpbmVyUmVmPzogVmlld0NvbnRhaW5lclJlZjtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgbm9kZUNvbXBvbmVudFR5cGU/OiBUeXBlPGFueT47IC8vIENvbXBvbmVudCBjaG8gbWFpbiBub2Rlc1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBub2RlT3RoZXJDb25maWdDb21wb25lbnRUeXBlPzogVHlwZTxhbnk+OyAvLyBDb21wb25lbnQgY2hvIG5vZGVPdGhlckNvbmZpZ1xuICB1c2VWaXJ0dWFsaXphdGlvblRlbXBsYXRlPzogYm9vbGVhbjtcbiAgLyoqIFR14buzIGNo4buJbmggc3R5bGUgY2hvIGluZGljYXRvciAobsO6dCBcIitcIikgY+G7p2EgZHJvcCB6b25lICovXG4gIGRyb3Bab25lU3R5bGU/OiBJRHJvcFpvbmVJbmRpY2F0b3JTdHlsZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRGlhZ3JhbVN0b3JlRGF0YSB7XG4gIHBvc2l0aW9uTWF4TGVmdDogbnVtYmVyO1xuICBwb3NpdGlvbk1heFRvcDogbnVtYmVyO1xuICB3aWR0aEhlaWdodFN2Z0NhbnZhczogeyBoZWlnaHRTdmc6IG51bWJlcjsgd2lkdGhTdmc6IG51bWJlciB9O1xufVxuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhZ3JhbS5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL3NlcnZpY2VzL2RpYWdyYW0tZHJhdy9zcmMvaW50ZXJmYWNlcy9kaWFncmFtLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudFJlZiwgVHlwZSwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElEaWFncmFtRWxlbWVudCB7XG4gIC8vIGNvbmZpZyDEkeG7gyB24bq9IGRpYWdyYW1cbiAgY29kZT86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgYnJhbmNoZXM/OiBBcnJheTxJRGlhZ3JhbUVsZW1lbnRCcmFuY2g+O1xuICBzcGVjaWZpY194PzogbnVtYmVyO1xuICBzcGVjaWZpY195PzogbnVtYmVyO1xuICBzcGVjaWZpY193aWR0aD86IG51bWJlcjtcbiAgc3BlY2lmaWNfaGVpZ2h0PzogbnVtYmVyO1xuICBlbGVtZW50U3ZnPzogU1ZHUGF0aEVsZW1lbnQ7XG4gIGF0dHJpYnV0ZVN2Z0Q/OiBzdHJpbmc7XG4gIG1heEhlaWdodEJyYW5jaD86IG51bWJlcjtcbiAgcG9zaXRpb25fZW5kX2JyYW5jaD86IG51bWJlcjtcbiAgcG9zaXRpb25fZW5kPzogbnVtYmVyO1xuICB0cmFuc2xhdGVYPzogbnVtYmVyO1xuICB0cmFuc2xhdGVZPzogbnVtYmVyO1xuICBhdHRyaWJ1dGVTdmdEQ29ubmVjdFRvT3RoZXJFbGVtZW50PzogQXJyYXk8e1xuICAgIGVsZW1lbnRTdmc/OiBTVkdQYXRoRWxlbWVudDtcbiAgICBwYXRoOiBzdHJpbmc7XG4gIH0+O1xuICBwcmVfb3RoZXJfaWQ/OiBBcnJheTxzdHJpbmc+O1xuICBuZXh0X290aGVyX2lkPzogQXJyYXk8c3RyaW5nPjtcbiAgc3ViQ29kZU9mRWxlbWVudD86IHN0cmluZztcbiAgbmV4dF9pZD86IHN0cmluZztcbiAgbm9kZU90aGVyQ29uZmlnPzogSURpYWdyYW1FbGVtZW50O1xuICBkaXNhYmxlPzogYm9vbGVhbjtcblxuICAvLyBjb25maWcgY+G7p2EgZWxlbWVudCBj4bqnbiBjw7NcbiAgaWQ/OiBzdHJpbmc7XG4gIGVsZW1lbnRfdHlwZT86IHN0cmluZztcbiAgc3BlY2lmaWNfY291bnRlcl9jdXJyZW50X2NvZGU/OiBudW1iZXI7IC8vIGzGsHUgbOG6oWkgxJHhu4MgdMSDbmcgY2hvIGPDoWMga2jhu5FpIHRp4bq/cCB0aGVvIGtoaSBrw6lvIHbDoG87XG4gIHByZV9pZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRGlhZ3JhbUVsZW1lbnRCcmFuY2gge1xuICBjb2RlPzogc3RyaW5nO1xuICBsYWJlbD86IHN0cmluZzsgLy8gTGFiZWwgaGnhu4NuIHRo4buLIHRyw6puIGJyYW5jaCAodmQ6IFwiMTAwIFByb2ZpbGVzXCIsIFwiQ8OybiBs4bqhaVwiKVxuICBsYWJlbEJnQ29sb3I/OiBzdHJpbmc7IC8vIEJhY2tncm91bmQgY29sb3IgY+G7p2EgbGFiZWwgKHZkOiBcIiNmM2Y0ZjZcIilcbiAgbGFiZWxDb2xvcj86IHN0cmluZzsgLy8gQmFja2dyb3VuZCBjb2xvciBj4bunYSBsYWJlbCAodmQ6IFwiIzM3NDE1MVwiKVxuICBsYWJlbENsYXNzTmFtZT86IHN0cmluZzsgLy8gY2xhc3MgbmFtZSBj4bunYSBsYWJlbFxuICBlbGVtZW50czogQXJyYXk8SURpYWdyYW1FbGVtZW50PjtcbiAgZWxlbWVudFN2Zz86IFNWR1BhdGhFbGVtZW50O1xuICBhdHRyaWJ1dGVTdmdEPzogc3RyaW5nO1xuICBvblRoZVNpZGU/OiAnYWJvdmUnIHwgJ3VuZGVyJyB8ICdjZW50ZXInO1xuICBwb3NpdGlvbk1heExlZnQ/OiBudW1iZXI7XG4gIHBvc2l0aW9uTWF4VG9wPzogbnVtYmVyO1xuICBzcGVjaWZpY19zdGFydF9icmFuY2hfeD86IG51bWJlcjtcbiAgc3BlY2lmaWNfc3RhcnRfYnJhbmNoX3k/OiBudW1iZXI7XG4gIHdpZHRoQnJhbmNoPzoge1xuICAgIHdpZHRoPzogbnVtYmVyO1xuICAgIGFib3ZlPzogbnVtYmVyO1xuICAgIHVuZGVyPzogbnVtYmVyO1xuICB9O1xuICBuZXh0X290aGVyX2lkPzogQXJyYXk8c3RyaW5nPjtcbiAgaXNEaXJlY3Rpb24/OiBib29sZWFuOyAvLyBiaeG6v24gbsOgeSBkw7luZyBz4butIGThu6VuZyB04bqhbSDEkeG7gyBjaGVjayB4ZW0gbmjDoW5oIGPDsyDEkcaw4bujYyDEkWnhu4F1IGjGsOG7m25nIGhheSBraMO0bmc7XG5cbiAgbm9kZU90aGVyQ29uZmlnPzogSURpYWdyYW1FbGVtZW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDYW52YXNDb25maWcge1xuICBFTEVNRU5UX1dJRFRIX0RFRkFVTFRfQlJBTkNIX1dIRU5fTk9UX0VMRU1FTlQ6IG51bWJlcjtcbiAgRUxFTUVOVF9NQVJHSU5fREVGQVVMVDogbnVtYmVyO1xuICBFTEVNRU5UX01BUkdJTl9ERUZBVUxUX0JSQU5DSDogbnVtYmVyO1xuICBFTEVNRU5UX01BUkdJTl9CRVRXRUVOX0JSQU5DSF9ERUZBVUxUOiBudW1iZXI7XG4gIERFRkFVTFRfQlJBTkNIX1dIRU5fTk9fRUxFTUVOVDogbnVtYmVyO1xuICBFTEVNRU5UX0hFSUdIVF9DVVJWRTogbnVtYmVyO1xuICBFTEVNRU5UX1NWR19TVFJPS0VfQ09MT1I6IHN0cmluZztcbiAgRUxFTUVOVF9TVkdfU1RST0tFX1dJRFRIOiBzdHJpbmc7XG4gIEVMRU1FTlRfTUFSR0lOX0RFRkFVTFRfQlJBTkNIX1RPX0VMRU1FTlRfRklSU1Q6IG51bWJlcjtcblxuICAvLyBjb25maWcgb3RoZXIgbm9kZVxuICBESVNUQU5DRV9UT19XQUlUOiBudW1iZXI7XG4gIFdBSVRfVE9fRUxFTUVOVDogbnVtYmVyO1xuICBFTEVNRU5UX1dBSVRfREVGQVVMVDogbnVtYmVyO1xuICBESVNUQU5DRV9XQUlUX1RPX05FWFRfTElORTogbnVtYmVyO1xuXG4gIC8vIGNvbmZpZyBlbGVtZW50XG4gIFRZUEVfRUxFTUVOVF9FWElUOiBzdHJpbmc7XG4gIFRZUEVfRUxFTUVOVF9XT1JLRkxPVzogc3RyaW5nO1xuICBXSURUSF9FTEVNRU5UX0RFRkFVTFQ6IG51bWJlcjtcbiAgSEVJR0hUX0VMRU1FTlRfREVGQVVMVDogbnVtYmVyO1xuXG4gIEFERF9JQ09OX0RJQU1FVEVSOiBudW1iZXI7XG59XG5cbi8qKlxuICogU3R5bGUgY29uZmlnIGNobyBpbmRpY2F0b3IgKG7DunQgXCIrXCIpIGPhu6dhIGRyb3Agem9uZS5cbiAqIFThuqV0IGPhuqMgY8OhYyBmaWVsZCDEkeG7gXUgb3B0aW9uYWwg4oCTIGdpw6EgdHLhu4sgbsOgbyBraMO0bmcgdHJ1eeG7gW4gc+G6vSBkw7luZyBt4bq3YyDEkeG7i25oLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElEcm9wWm9uZUluZGljYXRvclN0eWxlIHtcbiAgYm9yZGVyUmFkaXVzPzogc3RyaW5nO1xuICBiYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG4gIGljb25Db2xvcj86IHN0cmluZztcbiAgb3BhY2l0eT86IG51bWJlcjtcbiAgaG92ZXJCYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG4gIGhvdmVyQm9yZGVyQ29sb3I/OiBzdHJpbmc7XG4gIGhvdmVyQm9yZGVyU3R5bGU/OiBzdHJpbmc7XG4gIGhvdmVyQm9yZGVyUmFkaXVzPzogbnVtYmVyO1xuXG4gIC8qKiBIw6BtIHJlbmRlciAqKsSR4buZbmcqKiBu4buZaSBkdW5nIGluZGljYXRvciDhu58gdHLhuqFuZyB0aMOhaSBiw6xuaCB0aMaw4budbmcuICovXG4gIHJlbmRlckluZGljYXRvcj86IChzaXplOiBudW1iZXIpID0+IHN0cmluZztcblxuICAvKiogSMOgbSByZW5kZXIgKirEkeG7mW5nKiogbuG7mWkgZHVuZyBpbmRpY2F0b3Ig4bufIHRy4bqhbmcgdGjDoWkgaG92ZXIvZHJhZy1lbnRlci4qL1xuICByZW5kZXJIb3ZlckluZGljYXRvcj86ICgpID0+IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ3VzdG9tQ2FudmFzQ29uZmlnIHtcbiAgc3RvcmVEYXRhRGVmaW5lOiBJRGlhZ3JhbVN0b3JlRGF0YTtcbiAgc3ZnQ29udGFpbmVyPzogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gIG5vZGVzQ29udGFpbmVyPzogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gIHZpZXdDb250YWluZXJSZWY/OiBWaWV3Q29udGFpbmVyUmVmO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBub2RlQ29tcG9uZW50VHlwZT86IFR5cGU8YW55PjsgLy8gQ29tcG9uZW50IGNobyBtYWluIG5vZGVzXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIG5vZGVPdGhlckNvbmZpZ0NvbXBvbmVudFR5cGU/OiBUeXBlPGFueT47IC8vIENvbXBvbmVudCBjaG8gbm9kZU90aGVyQ29uZmlnXG4gIHVzZVZpcnR1YWxpemF0aW9uVGVtcGxhdGU/OiBib29sZWFuO1xuICAvKiogVHXhu7MgY2jhu4luaCBzdHlsZSBjaG8gaW5kaWNhdG9yIChuw7p0IFwiK1wiKSBj4bunYSBkcm9wIHpvbmUgKi9cbiAgZHJvcFpvbmVTdHlsZT86IElEcm9wWm9uZUluZGljYXRvclN0eWxlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElEaWFncmFtU3RvcmVEYXRhIHtcbiAgcG9zaXRpb25NYXhMZWZ0OiBudW1iZXI7XG4gIHBvc2l0aW9uTWF4VG9wOiBudW1iZXI7XG4gIHdpZHRoSGVpZ2h0U3ZnQ2FudmFzOiB7IGhlaWdodFN2ZzogbnVtYmVyOyB3aWR0aFN2ZzogbnVtYmVyIH07XG59XG4iXX0=
@@ -1694,15 +1694,13 @@ class LibsUiDiagramDrawService {
1694
1694
  return undefined;
1695
1695
  }
1696
1696
  const labelDiv = document.createElement('div');
1697
- labelDiv.className = 'branch-label';
1697
+ labelDiv.className = `branch-label ${branch.labelClassName || 'libs-ui-font-h7r'}`;
1698
1698
  labelDiv.textContent = branch.label || '';
1699
1699
  labelDiv.style.position = 'absolute';
1700
1700
  labelDiv.style.padding = '2px 7px';
1701
1701
  labelDiv.style.borderRadius = '10px';
1702
1702
  labelDiv.style.backgroundColor = branch.labelBgColor || '#f3f4f6';
1703
- labelDiv.style.fontSize = '11px';
1704
- labelDiv.style.fontFamily = 'system-ui, -apple-system, sans-serif';
1705
- labelDiv.style.color = '#374151';
1703
+ labelDiv.style.color = branch.labelColor || '#374151';
1706
1704
  labelDiv.style.whiteSpace = 'nowrap';
1707
1705
  labelDiv.style.zIndex = '2';
1708
1706
  labelDiv.style.pointerEvents = 'none';
@@ -2208,7 +2206,7 @@ class LibsUiDiagramDrawCanvasService {
2208
2206
  let counter = 0;
2209
2207
  const elementsOfCodeDataDrop = this.FlatElements?.filter((element) => element.code === dataDrop.code);
2210
2208
  if (elementsOfCodeDataDrop && elementsOfCodeDataDrop.length) {
2211
- counter = elementsOfCodeDataDrop.reduce((preEl, currentEl) => (Number(currentEl.specific_counter_current_code) > Number(preEl.specific_counter_current_code) ? currentEl : preEl))
2209
+ counter = elementsOfCodeDataDrop.reduce((preEl, currentEl) => (Number(currentEl.specific_counter_current_code) > Number(preEl.specific_counter_current_code) ? currentEl : preEl), elementsOfCodeDataDrop[0])
2212
2210
  .specific_counter_current_code;
2213
2211
  }
2214
2212
  counter++;