@mediusinc/mng-commons 7.0.0-rc.1 → 7.0.0-rc.2

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.
Files changed (37) hide show
  1. package/core/index.d.ts +24 -4
  2. package/fesm2022/mediusinc-mng-commons-core.mjs +108 -72
  3. package/fesm2022/mediusinc-mng-commons-core.mjs.map +1 -1
  4. package/fesm2022/mediusinc-mng-commons-filter.mjs +16 -0
  5. package/fesm2022/mediusinc-mng-commons-filter.mjs.map +1 -1
  6. package/fesm2022/mediusinc-mng-commons-form-api.mjs.map +1 -1
  7. package/fesm2022/mediusinc-mng-commons-form.mjs +406 -49
  8. package/fesm2022/mediusinc-mng-commons-form.mjs.map +1 -1
  9. package/fesm2022/mediusinc-mng-commons-model-class.mjs.map +1 -1
  10. package/fesm2022/mediusinc-mng-commons-model.mjs.map +1 -1
  11. package/fesm2022/mediusinc-mng-commons-table-api-class.mjs.map +1 -1
  12. package/fesm2022/mediusinc-mng-commons-table-api.mjs.map +1 -1
  13. package/fesm2022/mediusinc-mng-commons-table-column-toggle.component-BQ99oqWO.mjs +30 -0
  14. package/fesm2022/mediusinc-mng-commons-table-column-toggle.component-BQ99oqWO.mjs.map +1 -0
  15. package/fesm2022/mediusinc-mng-commons-table-mediusinc-mng-commons-table-BLuM5Kpu.mjs +2700 -0
  16. package/fesm2022/mediusinc-mng-commons-table-mediusinc-mng-commons-table-BLuM5Kpu.mjs.map +1 -0
  17. package/fesm2022/mediusinc-mng-commons-table.mjs +1 -1
  18. package/fesm2022/mediusinc-mng-commons-tableview-api-class.mjs.map +1 -1
  19. package/fesm2022/mediusinc-mng-commons-tableview-api.mjs +31 -3
  20. package/fesm2022/mediusinc-mng-commons-tableview-api.mjs.map +1 -1
  21. package/fesm2022/mediusinc-mng-commons-tableview.mjs +155 -123
  22. package/fesm2022/mediusinc-mng-commons-tableview.mjs.map +1 -1
  23. package/fesm2022/mediusinc-mng-commons.mjs.map +1 -1
  24. package/filter/index.d.ts +13 -0
  25. package/form/index.d.ts +109 -22
  26. package/i18n/en.json +12 -1
  27. package/i18n/sl.json +12 -1
  28. package/package.json +24 -24
  29. package/table/api/index.d.ts +2 -2
  30. package/table/index.d.ts +97 -29
  31. package/tableview/api/index.d.ts +17 -2
  32. package/tableview/index.d.ts +7 -1
  33. package/version-info.json +6 -6
  34. package/fesm2022/mediusinc-mng-commons-table-column-toggle.component-0Dtv48mq.mjs +0 -30
  35. package/fesm2022/mediusinc-mng-commons-table-column-toggle.component-0Dtv48mq.mjs.map +0 -1
  36. package/fesm2022/mediusinc-mng-commons-table-mediusinc-mng-commons-table-BsAwyXiN.mjs +0 -2417
  37. package/fesm2022/mediusinc-mng-commons-table-mediusinc-mng-commons-table-BsAwyXiN.mjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"mediusinc-mng-commons-table-mediusinc-mng-commons-table-BsAwyXiN.mjs","sources":["../tmp-esm2022/table/helpers/filters.js","../tmp-esm2022/table/services/table-feature-config.token.js","../tmp-esm2022/table/services/table-metadata.service.js","../tmp-esm2022/table/helpers/table.js","../tmp-esm2022/table/services/table-data.service.js","../tmp-esm2022/table/components/filter/filter/filter.service.js","../tmp-esm2022/table/components/filter/filter/filter.component.js","../tmp-esm2022/table/components/column-value/column-value.component.js","../tmp-esm2022/table/pipes/filter-value.pipe.js","../tmp-esm2022/table/components/filter/filter-active-tag/filter-active-tag.component.js","../tmp-esm2022/table/components/filter/filter-form/filter-form.component.js","../tmp-esm2022/table/components/filter/header-with-filters/header-with-filters-template.directive.js","../tmp-esm2022/table/components/filter/header-with-filters/header-with-filters.component.js","../tmp-esm2022/table/helpers/notification.js","../tmp-esm2022/table/pipes/locale-default-row-class.pipe.js","../tmp-esm2022/table/pipes/table-filter-class.pipe.js","../tmp-esm2022/table/helpers/table-layout-prefs.js","../tmp-esm2022/table/services/table-preferences.service.js","../tmp-esm2022/table/components/table/table-removable-sort.directive.js","../tmp-esm2022/table/components/table/table-template.directive.js","../tmp-esm2022/table/components/table/table.component.js","../tmp-esm2022/table/provide.js","../tmp-esm2022/table/index.js","../tmp-esm2022/table/mediusinc-mng-commons-table.js"],"sourcesContent":["import { FilterMatchMode, angularDateFormatHasSeconds, angularDateFormatHasTime, dateToIsoString, fromAngularDateFormatToPrime, fromAngularNumberFormatToFractions } from '@mediusinc/mng-commons/core';\nimport { FilterDescriptor, FilterTypeEnum } from '@mediusinc/mng-commons/filter';\nexport function filterGenerateMatchModeOptions(primeConfig, descriptor, cmpSerCfg) {\n let options = undefined;\n if (descriptor == null || descriptor.filterType === FilterTypeEnum.String) {\n options = [\n { value: FilterMatchMode.Contains, label: primeConfig.getTranslation(FilterMatchMode.Contains) },\n { value: FilterMatchMode.NotContains, label: primeConfig.getTranslation(FilterMatchMode.NotContains) },\n { value: FilterMatchMode.Equals, label: primeConfig.getTranslation(FilterMatchMode.Equals) },\n { value: FilterMatchMode.NotEquals, label: primeConfig.getTranslation(FilterMatchMode.NotEquals) },\n { value: FilterMatchMode.StartsWith, label: primeConfig.getTranslation(FilterMatchMode.StartsWith) },\n { value: FilterMatchMode.EndsWith, label: primeConfig.getTranslation(FilterMatchMode.EndsWith) }\n ];\n }\n else if (descriptor.filterType === FilterTypeEnum.Boolean) {\n options = [{ value: FilterMatchMode.Equals, label: primeConfig.getTranslation(FilterMatchMode.Equals) }];\n }\n else if (descriptor.filterType === FilterTypeEnum.Number) {\n options = [\n { value: FilterMatchMode.Equals, label: primeConfig.getTranslation(FilterMatchMode.Equals) },\n { value: FilterMatchMode.NotEquals, label: primeConfig.getTranslation(FilterMatchMode.NotEquals) },\n { value: FilterMatchMode.LessThan, label: primeConfig.getTranslation(FilterMatchMode.LessThan) },\n { value: FilterMatchMode.LessThanOrEqualTo, label: primeConfig.getTranslation(FilterMatchMode.LessThanOrEqualTo) },\n { value: FilterMatchMode.GreaterThan, label: primeConfig.getTranslation(FilterMatchMode.GreaterThan) },\n { value: FilterMatchMode.GreaterThanOrEqualTo, label: primeConfig.getTranslation(FilterMatchMode.GreaterThanOrEqualTo) },\n { value: FilterMatchMode.Between, label: primeConfig.getTranslation(FilterMatchMode.Between) }\n ];\n }\n else if (descriptor.filterType === FilterTypeEnum.Lookup || descriptor.filterType === FilterTypeEnum.LookupEnum) {\n options = [\n { value: FilterMatchMode.Equals, label: primeConfig.getTranslation(FilterMatchMode.Equals) },\n { value: FilterMatchMode.NotEquals, label: primeConfig.getTranslation(FilterMatchMode.NotEquals) },\n { value: FilterMatchMode.In, label: primeConfig.getTranslation(FilterMatchMode.In) },\n { value: FilterMatchMode.NotIn, label: primeConfig.getTranslation(FilterMatchMode.NotIn) }\n ];\n }\n else if (descriptor.filterType === FilterTypeEnum.Date) {\n if (!descriptor.datePickerShowTime && !descriptor.dateValueNoTime && !cmpSerCfg?.filtersDateOnlyDisabled) {\n options = [\n { value: FilterMatchMode.Equals, label: primeConfig.getTranslation(FilterMatchMode.Equals) },\n { value: FilterMatchMode.NotEquals, label: primeConfig.getTranslation(FilterMatchMode.NotEquals) },\n { value: FilterMatchMode.LessThanOrEqualTo, label: primeConfig.getTranslation(FilterMatchMode.LessThanOrEqualTo) },\n { value: FilterMatchMode.GreaterThanOrEqualTo, label: primeConfig.getTranslation(FilterMatchMode.GreaterThanOrEqualTo) },\n { value: FilterMatchMode.Between, label: primeConfig.getTranslation(FilterMatchMode.Between) }\n ];\n }\n else {\n options = [\n { value: FilterMatchMode.Equals, label: primeConfig.getTranslation(FilterMatchMode.Equals) },\n { value: FilterMatchMode.LessThanOrEqualTo, label: primeConfig.getTranslation(FilterMatchMode.LessThanOrEqualTo) },\n { value: FilterMatchMode.GreaterThanOrEqualTo, label: primeConfig.getTranslation(FilterMatchMode.GreaterThanOrEqualTo) },\n { value: FilterMatchMode.Between, label: primeConfig.getTranslation(FilterMatchMode.Between) }\n ];\n }\n }\n options?.push({ value: FilterMatchMode.Exists, label: primeConfig.getTranslation(FilterMatchMode.Exists) }, { value: FilterMatchMode.DoesNotExist, label: primeConfig.getTranslation(FilterMatchMode.DoesNotExist) });\n if (descriptor?.matchModes) {\n options = descriptor.matchModes.map(mm => ({ value: mm, label: primeConfig.getTranslation(mm) }));\n }\n return options || [];\n}\n/**\n * Gets the default match mode for a filter.\n *\n * @param {FilterDescriptor<any, any>} [descriptor] - The filter descriptor.\n * @param {SelectItem[]} [matchModes=[]] - The available match modes options.\n *\n * @return {FilterMatchModeExtendedType} The default match mode for the filter.\n */\nexport function filterGetDefaultMatchMode(descriptor, matchModes = []) {\n let defaultMatchMode = FilterMatchMode.Equals;\n if (descriptor?.filterType === FilterTypeEnum.String)\n defaultMatchMode = FilterMatchMode.StartsWith;\n // overwrite type default set in descriptor\n if (descriptor?.defaultMatchMode) {\n defaultMatchMode = descriptor.defaultMatchMode;\n }\n // check if default mode exists!\n if (matchModes.length > 0 && !matchModes.some(m => m.value === defaultMatchMode)) {\n defaultMatchMode = matchModes[0].value;\n }\n return defaultMatchMode;\n}\nexport function filterSetStateOnChange(filter, matchMode, value, filterType, filterDateCfg) {\n let displayValue = filter?.displayValue ?? value;\n let displayMatchMode = filter?.displayMatchMode ?? matchMode;\n // when equals is used on dates with time, the actual filter will be between, but displayed as equals\n if (filterType === FilterTypeEnum.Date && !filterDateCfg?.valueNoTime) {\n if (matchMode === FilterMatchMode.Between &&\n Array.isArray(value) &&\n value.length === 2 &&\n value.every(v => v instanceof Date || typeof v === 'string' || typeof v === 'number')) {\n if (filterAreDatesEqual(value[0], value[1], filterDateCfg)) {\n displayMatchMode = FilterMatchMode.Equals;\n displayValue = new Date(value[0]);\n }\n }\n else if (matchMode === FilterMatchMode.Equals && !value) {\n matchMode = FilterMatchMode.Between;\n }\n }\n if (filterType === FilterTypeEnum.Date && displayValue) {\n // display value for calendar cannot be string, convert to date\n displayValue = Array.isArray(displayValue)\n ? displayValue.map(v => (!(v instanceof Date) ? new Date(v) : v))\n : displayValue instanceof Date\n ? displayValue\n : new Date(displayValue);\n }\n if (filterType === FilterTypeEnum.Boolean && displayValue != null && typeof displayValue !== 'boolean') {\n displayValue = (typeof displayValue === 'string' && displayValue.toLowerCase() === 'true') || displayValue === 1;\n }\n if (filterType === FilterTypeEnum.Number && displayValue != null && typeof displayValue !== 'number') {\n const numValue = +displayValue;\n if (!isNaN(numValue)) {\n displayValue = numValue;\n }\n }\n return {\n ...filter,\n matchMode,\n value: value,\n displayMatchMode,\n displayValue\n };\n}\nexport function filterSetStateOnDisplayChange(filter, displayMatchMode, displayValue, filterType, filterDateCfg) {\n let matchMode = displayMatchMode;\n let value = displayValue;\n if (filterType === FilterTypeEnum.Date) {\n if (!filterDateCfg?.valueNoTime && displayValue !== null) {\n if (displayMatchMode === FilterMatchMode.Equals) {\n if (value instanceof Date || typeof value === 'string' || typeof value === 'number') {\n const fromDate = new Date(value);\n const toDate = new Date(value);\n if (filterDateCfg?.showTime) {\n if (filterDateCfg?.showSeconds) {\n fromDate.setMilliseconds(0);\n toDate.setMilliseconds(999);\n }\n else {\n fromDate.setSeconds(0, 0);\n toDate.setSeconds(59, 999);\n }\n }\n else {\n fromDate.setHours(0, 0, 0, 0);\n toDate.setHours(23, 59, 59, 999);\n }\n value = [fromDate, toDate];\n matchMode = FilterMatchMode.Between;\n }\n else {\n value = null;\n }\n }\n else if (displayMatchMode === FilterMatchMode.Between) {\n if (Array.isArray(value) && value.length === 2 && value.every(i => i instanceof Date || typeof i === 'string' || typeof i === 'number')) {\n const fromDate = new Date(value[0]);\n let toDate = new Date(value[1]);\n if (filterAreDatesEqual(fromDate, toDate, filterDateCfg)) {\n toDate = new Date(fromDate);\n if (filterDateCfg?.showTime) {\n if (filterDateCfg?.showSeconds) {\n toDate.setSeconds(toDate.getSeconds() + 1);\n }\n else {\n toDate.setMinutes(toDate.getMinutes() + 1);\n }\n }\n else {\n toDate.setDate(toDate.getDate() + 1);\n }\n value = [fromDate, toDate];\n matchMode = FilterMatchMode.Between;\n }\n }\n else {\n value = null;\n }\n }\n }\n const convertDateType = filterDateCfg?.valueNoTime ? 'date' : 'date-time';\n const convertDateTimeOpts = {\n utc: filterDateCfg?.valueUtc,\n noMillis: filterDateCfg?.valueNoMillis,\n noTimezone: filterDateCfg?.valueNoTimezone\n };\n value =\n value == null\n ? value\n : Array.isArray(value)\n ? value.filter(i => i != null).map(i => dateToIsoString(i, convertDateType, convertDateTimeOpts))\n : dateToIsoString(value, convertDateType, convertDateTimeOpts);\n }\n if (matchMode === FilterMatchMode.Exists || matchMode === FilterMatchMode.DoesNotExist) {\n value = null;\n }\n return {\n ...filter,\n displayMatchMode: displayMatchMode,\n matchMode: matchMode,\n displayValue: displayValue,\n value: value,\n caseSensitive: filterType === FilterTypeEnum.String ? filter?.caseSensitive : undefined\n };\n}\nexport function filterAreDatesEqual(fromDate, toDate, filterDateCfg) {\n const startDate = dateToIsoString(fromDate);\n const endDate = dateToIsoString(toDate);\n // 2020-11-02T11:12:12.000\n const cmpLength = filterDateCfg?.showTime ? (filterDateCfg?.showSeconds ? 19 : 16) : 10;\n return startDate.substring(0, cmpLength) === endDate.substring(0, cmpLength);\n}\nexport function filterApplySerializationConfigToCmp(config, cmpSerCfg) {\n // set default\n cmpSerCfg.dateTimeInUtc = false;\n cmpSerCfg.dateTimeWithTimezone = true;\n cmpSerCfg.dateTimeWithMillis = true;\n cmpSerCfg.filtersDateOnlyDisabled = false;\n // set customizations\n if (config?.serialization) {\n if (config.serialization.dateTimeInUtc !== undefined)\n cmpSerCfg.dateTimeInUtc = config.serialization.dateTimeInUtc;\n if (config.serialization.dateTimeWithTimezone !== undefined)\n cmpSerCfg.dateTimeWithTimezone = config.serialization.dateTimeWithTimezone;\n if (config.serialization.dateTimeWithMillis !== undefined)\n cmpSerCfg.dateTimeWithMillis = config.serialization.dateTimeWithMillis;\n if (config.serialization.filtersDateOnlyDisabled !== undefined)\n cmpSerCfg.filtersDateOnlyDisabled = config.serialization.filtersDateOnlyDisabled;\n }\n}\nexport function filterAdjustDisplayValueOnMatchModeChange(matchMode, value) {\n if (matchMode == null || matchMode === FilterMatchMode.Exists || matchMode === FilterMatchMode.DoesNotExist) {\n return value; // never change, only change later if something else changes here\n }\n if (matchMode === FilterMatchMode.Between) {\n if (!Array.isArray(value)) {\n return value != null ? [value, value] : [];\n }\n else if (value.length === 0 || value.length === 2) {\n return value;\n }\n else if (value.length === 1) {\n return [value[0], value[0]];\n }\n else {\n return [value[0], value[1]];\n }\n }\n if (matchMode === FilterMatchMode.In || matchMode === FilterMatchMode.NotIn) {\n return Array.isArray(value) ? value : value == null ? [] : [value];\n }\n return Array.isArray(value) && value.length > 0 ? value[0] : value;\n}\nexport function filterGetDateConfig(descriptor, serCfg) {\n if (!descriptor || descriptor.filterType !== FilterTypeEnum.Date) {\n return undefined;\n }\n const showTime = descriptor.datePickerShowTime ?? (descriptor.displayFormatApplyToField && descriptor.displayFormat ? angularDateFormatHasTime(descriptor.displayFormat) : false);\n return {\n valueNoTime: descriptor.dateValueNoTime || (!serCfg?.filtersDateOnlyDisabled && !showTime),\n valueUtc: descriptor.dateValueUtc ?? serCfg?.dateTimeInUtc,\n valueNoTimezone: descriptor.dateValueNoTimezone ?? !serCfg?.dateTimeWithTimezone,\n valueNoMillis: !serCfg?.dateTimeWithMillis,\n format: descriptor.datePickerFormat ?? (descriptor.displayFormatApplyToField && descriptor.displayFormat ? fromAngularDateFormatToPrime(descriptor.displayFormat) : undefined),\n showTime: showTime,\n showSeconds: showTime &&\n (descriptor.datePickerShowSeconds ?? (descriptor.displayFormatApplyToField && descriptor.displayFormat ? angularDateFormatHasSeconds(descriptor.displayFormat) : false))\n };\n}\nexport function filterGetNumberConfig(descriptor) {\n if (!descriptor || descriptor.filterType !== FilterTypeEnum.Number) {\n return undefined;\n }\n const displayCfg = descriptor.displayFormatApplyToField && descriptor.displayFormat ? fromAngularNumberFormatToFractions(descriptor.displayFormat) : undefined;\n return {\n fractionsMin: descriptor.numberMinFractionDigits ?? displayCfg?.fractionsMin,\n fractionsMax: descriptor.numberMaxFractionDigits ?? displayCfg?.fractionsMax\n };\n}\n/**\n * Creates an array of filter descriptors from an array of generic filter properties.\n *\n * @param {FilterGenericProperty[]} properties - The array of filterable properties, their types and options.\n * @param {LookupDataProviderInst<string, any, any, 'field'>} [valueLookup] - The lookup data provider for value suggestions.\n */\nexport function createFilterDescriptorsFromGeneric(properties, valueLookup) {\n return properties.reduce((createdFilterDescriptors, genericFilter) => {\n // when no generic value lookup is provided, lookup enum filters are treated as string filters\n const filterType = genericFilter.type === FilterTypeEnum.LookupEnum && valueLookup === undefined ? FilterTypeEnum.String : genericFilter.type;\n const filterDescriptor = new FilterDescriptor(genericFilter.property).asFilterType(filterType).asGenericFilter();\n if ((genericFilter.type === FilterTypeEnum.String || genericFilter.type === FilterTypeEnum.LookupEnum) && valueLookup) {\n filterDescriptor.withGenericValueProvider(valueLookup);\n }\n if (filterDescriptor && genericFilter.opts !== undefined) {\n switch (genericFilter.type) {\n case FilterTypeEnum.Number:\n filterDescriptor.asNumber(genericFilter.opts);\n break;\n case FilterTypeEnum.Date:\n filterDescriptor.asDate(genericFilter.opts);\n break;\n }\n }\n if (filterDescriptor) {\n createdFilterDescriptors.push(filterDescriptor);\n }\n return createdFilterDescriptors;\n }, []);\n}\nexport function isFilterValueBlank(value) {\n return value == null || (typeof value === 'string' && value.trim().length === 0) || (Array.isArray(value) && value.length === 0);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RhYmxlL3NyYy9oZWxwZXJzL2ZpbHRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUdILGVBQWUsRUFLZiwyQkFBMkIsRUFDM0Isd0JBQXdCLEVBQ3hCLGVBQWUsRUFDZiw0QkFBNEIsRUFDNUIsa0NBQWtDLEVBQ3JDLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUFDLGdCQUFnQixFQUF5QixjQUFjLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUt0RyxNQUFNLFVBQVUsOEJBQThCLENBQUMsV0FBb0IsRUFBRSxVQUFrRCxFQUFFLFNBQXNDO0lBQzNKLElBQUksT0FBTyxHQUE2QixTQUFTLENBQUM7SUFDbEQsSUFBSSxVQUFVLElBQUksSUFBSSxJQUFJLFVBQVUsQ0FBQyxVQUFVLEtBQUssY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3hFLE9BQU8sR0FBRztZQUNOLEVBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxFQUFDO1lBQzlGLEVBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxFQUFDO1lBQ3BHLEVBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFDO1lBQzFGLEVBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxFQUFDO1lBQ2hHLEVBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFF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SUFBSSxhQUFhLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3ZELFFBQVEsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN6QixLQUFLLGNBQWMsQ0FBQyxNQUFNO29CQUN0QixnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUM5QyxNQUFNO2dCQUNWLEtBQUssY0FBYyxDQUFDLElBQUk7b0JBQ3BCLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzVDLE1BQU07WUFDZCxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksZ0JBQWdCLEVBQUUsQ0FBQztZQUNuQix3QkFBd0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNwRCxDQUFDO1FBQ0QsT0FBTyx3QkFBd0IsQ0FBQztJQUNwQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDWCxDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEtBQVU7SUFDekMsT0FBTyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDckksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U2VsZWN0SXRlbX0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHtQcmltZU5HfSBmcm9tICdwcmltZW5nL2NvbmZpZyc7XG5cbmltcG9ydCB7XG4gICAgQ29tbW9uc01vZHVsZUNvbmZpZyxcbiAgICBDb21tb25zU2VyaWFsaXphdGlvbkNvbmZpZyxcbiAgICBGaWx0ZXJNYXRjaE1vZGUsXG4gICAgRmlsdGVyTWF0Y2hNb2RlRXh0ZW5kZWRUeXBlLFxuICAgIEZpbHRlclN0YXRlLFxuICAgIE51bGxhYmxlLFxuICAgIFNpbmdsZU9yQXJyYXlUeXBlLFxuICAgIGFuZ3VsYXJEYXRlRm9ybWF0SGFzU2Vjb25kcyxcbiAgICBhbmd1bGFyRGF0ZUZvcm1hdEhhc1RpbWUsXG4gICAgZGF0ZVRvSXNvU3RyaW5nLFxuICAgIGZyb21Bbmd1bGFyRGF0ZUZvcm1hdFRvUHJpbWUsXG4gICAgZnJvbUFuZ3VsYXJOdW1iZXJGb3JtYXRUb0ZyYWN0aW9uc1xufSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuaW1wb3J0IHtGaWx0ZXJEZXNjcmlwdG9yLCBGaWx0ZXJHZW5lcmljUHJvcGVydHksIEZpbHRlclR5cGVFbnVtfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2ZpbHRlcic7XG5pbXBvcnQge0xvb2t1cERhdGFQcm92aWRlckluc3R9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvZm9ybS9hcGknO1xuXG5pbXBvcnQge0ZpbHRlckRhdGVDb25maWcsIEZpbHRlck51bWJlckNvbmZpZ30gZnJvbSAnLi4vbW9kZWxzL2ZpbHRlci5tb2RlbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJHZW5lcmF0ZU1hdGNoTW9kZU9wdGlvbnMocHJpbWVDb25maWc6IFByaW1lTkcsIGRlc2NyaXB0b3I6IEZpbHRlckRlc2NyaXB0b3I8YW55LCBhbnk+IHwgdW5kZWZpbmVkLCBjbXBTZXJDZmc/OiBDb21tb25zU2VyaWFsaXphdGlvbkNvbmZpZyk6IFNlbGVjdEl0ZW1bXSB7XG4gICAgbGV0IG9wdGlvbnM6IFNlbGVjdEl0ZW1bXSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBpZiAoZGVzY3JpcHRvciA9PSBudWxsIHx8IGRlc2NyaXB0b3IuZmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZUVudW0uU3RyaW5nKSB7XG4gICAgICAgIG9wdGlvbnMgPSBbXG4gICAgICAgICAgICB7dmFsdWU6IEZpbHRlck1hdGNoTW9kZS5Db250YWlucywgbGFiZWw6IHByaW1lQ29uZmlnLmdldFRyYW5zbGF0aW9uKEZpbHRlck1hdGNoTW9kZS5Db250YWlucyl9LFxuICAgICAgICAgICAge3ZhbHVlOiBGaWx0ZXJNYXRjaE1vZGUuTm90Q29udGFpbnMsIGxhYmVsOiBwcmltZUNvbmZpZy5nZXRUcmFuc2xhdGlvbihGaWx0ZXJNYXRjaE1vZGUuTm90Q29udGFpbnMpfSxcbiAgICAgICAgICAgIHt2YWx1ZTogRmlsdGVyTWF0Y2hNb2RlLkVxdWFscywgbGFiZWw6IHByaW1lQ29uZmlnLmdldFRyYW5zbGF0aW9uKEZpbHRlck1hdGNoTW9kZS5FcXVhbHMpfSxcbiAgICAgICAgICAgIHt2YWx1ZTogRmlsdGVyTWF0Y2hNb2RlLk5vdEVxdWFscywgbGFiZWw6IHByaW1lQ29uZmlnLmdldFRyYW5zbGF0aW9uKEZpbHRlck1hdGNoTW9kZS5Ob3RFcXVhbHMpfSxcbiAgICAgICAgICAgIHt2YWx1ZTogRmlsdGVyTWF0Y2hNb2RlLlN0YXJ0c1dpdGgsIGxhYmVsOiBwcmltZUNvbmZpZy5nZXRUcmFuc2xhdGlvbihGaWx0ZXJNYXRjaE1vZGUuU3RhcnRzV2l0aCl9LFxuICAgICAgICAgICAge3ZhbHVlOiBGaWx0ZXJNYXRjaE1vZGUuRW5kc1dpdGgsIGxhYmVsOiBwcmltZUNvbmZpZy5nZXRUcmFuc2xhdGlvbihGaWx0ZXJNYXRjaE1vZGUuRW5kc1dpdGgpfVxuICAgICAgICBdO1xuICAgIH0gZWxzZSBpZiAoZGVzY3JpcHRvci5maWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlRW51bS5Cb29sZWFuKSB7XG4gICAgICAgIG9wdGlvbnMgPSBbe3ZhbHVlOiBGaWx0ZXJNYXRjaE1vZGUuRXF1YWxzLCBsYWJlbDogcHJpbWVDb25maWcuZ2V0VHJhbnNsYXRpb24oRmlsdGVyTWF0Y2hNb2RlLkVxdWFscyl9XTtcbiAgICB9IGVsc2UgaWYgKGRlc2NyaXB0b3IuZmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZUVudW0uTnVtYmVyKSB7XG4gICAgICAgIG9wdGlvbnMgPSBbXG4gICAgICAgICAgICB7dmFsdWU6IEZpbHRlck1hdGNoTW9kZS5FcXVhbHMsIGxhYmVsOiBwcmltZUNvbmZpZy5nZXRUcmFuc2xhdGlvbihGaWx0ZXJNYXRjaE1vZGUuRXF1YWxzKX0sXG4gICAgICAgICAgICB7dmFsdWU6IEZpbHRlck1hdGNoTW9kZS5Ob3RFcXVhbHMsIGxhYmVsOiBwcmltZUNvbmZpZy5nZXRUcmFuc2xhdGlvbihGaWx0ZXJNYXRjaE1vZGUuTm90RXF1YWxzKX0sXG4gICAgICAgICAgICB7dmFsdWU6IEZpbHRlck1hdGNoTW9kZS5MZXNzVGhhbiwgbGFiZWw6IHByaW1lQ29uZmlnLmdldFRyYW5zbGF0aW9uKEZpbHRlck1hdGNoTW9kZS5MZXNzVGhhbil9LFxuICAgICAgICAgICAge3ZhbHVlOiBGaWx0ZXJNYXRjaE1vZGUuTGVzc1RoYW5PckVxdWFsVG8sIGxhYmVsOiBwcmltZUNvbmZpZy5nZXRUcmFuc2xhdGlvbihGaWx0ZXJNYXRjaE1vZGUuTGVzc1RoYW5PckVxdWFsVG8pfSxcbiAgICAgICAgICAgIHt2YWx1ZTogRmlsdGVyTWF0Y2hNb2RlLkdyZWF0ZXJUaGFuLCBsYWJlbDogcHJpbWVDb25maWcuZ2V0VHJhbnNsYXRpb24oRmlsdGVyTWF0Y2hNb2RlLkdyZWF0ZXJUaGFuKX0sXG4gICAgICAgICAgICB7dmFsdWU6IEZpbHRlck1hdGNoTW9kZS5HcmVhdGVyVGhhbk9yRXF1YWxUbywgbGFiZWw6IHByaW1lQ29uZmlnLmdldFRyYW5zbGF0aW9uKEZpbHRlck1hdGNoTW9kZS5HcmVhdGVyVGhhbk9yRXF1YWxUbyl9LFxuICAgICAgICAgICAge3ZhbHVlOiBGaWx0ZXJNYXRjaE1vZGUuQmV0d2VlbiwgbGFiZWw6IHByaW1lQ29uZmlnLmdldFRyYW5zbGF0aW9uKEZpbHRlck1hdGNoTW9kZS5CZXR3ZWVuKX1cbiAgICAgICAgXTtcbiAgICB9IGVsc2UgaWYgKGRlc2NyaXB0b3IuZmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZUVudW0uTG9va3VwIHx8IGRlc2NyaXB0b3IuZmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZUVudW0uTG9va3VwRW51bSkge1xuICAgICAgICBvcHRpb25zID0gW1xuICAgICAgICAgICAge3ZhbHVlOiBGaWx0ZXJNYXRjaE1vZGUuRXF1YWxzLCBsYWJlbDogcHJpbWVDb25maWcuZ2V0VHJhbnNsYXRpb24oRmlsdGVyTWF0Y2hNb2RlLkVxdWFscyl9LFxuICAgICAgICAgICAge3ZhbHVlOiBGaWx0ZXJNYXRjaE1vZGUuTm90RXF1YWxzLCBsYWJlbDogcHJpbWVDb25maWcuZ2V0VHJhbnNsYXRpb24oRmlsdGVyTWF0Y2hNb2RlLk5vdEVxdWFscyl9LFxuICAgICAgICAgICAge3ZhbHVlOiBGaWx0ZXJNYXRjaE1vZGUuSW4sIGxhYmVsOiBwcmltZUNvbmZpZy5nZXRUcmFuc2xhdGlvbihGaWx0ZXJNYXRjaE1vZGUuSW4pfSxcbiAgICAgICAgICAgIHt2YWx1ZTogRmlsdGVyTWF0Y2hNb2RlLk5vdEluLCBsYWJlbDogcHJpbWVDb25maWcuZ2V0VHJhbnNsYXRpb24oRmlsdGVyTWF0Y2hNb2RlLk5vdEluKX1cbiAgICAgICAgXTtcbiAgICB9IGVsc2UgaWYgKGRlc2NyaXB0b3IuZmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZUVudW0uRGF0ZSkge1xuICAgICAgICBpZiAoIWRlc2NyaXB0b3IuZGF0ZVBpY2tlclNob3dUaW1lICYmICFkZXNjcmlwdG9yLmRhdGVWYWx1ZU5vVGltZSAmJiAhY21wU2VyQ2ZnPy5maWx0ZXJzRGF0ZU9ubHlEaXNhYmxlZCkge1xuICAgICAgICAgICAgb3B0aW9ucyA9IFtcbiAgICAgICAgICAgICAgICB7dmFsdWU6IEZpbHRlck1hdGNoTW9kZS5FcXVhbHMsIGxhYmVsOiBwcmltZUNvbmZpZy5nZXRUcmFuc2xhdGlvbihGaWx0ZXJNYXRjaE1vZGUuRXF1YWxzKX0sXG4gICAgICAgICAgICAgICAge3ZhbHVlOiBGaWx0ZXJNYXRjaE1vZGUuTm90RXF1YWxzLCBsYWJlbDogcHJpbWVDb25maWcuZ2V0VHJhbnNsYXRpb24oRmlsdGVyTWF0Y2hNb2RlLk5vdEVxdWFscyl9LFxuICAgICAgICAgICAgICAgIHt2YWx1ZTogRmlsdGVyTWF0Y2hNb2RlLkxlc3NUaGFuT3JFcXVhbFRvLCBsYWJlbDogcHJpbWVDb25maWcuZ2V0VHJhbnNsYXRpb24oRmlsdGVyTWF0Y2hNb2RlLkxlc3NUaGFuT3JFcXVhbFRvKX0sXG4gICAgICAgICAgICAgICAge3ZhbHVlOiBGaWx0ZXJNYXRjaE1vZGUuR3JlYXRlclRoYW5PckVxdWFsVG8sIGxhYmVsOiBwcmltZUNvbmZpZy5nZXRUcmFuc2xhdGlvbihGaWx0ZXJNYXRjaE1vZGUuR3JlYXRlclRoYW5PckVxdWFsVG8pfSxcbiAgICAgICAgICAgICAgICB7dmFsdWU6IEZpbHRlck1hdGNoTW9kZS5CZXR3ZWVuLCBsYWJlbDogcHJpbWVDb25maWcuZ2V0VHJhbnNsYXRpb24oRmlsdGVyTWF0Y2hNb2RlLkJldHdlZW4pfVxuICAgICAgICAgICAgXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSBbXG4gICAgICAgICAgICAgICAge3ZhbHVlOiBGaWx0ZXJNYXRjaE1vZGUuRXF1YWxzLCBsYWJlbDogcHJpbWVDb25maWcuZ2V0VHJhbnNsYXRpb24oRmlsdGVyTWF0Y2hNb2RlLkVxdWFscyl9LFxuICAgICAgICAgICAgICAgIHt2YWx1ZTogRmlsdGVyTWF0Y2hNb2RlLkxlc3NUaGFuT3JFcXVhbFRvLCBsYWJlbDogcHJpbWVDb25maWcuZ2V0VHJhbnNsYXRpb24oRmlsdGVyTWF0Y2hNb2RlLkxlc3NUaGFuT3JFcXVhbFRvKX0sXG4gICAgICAgICAgICAgICAge3ZhbHVlOiBGaWx0ZXJNYXRjaE1vZGUuR3JlYXRlclRoYW5PckVxdWFsVG8sIGxhYmVsOiBwcmltZUNvbmZpZy5nZXRUcmFuc2xhdGlvbihGaWx0ZXJNYXRjaE1vZGUuR3JlYXRlclRoYW5PckVxdWFsVG8pfSxcbiAgICAgICAgICAgICAgICB7dmFsdWU6IEZpbHRlck1hdGNoTW9kZS5CZXR3ZWVuLCBsYWJlbDogcHJpbWVDb25maWcuZ2V0VHJhbnNsYXRpb24oRmlsdGVyTWF0Y2hNb2RlLkJldHdlZW4pfVxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9wdGlvbnM/LnB1c2goXG4gICAgICAgIHt2YWx1ZTogRmlsdGVyTWF0Y2hNb2RlLkV4aXN0cywgbGFiZWw6IHByaW1lQ29uZmlnLmdldFRyYW5zbGF0aW9uKEZpbHRlck1hdGNoTW9kZS5FeGlzdHMpfSxcbiAgICAgICAge3ZhbHVlOiBGaWx0ZXJNYXRjaE1vZGUuRG9lc05vdEV4aXN0LCBsYWJlbDogcHJpbWVDb25maWcuZ2V0VHJhbnNsYXRpb24oRmlsdGVyTWF0Y2hNb2RlLkRvZXNOb3RFeGlzdCl9XG4gICAgKTtcblxuICAgIGlmIChkZXNjcmlwdG9yPy5tYXRjaE1vZGVzKSB7XG4gICAgICAgIG9wdGlvbnMgPSBkZXNjcmlwdG9yLm1hdGNoTW9kZXMubWFwKG1tID0+IDxTZWxlY3RJdGVtPnt2YWx1ZTogbW0sIGxhYmVsOiBwcmltZUNvbmZpZy5nZXRUcmFuc2xhdGlvbihtbSl9KTtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnMgfHwgW107XG59XG5cbi8qKlxuICogR2V0cyB0aGUgZGVmYXVsdCBtYXRjaCBtb2RlIGZvciBhIGZpbHRlci5cbiAqXG4gKiBAcGFyYW0ge0ZpbHRlckRlc2NyaXB0b3I8YW55LCBhbnk+fSBbZGVzY3JpcHRvcl0gLSBUaGUgZmlsdGVyIGRlc2NyaXB0b3IuXG4gKiBAcGFyYW0ge1NlbGVjdEl0ZW1bXX0gW21hdGNoTW9kZXM9W11dIC0gVGhlIGF2YWlsYWJsZSBtYXRjaCBtb2RlcyBvcHRpb25zLlxuICpcbiAqIEByZXR1cm4ge0ZpbHRlck1hdGNoTW9kZUV4dGVuZGVkVHlwZX0gVGhlIGRlZmF1bHQgbWF0Y2ggbW9kZSBmb3IgdGhlIGZpbHRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckdldERlZmF1bHRNYXRjaE1vZGUoZGVzY3JpcHRvcj86IEZpbHRlckRlc2NyaXB0b3I8YW55LCBhbnk+LCBtYXRjaE1vZGVzOiBTZWxlY3RJdGVtW10gPSBbXSk6IEZpbHRlck1hdGNoTW9kZUV4dGVuZGVkVHlwZSB7XG4gICAgbGV0IGRlZmF1bHRNYXRjaE1vZGU6IEZpbHRlck1hdGNoTW9kZUV4dGVuZGVkVHlwZSA9IEZpbHRlck1hdGNoTW9kZS5FcXVhbHM7XG4gICAgaWYgKGRlc2NyaXB0b3I/LmZpbHRlclR5cGUgPT09IEZpbHRlclR5cGVFbnVtLlN0cmluZykgZGVmYXVsdE1hdGNoTW9kZSA9IEZpbHRlck1hdGNoTW9kZS5TdGFydHNXaXRoO1xuXG4gICAgLy8gb3ZlcndyaXRlIHR5cGUgZGVmYXVsdCBzZXQgaW4gZGVzY3JpcHRvclxuICAgIGlmIChkZXNjcmlwdG9yPy5kZWZhdWx0TWF0Y2hNb2RlKSB7XG4gICAgICAgIGRlZmF1bHRNYXRjaE1vZGUgPSBkZXNjcmlwdG9yLmRlZmF1bHRNYXRjaE1vZGU7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgZGVmYXVsdCBtb2RlIGV4aXN0cyFcbiAgICBpZiAobWF0Y2hNb2Rlcy5sZW5ndGggPiAwICYmICFtYXRjaE1vZGVzLnNvbWUobSA9PiBtLnZhbHVlID09PSBkZWZhdWx0TWF0Y2hNb2RlKSkge1xuICAgICAgICBkZWZhdWx0TWF0Y2hNb2RlID0gbWF0Y2hNb2Rlc1swXS52YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVmYXVsdE1hdGNoTW9kZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlclNldFN0YXRlT25DaGFuZ2UoXG4gICAgZmlsdGVyOiBGaWx0ZXJTdGF0ZSxcbiAgICBtYXRjaE1vZGU/OiBGaWx0ZXJNYXRjaE1vZGVFeHRlbmRlZFR5cGUsXG4gICAgdmFsdWU/OiBhbnksXG4gICAgZmlsdGVyVHlwZT86IEZpbHRlclR5cGVFbnVtLFxuICAgIGZpbHRlckRhdGVDZmc/OiBGaWx0ZXJEYXRlQ29uZmlnXG4pOiBGaWx0ZXJTdGF0ZSB7XG4gICAgbGV0IGRpc3BsYXlWYWx1ZSA9IGZpbHRlcj8uZGlzcGxheVZhbHVlID8/IHZhbHVlO1xuICAgIGxldCBkaXNwbGF5TWF0Y2hNb2RlID0gZmlsdGVyPy5kaXNwbGF5TWF0Y2hNb2RlID8/IG1hdGNoTW9kZTtcblxuICAgIC8vIHdoZW4gZXF1YWxzIGlzIHVzZWQgb24gZGF0ZXMgd2l0aCB0aW1lLCB0aGUgYWN0dWFsIGZpbHRlciB3aWxsIGJlIGJldHdlZW4sIGJ1dCBkaXNwbGF5ZWQgYXMgZXF1YWxzXG4gICAgaWYgKGZpbHRlclR5cGUgPT09IEZpbHRlclR5cGVFbnVtLkRhdGUgJiYgIWZpbHRlckRhdGVDZmc/LnZhbHVlTm9UaW1lKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIG1hdGNoTW9kZSA9PT0gRmlsdGVyTWF0Y2hNb2RlLkJldHdlZW4gJiZcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUpICYmXG4gICAgICAgICAgICB2YWx1ZS5sZW5ndGggPT09IDIgJiZcbiAgICAgICAgICAgIHZhbHVlLmV2ZXJ5KHYgPT4gdiBpbnN0YW5jZW9mIERhdGUgfHwgdHlwZW9mIHYgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB2ID09PSAnbnVtYmVyJylcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoZmlsdGVyQXJlRGF0ZXNFcXVhbCh2YWx1ZVswXSwgdmFsdWVbMV0sIGZpbHRlckRhdGVDZmcpKSB7XG4gICAgICAgICAgICAgICAgZGlzcGxheU1hdGNoTW9kZSA9IEZpbHRlck1hdGNoTW9kZS5FcXVhbHM7XG4gICAgICAgICAgICAgICAgZGlzcGxheVZhbHVlID0gbmV3IERhdGUodmFsdWVbMF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG1hdGNoTW9kZSA9PT0gRmlsdGVyTWF0Y2hNb2RlLkVxdWFscyAmJiAhdmFsdWUpIHtcbiAgICAgICAgICAgIG1hdGNoTW9kZSA9IEZpbHRlck1hdGNoTW9kZS5CZXR3ZWVuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZpbHRlclR5cGUgPT09IEZpbHRlclR5cGVFbnVtLkRhdGUgJiYgZGlzcGxheVZhbHVlKSB7XG4gICAgICAgIC8vIGRpc3BsYXkgdmFsdWUgZm9yIGNhbGVuZGFyIGNhbm5vdCBiZSBzdHJpbmcsIGNvbnZlcnQgdG8gZGF0ZVxuICAgICAgICBkaXNwbGF5VmFsdWUgPSBBcnJheS5pc0FycmF5KGRpc3BsYXlWYWx1ZSlcbiAgICAgICAgICAgID8gZGlzcGxheVZhbHVlLm1hcCh2ID0+ICghKHYgaW5zdGFuY2VvZiBEYXRlKSA/IG5ldyBEYXRlKHYpIDogdikpXG4gICAgICAgICAgICA6IGRpc3BsYXlWYWx1ZSBpbnN0YW5jZW9mIERhdGVcbiAgICAgICAgICAgICAgPyBkaXNwbGF5VmFsdWVcbiAgICAgICAgICAgICAgOiBuZXcgRGF0ZShkaXNwbGF5VmFsdWUpO1xuICAgIH1cbiAgICBpZiAoZmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZUVudW0uQm9vbGVhbiAmJiBkaXNwbGF5VmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgZGlzcGxheVZhbHVlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgZGlzcGxheVZhbHVlID0gKHR5cGVvZiBkaXNwbGF5VmFsdWUgPT09ICdzdHJpbmcnICYmIGRpc3BsYXlWYWx1ZS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScpIHx8IGRpc3BsYXlWYWx1ZSA9PT0gMTtcbiAgICB9XG4gICAgaWYgKGZpbHRlclR5cGUgPT09IEZpbHRlclR5cGVFbnVtLk51bWJlciAmJiBkaXNwbGF5VmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgZGlzcGxheVZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgICAgICBjb25zdCBudW1WYWx1ZSA9ICtkaXNwbGF5VmFsdWU7XG4gICAgICAgIGlmICghaXNOYU4obnVtVmFsdWUpKSB7XG4gICAgICAgICAgICBkaXNwbGF5VmFsdWUgPSBudW1WYWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIC4uLmZpbHRlcixcbiAgICAgICAgbWF0Y2hNb2RlLFxuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGRpc3BsYXlNYXRjaE1vZGUsXG4gICAgICAgIGRpc3BsYXlWYWx1ZVxuICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJTZXRTdGF0ZU9uRGlzcGxheUNoYW5nZShcbiAgICBmaWx0ZXI6IEZpbHRlclN0YXRlIHwgdW5kZWZpbmVkLFxuICAgIGRpc3BsYXlNYXRjaE1vZGU6IEZpbHRlck1hdGNoTW9kZUV4dGVuZGVkVHlwZSxcbiAgICBkaXNwbGF5VmFsdWU6IGFueSxcbiAgICBmaWx0ZXJUeXBlPzogRmlsdGVyVHlwZUVudW0sXG4gICAgZmlsdGVyRGF0ZUNmZz86IEZpbHRlckRhdGVDb25maWdcbikge1xuICAgIGxldCBtYXRjaE1vZGUgPSBkaXNwbGF5TWF0Y2hNb2RlO1xuICAgIGxldCB2YWx1ZTogU2luZ2xlT3JBcnJheVR5cGU8TnVsbGFibGU8RGF0ZSB8IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+PiA9IGRpc3BsYXlWYWx1ZTtcblxuICAgIGlmIChmaWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlRW51bS5EYXRlKSB7XG4gICAgICAgIGlmICghZmlsdGVyRGF0ZUNmZz8udmFsdWVOb1RpbWUgJiYgZGlzcGxheVZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoZGlzcGxheU1hdGNoTW9kZSA9PT0gRmlsdGVyTWF0Y2hNb2RlLkVxdWFscykge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUgfHwgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZyb21EYXRlID0gbmV3IERhdGUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0b0RhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlckRhdGVDZmc/LnNob3dUaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyRGF0ZUNmZz8uc2hvd1NlY29uZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tRGF0ZS5zZXRNaWxsaXNlY29uZHMoMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9EYXRlLnNldE1pbGxpc2Vjb25kcyg5OTkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tRGF0ZS5zZXRTZWNvbmRzKDAsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvRGF0ZS5zZXRTZWNvbmRzKDU5LCA5OTkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbURhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b0RhdGUuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gW2Zyb21EYXRlLCB0b0RhdGVdO1xuICAgICAgICAgICAgICAgICAgICBtYXRjaE1vZGUgPSBGaWx0ZXJNYXRjaE1vZGUuQmV0d2VlbjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChkaXNwbGF5TWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuQmV0d2Vlbikge1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDIgJiYgdmFsdWUuZXZlcnkoaSA9PiBpIGluc3RhbmNlb2YgRGF0ZSB8fCB0eXBlb2YgaSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGkgPT09ICdudW1iZXInKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmcm9tRGF0ZSA9IG5ldyBEYXRlKHZhbHVlWzBdIGFzIERhdGUgfCBzdHJpbmcgfCBudW1iZXIpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdG9EYXRlID0gbmV3IERhdGUodmFsdWVbMV0gYXMgRGF0ZSB8IHN0cmluZyB8IG51bWJlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlckFyZURhdGVzRXF1YWwoZnJvbURhdGUsIHRvRGF0ZSwgZmlsdGVyRGF0ZUNmZykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvRGF0ZSA9IG5ldyBEYXRlKGZyb21EYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJEYXRlQ2ZnPy5zaG93VGltZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJEYXRlQ2ZnPy5zaG93U2Vjb25kcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b0RhdGUuc2V0U2Vjb25kcyh0b0RhdGUuZ2V0U2Vjb25kcygpICsgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9EYXRlLnNldE1pbnV0ZXModG9EYXRlLmdldE1pbnV0ZXMoKSArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9EYXRlLnNldERhdGUodG9EYXRlLmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IFtmcm9tRGF0ZSwgdG9EYXRlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoTW9kZSA9IEZpbHRlck1hdGNoTW9kZS5CZXR3ZWVuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbnZlcnREYXRlVHlwZSA9IGZpbHRlckRhdGVDZmc/LnZhbHVlTm9UaW1lID8gJ2RhdGUnIDogJ2RhdGUtdGltZSc7XG4gICAgICAgIGNvbnN0IGNvbnZlcnREYXRlVGltZU9wdHMgPSB7XG4gICAgICAgICAgICB1dGM6IGZpbHRlckRhdGVDZmc/LnZhbHVlVXRjLFxuICAgICAgICAgICAgbm9NaWxsaXM6IGZpbHRlckRhdGVDZmc/LnZhbHVlTm9NaWxsaXMsXG4gICAgICAgICAgICBub1RpbWV6b25lOiBmaWx0ZXJEYXRlQ2ZnPy52YWx1ZU5vVGltZXpvbmVcbiAgICAgICAgfTtcblxuICAgICAgICB2YWx1ZSA9XG4gICAgICAgICAgICB2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgICAgICAgPyB2YWx1ZVxuICAgICAgICAgICAgICAgIDogQXJyYXkuaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgICAgICAgICAgID8gdmFsdWUuZmlsdGVyKGkgPT4gaSAhPSBudWxsKS5tYXAoaSA9PiBkYXRlVG9Jc29TdHJpbmcoaSwgY29udmVydERhdGVUeXBlLCBjb252ZXJ0RGF0ZVRpbWVPcHRzKSlcbiAgICAgICAgICAgICAgICAgIDogZGF0ZVRvSXNvU3RyaW5nKHZhbHVlLCBjb252ZXJ0RGF0ZVR5cGUsIGNvbnZlcnREYXRlVGltZU9wdHMpO1xuICAgIH1cbiAgICBpZiAobWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuRXhpc3RzIHx8IG1hdGNoTW9kZSA9PT0gRmlsdGVyTWF0Y2hNb2RlLkRvZXNOb3RFeGlzdCkge1xuICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIDxGaWx0ZXJTdGF0ZT57XG4gICAgICAgIC4uLmZpbHRlcixcbiAgICAgICAgZGlzcGxheU1hdGNoTW9kZTogZGlzcGxheU1hdGNoTW9kZSxcbiAgICAgICAgbWF0Y2hNb2RlOiBtYXRjaE1vZGUsXG4gICAgICAgIGRpc3BsYXlWYWx1ZTogZGlzcGxheVZhbHVlLFxuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGNhc2VTZW5zaXRpdmU6IGZpbHRlclR5cGUgPT09IEZpbHRlclR5cGVFbnVtLlN0cmluZyA/IGZpbHRlcj8uY2FzZVNlbnNpdGl2ZSA6IHVuZGVmaW5lZFxuICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJBcmVEYXRlc0VxdWFsKGZyb21EYXRlOiBEYXRlIHwgc3RyaW5nIHwgbnVtYmVyLCB0b0RhdGU6IERhdGUgfCBzdHJpbmcgfCBudW1iZXIsIGZpbHRlckRhdGVDZmc/OiBGaWx0ZXJEYXRlQ29uZmlnKSB7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gZGF0ZVRvSXNvU3RyaW5nKGZyb21EYXRlKTtcbiAgICBjb25zdCBlbmREYXRlID0gZGF0ZVRvSXNvU3RyaW5nKHRvRGF0ZSk7XG5cbiAgICAvLyAyMDIwLTExLTAyVDExOjEyOjEyLjAwMFxuICAgIGNvbnN0IGNtcExlbmd0aCA9IGZpbHRlckRhdGVDZmc/LnNob3dUaW1lID8gKGZpbHRlckRhdGVDZmc/LnNob3dTZWNvbmRzID8gMTkgOiAxNikgOiAxMDtcblxuICAgIHJldHVybiBzdGFydERhdGUuc3Vic3RyaW5nKDAsIGNtcExlbmd0aCkgPT09IGVuZERhdGUuc3Vic3RyaW5nKDAsIGNtcExlbmd0aCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJBcHBseVNlcmlhbGl6YXRpb25Db25maWdUb0NtcChjb25maWc6IENvbW1vbnNNb2R1bGVDb25maWcgfCBudWxsLCBjbXBTZXJDZmc6IENvbW1vbnNTZXJpYWxpemF0aW9uQ29uZmlnKSB7XG4gICAgLy8gc2V0IGRlZmF1bHRcbiAgICBjbXBTZXJDZmcuZGF0ZVRpbWVJblV0YyA9IGZhbHNlO1xuICAgIGNtcFNlckNmZy5kYXRlVGltZVdpdGhUaW1lem9uZSA9IHRydWU7XG4gICAgY21wU2VyQ2ZnLmRhdGVUaW1lV2l0aE1pbGxpcyA9IHRydWU7XG4gICAgY21wU2VyQ2ZnLmZpbHRlcnNEYXRlT25seURpc2FibGVkID0gZmFsc2U7XG4gICAgLy8gc2V0IGN1c3RvbWl6YXRpb25zXG4gICAgaWYgKGNvbmZpZz8uc2VyaWFsaXphdGlvbikge1xuICAgICAgICBpZiAoY29uZmlnLnNlcmlhbGl6YXRpb24uZGF0ZVRpbWVJblV0YyAhPT0gdW5kZWZpbmVkKSBjbXBTZXJDZmcuZGF0ZVRpbWVJblV0YyA9IGNvbmZpZy5zZXJpYWxpemF0aW9uLmRhdGVUaW1lSW5VdGM7XG4gICAgICAgIGlmIChjb25maWcuc2VyaWFsaXphdGlvbi5kYXRlVGltZVdpdGhUaW1lem9uZSAhPT0gdW5kZWZpbmVkKSBjbXBTZXJDZmcuZGF0ZVRpbWVXaXRoVGltZXpvbmUgPSBjb25maWcuc2VyaWFsaXphdGlvbi5kYXRlVGltZVdpdGhUaW1lem9uZTtcbiAgICAgICAgaWYgKGNvbmZpZy5zZXJpYWxpemF0aW9uLmRhdGVUaW1lV2l0aE1pbGxpcyAhPT0gdW5kZWZpbmVkKSBjbXBTZXJDZmcuZGF0ZVRpbWVXaXRoTWlsbGlzID0gY29uZmlnLnNlcmlhbGl6YXRpb24uZGF0ZVRpbWVXaXRoTWlsbGlzO1xuICAgICAgICBpZiAoY29uZmlnLnNlcmlhbGl6YXRpb24uZmlsdGVyc0RhdGVPbmx5RGlzYWJsZWQgIT09IHVuZGVmaW5lZCkgY21wU2VyQ2ZnLmZpbHRlcnNEYXRlT25seURpc2FibGVkID0gY29uZmlnLnNlcmlhbGl6YXRpb24uZmlsdGVyc0RhdGVPbmx5RGlzYWJsZWQ7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyQWRqdXN0RGlzcGxheVZhbHVlT25NYXRjaE1vZGVDaGFuZ2UobWF0Y2hNb2RlPzogRmlsdGVyTWF0Y2hNb2RlRXh0ZW5kZWRUeXBlLCB2YWx1ZT86IGFueSk6IGFueSB7XG4gICAgaWYgKG1hdGNoTW9kZSA9PSBudWxsIHx8IG1hdGNoTW9kZSA9PT0gRmlsdGVyTWF0Y2hNb2RlLkV4aXN0cyB8fCBtYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5Eb2VzTm90RXhpc3QpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlOyAvLyBuZXZlciBjaGFuZ2UsIG9ubHkgY2hhbmdlIGxhdGVyIGlmIHNvbWV0aGluZyBlbHNlIGNoYW5nZXMgaGVyZVxuICAgIH1cbiAgICBpZiAobWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuQmV0d2Vlbikge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgIT0gbnVsbCA/IFt2YWx1ZSwgdmFsdWVdIDogW107XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUubGVuZ3RoID09PSAwIHx8IHZhbHVlLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIFt2YWx1ZVswXSwgdmFsdWVbMF1dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFt2YWx1ZVswXSwgdmFsdWVbMV1dO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChtYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5JbiB8fCBtYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5Ob3RJbikge1xuICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IHZhbHVlID09IG51bGwgPyBbXSA6IFt2YWx1ZV07XG4gICAgfVxuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPiAwID8gdmFsdWVbMF0gOiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckdldERhdGVDb25maWcoZGVzY3JpcHRvcj86IEZpbHRlckRlc2NyaXB0b3I8YW55LCBhbnk+LCBzZXJDZmc/OiBDb21tb25zU2VyaWFsaXphdGlvbkNvbmZpZyk6IEZpbHRlckRhdGVDb25maWcgfCB1bmRlZmluZWQge1xuICAgIGlmICghZGVzY3JpcHRvciB8fCBkZXNjcmlwdG9yLmZpbHRlclR5cGUgIT09IEZpbHRlclR5cGVFbnVtLkRhdGUpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBzaG93VGltZSA9XG4gICAgICAgIGRlc2NyaXB0b3IuZGF0ZVBpY2tlclNob3dUaW1lID8/IChkZXNjcmlwdG9yLmRpc3BsYXlGb3JtYXRBcHBseVRvRmllbGQgJiYgZGVzY3JpcHRvci5kaXNwbGF5Rm9ybWF0ID8gYW5ndWxhckRhdGVGb3JtYXRIYXNUaW1lKGRlc2NyaXB0b3IuZGlzcGxheUZvcm1hdCkgOiBmYWxzZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWVOb1RpbWU6IGRlc2NyaXB0b3IuZGF0ZVZhbHVlTm9UaW1lIHx8ICghc2VyQ2ZnPy5maWx0ZXJzRGF0ZU9ubHlEaXNhYmxlZCAmJiAhc2hvd1RpbWUpLFxuICAgICAgICB2YWx1ZVV0YzogZGVzY3JpcHRvci5kYXRlVmFsdWVVdGMgPz8gc2VyQ2ZnPy5kYXRlVGltZUluVXRjLFxuICAgICAgICB2YWx1ZU5vVGltZXpvbmU6IGRlc2NyaXB0b3IuZGF0ZVZhbHVlTm9UaW1lem9uZSA/PyAhc2VyQ2ZnPy5kYXRlVGltZVdpdGhUaW1lem9uZSxcbiAgICAgICAgdmFsdWVOb01pbGxpczogIXNlckNmZz8uZGF0ZVRpbWVXaXRoTWlsbGlzLFxuICAgICAgICBmb3JtYXQ6XG4gICAgICAgICAgICBkZXNjcmlwdG9yLmRhdGVQaWNrZXJGb3JtYXQgPz8gKGRlc2NyaXB0b3IuZGlzcGxheUZvcm1hdEFwcGx5VG9GaWVsZCAmJiBkZXNjcmlwdG9yLmRpc3BsYXlGb3JtYXQgPyBmcm9tQW5ndWxhckRhdGVGb3JtYXRUb1ByaW1lKGRlc2NyaXB0b3IuZGlzcGxheUZvcm1hdCkgOiB1bmRlZmluZWQpLFxuICAgICAgICBzaG93VGltZTogc2hvd1RpbWUsXG4gICAgICAgIHNob3dTZWNvbmRzOlxuICAgICAgICAgICAgc2hvd1RpbWUgJiZcbiAgICAgICAgICAgIChkZXNjcmlwdG9yLmRhdGVQaWNrZXJTaG93U2Vjb25kcyA/PyAoZGVzY3JpcHRvci5kaXNwbGF5Rm9ybWF0QXBwbHlUb0ZpZWxkICYmIGRlc2NyaXB0b3IuZGlzcGxheUZvcm1hdCA/IGFuZ3VsYXJEYXRlRm9ybWF0SGFzU2Vjb25kcyhkZXNjcmlwdG9yLmRpc3BsYXlGb3JtYXQpIDogZmFsc2UpKVxuICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJHZXROdW1iZXJDb25maWcoZGVzY3JpcHRvcj86IEZpbHRlckRlc2NyaXB0b3I8YW55LCBhbnk+KTogRmlsdGVyTnVtYmVyQ29uZmlnIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIWRlc2NyaXB0b3IgfHwgZGVzY3JpcHRvci5maWx0ZXJUeXBlICE9PSBGaWx0ZXJUeXBlRW51bS5OdW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBkaXNwbGF5Q2ZnID0gZGVzY3JpcHRvci5kaXNwbGF5Rm9ybWF0QXBwbHlUb0ZpZWxkICYmIGRlc2NyaXB0b3IuZGlzcGxheUZvcm1hdCA/IGZyb21Bbmd1bGFyTnVtYmVyRm9ybWF0VG9GcmFjdGlvbnMoZGVzY3JpcHRvci5kaXNwbGF5Rm9ybWF0KSA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4ge1xuICAgICAgICBmcmFjdGlvbnNNaW46IGRlc2NyaXB0b3IubnVtYmVyTWluRnJhY3Rpb25EaWdpdHMgPz8gZGlzcGxheUNmZz8uZnJhY3Rpb25zTWluLFxuICAgICAgICBmcmFjdGlvbnNNYXg6IGRlc2NyaXB0b3IubnVtYmVyTWF4RnJhY3Rpb25EaWdpdHMgPz8gZGlzcGxheUNmZz8uZnJhY3Rpb25zTWF4XG4gICAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIGZpbHRlciBkZXNjcmlwdG9ycyBmcm9tIGFuIGFycmF5IG9mIGdlbmVyaWMgZmlsdGVyIHByb3BlcnRpZXMuXG4gKlxuICogQHBhcmFtIHtGaWx0ZXJHZW5lcmljUHJvcGVydHlbXX0gcHJvcGVydGllcyAtIFRoZSBhcnJheSBvZiBmaWx0ZXJhYmxlIHByb3BlcnRpZXMsIHRoZWlyIHR5cGVzIGFuZCBvcHRpb25zLlxuICogQHBhcmFtIHtMb29rdXBEYXRhUHJvdmlkZXJJbnN0PHN0cmluZywgYW55LCBhbnksICdmaWVsZCc+fSBbdmFsdWVMb29rdXBdIC0gVGhlIGxvb2t1cCBkYXRhIHByb3ZpZGVyIGZvciB2YWx1ZSBzdWdnZXN0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZpbHRlckRlc2NyaXB0b3JzRnJvbUdlbmVyaWMoXG4gICAgcHJvcGVydGllczogRmlsdGVyR2VuZXJpY1Byb3BlcnR5W10sXG4gICAgdmFsdWVMb29rdXA/OiBMb29rdXBEYXRhUHJvdmlkZXJJbnN0PHN0cmluZywgYW55LCBhbnksICdmaWVsZCc+XG4pOiBGaWx0ZXJEZXNjcmlwdG9yPGFueSwgYW55PltdIHwgW10ge1xuICAgIHJldHVybiBwcm9wZXJ0aWVzLnJlZHVjZTxGaWx0ZXJEZXNjcmlwdG9yPGFueSwgYW55PltdPigoY3JlYXRlZEZpbHRlckRlc2NyaXB0b3JzLCBnZW5lcmljRmlsdGVyKSA9PiB7XG4gICAgICAgIC8vIHdoZW4gbm8gZ2VuZXJpYyB2YWx1ZSBsb29rdXAgaXMgcHJvdmlkZWQsIGxvb2t1cCBlbnVtIGZpbHRlcnMgYXJlIHRyZWF0ZWQgYXMgc3RyaW5nIGZpbHRlcnNcbiAgICAgICAgY29uc3QgZmlsdGVyVHlwZSA9IGdlbmVyaWNGaWx0ZXIudHlwZSA9PT0gRmlsdGVyVHlwZUVudW0uTG9va3VwRW51bSAmJiB2YWx1ZUxvb2t1cCA9PT0gdW5kZWZpbmVkID8gRmlsdGVyVHlwZUVudW0uU3RyaW5nIDogZ2VuZXJpY0ZpbHRlci50eXBlO1xuICAgICAgICBjb25zdCBmaWx0ZXJEZXNjcmlwdG9yID0gbmV3IEZpbHRlckRlc2NyaXB0b3IoZ2VuZXJpY0ZpbHRlci5wcm9wZXJ0eSkuYXNGaWx0ZXJUeXBlKGZpbHRlclR5cGUpLmFzR2VuZXJpY0ZpbHRlcigpO1xuICAgICAgICBpZiAoKGdlbmVyaWNGaWx0ZXIudHlwZSA9PT0gRmlsdGVyVHlwZUVudW0uU3RyaW5nIHx8IGdlbmVyaWNGaWx0ZXIudHlwZSA9PT0gRmlsdGVyVHlwZUVudW0uTG9va3VwRW51bSkgJiYgdmFsdWVMb29rdXApIHtcbiAgICAgICAgICAgIGZpbHRlckRlc2NyaXB0b3Iud2l0aEdlbmVyaWNWYWx1ZVByb3ZpZGVyKHZhbHVlTG9va3VwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVyRGVzY3JpcHRvciAmJiBnZW5lcmljRmlsdGVyLm9wdHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc3dpdGNoIChnZW5lcmljRmlsdGVyLnR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIEZpbHRlclR5cGVFbnVtLk51bWJlcjpcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyRGVzY3JpcHRvci5hc051bWJlcihnZW5lcmljRmlsdGVyLm9wdHMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEZpbHRlclR5cGVFbnVtLkRhdGU6XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckRlc2NyaXB0b3IuYXNEYXRlKGdlbmVyaWNGaWx0ZXIub3B0cyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbHRlckRlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgIGNyZWF0ZWRGaWx0ZXJEZXNjcmlwdG9ycy5wdXNoKGZpbHRlckRlc2NyaXB0b3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGVkRmlsdGVyRGVzY3JpcHRvcnM7XG4gICAgfSwgW10pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNGaWx0ZXJWYWx1ZUJsYW5rKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCB8fCAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS50cmltKCkubGVuZ3RoID09PSAwKSB8fCAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAwKTtcbn1cbiJdfQ==","import { InjectionToken } from '@angular/core';\nexport const COMMONS_TABLE_FEATURE_CONFIG_IT = new InjectionToken('COMMONS_TABLE_FEATURE_CONFIG');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtZmVhdHVyZS1jb25maWcudG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90YWJsZS9zcmMvc2VydmljZXMvdGFibGUtZmVhdHVyZS1jb25maWcudG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQVM3QyxNQUFNLENBQUMsTUFBTSwrQkFBK0IsR0FBRyxJQUFJLGNBQWMsQ0FBcUIsOEJBQThCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0aW9uVG9rZW59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge0ZpbHRlckRpc3BsYXlUeXBlRW51bX0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9maWx0ZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlRmVhdHVyZUNvbmZpZyB7XG4gICAgZmlsdGVyRGlzcGxheVR5cGU/OiBGaWx0ZXJEaXNwbGF5VHlwZUVudW07XG4gICAgc2VhcmNoTGltaXRNYXhXb3Jkcz86IG51bWJlciB8IG51bGw7XG59XG5cbmV4cG9ydCBjb25zdCBDT01NT05TX1RBQkxFX0ZFQVRVUkVfQ09ORklHX0lUID0gbmV3IEluamVjdGlvblRva2VuPFRhYmxlRmVhdHVyZUNvbmZpZz4oJ0NPTU1PTlNfVEFCTEVfRkVBVFVSRV9DT05GSUcnKTtcbiJdfQ==","import { Injectable, Injector, computed, inject, signal } from '@angular/core';\nimport { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { PrimeNG } from 'primeng/config';\nimport { combineLatest, of, switchMap } from 'rxjs';\nimport { COMMONS_MODULE_CONFIG_IT, toObservable as commonsToObservable, effectWithDeps } from '@mediusinc/mng-commons/core';\nimport { FilterDisplayTypeEnum } from '@mediusinc/mng-commons/filter';\nimport { TableDynamicDescriptorInst, tableDescriptor } from '@mediusinc/mng-commons/table/api';\nimport { createFilterDescriptorsFromGeneric, filterApplySerializationConfigToCmp, filterGenerateMatchModeOptions, filterGetDateConfig, filterGetDefaultMatchMode, filterGetNumberConfig } from '../helpers/filters';\nimport { COMMONS_TABLE_FEATURE_CONFIG_IT } from './table-feature-config.token';\nimport * as i0 from \"@angular/core\";\nexport class TableMetadataService {\n static { this.cmpTypeName = 'TableComponent'; }\n #injector;\n #translationObserver;\n // signal sources\n #signalSources;\n #descriptor;\n #updateDescriptorFromSourceEffect;\n #genericFilters;\n // search\n #searchFieldsFromSignalSource;\n #searchFields;\n #searchFieldsEffect;\n constructor() {\n this.#injector = inject(Injector);\n this.primeConfig = inject(PrimeNG);\n this.moduleConfig = inject(COMMONS_MODULE_CONFIG_IT, { optional: true });\n this.tableModuleConfig = inject(COMMONS_TABLE_FEATURE_CONFIG_IT, { optional: true });\n this.serializationCfg = {};\n this.#translationObserver = toSignal(this.primeConfig.translationObserver);\n this.defaultFilterDisplayType = this.tableModuleConfig?.filterDisplayType ?? FilterDisplayTypeEnum.Column;\n // signal sources\n this.#signalSources = signal({}, ...(ngDevMode ? [{ debugName: \"#signalSources\" }] : []));\n // descriptors\n this.descriptorFromSource = computed(() => this.#signalSources().descriptor?.(), ...(ngDevMode ? [{ debugName: \"descriptorFromSource\" }] : []));\n this.#descriptor = signal(tableDescriptor(), ...(ngDevMode ? [{ debugName: \"#descriptor\" }] : []));\n this.descriptor = this.#descriptor.asReadonly();\n this.#updateDescriptorFromSourceEffect = effectWithDeps([this.descriptorFromSource], ([d]) => {\n if (d != null) {\n this.#descriptor.set(d);\n }\n });\n // pagination\n this.rowsPerPageOptions = computed(() => {\n const descriptor = this.descriptor();\n if (Array.isArray(descriptor.rowsPerPageOptions) && descriptor.rowsPerPageOptions.length > 0) {\n return descriptor.rowsPerPageOptions;\n }\n else {\n return [25, 50, 100];\n }\n }, ...(ngDevMode ? [{ debugName: \"rowsPerPageOptions\" }] : []));\n // filters\n this.filterDescriptors = computed(() => this.descriptor().filters, ...(ngDevMode ? [{ debugName: \"filterDescriptors\" }] : []));\n this.filters = computed(() => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const observer = this.#translationObserver(); // need this one to track language changes\n return this.filterDescriptors().map(d => this.mapFilterDescriptorToMetadata(d));\n }, ...(ngDevMode ? [{ debugName: \"filters\" }] : []));\n this.genericFilterDescriptor = computed(() => this.descriptor().genericFilter, ...(ngDevMode ? [{ debugName: \"genericFilterDescriptor\" }] : []));\n this.#genericFilters = signal([], ...(ngDevMode ? [{ debugName: \"#genericFilters\" }] : []));\n this.genericFilters = this.#genericFilters.asReadonly();\n // search\n this.#searchFieldsFromSignalSource = computed(() => this.#signalSources().searchFields?.(), ...(ngDevMode ? [{ debugName: \"#searchFieldsFromSignalSource\" }] : []));\n this.#searchFields = signal([], ...(ngDevMode ? [{ debugName: \"#searchFields\" }] : []));\n this.searchFields = this.#searchFields.asReadonly();\n this.#searchFieldsEffect = effectWithDeps([this.descriptor, this.#searchFieldsFromSignalSource], ([descriptor, searchFieldsFromSignalSource]) => {\n this.#searchFields.set(searchFieldsFromSignalSource ?? (descriptor.search && descriptor.searchFields ? descriptor.searchFields : this.descriptor().columns.map(c => c.property)));\n });\n // params\n this.defaultParams = computed(() => {\n const params = {\n offset: 0,\n limit: this.rowsPerPageOptions()[0],\n sort: this.descriptor()\n .sorts.filter(s => s.defaultIsEnabled)\n .sort((s1, s2) => (s1.defaultOrder ?? 1000) - (s2.defaultOrder ?? 1000))\n .map(s => ({\n property: s.property,\n ascending: s.defaultIsAscending\n })),\n filters: {}\n };\n this.filters()\n .filter(f => f.descriptor.hasDefaultValue)\n .forEach(f => {\n params.filters[f.descriptor.property] = {\n value: f.descriptor.defaultValue,\n matchMode: f.defaultMatchMode\n };\n });\n return params;\n }, ...(ngDevMode ? [{ debugName: \"defaultParams\" }] : []));\n filterApplySerializationConfigToCmp(this.moduleConfig, this.serializationCfg);\n combineLatest([toObservable(this.genericFilterDescriptor), toObservable(this.#translationObserver)])\n .pipe(switchMap(([genericFilterDescriptor]) => {\n if (genericFilterDescriptor) {\n const dataProvider = this.genericFilterDescriptor()?.propertyLookup;\n const genericFilterService = dataProvider?.serviceType ? this.#injector.get(dataProvider.serviceType) : null;\n // fetch filterable properties\n return commonsToObservable(genericFilterDescriptor.propertyLookup.lookup({}, genericFilterService));\n }\n return of([]);\n }), takeUntilDestroyed())\n .subscribe({\n next: genericFilters => {\n // set descriptors from generic filter data\n this.#genericFilters.set(createFilterDescriptorsFromGeneric(genericFilters, this.genericFilterDescriptor()?.valueLookup).map(d => this.mapFilterDescriptorToMetadata(d)));\n }\n });\n }\n setSignalSources(descriptor, searchFields) {\n this.#signalSources.set({ descriptor, searchFields });\n }\n setDescriptor(descriptor) {\n if (this.descriptorFromSource() instanceof TableDynamicDescriptorInst) {\n this.#descriptor.set(descriptor);\n }\n }\n mapFilterDescriptorToMetadata(descriptor) {\n const matchModes = filterGenerateMatchModeOptions(this.primeConfig, descriptor, this.serializationCfg);\n return {\n descriptor: descriptor,\n matchModes: matchModes,\n defaultMatchMode: filterGetDefaultMatchMode(descriptor, matchModes),\n dateConfig: filterGetDateConfig(descriptor, this.serializationCfg),\n numberConfig: filterGetNumberConfig(descriptor)\n };\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TableMetadataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TableMetadataService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TableMetadataService, decorators: [{\n type: Injectable\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtbWV0YWRhdGEuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RhYmxlL3NyYy9zZXJ2aWNlcy90YWJsZS1tZXRhZGF0YS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsUUFBUSxFQUFVLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3JGLE9BQU8sRUFBQyxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFFdEYsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxhQUFhLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUVsRCxPQUFPLEVBQUMsd0JBQXdCLEVBQThDLFlBQVksSUFBSSxtQkFBbUIsRUFBRSxjQUFjLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUN0SyxPQUFPLEVBQW1CLHFCQUFxQixFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDdEYsT0FBTyxFQUFzQiwwQkFBMEIsRUFBRSxlQUFlLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUVsSCxPQUFPLEVBQ0gsa0NBQWtDLEVBQ2xDLG1DQUFtQyxFQUNuQyw4QkFBOEIsRUFDOUIsbUJBQW1CLEVBQ25CLHlCQUF5QixFQUN6QixxQkFBcUIsRUFDeEIsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QixPQUFPLEVBQUMsK0JBQStCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQzs7QUFRN0UsTUFBTSxPQUFPLG9CQUFvQjthQUNiLGdCQUFXLEdBQUcsZ0JBQWdCLEFBQW5CLENBQW9CO0lBRXRDLFNBQVMsQ0FBb0I7SUFNN0Isb0JBQW9CLENBQWtEO0lBRy9FLGlCQUFpQjtJQUNSLGNBQWMsQ0FBNkI7SUFJM0MsV0FBVyxDQUF5RjtJQUU3RyxpQ0FBaUMsQ0FJ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LEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDdkcsT0FBTztZQUNILFVBQVUsRUFBRSxVQUFVO1lBQ3RCLFVBQVUsRUFBRSxVQUFVO1lBQ3RCLGdCQUFnQixFQUFFLHlCQUF5QixDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUM7WUFDbkUsVUFBVSxFQUFFLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUM7WUFDbEUsWUFBWSxFQUFFLHFCQUFxQixDQUFDLFVBQVUsQ0FBQztTQUNsRCxDQUFDO0lBQ04sQ0FBQzs4R0FqSVEsb0JBQW9CO2tIQUFwQixvQkFBb0I7OzJGQUFwQixvQkFBb0I7a0JBRGhDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIEluamVjdG9yLCBTaWduYWwsIGNvbXB1dGVkLCBpbmplY3QsIHNpZ25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge3Rha2VVbnRpbERlc3Ryb3llZCwgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuXG5pbXBvcnQge1ByaW1lTkd9IGZyb20gJ3ByaW1lbmcvY29uZmlnJztcbmltcG9ydCB7Y29tYmluZUxhdGVzdCwgb2YsIHN3aXRjaE1hcH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7Q09NTU9OU19NT0RVTEVfQ09ORklHX0lULCBDb21tb25zU2VyaWFsaXphdGlvbkNvbmZpZywgRGF0YUxpc3RQYXJhbXMsIHRvT2JzZXJ2YWJsZSBhcyBjb21tb25zVG9PYnNlcnZhYmxlLCBlZmZlY3RXaXRoRGVwc30gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9jb3JlJztcbmltcG9ydCB7RmlsdGVyRGVzY3JpcHRvciwgRmlsdGVyRGlzcGxheVR5cGVFbnVtfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2ZpbHRlcic7XG5pbXBvcnQge1RhYmxlRGVzY3JpcHRvckluc3QsIFRhYmxlRHluYW1pY0Rlc2NyaXB0b3JJbnN0LCB0YWJsZURlc2NyaXB0b3J9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvdGFibGUvYXBpJztcblxuaW1wb3J0IHtcbiAgICBjcmVhdGVGaWx0ZXJEZXNjcmlwdG9yc0Zyb21HZW5lcmljLFxuICAgIGZpbHRlckFwcGx5U2VyaWFsaXphdGlvbkNvbmZpZ1RvQ21wLFxuICAgIGZpbHRlckdlbmVyYXRlTWF0Y2hNb2RlT3B0aW9ucyxcbiAgICBmaWx0ZXJHZXREYXRlQ29uZmlnLFxuICAgIGZpbHRlckdldERlZmF1bHRNYXRjaE1vZGUsXG4gICAgZmlsdGVyR2V0TnVtYmVyQ29uZmlnXG59IGZyb20gJy4uL2hlbHBlcnMvZmlsdGVycyc7XG5pbXBvcnQge0ZpbHRlckNvbmZpZ30gZnJvbSAnLi4vbW9kZWxzL2ZpbHRlci5tb2RlbCc7XG5pbXBvcnQge0NPTU1PTlNfVEFCTEVfRkVBVFVSRV9DT05GSUdfSVR9IGZyb20gJy4vdGFibGUtZmVhdHVyZS1jb25maWcudG9rZW4nO1xuXG5pbnRlcmZhY2UgU2lnbmFsU291cmNlczxJdGVtID0gYW55PiB7XG4gICAgZGVzY3JpcHRvcj86IFNpZ25hbDxUYWJsZURlc2NyaXB0b3JJbnN0PEl0ZW0sIGFueSwgYW55Pj47XG4gICAgc2VhcmNoRmllbGRzPzogU2lnbmFsPHN0cmluZ1tdIHwgdW5kZWZpbmVkPjtcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRhYmxlTWV0YWRhdGFTZXJ2aWNlIHtcbiAgICBzdGF0aWMgcmVhZG9ubHkgY21wVHlwZU5hbWUgPSAnVGFibGVDb21wb25lbnQnO1xuXG4gICAgcmVhZG9ubHkgI2luamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcbiAgICByZWFkb25seSBwcmltZUNvbmZpZyA9IGluamVjdChQcmltZU5HKTtcbiAgICByZWFkb25seSBtb2R1bGVDb25maWcgPSBpbmplY3QoQ09NTU9OU19NT0RVTEVfQ09ORklHX0lULCB7b3B0aW9uYWw6IHRydWV9KTtcbiAgICByZWFkb25seSB0YWJsZU1vZHVsZUNvbmZpZyA9IGluamVjdChDT01NT05TX1RBQkxFX0ZFQVRVUkVfQ09ORklHX0lULCB7b3B0aW9uYWw6IHRydWV9KTtcblxuICAgIHJlYWRvbmx5IHNlcmlhbGl6YXRpb25DZmc6IENvbW1vbnNTZXJpYWxpemF0aW9uQ29uZmlnID0ge307XG4gICAgcmVhZG9ubHkgI3RyYW5zbGF0aW9uT2JzZXJ2ZXIgPSB0b1NpZ25hbCh0aGlzLnByaW1lQ29uZmlnLnRyYW5zbGF0aW9uT2JzZXJ2ZXIpO1xuICAgIHJlYWRvbmx5IGRlZmF1bHRGaWx0ZXJEaXNwbGF5VHlwZTogRmlsdGVyRGlzcGxheVR5cGVFbnVtID0gdGhpcy50YWJsZU1vZHVsZUNvbmZpZz8uZmlsdGVyRGlzcGxheVR5cGUgPz8gRmlsdGVyRGlzcGxheVR5cGVFbnVtLkNvbHVtbjtcblxuICAgIC8vIHNpZ25hbCBzb3VyY2VzXG4gICAgcmVhZG9ubHkgI3NpZ25hbFNvdXJjZXMgPSBzaWduYWw8U2lnbmFsU291cmNlcz4oe30pO1xuXG4gICAgLy8gZGVzY3JpcHRvcnNcbiAgICByZWFkb25seSBkZXNjcmlwdG9yRnJvbVNvdXJjZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuI3NpZ25hbFNvdXJjZXMoKS5kZXNjcmlwdG9yPy4oKSk7XG4gICAgcmVhZG9ubHkgI2Rlc2NyaXB0b3IgPSBzaWduYWw8VGFibGVEZXNjcmlwdG9ySW5zdDxhbnksIGFueSwgYW55Pj4odGFibGVEZXNjcmlwdG9yPHN0cmluZywgc3RyaW5nLCBzdHJpbmc+KCkpO1xuICAgIHJlYWRvbmx5IGRlc2NyaXB0b3IgPSB0aGlzLiNkZXNjcmlwdG9yLmFzUmVhZG9ubHkoKTtcbiAgICAjdXBkYXRlRGVzY3JpcHRvckZyb21Tb3VyY2VFZmZlY3QgPSBlZmZlY3RXaXRoRGVwcyhbdGhpcy5kZXNjcmlwdG9yRnJvbVNvdXJjZV0sIChbZF0pID0+IHtcbiAgICAgICAgaWYgKGQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy4jZGVzY3JpcHRvci5zZXQoZCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIHBhZ2luYXRpb25cbiAgICByb3dzUGVyUGFnZU9wdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSB0aGlzLmRlc2NyaXB0b3IoKTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGVzY3JpcHRvci5yb3dzUGVyUGFnZU9wdGlvbnMpICYmIGRlc2NyaXB0b3Iucm93c1BlclBhZ2VPcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBkZXNjcmlwdG9yLnJvd3NQZXJQYWdlT3B0aW9ucztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbMjUsIDUwLCAxMDBdO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBmaWx0ZXJzXG4gICAgcmVhZG9ubHkgZmlsdGVyRGVzY3JpcHRvcnMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmRlc2NyaXB0b3IoKS5maWx0ZXJzKTtcbiAgICByZWFkb25seSBmaWx0ZXJzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgIGNvbnN0IG9ic2VydmVyID0gdGhpcy4jdHJhbnNsYXRpb25PYnNlcnZlcigpOyAvLyBuZWVkIHRoaXMgb25lIHRvIHRyYWNrIGxhbmd1YWdlIGNoYW5nZXNcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyRGVzY3JpcHRvcnMoKS5tYXAoZCA9PiB0aGlzLm1hcEZpbHRlckRlc2NyaXB0b3JUb01ldGFkYXRhKGQpKTtcbiAgICB9KTtcbiAgICByZWFkb25seSBnZW5lcmljRmlsdGVyRGVzY3JpcHRvciA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZGVzY3JpcHRvcigpLmdlbmVyaWNGaWx0ZXIpO1xuICAgIHJlYWRvbmx5ICNnZW5lcmljRmlsdGVycyA9IHNpZ25hbDxGaWx0ZXJDb25maWdbXT4oW10pO1xuICAgIHJlYWRvbmx5IGdlbmVyaWNGaWx0ZXJzID0gdGhpcy4jZ2VuZXJpY0ZpbHRlcnMuYXNSZWFkb25seSgpO1xuXG4gICAgLy8gc2VhcmNoXG4gICAgcmVhZG9ubHkgI3NlYXJjaEZpZWxkc0Zyb21TaWduYWxTb3VyY2UgPSBjb21wdXRlZCgoKSA9PiB0aGlzLiNzaWduYWxTb3VyY2VzKCkuc2VhcmNoRmllbGRzPy4oKSk7XG4gICAgcmVhZG9ubHkgI3NlYXJjaEZpZWxkcyA9IHNpZ25hbDxzdHJpbmdbXT4oW10pO1xuICAgIHJlYWRvbmx5IHNlYXJjaEZpZWxkcyA9IHRoaXMuI3NlYXJjaEZpZWxkcy5hc1JlYWRvbmx5KCk7XG4gICAgI3NlYXJjaEZpZWxkc0VmZmVjdCA9IGVmZmVjdFdpdGhEZXBzKFt0aGlzLmRlc2NyaXB0b3IsIHRoaXMuI3NlYXJjaEZpZWxkc0Zyb21TaWduYWxTb3VyY2VdLCAoW2Rlc2NyaXB0b3IsIHNlYXJjaEZpZWxkc0Zyb21TaWduYWxTb3VyY2VdKSA9PiB7XG4gICAgICAgIHRoaXMuI3NlYXJjaEZpZWxkcy5zZXQoXG4gICAgICAgICAgICBzZWFyY2hGaWVsZHNGcm9tU2lnbmFsU291cmNlID8/IChkZXNjcmlwdG9yLnNlYXJjaCAmJiBkZXNjcmlwdG9yLnNlYXJjaEZpZWxkcyA/IGRlc2NyaXB0b3Iuc2VhcmNoRmllbGRzIDogdGhpcy5kZXNjcmlwdG9yKCkuY29sdW1ucy5tYXAoYyA9PiBjLnByb3BlcnR5KSlcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIC8vIHBhcmFtc1xuICAgIHJlYWRvbmx5IGRlZmF1bHRQYXJhbXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmFtczogRGF0YUxpc3RQYXJhbXMgPSB7XG4gICAgICAgICAgICBvZmZzZXQ6IDAsXG4gICAgICAgICAgICBsaW1pdDogdGhpcy5yb3dzUGVyUGFnZU9wdGlvbnMoKVswXSxcbiAgICAgICAgICAgIHNvcnQ6IHRoaXMuZGVzY3JpcHRvcigpXG4gICAgICAgICAgICAgICAgLnNvcnRzLmZpbHRlcihzID0+IHMuZGVmYXVsdElzRW5hYmxlZClcbiAgICAgICAgICAgICAgICAuc29ydCgoczEsIHMyKSA9PiAoczEuZGVmYXVsdE9yZGVyID8/IDEwMDApIC0gKHMyLmRlZmF1bHRPcmRlciA/PyAxMDAwKSlcbiAgICAgICAgICAgICAgICAubWFwKHMgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IHMucHJvcGVydHksXG4gICAgICAgICAgICAgICAgICAgIGFzY2VuZGluZzogcy5kZWZhdWx0SXNBc2NlbmRpbmdcbiAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICBmaWx0ZXJzOiB7fVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZmlsdGVycygpXG4gICAgICAgICAgICAuZmlsdGVyKGYgPT4gZi5kZXNjcmlwdG9yLmhhc0RlZmF1bHRWYWx1ZSlcbiAgICAgICAgICAgIC5mb3JFYWNoKGYgPT4ge1xuICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXJzIVtmLmRlc2NyaXB0b3IucHJvcGVydHldID0ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZi5kZXNjcmlwdG9yLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hNb2RlOiBmLmRlZmF1bHRNYXRjaE1vZGVcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHBhcmFtcztcbiAgICB9KTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBmaWx0ZXJBcHBseVNlcmlhbGl6YXRpb25Db25maWdUb0NtcCh0aGlzLm1vZHVsZUNvbmZpZywgdGhpcy5zZXJpYWxpemF0aW9uQ2ZnKTtcblxuICAgICAgICBjb21iaW5lTGF0ZXN0KFt0b09ic2VydmFibGUodGhpcy5nZW5lcmljRmlsdGVyRGVzY3JpcHRvciksIHRvT2JzZXJ2YWJsZSh0aGlzLiN0cmFuc2xhdGlvbk9ic2VydmVyKV0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKFtnZW5lcmljRmlsdGVyRGVzY3JpcHRvcl0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyaWNGaWx0ZXJEZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhUHJvdmlkZXIgPSB0aGlzLmdlbmVyaWNGaWx0ZXJEZXNjcmlwdG9yKCk/LnByb3BlcnR5TG9va3VwO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2VuZXJpY0ZpbHRlclNlcnZpY2UgPSBkYXRhUHJvdmlkZXI/LnNlcnZpY2VUeXBlID8gdGhpcy4jaW5qZWN0b3IuZ2V0PGFueT4oZGF0YVByb3ZpZGVyLnNlcnZpY2VUeXBlKSA6IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZldGNoIGZpbHRlcmFibGUgcHJvcGVydGllc1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbW1vbnNUb09ic2VydmFibGUoZ2VuZXJpY0ZpbHRlckRlc2NyaXB0b3IucHJvcGVydHlMb29rdXAubG9va3VwKHt9LCBnZW5lcmljRmlsdGVyU2VydmljZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IGdlbmVyaWNGaWx0ZXJzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gc2V0IGRlc2NyaXB0b3JzIGZyb20gZ2VuZXJpYyBmaWx0ZXIgZGF0YVxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNnZW5lcmljRmlsdGVycy5zZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVGaWx0ZXJEZXNjcmlwdG9yc0Zyb21HZW5lcmljKGdlbmVyaWNGaWx0ZXJzLCB0aGlzLmdlbmVyaWNGaWx0ZXJEZXNjcmlwdG9yKCk/LnZhbHVlTG9va3VwKS5tYXAoZCA9PiB0aGlzLm1hcEZpbHRlckRlc2NyaXB0b3JUb01ldGFkYXRhKGQpKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRTaWduYWxTb3VyY2VzKGRlc2NyaXB0b3I6IFNpZ25hbDxUYWJsZURlc2NyaXB0b3JJbnN0PGFueSwgYW55Pj4sIHNlYXJjaEZpZWxkczogU2lnbmFsPHN0cmluZ1tdIHwgdW5kZWZpbmVkPikge1xuICAgICAgICB0aGlzLiNzaWduYWxTb3VyY2VzLnNldCh7ZGVzY3JpcHRvciwgc2VhcmNoRmllbGRzfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldERlc2NyaXB0b3IoZGVzY3JpcHRvcjogVGFibGVEZXNjcmlwdG9ySW5zdDxhbnksIGFueSwgYW55Pikge1xuICAgICAgICBpZiAodGhpcy5kZXNjcmlwdG9yRnJvbVNvdXJjZSgpIGluc3RhbmNlb2YgVGFibGVEeW5hbWljRGVzY3JpcHRvckluc3QpIHtcbiAgICAgICAgICAgIHRoaXMuI2Rlc2NyaXB0b3Iuc2V0KGRlc2NyaXB0b3IpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYXBGaWx0ZXJEZXNjcmlwdG9yVG9NZXRhZGF0YShkZXNjcmlwdG9yOiBGaWx0ZXJEZXNjcmlwdG9yPGFueSwgYW55Pik6IEZpbHRlckNvbmZpZyB7XG4gICAgICAgIGNvbnN0IG1hdGNoTW9kZXMgPSBmaWx0ZXJHZW5lcmF0ZU1hdGNoTW9kZU9wdGlvbnModGhpcy5wcmltZUNvbmZpZywgZGVzY3JpcHRvciwgdGhpcy5zZXJpYWxpemF0aW9uQ2ZnKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRlc2NyaXB0b3I6IGRlc2NyaXB0b3IsXG4gICAgICAgICAgICBtYXRjaE1vZGVzOiBtYXRjaE1vZGVzLFxuICAgICAgICAgICAgZGVmYXVsdE1hdGNoTW9kZTogZmlsdGVyR2V0RGVmYXVsdE1hdGNoTW9kZShkZXNjcmlwdG9yLCBtYXRjaE1vZGVzKSxcbiAgICAgICAgICAgIGRhdGVDb25maWc6IGZpbHRlckdldERhdGVDb25maWcoZGVzY3JpcHRvciwgdGhpcy5zZXJpYWxpemF0aW9uQ2ZnKSxcbiAgICAgICAgICAgIG51bWJlckNvbmZpZzogZmlsdGVyR2V0TnVtYmVyQ29uZmlnKGRlc2NyaXB0b3IpXG4gICAgICAgIH07XG4gICAgfVxufVxuIl19","export function tableCreateFilterMeta(paramsWithDefaults) {\n const primeFilterMeta = {};\n // if any filter is present, no default filters should be applied!\n if (paramsWithDefaults?.filters) {\n Object.entries(paramsWithDefaults.filters).forEach(([key, value]) => {\n primeFilterMeta[key] = {\n value: value?.value,\n matchMode: value?.matchMode,\n caseSensitive: value?.caseSensitive\n };\n });\n }\n return primeFilterMeta;\n}\nexport function tableCreateSortMeta(paramsWithDefaults) {\n if (paramsWithDefaults?.sort !== undefined && Array.isArray(paramsWithDefaults?.sort) && paramsWithDefaults?.sort.length > 0) {\n return paramsWithDefaults?.sort.map(s => ({\n field: s.property,\n order: s.ascending ? 1 : -1\n }));\n }\n return undefined;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90YWJsZS9zcmMvaGVscGVycy90YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxNQUFNLFVBQVUscUJBQXFCLENBQUMsa0JBQW1DO0lBQ3JFLE1BQU0sZUFBZSxHQUErQixFQUFFLENBQUM7SUFDdkQsa0VBQWtFO0lBQ2xFLElBQUksa0JBQWtCLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDOUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQ2hFLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRztnQkFDbkIsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLO2dCQUNuQixTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVM7Z0JBQzNCLGFBQWEsRUFBRSxLQUFLLEVBQUUsYUFBYTthQUN0QyxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBQ0QsT0FBTyxlQUFlLENBQUM7QUFDM0IsQ0FBQztBQUVELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxrQkFBbUM7SUFDbkUsSUFBSSxrQkFBa0IsRUFBRSxJQUFJLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLElBQUksa0JBQWtCLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMzSCxPQUFPLGtCQUFrQixFQUFFLElBQUksQ0FBQyxHQUFHLENBQy9CLENBQUMsQ0FBQyxFQUFFLENBQ0EsQ0FBVTtZQUNOLEtBQUssRUFBRSxDQUFDLENBQUMsUUFBUTtZQUNqQixLQUFLLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDOUIsQ0FBQSxDQUNSLENBQUM7SUFDTixDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUM7QUFDckIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U29ydE1ldGF9IGZyb20gJ3ByaW1lbmcvYXBpJztcblxuaW1wb3J0IHtEYXRhTGlzdFBhcmFtcywgRmlsdGVyU3RhdGV9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWJsZUNyZWF0ZUZpbHRlck1ldGEocGFyYW1zV2l0aERlZmF1bHRzPzogRGF0YUxpc3RQYXJhbXMpIHtcbiAgICBjb25zdCBwcmltZUZpbHRlck1ldGE6IHtbczogc3RyaW5nXTogRmlsdGVyU3RhdGV9ID0ge307XG4gICAgLy8gaWYgYW55IGZpbHRlciBpcyBwcmVzZW50LCBubyBkZWZhdWx0IGZpbHRlcnMgc2hvdWxkIGJlIGFwcGxpZWQhXG4gICAgaWYgKHBhcmFtc1dpdGhEZWZhdWx0cz8uZmlsdGVycykge1xuICAgICAgICBPYmplY3QuZW50cmllcyhwYXJhbXNXaXRoRGVmYXVsdHMuZmlsdGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICBwcmltZUZpbHRlck1ldGFba2V5XSA9IHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWU/LnZhbHVlLFxuICAgICAgICAgICAgICAgIG1hdGNoTW9kZTogdmFsdWU/Lm1hdGNoTW9kZSxcbiAgICAgICAgICAgICAgICBjYXNlU2Vuc2l0aXZlOiB2YWx1ZT8uY2FzZVNlbnNpdGl2ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBwcmltZUZpbHRlck1ldGE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWJsZUNyZWF0ZVNvcnRNZXRhKHBhcmFtc1dpdGhEZWZhdWx0cz86IERhdGFMaXN0UGFyYW1zKTogU29ydE1ldGFbXSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHBhcmFtc1dpdGhEZWZhdWx0cz8uc29ydCAhPT0gdW5kZWZpbmVkICYmIEFycmF5LmlzQXJyYXkocGFyYW1zV2l0aERlZmF1bHRzPy5zb3J0KSAmJiBwYXJhbXNXaXRoRGVmYXVsdHM/LnNvcnQubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gcGFyYW1zV2l0aERlZmF1bHRzPy5zb3J0Lm1hcChcbiAgICAgICAgICAgIHMgPT5cbiAgICAgICAgICAgICAgICA8U29ydE1ldGE+e1xuICAgICAgICAgICAgICAgICAgICBmaWVsZDogcy5wcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICAgICAgb3JkZXI6IHMuYXNjZW5kaW5nID8gMSA6IC0xXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG4iXX0=","import { Injectable, Injector, computed, inject, signal } from '@angular/core';\nimport { CommonsService, toObservable as commonsToObservable, effectWithDeps } from '@mediusinc/mng-commons/core';\nimport { TableDynamicDescriptorInst, TablePaginationModeEnum } from '@mediusinc/mng-commons/table/api';\nimport { tableCreateFilterMeta, tableCreateSortMeta } from '../helpers/table';\nimport { TableMetadataService } from './table-metadata.service';\nimport * as i0 from \"@angular/core\";\nexport class TableDataService {\n constructor() {\n this.#injector = inject(Injector);\n this.#commons = inject(CommonsService);\n this.#metadata = inject(TableMetadataService);\n // signal sources\n this.#dataSources = signal({}, ...(ngDevMode ? [{ debugName: \"#dataSources\" }] : []));\n // data sources\n this.#manualLoading = computed(() => this.#dataSources()?.manualLoading?.(), ...(ngDevMode ? [{ debugName: \"#manualLoading\" }] : []));\n // results that are set directly via input and are not result of a asynchronous operation (aka data provider)\n this.#synchronousResult = computed(() => {\n const dataSources = this.#dataSources();\n if (dataSources?.dataProvider?.() !== undefined) {\n return undefined;\n }\n if (dataSources?.dataListResult?.() !== undefined) {\n return dataSources?.dataListResult();\n }\n if (dataSources?.arrayItems?.() !== undefined) {\n return { data: dataSources.arrayItems(), totalCount: dataSources.arrayItems()?.length ?? 0 };\n }\n return undefined;\n }, ...(ngDevMode ? [{ debugName: \"#synchronousResult\" }] : []));\n this.#dataProvider = computed(() => this.#dataSources()?.dataProvider?.(), ...(ngDevMode ? [{ debugName: \"#dataProvider\" }] : []));\n this.#dataProviderService = computed(() => {\n const dataProvider = this.#dataProvider();\n return dataProvider?.serviceType ? this.#injector.get(dataProvider.serviceType) : null;\n }, ...(ngDevMode ? [{ debugName: \"#dataProviderService\" }] : []));\n this.#synchronousResultEffect = effectWithDeps([this.#synchronousResult], ([res]) => {\n if (res != null) {\n this.#setData(res.data ?? [], res.totalCount);\n }\n });\n this.#synchronousLoadingEffect = effectWithDeps([this.#synchronousResult, this.#manualLoading], ([res, manualLoading]) => {\n if (res != null && manualLoading == null) {\n this.#loading.set(false);\n }\n });\n this.#manualLoadingEffect = effectWithDeps([this.#manualLoading], ([manualLoading]) => {\n if (manualLoading != null) {\n this.#loading.set(manualLoading);\n }\n });\n // pagination\n this.#params = signal(undefined, ...(ngDevMode ? [{ debugName: \"#params\" }] : []));\n this.params = this.#params.asReadonly();\n this.#sortMeta = signal(undefined, ...(ngDevMode ? [{ debugName: \"#sortMeta\" }] : []));\n this.sortMeta = this.#sortMeta.asReadonly();\n this.#filterStates = signal({}, ...(ngDevMode ? [{ debugName: \"#filterStates\" }] : []));\n this.filterStates = this.#filterStates.asReadonly();\n this.#isSortAndFilterMetaInitialized = signal(false, ...(ngDevMode ? [{ debugName: \"#isSortAndFilterMetaInitialized\" }] : []));\n this.#defaultParamsEffect = effectWithDeps([this.#metadata.defaultParams], ([defaultParams]) => {\n this.#sortMeta.set(tableCreateSortMeta(defaultParams));\n this.#filterStates.set(tableCreateFilterMeta(defaultParams));\n this.#isSortAndFilterMetaInitialized.set(true);\n }, { firstOnly: true });\n this.#isSearchMetaInitialized = signal(false, ...(ngDevMode ? [{ debugName: \"#isSearchMetaInitialized\" }] : []));\n this.#searchMeta = signal(undefined, ...(ngDevMode ? [{ debugName: \"#searchMeta\" }] : []));\n this.searchMeta = this.#searchMeta.asReadonly();\n this.isAllPaginationMetaInitialized = computed(() => this.#isSortAndFilterMetaInitialized() && this.#isSortAndFilterMetaInitialized(), ...(ngDevMode ? [{ debugName: \"isAllPaginationMetaInitialized\" }] : []));\n this.paginationMode = computed(() => {\n const descriptor = this.#metadata.descriptor();\n if (descriptor.paginationMode != null) {\n // descriptor choice is the strongest - if defined, use this value\n return descriptor.paginationMode;\n }\n else if (this.#dataProvider() != null) {\n // when data provider is used, use pagination\n return TablePaginationModeEnum.Pagination;\n }\n else {\n return TablePaginationModeEnum.None;\n }\n }, ...(ngDevMode ? [{ debugName: \"paginationMode\" }] : []));\n this.offset = computed(() => this.params()?.offset ?? 0, ...(ngDevMode ? [{ debugName: \"offset\" }] : []));\n this.rows = computed(() => {\n if (this.params()?.limit) {\n return this.params()?.limit;\n }\n const descriptor = this.#metadata.descriptor();\n const rowsPerPageOptions = this.#metadata.rowsPerPageOptions();\n if (descriptor.defaultNumRows && rowsPerPageOptions.includes(descriptor.defaultNumRows)) {\n return descriptor.defaultNumRows;\n }\n return rowsPerPageOptions[0];\n }, ...(ngDevMode ? [{ debugName: \"rows\" }] : []));\n // data\n this.#data = signal([], ...(ngDevMode ? [{ debugName: \"#data\" }] : []));\n this.data = this.#data.asReadonly();\n this.#count = signal(0, ...(ngDevMode ? [{ debugName: \"#count\" }] : []));\n this.count = this.#count.asReadonly();\n this.#loading = signal(false, ...(ngDevMode ? [{ debugName: \"#loading\" }] : []));\n this.loading = this.#loading.asReadonly();\n this.selectedItems = signal([], ...(ngDevMode ? [{ debugName: \"selectedItems\" }] : []));\n }\n #injector;\n #commons;\n #metadata;\n #primeTable;\n // signal sources\n #dataSources;\n // data sources\n #manualLoading;\n // results that are set directly via input and are not result of a asynchronous operation (aka data provider)\n #synchronousResult;\n #dataProvider;\n #dataProviderService;\n #synchronousResultEffect;\n #synchronousLoadingEffect;\n #manualLoadingEffect;\n #dataProviderSubscription;\n // pagination\n #params;\n #sortMeta;\n #filterStates;\n #isSortAndFilterMetaInitialized;\n #defaultParamsEffect;\n #isSearchMetaInitialized;\n #searchMeta;\n // data\n #data;\n #count;\n #loading;\n setDataSources(arrayItems, dataListResult, dataProvider, manualLoading) {\n this.#dataSources.set({ arrayItems, dataListResult, dataProvider, manualLoading });\n }\n setPrimeTable(cmp) {\n this.#primeTable = cmp;\n }\n fetchWithDataProvider(params, onErrorFn) {\n const dataProvider = this.#dataProvider();\n if (!dataProvider || params.limit === 0) {\n return false;\n }\n this.#dataProviderSubscription?.unsubscribe();\n this.#loading.set(true);\n this.#dataProviderSubscription = commonsToObservable(dataProvider.getAll(params, this.#dataProviderService(), this.#metadata.descriptor().isLocalized ? (this.#commons.appDataLocale() ?? undefined) : undefined)).subscribe({\n next: res => {\n const descriptorInput = this.#metadata.descriptorFromSource();\n if (descriptorInput instanceof TableDynamicDescriptorInst) {\n this.#metadata.setDescriptor(descriptorInput.toTableDescriptorFromData(res));\n }\n this.#setData(res?.data ?? [], res?.totalCount);\n this.#loading.set(false);\n },\n error: err => {\n onErrorFn(err);\n this.#setData([]);\n this.#loading.set(false);\n }\n });\n return true;\n }\n setParams(params, fromQueryParams = false) {\n if (!fromQueryParams && this.compareWithCurrentParams(params)) {\n return;\n }\n this.#params.set(params);\n this.#sortMeta.set(tableCreateSortMeta(params));\n this.#filterStates.set(tableCreateFilterMeta(params));\n this.#isSortAndFilterMetaInitialized.set(true);\n if (fromQueryParams && !this.#isSearchMetaInitialized() && params?.search) {\n this.#searchMeta.set({ value: params.search, caseSensitive: params.filters?.['global']?.caseSensitive ?? false });\n }\n this.#isSearchMetaInitialized.set(true);\n }\n /**\n * Updates primeNG component with new filters and triggers data reload (if lazy load) or inline filtering.\n * @param key Filter's key\n * @param filter Filter's metadata\n */\n updatePrimeFilter(key, filter) {\n if (this.#primeTable) {\n this.#primeTable.filters[key] = { ...filter };\n this.#primeTable._filter();\n }\n }\n /**\n * Compare the given params with the stored params in the DataListService.\n *\n * @param {DataListParams} params - The params to compare with the stored params.\n *\n * @return {boolean} - True if the given params match the stored params, otherwise false.\n */\n compareWithCurrentParams(params) {\n return (params.offset === this.offset() &&\n params.limit === this.rows() &&\n JSON.stringify(tableCreateSortMeta(params)) === JSON.stringify(this.#sortMeta()) &&\n JSON.stringify(tableCreateFilterMeta(params)) === JSON.stringify(this.#filterStates()));\n }\n #setData(data, count) {\n this.#data.set([...data]);\n this.#count.set(count ?? data.length);\n }\n ngOnDestroy() {\n this.#dataProviderSubscription?.unsubscribe();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TableDataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TableDataService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TableDataService, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtZGF0YS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGFibGUvc3JjL3NlcnZpY2VzL3RhYmxlLWRhdGEuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLFFBQVEsRUFBcUIsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFNaEcsT0FBTyxFQUFDLGNBQWMsRUFBK0MsWUFBWSxJQUFJLG1CQUFtQixFQUFFLGNBQWMsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQzdKLE9BQU8sRUFBcUIsMEJBQTBCLEVBQUUsdUJBQXVCLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUV6SCxPQUFPLEVBQUMscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUM1RSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQzs7QUFVOUQsTUFBTSxPQUFPLGdCQUFnQjtJQUQ3QjtRQUVhLGNBQVMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0IsYUFBUSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNsQyxjQUFTLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFJbEQsaUJBQWlCO1FBQ1IsaUJBQVksR0FBRyxNQUFNLENBQW9CLEVBQUUsd0RBQUMsQ0FBQztRQUV0RCxlQUFlO1FBQ04sbUJBQWMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLGFBQWEsRUFBRSxFQUFFLDBEQUFDLENBQUM7UUFDakYsNkdBQTZHO1FBQ3BHLHVCQUFrQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDeEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3hDLElBQUksV0FBVyxFQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQzlDLE9BQU8sU0FBUyxDQUFDO1lBQ3JCLENBQUM7WUFDRCxJQUFJLFdBQVcsRUFBRSxjQUFjLEVBQUUsRUFBRSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUNoRCxPQUFPLFdBQVcsRUFBRSxjQUFjLEVBQUUsQ0FBQztZQUN6QyxDQUFDO1lBQ0QsSUFBSSxXQUFXLEVBQUUsVUFBVSxFQUFFLEVBQUUsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDNUMsT0FBdUIsRUFBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRSxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxJQUFJLENBQUMsRUFBQyxDQUFDO1lBQy9HLENBQUM7WUFDRCxPQUFPLFNBQVMsQ0FBQztRQUNyQixDQUFDLDhEQUFDLENBQUM7UUFDTSxrQkFBYSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsWUFBWSxFQUFFLEVBQUUseURBQUMsQ0FBQztRQUN0RSx5QkFBb0IsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQzFDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMxQyxPQUFPLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFNLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ2hHLENBQUMsZ0VBQUMsQ0FBQztRQUNNLDZCQUF3QixHQUFHLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFO1lBQ3BGLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNkLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2xELENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNNLDhCQUF5QixHQUFHLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMsRUFBRSxFQUFFO1lBQ3pILElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxhQUFhLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdCLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNNLHlCQUFvQixHQUFHLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRTtZQUN0RixJQUFJLGFBQWEsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDckMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBR0gsYUFBYTtRQUNKLFlBQU8sR0FBRyxNQUFNLENBQTZCLFNBQVMsbURBQUMsQ0FBQztRQUN4RCxXQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNuQyxjQUFTLEdBQUcsTUFBTSxDQUF5QixTQUFTLHFEQUFDLENBQUM7UUFDdEQsYUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDdkMsa0JBQWEsR0FBRyxNQUFNLENBQThCLEVBQUUseURBQUMsQ0FBQztRQUN4RCxpQkFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDL0Msb0NBQStCLEdBQUcsTUFBTSxDQUFDLEtBQUssMkVBQUMsQ0FBQztRQUNoRCx5QkFBb0IsR0FBRyxjQUFjLENBQzFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFDOUIsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUU7WUFDaEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUN2RCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQzdELElBQUksQ0FBQywrQkFBK0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkQsQ0FBQyxFQUNELEVBQUMsU0FBUyxFQUFFLElBQUksRUFBQyxDQUNwQixDQUFDO1FBQ08sNkJBQXdCLEdBQUcsTUFBTSxDQUFDLEtBQUssb0VBQUMsQ0FBQztRQUN6QyxnQkFBVyxHQUFHLE1BQU0sQ0FBc0QsU0FBUyx1REFBQyxDQUFDO1FBQ3JGLGVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzNDLG1DQUE4QixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsK0JBQStCLEVBQUUsSUFBSSxJQUFJLENBQUMsK0JBQStCLEVBQUUsMEVBQUMsQ0FBQztRQUNsSSxtQkFBYyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDcEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMvQyxJQUFJLFVBQVUsQ0FBQyxjQUFjLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ3BDLGtFQUFrRTtnQkFDbEUsT0FBTyxVQUFVLENBQUMsY0FBYyxDQUFDO1lBQ3JDLENBQUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ3RDLDZDQUE2QztnQkFDN0MsT0FBTyx1QkFBdUIsQ0FBQyxVQUFVLENBQUM7WUFDOUMsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLE9BQU8sdUJBQXVCLENBQUMsSUFBSSxDQUFDO1lBQ3hDLENBQUM7UUFDTCxDQUFDLDBEQUFDLENBQUM7UUFDTSxXQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLElBQUksQ0FBQyxrREFBQyxDQUFDO1FBQ3BELFNBQUksR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQzFCLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDO2dCQUN2QixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxLQUFLLENBQUM7WUFDaEMsQ0FBQztZQUVELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDL0MsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDL0QsSUFBSSxVQUFVLENBQUMsY0FBYyxJQUFJLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztnQkFDdEYsT0FBTyxVQUFVLENBQUMsY0FBYyxDQUFDO1lBQ3JDLENBQUM7WUFFRCxPQUFPLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLENBQUMsZ0RBQUMsQ0FBQztRQUVILE9BQU87UUFDRSxVQUFLLEdBQUcsTUFBTSxDQUFTLEVBQUUsaURBQUMsQ0FBQztRQUMzQixTQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMvQixXQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsa0RBQUMsQ0FBQztRQUNuQixVQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNqQyxhQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUssb0RBQUMsQ0FBQztRQUN6QixZQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNyQyxrQkFBYSxHQUFHLE1BQU0sQ0FBUyxFQUFFLHlEQUFDLENBQUM7S0FvRy9DO0lBMU1ZLFNBQVMsQ0FBb0I7SUFDN0IsUUFBUSxDQUEwQjtJQUNsQyxTQUFTLENBQWdDO0lBRWxELFdBQVcsQ0FBUztJQUVwQixpQkFBaUI7SUFDUixZQUFZLENBQWlDO0lBRXRELGVBQWU7SUFDTixjQUFjLENBQTBEO0lBQ2pGLDZHQUE2RztJQUNwRyxrQkFBa0IsQ0FZeEI7SUFDTSxhQUFhLENBQXlEO0lBQ3RFLG9CQUFvQixDQUcxQjtJQUNNLHdCQUF3QixDQUk5QjtJQUNNLHlCQUF5QixDQUkvQjtJQUNNLG9CQUFvQixDQUkxQjtJQUNILHlCQUF5QixDQUFnQjtJQUV6QyxhQUFhO0lBQ0osT0FBTyxDQUFpRDtJQUV4RCxTQUFTLENBQTZDO0lBRXRELGFBQWEsQ0FBMkM7SUFFeEQsK0JBQStCLENBQWlCO0lBQ2hELG9CQUFvQixDQVEzQjtJQUNPLHdCQUF3QixDQUFpQjtJQUN6QyxXQUFXLENBQTBFO0lBOEI5RixPQUFPO0lBQ0UsS0FBSyxDQUFzQjtJQUUzQixNQUFNLENBQWE7SUFFbkIsUUFBUSxDQUFpQjtJQUlsQyxjQUFjLENBQ1YsVUFBc0MsRUFDdEMsY0FBd0QsRUFDeEQsWUFBeUUsRUFDekUsYUFBMEM7UUFFMUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBQyxVQUFVLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUMsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFFRCxhQUFhLENBQUMsR0FBaUI7UUFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7SUFDM0IsQ0FBQztJQUVELHFCQUFxQixDQUFDLE1BQXNCLEVBQUUsU0FBaUM7UUFDM0UsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzFDLElBQUksQ0FBQyxZQUFZLElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN0QyxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO1FBRUQsSUFBSSxDQUFDLHlCQUF5QixFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQzlDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXhCLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxtQkFBbUIsQ0FDaEQsWUFBWSxDQUFDLE1BQU0sQ0FDZixNQUFrQyxFQUNsQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsRUFDM0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUNyRyxDQUNKLENBQUMsU0FBUyxDQUFDO1lBQ1IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFO2dCQUNSLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztnQkFDOUQsSUFBSSxlQUFlLFlBQVksMEJBQTBCLEVBQUUsQ0FBQztvQkFDeEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLHlCQUF5QixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pGLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdCLENBQUM7WUFDRCxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUU7Z0JBQ1QsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNmLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdCLENBQUM7U0FDSixDQUFDLENBQUM7UUFFSCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsU0FBUyxDQUFDLE1BQXNCLEVBQUUsZUFBZSxHQUFHLEtBQUs7UUFDckQsSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUM1RCxPQUFPO1FBQ1gsQ0FBQztRQUVELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsK0JBQStCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9DLElBQUksZUFBZSxJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLElBQUksTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ3hFLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxhQUFhLElBQUksS0FBSyxFQUFDLENBQUMsQ0FBQztRQUNwSCxDQUFDO1FBQ0QsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGlCQUFpQixDQUFDLEdBQVcsRUFBRSxNQUErQjtRQUMxRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFDLEdBQUcsTUFBTSxFQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMvQixDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNLLHdCQUF3QixDQUFDLE1BQXNCO1FBQ25ELE9BQU8sQ0FDSCxNQUFNLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDL0IsTUFBTSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQzVCLElBQUksQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNoRixJQUFJLENBQUMsU0FBUyxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FDekYsQ0FBQztJQUNOLENBQUM7SUFFRCxRQUFRLENBQUMsSUFBWSxFQUFFLEtBQWM7UUFDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUNsRCxDQUFDOzhHQTFNUSxnQkFBZ0I7a0hBQWhCLGdCQUFnQjs7MkZBQWhCLGdCQUFnQjtrQkFENUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgSW5qZWN0b3IsIE9uRGVzdHJveSwgU2lnbmFsLCBjb21wdXRlZCwgaW5qZWN0LCBzaWduYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1NvcnRNZXRhfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQge1RhYmxlfSBmcm9tICdwcmltZW5nL3RhYmxlJztcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtDb21tb25zU2VydmljZSwgRGF0YUxpc3RQYXJhbXMsIERhdGFMaXN0UmVzdWx0LCBGaWx0ZXJTdGF0ZSwgdG9PYnNlcnZhYmxlIGFzIGNvbW1vbnNUb09ic2VydmFibGUsIGVmZmVjdFdpdGhEZXBzfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuaW1wb3J0IHtJVGFibGVEYXRhUHJvdmlkZXIsIFRhYmxlRHluYW1pY0Rlc2NyaXB0b3JJbnN0LCBUYWJsZVBhZ2luYXRpb25Nb2RlRW51bX0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy90YWJsZS9hcGknO1xuXG5pbXBvcnQge3RhYmxlQ3JlYXRlRmlsdGVyTWV0YSwgdGFibGVDcmVhdGVTb3J0TWV0YX0gZnJvbSAnLi4vaGVscGVycy90YWJsZSc7XG5pbXBvcnQge1RhYmxlTWV0YWRhdGFTZXJ2aWNlfSBmcm9tICcuL3RhYmxlLW1ldGFkYXRhLnNlcnZpY2UnO1xuXG5pbnRlcmZhY2UgRGF0YVNvdXJjZXM8SXRlbSA9IGFueT4ge1xuICAgIGFycmF5SXRlbXM/OiBTaWduYWw8SXRlbVtdIHwgdW5kZWZpbmVkPjtcbiAgICBkYXRhTGlzdFJlc3VsdD86IFNpZ25hbDxEYXRhTGlzdFJlc3VsdDxJdGVtPiB8IHVuZGVmaW5lZD47XG4gICAgZGF0YVByb3ZpZGVyPzogU2lnbmFsPElUYWJsZURhdGFQcm92aWRlcjxJdGVtPiB8IHVuZGVmaW5lZD47XG4gICAgbWFudWFsTG9hZGluZz86IFNpZ25hbDxib29sZWFuIHwgdW5kZWZpbmVkPjtcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRhYmxlRGF0YVNlcnZpY2U8SXRlbT4gaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIHJlYWRvbmx5ICNpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gICAgcmVhZG9ubHkgI2NvbW1vbnMgPSBpbmplY3QoQ29tbW9uc1NlcnZpY2UpO1xuICAgIHJlYWRvbmx5ICNtZXRhZGF0YSA9IGluamVjdChUYWJsZU1ldGFkYXRhU2VydmljZSk7XG5cbiAgICAjcHJpbWVUYWJsZT86IFRhYmxlO1xuXG4gICAgLy8gc2lnbmFsIHNvdXJjZXNcbiAgICByZWFkb25seSAjZGF0YVNvdXJjZXMgPSBzaWduYWw8RGF0YVNvdXJjZXM8SXRlbT4+KHt9KTtcblxuICAgIC8vIGRhdGEgc291cmNlc1xuICAgIHJlYWRvbmx5ICNtYW51YWxMb2FkaW5nID0gY29tcHV0ZWQoKCkgPT4gdGhpcy4jZGF0YVNvdXJjZXMoKT8ubWFudWFsTG9hZGluZz8uKCkpO1xuICAgIC8vIHJlc3VsdHMgdGhhdCBhcmUgc2V0IGRpcmVjdGx5IHZpYSBpbnB1dCBhbmQgYXJlIG5vdCByZXN1bHQgb2YgYSBhc3luY2hyb25vdXMgb3BlcmF0aW9uIChha2EgZGF0YSBwcm92aWRlcilcbiAgICByZWFkb25seSAjc3luY2hyb25vdXNSZXN1bHQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGFTb3VyY2VzID0gdGhpcy4jZGF0YVNvdXJjZXMoKTtcbiAgICAgICAgaWYgKGRhdGFTb3VyY2VzPy5kYXRhUHJvdmlkZXI/LigpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGFTb3VyY2VzPy5kYXRhTGlzdFJlc3VsdD8uKCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGFTb3VyY2VzPy5kYXRhTGlzdFJlc3VsdCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhU291cmNlcz8uYXJyYXlJdGVtcz8uKCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIDxEYXRhTGlzdFJlc3VsdD57ZGF0YTogZGF0YVNvdXJjZXMuYXJyYXlJdGVtcygpLCB0b3RhbENvdW50OiBkYXRhU291cmNlcy5hcnJheUl0ZW1zKCk/Lmxlbmd0aCA/PyAwfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0pO1xuICAgIHJlYWRvbmx5ICNkYXRhUHJvdmlkZXIgPSBjb21wdXRlZCgoKSA9PiB0aGlzLiNkYXRhU291cmNlcygpPy5kYXRhUHJvdmlkZXI/LigpKTtcbiAgICByZWFkb25seSAjZGF0YVByb3ZpZGVyU2VydmljZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YVByb3ZpZGVyID0gdGhpcy4jZGF0YVByb3ZpZGVyKCk7XG4gICAgICAgIHJldHVybiBkYXRhUHJvdmlkZXI/LnNlcnZpY2VUeXBlID8gdGhpcy4jaW5qZWN0b3IuZ2V0PGFueT4oZGF0YVByb3ZpZGVyLnNlcnZpY2VUeXBlKSA6IG51bGw7XG4gICAgfSk7XG4gICAgcmVhZG9ubHkgI3N5bmNocm9ub3VzUmVzdWx0RWZmZWN0ID0gZWZmZWN0V2l0aERlcHMoW3RoaXMuI3N5bmNocm9ub3VzUmVzdWx0XSwgKFtyZXNdKSA9PiB7XG4gICAgICAgIGlmIChyZXMgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy4jc2V0RGF0YShyZXMuZGF0YSA/PyBbXSwgcmVzLnRvdGFsQ291bnQpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmVhZG9ubHkgI3N5bmNocm9ub3VzTG9hZGluZ0VmZmVjdCA9IGVmZmVjdFdpdGhEZXBzKFt0aGlzLiNzeW5jaHJvbm91c1Jlc3VsdCwgdGhpcy4jbWFudWFsTG9hZGluZ10sIChbcmVzLCBtYW51YWxMb2FkaW5nXSkgPT4ge1xuICAgICAgICBpZiAocmVzICE9IG51bGwgJiYgbWFudWFsTG9hZGluZyA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLiNsb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZWFkb25seSAjbWFudWFsTG9hZGluZ0VmZmVjdCA9IGVmZmVjdFdpdGhEZXBzKFt0aGlzLiNtYW51YWxMb2FkaW5nXSwgKFttYW51YWxMb2FkaW5nXSkgPT4ge1xuICAgICAgICBpZiAobWFudWFsTG9hZGluZyAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLiNsb2FkaW5nLnNldChtYW51YWxMb2FkaW5nKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgICNkYXRhUHJvdmlkZXJTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgICAvLyBwYWdpbmF0aW9uXG4gICAgcmVhZG9ubHkgI3BhcmFtcyA9IHNpZ25hbDxEYXRhTGlzdFBhcmFtcyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgICByZWFkb25seSBwYXJhbXMgPSB0aGlzLiNwYXJhbXMuYXNSZWFkb25seSgpO1xuICAgIHJlYWRvbmx5ICNzb3J0TWV0YSA9IHNpZ25hbDxTb3J0TWV0YVtdIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAgIHJlYWRvbmx5IHNvcnRNZXRhID0gdGhpcy4jc29ydE1ldGEuYXNSZWFkb25seSgpO1xuICAgIHJlYWRvbmx5ICNmaWx0ZXJTdGF0ZXMgPSBzaWduYWw8UmVjb3JkPHN0cmluZywgRmlsdGVyU3RhdGU+Pih7fSk7XG4gICAgcmVhZG9ubHkgZmlsdGVyU3RhdGVzID0gdGhpcy4jZmlsdGVyU3RhdGVzLmFzUmVhZG9ubHkoKTtcbiAgICByZWFkb25seSAjaXNTb3J0QW5kRmlsdGVyTWV0YUluaXRpYWxpemVkID0gc2lnbmFsKGZhbHNlKTtcbiAgICByZWFkb25seSAjZGVmYXVsdFBhcmFtc0VmZmVjdCA9IGVmZmVjdFdpdGhEZXBzKFxuICAgICAgICBbdGhpcy4jbWV0YWRhdGEuZGVmYXVsdFBhcmFtc10sXG4gICAgICAgIChbZGVmYXVsdFBhcmFtc10pID0+IHtcbiAgICAgICAgICAgIHRoaXMuI3NvcnRNZXRhLnNldCh0YWJsZUNyZWF0ZVNvcnRNZXRhKGRlZmF1bHRQYXJhbXMpKTtcbiAgICAgICAgICAgIHRoaXMuI2ZpbHRlclN0YXRlcy5zZXQodGFibGVDcmVhdGVGaWx0ZXJNZXRhKGRlZmF1bHRQYXJhbXMpKTtcbiAgICAgICAgICAgIHRoaXMuI2lzU29ydEFuZEZpbHRlck1ldGFJbml0aWFsaXplZC5zZXQodHJ1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHtmaXJzdE9ubHk6IHRydWV9XG4gICAgKTtcbiAgICByZWFkb25seSAjaXNTZWFyY2hNZXRhSW5pdGlhbGl6ZWQgPSBzaWduYWwoZmFsc2UpO1xuICAgIHJlYWRvbmx5ICNzZWFyY2hNZXRhID0gc2lnbmFsPHt2YWx1ZTogc3RyaW5nOyBjYXNlU2Vuc2l0aXZlOiBib29sZWFufSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgICByZWFkb25seSBzZWFyY2hNZXRhID0gdGhpcy4jc2VhcmNoTWV0YS5hc1JlYWRvbmx5KCk7XG4gICAgcmVhZG9ubHkgaXNBbGxQYWdpbmF0aW9uTWV0YUluaXRpYWxpemVkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy4jaXNTb3J0QW5kRmlsdGVyTWV0YUluaXRpYWxpemVkKCkgJiYgdGhpcy4jaXNTb3J0QW5kRmlsdGVyTWV0YUluaXRpYWxpemVkKCkpO1xuICAgIHJlYWRvbmx5IHBhZ2luYXRpb25Nb2RlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gdGhpcy4jbWV0YWRhdGEuZGVzY3JpcHRvcigpO1xuICAgICAgICBpZiAoZGVzY3JpcHRvci5wYWdpbmF0aW9uTW9kZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAvLyBkZXNjcmlwdG9yIGNob2ljZSBpcyB0aGUgc3Ryb25nZXN0IC0gaWYgZGVmaW5lZCwgdXNlIHRoaXMgdmFsdWVcbiAgICAgICAgICAgIHJldHVybiBkZXNjcmlwdG9yLnBhZ2luYXRpb25Nb2RlO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuI2RhdGFQcm92aWRlcigpICE9IG51bGwpIHtcbiAgICAgICAgICAgIC8vIHdoZW4gZGF0YSBwcm92aWRlciBpcyB1c2VkLCB1c2UgcGFnaW5hdGlvblxuICAgICAgICAgICAgcmV0dXJuIFRhYmxlUGFnaW5hdGlvbk1vZGVFbnVtLlBhZ2luYXRpb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gVGFibGVQYWdpbmF0aW9uTW9kZUVudW0uTm9uZTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJlYWRvbmx5IG9mZnNldCA9IGNvbXB1dGVkKCgpID0+IHRoaXMucGFyYW1zKCk/Lm9mZnNldCA/PyAwKTtcbiAgICByZWFkb25seSByb3dzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5wYXJhbXMoKT8ubGltaXQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmFtcygpPy5saW1pdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSB0aGlzLiNtZXRhZGF0YS5kZXNjcmlwdG9yKCk7XG4gICAgICAgIGNvbnN0IHJvd3NQZXJQYWdlT3B0aW9ucyA9IHRoaXMuI21ldGFkYXRhLnJvd3NQZXJQYWdlT3B0aW9ucygpO1xuICAgICAgICBpZiAoZGVzY3JpcHRvci5kZWZhdWx0TnVtUm93cyAmJiByb3dzUGVyUGFnZU9wdGlvbnMuaW5jbHVkZXMoZGVzY3JpcHRvci5kZWZhdWx0TnVtUm93cykpIHtcbiAgICAgICAgICAgIHJldHVybiBkZXNjcmlwdG9yLmRlZmF1bHROdW1Sb3dzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJvd3NQZXJQYWdlT3B0aW9uc1swXTtcbiAgICB9KTtcblxuICAgIC8vIGRhdGFcbiAgICByZWFkb25seSAjZGF0YSA9IHNpZ25hbDxJdGVtW10+KFtdKTtcbiAgICByZWFkb25seSBkYXRhID0gdGhpcy4jZGF0YS5hc1JlYWRvbmx5KCk7XG4gICAgcmVhZG9ubHkgI2NvdW50ID0gc2lnbmFsKDApO1xuICAgIHJlYWRvbmx5IGNvdW50ID0gdGhpcy4jY291bnQuYXNSZWFkb25seSgpO1xuICAgIHJlYWRvbmx5ICNsb2FkaW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgICByZWFkb25seSBsb2FkaW5nID0gdGhpcy4jbG9hZGluZy5hc1JlYWRvbmx5KCk7XG4gICAgcmVhZG9ubHkgc2VsZWN0ZWRJdGVtcyA9IHNpZ25hbDxJdGVtW10+KFtdKTtcblxuICAgIHNldERhdGFTb3VyY2VzKFxuICAgICAgICBhcnJheUl0ZW1zOiBTaWduYWw8SXRlbVtdIHwgdW5kZWZpbmVkPixcbiAgICAgICAgZGF0YUxpc3RSZXN1bHQ6IFNpZ25hbDxEYXRhTGlzdFJlc3VsdDxJdGVtPiB8IHVuZGVmaW5lZD4sXG4gICAgICAgIGRhdGFQcm92aWRlcjogU2lnbmFsPElUYWJsZURhdGFQcm92aWRlcjxJdGVtLCBhbnksIGFueSwgYW55PiB8IHVuZGVmaW5lZD4sXG4gICAgICAgIG1hbnVhbExvYWRpbmc6IFNpZ25hbDxib29sZWFuIHwgdW5kZWZpbmVkPlxuICAgICkge1xuICAgICAgICB0aGlzLiNkYXRhU291cmNlcy5zZXQoe2FycmF5SXRlbXMsIGRhdGFMaXN0UmVzdWx0LCBkYXRhUHJvdmlkZXIsIG1hbnVhbExvYWRpbmd9KTtcbiAgICB9XG5cbiAgICBzZXRQcmltZVRhYmxlKGNtcD86IFRhYmxlPEl0ZW0+KSB7XG4gICAgICAgIHRoaXMuI3ByaW1lVGFibGUgPSBjbXA7XG4gICAgfVxuXG4gICAgZmV0Y2hXaXRoRGF0YVByb3ZpZGVyKHBhcmFtczogRGF0YUxpc3RQYXJhbXMsIG9uRXJyb3JGbjogKGVycm9yOiBFcnJvcikgPT4gdm9pZCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBkYXRhUHJvdmlkZXIgPSB0aGlzLiNkYXRhUHJvdmlkZXIoKTtcbiAgICAgICAgaWYgKCFkYXRhUHJvdmlkZXIgfHwgcGFyYW1zLmxpbWl0ID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLiNkYXRhUHJvdmlkZXJTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuI2xvYWRpbmcuc2V0KHRydWUpO1xuXG4gICAgICAgIHRoaXMuI2RhdGFQcm92aWRlclN1YnNjcmlwdGlvbiA9IGNvbW1vbnNUb09ic2VydmFibGUoXG4gICAgICAgICAgICBkYXRhUHJvdmlkZXIuZ2V0QWxsKFxuICAgICAgICAgICAgICAgIHBhcmFtcyBhcyBEYXRhTGlzdFBhcmFtczxhbnksIGFueT4sXG4gICAgICAgICAgICAgICAgdGhpcy4jZGF0YVByb3ZpZGVyU2VydmljZSgpLFxuICAgICAgICAgICAgICAgIHRoaXMuI21ldGFkYXRhLmRlc2NyaXB0b3IoKS5pc0xvY2FsaXplZCA/ICh0aGlzLiNjb21tb25zLmFwcERhdGFMb2NhbGUoKSA/PyB1bmRlZmluZWQpIDogdW5kZWZpbmVkXG4gICAgICAgICAgICApXG4gICAgICAgICkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRvcklucHV0ID0gdGhpcy4jbWV0YWRhdGEuZGVzY3JpcHRvckZyb21Tb3VyY2UoKTtcbiAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvcklucHV0IGluc3RhbmNlb2YgVGFibGVEeW5hbWljRGVzY3JpcHRvckluc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jbWV0YWRhdGEuc2V0RGVzY3JpcHRvcihkZXNjcmlwdG9ySW5wdXQudG9UYWJsZURlc2NyaXB0b3JGcm9tRGF0YShyZXMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy4jc2V0RGF0YShyZXM/LmRhdGEgPz8gW10sIHJlcz8udG90YWxDb3VudCk7XG4gICAgICAgICAgICAgICAgdGhpcy4jbG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICAgICAgICAgIG9uRXJyb3JGbihlcnIpO1xuICAgICAgICAgICAgICAgIHRoaXMuI3NldERhdGEoW10pO1xuICAgICAgICAgICAgICAgIHRoaXMuI2xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgc2V0UGFyYW1zKHBhcmFtczogRGF0YUxpc3RQYXJhbXMsIGZyb21RdWVyeVBhcmFtcyA9IGZhbHNlKSB7XG4gICAgICAgIGlmICghZnJvbVF1ZXJ5UGFyYW1zICYmIHRoaXMuY29tcGFyZVdpdGhDdXJyZW50UGFyYW1zKHBhcmFtcykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuI3BhcmFtcy5zZXQocGFyYW1zKTtcbiAgICAgICAgdGhpcy4jc29ydE1ldGEuc2V0KHRhYmxlQ3JlYXRlU29ydE1ldGEocGFyYW1zKSk7XG4gICAgICAgIHRoaXMuI2ZpbHRlclN0YXRlcy5zZXQodGFibGVDcmVhdGVGaWx0ZXJNZXRhKHBhcmFtcykpO1xuICAgICAgICB0aGlzLiNpc1NvcnRBbmRGaWx0ZXJNZXRhSW5pdGlhbGl6ZWQuc2V0KHRydWUpO1xuICAgICAgICBpZiAoZnJvbVF1ZXJ5UGFyYW1zICYmICF0aGlzLiNpc1NlYXJjaE1ldGFJbml0aWFsaXplZCgpICYmIHBhcmFtcz8uc2VhcmNoKSB7XG4gICAgICAgICAgICB0aGlzLiNzZWFyY2hNZXRhLnNldCh7dmFsdWU6IHBhcmFtcy5zZWFyY2gsIGNhc2VTZW5zaXRpdmU6IHBhcmFtcy5maWx0ZXJzPy5bJ2dsb2JhbCddPy5jYXNlU2Vuc2l0aXZlID8/IGZhbHNlfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jaXNTZWFyY2hNZXRhSW5pdGlhbGl6ZWQuc2V0KHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgcHJpbWVORyBjb21wb25lbnQgd2l0aCBuZXcgZmlsdGVycyBhbmQgdHJpZ2dlcnMgZGF0YSByZWxvYWQgKGlmIGxhenkgbG9hZCkgb3IgaW5saW5lIGZpbHRlcmluZy5cbiAgICAgKiBAcGFyYW0ga2V5IEZpbHRlcidzIGtleVxuICAgICAqIEBwYXJhbSBmaWx0ZXIgRmlsdGVyJ3MgbWV0YWRhdGFcbiAgICAgKi9cbiAgICB1cGRhdGVQcmltZUZpbHRlcihrZXk6IHN0cmluZywgZmlsdGVyOiBGaWx0ZXJTdGF0ZSB8IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodGhpcy4jcHJpbWVUYWJsZSkge1xuICAgICAgICAgICAgdGhpcy4jcHJpbWVUYWJsZS5maWx0ZXJzW2tleV0gPSB7Li4uZmlsdGVyfTtcbiAgICAgICAgICAgIHRoaXMuI3ByaW1lVGFibGUuX2ZpbHRlcigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29tcGFyZSB0aGUgZ2l2ZW4gcGFyYW1zIHdpdGggdGhlIHN0b3JlZCBwYXJhbXMgaW4gdGhlIERhdGFMaXN0U2VydmljZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7RGF0YUxpc3RQYXJhbXN9IHBhcmFtcyAtIFRoZSBwYXJhbXMgdG8gY29tcGFyZSB3aXRoIHRoZSBzdG9yZWQgcGFyYW1zLlxuICAgICAqXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gLSBUcnVlIGlmIHRoZSBnaXZlbiBwYXJhbXMgbWF0Y2ggdGhlIHN0b3JlZCBwYXJhbXMsIG90aGVyd2lzZSBmYWxzZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIGNvbXBhcmVXaXRoQ3VycmVudFBhcmFtcyhwYXJhbXM6IERhdGFMaXN0UGFyYW1zKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBwYXJhbXMub2Zmc2V0ID09PSB0aGlzLm9mZnNldCgpICYmXG4gICAgICAgICAgICBwYXJhbXMubGltaXQgPT09IHRoaXMucm93cygpICYmXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh0YWJsZUNyZWF0ZVNvcnRNZXRhKHBhcmFtcykpID09PSBKU09OLnN0cmluZ2lmeSh0aGlzLiNzb3J0TWV0YSgpKSAmJlxuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGFibGVDcmVhdGVGaWx0ZXJNZXRhKHBhcmFtcykpID09PSBKU09OLnN0cmluZ2lmeSh0aGlzLiNmaWx0ZXJTdGF0ZXMoKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAjc2V0RGF0YShkYXRhOiBJdGVtW10sIGNvdW50PzogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuI2RhdGEuc2V0KFsuLi5kYXRhXSk7XG4gICAgICAgIHRoaXMuI2NvdW50LnNldChjb3VudCA/PyBkYXRhLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuI2RhdGFQcm92aWRlclN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB9XG59XG4iXX0=","import { Injectable, computed, inject, signal, untracked } from '@angular/core';\nimport { FilterMatchMode, effectWithDeps } from '@mediusinc/mng-commons/core';\nimport { FilterTypeEnum } from '@mediusinc/mng-commons/filter';\nimport { filterAdjustDisplayValueOnMatchModeChange, filterSetStateOnChange, filterSetStateOnDisplayChange, isFilterValueBlank } from '../../../helpers/filters';\nimport { TableDataService } from '../../../services/table-data.service';\nimport * as i0 from \"@angular/core\";\nexport class FilterService {\n #tableData;\n #config;\n #state;\n constructor() {\n this.#tableData = inject((TableDataService));\n this.#config = signal(undefined, ...(ngDevMode ? [{ debugName: \"#config\" }] : []));\n this.#state = signal(undefined, ...(ngDevMode ? [{ debugName: \"#state\" }] : []));\n this.state = this.#state.asReadonly();\n this.isActive = computed(() => this.state()?.matchMode === FilterMatchMode.Exists || this.state()?.matchMode === FilterMatchMode.DoesNotExist || !isFilterValueBlank(this.state()?.value), ...(ngDevMode ? [{ debugName: \"isActive\" }] : []));\n effectWithDeps([this.#config, this.state], ([config, state]) => {\n if (config == null) {\n return;\n }\n const currTableFilterState = this.#tableData.filterStates()?.[config.descriptor.property];\n if (currTableFilterState && (!state || state.value !== currTableFilterState.value || state.matchMode !== currTableFilterState.matchMode)) {\n this.setState(filterSetStateOnChange(currTableFilterState, currTableFilterState.matchMode, currTableFilterState.value, untracked(() => config.descriptor.filterType), untracked(() => config.dateConfig)));\n }\n });\n }\n setConfig(config) {\n this.#config.set(config);\n }\n setMatchMode(displayMatchMode) {\n const config = this.#config();\n if (this.state()?.displayMatchMode === displayMatchMode || config == null) {\n return;\n }\n this.setState(filterSetStateOnDisplayChange(this.state(), displayMatchMode, filterAdjustDisplayValueOnMatchModeChange(displayMatchMode, this.state()?.displayValue), config.descriptor.filterType, config.dateConfig));\n }\n toggleCaseSensitivity() {\n if (this.#config()?.descriptor.filterType === FilterTypeEnum.String) {\n this.setState({\n ...this.state(),\n caseSensitive: !(this.state()?.caseSensitive ?? false)\n });\n }\n }\n clear() {\n const currConfig = this.#config();\n if (currConfig == null) {\n return;\n }\n const config = { value: null, matchMode: currConfig.defaultMatchMode };\n // set internal filter constraint\n this.setState(filterSetStateOnChange(config, config?.matchMode, config?.value, currConfig.descriptor.filterType, currConfig.dateConfig));\n this.#tableData.updatePrimeFilter(currConfig.descriptor.property, config);\n }\n setDisplayValue(displayValue) {\n const config = this.#config();\n if (config == null) {\n return;\n }\n this.setState(filterSetStateOnDisplayChange(this.state(), this.state()?.displayMatchMode ?? config.defaultMatchMode, displayValue, config.descriptor.filterType, config.dateConfig));\n }\n setState(state) {\n const currentMetadata = this.#config();\n if (currentMetadata == null) {\n return;\n }\n if (state && !state.displayMatchMode)\n state.displayMatchMode = state.matchMode;\n if (state && !state.displayValue)\n state.displayValue = state.value;\n this.#state.set(state);\n this.#tableData.updatePrimeFilter(currentMetadata.descriptor.property, state);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: FilterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: FilterService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: FilterService, decorators: [{\n type: Injectable\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90YWJsZS9zcmMvY29tcG9uZW50cy9maWx0ZXIvZmlsdGVyL2ZpbHRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRTlFLE9BQU8sRUFBQyxlQUFlLEVBQTRDLGNBQWMsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ3RILE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUU3RCxPQUFPLEVBQUMseUNBQXlDLEVBQUUsc0JBQXNCLEVBQUUsNkJBQTZCLEVBQUUsa0JBQWtCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUU5SixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQzs7QUFHdEUsTUFBTSxPQUFPLGFBQWE7SUFDYixVQUFVLENBQWlDO0lBRTNDLE9BQU8sQ0FBK0M7SUFFdEQsTUFBTSxDQUE4QztJQU03RDtRQVZTLGVBQVUsR0FBRyxNQUFNLENBQUMsQ0FBQSxnQkFBcUIsQ0FBQSxDQUFDLENBQUM7UUFFM0MsWUFBTyxHQUFHLE1BQU0sQ0FBMkIsU0FBUyxtREFBQyxDQUFDO1FBRXRELFdBQU0sR0FBRyxNQUFNLENBQTBCLFNBQVMsa0RBQUMsQ0FBQztRQUNwRCxVQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNqQyxhQUFRLEdBQUcsUUFBUSxDQUN4QixHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsU0FBUyxLQUFLLGVBQWUsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLFNBQVMsS0FBSyxlQUFlLENBQUMsWUFBWSxJQUFJLENBQUMsa0JBQWtCLENB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Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBjb21wdXRlZCwgaW5qZWN0LCBzaWduYWwsIHVudHJhY2tlZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7RmlsdGVyTWF0Y2hNb2RlLCBGaWx0ZXJNYXRjaE1vZGVFeHRlbmRlZFR5cGUsIEZpbHRlclN0YXRlLCBlZmZlY3RXaXRoRGVwc30gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9jb3JlJztcbmltcG9ydCB7RmlsdGVyVHlwZUVudW19IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvZmlsdGVyJztcblxuaW1wb3J0IHtmaWx0ZXJBZGp1c3REaXNwbGF5VmFsdWVPbk1hdGNoTW9kZUNoYW5nZSwgZmlsdGVyU2V0U3RhdGVPbkNoYW5nZSwgZmlsdGVyU2V0U3RhdGVPbkRpc3BsYXlDaGFuZ2UsIGlzRmlsdGVyVmFsdWVCbGFua30gZnJvbSAnLi4vLi4vLi4vaGVscGVycy9maWx0ZXJzJztcbmltcG9ydCB7RmlsdGVyQ29uZmlnfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZmlsdGVyLm1vZGVsJztcbmltcG9ydCB7VGFibGVEYXRhU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdGFibGUtZGF0YS5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEZpbHRlclNlcnZpY2Uge1xuICAgIHJlYWRvbmx5ICN0YWJsZURhdGEgPSBpbmplY3QoVGFibGVEYXRhU2VydmljZTxhbnk+KTtcblxuICAgIHJlYWRvbmx5ICNjb25maWcgPSBzaWduYWw8RmlsdGVyQ29uZmlnIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gICAgcmVhZG9ubHkgI3N0YXRlID0gc2lnbmFsPEZpbHRlclN0YXRlIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAgIHJlYWRvbmx5IHN0YXRlID0gdGhpcy4jc3RhdGUuYXNSZWFkb25seSgpO1xuICAgIHJlYWRvbmx5IGlzQWN0aXZlID0gY29tcHV0ZWQoXG4gICAgICAgICgpID0+IHRoaXMuc3RhdGUoKT8ubWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuRXhpc3RzIHx8IHRoaXMuc3RhdGUoKT8ubWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuRG9lc05vdEV4aXN0IHx8ICFpc0ZpbHRlclZhbHVlQmxhbmsodGhpcy5zdGF0ZSgpPy52YWx1ZSlcbiAgICApO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGVmZmVjdFdpdGhEZXBzKFt0aGlzLiNjb25maWcsIHRoaXMuc3RhdGVdLCAoW2NvbmZpZywgc3RhdGVdKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29uZmlnID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGN1cnJUYWJsZUZpbHRlclN0YXRlID0gdGhpcy4jdGFibGVEYXRhLmZpbHRlclN0YXRlcygpPy5bY29uZmlnLmRlc2NyaXB0b3IucHJvcGVydHldO1xuICAgICAgICAgICAgaWYgKGN1cnJUYWJsZUZpbHRlclN0YXRlICYmICghc3RhdGUgfHwgc3RhdGUudmFsdWUgIT09IGN1cnJUYWJsZUZpbHRlclN0YXRlLnZhbHVlIHx8IHN0YXRlLm1hdGNoTW9kZSAhPT0gY3VyclRhYmxlRmlsdGVyU3RhdGUubWF0Y2hNb2RlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlclNldFN0YXRlT25DaGFuZ2UoXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyVGFibGVGaWx0ZXJTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJUYWJsZUZpbHRlclN0YXRlLm1hdGNoTW9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJUYWJsZUZpbHRlclN0YXRlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdW50cmFja2VkKCgpID0+IGNvbmZpZy5kZXNjcmlwdG9yLmZpbHRlclR5cGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdW50cmFja2VkKCgpID0+IGNvbmZpZy5kYXRlQ29uZmlnKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2V0Q29uZmlnKGNvbmZpZzogRmlsdGVyQ29uZmlnKSB7XG4gICAgICAgIHRoaXMuI2NvbmZpZy5zZXQoY29uZmlnKTtcbiAgICB9XG5cbiAgICBzZXRNYXRjaE1vZGUoZGlzcGxheU1hdGNoTW9kZTogRmlsdGVyTWF0Y2hNb2RlRXh0ZW5kZWRUeXBlKSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuI2NvbmZpZygpO1xuICAgICAgICBpZiAodGhpcy5zdGF0ZSgpPy5kaXNwbGF5TWF0Y2hNb2RlID09PSBkaXNwbGF5TWF0Y2hNb2RlIHx8IGNvbmZpZyA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICAgICAgZmlsdGVyU2V0U3RhdGVPbkRpc3BsYXlDaGFuZ2UoXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSgpLFxuICAgICAgICAgICAgICAgIGRpc3BsYXlNYXRjaE1vZGUsXG4gICAgICAgICAgICAgICAgZmlsdGVyQWRqdXN0RGlzcGxheVZhbHVlT25NYXRjaE1vZGVDaGFuZ2UoZGlzcGxheU1hdGNoTW9kZSwgdGhpcy5zdGF0ZSgpPy5kaXNwbGF5VmFsdWUpLFxuICAgICAgICAgICAgICAgIGNvbmZpZy5kZXNjcmlwdG9yLmZpbHRlclR5cGUsXG4gICAgICAgICAgICAgICAgY29uZmlnLmRhdGVDb25maWdcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICB0b2dnbGVDYXNlU2Vuc2l0aXZpdHkoKSB7XG4gICAgICAgIGlmICh0aGlzLiNjb25maWcoKT8uZGVzY3JpcHRvci5maWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlRW51bS5TdHJpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuc3RhdGUoKSxcbiAgICAgICAgICAgICAgICBjYXNlU2Vuc2l0aXZlOiAhKHRoaXMuc3RhdGUoKT8uY2FzZVNlbnNpdGl2ZSA/PyBmYWxzZSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xlYXIoKSB7XG4gICAgICAgIGNvbnN0IGN1cnJDb25maWcgPSB0aGlzLiNjb25maWcoKTtcbiAgICAgICAgaWYgKGN1cnJDb25maWcgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29uZmlnID0ge3ZhbHVlOiBudWxsLCBtYXRjaE1vZGU6IGN1cnJDb25maWcuZGVmYXVsdE1hdGNoTW9kZX07XG5cbiAgICAgICAgLy8gc2V0IGludGVybmFsIGZpbHRlciBjb25zdHJhaW50XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoZmlsdGVyU2V0U3RhdGVPbkNoYW5nZShjb25maWcsIGNvbmZpZz8ubWF0Y2hNb2RlLCBjb25maWc/LnZhbHVlLCBjdXJyQ29uZmlnLmRlc2NyaXB0b3IuZmlsdGVyVHlwZSwgY3VyckNvbmZpZy5kYXRlQ29uZmlnKSk7XG4gICAgICAgIHRoaXMuI3RhYmxlRGF0YS51cGRhdGVQcmltZUZpbHRlcihjdXJyQ29uZmlnLmRlc2NyaXB0b3IucHJvcGVydHksIGNvbmZpZyk7XG4gICAgfVxuXG4gICAgc2V0RGlzcGxheVZhbHVlKGRpc3BsYXlWYWx1ZTogYW55KSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuI2NvbmZpZygpO1xuICAgICAgICBpZiAoY29uZmlnID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgICAgICBmaWx0ZXJTZXRTdGF0ZU9uRGlzcGxheUNoYW5nZSh0aGlzLnN0YXRlKCksIHRoaXMuc3RhdGUoKT8uZGlzcGxheU1hdGNoTW9kZSA/PyBjb25maWcuZGVmYXVsdE1hdGNoTW9kZSwgZGlzcGxheVZhbHVlLCBjb25maWcuZGVzY3JpcHRvci5maWx0ZXJUeXBlLCBjb25maWcuZGF0ZUNvbmZpZylcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBzZXRTdGF0ZShzdGF0ZT86IEZpbHRlclN0YXRlKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRNZXRhZGF0YSA9IHRoaXMuI2NvbmZpZygpO1xuICAgICAgICBpZiAoY3VycmVudE1ldGFkYXRhID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGF0ZSAmJiAhc3RhdGUuZGlzcGxheU1hdGNoTW9kZSkgc3RhdGUuZGlzcGxheU1hdGNoTW9kZSA9IHN0YXRlLm1hdGNoTW9kZTtcbiAgICAgICAgaWYgKHN0YXRlICYmICFzdGF0ZS5kaXNwbGF5VmFsdWUpIHN0YXRlLmRpc3BsYXlWYWx1ZSA9IHN0YXRlLnZhbHVlO1xuICAgICAgICB0aGlzLiNzdGF0ZS5zZXQoc3RhdGUpO1xuICAgICAgICB0aGlzLiN0YWJsZURhdGEudXBkYXRlUHJpbWVGaWx0ZXIoY3VycmVudE1ldGFkYXRhLmRlc2NyaXB0b3IucHJvcGVydHksIHN0YXRlKTtcbiAgICB9XG59XG4iXX0=","import { animate, style, transition, trigger } from '@angular/animations';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, Renderer2, ViewEncapsulation, booleanAttribute, computed, inject, input, signal, viewChild } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { OverlayService, TranslationKeys } from 'primeng/api';\nimport { DatePicker } from 'primeng/datepicker';\nimport { ConnectedOverlayScrollHandler, DomHandler } from 'primeng/dom';\nimport { InputGroup } from 'primeng/inputgroup';\nimport { InputGroupAddon } from 'primeng/inputgroupaddon';\nimport { InputNumber } from 'primeng/inputnumber';\nimport { InputText } from 'primeng/inputtext';\nimport { TableModule } from 'primeng/table';\nimport { ToggleSwitch } from 'primeng/toggleswitch';\nimport { ZIndexUtils } from 'primeng/utils';\nimport { Subject, debounceTime, distinctUntilChanged } from 'rxjs';\nimport { FilterMatchMode, RerenderDirective, effectWithDeps, getI18nTypePropertyKey } from '@mediusinc/mng-commons/core';\nimport { FilterLookupDescriptor, FilterLookupTypeEnum, FilterTypeEnum } from '@mediusinc/mng-commons/filter';\nimport { AutocompleteComponent, AutocompleteTemplateDirective, DateRangeComponent, DateRangeTemplateDirective, DropdownComponent, DropdownTemplateDirective, InputTrimDirective, NumberRangeComponent, NumberRangeTemplateDirective } from '@mediusinc/mng-commons/form';\nimport { TableMetadataService } from '../../../services/table-metadata.service';\nimport { FilterService } from './filter.service';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/forms\";\n/**\n * Cannot be on push change detection strategy because of filter updates triggered from route which causes to force update values in force metadata\n * and these must be propagated through to this component and beyond to primeNG.\n */\nexport class TableFilterComponent {\n #el;\n #renderer;\n #overlayService;\n #cd;\n #tableMetadata;\n #document;\n #window;\n #overlaySubscription;\n #overlay;\n #scrollHandler;\n #documentClickListener;\n #documentResizeListener;\n #resetSubscription;\n #selfClick;\n #overlayEventListener;\n #numericValueFromModelChange;\n #dateDebounceSubject;\n constructor() {\n this.lookupTypeDropdown = FilterLookupTypeEnum.Dropdown;\n this.lookupTypeAutocomplete = FilterLookupTypeEnum.Autocomplete;\n this.FilterTypeEnum = FilterTypeEnum;\n this.FilterMatchMode = FilterMatchMode;\n this.#el = inject(ElementRef);\n this.#renderer = inject(Renderer2);\n this.#overlayService = inject(OverlayService);\n this.#cd = inject(ChangeDetectorRef);\n this.#tableMetadata = inject(TableMetadataService);\n this.filter = inject(FilterService);\n this.#document = window.document;\n this.#window = this.#document.defaultView;\n this.config = input.required(...(ngDevMode ? [{ debugName: \"config\" }] : []));\n this.model = input.required(...(ngDevMode ? [{ debugName: \"model\" }] : []));\n this.showFilterIcon = input(false, ...(ngDevMode ? [{ debugName: \"showFilterIcon\", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));\n this.showTitleAsPlaceholder = input(false, ...(ngDevMode ? [{ debugName: \"showTitleAsPlaceholder\", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));\n this.descriptorAsLookup = computed(() => this.config().descriptor instanceof FilterLookupDescriptor ? this.config().descriptor : undefined, ...(ngDevMode ? [{ debugName: \"descriptorAsLookup\" }] : []));\n this.icon = viewChild('icon', ...(ngDevMode ? [{ debugName: \"icon\" }] : []));\n this.matchModes = computed(() => this.config().matchModes, ...(ngDevMode ? [{ debugName: \"matchModes\" }] : []));\n this.isInputDisabled = computed(() => this.filter.state()?.matchMode === FilterMatchMode.Exists || this.filter.state()?.matchMode === FilterMatchMode.DoesNotExist, ...(ngDevMode ? [{ debugName: \"isInputDisabled\" }] : []));\n this.overlayVisible = signal(false, ...(ngDevMode ? [{ debugName: \"overlayVisible\" }] : []));\n // display configs\n this.isMultiselect = computed(() => {\n const ft = this.filter.state();\n const matchMode = ft?.displayMatchMode ?? this.config().defaultMatchMode;\n return (matchMode === FilterMatchMode.In || matchMode === FilterMatchMode.NotIn) && (ft?.displayValue == null || Array.isArray(ft.displayValue));\n }, ...(ngDevMode ? [{ debugName: \"isMultiselect\" }] : []));\n this.placeholderKey = computed(() => {\n const descriptor = this.config().descriptor;\n let defaultPlaceholderKey = 'mngTable.typeToFilter';\n const descriptorAsLookup = this.descriptorAsLookup();\n if (descriptorAsLookup) {\n if (descriptorAsLookup.lookupType === FilterLookupTypeEnum.Autocomplete) {\n defaultPlaceholderKey = 'mngTable.searchToFilter';\n }\n else if (descriptorAsLookup.lookupType === FilterLookupTypeEnum.Dropdown) {\n defaultPlaceholderKey = 'mngTable.selectToFilter';\n }\n }\n else if (descriptor.filterType === FilterTypeEnum.Boolean) {\n defaultPlaceholderKey = 'mngTable.selectToFilter';\n }\n return this.showTitleAsPlaceholder() ? this.#getPropertyLabelKey(this.config().descriptor) : defaultPlaceholderKey;\n }, ...(ngDevMode ? [{ debugName: \"placeholderKey\" }] : []));\n this.booleanOptions = [\n { label: 'general.yes', value: true },\n { label: 'general.no', value: false }\n ];\n this.#numericValueFromModelChange = null;\n this.#dateDebounceSubject = new Subject();\n this.noFilterLabel = signal(this.#tableMetadata.primeConfig.getTranslation(TranslationKeys.NO_FILTER), ...(ngDevMode ? [{ debugName: \"noFilterLabel\" }] : []));\n effectWithDeps([this.config], ([config]) => {\n this.filter.setConfig(config);\n });\n this.#dateDebounceSubject.pipe(debounceTime(500), distinctUntilChanged(), takeUntilDestroyed()).subscribe(v => this.filter.setDisplayValue(v));\n }\n ngOnDestroy() {\n if (this.#overlay) {\n this.#renderer.appendChild(this.#el.nativeElement, this.#overlay);\n ZIndexUtils.clear(this.#overlay);\n this.#onOverlayHide();\n }\n this.#resetSubscription?.unsubscribe();\n this.#overlaySubscription?.unsubscribe();\n }\n onTextModelChange(event) {\n const value = event.target.value;\n if (value === '') {\n this.filter.setDisplayValue(value);\n }\n }\n onTextInputEnterKeyDown(event) {\n const value = event.target.value;\n this.filter.setDisplayValue(value);\n event.preventDefault();\n }\n onNumericModelChange(value) {\n this.#numericValueFromModelChange = value;\n if (value === null) {\n this.filter.setDisplayValue(value);\n }\n }\n onNumericInputKeyDown(event) {\n if (event.key === 'Enter') {\n if (this.filter.state()?.displayMatchMode === FilterMatchMode.Between && Array.isArray(this.#numericValueFromModelChange)) {\n const numberValues = this.#numericValueFromModelChange.filter(v => typeof v === 'number');\n if (numberValues.length !== 2) {\n return;\n }\n }\n this.filter.setDisplayValue(this.#numericValueFromModelChange);\n event.preventDefault();\n }\n }\n onDateFilterModelChange(value) {\n if (this.filter.state()?.displayMatchMode === FilterMatchMode.Between && Array.isArray(value)) {\n const dateValues = value.filter(v => v instanceof Date);\n if (dateValues.length !== 2) {\n return;\n }\n }\n this.#dateDebounceSubject.next(value);\n }\n booleanFilter(value) {\n this.filter.setDisplayValue(value);\n }\n autocompleteFilter(value) {\n this.filter.setDisplayValue(value);\n }\n dropdownFilter(value) {\n this.filter.setDisplayValue(value);\n }\n onMatchModeChange(displayMatchMode) {\n this.filter.setMatchMode(displayMatchMode);\n this.#hideOverlay();\n }\n onMatchModeKeyDown(event) {\n const item = event.target;\n switch (event.key) {\n case 'ArrowDown':\n // eslint-disable-next-line no-case-declarations\n const nextItem = this.#findNextMenuModeItem(item);\n if (nextItem) {\n item.removeAttribute('tabindex');\n nextItem.tabIndex = '0';\n nextItem.focus();\n }\n event.preventDefault();\n break;\n case 'ArrowUp':\n // eslint-disable-next-line no-case-declarations\n const prevItem = this.#findPrevMenuModeItem(item);\n if (prevItem) {\n item.removeAttribute('tabindex');\n prevItem.tabIndex = '0';\n prevItem.focus();\n }\n event.preventDefault();\n break;\n }\n }\n onCaseSensitivityToggle() {\n this.filter.toggleCaseSensitivity();\n }\n clear() {\n this.filter.clear();\n this.#hideOverlay();\n }\n toggleMenu(event) {\n this.overlayVisible.set(!this.overlayVisible());\n event.stopPropagation();\n }\n onToggleButtonKeyDown(event) {\n switch (event.key) {\n case 'Escape':\n case 'Tab':\n this.overlayVisible.set(false);\n break;\n case 'ArrowDown':\n if (this.overlayVisible()) {\n const focusable = DomHandler.getFocusableElements(this.#overlay);\n if (focusable) {\n focusable[0].focus();\n }\n event.preventDefault();\n }\n else if (event.altKey) {\n this.overlayVisible.set(true);\n event.preventDefault();\n }\n break;\n }\n }\n onEscape() {\n this.overlayVisible.set(false);\n }\n onContentClick() {\n this.#selfClick = true;\n }\n // onOverlayAnimationStart(event: AnimationEvent) {\n onOverlayAnimationStart(event) {\n switch (event.toState) {\n case 'visible':\n this.#overlay = event.element;\n this.#renderer.appendChild(this.#document.body, this.#overlay);\n ZIndexUtils.set('overlay', this.#overlay, this.#tableMetadata.primeConfig.zIndex.overlay);\n DomHandler.absolutePosition(this.#overlay, this.icon()?.nativeElement);\n this.#bindDocumentClickListener();\n this.#bindDocumentResizeListener();\n this.#bindScrollListener();\n this.#overlayEventListener = (e) => {\n if (this.#overlay && this.#overlay.contains(e.target)) {\n this.#selfClick = true;\n }\n };\n this.#overlaySubscription = this.#overlayService.clickObservable.subscribe(this.#overlayEventListener);\n break;\n case 'void':\n this.#onOverlayHide();\n this.#overlaySubscription?.unsubscribe();\n break;\n }\n }\n // onOverlayAnimationEnd(event: AnimationEvent) {\n onOverlayAnimationEnd(event) {\n switch (event.toState) {\n case 'void':\n ZIndexUtils.clear(event.element);\n break;\n }\n }\n #findNextMenuModeItem(item) {\n const nextItem = item.nextElementSibling;\n if (nextItem)\n return DomHandler.hasClass(nextItem, 'p-column-filter-separator') ? this.#findNextMenuModeItem(nextItem) : nextItem;\n else\n return item.parentElement?.firstElementChild;\n }\n #findPrevMenuModeItem(item) {\n const prevItem = item.previousElementSibling;\n if (prevItem)\n return DomHandler.hasClass(prevItem, 'p-column-filter-separator') ? this.#findPrevMenuModeItem(prevItem) : prevItem;\n else\n return item.parentElement?.lastElementChild;\n }\n #isOutsideClicked(event) {\n return !(this.#overlay?.isSameNode(event.target) ||\n this.#overlay?.contains(event.target) ||\n this.icon()?.nativeElement.isSameNode(event.target) ||\n this.icon()?.nativeElement.contains(event.target) ||\n DomHandler.hasClass(event.target, 'p-column-filter-add-button') ||\n DomHandler.hasClass(event.target.parentElement, 'p-column-filter-add-button') ||\n DomHandler.hasClass(event.target, 'p-column-filter-remove-button') ||\n DomHandler.hasClass(event.target.parentElement, 'p-column-filter-remove-button'));\n }\n #bindDocumentClickListener() {\n if (!this.#documentClickListener) {\n const documentTarget = this.#el ? this.#el.nativeElement.ownerDocument : 'document';\n this.#documentClickListener = this.#renderer.listen(documentTarget, 'click', event => {\n if (this.overlayVisible() && !this.#selfClick && this.#isOutsideClicked(event)) {\n this.#hideOverlay();\n }\n this.#selfClick = false;\n });\n }\n }\n #unbindDocumentClickListener() {\n if (this.#documentClickListener) {\n this.#documentClickListener();\n this.#documentClickListener = null;\n this.#selfClick = false;\n }\n }\n #bindDocumentResizeListener() {\n if (!this.#documentResizeListener) {\n this.#documentResizeListener = this.#renderer.listen(this.#window, 'resize', () => {\n if (this.overlayVisible() && !DomHandler.isTouchDevice()) {\n this.#hideOverlay();\n }\n });\n }\n }\n #unbindDocumentResizeListener() {\n if (this.#documentResizeListener) {\n this.#documentResizeListener();\n this.#documentResizeListener = null;\n }\n }\n #bindScrollListener() {\n if (!this.#scrollHandler) {\n this.#scrollHandler = new ConnectedOverlayScrollHandler(this.icon()?.nativeElement, () => {\n if (this.overlayVisible()) {\n this.#hideOverlay();\n }\n });\n }\n this.#scrollHandler.bindScrollListener();\n }\n #unbindScrollListener() {\n if (this.#scrollHandler) {\n this.#scrollHandler.unbindScrollListener();\n }\n }\n #hideOverlay() {\n this.overlayVisible.set(false);\n this.#cd.markForCheck();\n }\n #onOverlayHide() {\n this.#unbindDocumentClickListener();\n this.#unbindDocumentResizeListener();\n this.#unbindScrollListener();\n this.#overlay = null;\n }\n #getPropertyLabelKey(filterDescriptor) {\n let labelKey;\n if (filterDescriptor.title !== undefined && !filterDescriptor.titleUseModelBase) {\n labelKey = filterDescriptor.title;\n }\n else {\n labelKey = getI18nTypePropertyKey(this.model().i18nBaseKey, filterDescriptor.title ?? filterDescriptor.property);\n }\n return labelKey;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TableFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.7\", type: TableFilterComponent, isStandalone: true, selector: \"mng-table-filter\", inputs: { config: { classPropertyName: \"config\", publicName: \"config\", isSignal: true, isRequired: true, transformFunction: null }, model: { classPropertyName: \"model\", publicName: \"model\", isSignal: true, isRequired: true, transformFunction: null }, showFilterIcon: { classPropertyName: \"showFilterIcon\", publicName: \"showFilterIcon\", isSignal: true, isRequired: false, transformFunction: null }, showTitleAsPlaceholder: { classPropertyName: \"showTitleAsPlaceholder\", publicName: \"showTitleAsPlaceholder\", isSignal: true, isRequired: false, transformFunction: null } }, providers: [FilterService], viewQueries: [{ propertyName: \"icon\", first: true, predicate: [\"icon\"], descendants: true, isSignal: true }], ngImport: i0, template: \"<div class=\\\"flex items-center\\\">\\n @let requiredFilterMissing = config().descriptor.isRequired && !filter.isActive();\\n @let placeholder = (placeholderKey() | translate) + (config().descriptor.isRequired ? ' *' : '');\\n <div\\n class=\\\"flex items-center [&_p-inputgroup-addon]:p-0!\\\"\\n [ngClass]=\\\"filter.isActive() ? '[&_*]:border-primary-600! [&_*]:bg-primary-50!' : ''\\\"\\n [class.[&_*]:border-red-500!]=\\\"requiredFilterMissing\\\"\\n [class.mng-filter-required]=\\\"requiredFilterMissing\\\">\\n @switch (config().descriptor.filterType) {\\n @case (FilterTypeEnum.Number) {\\n @if (filter.state()?.displayMatchMode === 'between') {\\n <mng-number-range\\n vertical=\\\"true\\\"\\n className=\\\"mng-filter-number\\\"\\n [ngModel]=\\\"filter.state()?.displayValue\\\"\\n (ngModelChange)=\\\"onNumericModelChange($event)\\\"\\n (keyDown)=\\\"onNumericInputKeyDown($event)\\\"\\n [placeholder]=\\\"placeholder\\\"\\n [useGrouping]=\\\"config().descriptor.numberUseGrouping\\\"\\n [minFractionDigits]=\\\"config().numberConfig?.fractionsMin\\\"\\n [maxFractionDigits]=\\\"config().numberConfig?.fractionsMax\\\"\\n [disabled]=\\\"isInputDisabled()\\\"\\n [templates]=\\\"showFilterIcon() ? [numberRangePrependIcon] : []\\\" />\\n } @else {\\n <p-inputgroup>\\n @if (showFilterIcon()) {\\n <p-inputgroup-addon>\\n <ng-container *ngTemplateOutlet=\\\"iconTemplate\\\"></ng-container>\\n </p-inputgroup-addon>\\n }\\n <p-inputNumber\\n inputStyleClass=\\\"mng-filter-number\\\"\\n [ngModel]=\\\"filter.state()?.displayValue\\\"\\n (ngModelChange)=\\\"onNumericModelChange($event)\\\"\\n (onKeyDown)=\\\"onNumericInputKeyDown($event)\\\"\\n [placeholder]=\\\"placeholder\\\"\\n [useGrouping]=\\\"config().descriptor.numberUseGrouping\\\"\\n [minFractionDigits]=\\\"config().numberConfig?.fractionsMin\\\"\\n [maxFractionDigits]=\\\"config().numberConfig?.fractionsMax\\\"\\n [disabled]=\\\"isInputDisabled()\\\" />\\n </p-inputgroup>\\n }\\n }\\n\\n @case (FilterTypeEnum.Boolean) {\\n <mng-dropdown\\n optionsLabelProperty=\\\"label\\\"\\n optionsValueProperty=\\\"value\\\"\\n [ngModel]=\\\"filter.state()?.displayValue\\\"\\n [options]=\\\"booleanOptions\\\"\\n [optionsLabelTranslate]=\\\"true\\\"\\n [placeholder]=\\\"placeholder\\\"\\n [disabled]=\\\"isInputDisabled()\\\"\\n (valueChange)=\\\"booleanFilter($event)\\\"\\n [templates]=\\\"showFilterIcon() ? [dropdownPrependIcon] : []\\\">\\n </mng-dropdown>\\n }\\n @case (FilterTypeEnum.Date) {\\n @if (filter.state()?.displayMatchMode === FilterMatchMode.Between) {\\n <mng-date-range\\n vertical=\\\"true\\\"\\n [ngModel]=\\\"filter.state()?.displayValue\\\"\\n (ngModelChange)=\\\"onDateFilterModelChange($event)\\\"\\n [showTime]=\\\"config().dateConfig?.showTime ?? false\\\"\\n [showSeconds]=\\\"config().dateConfig?.showSeconds ?? false\\\"\\n [dateFormat]=\\\"config().dateConfig?.format\\\"\\n [placeholder]=\\\"placeholder\\\"\\n [disabled]=\\\"isInputDisabled()\\\"\\n [templates]=\\\"showFilterIcon() ? [dateRangePrependIcon] : []\\\" />\\n } @else {\\n <p-inputgroup>\\n @if (showFilterIcon()) {\\n <p-inputgroup-addon>\\n <ng-container *ngTemplateOutlet=\\\"iconTemplate\\\"></ng-container>\\n </p-inputgroup-addon>\\n }\\n <p-date-picker\\n appendTo=\\\"body\\\"\\n [ngModel]=\\\"filter.state()?.displayValue\\\"\\n (ngModelChange)=\\\"onDateFilterModelChange($event)\\\"\\n [placeholder]=\\\"placeholder\\\"\\n [showIcon]=\\\"true\\\"\\n [inputStyle]=\\\"{borderTopRightRadius: '0', borderBottomRightRadius: '0'}\\\"\\n [showTime]=\\\"config().dateConfig?.showTime ?? false\\\"\\n [showSeconds]=\\\"config().dateConfig?.showSeconds ?? false\\\"\\n [dateFormat]=\\\"config().dateConfig?.format\\\"\\n [firstDayOfWeek]=\\\"1\\\">\\n </p-date-picker>\\n </p-inputgroup>\\n }\\n }\\n @case (FilterTypeEnum.Lookup) {\\n <ng-container *ngTemplateOutlet=\\\"lookupFilter\\\" />\\n }\\n @case (FilterTypeEnum.LookupEnum) {\\n <ng-container *ngTemplateOutlet=\\\"lookupFilter\\\" />\\n }\\n @default {\\n <p-inputgroup>\\n @if (showFilterIcon()) {\\n <p-inputgroup-addon>\\n <ng-container *ngTemplateOutlet=\\\"iconTemplate\\\"></ng-container>\\n </p-inputgroup-addon>\\n }\\n <input\\n type=\\\"text\\\"\\n pInputText\\n class=\\\"mng-filter-string\\\"\\n [value]=\\\"filter.state()?.displayValue ?? ''\\\"\\n [disabled]=\\\"isInputDisabled()\\\"\\n (input)=\\\"onTextModelChange($event)\\\"\\n (keydown.enter)=\\\"onTextInputEnterKeyDown($event)\\\"\\n [attr.placeholder]=\\\"placeholder\\\"\\n [mngInputTrim]=\\\"config().descriptor.trimOption\\\" />\\n </p-inputgroup>\\n }\\n }\\n\\n <ng-template #lookupFilter>\\n @if (descriptorAsLookup(); as lookup) {\\n @switch (lookup.lookupType) {\\n @case (lookupTypeAutocomplete) {\\n <mng-autocomplete\\n *mngRerender=\\\"isMultiselect()\\\"\\n [ngModel]=\\\"filter.state()?.displayValue\\\"\\n [dataProvider]=\\\"lookup.dataProvider\\\"\\n [optionsTrackProperty]=\\\"lookup.optionsValueProperty\\\"\\n [optionsValueProperty]=\\\"lookup.optionsValueProperty\\\"\\n [optionsLabelProperty]=\\\"lookup.optionsLabelProperty\\\"\\n [optionsLabelTranslate]=\\\"lookup.optionsLabelTranslate\\\"\\n [multiselect]=\\\"isMultiselect()\\\"\\n [autoClear]=\\\"lookup.autocompleteAutoClear ?? false\\\"\\n [openOnFocus]=\\\"lookup.autocompleteAutoClear ?? true\\\"\\n [inlineSearch]=\\\"lookup.autocompleteInlineSearch ?? false\\\"\\n [placeholder]=\\\"placeholder\\\"\\n [className]=\\\"lookup.className\\\"\\n [dropdownClassName]=\\\"lookup.dropdownClassName\\\"\\n [disabled]=\\\"isInputDisabled()\\\"\\n (valueChange)=\\\"autocompleteFilter($event)\\\"\\n [searchTrim]=\\\"config().descriptor.trimOption\\\"\\n [templates]=\\\"showFilterIcon() ? [autocompletePrependIcon] : []\\\">\\n </mng-autocomplete>\\n }\\n @case (lookupTypeDropdown) {\\n <mng-dropdown\\n *mngRerender=\\\"isMultiselect()\\\"\\n [ngModel]=\\\"filter.state()?.displayValue\\\"\\n [dataProvider]=\\\"lookup.dataProvider\\\"\\n [optionsValueProperty]=\\\"lookup.optionsValueProperty\\\"\\n [optionsLabelProperty]=\\\"lookup.optionsLabelProperty\\\"\\n [optionsLabelTranslate]=\\\"lookup.optionsLabelTranslate\\\"\\n [multiselect]=\\\"isMultiselect()\\\"\\n [placeholder]=\\\"placeholder\\\"\\n [className]=\\\"lookup.className\\\"\\n [dropdownClassName]=\\\"lookup.dropdownClassName\\\"\\n [showClear]=\\\"false\\\"\\n [changeValueOnBlur]=\\\"isMultiselect()\\\"\\n [disabled]=\\\"isInputDisabled()\\\"\\n (valueChange)=\\\"dropdownFilter($event)\\\"\\n [templates]=\\\"showFilterIcon() ? [dropdownPrependIcon] : []\\\">\\n </mng-dropdown>\\n }\\n }\\n }\\n </ng-template>\\n\\n <ng-template mngAutocompleteTemplate name=\\\"prepend\\\" #autocompletePrependIcon=\\\"mngAutocompleteTemplate\\\">\\n <ng-container *ngTemplateOutlet=\\\"iconTemplate\\\"></ng-container>\\n </ng-template>\\n <ng-template mngDropdownTemplate name=\\\"prepend\\\" #dropdownPrependIcon=\\\"mngDropdownTemplate\\\">\\n <ng-container *ngTemplateOutlet=\\\"iconTemplate\\\"></ng-container>\\n </ng-template>\\n <ng-template mngDateRangeTemplate name=\\\"prepend\\\" #dateRangePrependIcon=\\\"mngDateRangeTemplate\\\">\\n <ng-container *ngTemplateOutlet=\\\"iconTemplate\\\"></ng-container>\\n </ng-template>\\n <ng-template mngNumberRangeTemplate name=\\\"prepend\\\" #numberRangePrependIcon=\\\"mngNumberRangeTemplate\\\">\\n <ng-container *ngTemplateOutlet=\\\"iconTemplate\\\"></ng-container>\\n </ng-template>\\n\\n <ng-template #iconTemplate>\\n <button\\n #icon\\n class=\\\"cursor-pointer pi pi-filter w-full h-full rounded-tl-md rounded-bl-md hover:bg-slate-50!\\\"\\n [ngClass]=\\\"{\\n 'text-primary-700': filter.isActive(),\\n 'text-slate-400': !filter.isActive()\\n }\\\"\\n (click)=\\\"toggleMenu($event)\\\"\\n (keydown)=\\\"onToggleButtonKeyDown($event)\\\"></button>\\n </ng-template>\\n\\n @if (overlayVisible()) {\\n <div\\n class=\\\"p-datatable-filter-overlay\\\"\\n (click)=\\\"onContentClick()\\\"\\n [@overlayAnimation]=\\\"'visible'\\\"\\n (@overlayAnimation.start)=\\\"onOverlayAnimationStart($event)\\\"\\n (@overlayAnimation.done)=\\\"onOverlayAnimationEnd($event)\\\"\\n (keydown.escape)=\\\"onEscape()\\\">\\n <ul class=\\\"p-datatable-filter-constraint-list\\\">\\n @for (matchMode of matchModes(); track matchMode; let i = $index) {\\n <li\\n class=\\\"p-datatable-filter-constraint\\\"\\n [class.p-datatable-filter-constraint-selected]=\\\"matchMode.value === filter.state()?.displayMatchMode\\\"\\n (click)=\\\"onMatchModeChange(matchMode.value)\\\"\\n (keydown)=\\\"onMatchModeKeyDown($event)\\\"\\n (keydown.enter)=\\\"this.onMatchModeChange(matchMode.value)\\\"\\n [attr.tabindex]=\\\"i === 0 ? '0' : null\\\">\\n {{ matchMode.label }}\\n </li>\\n }\\n @if (config().descriptor.filterType === FilterTypeEnum.String) {\\n <li class=\\\"p-datatable-filter-constraint-separator\\\" (keydown)=\\\"onMatchModeKeyDown($event)\\\"></li>\\n <li\\n class=\\\"p-datatable-filter-constraint\\\"\\n (click)=\\\"onCaseSensitivityToggle()\\\"\\n (keydown)=\\\"onMatchModeKeyDown($event)\\\"\\n (keydown.enter)=\\\"onCaseSensitivityToggle()\\\">\\n <div class=\\\"flex items-center\\\">\\n <span class=\\\"mr-2\\\"> {{ 'mngFilter.caseSensitive' | translate }} </span>\\n <p-toggle-switch [ngModel]=\\\"filter.state()?.caseSensitive || false\\\" class=\\\"ml-auto pointer-events-none\\\"></p-toggle-switch>\\n </div>\\n </li>\\n }\\n <li class=\\\"p-datatable-filter-constraint-separator\\\" (keydown)=\\\"onMatchModeKeyDown($event)\\\"></li>\\n <li class=\\\"p-datatable-filter-constraint\\\" (click)=\\\"clear()\\\" (keydown)=\\\"onMatchModeKeyDown($event)\\\" (keydown.enter)=\\\"clear()\\\">\\n {{ noFilterLabel() }}\\n </li>\\n </ul>\\n </div>\\n }\\n </div>\\n\\n @if (!showFilterIcon()) {\\n <button\\n #icon\\n class=\\\"mng-filter-options cursor-pointer ml-1\\\"\\n [ngClass]=\\\"{\\n 'text-primary': filter.isActive(),\\n 'text-slate-400': !filter.isActive()\\n }\\\"\\n (click)=\\\"toggleMenu($event)\\\"\\n (keydown)=\\\"onToggleButtonKeyDown($event)\\\">\\n <i class=\\\"pi pi-ellipsis-v\\\"></i>\\n </button>\\n }\\n</div>\\n\", styles: [\".mng-filter-string{min-width:135px}.mng-filter-number{min-width:165px}.mng-filter-date{min-width:170px}.mng-filter-boolean{min-width:80px}.mng-filter-lookup,.mng-filter-lookupenum{min-width:180px}.mng-filter-required{position:relative}p-tag.mng-filter-required{border:1px solid var(--color-red-500)}.mng-filter-required:after{content:\\\"\\\";position:absolute;top:0;right:0;width:1rem;height:1rem;background-color:var(--color-red-500);z-index:1;clip-path:polygon(0 0,100% 0,100% 100%,0 0);border-top-right-radius:var(--p-inputgroup-addon-border-radius)}\\n\"], dependencies: [{ kind: \"ngmodule\", type: TableModule }, { kind: \"component\", type: DateRangeComponent, selector: \"mng-date-range\", inputs: [\"placeholder\", \"showTime\", \"showSeconds\", \"dateFormat\", \"className\", \"required\", \"disabled\", \"vertical\", \"templates\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"component\", type: AutocompleteComponent, selector: \"mng-autocomplete\", inputs: [\"dataProvider\", \"optionsTrackProperty\", \"optionsValueProperty\", \"optionsLabelProperty\", \"optionsLabelTranslate\", \"inlineSearch\", \"openOnFocus\", \"multiselect\", \"placeholder\", \"className\", \"dropdownClassName\", \"showClear\", \"autoClear\", \"selectFirst\", \"searchTrim\", \"disabled\", \"templates\"], outputs: [\"valueChange\", \"blur\"] }, { kind: \"component\", type: DropdownComponent, selector: \"mng-dropdown\", inputs: [\"dataProvider\", \"options\", \"optionsTrackProperty\", \"optionsLabelProperty\", \"optionsLabelTranslate\", \"optionsValueProperty\", \"optionsDisabledProperty\", \"multiselect\", \"placeholder\", \"showClear\", \"selectFirstItem\", \"className\", \"dropdownClassName\", \"changeValueOnBlur\", \"loading\", \"disabled\", \"allowInput\", \"appendTo\", \"templates\", \"inlineSearch\", \"searchTrim\"], outputs: [\"valueChange\", \"blur\"] }, { kind: \"component\", type: InputNumber, selector: \"p-inputNumber, p-inputnumber, p-input-number\", inputs: [\"showButtons\", \"format\", \"buttonLayout\", \"inputId\", \"styleClass\", \"placeholder\", \"tabindex\", \"title\", \"ariaLabelledBy\", \"ariaDescribedBy\", \"ariaLabel\", \"ariaRequired\", \"autocomplete\", \"incrementButtonClass\", \"decrementButtonClass\", \"incrementButtonIcon\", \"decrementButtonIcon\", \"readonly\", \"allowEmpty\", \"locale\", \"localeMatcher\", \"mode\", \"currency\", \"currencyDisplay\", \"useGrouping\", \"minFractionDigits\", \"maxFractionDigits\", \"prefix\", \"suffix\", \"inputStyle\", \"inputStyleClass\", \"showClear\", \"autofocus\"], outputs: [\"onInput\", \"onFocus\", \"onBlur\", \"onKeyDown\", \"onClear\"] }, { kind: \"directive\", type: InputText, selector: \"[pInputText]\", inputs: [\"pSize\", \"variant\", \"fluid\", \"invalid\"] }, { kind: \"directive\", type: InputTrimDirective, selector: \"[mngInputTrim]\", inputs: [\"mngInputTrim\"] }, { kind: \"component\", type: NumberRangeComponent, selector: \"mng-number-range\", inputs: [\"placeholder\", \"useGrouping\", \"minFractionDigits\", \"maxFractionDigits\", \"required\", \"disabled\", \"vertical\", \"templates\", \"className\"], outputs: [\"keyDown\"] }, { kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: RerenderDirective, selector: \"[mngRerender]\", inputs: [\"mngRerender\"] }, { kind: \"component\", type: DatePicker, selector: \"p-datePicker, p-datepicker, p-date-picker\", inputs: [\"iconDisplay\", \"styleClass\", \"inputStyle\", \"inputId\", \"inputStyleClass\", \"placeholder\", \"ariaLabelledBy\", \"ariaLabel\", \"iconAriaLabel\", \"dateFormat\", \"multipleSeparator\", \"rangeSeparator\", \"inline\", \"showOtherMonths\", \"selectOtherMonths\", \"showIcon\", \"icon\", \"readonlyInput\", \"shortYearCutoff\", \"hourFormat\", \"timeOnly\", \"stepHour\", \"stepMinute\", \"stepSecond\", \"showSeconds\", \"showOnFocus\", \"showWeek\", \"startWeekFromFirstDayOfYear\", \"showClear\", \"dataType\", \"selectionMode\", \"maxDateCount\", \"showButtonBar\", \"todayButtonStyleClass\", \"clearButtonStyleClass\", \"autofocus\", \"autoZIndex\", \"baseZIndex\", \"panelStyleClass\", \"panelStyle\", \"keepInvalid\", \"hideOnDateTimeSelect\", \"touchUI\", \"timeSeparator\", \"focusTrap\", \"showTransitionOptions\", \"hideTransitionOptions\", \"tabindex\", \"minDate\", \"maxDate\", \"disabledDates\", \"disabledDays\", \"showTime\", \"responsiveOptions\", \"numberOfMonths\", \"firstDayOfWeek\", \"view\", \"defaultDate\", \"appendTo\"], outputs: [\"onFocus\", \"onBlur\", \"onClose\", \"onSelect\", \"onClear\", \"onInput\", \"onTodayClick\", \"onClearClick\", \"onMonthChange\", \"onYearChange\", \"onClickOutside\", \"onShow\"] }, { kind: \"component\", type: InputGroup, selector: \"p-inputgroup, p-inputGroup, p-input-group\", inputs: [\"styleClass\"] }, { kind: \"component\", type: InputGroupAddon, selector: \"p-inputgroup-addon, p-inputGroupAddon\", inputs: [\"style\", \"styleClass\"] }, { kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"component\", type: ToggleSwitch, selector: \"p-toggleswitch, p-toggleSwitch, p-toggle-switch\", inputs: [\"styleClass\", \"tabindex\", \"inputId\", \"readonly\", \"trueValue\", \"falseValue\", \"ariaLabel\", \"size\", \"ariaLabelledBy\", \"autofocus\"], outputs: [\"onChange\"] }, { kind: \"directive\", type: AutocompleteTemplateDirective, selector: \"[mngAutocompleteTemplate]\", inputs: [\"name\"], exportAs: [\"mngAutocompleteTemplate\"] }, { kind: \"directive\", type: DropdownTemplateDirective, selector: \"[mngDropdownTemplate]\", inputs: [\"name\"], exportAs: [\"mngDropdownTemplate\"] }, { kind: \"directive\", type: DateRangeTemplateDirective, selector: \"[mngDateRangeTemplate]\", inputs: [\"name\"], exportAs: [\"mngDateRangeTemplate\"] }, { kind: \"directive\", type: NumberRangeTemplateDirective, selector: \"[mngNumberRangeTemplate]\", inputs: [\"name\"], exportAs: [\"mngNumberRangeTemplate\"] }, { kind: \"pipe\", type: TranslatePipe, name: \"translate\" }], animations: [\n trigger('overlayAnimation', [\n transition(':enter', [style({ opacity: 0, transform: 'scaleY(0.8)' }), animate('.12s cubic-bezier(0, 0, 0.2, 1)')]),\n transition(':leave', [animate('.1s linear', style({ opacity: 0 }))])\n ])\n ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TableFilterComponent, decorators: [{\n type: Component,\n args: [{ selector: 'mng-table-filter', imports: [\n TableModule,\n TranslatePipe,\n DateRangeComponent,\n FormsModule,\n AutocompleteComponent,\n DropdownComponent,\n InputNumber,\n InputText,\n InputTrimDirective,\n NumberRangeComponent,\n NgTemplateOutlet,\n RerenderDirective,\n DatePicker,\n InputGroup,\n InputGroupAddon,\n NgClass,\n ToggleSwitch,\n AutocompleteTemplateDirective,\n DropdownTemplateDirective,\n DateRangeTemplateDirective,\n NumberRangeTemplateDirective\n ], animations: [\n trigger('overlayAnimation', [\n transition(':enter', [style({ opacity: 0, transform: 'scaleY(0.8)' }), animate('.12s cubic-bezier(0, 0, 0.2, 1)')]),\n transition(':leave', [animate('.1s linear', style({ opacity: 0 }))])\n ])\n ], providers: [FilterService], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: \"<div class=\\\"flex items-center\\\">\\n @let requiredFilterMissing = config().descriptor.isRequired && !filter.isActive();\\n @let placeholder = (placeholderKey() | translate) + (config().descriptor.isRequired ? ' *' : '');\\n <div\\n class=\\\"flex items-center [&_p-inputgroup-addon]:p-0!\\\"\\n [ngClass]=\\\"filter.isActive() ? '[&_*]:border-primary-600! [&_*]:bg-primary-50!' : ''\\\"\\n [class.[&_*]:border-red-500!]=\\\"requiredFilterMissing\\\"\\n [class.mng-filter-required]=\\\"requiredFilterMissing\\\">\\n @switch (config().descriptor.filterType) {\\n @case (FilterTypeEnum.Number) {\\n @if (filter.state()?.displayMatchMode === 'between') {\\n <mng-number-range\\n vertical=\\\"true\\\"\\n className=\\\"mng-filter-number\\\"\\n [ngModel]=\\\"filter.state()?.displayValue\\\"\\n (ngModelChange)=\\\"onNumericModelChange($event)\\\"\\n (keyDown)=\\\"onNumericInputKeyDown($event)\\\"\\n [placeholder]=\\\"placeholder\\\"\\n [useGrouping]=\\\"config().descriptor.numberUseGrouping\\\"\\n [minFractionDigits]=\\\"config().numberConfig?.fractionsMin\\\"\\n [maxFractionDigits]=\\\"config().numberConfig?.fractionsMax\\\"\\n [disabled]=\\\"isInputDisabled()\\\"\\n [templates]=\\\"showFilterIcon() ? [numberRangePrependIcon] : []\\\" />\\n } @else {\\n <p-inputgroup>\\n @if (showFilterIcon()) {\\n <p-inputgroup-addon>\\n <ng-container *ngTemplateOutlet=\\\"iconTemplate\\\"></ng-container>\\n </p-inputgroup-addon>\\n }\\n <p-inputNumber\\n inputStyleClass=\\\"mng-filter-number\\\"\\n [ngModel]=\\\"filter.state()?.displayValue\\\"\\n (ngModelChange)=\\\"onNumericModelChange($event)\\\"\\n (onKeyDown)=\\\"onNumericInputKeyDown($event)\\\"\\n [placeholder]=\\\"placeholder\\\"\\n [useGrouping]=\\\"config().descriptor.numberUseGrouping\\\"\\n [minFractionDigits]=\\\"config().numberConfig?.fractionsMin\\\"\\n [maxFractionDigits]=\\\"config().numberConfig?.fractionsMax\\\"\\n [disabled]=\\\"isInputDisabled()\\\" />\\n </p-inputgroup>\\n }\\n }\\n\\n @case (FilterTypeEnum.Boolean) {\\n <mng-dropdown\\n optionsLabelProperty=\\\"label\\\"\\n optionsValueProperty=\\\"value\\\"\\n [ngModel]=\\\"filter.state()?.displayValue\\\"\\n [options]=\\\"booleanOptions\\\"\\n [optionsLabelTranslate]=\\\"true\\\"\\n [placeholder]=\\\"placeholder\\\"\\n [disabled]=\\\"isInputDisabled()\\\"\\n (valueChange)=\\\"booleanFilter($event)\\\"\\n [templates]=\\\"showFilterIcon() ? [dropdownPrependIcon] : []\\\">\\n </mng-dropdown>\\n }\\n @case (FilterTypeEnum.Date) {\\n @if (filter.state()?.displayMatchMode === FilterMatchMode.Between) {\\n <mng-date-range\\n vertical=\\\"true\\\"\\n [ngModel]=\\\"filter.state()?.displayValue\\\"\\n (ngModelChange)=\\\"onDateFilterModelChange($event)\\\"\\n [showTime]=\\\"config().dateConfig?.showTime ?? false\\\"\\n [showSeconds]=\\\"config().dateConfig?.showSeconds ?? false\\\"\\n [dateFormat]=\\\"config().dateConfig?.format\\\"\\n [placeholder]=\\\"placeholder\\\"\\n [disabled]=\\\"isInputDisabled()\\\"\\n [templates]=\\\"showFilterIcon() ? [dateRangePrependIcon] : []\\\" />\\n } @else {\\n <p-inputgroup>\\n @if (showFilterIcon()) {\\n <p-inputgroup-addon>\\n <ng-container *ngTemplateOutlet=\\\"iconTemplate\\\"></ng-container>\\n </p-inputgroup-addon>\\n }\\n <p-date-picker\\n appendTo=\\\"body\\\"\\n [ngModel]=\\\"filter.state()?.displayValue\\\"\\n (ngModelChange)=\\\"onDateFilterModelChange($event)\\\"\\n [placeholder]=\\\"placeholder\\\"\\n [showIcon]=\\\"true\\\"\\n [inputStyle]=\\\"{borderTopRightRadius: '0', borderBottomRightRadius: '0'}\\\"\\n [showTime]=\\\"config().dateConfig?.showTime ?? false\\\"\\n [showSeconds]=\\\"config().dateConfig?.showSeconds ?? false\\\"\\n [dateFormat]=\\\"config().dateConfig?.format\\\"\\n [firstDayOfWeek]=\\\"1\\\">\\n </p-date-picker>\\n </p-inputgroup>\\n }\\n }\\n @case (FilterTypeEnum.Lookup) {\\n <ng-container *ngTemplateOutlet=\\\"lookupFilter\\\" />\\n }\\n @case (FilterTypeEnum.LookupEnum) {\\n <ng-container *ngTemplateOutlet=\\\"lookupFilter\\\" />\\n }\\n @default {\\n <p-inputgroup>\\n @if (showFilterIcon()) {\\n <p-inputgroup-addon>\\n <ng-container *ngTemplateOutlet=\\\"iconTemplate\\\"></ng-container>\\n </p-inputgroup-addon>\\n }\\n <input\\n type=\\\"text\\\"\\n pInputText\\n class=\\\"mng-filter-string\\\"\\n [value]=\\\"filter.state()?.displayValue ?? ''\\\"\\n [disabled]=\\\"isInputDisabled()\\\"\\n (input)=\\\"onTextModelChange($event)\\\"\\n (keydown.enter)=\\\"onTextInputEnterKeyDown($event)\\\"\\n [attr.placeholder]=\\\"placeholder\\\"\\n [mngInputTrim]=\\\"config().descriptor.trimOption\\\" />\\n </p-inputgroup>\\n }\\n }\\n\\n <ng-template #lookupFilter>\\n @if (descriptorAsLookup(); as lookup) {\\n @switch (lookup.lookupType) {\\n @case (lookupTypeAutocomplete) {\\n <mng-autocomplete\\n *mngRerender=\\\"isMultiselect()\\\"\\n [ngModel]=\\\"filter.state()?.displayValue\\\"\\n [dataProvider]=\\\"lookup.dataProvider\\\"\\n [optionsTrackProperty]=\\\"lookup.optionsValueProperty\\\"\\n [optionsValueProperty]=\\\"lookup.optionsValueProperty\\\"\\n [optionsLabelProperty]=\\\"lookup.optionsLabelProperty\\\"\\n [optionsLabelTranslate]=\\\"lookup.optionsLabelTranslate\\\"\\n [multiselect]=\\\"isMultiselect()\\\"\\n [autoClear]=\\\"lookup.autocompleteAutoClear ?? false\\\"\\n [openOnFocus]=\\\"lookup.autocompleteAutoClear ?? true\\\"\\n [inlineSearch]=\\\"lookup.autocompleteInlineSearch ?? false\\\"\\n [placeholder]=\\\"placeholder\\\"\\n [className]=\\\"lookup.className\\\"\\n [dropdownClassName]=\\\"lookup.dropdownClassName\\\"\\n [disabled]=\\\"isInputDisabled()\\\"\\n (valueChange)=\\\"autocompleteFilter($event)\\\"\\n [searchTrim]=\\\"config().descriptor.trimOption\\\"\\n [templates]=\\\"showFilterIcon() ? [autocompletePrependIcon] : []\\\">\\n </mng-autocomplete>\\n }\\n @case (lookupTypeDropdown) {\\n <mng-dropdown\\n *mngRerender=\\\"isMultiselect()\\\"\\n [ngModel]=\\\"filter.state()?.displayValue\\\"\\n [dataProvider]=\\\"lookup.dataProvider\\\"\\n [optionsValueProperty]=\\\"lookup.optionsValueProperty\\\"\\n [optionsLabelProperty]=\\\"lookup.optionsLabelProperty\\\"\\n [optionsLabelTranslate]=\\\"lookup.optionsLabelTranslate\\\"\\n [multiselect]=\\\"isMultiselect()\\\"\\n [placeholder]=\\\"placeholder\\\"\\n [className]=\\\"lookup.className\\\"\\n [dropdownClassName]=\\\"lookup.dropdownClassName\\\"\\n [showClear]=\\\"false\\\"\\n [changeValueOnBlur]=\\\"isMultiselect()\\\"\\n [disabled]=\\\"isInputDisabled()\\\"\\n (valueChange)=\\\"dropdownFilter($event)\\\"\\n [templates]=\\\"showFilterIcon() ? [dropdownPrependIcon] : []\\\">\\n </mng-dropdown>\\n }\\n }\\n }\\n </ng-template>\\n\\n <ng-template mngAutocompleteTemplate name=\\\"prepend\\\" #autocompletePrependIcon=\\\"mngAutocompleteTemplate\\\">\\n <ng-container *ngTemplateOutlet=\\\"iconTemplate\\\"></ng-container>\\n </ng-template>\\n <ng-template mngDropdownTemplate name=\\\"prepend\\\" #dropdownPrependIcon=\\\"mngDropdownTemplate\\\">\\n <ng-container *ngTemplateOutlet=\\\"iconTemplate\\\"></ng-container>\\n </ng-template>\\n <ng-template mngDateRangeTemplate name=\\\"prepend\\\" #dateRangePrependIcon=\\\"mngDateRangeTemplate\\\">\\n <ng-container *ngTemplateOutlet=\\\"iconTemplate\\\"></ng-container>\\n </ng-template>\\n <ng-template mngNumberRangeTemplate name=\\\"prepend\\\" #numberRangePrependIcon=\\\"mngNumberRangeTemplate\\\">\\n <ng-container *ngTemplateOutlet=\\\"iconTemplate\\\"></ng-container>\\n </ng-template>\\n\\n <ng-template #iconTemplate>\\n <button\\n #icon\\n class=\\\"cursor-pointer pi pi-filter w-full h-full rounded-tl-md rounded-bl-md hover:bg-slate-50!\\\"\\n [ngClass]=\\\"{\\n 'text-primary-700': filter.isActive(),\\n 'text-slate-400': !filter.isActive()\\n }\\\"\\n (click)=\\\"toggleMenu($event)\\\"\\n (keydown)=\\\"onToggleButtonKeyDown($event)\\\"></button>\\n </ng-template>\\n\\n @if (overlayVisible()) {\\n <div\\n class=\\\"p-datatable-filter-overlay\\\"\\n (click)=\\\"onContentClick()\\\"\\n [@overlayAnimation]=\\\"'visible'\\\"\\n (@overlayAnimation.start)=\\\"onOverlayAnimationStart($event)\\\"\\n (@overlayAnimation.done)=\\\"onOverlayAnimationEnd($event)\\\"\\n (keydown.escape)=\\\"onEscape()\\\">\\n <ul class=\\\"p-datatable-filter-constraint-list\\\">\\n @for (matchMode of matchModes(); track matchMode; let i = $index) {\\n <li\\n class=\\\"p-datatable-filter-constraint\\\"\\n [class.p-datatable-filter-constraint-selected]=\\\"matchMode.value === filter.state()?.displayMatchMode\\\"\\n (click)=\\\"onMatchModeChange(matchMode.value)\\\"\\n (keydown)=\\\"onMatchModeKeyDown($event)\\\"\\n (keydown.enter)=\\\"this.onMatchModeChange(matchMode.value)\\\"\\n [attr.tabindex]=\\\"i === 0 ? '0' : null\\\">\\n {{ matchMode.label }}\\n </li>\\n }\\n @if (config().descriptor.filterType === FilterTypeEnum.String) {\\n <li class=\\\"p-datatable-filter-constraint-separator\\\" (keydown)=\\\"onMatchModeKeyDown($event)\\\"></li>\\n <li\\n class=\\\"p-datatable-filter-constraint\\\"\\n (click)=\\\"onCaseSensitivityToggle()\\\"\\n (keydown)=\\\"onMatchModeKeyDown($event)\\\"\\n (keydown.enter)=\\\"onCaseSensitivityToggle()\\\">\\n <div class=\\\"flex items-center\\\">\\n <span class=\\\"mr-2\\\"> {{ 'mngFilter.caseSensitive' | translate }} </span>\\n <p-toggle-switch [ngModel]=\\\"filter.state()?.caseSensitive || false\\\" class=\\\"ml-auto pointer-events-none\\\"></p-toggle-switch>\\n </div>\\n </li>\\n }\\n <li class=\\\"p-datatable-filter-constraint-separator\\\" (keydown)=\\\"onMatchModeKeyDown($event)\\\"></li>\\n <li class=\\\"p-datatable-filter-constraint\\\" (click)=\\\"clear()\\\" (keydown)=\\\"onMatchModeKeyDown($event)\\\" (keydown.enter)=\\\"clear()\\\">\\n {{ noFilterLabel() }}\\n </li>\\n </ul>\\n </div>\\n }\\n </div>\\n\\n @if (!showFilterIcon()) {\\n <button\\n #icon\\n class=\\\"mng-filter-options cursor-pointer ml-1\\\"\\n [ngClass]=\\\"{\\n 'text-primary': filter.isActive(),\\n 'text-slate-400': !filter.isActive()\\n }\\\"\\n (click)=\\\"toggleMenu($event)\\\"\\n (keydown)=\\\"onToggleButtonKeyDown($event)\\\">\\n <i class=\\\"pi pi-ellipsis-v\\\"></i>\\n </button>\\n }\\n</div>\\n\", styles: [\".mng-filter-string{min-width:135px}.mng-filter-number{min-width:165px}.mng-filter-date{min-width:170px}.mng-filter-boolean{min-width:80px}.mng-filter-lookup,.mng-filter-lookupenum{min-width:180px}.mng-filter-required{position:relative}p-tag.mng-filter-required{border:1px solid var(--color-red-500)}.mng-filter-required:after{content:\\\"\\\";position:absolute;top:0;right:0;width:1rem;height:1rem;background-color:var(--color-red-500);z-index:1;clip-path:polygon(0 0,100% 0,100% 100%,0 0);border-top-right-radius:var(--p-inputgroup-addon-border-radius)}\\n\"] }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RhYmxlL3NyYy9jb21wb25lbnRzL2ZpbHRlci9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3RhYmxlL3NyYy9jb21wb25lbnRzL2ZpbHRlci9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQUMsT0FBTyxFQUFFLGdCQUFnQixFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDMUQsT0FBTyxFQUNILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFFVixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixRQUFRLEVBQ1IsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFDLGNBQWMsRUFBRSxlQUFlLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDNUQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBQyw2QkFBNkIsRUFBRSxVQUFVLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDdEUsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztB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LEVBQUUsS0FBSyxDQUFDLEVBQUMsT0FBTyxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3JFLENBQUM7U0FDTDs7MkZBS1Esb0JBQW9CO2tCQXJDaEMsU0FBUzsrQkFDSSxrQkFBa0IsV0FDbkI7d0JBQ0wsV0FBVzt3QkFDWCxhQUFhO3dCQUNiLGtCQUFrQjt3QkFDbEIsV0FBVzt3QkFDWCxxQkFBcUI7d0JBQ3JCLGlCQUFpQjt3QkFDakIsV0FBVzt3QkFDWCxTQUFTO3dCQUNULGtCQUFrQjt3QkFDbEIsb0JBQW9CO3dCQUNwQixnQkFBZ0I7d0JBQ2hCLGlCQUFpQjt3QkFDakIsVUFBVTt3QkFDVixVQUFVO3dCQUNWLGVBQWU7d0JBQ2YsT0FBTzt3QkFDUCxZQUFZO3dCQUNaLDZCQUE2Qjt3QkFDN0IseUJBQXlCO3dCQUN6QiwwQkFBMEI7d0JBQzFCLDRCQUE0QjtxQkFDL0IsY0FHVzt3QkFDUixPQUFPLENBQUMsa0JBQWtCLEVBQUU7NEJBQ3hCLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDLENBQUM7NEJBQ2pILFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxFQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt5QkFDckUsQ0FBQztxQkFDTCxhQUNVLENBQUMsYUFBYSxDQUFDLGlCQUNYLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2FuaW1hdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7TmdDbGFzcywgTmdUZW1wbGF0ZU91dGxldH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgT25EZXN0cm95LFxuICAgIFJlbmRlcmVyMixcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIGNvbXB1dGVkLFxuICAgIGluamVjdCxcbiAgICBpbnB1dCxcbiAgICBzaWduYWwsXG4gICAgdmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHt0YWtlVW50aWxEZXN0cm95ZWR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHtUcmFuc2xhdGVQaXBlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7T3ZlcmxheVNlcnZpY2UsIFRyYW5zbGF0aW9uS2V5c30gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHtEYXRlUGlja2VyfSBmcm9tICdwcmltZW5nL2RhdGVwaWNrZXInO1xuaW1wb3J0IHtDb25uZWN0ZWRPdmVybGF5U2Nyb2xsSGFuZGxlciwgRG9tSGFuZGxlcn0gZnJvbSAncHJpbWVuZy9kb20nO1xuaW1wb3J0IHtJbnB1dEdyb3VwfSBmcm9tICdwcmltZW5nL2lucHV0Z3JvdXAnO1xuaW1wb3J0IHtJbnB1dEdyb3VwQWRkb259IGZyb20gJ3ByaW1lbmcvaW5wdXRncm91cGFkZG9uJztcbmltcG9ydCB7SW5wdXROdW1iZXJ9IGZyb20gJ3ByaW1lbmcvaW5wdXRudW1iZXInO1xuaW1wb3J0IHtJbnB1dFRleHR9IGZyb20gJ3ByaW1lbmcvaW5wdXR0ZXh0JztcbmltcG9ydCB7VGFibGVNb2R1bGV9IGZyb20gJ3ByaW1lbmcvdGFibGUnO1xuaW1wb3J0IHtUb2dnbGVTd2l0Y2h9IGZyb20gJ3ByaW1lbmcvdG9nZ2xlc3dpdGNoJztcbmltcG9ydCB7TnVsbGFibGUsIFZvaWRMaXN0ZW5lcn0gZnJvbSAncHJpbWVuZy90cy1oZWxwZXJzJztcbmltcG9ydCB7WkluZGV4VXRpbHN9IGZyb20gJ3ByaW1lbmcvdXRpbHMnO1xuaW1wb3J0IHtTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWR9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge0ZpbHRlck1hdGNoTW9kZSwgRmlsdGVyTWF0Y2hNb2RlRXh0ZW5kZWRUeXBlLCBSZXJlbmRlckRpcmVjdGl2ZSwgZWZmZWN0V2l0aERlcHMsIGdldEkxOG5UeXBlUHJvcGVydHlLZXl9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge0ZpbHRlckRlc2NyaXB0b3IsIEZpbHRlckxvb2t1cERlc2NyaXB0b3IsIEZpbHRlckxvb2t1cFR5cGVFbnVtLCBGaWx0ZXJUeXBlRW51bX0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9maWx0ZXInO1xuaW1wb3J0IHtcbiAgICBBdXRvY29tcGxldGVDb21wb25lbnQsXG4gICAgQXV0b2NvbXBsZXRlVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgRGF0ZVJhbmdlQ29tcG9uZW50LFxuICAgIERhdGVSYW5nZVRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIERyb3Bkb3duQ29tcG9uZW50LFxuICAgIERyb3Bkb3duVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgSW5wdXRUcmltRGlyZWN0aXZlLFxuICAgIE51bWJlclJhbmdlQ29tcG9uZW50LFxuICAgIE51bWJlclJhbmdlVGVtcGxhdGVEaXJlY3RpdmVcbn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9mb3JtJztcbmltcG9ydCB7TW9kZWxEZXNjcmlwdG9yfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL21vZGVsJztcblxuaW1wb3J0IHtGaWx0ZXJDb25maWd9IGZyb20gJy4uLy4uLy4uL21vZGVscy9maWx0ZXIubW9kZWwnO1xuaW1wb3J0IHtUYWJsZU1ldGFkYXRhU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdGFibGUtbWV0YWRhdGEuc2VydmljZSc7XG5pbXBvcnQge0ZpbHRlclNlcnZpY2V9IGZyb20gJy4vZmlsdGVyLnNlcnZpY2UnO1xuXG4vKipcbiAqIENhbm5vdCBiZSBvbiBwdXNoIGNoYW5nZSBkZXRlY3Rpb24gc3RyYXRlZ3kgYmVjYXVzZSBvZiBmaWx0ZXIgdXBkYXRlcyB0cmlnZ2VyZWQgZnJvbSByb3V0ZSB3aGljaCBjYXVzZXMgdG8gZm9yY2UgdXBkYXRlIHZhbHVlcyBpbiBmb3JjZSBtZXRhZGF0YVxuICogYW5kIHRoZXNlIG11c3QgYmUgcHJvcGFnYXRlZCB0aHJvdWdoIHRvIHRoaXMgY29tcG9uZW50IGFuZCBiZXlvbmQgdG8gcHJpbWVORy5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdtbmctdGFibGUtZmlsdGVyJyxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIFRhYmxlTW9kdWxlLFxuICAgICAgICBUcmFuc2xhdGVQaXBlLFxuICAgICAgICBEYXRlUmFuZ2VDb21wb25lbnQsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBBdXRvY29tcGxldGVDb21wb25lbnQsXG4gICAgICAgIERyb3Bkb3duQ29tcG9uZW50LFxuICAgICAgICBJbnB1dE51bWJlcixcbiAgICAgICAgSW5wdXRUZXh0LFxuICAgICAgICBJbnB1dFRyaW1EaXJlY3RpdmUsXG4gICAgICAgIE51bWJlclJhbmdlQ29tcG9uZW50LFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBSZXJlbmRlckRpcmVjdGl2ZSxcbiAgICAgICAgRGF0ZVBpY2tlcixcbiAgICAgICAgSW5wdXRHcm91cCxcbiAgICAgICAgSW5wdXRHcm91cEFkZG9uLFxuICAgICAgICBOZ0NsYXNzLFxuICAgICAgICBUb2dnbGVTd2l0Y2gsXG4gICAgICAgIEF1dG9jb21wbGV0ZVRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICBEcm9wZG93blRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICBEYXRlUmFuZ2VUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgTnVtYmVyUmFuZ2VUZW1wbGF0ZURpcmVjdGl2ZVxuICAgIF0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ZpbHRlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZmlsdGVyLmNvbXBvbmVudC5jc3MnXSxcbiAgICBhbmltYXRpb25zOiBbXG4gICAgICAgIHRyaWdnZXIoJ292ZXJsYXlBbmltYXRpb24nLCBbXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCc6ZW50ZXInLCBbc3R5bGUoe29wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3NjYWxlWSgwLjgpJ30pLCBhbmltYXRlKCcuMTJzIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpJyldKSxcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJzpsZWF2ZScsIFthbmltYXRlKCcuMXMgbGluZWFyJywgc3R5bGUoe29wYWNpdHk6IDB9KSldKVxuICAgICAgICBdKVxuICAgIF0sXG4gICAgcHJvdmlkZXJzOiBbRmlsdGVyU2VydmljZV0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUZpbHRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICAgcHVibGljIHJlYWRvbmx5IGxvb2t1cFR5cGVEcm9wZG93bjogRmlsdGVyTG9va3VwVHlwZUVudW0gPSBGaWx0ZXJMb29rdXBUeXBlRW51bS5Ecm9wZG93bjtcbiAgICBwdWJsaWMgcmVhZG9ubHkgbG9va3VwVHlwZUF1dG9jb21wbGV0ZTogRmlsdGVyTG9va3VwVHlwZUVudW0gPSBGaWx0ZXJMb29rdXBUeXBlRW51bS5BdXRvY29tcGxldGU7XG4gICAgcHVibGljIHJlYWRvbmx5IEZpbHRlclR5cGVFbnVtID0gRmlsdGVyVHlwZUVudW07XG4gICAgcHVibGljIHJlYWRvbmx5IEZpbHRlck1hdGNoTW9kZSA9IEZpbHRlck1hdGNoTW9kZTtcblxuICAgIHJlYWRvbmx5ICNlbCA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgICByZWFkb25seSAjcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcbiAgICByZWFkb25seSAjb3ZlcmxheVNlcnZpY2UgPSBpbmplY3QoT3ZlcmxheVNlcnZpY2UpO1xuICAgIHJlYWRvbmx5ICNjZCA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gICAgcmVhZG9ubHkgI3RhYmxlTWV0YWRhdGEgPSBpbmplY3QoVGFibGVNZXRhZGF0YVNlcnZpY2UpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBmaWx0ZXIgPSBpbmplY3QoRmlsdGVyU2VydmljZSk7XG5cbiAgICByZWFkb25seSAjZG9jdW1lbnQ6IERvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuICAgIHJlYWRvbmx5ICN3aW5kb3cgPSB0aGlzLiNkb2N1bWVudC5kZWZhdWx0VmlldyBhcyBXaW5kb3c7XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgY29uZmlnID0gaW5wdXQucmVxdWlyZWQ8RmlsdGVyQ29uZmlnPigpO1xuICAgIHB1YmxpYyByZWFkb25seSBtb2RlbCA9IGlucHV0LnJlcXVpcmVkPE1vZGVsRGVzY3JpcHRvcjxhbnk+PigpO1xuICAgIHB1YmxpYyByZWFkb25seSBzaG93RmlsdGVySWNvbiA9IGlucHV0KGZhbHNlLCB7dHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlfSk7XG4gICAgcHVibGljIHJlYWRvbmx5IHNob3dUaXRsZUFzUGxhY2Vob2xkZXIgPSBpbnB1dChmYWxzZSwge3RyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZX0pO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBkZXNjcmlwdG9yQXNMb29rdXAgPSBjb21wdXRlZCgoKSA9PlxuICAgICAgICB0aGlzLmNvbmZpZygpLmRlc2NyaXB0b3IgaW5zdGFuY2VvZiBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yID8gKHRoaXMuY29uZmlnKCkuZGVzY3JpcHRvciBhcyBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yPGFueSwgYW55PikgOiB1bmRlZmluZWRcbiAgICApO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaWNvbiA9IHZpZXdDaGlsZDxOdWxsYWJsZTxFbGVtZW50UmVmPj4oJ2ljb24nKTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBtYXRjaE1vZGVzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb25maWcoKS5tYXRjaE1vZGVzKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNJbnB1dERpc2FibGVkID0gY29tcHV0ZWQoXG4gICAgICAgICgpID0+IHRoaXMuZmlsdGVyLnN0YXRlKCk/Lm1hdGNoTW9kZSA9PT0gRmlsdGVyTWF0Y2hNb2RlLkV4aXN0cyB8fCB0aGlzLmZpbHRlci5zdGF0ZSgpPy5tYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5Eb2VzTm90RXhpc3RcbiAgICApO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBvdmVybGF5VmlzaWJsZSA9IHNpZ25hbChmYWxzZSk7XG5cbiAgICAvLyBkaXNwbGF5IGNvbmZpZ3NcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNNdWx0aXNlbGVjdCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgZnQgPSB0aGlzLmZpbHRlci5zdGF0ZSgpO1xuICAgICAgICBjb25zdCBtYXRjaE1vZGUgPSBmdD8uZGlzcGxheU1hdGNoTW9kZSA/PyB0aGlzLmNvbmZpZygpLmRlZmF1bHRNYXRjaE1vZGU7XG4gICAgICAgIHJldHVybiAobWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuSW4gfHwgbWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuTm90SW4pICYmIChmdD8uZGlzcGxheVZhbHVlID09IG51bGwgfHwgQXJyYXkuaXNBcnJheShmdC5kaXNwbGF5VmFsdWUpKTtcbiAgICB9KTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGxhY2Vob2xkZXJLZXkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSB0aGlzLmNvbmZpZygpLmRlc2NyaXB0b3I7XG4gICAgICAgIGxldCBkZWZhdWx0UGxhY2Vob2xkZXJLZXkgPSAnbW5nVGFibGUudHlwZVRvRmlsdGVyJztcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvckFzTG9va3VwID0gdGhpcy5kZXNjcmlwdG9yQXNMb29rdXAoKTtcbiAgICAgICAgaWYgKGRlc2NyaXB0b3JBc0xvb2t1cCkge1xuICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3JBc0xvb2t1cC5sb29rdXBUeXBlID09PSBGaWx0ZXJMb29rdXBUeXBlRW51bS5BdXRvY29tcGxldGUpIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0UGxhY2Vob2xkZXJLZXkgPSAnbW5nVGFibGUuc2VhcmNoVG9GaWx0ZXInO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChkZXNjcmlwdG9yQXNMb29rdXAubG9va3VwVHlwZSA9PT0gRmlsdGVyTG9va3VwVHlwZUVudW0uRHJvcGRvd24pIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0UGxhY2Vob2xkZXJLZXkgPSAnbW5nVGFibGUuc2VsZWN0VG9GaWx0ZXInO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGRlc2NyaXB0b3IuZmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZUVudW0uQm9vbGVhbikge1xuICAgICAgICAgICAgZGVmYXVsdFBsYWNlaG9sZGVyS2V5ID0gJ21uZ1RhYmxlLnNlbGVjdFRvRmlsdGVyJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnNob3dUaXRsZUFzUGxhY2Vob2xkZXIoKSA/IHRoaXMuI2dldFByb3BlcnR5TGFiZWxLZXkodGhpcy5jb25maWcoKS5kZXNjcmlwdG9yKSA6IGRlZmF1bHRQbGFjZWhvbGRlcktleTtcbiAgICB9KTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBib29sZWFuT3B0aW9uczogQm9vbGVhbkZpbHRlckRyb3Bkb3duSXRlbVtdID0gW1xuICAgICAgICB7bGFiZWw6ICdnZW5lcmFsLnllcycsIHZhbHVlOiB0cnVlfSxcbiAgICAgICAge2xhYmVsOiAnZ2VuZXJhbC5ubycsIHZhbHVlOiBmYWxzZX1cbiAgICBdO1xuXG4gICAgI292ZXJsYXlTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgI292ZXJsYXk6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkIHwgbnVsbDtcbiAgICAjc2Nyb2xsSGFuZGxlcj86IENvbm5lY3RlZE92ZXJsYXlTY3JvbGxIYW5kbGVyIHwgbnVsbDtcbiAgICAjZG9jdW1lbnRDbGlja0xpc3RlbmVyOiBWb2lkTGlzdGVuZXI7XG4gICAgI2RvY3VtZW50UmVzaXplTGlzdGVuZXI6IFZvaWRMaXN0ZW5lcjtcbiAgICAjcmVzZXRTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgI3NlbGZDbGljaz86IGJvb2xlYW47XG4gICAgI292ZXJsYXlFdmVudExpc3RlbmVyOiBhbnk7XG5cbiAgICAjbnVtZXJpY1ZhbHVlRnJvbU1vZGVsQ2hhbmdlOiBudW1iZXIgfCBudW1iZXJbXSB8IG51bGwgPSBudWxsO1xuICAgICNkYXRlRGVib3VuY2VTdWJqZWN0ID0gbmV3IFN1YmplY3Q8RGF0ZSB8IERhdGVbXSB8IG51bGw+KCk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgbm9GaWx0ZXJMYWJlbCA9IHNpZ25hbCh0aGlzLiN0YWJsZU1ldGFkYXRhLnByaW1lQ29uZmlnLmdldFRyYW5zbGF0aW9uKFRyYW5zbGF0aW9uS2V5cy5OT19GSUxURVIpKTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBlZmZlY3RXaXRoRGVwcyhbdGhpcy5jb25maWddLCAoW2NvbmZpZ10pID0+IHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyLnNldENvbmZpZyhjb25maWcpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLiNkYXRlRGVib3VuY2VTdWJqZWN0LnBpcGUoZGVib3VuY2VUaW1lKDUwMCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUodiA9PiB0aGlzLmZpbHRlci5zZXREaXNwbGF5VmFsdWUodikpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy4jb3ZlcmxheSkge1xuICAgICAgICAgICAgdGhpcy4jcmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy4jZWwubmF0aXZlRWxlbWVudCwgdGhpcy4jb3ZlcmxheSk7XG4gICAgICAgICAgICBaSW5kZXhVdGlscy5jbGVhcih0aGlzLiNvdmVybGF5KTtcbiAgICAgICAgICAgIHRoaXMuI29uT3ZlcmxheUhpZGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuI3Jlc2V0U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLiNvdmVybGF5U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvblRleHRNb2RlbENoYW5nZShldmVudDogRXZlbnQpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlci5zZXREaXNwbGF5VmFsdWUodmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uVGV4dElucHV0RW50ZXJLZXlEb3duKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gICAgICAgIHRoaXMuZmlsdGVyLnNldERpc3BsYXlWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uTnVtZXJpY01vZGVsQ2hhbmdlKHZhbHVlOiBudW1iZXIgfCBudWxsKSB7XG4gICAgICAgIHRoaXMuI251bWVyaWNWYWx1ZUZyb21Nb2RlbENoYW5nZSA9IHZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyLnNldERpc3BsYXlWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25OdW1lcmljSW5wdXRLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlci5zdGF0ZSgpPy5kaXNwbGF5TWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuQmV0d2VlbiAmJiBBcnJheS5pc0FycmF5KHRoaXMuI251bWVyaWNWYWx1ZUZyb21Nb2RlbENoYW5nZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBudW1iZXJWYWx1ZXMgPSB0aGlzLiNudW1lcmljVmFsdWVGcm9tTW9kZWxDaGFuZ2UuZmlsdGVyKHYgPT4gdHlwZW9mIHYgPT09ICdudW1iZXInKTtcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyVmFsdWVzLmxlbmd0aCAhPT0gMikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5maWx0ZXIuc2V0RGlzcGxheVZhbHVlKHRoaXMuI251bWVyaWNWYWx1ZUZyb21Nb2RlbENoYW5nZSk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uRGF0ZUZpbHRlck1vZGVsQ2hhbmdlKHZhbHVlOiBEYXRlIHwgRGF0ZVtdIHwgbnVsbCkge1xuICAgICAgICBpZiAodGhpcy5maWx0ZXIuc3RhdGUoKT8uZGlzcGxheU1hdGNoTW9kZSA9PT0gRmlsdGVyTWF0Y2hNb2RlLkJldHdlZW4gJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGVWYWx1ZXMgPSB2YWx1ZS5maWx0ZXIodiA9PiB2IGluc3RhbmNlb2YgRGF0ZSk7XG4gICAgICAgICAgICBpZiAoZGF0ZVZhbHVlcy5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jZGF0ZURlYm91bmNlU3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYm9vbGVhbkZpbHRlcih2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMuZmlsdGVyLnNldERpc3BsYXlWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGF1dG9jb21wbGV0ZUZpbHRlcih2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMuZmlsdGVyLnNldERpc3BsYXlWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGRyb3Bkb3duRmlsdGVyKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5maWx0ZXIuc2V0RGlzcGxheVZhbHVlKHZhbHVlKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25NYXRjaE1vZGVDaGFuZ2UoZGlzcGxheU1hdGNoTW9kZTogRmlsdGVyTWF0Y2hNb2RlRXh0ZW5kZWRUeXBlKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyLnNldE1hdGNoTW9kZShkaXNwbGF5TWF0Y2hNb2RlKTtcbiAgICAgICAgdGhpcy4jaGlkZU92ZXJsYXkoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25NYXRjaE1vZGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSA8SFRNTExJRWxlbWVudD5ldmVudC50YXJnZXQ7XG5cbiAgICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNhc2UtZGVjbGFyYXRpb25zXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dEl0ZW0gPSB0aGlzLiNmaW5kTmV4dE1lbnVNb2RlSXRlbShpdGVtKTtcbiAgICAgICAgICAgICAgICBpZiAobmV4dEl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5yZW1vdmVBdHRyaWJ1dGUoJ3RhYmluZGV4Jyk7XG4gICAgICAgICAgICAgICAgICAgIG5leHRJdGVtLnRhYkluZGV4ID0gJzAnO1xuICAgICAgICAgICAgICAgICAgICBuZXh0SXRlbS5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jYXNlLWRlY2xhcmF0aW9uc1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZJdGVtID0gdGhpcy4jZmluZFByZXZNZW51TW9kZUl0ZW0oaXRlbSk7XG4gICAgICAgICAgICAgICAgaWYgKHByZXZJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0ucmVtb3ZlQXR0cmlidXRlKCd0YWJpbmRleCcpO1xuICAgICAgICAgICAgICAgICAgICBwcmV2SXRlbS50YWJJbmRleCA9ICcwJztcbiAgICAgICAgICAgICAgICAgICAgcHJldkl0ZW0uZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uQ2FzZVNlbnNpdGl2aXR5VG9nZ2xlKCkge1xuICAgICAgICB0aGlzLmZpbHRlci50b2dnbGVDYXNlU2Vuc2l0aXZpdHkoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuI2hpZGVPdmVybGF5KCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHRvZ2dsZU1lbnUoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIHRoaXMub3ZlcmxheVZpc2libGUuc2V0KCF0aGlzLm92ZXJsYXlWaXNpYmxlKCkpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25Ub2dnbGVCdXR0b25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICAgICAgY2FzZSAnVGFiJzpcbiAgICAgICAgICAgICAgICB0aGlzLm92ZXJsYXlWaXNpYmxlLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3ZlcmxheVZpc2libGUoKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb2N1c2FibGUgPSBEb21IYW5kbGVyLmdldEZvY3VzYWJsZUVsZW1lbnRzKDxIVE1MRWxlbWVudD50aGlzLiNvdmVybGF5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvY3VzYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNhYmxlWzBdLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmFsdEtleSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm92ZXJsYXlWaXNpYmxlLnNldCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25Fc2NhcGUoKSB7XG4gICAgICAgIHRoaXMub3ZlcmxheVZpc2libGUuc2V0KGZhbHNlKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25Db250ZW50Q2xpY2soKSB7XG4gICAgICAgIHRoaXMuI3NlbGZDbGljayA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gb25PdmVybGF5QW5pbWF0aW9uU3RhcnQoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KSB7XG4gICAgcHJvdGVjdGVkIG9uT3ZlcmxheUFuaW1hdGlvblN0YXJ0KGV2ZW50OiBhbnkpIHtcbiAgICAgICAgc3dpdGNoIChldmVudC50b1N0YXRlKSB7XG4gICAgICAgICAgICBjYXNlICd2aXNpYmxlJzpcbiAgICAgICAgICAgICAgICB0aGlzLiNvdmVybGF5ID0gZXZlbnQuZWxlbWVudDtcbiAgICAgICAgICAgICAgICB0aGlzLiNyZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLiNkb2N1bWVudC5ib2R5LCB0aGlzLiNvdmVybGF5KTtcbiAgICAgICAgICAgICAgICBaSW5kZXhVdGlscy5zZXQoJ292ZXJsYXknLCB0aGlzLiNvdmVybGF5LCB0aGlzLiN0YWJsZU1ldGFkYXRhLnByaW1lQ29uZmlnLnpJbmRleC5vdmVybGF5KTtcbiAgICAgICAgICAgICAgICBEb21IYW5kbGVyLmFic29sdXRlUG9zaXRpb24odGhpcy4jb3ZlcmxheSwgdGhpcy5pY29uKCk/Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuI2JpbmREb2N1bWVudENsaWNrTGlzdGVuZXIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLiNiaW5kRG9jdW1lbnRSZXNpemVMaXN0ZW5lcigpO1xuICAgICAgICAgICAgICAgIHRoaXMuI2JpbmRTY3JvbGxMaXN0ZW5lcigpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy4jb3ZlcmxheUV2ZW50TGlzdGVuZXIgPSAoZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiNvdmVybGF5ICYmIHRoaXMuI292ZXJsYXkuY29udGFpbnMoZS50YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNzZWxmQ2xpY2sgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHRoaXMuI292ZXJsYXlTdWJzY3JpcHRpb24gPSB0aGlzLiNvdmVybGF5U2VydmljZS5jbGlja09ic2VydmFibGUuc3Vic2NyaWJlKHRoaXMuI292ZXJsYXlFdmVudExpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAndm9pZCc6XG4gICAgICAgICAgICAgICAgdGhpcy4jb25PdmVybGF5SGlkZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuI292ZXJsYXlTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBvbk92ZXJsYXlBbmltYXRpb25FbmQoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KSB7XG4gICAgcHJvdGVjdGVkIG9uT3ZlcmxheUFuaW1hdGlvbkVuZChldmVudDogYW55KSB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQudG9TdGF0ZSkge1xuICAgICAgICAgICAgY2FzZSAndm9pZCc6XG4gICAgICAgICAgICAgICAgWkluZGV4VXRpbHMuY2xlYXIoZXZlbnQuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAjZmluZE5leHRNZW51TW9kZUl0ZW0oaXRlbTogSFRNTExJRWxlbWVudCk6IGFueSB7XG4gICAgICAgIGNvbnN0IG5leHRJdGVtID0gPEhUTUxMSUVsZW1lbnQ+aXRlbS5uZXh0RWxlbWVudFNpYmxpbmc7XG5cbiAgICAgICAgaWYgKG5leHRJdGVtKSByZXR1cm4gRG9tSGFuZGxlci5oYXNDbGFzcyhuZXh0SXRlbSwgJ3AtY29sdW1uLWZpbHRlci1zZXBhcmF0b3InKSA/IHRoaXMuI2ZpbmROZXh0TWVudU1vZGVJdGVtKG5leHRJdGVtKSA6IG5leHRJdGVtO1xuICAgICAgICBlbHNlIHJldHVybiBpdGVtLnBhcmVudEVsZW1lbnQ/LmZpcnN0RWxlbWVudENoaWxkO1xuICAgIH1cblxuICAgICNmaW5kUHJldk1lbnVNb2RlSXRlbShpdGVtOiBIVE1MTElFbGVtZW50KTogYW55IHtcbiAgICAgICAgY29uc3QgcHJldkl0ZW0gPSA8SFRNTExJRWxlbWVudD5pdGVtLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XG5cbiAgICAgICAgaWYgKHByZXZJdGVtKSByZXR1cm4gRG9tSGFuZGxlci5oYXNDbGFzcyhwcmV2SXRlbSwgJ3AtY29sdW1uLWZpbHRlci1zZXBhcmF0b3InKSA/IHRoaXMuI2ZpbmRQcmV2TWVudU1vZGVJdGVtKHByZXZJdGVtKSA6IHByZXZJdGVtO1xuICAgICAgICBlbHNlIHJldHVybiBpdGVtLnBhcmVudEVsZW1lbnQ/Lmxhc3RFbGVtZW50Q2hpbGQ7XG4gICAgfVxuXG4gICAgI2lzT3V0c2lkZUNsaWNrZWQoZXZlbnQ6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIShcbiAgICAgICAgICAgIHRoaXMuI292ZXJsYXk/LmlzU2FtZU5vZGUoZXZlbnQudGFyZ2V0KSB8fFxuICAgICAgICAgICAgdGhpcy4jb3ZlcmxheT8uY29udGFpbnMoZXZlbnQudGFyZ2V0KSB8fFxuICAgICAgICAgICAgdGhpcy5pY29uKCk/Lm5hdGl2ZUVsZW1lbnQuaXNTYW1lTm9kZShldmVudC50YXJnZXQpIHx8XG4gICAgICAgICAgICB0aGlzLmljb24oKT8ubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpIHx8XG4gICAgICAgICAgICBEb21IYW5kbGVyLmhhc0NsYXNzKGV2ZW50LnRhcmdldCwgJ3AtY29sdW1uLWZpbHRlci1hZGQtYnV0dG9uJykgfHxcbiAgICAgICAgICAgIERvbUhhbmRsZXIuaGFzQ2xhc3MoZXZlbnQudGFyZ2V0LnBhcmVudEVsZW1lbnQsICdwLWNvbHVtbi1maWx0ZXItYWRkLWJ1dHRvbicpIHx8XG4gICAgICAgICAgICBEb21IYW5kbGVyLmhhc0NsYXNzKGV2ZW50LnRhcmdldCwgJ3AtY29sdW1uLWZpbHRlci1yZW1vdmUtYnV0dG9uJykgfHxcbiAgICAgICAgICAgIERvbUhhbmRsZXIuaGFzQ2xhc3MoZXZlbnQudGFyZ2V0LnBhcmVudEVsZW1lbnQsICdwLWNvbHVtbi1maWx0ZXItcmVtb3ZlLWJ1dHRvbicpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgI2JpbmREb2N1bWVudENsaWNrTGlzdGVuZXIoKSB7XG4gICAgICAgIGlmICghdGhpcy4jZG9jdW1lbnRDbGlja0xpc3RlbmVyKSB7XG4gICAgICAgICAgICBjb25zdCBkb2N1bWVudFRhcmdldDogYW55ID0gdGhpcy4jZWwgPyB0aGlzLiNlbC5uYXRpdmVFbGVtZW50Lm93bmVyRG9jdW1lbnQgOiAnZG9jdW1lbnQnO1xuXG4gICAgICAgICAgICB0aGlzLiNkb2N1bWVudENsaWNrTGlzdGVuZXIgPSB0aGlzLiNyZW5kZXJlci5saXN0ZW4oZG9jdW1lbnRUYXJnZXQsICdjbGljaycsIGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vdmVybGF5VmlzaWJsZSgpICYmICF0aGlzLiNzZWxmQ2xpY2sgJiYgdGhpcy4jaXNPdXRzaWRlQ2xpY2tlZChldmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jaGlkZU92ZXJsYXkoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLiNzZWxmQ2xpY2sgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgI3VuYmluZERvY3VtZW50Q2xpY2tMaXN0ZW5lcigpIHtcbiAgICAgICAgaWYgKHRoaXMuI2RvY3VtZW50Q2xpY2tMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGhpcy4jZG9jdW1lbnRDbGlja0xpc3RlbmVyKCk7XG4gICAgICAgICAgICB0aGlzLiNkb2N1bWVudENsaWNrTGlzdGVuZXIgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy4jc2VsZkNsaWNrID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAjYmluZERvY3VtZW50UmVzaXplTGlzdGVuZXIoKSB7XG4gICAgICAgIGlmICghdGhpcy4jZG9jdW1lbnRSZXNpemVMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGhpcy4jZG9jdW1lbnRSZXNpemVMaXN0ZW5lciA9IHRoaXMuI3JlbmRlcmVyLmxpc3Rlbih0aGlzLiN3aW5kb3csICdyZXNpemUnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3ZlcmxheVZpc2libGUoKSAmJiAhRG9tSGFuZGxlci5pc1RvdWNoRGV2aWNlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jaGlkZU92ZXJsYXkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICN1bmJpbmREb2N1bWVudFJlc2l6ZUxpc3RlbmVyKCkge1xuICAgICAgICBpZiAodGhpcy4jZG9jdW1lbnRSZXNpemVMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGhpcy4jZG9jdW1lbnRSZXNpemVMaXN0ZW5lcigpO1xuICAgICAgICAgICAgdGhpcy4jZG9jdW1lbnRSZXNpemVMaXN0ZW5lciA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAjYmluZFNjcm9sbExpc3RlbmVyKCkge1xuICAgICAgICBpZiAoIXRoaXMuI3Njcm9sbEhhbmRsZXIpIHtcbiAgICAgICAgICAgIHRoaXMuI3Njcm9sbEhhbmRsZXIgPSBuZXcgQ29ubmVjdGVkT3ZlcmxheVNjcm9sbEhhbmRsZXIodGhpcy5pY29uKCk/Lm5hdGl2ZUVsZW1lbnQsICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vdmVybGF5VmlzaWJsZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2hpZGVPdmVybGF5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLiNzY3JvbGxIYW5kbGVyLmJpbmRTY3JvbGxMaXN0ZW5lcigpO1xuICAgIH1cblxuICAgICN1bmJpbmRTY3JvbGxMaXN0ZW5lcigpIHtcbiAgICAgICAgaWYgKHRoaXMuI3Njcm9sbEhhbmRsZXIpIHtcbiAgICAgICAgICAgIHRoaXMuI3Njcm9sbEhhbmRsZXIudW5iaW5kU2Nyb2xsTGlzdGVuZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICNoaWRlT3ZlcmxheSgpIHtcbiAgICAgICAgdGhpcy5vdmVybGF5VmlzaWJsZS5zZXQoZmFsc2UpO1xuICAgICAgICB0aGlzLiNjZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAjb25PdmVybGF5SGlkZSgpIHtcbiAgICAgICAgdGhpcy4jdW5iaW5kRG9jdW1lbnRDbGlja0xpc3RlbmVyKCk7XG4gICAgICAgIHRoaXMuI3VuYmluZERvY3VtZW50UmVzaXplTGlzdGVuZXIoKTtcbiAgICAgICAgdGhpcy4jdW5iaW5kU2Nyb2xsTGlzdGVuZXIoKTtcbiAgICAgICAgdGhpcy4jb3ZlcmxheSA9IG51bGw7XG4gICAgfVxuXG4gICAgI2dldFByb3BlcnR5TGFiZWxLZXkoZmlsdGVyRGVzY3JpcHRvcjogRmlsdGVyRGVzY3JpcHRvcjxhbnksIGFueT4pIHtcbiAgICAgICAgbGV0IGxhYmVsS2V5OiBzdHJpbmc7XG4gICAgICAgIGlmIChmaWx0ZXJEZXNjcmlwdG9yLnRpdGxlICE9PSB1bmRlZmluZWQgJiYgIWZpbHRlckRlc2NyaXB0b3IudGl0bGVVc2VNb2RlbEJhc2UpIHtcbiAgICAgICAgICAgIGxhYmVsS2V5ID0gZmlsdGVyRGVzY3JpcHRvci50aXRsZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxhYmVsS2V5ID0gZ2V0STE4blR5cGVQcm9wZXJ0eUtleSh0aGlzLm1vZGVsKCkuaTE4bkJhc2VLZXksIGZpbHRlckRlc2NyaXB0b3IudGl0bGUgPz8gZmlsdGVyRGVzY3JpcHRvci5wcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxhYmVsS2V5O1xuICAgIH1cbn1cblxuaW50ZXJmYWNlIEJvb2xlYW5GaWx0ZXJEcm9wZG93bkl0ZW0ge1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgdmFsdWU6IGJvb2xlYW47XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICBAbGV0IHJlcXVpcmVkRmlsdGVyTWlzc2luZyA9IGNvbmZpZygpLmRlc2NyaXB0b3IuaXNSZXF1aXJlZCAmJiAhZmlsdGVyLmlzQWN0aXZlKCk7XG4gICAgQGxldCBwbGFjZWhvbGRlciA9IChwbGFjZWhvbGRlcktleSgpIHwgdHJhbnNsYXRlKSArIChjb25maWcoKS5kZXNjcmlwdG9yLmlzUmVxdWlyZWQgPyAnIConIDogJycpO1xuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBbJl9wLWlucHV0Z3JvdXAtYWRkb25dOnAtMCFcIlxuICAgICAgICBbbmdDbGFzc109XCJmaWx0ZXIuaXNBY3RpdmUoKSA/ICdbJl8qXTpib3JkZXItcHJpbWFyeS02MDAhIFsmXypdOmJnLXByaW1hcnktNTAhJyA6ICcnXCJcbiAgICAgICAgW2NsYXNzLlsmXypdOmJvcmRlci1yZWQtNTAwIV09XCJyZXF1aXJlZEZpbHRlck1pc3NpbmdcIlxuICAgICAgICBbY2xhc3MubW5nLWZpbHRlci1yZXF1aXJlZF09XCJyZXF1aXJlZEZpbHRlck1pc3NpbmdcIj5cbiAgICAgICAgQHN3aXRjaCAoY29uZmlnKCkuZGVzY3JpcHRvci5maWx0ZXJUeXBlKSB7XG4gICAgICAgICAgICBAY2FzZSAoRmlsdGVyVHlwZUVudW0uTnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgQGlmIChmaWx0ZXIuc3RhdGUoKT8uZGlzcGxheU1hdGNoTW9kZSA9PT0gJ2JldHdlZW4nKSB7XG4gICAgICAgICAgICAgICAgICAgIDxtbmctbnVtYmVyLXJhbmdlXG4gICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbD1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibW5nLWZpbHRlci1udW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZmlsdGVyLnN0YXRlKCk/LmRpc3BsYXlWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbk51bWVyaWNNb2RlbENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXlEb3duKT1cIm9uTnVtZXJpY0lucHV0S2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdXNlR3JvdXBpbmddPVwiY29uZmlnKCkuZGVzY3JpcHRvci5udW1iZXJVc2VHcm91cGluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWluRnJhY3Rpb25EaWdpdHNdPVwiY29uZmlnKCkubnVtYmVyQ29uZmlnPy5mcmFjdGlvbnNNaW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21heEZyYWN0aW9uRGlnaXRzXT1cImNvbmZpZygpLm51bWJlckNvbmZpZz8uZnJhY3Rpb25zTWF4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0lucHV0RGlzYWJsZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGVtcGxhdGVzXT1cInNob3dGaWx0ZXJJY29uKCkgPyBbbnVtYmVyUmFuZ2VQcmVwZW5kSWNvbl0gOiBbXVwiIC8+XG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIDxwLWlucHV0Z3JvdXA+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHNob3dGaWx0ZXJJY29uKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cC1pbnB1dGdyb3VwLWFkZG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaWNvblRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wLWlucHV0Z3JvdXAtYWRkb24+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8cC1pbnB1dE51bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0U3R5bGVDbGFzcz1cIm1uZy1maWx0ZXItbnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJmaWx0ZXIuc3RhdGUoKT8uZGlzcGxheVZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbk51bWVyaWNNb2RlbENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25LZXlEb3duKT1cIm9uTnVtZXJpY0lucHV0S2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt1c2VHcm91cGluZ109XCJjb25maWcoKS5kZXNjcmlwdG9yLm51bWJlclVzZUdyb3VwaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWluRnJhY3Rpb25EaWdpdHNdPVwiY29uZmlnKCkubnVtYmVyQ29uZmlnPy5mcmFjdGlvbnNNaW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXhGcmFjdGlvbkRpZ2l0c109XCJjb25maWcoKS5udW1iZXJDb25maWc/LmZyYWN0aW9uc01heFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzSW5wdXREaXNhYmxlZCgpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9wLWlucHV0Z3JvdXA+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAY2FzZSAoRmlsdGVyVHlwZUVudW0uQm9vbGVhbikge1xuICAgICAgICAgICAgICAgIDxtbmctZHJvcGRvd25cbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uc0xhYmVsUHJvcGVydHk9XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnNWYWx1ZVByb3BlcnR5PVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJmaWx0ZXIuc3RhdGUoKT8uZGlzcGxheVZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiYm9vbGVhbk9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc0xhYmVsVHJhbnNsYXRlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNJbnB1dERpc2FibGVkKClcIlxuICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiYm9vbGVhbkZpbHRlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW3RlbXBsYXRlc109XCJzaG93RmlsdGVySWNvbigpID8gW2Ryb3Bkb3duUHJlcGVuZEljb25dIDogW11cIj5cbiAgICAgICAgICAgICAgICA8L21uZy1kcm9wZG93bj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBjYXNlIChGaWx0ZXJUeXBlRW51bS5EYXRlKSB7XG4gICAgICAgICAgICAgICAgQGlmIChmaWx0ZXIuc3RhdGUoKT8uZGlzcGxheU1hdGNoTW9kZSA9PT0gRmlsdGVyTWF0Y2hNb2RlLkJldHdlZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgPG1uZy1kYXRlLXJhbmdlXG4gICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbD1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZmlsdGVyLnN0YXRlKCk/LmRpc3BsYXlWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkRhdGVGaWx0ZXJNb2RlbENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93VGltZV09XCJjb25maWcoKS5kYXRlQ29uZmlnPy5zaG93VGltZSA/PyBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1NlY29uZHNdPVwiY29uZmlnKCkuZGF0ZUNvbmZpZz8uc2hvd1NlY29uZHMgPz8gZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGVGb3JtYXRdPVwiY29uZmlnKCkuZGF0ZUNvbmZpZz8uZm9ybWF0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNJbnB1dERpc2FibGVkKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RlbXBsYXRlc109XCJzaG93RmlsdGVySWNvbigpID8gW2RhdGVSYW5nZVByZXBlbmRJY29uXSA6IFtdXCIgLz5cbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgPHAtaW5wdXRncm91cD5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoc2hvd0ZpbHRlckljb24oKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLWlucHV0Z3JvdXAtYWRkb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpY29uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3AtaW5wdXRncm91cC1hZGRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwLWRhdGUtcGlja2VyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG89XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJmaWx0ZXIuc3RhdGUoKT8uZGlzcGxheVZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkRhdGVGaWx0ZXJNb2RlbENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93SWNvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRTdHlsZV09XCJ7Ym9yZGVyVG9wUmlnaHRSYWRpdXM6ICcwJywgYm9yZGVyQm90dG9tUmlnaHRSYWRpdXM6ICcwJ31cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93VGltZV09XCJjb25maWcoKS5kYXRlQ29uZmlnPy5zaG93VGltZSA/PyBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dTZWNvbmRzXT1cImNvbmZpZygpLmRhdGVDb25maWc/LnNob3dTZWNvbmRzID8/IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0ZUZvcm1hdF09XCJjb25maWcoKS5kYXRlQ29uZmlnPy5mb3JtYXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaXJzdERheU9mV2Vla109XCIxXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3AtZGF0ZS1waWNrZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvcC1pbnB1dGdyb3VwPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBjYXNlIChGaWx0ZXJUeXBlRW51bS5Mb29rdXApIHtcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9va3VwRmlsdGVyXCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBjYXNlIChGaWx0ZXJUeXBlRW51bS5Mb29rdXBFbnVtKSB7XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxvb2t1cEZpbHRlclwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAZGVmYXVsdCB7XG4gICAgICAgICAgICAgICAgPHAtaW5wdXRncm91cD5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChzaG93RmlsdGVySWNvbigpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8cC1pbnB1dGdyb3VwLWFkZG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpY29uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcC1pbnB1dGdyb3VwLWFkZG9uPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcElucHV0VGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtbmctZmlsdGVyLXN0cmluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZmlsdGVyLnN0YXRlKCk/LmRpc3BsYXlWYWx1ZSA/PyAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNJbnB1dERpc2FibGVkKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uVGV4dE1vZGVsQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25UZXh0SW5wdXRFbnRlcktleURvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5wbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbW5nSW5wdXRUcmltXT1cImNvbmZpZygpLmRlc2NyaXB0b3IudHJpbU9wdGlvblwiIC8+XG4gICAgICAgICAgICAgICAgPC9wLWlucHV0Z3JvdXA+XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICA8bmctdGVtcGxhdGUgI2xvb2t1cEZpbHRlcj5cbiAgICAgICAgICAgIEBpZiAoZGVzY3JpcHRvckFzTG9va3VwKCk7IGFzIGxvb2t1cCkge1xuICAgICAgICAgICAgICAgIEBzd2l0Y2ggKGxvb2t1cC5sb29rdXBUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIEBjYXNlIChsb29rdXBUeXBlQXV0b2NvbXBsZXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8bW5nLWF1dG9jb21wbGV0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICptbmdSZXJlbmRlcj1cImlzTXVsdGlzZWxlY3QoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZmlsdGVyLnN0YXRlKCk/LmRpc3BsYXlWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFQcm92aWRlcl09XCJsb29rdXAuZGF0YVByb3ZpZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc1RyYWNrUHJvcGVydHldPVwibG9va3VwLm9wdGlvbnNWYWx1ZVByb3BlcnR5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc1ZhbHVlUHJvcGVydHldPVwibG9va3VwLm9wdGlvbnNWYWx1ZVByb3BlcnR5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc0xhYmVsUHJvcGVydHldPVwibG9va3VwLm9wdGlvbnNMYWJlbFByb3BlcnR5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc0xhYmVsVHJhbnNsYXRlXT1cImxvb2t1cC5vcHRpb25zTGFiZWxUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttdWx0aXNlbGVjdF09XCJpc011bHRpc2VsZWN0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvQ2xlYXJdPVwibG9va3VwLmF1dG9jb21wbGV0ZUF1dG9DbGVhciA/PyBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wZW5PbkZvY3VzXT1cImxvb2t1cC5hdXRvY29tcGxldGVBdXRvQ2xlYXIgPz8gdHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubGluZVNlYXJjaF09XCJsb29rdXAuYXV0b2NvbXBsZXRlSW5saW5lU2VhcmNoID8/IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc05hbWVdPVwibG9va3VwLmNsYXNzTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Ryb3Bkb3duQ2xhc3NOYW1lXT1cImxvb2t1cC5kcm9wZG93bkNsYXNzTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzSW5wdXREaXNhYmxlZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiYXV0b2NvbXBsZXRlRmlsdGVyKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hUcmltXT1cImNvbmZpZygpLmRlc2NyaXB0b3IudHJpbU9wdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RlbXBsYXRlc109XCJzaG93RmlsdGVySWNvbigpID8gW2F1dG9jb21wbGV0ZVByZXBlbmRJY29uXSA6IFtdXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21uZy1hdXRvY29tcGxldGU+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGNhc2UgKGxvb2t1cFR5cGVEcm9wZG93bikge1xuICAgICAgICAgICAgICAgICAgICAgICAgPG1uZy1kcm9wZG93blxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICptbmdSZXJlbmRlcj1cImlzTXVsdGlzZWxlY3QoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZmlsdGVyLnN0YXRlKCk/LmRpc3BsYXlWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFQcm92aWRlcl09XCJsb29rdXAuZGF0YVByb3ZpZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc1ZhbHVlUHJvcGVydHldPVwibG9va3VwLm9wdGlvbnNWYWx1ZVByb3BlcnR5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc0xhYmVsUHJvcGVydHldPVwibG9va3VwLm9wdGlvbnNMYWJlbFByb3BlcnR5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc0xhYmVsVHJhbnNsYXRlXT1cImxvb2t1cC5vcHRpb25zTGFiZWxUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttdWx0aXNlbGVjdF09XCJpc011bHRpc2VsZWN0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzTmFtZV09XCJsb29rdXAuY2xhc3NOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZHJvcGRvd25DbGFzc05hbWVdPVwibG9va3VwLmRyb3Bkb3duQ2xhc3NOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0NsZWFyXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hhbmdlVmFsdWVPbkJsdXJdPVwiaXNNdWx0aXNlbGVjdCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNJbnB1dERpc2FibGVkKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJkcm9wZG93bkZpbHRlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGVtcGxhdGVzXT1cInNob3dGaWx0ZXJJY29uKCkgPyBbZHJvcGRvd25QcmVwZW5kSWNvbl0gOiBbXVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tbmctZHJvcGRvd24+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlIG1uZ0F1dG9jb21wbGV0ZVRlbXBsYXRlIG5hbWU9XCJwcmVwZW5kXCIgI2F1dG9jb21wbGV0ZVByZXBlbmRJY29uPVwibW5nQXV0b2NvbXBsZXRlVGVtcGxhdGVcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpY29uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlIG1uZ0Ryb3Bkb3duVGVtcGxhdGUgbmFtZT1cInByZXBlbmRcIiAjZHJvcGRvd25QcmVwZW5kSWNvbj1cIm1uZ0Ryb3Bkb3duVGVtcGxhdGVcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpY29uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlIG1uZ0RhdGVSYW5nZVRlbXBsYXRlIG5hbWU9XCJwcmVwZW5kXCIgI2RhdGVSYW5nZVByZXBlbmRJY29uPVwibW5nRGF0ZVJhbmdlVGVtcGxhdGVcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpY29uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlIG1uZ051bWJlclJhbmdlVGVtcGxhdGUgbmFtZT1cInByZXBlbmRcIiAjbnVtYmVyUmFuZ2VQcmVwZW5kSWNvbj1cIm1uZ051bWJlclJhbmdlVGVtcGxhdGVcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpY29uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8bmctdGVtcGxhdGUgI2ljb25UZW1wbGF0ZT5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAjaWNvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgcGkgcGktZmlsdGVyIHctZnVsbCBoLWZ1bGwgcm91bmRlZC10bC1tZCByb3VuZGVkLWJsLW1kIGhvdmVyOmJnLXNsYXRlLTUwIVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAndGV4dC1wcmltYXJ5LTcwMCc6IGZpbHRlci5pc0FjdGl2ZSgpLFxuICAgICAgICAgICAgICAgICAgICAndGV4dC1zbGF0ZS00MDAnOiAhZmlsdGVyLmlzQWN0aXZlKClcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlTWVudSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvblRvZ2dsZUJ1dHRvbktleURvd24oJGV2ZW50KVwiPjwvYnV0dG9uPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIEBpZiAob3ZlcmxheVZpc2libGUoKSkge1xuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicC1kYXRhdGFibGUtZmlsdGVyLW92ZXJsYXlcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNvbnRlbnRDbGljaygpXCJcbiAgICAgICAgICAgICAgICBbQG92ZXJsYXlBbmltYXRpb25dPVwiJ3Zpc2libGUnXCJcbiAgICAgICAgICAgICAgICAoQG92ZXJsYXlBbmltYXRpb24uc3RhcnQpPVwib25PdmVybGF5QW5pbWF0aW9uU3RhcnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKEBvdmVybGF5QW5pbWF0aW9uLmRvbmUpPVwib25PdmVybGF5QW5pbWF0aW9uRW5kKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duLmVzY2FwZSk9XCJvbkVzY2FwZSgpXCI+XG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwicC1kYXRhdGFibGUtZmlsdGVyLWNvbnN0cmFpbnQtbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChtYXRjaE1vZGUgb2YgbWF0Y2hNb2RlcygpOyB0cmFjayBtYXRjaE1vZGU7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtZGF0YXRhYmxlLWZpbHRlci1jb25zdHJhaW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MucC1kYXRhdGFibGUtZmlsdGVyLWNvbnN0cmFpbnQtc2VsZWN0ZWRdPVwibWF0Y2hNb2RlLnZhbHVlID09PSBmaWx0ZXIuc3RhdGUoKT8uZGlzcGxheU1hdGNoTW9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTWF0Y2hNb2RlQ2hhbmdlKG1hdGNoTW9kZS52YWx1ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uTWF0Y2hNb2RlS2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJ0aGlzLm9uTWF0Y2hNb2RlQ2hhbmdlKG1hdGNoTW9kZS52YWx1ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImkgPT09IDAgPyAnMCcgOiBudWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbWF0Y2hNb2RlLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoY29uZmlnKCkuZGVzY3JpcHRvci5maWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlRW51bS5TdHJpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInAtZGF0YXRhYmxlLWZpbHRlci1jb25zdHJhaW50LXNlcGFyYXRvclwiIChrZXlkb3duKT1cIm9uTWF0Y2hNb2RlS2V5RG93bigkZXZlbnQpXCI+PC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1kYXRhdGFibGUtZmlsdGVyLWNvbnN0cmFpbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNhc2VTZW5zaXRpdml0eVRvZ2dsZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbk1hdGNoTW9kZUtleURvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25DYXNlU2Vuc2l0aXZpdHlUb2dnbGUoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1yLTJcIj4ge3sgJ21uZ0ZpbHRlci5jYXNlU2Vuc2l0aXZlJyB8IHRyYW5zbGF0ZSB9fSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLXRvZ2dsZS1zd2l0Y2ggW25nTW9kZWxdPVwiZmlsdGVyLnN0YXRlKCk/LmNhc2VTZW5zaXRpdmUgfHwgZmFsc2VcIiBjbGFzcz1cIm1sLWF1dG8gcG9pbnRlci1ldmVudHMtbm9uZVwiPjwvcC10b2dnbGUtc3dpdGNoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwLWRhdGF0YWJsZS1maWx0ZXItY29uc3RyYWludC1zZXBhcmF0b3JcIiAoa2V5ZG93bik9XCJvbk1hdGNoTW9kZUtleURvd24oJGV2ZW50KVwiPjwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInAtZGF0YXRhYmxlLWZpbHRlci1jb25zdHJhaW50XCIgKGNsaWNrKT1cImNsZWFyKClcIiAoa2V5ZG93bik9XCJvbk1hdGNoTW9kZUtleURvd24oJGV2ZW50KVwiIChrZXlkb3duLmVudGVyKT1cImNsZWFyKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IG5vRmlsdGVyTGFiZWwoKSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgIDwvZGl2PlxuXG4gICAgQGlmICghc2hvd0ZpbHRlckljb24oKSkge1xuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAjaWNvblxuICAgICAgICAgICAgY2xhc3M9XCJtbmctZmlsdGVyLW9wdGlvbnMgY3Vyc29yLXBvaW50ZXIgbWwtMVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgJ3RleHQtcHJpbWFyeSc6IGZpbHRlci5pc0FjdGl2ZSgpLFxuICAgICAgICAgICAgICAgICd0ZXh0LXNsYXRlLTQwMCc6ICFmaWx0ZXIuaXNBY3RpdmUoKVxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlTWVudSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChrZXlkb3duKT1cIm9uVG9nZ2xlQnV0dG9uS2V5RG93bigkZXZlbnQpXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWVsbGlwc2lzLXZcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIH1cbjwvZGl2PlxuIl19","import { CurrencyPipe, DatePipe, DecimalPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ElementRef, computed, inject, input } from '@angular/core';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { MessageService } from 'primeng/api';\nimport { ButtonDirective } from 'primeng/button';\nimport { Tooltip } from 'primeng/tooltip';\nimport { BooleanPipe, ComponentDirective, EnumPipe, GetterPipe, JsonPathPipe, TemplatePipe } from '@mediusinc/mng-commons/core';\nimport { ColumnDisplayTypeEnum } from '@mediusinc/mng-commons/table/api';\nimport * as i0 from \"@angular/core\";\nexport class TableColumnValueComponent {\n constructor() {\n this.columnDisplayTypeString = ColumnDisplayTypeEnum.String;\n this.columnDisplayTypeNumber = ColumnDisplayTypeEnum.Number;\n this.columnDisplayTypeCurrency = ColumnDisplayTypeEnum.Currency;\n this.columnDisplayTypeBoolean = ColumnDisplayTypeEnum.Boolean;\n this.columnDisplayTypeDate = ColumnDisplayTypeEnum.Date;\n this.columnDisplayTypeEnum = ColumnDisplayTypeEnum.Enum;\n this.columnDisplayTypeComponent = ColumnDisplayTypeEnum.Component;\n this.columnDisplayTypeHtml = ColumnDisplayTypeEnum.Html;\n this.elementRef = inject(ElementRef);\n this.messageService = inject(MessageService);\n this.translate = inject(TranslateService);\n this.getterPipe = new GetterPipe();\n this.templatePipe = new TemplatePipe();\n this.jsonPathPipe = new JsonPathPipe();\n this.descriptor = input.required(...(ngDevMode ? [{ debugName: \"descriptor\" }] : []));\n this.item = input.required(...(ngDevMode ? [{ debugName: \"item\" }] : []));\n this.styleMaxWidth = computed(() => this.descriptor().maxWidth ?? null, ...(ngDevMode ? [{ debugName: \"styleMaxWidth\" }] : []));\n this.className = computed(() => {\n let className = 'nowrap';\n if (this.descriptor().columnDisplayType === ColumnDisplayTypeEnum.String && this.descriptor().isMultiline) {\n className += ' multiline';\n }\n return className;\n }, ...(ngDevMode ? [{ debugName: \"className\" }] : []));\n this.value = computed(() => {\n let value = this.jsonPathPipe.transform(this.item(), `$.${this.descriptor().property}`);\n if (typeof this.descriptor().getter === 'function') {\n value = this.getterPipe.transform(value, this.descriptor().getter, this.item());\n }\n if (this.descriptor().template) {\n value = this.templatePipe.transform(value, this.descriptor().template);\n }\n return value;\n }, ...(ngDevMode ? [{ debugName: \"value\" }] : []));\n this.currency = computed(() => {\n if (this.descriptor().columnDisplayType === ColumnDisplayTypeEnum.Currency) {\n return this.descriptor().currencyProperty ? this.item()[this.descriptor().currencyProperty] : (this.descriptor().currencyCode ?? 'EUR');\n }\n return;\n }, ...(ngDevMode ? [{ debugName: \"currency\" }] : []));\n this.hasCopyToClipboard = computed(() => this.descriptor().hasCopyToClipboard && this.value() != null, ...(ngDevMode ? [{ debugName: \"hasCopyToClipboard\" }] : []));\n this.componentInputs = computed(() => {\n const inputs = {\n value: this.value(),\n item: this.item(),\n descriptor: this.descriptor()\n };\n if (this.descriptor().customComponentInputs) {\n return { ...inputs, ...this.descriptor().customComponentInputs };\n }\n return inputs;\n }, ...(ngDevMode ? [{ debugName: \"componentInputs\" }] : []));\n }\n copyToClipboard(event) {\n event.stopPropagation();\n let value = this.elementRef.nativeElement.innerText.trim();\n const clipboardValueGetter = this.descriptor().clipboardValueGetter;\n if (clipboardValueGetter) {\n value = clipboardValueGetter(this.value(), this.item());\n }\n navigator.clipboard.writeText(value);\n const title = this.translate.instant('mngTable.copyNotificationTitle');\n const message = this.translate.instant('mngTable.copyNotificationMessage', { value });\n this.messageService.add({ severity: 'info', summary: title, detail: message });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TableColumnValueComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.7\", type: TableColumnValueComponent, isStandalone: true, selector: \"mng-table-column-value\", inputs: { descriptor: { classPropertyName: \"descriptor\", publicName: \"descriptor\", isSignal: true, isRequired: true, transformFunction: null }, item: { classPropertyName: \"item\", publicName: \"item\", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { \"class\": \"className()\", \"style.max-width.px\": \"styleMaxWidth()\" } }, ngImport: i0, template: \"@if (descriptor().localizationExistsProperty && !item()[descriptor().localizationExistsProperty!]) {\\n <i class=\\\"pi pi-exclamation-circle\\\" [pTooltip]=\\\"'mngTable.translationMissing' | translate\\\"></i>\\n}\\n@switch (descriptor().columnDisplayType) {\\n @case (columnDisplayTypeString) {\\n @if (descriptor().hasValueAsTooltip) {\\n <span [pTooltip]=\\\"value()\\\" tooltipPosition=\\\"left\\\">{{ value() }}</span>\\n } @else {\\n {{ value() }}\\n }\\n }\\n @case (columnDisplayTypeHtml) {\\n <span [innerHTML]=\\\"value()\\\"></span>\\n }\\n @case (columnDisplayTypeNumber) {\\n {{ value() | number: descriptor().displayFormat : descriptor().locale }}\\n }\\n @case (columnDisplayTypeCurrency) {\\n {{ value() | currency: currency() : descriptor().currencyDisplay : descriptor().displayFormat : descriptor().locale }}\\n }\\n @case (columnDisplayTypeDate) {\\n {{ value() | date: descriptor().displayFormat }}\\n }\\n @case (columnDisplayTypeBoolean) {\\n @if (descriptor().booleanAsIcon) {\\n <i [class]=\\\"value() | mngBoolean: descriptor().booleanYes : descriptor().booleanNo : true\\\"></i>\\n } @else {\\n {{ value() | mngBoolean: descriptor().booleanYes : descriptor().booleanNo | translate }}\\n }\\n }\\n @case (columnDisplayTypeEnum) {\\n {{ value() | mngEnum: descriptor().enum | translate }}\\n }\\n @case (columnDisplayTypeComponent) {\\n <ng-container [mngComponent]=\\\"descriptor().customComponentType!\\\" [inputs]=\\\"componentInputs()\\\"></ng-container>\\n }\\n}\\n@if (hasCopyToClipboard()) {\\n <div class=\\\"help-buttons\\\">\\n <button pButton type=\\\"button\\\" icon=\\\"pi pi-copy\\\" class=\\\"p-button-rounded p-button-info p-button-sm\\\" (click)=\\\"copyToClipboard($event)\\\"></button>\\n </div>\\n}\\n\", styles: [\":host{display:inline-block;overflow:hidden}:host.nowrap{white-space:nowrap;text-overflow:ellipsis}:host.multiline{white-space:pre-wrap;word-wrap:break-word}.help-buttons{display:none;position:absolute;right:0;top:50%;transform:translateY(-50%)}.help-buttons .p-button{height:1.9rem;width:1.9rem;padding:0}\\n\"], dependencies: [{ kind: \"directive\", type: ComponentDirective, selector: \"[mngComponent]\", inputs: [\"mngComponent\", \"injectionToken\", \"inputs\", \"attachToHost\", \"parentInjector\"], outputs: [\"instanceCreated\"] }, { kind: \"directive\", type: ButtonDirective, selector: \"[pButton]\", inputs: [\"iconPos\", \"loadingIcon\", \"loading\", \"severity\", \"raised\", \"rounded\", \"text\", \"outlined\", \"size\", \"plain\", \"fluid\", \"label\", \"icon\", \"buttonProps\"] }, { kind: \"directive\", type: Tooltip, selector: \"[pTooltip]\", inputs: [\"tooltipPosition\", \"tooltipEvent\", \"positionStyle\", \"tooltipStyleClass\", \"tooltipZIndex\", \"escape\", \"showDelay\", \"hideDelay\", \"life\", \"positionTop\", \"positionLeft\", \"autoHide\", \"fitContent\", \"hideOnEscape\", \"pTooltip\", \"tooltipDisabled\", \"tooltipOptions\", \"appendTo\"] }, { kind: \"pipe\", type: TranslatePipe, name: \"translate\" }, { kind: \"pipe\", type: BooleanPipe, name: \"mngBoolean\" }, { kind: \"pipe\", type: EnumPipe, name: \"mngEnum\" }, { kind: \"pipe\", type: DecimalPipe, name: \"number\" }, { kind: \"pipe\", type: CurrencyPipe, name: \"currency\" }, { kind: \"pipe\", type: DatePipe, name: \"date\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TableColumnValueComponent, decorators: [{\n type: Component,\n args: [{ selector: 'mng-table-column-value', imports: [TranslatePipe, BooleanPipe, EnumPipe, ComponentDirective, DecimalPipe, CurrencyPipe, DatePipe, ButtonDirective, Tooltip], changeDetection: ChangeDetectionStrategy.OnPush, host: { '[class]': 'className()', '[style.max-width.px]': 'styleMaxWidth()' }, template: \"@if (descriptor().localizationExistsProperty && !item()[descriptor().localizationExistsProperty!]) {\\n <i class=\\\"pi pi-exclamation-circle\\\" [pTooltip]=\\\"'mngTable.translationMissing' | translate\\\"></i>\\n}\\n@switch (descriptor().columnDisplayType) {\\n @case (columnDisplayTypeString) {\\n @if (descriptor().hasValueAsTooltip) {\\n <span [pTooltip]=\\\"value()\\\" tooltipPosition=\\\"left\\\">{{ value() }}</span>\\n } @else {\\n {{ value() }}\\n }\\n }\\n @case (columnDisplayTypeHtml) {\\n <span [innerHTML]=\\\"value()\\\"></span>\\n }\\n @case (columnDisplayTypeNumber) {\\n {{ value() | number: descriptor().displayFormat : descriptor().locale }}\\n }\\n @case (columnDisplayTypeCurrency) {\\n {{ value() | currency: currency() : descriptor().currencyDisplay : descriptor().displayFormat : descriptor().locale }}\\n }\\n @case (columnDisplayTypeDate) {\\n {{ value() | date: descriptor().displayFormat }}\\n }\\n @case (columnDisplayTypeBoolean) {\\n @if (descriptor().booleanAsIcon) {\\n <i [class]=\\\"value() | mngBoolean: descriptor().booleanYes : descriptor().booleanNo : true\\\"></i>\\n } @else {\\n {{ value() | mngBoolean: descriptor().booleanYes : descriptor().booleanNo | translate }}\\n }\\n }\\n @case (columnDisplayTypeEnum) {\\n {{ value() | mngEnum: descriptor().enum | translate }}\\n }\\n @case (columnDisplayTypeComponent) {\\n <ng-container [mngComponent]=\\\"descriptor().customComponentType!\\\" [inputs]=\\\"componentInputs()\\\"></ng-container>\\n }\\n}\\n@if (hasCopyToClipboard()) {\\n <div class=\\\"help-buttons\\\">\\n <button pButton type=\\\"button\\\" icon=\\\"pi pi-copy\\\" class=\\\"p-button-rounded p-button-info p-button-sm\\\" (click)=\\\"copyToClipboard($event)\\\"></button>\\n </div>\\n}\\n\", styles: [\":host{display:inline-block;overflow:hidden}:host.nowrap{white-space:nowrap;text-overflow:ellipsis}:host.multiline{white-space:pre-wrap;word-wrap:break-word}.help-buttons{display:none;position:absolute;right:0;top:50%;transform:translateY(-50%)}.help-buttons .p-button{height:1.9rem;width:1.9rem;padding:0}\\n\"] }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLXZhbHVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RhYmxlL3NyYy9jb21wb25lbnRzL2NvbHVtbi12YWx1ZS9jb2x1bW4tdmFsdWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vdGFibGUvc3JjL2NvbXBvbmVudHMvY29sdW1uLXZhbHVlL2NvbHVtbi12YWx1ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRSxPQUFPLEVBQUMsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV0RyxPQUFPLEVBQUMsYUFBYSxFQUFFLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDcEUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMzQyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0MsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRXhDLE9BQU8sRUFBQyxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDOUgsT0FBTyxFQUFtQixxQkFBcUIsRUFBQyxNQUFNLGtDQUFrQyxDQUFDOztBQVV6RixNQUFNLE9BQU8seUJBQXlCO0lBUnRDO1FBU29CLDRCQUF1QixHQUEwQixxQkFBcUIsQ0FBQyxNQUFNLENBQUM7UUFDOUUsNEJBQXVCLEdBQTBCLHFCQUFxQixDQUFDLE1BQU0sQ0FBQztRQUM5RSw4QkFBeUIsR0FBMEIscUJBQXFCLENBQUMsUUFBUSxDQUFDO1FBQ2xGLDZCQUF3QixH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RyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxrQ0FBa0MsRUFBRSxFQUFDLEtBQUssRUFBQyxDQUFDLENBQUM7UUFDcEYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUM7SUFDakYsQ0FBQzs4R0EzRVEseUJBQXlCO2tHQUF6Qix5QkFBeUIsbWJDbkJ0Qyx3ekRBMENBLDZXRDNCb0Qsa0JBQWtCLGlMQUF1QyxlQUFlLG9OQUFFLE9BQU8sd1VBQXZILGFBQWEsNkNBQUUsV0FBVyw4Q0FBRSxRQUFRLDJDQUFzQixXQUFXLDBDQUFFLFlBQVksNENBQUUsUUFBUTs7MkZBSTlGLHlCQUF5QjtrQkFSckMsU0FBUzsrQkFDSSx3QkFBd0IsV0FHekIsQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsT0FBTyxDQUFDLG1CQUNqSCx1QkFBdUIsQ0FBQyxNQUFNLFFBQ3pDLEVBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxzQkFBc0IsRUFBRSxpQkFBaUIsRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q3VycmVuY3lQaXBlLCBEYXRlUGlwZSwgRGVjaW1hbFBpcGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIGNvbXB1dGVkLCBpbmplY3QsIGlucHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtUcmFuc2xhdGVQaXBlLCBUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7TWVzc2FnZVNlcnZpY2V9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7QnV0dG9uRGlyZWN0aXZlfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XG5pbXBvcnQge1Rvb2x0aXB9IGZyb20gJ3ByaW1lbmcvdG9vbHRpcCc7XG5cbmltcG9ydCB7Qm9vbGVhblBpcGUsIENvbXBvbmVudERpcmVjdGl2ZSwgRW51bVBpcGUsIEdldHRlclBpcGUsIEpzb25QYXRoUGlwZSwgVGVtcGxhdGVQaXBlfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuaW1wb3J0IHtDb2x1bW5EZXNjcmlwdG9yLCBDb2x1bW5EaXNwbGF5VHlwZUVudW19IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvdGFibGUvYXBpJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdtbmctdGFibGUtY29sdW1uLXZhbHVlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY29sdW1uLXZhbHVlLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9jb2x1bW4tdmFsdWUuY29tcG9uZW50LmNzcyddLFxuICAgIGltcG9ydHM6IFtUcmFuc2xhdGVQaXBlLCBCb29sZWFuUGlwZSwgRW51bVBpcGUsIENvbXBvbmVudERpcmVjdGl2ZSwgRGVjaW1hbFBpcGUsIEN1cnJlbmN5UGlwZSwgRGF0ZVBpcGUsIEJ1dHRvbkRpcmVjdGl2ZSwgVG9vbHRpcF0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaG9zdDogeydbY2xhc3NdJzogJ2NsYXNzTmFtZSgpJywgJ1tzdHlsZS5tYXgtd2lkdGgucHhdJzogJ3N0eWxlTWF4V2lkdGgoKSd9XG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQ29sdW1uVmFsdWVDb21wb25lbnQ8VCwgVFQ+IHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgY29sdW1uRGlzcGxheVR5cGVTdHJpbmc6IENvbHVtbkRpc3BsYXlUeXBlRW51bSA9IENvbHVtbkRpc3BsYXlUeXBlRW51bS5TdHJpbmc7XG4gICAgcHVibGljIHJlYWRvbmx5IGNvbHVtbkRpc3BsYXlUeXBlTnVtYmVyOiBDb2x1bW5EaXNwbGF5VHlwZUVudW0gPSBDb2x1bW5EaXNwbGF5VHlwZUVudW0uTnVtYmVyO1xuICAgIHB1YmxpYyByZWFkb25seSBjb2x1bW5EaXNwbGF5VHlwZUN1cnJlbmN5OiBDb2x1bW5EaXNwbGF5VHlwZUVudW0gPSBDb2x1bW5EaXNwbGF5VHlwZUVudW0uQ3VycmVuY3k7XG4gICAgcHVibGljIHJlYWRvbmx5IGNvbHVtbkRpc3BsYXlUeXBlQm9vbGVhbjogQ29sdW1uRGlzcGxheVR5cGVFbnVtID0gQ29sdW1uRGlzcGxheVR5cGVFbnVtLkJvb2xlYW47XG4gICAgcHVibGljIHJlYWRvbmx5IGNvbHVtbkRpc3BsYXlUeXBlRGF0ZTogQ29sdW1uRGlzcGxheVR5cGVFbnVtID0gQ29sdW1uRGlzcGxheVR5cGVFbnVtLkRhdGU7XG4gICAgcHVibGljIHJlYWRvbmx5IGNvbHVtbkRpc3BsYXlUeXBlRW51bTogQ29sdW1uRGlzcGxheVR5cGVFbnVtID0gQ29sdW1uRGlzcGxheVR5cGVFbnVtLkVudW07XG4gICAgcHVibGljIHJlYWRvbmx5IGNvbHVtbkRpc3BsYXlUeXBlQ29tcG9uZW50OiBDb2x1bW5EaXNwbGF5VHlwZUVudW0gPSBDb2x1bW5EaXNwbGF5VHlwZUVudW0uQ29tcG9uZW50O1xuICAgIHB1YmxpYyByZWFkb25seSBjb2x1bW5EaXNwbGF5VHlwZUh0bWw6IENvbHVtbkRpc3BsYXlUeXBlRW51bSA9IENvbHVtbkRpc3BsYXlUeXBlRW51bS5IdG1sO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZVNlcnZpY2UgPSBpbmplY3QoTWVzc2FnZVNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBnZXR0ZXJQaXBlID0gbmV3IEdldHRlclBpcGUoKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRlbXBsYXRlUGlwZSA9IG5ldyBUZW1wbGF0ZVBpcGUoKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGpzb25QYXRoUGlwZSA9IG5ldyBKc29uUGF0aFBpcGUoKTtcblxuICAgIHB1YmxpYyBkZXNjcmlwdG9yID0gaW5wdXQucmVxdWlyZWQ8Q29sdW1uRGVzY3JpcHRvcjxULCBUVD4+KCk7XG4gICAgcHVibGljIGl0ZW0gPSBpbnB1dC5yZXF1aXJlZDxhbnk+KCk7XG5cbiAgICBwdWJsaWMgc3R5bGVNYXhXaWR0aCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZGVzY3JpcHRvcigpLm1heFdpZHRoID8/IG51bGwpO1xuICAgIHB1YmxpYyBjbGFzc05hbWUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGxldCBjbGFzc05hbWUgPSAnbm93cmFwJztcbiAgICAgICAgaWYgKHRoaXMuZGVzY3JpcHRvcigpLmNvbHVtbkRpc3BsYXlUeXBlID09PSBDb2x1bW5EaXNwbGF5VHlwZUVudW0uU3RyaW5nICYmIHRoaXMuZGVzY3JpcHRvcigpLmlzTXVsdGlsaW5lKSB7XG4gICAgICAgICAgICBjbGFzc05hbWUgKz0gJyBtdWx0aWxpbmUnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbGFzc05hbWU7XG4gICAgfSk7XG5cbiAgICBwdWJsaWMgdmFsdWUgPSBjb21wdXRlZDxhbnk+KCgpID0+IHtcbiAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5qc29uUGF0aFBpcGUudHJhbnNmb3JtKHRoaXMuaXRlbSgpLCBgJC4ke3RoaXMuZGVzY3JpcHRvcigpLnByb3BlcnR5fWApO1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGVzY3JpcHRvcigpLmdldHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmdldHRlclBpcGUudHJhbnNmb3JtKHZhbHVlLCB0aGlzLmRlc2NyaXB0b3IoKS5nZXR0ZXIsIHRoaXMuaXRlbSgpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kZXNjcmlwdG9yKCkudGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy50ZW1wbGF0ZVBpcGUudHJhbnNmb3JtKHZhbHVlLCB0aGlzLmRlc2NyaXB0b3IoKS50ZW1wbGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0pO1xuXG4gICAgcHVibGljIGN1cnJlbmN5ID0gY29tcHV0ZWQ8c3RyaW5nIHwgdW5kZWZpbmVkPigoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmRlc2NyaXB0b3IoKS5jb2x1bW5EaXNwbGF5VHlwZSA9PT0gQ29sdW1uRGlzcGxheVR5cGVFbnVtLkN1cnJlbmN5KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZXNjcmlwdG9yKCkuY3VycmVuY3lQcm9wZXJ0eSA/IHRoaXMuaXRlbSgpW3RoaXMuZGVzY3JpcHRvcigpLmN1cnJlbmN5UHJvcGVydHkhXSA6ICh0aGlzLmRlc2NyaXB0b3IoKS5jdXJyZW5jeUNvZGUgPz8gJ0VVUicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9KTtcblxuICAgIHB1YmxpYyBoYXNDb3B5VG9DbGlwYm9hcmQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmRlc2NyaXB0b3IoKS5oYXNDb3B5VG9DbGlwYm9hcmQgJiYgdGhpcy52YWx1ZSgpICE9IG51bGwpO1xuXG4gICAgcHVibGljIGNvbXBvbmVudElucHV0cyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXRzID0ge1xuICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUoKSxcbiAgICAgICAgICAgIGl0ZW06IHRoaXMuaXRlbSgpLFxuICAgICAgICAgICAgZGVzY3JpcHRvcjogdGhpcy5kZXNjcmlwdG9yKClcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodGhpcy5kZXNjcmlwdG9yKCkuY3VzdG9tQ29tcG9uZW50SW5wdXRzKSB7XG4gICAgICAgICAgICByZXR1cm4gey4uLmlucHV0cywgLi4udGhpcy5kZXNjcmlwdG9yKCkuY3VzdG9tQ29tcG9uZW50SW5wdXRzfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbnB1dHM7XG4gICAgfSk7XG5cbiAgICBwdWJsaWMgY29weVRvQ2xpcGJvYXJkKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuaW5uZXJUZXh0LnRyaW0oKTtcbiAgICAgICAgY29uc3QgY2xpcGJvYXJkVmFsdWVHZXR0ZXIgPSB0aGlzLmRlc2NyaXB0b3IoKS5jbGlwYm9hcmRWYWx1ZUdldHRlcjtcbiAgICAgICAgaWYgKGNsaXBib2FyZFZhbHVlR2V0dGVyKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGNsaXBib2FyZFZhbHVlR2V0dGVyKHRoaXMudmFsdWUoKSwgdGhpcy5pdGVtKCkpO1xuICAgICAgICB9XG4gICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHZhbHVlKTtcbiAgICAgICAgY29uc3QgdGl0bGUgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdtbmdUYWJsZS5jb3B5Tm90aWZpY2F0aW9uVGl0bGUnKTtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ21uZ1RhYmxlLmNvcHlOb3RpZmljYXRpb25NZXNzYWdlJywge3ZhbHVlfSk7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtzZXZlcml0eTogJ2luZm8nLCBzdW1tYXJ5OiB0aXRsZSwgZGV0YWlsOiBtZXNzYWdlfSk7XG4gICAgfVxufVxuIiwiQGlmIChkZXNjcmlwdG9yKCkubG9jYWxpemF0aW9uRXhpc3RzUHJvcGVydHkgJiYgIWl0ZW0oKVtkZXNjcmlwdG9yKCkubG9jYWxpemF0aW9uRXhpc3RzUHJvcGVydHkhXSkge1xuICAgIDxpIGNsYXNzPVwicGkgcGktZXhjbGFtYXRpb24tY2lyY2xlXCIgW3BUb29sdGlwXT1cIidtbmdUYWJsZS50cmFuc2xhdGlvbk1pc3NpbmcnIHwgdHJhbnNsYXRlXCI+PC9pPlxufVxuQHN3aXRjaCAoZGVzY3JpcHRvcigpLmNvbHVtbkRpc3BsYXlUeXBlKSB7XG4gICAgQGNhc2UgKGNvbHVtbkRpc3BsYXlUeXBlU3RyaW5nKSB7XG4gICAgICAgIEBpZiAoZGVzY3JpcHRvcigpLmhhc1ZhbHVlQXNUb29sdGlwKSB7XG4gICAgICAgICAgICA8c3BhbiBbcFRvb2x0aXBdPVwidmFsdWUoKVwiIHRvb2x0aXBQb3NpdGlvbj1cImxlZnRcIj57eyB2YWx1ZSgpIH19PC9zcGFuPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIHt7IHZhbHVlKCkgfX1cbiAgICAgICAgfVxuICAgIH1cbiAgICBAY2FzZSAoY29sdW1uRGlzcGxheVR5cGVIdG1sKSB7XG4gICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwidmFsdWUoKVwiPjwvc3Bhbj5cbiAgICB9XG4gICAgQGNhc2UgKGNvbHVtbkRpc3BsYXlUeXBlTnVtYmVyKSB7XG4gICAgICAgIHt7IHZhbHVlKCkgfCBudW1iZXI6IGRlc2NyaXB0b3IoKS5kaXNwbGF5Rm9ybWF0IDogZGVzY3JpcHRvcigpLmxvY2FsZSB9fVxuICAgIH1cbiAgICBAY2FzZSAoY29sdW1uRGlzcGxheVR5cGVDdXJyZW5jeSkge1xuICAgICAgICB7eyB2YWx1ZSgpIHwgY3VycmVuY3k6IGN1cnJlbmN5KCkgOiBkZXNjcmlwdG9yKCkuY3VycmVuY3lEaXNwbGF5IDogZGVzY3JpcHRvcigpLmRpc3BsYXlGb3JtYXQgOiBkZXNjcmlwdG9yKCkubG9jYWxlIH19XG4gICAgfVxuICAgIEBjYXNlIChjb2x1bW5EaXNwbGF5VHlwZURhdGUpIHtcbiAgICAgICAge3sgdmFsdWUoKSB8IGRhdGU6IGRlc2NyaXB0b3IoKS5kaXNwbGF5Rm9ybWF0IH19XG4gICAgfVxuICAgIEBjYXNlIChjb2x1bW5EaXNwbGF5VHlwZUJvb2xlYW4pIHtcbiAgICAgICAgQGlmIChkZXNjcmlwdG9yKCkuYm9vbGVhbkFzSWNvbikge1xuICAgICAgICAgICAgPGkgW2NsYXNzXT1cInZhbHVlKCkgfCBtbmdCb29sZWFuOiBkZXNjcmlwdG9yKCkuYm9vbGVhblllcyA6IGRlc2NyaXB0b3IoKS5ib29sZWFuTm8gOiB0cnVlXCI+PC9pPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIHt7IHZhbHVlKCkgfCBtbmdCb29sZWFuOiBkZXNjcmlwdG9yKCkuYm9vbGVhblllcyA6IGRlc2NyaXB0b3IoKS5ib29sZWFuTm8gfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgfVxuICAgIH1cbiAgICBAY2FzZSAoY29sdW1uRGlzcGxheVR5cGVFbnVtKSB7XG4gICAgICAgIHt7IHZhbHVlKCkgfCBtbmdFbnVtOiBkZXNjcmlwdG9yKCkuZW51bSB8IHRyYW5zbGF0ZSB9fVxuICAgIH1cbiAgICBAY2FzZSAoY29sdW1uRGlzcGxheVR5cGVDb21wb25lbnQpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbW5nQ29tcG9uZW50XT1cImRlc2NyaXB0b3IoKS5jdXN0b21Db21wb25lbnRUeXBlIVwiIFtpbnB1dHNdPVwiY29tcG9uZW50SW5wdXRzKClcIj48L25nLWNvbnRhaW5lcj5cbiAgICB9XG59XG5AaWYgKGhhc0NvcHlUb0NsaXBib2FyZCgpKSB7XG4gICAgPGRpdiBjbGFzcz1cImhlbHAtYnV0dG9uc1wiPlxuICAgICAgICA8YnV0dG9uIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiIGljb249XCJwaSBwaS1jb3B5XCIgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLWluZm8gcC1idXR0b24tc21cIiAoY2xpY2spPVwiY29weVRvQ2xpcGJvYXJkKCRldmVudClcIj48L2J1dHRvbj5cbiAgICA8L2Rpdj5cbn1cbiJdfQ==","import { DatePipe, DecimalPipe } from '@angular/common';\nimport { LOCALE_ID, Pipe, inject } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ReplaySubject } from 'rxjs';\nimport { BooleanPipe, EnumPipe } from '@mediusinc/mng-commons/core';\nimport { FilterTypeEnum } from '@mediusinc/mng-commons/filter';\nimport * as i0 from \"@angular/core\";\nexport class FilterValuePipe {\n constructor() {\n this.locale = inject(LOCALE_ID);\n this.translate = inject(TranslateService);\n this.enumPipe = new EnumPipe();\n this.subject = new ReplaySubject(1);\n }\n transform(value, descriptor) {\n const valTransform = this.prepareValueTransform(value, descriptor);\n this.subscription?.unsubscribe();\n if (valTransform.translate && valTransform.valueArr.length > 0) {\n this.subscription = this.translate.stream(valTransform.valueArr).subscribe((i18n) => {\n this.subject.next(valTransform.valueArr.map(k => i18n[k]).join(', '));\n });\n }\n else {\n this.subject.next(valTransform.valueArr.join(', '));\n }\n return this.subject.asObservable();\n }\n /**\n * If returns a string, this represents i18n key that must go through translation. If translation is not needed, undefined is returned.\n */\n prepareValueTransform(value, descriptor) {\n const result = {\n translate: false,\n valueArr: Array.isArray(value) ? value : [value]\n };\n if (value == null) {\n result.valueArr = [];\n }\n switch (descriptor?.filterType) {\n case FilterTypeEnum.Date:\n // eslint-disable-next-line no-case-declarations\n const datePipe = new DatePipe(this.locale);\n result.valueArr = result.valueArr.map(v => datePipe.transform(v, descriptor.displayFormat, descriptor.locale));\n break;\n case FilterTypeEnum.Number:\n // eslint-disable-next-line no-case-declarations\n const decimalPipe = new DecimalPipe(this.locale);\n result.valueArr = result.valueArr.map(v => decimalPipe.transform(v, descriptor.displayFormat, descriptor.locale));\n break;\n case FilterTypeEnum.Boolean:\n // eslint-disable-next-line no-case-declarations\n const booleanPipe = new BooleanPipe();\n result.valueArr = result.valueArr.map(v => booleanPipe.transform(v));\n result.translate = true;\n break;\n case FilterTypeEnum.LookupEnum:\n // eslint-disable-next-line no-case-declarations\n const enumPipe = new EnumPipe();\n result.valueArr = result.valueArr.map(v => enumPipe.transform(v, descriptor.enum));\n result.translate = true;\n break;\n }\n return result;\n }\n ngOnDestroy() {\n this.subscription?.unsubscribe();\n this.subject.complete();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: FilterValuePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.1.7\", ngImport: i0, type: FilterValuePipe, isStandalone: true, name: \"mngFilterValue\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: FilterValuePipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'mngFilterValue',\n pure: true\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLXZhbHVlLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90YWJsZS9zcmMvcGlwZXMvZmlsdGVyLXZhbHVlLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN0RCxPQUFPLEVBQUMsU0FBUyxFQUFhLElBQUksRUFBaUIsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRWhGLE9BQU8sRUFBQyxnQkFBZ0IsRUFBb0IsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQWEsYUFBYSxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBRTdELE9BQU8sRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDbEUsT0FBTyxFQUErQyxjQUFjLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQzs7QUFNM0csTUFBTSxPQUFPLGVBQWU7SUFKNUI7UUFLcUIsV0FBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMzQixjQUFTLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDckMsYUFBUSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7UUFHM0MsWUFBTyxHQUFHLElBQUksYUFBYSxDQUFNLENBQUMsQ0FBQyxDQUFDO0tBNER2QztJQTFERyxTQUFTLENBQUMsS0FBYyxFQUFFLFVBQXVDO1FBQzdELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFbkUsSUFBSSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUNqQyxJQUFJLFlBQVksQ0FBQyxTQUFTLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDN0QsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FB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QU0sQ0FBQztJQUNsQixDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDOzhHQWpFUSxlQUFlOzRHQUFmLGVBQWU7OzJGQUFmLGVBQWU7a0JBSjNCLElBQUk7bUJBQUM7b0JBQ0YsSUFBSSxFQUFFLGdCQUFnQjtvQkFDdEIsSUFBSSxFQUFFLElBQUk7aUJBQ2IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RhdGVQaXBlLCBEZWNpbWFsUGlwZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7TE9DQUxFX0lELCBPbkRlc3Ryb3ksIFBpcGUsIFBpcGVUcmFuc2Zvcm0sIGluamVjdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZSwgVHJhbnNsYXRpb25PYmplY3R9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0LCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge0Jvb2xlYW5QaXBlLCBFbnVtUGlwZX0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9jb3JlJztcbmltcG9ydCB7RmlsdGVyRGVzY3JpcHRvciwgRmlsdGVyTG9va3VwRW51bURlc2NyaXB0b3IsIEZpbHRlclR5cGVFbnVtfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2ZpbHRlcic7XG5cbkBQaXBlKHtcbiAgICBuYW1lOiAnbW5nRmlsdGVyVmFsdWUnLFxuICAgIHB1cmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgRmlsdGVyVmFsdWVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSwgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvY2FsZSA9IGluamVjdChMT0NBTEVfSUQpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZW51bVBpcGUgPSBuZXcgRW51bVBpcGUoKTtcblxuICAgIHByaXZhdGUgc3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICAgIHN1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxhbnk+KDEpO1xuXG4gICAgdHJhbnNmb3JtKHZhbHVlOiB1bmtub3duLCBkZXNjcmlwdG9yPzogRmlsdGVyRGVzY3JpcHRvcjxhbnksIGFueT4pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCB2YWxUcmFuc2Zvcm0gPSB0aGlzLnByZXBhcmVWYWx1ZVRyYW5zZm9ybSh2YWx1ZSwgZGVzY3JpcHRvcik7XG5cbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGlmICh2YWxUcmFuc2Zvcm0udHJhbnNsYXRlICYmIHZhbFRyYW5zZm9ybS52YWx1ZUFyci5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMudHJhbnNsYXRlLnN0cmVhbSh2YWxUcmFuc2Zvcm0udmFsdWVBcnIpLnN1YnNjcmliZSgoaTE4bjogVHJhbnNsYXRpb25PYmplY3QpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1YmplY3QubmV4dCh2YWxUcmFuc2Zvcm0udmFsdWVBcnIubWFwKGsgPT4gaTE4bltrXSkuam9pbignLCAnKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3ViamVjdC5uZXh0KHZhbFRyYW5zZm9ybS52YWx1ZUFyci5qb2luKCcsICcpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSWYgcmV0dXJucyBhIHN0cmluZywgdGhpcyByZXByZXNlbnRzIGkxOG4ga2V5IHRoYXQgbXVzdCBnbyB0aHJvdWdoIHRyYW5zbGF0aW9uLiBJZiB0cmFuc2xhdGlvbiBpcyBub3QgbmVlZGVkLCB1bmRlZmluZWQgaXMgcmV0dXJuZWQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBwcmVwYXJlVmFsdWVUcmFuc2Zvcm0odmFsdWU6IHVua25vd24sIGRlc2NyaXB0b3I/OiBGaWx0ZXJEZXNjcmlwdG9yPGFueSwgYW55Pik6IHt0cmFuc2xhdGU6IGJvb2xlYW47IHZhbHVlQXJyOiBhbnlbXX0ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICAgICAgICB0cmFuc2xhdGU6IGZhbHNlLFxuICAgICAgICAgICAgdmFsdWVBcnI6IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdXG4gICAgICAgIH07XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXN1bHQudmFsdWVBcnIgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGRlc2NyaXB0b3I/LmZpbHRlclR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyVHlwZUVudW0uRGF0ZTpcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY2FzZS1kZWNsYXJhdGlvbnNcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlUGlwZSA9IG5ldyBEYXRlUGlwZSh0aGlzLmxvY2FsZSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnZhbHVlQXJyID0gcmVzdWx0LnZhbHVlQXJyLm1hcCh2ID0+IGRhdGVQaXBlLnRyYW5zZm9ybSh2IGFzIERhdGUsIGRlc2NyaXB0b3IuZGlzcGxheUZvcm1hdCwgZGVzY3JpcHRvci5sb2NhbGUpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyVHlwZUVudW0uTnVtYmVyOlxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jYXNlLWRlY2xhcmF0aW9uc1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlY2ltYWxQaXBlID0gbmV3IERlY2ltYWxQaXBlKHRoaXMubG9jYWxlKTtcbiAgICAgICAgICAgICAgICByZXN1bHQudmFsdWVBcnIgPSByZXN1bHQudmFsdWVBcnIubWFwKHYgPT4gZGVjaW1hbFBpcGUudHJhbnNmb3JtKHYgYXMgbnVtYmVyLCBkZXNjcmlwdG9yLmRpc3BsYXlGb3JtYXQsIGRlc2NyaXB0b3IubG9jYWxlKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEZpbHRlclR5cGVFbnVtLkJvb2xlYW46XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNhc2UtZGVjbGFyYXRpb25zXG4gICAgICAgICAgICAgICAgY29uc3QgYm9vbGVhblBpcGUgPSBuZXcgQm9vbGVhblBpcGUoKTtcbiAgICAgICAgICAgICAgICByZXN1bHQudmFsdWVBcnIgPSByZXN1bHQudmFsdWVBcnIubWFwKHYgPT4gYm9vbGVhblBpcGUudHJhbnNmb3JtKHYpKTtcbiAgICAgICAgICAgICAgICByZXN1bHQudHJhbnNsYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyVHlwZUVudW0uTG9va3VwRW51bTpcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY2FzZS1kZWNsYXJhdGlvbnNcbiAgICAgICAgICAgICAgICBjb25zdCBlbnVtUGlwZSA9IG5ldyBFbnVtUGlwZSgpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC52YWx1ZUFyciA9IHJlc3VsdC52YWx1ZUFyci5tYXAodiA9PiBlbnVtUGlwZS50cmFuc2Zvcm0odiwgKGRlc2NyaXB0b3IgYXMgRmlsdGVyTG9va3VwRW51bURlc2NyaXB0b3I8YW55LCBhbnk+KS5lbnVtKSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnRyYW5zbGF0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5zdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgfVxufVxuIl19","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation, computed, input, output } from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { Tag } from 'primeng/tag';\nimport { FilterMatchMode, getI18nTypePropertyKey } from '@mediusinc/mng-commons/core';\nimport { isFilterValueBlank } from '../../../helpers/filters';\nimport { FilterValuePipe } from '../../../pipes/filter-value.pipe';\nimport * as i0 from \"@angular/core\";\nexport class TableFilterActiveTagComponent {\n constructor() {\n this.FilterMatchMode = FilterMatchMode;\n this.model = input.required(...(ngDevMode ? [{ debugName: \"model\" }] : []));\n this.filter = input.required(...(ngDevMode ? [{ debugName: \"filter\" }] : []));\n this.edit = output();\n this.remove = output();\n this.label = computed(() => this.getPropertyLabelKey(this.filter().config.descriptor), ...(ngDevMode ? [{ debugName: \"label\" }] : []));\n this.matchMode = computed(() => this.filter().displayMatchMode, ...(ngDevMode ? [{ debugName: \"matchMode\" }] : []));\n this.matchModeSymbol = computed(() => `mngFilterActiveTag.matchMode.${this.matchMode()}`, ...(ngDevMode ? [{ debugName: \"matchModeSymbol\" }] : []));\n this.value = computed(() => this.filter().displayValue, ...(ngDevMode ? [{ debugName: \"value\" }] : []));\n this.isActive = computed(() => this.filter()?.matchMode === FilterMatchMode.Exists || this.filter()?.matchMode === FilterMatchMode.DoesNotExist || !isFilterValueBlank(this.value()), ...(ngDevMode ? [{ debugName: \"isActive\" }] : []));\n }\n onRemove(event) {\n event.stopPropagation();\n this.remove.emit({\n filter: this.filter(),\n event: event\n });\n }\n onEdit(event) {\n this.edit.emit({\n filter: this.filter(),\n event: event\n });\n }\n getPropertyLabelKey(filterDescriptor) {\n if (filterDescriptor.isGenericFilter) {\n return filterDescriptor.property;\n }\n let labelKey;\n if (filterDescriptor.title !== undefined && !filterDescriptor.titleUseModelBase) {\n labelKey = filterDescriptor.title;\n }\n else {\n labelKey = getI18nTypePropertyKey(this.model().i18nBaseKey, filterDescriptor.title ?? filterDescriptor.property);\n }\n return labelKey;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TableFilterActiveTagComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.7\", type: TableFilterActiveTagComponent, isStandalone: true, selector: \"mng-table-filter-active-tag\", inputs: { model: { classPropertyName: \"model\", publicName: \"model\", isSignal: true, isRequired: true, transformFunction: null }, filter: { classPropertyName: \"filter\", publicName: \"filter\", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { edit: \"edit\", remove: \"remove\" }, ngImport: i0, template: \"<p-tag severity=\\\"secondary\\\" styleClass=\\\"mr-1 mng-tag-outlined\\\" [class.mng-filter-required]=\\\"!isActive() && filter().config.descriptor.isRequired\\\">\\n <div class=\\\"flex items-center gap-2 p-1 cursor-pointer\\\" (click)=\\\"onEdit($event)\\\">\\n <span>{{ label() | translate }}</span>\\n @if (matchMode() === FilterMatchMode.Between) {\\n <span class=\\\"font-semibold\\\">{{ value()?.[0] | mngFilterValue: filter().config.descriptor | async }}</span>\\n <span class=\\\"text-primary\\\">{{ matchModeSymbol() | translate }}</span>\\n <span class=\\\"font-semibold\\\">{{ value()?.[1] | mngFilterValue: filter().config.descriptor | async }}</span>\\n } @else {\\n <span class=\\\"text-primary\\\">{{ matchModeSymbol() | translate }}</span>\\n <span class=\\\"font-semibold\\\">{{ value() | mngFilterValue: filter().config.descriptor | async }}</span>\\n @if (filter().caseSensitive) {\\n <small class=\\\"border-solid border rounded px-1 text-primary-400\\\">Aa</small>\\n }\\n }\\n @if (isActive()) {\\n <span class=\\\"pi pi-times text-xs\\\" (click)=\\\"onRemove($event)\\\"></span>\\n }\\n </div>\\n</p-tag>\\n\", styles: [\"mng-table-filter-active-tag.p-tag.p-tag-secondary.mng-tag-outlined{background-color:unset;border:1px solid var(--mng-tag-secondary-outlined-border)}\\n\"], dependencies: [{ kind: \"component\", type: Tag, selector: \"p-tag\", inputs: [\"styleClass\", \"severity\", \"value\", \"icon\", \"rounded\"] }, { kind: \"pipe\", type: TranslatePipe, name: \"translate\" }, { kind: \"pipe\", type: FilterValuePipe, name: \"mngFilterValue\" }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TableFilterActiveTagComponent, decorators: [{\n type: Component,\n args: [{ selector: 'mng-table-filter-active-tag', imports: [TranslatePipe, FilterValuePipe, AsyncPipe, Tag], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: \"<p-tag severity=\\\"secondary\\\" styleClass=\\\"mr-1 mng-tag-outlined\\\" [class.mng-filter-required]=\\\"!isActive() && filter().config.descriptor.isRequired\\\">\\n <div class=\\\"flex items-center gap-2 p-1 cursor-pointer\\\" (click)=\\\"onEdit($event)\\\">\\n <span>{{ label() | translate }}</span>\\n @if (matchMode() === FilterMatchMode.Between) {\\n <span class=\\\"font-semibold\\\">{{ value()?.[0] | mngFilterValue: filter().config.descriptor | async }}</span>\\n <span class=\\\"text-primary\\\">{{ matchModeSymbol() | translate }}</span>\\n <span class=\\\"font-semibold\\\">{{ value()?.[1] | mngFilterValue: filter().config.descriptor | async }}</span>\\n } @else {\\n <span class=\\\"text-primary\\\">{{ matchModeSymbol() | translate }}</span>\\n <span class=\\\"font-semibold\\\">{{ value() | mngFilterValue: filter().config.descriptor | async }}</span>\\n @if (filter().caseSensitive) {\\n <small class=\\\"border-solid border rounded px-1 text-primary-400\\\">Aa</small>\\n }\\n }\\n @if (isActive()) {\\n <span class=\\\"pi pi-times text-xs\\\" (click)=\\\"onRemove($event)\\\"></span>\\n }\\n </div>\\n</p-tag>\\n\", styles: [\"mng-table-filter-active-tag.p-tag.p-tag-secondary.mng-tag-outlined{background-color:unset;border:1px solid var(--mng-tag-secondary-outlined-border)}\\n\"] }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWFjdGl2ZS10YWcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGFibGUvc3JjL2NvbXBvbmVudHMvZmlsdGVyL2ZpbHRlci1hY3RpdmUtdGFnL2ZpbHRlci1hY3RpdmUtdGFnLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3RhYmxlL3NyYy9jb21wb25lbnRzL2ZpbHRlci9maWx0ZXItYWN0aXZlLXRhZy9maWx0ZXItYWN0aXZlLXRhZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUU3RyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUVoQyxPQUFPLEVBQUMsZUFBZSxFQUFFLHNCQUFzQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFJcEYsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFFNUQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLGtDQUFrQyxDQUFDOztBQVVqRSxNQUFNLE9BQU8sNkJBQTZCO0lBUjFDO1FBU29CLG9CQUFlLEdBQUcsZUFBZSxDQUFDO1FBRTNDLFVBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxnREFBd0IsQ0FBQztRQUMvQyxXQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsaURBQXlCLENBQUM7UUFFakQsU0FBSSxHQUFHLE1BQU0sRUFBd0IsQ0FBQztRQUN0QyxXQUFNLEdBQUcsTUFBTSxFQUF3QixDQUFDO1FBRXhDLFVBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLGlEQUFDLENBQUM7UUFDbEYsY0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsZ0JBQWdCLHFEQUFDLENBQUM7UUFDM0Qsb0JBQWUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsZ0NBQWdDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSwyREFBQyxDQUFDO1FBQ3JGLFVBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFlBQVksaURBQUMsQ0FBQztRQUNoRCxhQUFRLEdBQUcsUUFBUSxDQUN6QixHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsU0FBUyxLQUFLLGVBQWUsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLFNBQVMsS0FBSyxlQUFlLENBQUMsWUFBWSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLG9EQUM5SixDQUFDO0tBOEJMO0lBNUJHLFFBQVEsQ0FBQyxLQUFZO1FBQ2pCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNiLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ3JCLEtBQUssRUFBRSxLQUFLO1NBQ2YsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFZO1FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDWCxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNyQixLQUFLLEVBQUUsS0FBSztTQUNmLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxnQkFBNEM7UUFDcEUsSUFBSSxnQkFBZ0IsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNuQyxPQUFPLGdCQUFnQixDQUFDLFFBQVEsQ0FBQztRQUNyQyxDQUFDO1FBRUQsSUFBSSxRQUFnQixDQUFDO1FBQ3JCLElBQUksZ0JBQWdCLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDOUUsUUFBUSxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQztRQUN0QyxDQUFDO2FBQU0sQ0FBQztZQUNKLFFBQVEsR0FBRyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsV0FBVyxFQUFFLGdCQUFnQixDQUFDLEtBQUssSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNySCxDQUFDO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQzs4R0E1Q1EsNkJBQTZCO2tHQUE3Qiw2QkFBNkIsaVlDdEIxQyw4ckNBbUJBLGdORER5RCxHQUFHLDZHQUE5QyxhQUFhLDZDQUFFLGVBQWUsa0RBQUUsU0FBUzs7MkZBSTFDLDZCQUE2QjtrQkFSekMsU0FBUzsrQkFDSSw2QkFBNkIsV0FHOUIsQ0FBQyxhQUFhLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsbUJBQ3hDLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FzeW5jUGlwZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgVmlld0VuY2Fwc3VsYXRpb24sIGNvbXB1dGVkLCBpbnB1dCwgb3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtUcmFuc2xhdGVQaXBlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7VGFnfSBmcm9tICdwcmltZW5nL3RhZyc7XG5cbmltcG9ydCB7RmlsdGVyTWF0Y2hNb2RlLCBnZXRJMThuVHlwZVByb3BlcnR5S2V5fSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuaW1wb3J0IHtGaWx0ZXJEZXNjcmlwdG9yfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2ZpbHRlcic7XG5pbXBvcnQge01vZGVsRGVzY3JpcHRvcn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9tb2RlbCc7XG5cbmltcG9ydCB7aXNGaWx0ZXJWYWx1ZUJsYW5rfSBmcm9tICcuLi8uLi8uLi9oZWxwZXJzL2ZpbHRlcnMnO1xuaW1wb3J0IHtGaWx0ZXJBY3RpdmVUYWdFdmVudCwgRmlsdGVyU3RhdGVXaXRoQ29uZmlnfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZmlsdGVyLm1vZGVsJztcbmltcG9ydCB7RmlsdGVyVmFsdWVQaXBlfSBmcm9tICcuLi8uLi8uLi9waXBlcy9maWx0ZXItdmFsdWUucGlwZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbW5nLXRhYmxlLWZpbHRlci1hY3RpdmUtdGFnJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZmlsdGVyLWFjdGl2ZS10YWcuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9maWx0ZXItYWN0aXZlLXRhZy5jb21wb25lbnQuY3NzJyxcbiAgICBpbXBvcnRzOiBbVHJhbnNsYXRlUGlwZSwgRmlsdGVyVmFsdWVQaXBlLCBBc3luY1BpcGUsIFRhZ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUZpbHRlckFjdGl2ZVRhZ0NvbXBvbmVudCB7XG4gICAgcHVibGljIHJlYWRvbmx5IEZpbHRlck1hdGNoTW9kZSA9IEZpbHRlck1hdGNoTW9kZTtcblxuICAgIHB1YmxpYyBtb2RlbCA9IGlucHV0LnJlcXVpcmVkPE1vZGVsRGVzY3JpcHRvcjxhbnk+PigpO1xuICAgIHB1YmxpYyBmaWx0ZXIgPSBpbnB1dC5yZXF1aXJlZDxGaWx0ZXJTdGF0ZVdpdGhDb25maWc+KCk7XG5cbiAgICBwdWJsaWMgZWRpdCA9IG91dHB1dDxGaWx0ZXJBY3RpdmVUYWdFdmVudD4oKTtcbiAgICBwdWJsaWMgcmVtb3ZlID0gb3V0cHV0PEZpbHRlckFjdGl2ZVRhZ0V2ZW50PigpO1xuXG4gICAgcHVibGljIGxhYmVsID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5nZXRQcm9wZXJ0eUxhYmVsS2V5KHRoaXMuZmlsdGVyKCkuY29uZmlnLmRlc2NyaXB0b3IpKTtcbiAgICBwdWJsaWMgbWF0Y2hNb2RlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5maWx0ZXIoKS5kaXNwbGF5TWF0Y2hNb2RlKTtcbiAgICBwdWJsaWMgbWF0Y2hNb2RlU3ltYm9sID0gY29tcHV0ZWQoKCkgPT4gYG1uZ0ZpbHRlckFjdGl2ZVRhZy5tYXRjaE1vZGUuJHt0aGlzLm1hdGNoTW9kZSgpfWApO1xuICAgIHB1YmxpYyB2YWx1ZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZmlsdGVyKCkuZGlzcGxheVZhbHVlKTtcbiAgICBwcm90ZWN0ZWQgaXNBY3RpdmUgPSBjb21wdXRlZChcbiAgICAgICAgKCkgPT4gdGhpcy5maWx0ZXIoKT8ubWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuRXhpc3RzIHx8IHRoaXMuZmlsdGVyKCk/Lm1hdGNoTW9kZSA9PT0gRmlsdGVyTWF0Y2hNb2RlLkRvZXNOb3RFeGlzdCB8fCAhaXNGaWx0ZXJWYWx1ZUJsYW5rKHRoaXMudmFsdWUoKSlcbiAgICApO1xuXG4gICAgb25SZW1vdmUoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLnJlbW92ZS5lbWl0KHtcbiAgICAgICAgICAgIGZpbHRlcjogdGhpcy5maWx0ZXIoKSxcbiAgICAgICAgICAgIGV2ZW50OiBldmVudFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkVkaXQoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIHRoaXMuZWRpdC5lbWl0KHtcbiAgICAgICAgICAgIGZpbHRlcjogdGhpcy5maWx0ZXIoKSxcbiAgICAgICAgICAgIGV2ZW50OiBldmVudFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFByb3BlcnR5TGFiZWxLZXkoZmlsdGVyRGVzY3JpcHRvcjogRmlsdGVyRGVzY3JpcHRvcjxhbnksIGFueT4pIHtcbiAgICAgICAgaWYgKGZpbHRlckRlc2NyaXB0b3IuaXNHZW5lcmljRmlsdGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyRGVzY3JpcHRvci5wcm9wZXJ0eTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsYWJlbEtleTogc3RyaW5nO1xuICAgICAgICBpZiAoZmlsdGVyRGVzY3JpcHRvci50aXRsZSAhPT0gdW5kZWZpbmVkICYmICFmaWx0ZXJEZXNjcmlwdG9yLnRpdGxlVXNlTW9kZWxCYXNlKSB7XG4gICAgICAgICAgICBsYWJlbEtleSA9IGZpbHRlckRlc2NyaXB0b3IudGl0bGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsYWJlbEtleSA9IGdldEkxOG5UeXBlUHJvcGVydHlLZXkodGhpcy5tb2RlbCgpLmkxOG5CYXNlS2V5LCBmaWx0ZXJEZXNjcmlwdG9yLnRpdGxlID8/IGZpbHRlckRlc2NyaXB0b3IucHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsYWJlbEtleTtcbiAgICB9XG59XG4iLCI8cC10YWcgc2V2ZXJpdHk9XCJzZWNvbmRhcnlcIiBzdHlsZUNsYXNzPVwibXItMSBtbmctdGFnLW91dGxpbmVkXCIgW2NsYXNzLm1uZy1maWx0ZXItcmVxdWlyZWRdPVwiIWlzQWN0aXZlKCkgJiYgZmlsdGVyKCkuY29uZmlnLmRlc2NyaXB0b3IuaXNSZXF1aXJlZFwiPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBwLTEgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25FZGl0KCRldmVudClcIj5cbiAgICAgICAgPHNwYW4+e3sgbGFiZWwoKSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgQGlmIChtYXRjaE1vZGUoKSA9PT0gRmlsdGVyTWF0Y2hNb2RlLkJldHdlZW4pIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1zZW1pYm9sZFwiPnt7IHZhbHVlKCk/LlswXSB8IG1uZ0ZpbHRlclZhbHVlOiBmaWx0ZXIoKS5jb25maWcuZGVzY3JpcHRvciB8IGFzeW5jIH19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXByaW1hcnlcIj57eyBtYXRjaE1vZGVTeW1ib2woKSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1zZW1pYm9sZFwiPnt7IHZhbHVlKCk/LlsxXSB8IG1uZ0ZpbHRlclZhbHVlOiBmaWx0ZXIoKS5jb25maWcuZGVzY3JpcHRvciB8IGFzeW5jIH19PC9zcGFuPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1wcmltYXJ5XCI+e3sgbWF0Y2hNb2RlU3ltYm9sKCkgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtc2VtaWJvbGRcIj57eyB2YWx1ZSgpIHwgbW5nRmlsdGVyVmFsdWU6IGZpbHRlcigpLmNvbmZpZy5kZXNjcmlwdG9yIHwgYXN5bmMgfX08L3NwYW4+XG4gICAgICAgICAgICBAaWYgKGZpbHRlcigpLmNhc2VTZW5zaXRpdmUpIHtcbiAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJib3JkZXItc29saWQgYm9yZGVyIHJvdW5kZWQgcHgtMSB0ZXh0LXByaW1hcnktNDAwXCI+QWE8L3NtYWxsPlxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIEBpZiAoaXNBY3RpdmUoKSkge1xuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwaSBwaS10aW1lcyB0ZXh0LXhzXCIgKGNsaWNrKT1cIm9uUmVtb3ZlKCRldmVudClcIj48L3NwYW4+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cbjwvcC10YWc+XG4iXX0=","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ElementRef, ViewEncapsulation, booleanAttribute, computed, inject, input, output, signal, viewChild } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { ButtonDirective } from 'primeng/button';\nimport { Checkbox } from 'primeng/checkbox';\nimport { DatePicker } from 'primeng/datepicker';\nimport { InputNumber } from 'primeng/inputnumber';\nimport { InputText } from 'primeng/inputtext';\nimport { Message } from 'primeng/message';\nimport { ToggleButton } from 'primeng/togglebutton';\nimport { NEVER, switchMap } from 'rxjs';\nimport { FilterMatchMode, effectWithDeps, getI18nTypePropertyKey } from '@mediusinc/mng-commons/core';\nimport { FilterLookupTypeEnum, FilterTypeEnum } from '@mediusinc/mng-commons/filter';\nimport { AutocompleteComponent, DateRangeComponent, DropdownComponent, InputTrimDirective, NumberRangeComponent } from '@mediusinc/mng-commons/form';\nimport { lookupDataProvider } from '@mediusinc/mng-commons/form/api';\nimport { filterAdjustDisplayValueOnMatchModeChange, filterGetDefaultMatchMode } from '../../../helpers/filters';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/forms\";\nexport class TableFilterFormComponent {\n constructor() {\n this.lookupTypeDropdown = FilterLookupTypeEnum.Dropdown;\n this.lookupTypeAutocomplete = FilterLookupTypeEnum.Autocomplete;\n this.FilterTypeEnum = FilterTypeEnum;\n this.FilterMatchMode = FilterMatchMode;\n this.elementRef = inject(ElementRef);\n this.translate = inject(TranslateService);\n this.title = input(...(ngDevMode ? [undefined, { debugName: \"title\" }] : []));\n this.metadata = input.required(...(ngDevMode ? [{ debugName: \"metadata\" }] : []));\n this.genericDescriptor = input(...(ngDevMode ? [undefined, { debugName: \"genericDescriptor\" }] : []));\n this.model = input.required(...(ngDevMode ? [{ debugName: \"model\" }] : []));\n this.filter = input(...(ngDevMode ? [undefined, { debugName: \"filter\" }] : []));\n this.overlay = input(...(ngDevMode ? [undefined, { debugName: \"overlay\" }] : []));\n this.disabledProperties = input([], ...(ngDevMode ? [{ debugName: \"disabledProperties\" }] : []));\n this.enableCaseSensitive = input(true, ...(ngDevMode ? [{ debugName: \"enableCaseSensitive\" }] : []));\n this.propertySearch = input(false, ...(ngDevMode ? [{ debugName: \"propertySearch\", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));\n this.apply = output();\n this.propertyOptionsWithTranslations = computed(() => {\n const disabledProperties = this.disabledProperties();\n const filter = this.filter();\n return (this.metadata()?.map(d => {\n return {\n property: d.descriptor.property,\n label: d.descriptor.isGenericFilter ? d.descriptor.property : this.getPropertyLabelKey(d.descriptor),\n disabled: !filter && disabledProperties.includes(d.descriptor.property)\n };\n }) ?? []);\n }, ...(ngDevMode ? [{ debugName: \"propertyOptionsWithTranslations\" }] : []));\n this.selectedFilterMetadata = computed(() => {\n const property = this.propertyModel();\n return this.metadata().find(d => d.descriptor.property === property);\n }, ...(ngDevMode ? [{ debugName: \"selectedFilterMetadata\" }] : []));\n // change value lookup function to include the property name of the generic filter\n this.genericValueDataProvider = computed(() => {\n const genericValueProvider = this.genericDescriptor()?.valueLookup;\n if (genericValueProvider && genericValueProvider.serviceType) {\n const lookupFn = genericValueProvider.lookup;\n return lookupDataProvider({ service: genericValueProvider.serviceType }).withLookup((params, service, search) => {\n params = {\n ...params,\n filters: {\n ...params?.filters,\n field: {\n value: this.selectedFilterMetadata()?.descriptor.property,\n matchMode: this.selectedFilterMetadata()?.descriptor.filterType === FilterTypeEnum.LookupEnum ? FilterMatchMode.In : FilterMatchMode.StartsWith\n }\n }\n };\n return lookupFn(params, service, search);\n });\n }\n return;\n }, ...(ngDevMode ? [{ debugName: \"genericValueDataProvider\" }] : []));\n this.selectedDescriptorAsLookup = computed(() => {\n const filterDescriptor = this.selectedFilterMetadata()?.descriptor;\n return filterDescriptor !== undefined &&\n !filterDescriptor.isGenericFilter &&\n (filterDescriptor.filterType === FilterTypeEnum.Lookup || filterDescriptor.filterType === FilterTypeEnum.LookupEnum)\n ? filterDescriptor\n : undefined;\n }, ...(ngDevMode ? [{ debugName: \"selectedDescriptorAsLookup\" }] : []));\n this.isEdit = computed(() => this.filter() != null, ...(ngDevMode ? [{ debugName: \"isEdit\" }] : []));\n this.formSubmitted = signal(false, ...(ngDevMode ? [{ debugName: \"formSubmitted\" }] : []));\n this.formErrorMessage = signal([], ...(ngDevMode ? [{ debugName: \"formErrorMessage\" }] : []));\n // UI utilities\n this.filterForm = viewChild.required('filterForm');\n // Filter form model and form utilities\n this.propertyModel = signal(null, ...(ngDevMode ? [{ debugName: \"propertyModel\" }] : []));\n this.matchModeModel = signal(null, ...(ngDevMode ? [{ debugName: \"matchModeModel\" }] : []));\n this.valueModel = signal(null, ...(ngDevMode ? [{ debugName: \"valueModel\" }] : []));\n this.caseSensitiveModel = signal(false, ...(ngDevMode ? [{ debugName: \"caseSensitiveModel\" }] : []));\n this.isMultiselect = computed(() => this.matchModeModel() === FilterMatchMode.In || this.matchModeModel() === FilterMatchMode.NotIn, ...(ngDevMode ? [{ debugName: \"isMultiselect\" }] : []));\n effectWithDeps([this.filter], ([edit]) => {\n if (edit) {\n this.resetForm({\n property: edit.config.descriptor.property,\n matchMode: edit.displayMatchMode ?? edit.matchMode ?? null,\n value: edit.displayValue ?? edit.value,\n caseSensitive: edit.caseSensitive ?? false\n });\n }\n else {\n this.resetForm();\n }\n });\n effectWithDeps([this.selectedFilterMetadata], ([selectedFilterMetadata]) => {\n const descriptor = selectedFilterMetadata?.descriptor;\n const value = this.valueModel();\n if (value != null) {\n // reset value if filter type and value type mismatch\n if ((descriptor?.filterType === FilterTypeEnum.String && (value === true || value === false || value === 'true' || value === 'false' || value instanceof Date)) ||\n (descriptor?.filterType === FilterTypeEnum.Number && typeof value !== 'number' && isNaN(+value)) ||\n (descriptor?.filterType === FilterTypeEnum.Date && !(value instanceof Date))) {\n this.valueModel.set(null);\n }\n else if (descriptor?.filterType === FilterTypeEnum.Boolean && typeof value !== 'boolean') {\n this.valueModel.set(false);\n }\n }\n const matchModeOptions = selectedFilterMetadata?.matchModes ?? [];\n const matchMode = this.matchModeModel();\n const filterForm = this.filterForm();\n const isEdit = this.isEdit();\n if (matchModeOptions.length > 0 &&\n (!matchMode ||\n (!isEdit && (filterForm.controls['matchMode']?.pristine || filterForm.controls['matchMode']?.untouched)) ||\n !matchModeOptions.find(o => o.value === matchMode))) {\n // reset match mode is needed\n this.matchModeModel.set(filterGetDefaultMatchMode(this.selectedFilterMetadata()?.descriptor, matchModeOptions));\n }\n });\n effectWithDeps([this.matchModeModel], ([matchModeModel]) => this.valueModel.set(filterAdjustDisplayValueOnMatchModeChange(matchModeModel ?? undefined, this.valueModel())));\n toObservable(this.overlay)\n .pipe(switchMap(o => (o ? o.onShow : NEVER)), takeUntilDestroyed())\n .subscribe(() => {\n const formFields = this.elementRef.nativeElement.querySelectorAll('input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [role=\"combobox\"]:not([disabled])');\n const activeEl = document.activeElement;\n const activeInputIdx = activeEl ? [...formFields].findIndex(el => activeEl.isEqualNode(el)) : 0;\n if (activeInputIdx <= 0) {\n formFields[0]?.focus();\n }\n });\n }\n onFormSubmit(form) {\n this.formSubmitted.set(true);\n // mark all as dirty\n for (const key in form.controls) {\n form.controls[key].markAsDirty();\n }\n const property = this.propertyModel();\n const matchMode = this.matchModeModel();\n if (form.invalid || !property || !matchMode) {\n this.formErrorMessage.set([\n {\n severity: 'warn',\n summary: this.translate.instant('mngFilter.messages.invalidFormTitle'),\n detail: this.translate.instant('mngFilter.messages.invalidFormMessage')\n }\n ]);\n return;\n }\n this.apply.emit({\n property: property,\n matchMode: matchMode,\n value: this.valueModel(),\n caseSensitive: this.caseSensitiveModel()\n });\n // resetting the form is done from the parent component (filter-overlay-with-tag) for smoother animations\n }\n resetForm(value) {\n this.filterForm().resetForm(value);\n // somehow have to set case sensitivity manually\n this.caseSensitiveModel.set(value?.caseSensitive ?? false);\n this.formSubmitted.set(false);\n }\n getPropertyLabelKey(filterDescriptor) {\n let labelKey;\n if (filterDescriptor.title !== undefined && !filterDescriptor.titleUseModelBase) {\n labelKey = filterDescriptor.title;\n }\n else {\n labelKey = getI18nTypePropertyKey(this.model().i18nBaseKey, filterDescriptor.title ?? filterDescriptor.property);\n }\n return labelKey;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TableFilterFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.7\", type: TableFilterFormComponent, isStandalone: true, selector: \"mng-table-filter-form\", inputs: { title: { classPropertyName: \"title\", publicName: \"title\", isSignal: true, isRequired: false, transformFunction: null }, metadata: { classPropertyName: \"metadata\", publicName: \"metadata\", isSignal: true, isRequired: true, transformFunction: null }, genericDescriptor: { classPropertyName: \"genericDescriptor\", publicName: \"genericDescriptor\", isSignal: true, isRequired: false, transformFunction: null }, model: { classPropertyName: \"model\", publicName: \"model\", isSignal: true, isRequired: true, transformFunction: null }, filter: { classPropertyName: \"filter\", publicName: \"filter\", isSignal: true, isRequired: false, transformFunction: null }, overlay: { classPropertyName: \"overlay\", publicName: \"overlay\", isSignal: true, isRequired: false, transformFunction: null }, disabledProperties: { classPropertyName: \"disabledProperties\", publicName: \"disabledProperties\", isSignal: true, isRequired: false, transformFunction: null }, enableCaseSensitive: { classPropertyName: \"enableCaseSensitive\", publicName: \"enableCaseSensitive\", isSignal: true, isRequired: false, transformFunction: null }, propertySearch: { classPropertyName: \"propertySearch\", publicName: \"propertySearch\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { apply: \"apply\" }, host: { classAttribute: \"flex grow\" }, viewQueries: [{ propertyName: \"filterForm\", first: true, predicate: [\"filterForm\"], descendants: true, isSignal: true }], ngImport: i0, template: \"<div>\\n <div>\\n <h5>{{ filter() ? ('mngFilter.titleEdit' | translate) : ('mngFilter.titleAdd' | translate) }}</h5>\\n </div>\\n <form #filterForm=\\\"ngForm\\\" (ngSubmit)=\\\"onFormSubmit(filterForm)\\\" class=\\\"flex flex-col items-center lg:flex-row gap-4\\\">\\n <div class=\\\"w-full lg:w-auto\\\">\\n <mng-dropdown\\n name=\\\"property\\\"\\n id=\\\"property\\\"\\n tabindex=\\\"1\\\"\\n #propertyControl=\\\"ngModel\\\"\\n [(ngModel)]=\\\"propertyModel\\\"\\n [options]=\\\"propertyOptionsWithTranslations()\\\"\\n optionsValueProperty=\\\"property\\\"\\n optionsDisabledProperty=\\\"disabled\\\"\\n optionsLabelProperty=\\\"label\\\"\\n [placeholder]=\\\"'mngFilter.property' | translate\\\"\\n [optionsLabelTranslate]=\\\"!propertySearch()\\\"\\n [inlineSearch]=\\\"propertySearch()\\\"\\n required=\\\"true\\\"\\n className=\\\"w-full\\\"\\n [disabled]=\\\"isEdit()\\\"\\n [appendTo]=\\\"null\\\" />\\n </div>\\n <div class=\\\"w-full lg:w-auto\\\">\\n <mng-dropdown\\n name=\\\"matchMode\\\"\\n id=\\\"matchMode\\\"\\n [(ngModel)]=\\\"matchModeModel\\\"\\n className=\\\"w-full\\\"\\n [options]=\\\"selectedFilterMetadata()?.matchModes ?? []\\\"\\n [placeholder]=\\\"'mngFilter.matchMode' | translate\\\"\\n [disabled]=\\\"!propertyControl.value\\\"\\n class=\\\"self-end\\\"\\n required=\\\"true\\\"\\n [appendTo]=\\\"null\\\" />\\n </div>\\n @if (!(matchModeModel() === FilterMatchMode.Exists || matchModeModel() === FilterMatchMode.DoesNotExist)) {\\n <div class=\\\"w-full lg:w-auto flex flex-col\\\">\\n @switch (selectedFilterMetadata()?.descriptor?.filterType) {\\n @case (FilterTypeEnum.Number) {\\n @if (matchModeModel() === FilterMatchMode.Between) {\\n <mng-number-range\\n className=\\\"mng-filter-number\\\"\\n name=\\\"value\\\"\\n [(ngModel)]=\\\"valueModel\\\"\\n [placeholder]=\\\"'mngFilter.value' | translate\\\"\\n [useGrouping]=\\\"selectedFilterMetadata()?.descriptor?.numberUseGrouping ?? false\\\"\\n [minFractionDigits]=\\\"selectedFilterMetadata()?.numberConfig?.fractionsMin\\\"\\n [maxFractionDigits]=\\\"selectedFilterMetadata()?.numberConfig?.fractionsMax\\\"\\n required=\\\"true\\\" />\\n } @else {\\n <p-inputNumber\\n inputStyleClass=\\\"mng-filter-number\\\"\\n name=\\\"value\\\"\\n [(ngModel)]=\\\"valueModel\\\"\\n [styleClass]=\\\"'w-full'\\\"\\n [placeholder]=\\\"'mngFilter.value' | translate\\\"\\n [useGrouping]=\\\"selectedFilterMetadata()?.descriptor?.numberUseGrouping\\\"\\n [minFractionDigits]=\\\"selectedFilterMetadata()?.numberConfig?.fractionsMin\\\"\\n [maxFractionDigits]=\\\"selectedFilterMetadata()?.numberConfig?.fractionsMax\\\"\\n [disabled]=\\\"!matchModeModel()\\\"\\n required=\\\"true\\\" />\\n }\\n }\\n\\n @case (FilterTypeEnum.Boolean) {\\n <p-checkbox [(ngModel)]=\\\"valueModel\\\" [disabled]=\\\"!matchModeModel()\\\" name=\\\"value\\\" binary=\\\"true\\\" required=\\\"true\\\" />\\n }\\n @case (FilterTypeEnum.Date) {\\n @if (matchModeModel() === FilterMatchMode.Between) {\\n <mng-date-range\\n [(ngModel)]=\\\"valueModel\\\"\\n name=\\\"value\\\"\\n [showTime]=\\\"selectedFilterMetadata()?.dateConfig?.showTime ?? false\\\"\\n [showSeconds]=\\\"selectedFilterMetadata()?.dateConfig?.showSeconds ?? false\\\"\\n [dateFormat]=\\\"selectedFilterMetadata()?.dateConfig?.format\\\"\\n [placeholder]=\\\"'mngFilter.value' | translate\\\"\\n required=\\\"true\\\"></mng-date-range>\\n } @else {\\n <p-date-picker\\n appendTo=\\\"body\\\"\\n name=\\\"value\\\"\\n [(ngModel)]=\\\"valueModel\\\"\\n [styleClass]=\\\"'w-full'\\\"\\n [placeholder]=\\\"'mngFilter.value' | translate\\\"\\n [showIcon]=\\\"true\\\"\\n [showTime]=\\\"selectedFilterMetadata()?.dateConfig?.showTime ?? false\\\"\\n [showSeconds]=\\\"selectedFilterMetadata()?.dateConfig?.showSeconds ?? false\\\"\\n [dateFormat]=\\\"selectedFilterMetadata()?.dateConfig?.format\\\"\\n [firstDayOfWeek]=\\\"1\\\"\\n [disabled]=\\\"!matchModeModel()\\\"\\n required=\\\"true\\\">\\n </p-date-picker>\\n }\\n }\\n @case (FilterTypeEnum.Lookup) {\\n <ng-container *ngTemplateOutlet=\\\"lookupFilter\\\"></ng-container>\\n }\\n @case (FilterTypeEnum.LookupEnum) {\\n <ng-container *ngTemplateOutlet=\\\"lookupFilter\\\"></ng-container>\\n }\\n @default {\\n @if (selectedFilterMetadata()?.descriptor?.genericValueProvider && genericValueDataProvider()) {\\n <div class=\\\"flex\\\">\\n <mng-dropdown\\n [(ngModel)]=\\\"valueModel\\\"\\n name=\\\"value\\\"\\n [dataProvider]=\\\"genericValueDataProvider()\\\"\\n [className]=\\\"selectedFilterMetadata()?.descriptor?.className + ' ' + (enableCaseSensitive() ? 'rounded-r-none!' : '')\\\"\\n [dropdownClassName]=\\\"selectedFilterMetadata()?.descriptor?.dropdownClassName\\\"\\n [placeholder]=\\\"valueModel() ? undefined : ('mngFilter.value' | translate)\\\"\\n allowInput=\\\"true\\\"\\n [disabled]=\\\"!matchModeModel()\\\"\\n [appendTo]=\\\"null\\\"\\n required=\\\"true\\\" />\\n @if (enableCaseSensitive()) {\\n <p-toggle-button\\n [(ngModel)]=\\\"caseSensitiveModel\\\"\\n [disabled]=\\\"!matchModeModel()\\\"\\n name=\\\"caseSensitive\\\"\\n styleClass=\\\"mng-button-xs mng-toggle-button-addon-right\\\"\\n onLabel=\\\"Aa\\\"\\n offLabel=\\\"Aa\\\" />\\n }\\n </div>\\n } @else {\\n <div class=\\\"flex\\\">\\n <input\\n [(ngModel)]=\\\"valueModel\\\"\\n name=\\\"value\\\"\\n type=\\\"text\\\"\\n pInputText\\n class=\\\"mng-filter-string w-full\\\"\\n [class.rounded-r-none!]=\\\"enableCaseSensitive()\\\"\\n [attr.placeholder]=\\\"'mngFilter.value' | translate\\\"\\n [mngInputTrim]=\\\"selectedFilterMetadata()?.descriptor?.trimOption\\\"\\n [disabled]=\\\"!matchModeModel()\\\"\\n [placeholder]=\\\"'mngFilter.value' | translate\\\"\\n required=\\\"true\\\" />\\n @if (enableCaseSensitive()) {\\n <p-toggle-button\\n [(ngModel)]=\\\"caseSensitiveModel\\\"\\n [disabled]=\\\"!matchModeModel()\\\"\\n name=\\\"caseSensitive\\\"\\n styleClass=\\\"mng-button-xs mng-toggle-button-addon-right\\\"\\n onLabel=\\\"Aa\\\"\\n offLabel=\\\"Aa\\\" />\\n }\\n </div>\\n }\\n }\\n }\\n <ng-template #lookupFilter>\\n @if (selectedDescriptorAsLookup(); as lookupFilterDescriptor) {\\n @switch (lookupFilterDescriptor.lookupType) {\\n @case (lookupTypeAutocomplete) {\\n <mng-autocomplete\\n [(ngModel)]=\\\"valueModel\\\"\\n name=\\\"value\\\"\\n [dataProvider]=\\\"lookupFilterDescriptor.dataProvider\\\"\\n [optionsTrackProperty]=\\\"lookupFilterDescriptor.optionsValueProperty\\\"\\n [optionsValueProperty]=\\\"lookupFilterDescriptor.optionsValueProperty\\\"\\n [optionsLabelProperty]=\\\"lookupFilterDescriptor.optionsLabelProperty\\\"\\n [optionsLabelTranslate]=\\\"lookupFilterDescriptor.optionsLabelTranslate\\\"\\n [multiselect]=\\\"isMultiselect()\\\"\\n [autoClear]=\\\"lookupFilterDescriptor.autocompleteAutoClear ?? false\\\"\\n [openOnFocus]=\\\"lookupFilterDescriptor.autocompleteAutoClear ?? true\\\"\\n [inlineSearch]=\\\"lookupFilterDescriptor.autocompleteInlineSearch ?? false\\\"\\n [placeholder]=\\\"'mngFilter.value' | translate\\\"\\n [className]=\\\"lookupFilterDescriptor.className\\\"\\n [dropdownClassName]=\\\"lookupFilterDescriptor.dropdownClassName\\\"\\n [searchTrim]=\\\"selectedFilterMetadata()?.descriptor?.trimOption\\\"\\n [disabled]=\\\"!matchModeModel()\\\"\\n required=\\\"true\\\">\\n </mng-autocomplete>\\n }\\n @case (lookupTypeDropdown) {\\n <mng-dropdown\\n [(ngModel)]=\\\"valueModel\\\"\\n name=\\\"value\\\"\\n [dataProvider]=\\\"lookupFilterDescriptor.dataProvider\\\"\\n [optionsValueProperty]=\\\"lookupFilterDescriptor.optionsValueProperty\\\"\\n [optionsLabelProperty]=\\\"lookupFilterDescriptor.optionsLabelProperty\\\"\\n [optionsLabelTranslate]=\\\"lookupFilterDescriptor.optionsLabelTranslate\\\"\\n [multiselect]=\\\"isMultiselect()\\\"\\n [placeholder]=\\\"'mngFilter.value' | translate\\\"\\n [className]=\\\"lookupFilterDescriptor.className + ' w-full'\\\"\\n [dropdownClassName]=\\\"lookupFilterDescriptor.dropdownClassName\\\"\\n showClear=\\\"false\\\"\\n [disabled]=\\\"!matchModeModel()\\\"\\n [appendTo]=\\\"null\\\"\\n required=\\\"true\\\">\\n </mng-dropdown>\\n }\\n }\\n } @else if (selectedFilterMetadata()?.descriptor?.isGenericFilter && genericValueDataProvider()) {\\n <mng-dropdown\\n [(ngModel)]=\\\"valueModel\\\"\\n name=\\\"value\\\"\\n [dataProvider]=\\\"genericValueDataProvider()\\\"\\n [placeholder]=\\\"'mngFilter.value' | translate\\\"\\n showClear=\\\"false\\\"\\n [disabled]=\\\"!matchModeModel()\\\"\\n [appendTo]=\\\"null\\\"\\n required=\\\"true\\\">\\n </mng-dropdown>\\n }\\n </ng-template>\\n </div>\\n }\\n <div class=\\\"flex justify-end\\\">\\n <button pButton type=\\\"submit\\\" class=\\\"self-end\\\">\\n {{ (filter() ? 'general.apply' : 'general.add') | translate }}\\n </button>\\n </div>\\n </form>\\n @if (formSubmitted() && filterForm.invalid) {\\n @for (message of formErrorMessage(); track message) {\\n <p-message [severity]=\\\"message.severity\\\" [text]=\\\"message.detail\\\" [icon]=\\\"message.icon\\\" styleClass=\\\"mt-2\\\" />\\n }\\n }\\n</div>\\n\", styles: [\".mng-toggle-button-addon-right{border-color:var(--p-select-border-color)!important;border-left:none!important;border-top-left-radius:0!important;border-bottom-left-radius:0!important;min-width:35px}.mng-toggle-button-addon-right .p-togglebutton-content{padding-left:.25rem;padding-right:.25rem}\\n\"], dependencies: [{ kind: \"component\", type: DropdownComponent, selector: \"mng-dropdown\", inputs: [\"dataProvider\", \"options\", \"optionsTrackProperty\", \"optionsLabelProperty\", \"optionsLabelTranslate\", \"optionsValueProperty\", \"optionsDisabledProperty\", \"multiselect\", \"placeholder\", \"showClear\", \"selectFirstItem\", \"className\", \"dropdownClassName\", \"changeValueOnBlur\", \"loading\", \"disabled\", \"allowInput\", \"appendTo\", \"templates\", \"inlineSearch\", \"searchTrim\"], outputs: [\"valueChange\", \"blur\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i1.ɵNgNoValidate, selector: \"form:not([ngNoForm]):not([ngNativeValidate])\" }, { kind: \"directive\", type: i1.DefaultValueAccessor, selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { kind: \"directive\", type: i1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i1.NgControlStatusGroup, selector: \"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]\" }, { kind: \"directive\", type: i1.RequiredValidator, selector: \":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]\", inputs: [\"required\"] }, { kind: \"directive\", type: i1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"directive\", type: i1.NgForm, selector: \"form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]\", inputs: [\"ngFormOptions\"], outputs: [\"ngSubmit\"], exportAs: [\"ngForm\"] }, { kind: \"directive\", type: InputTrimDirective, selector: \"[mngInputTrim]\", inputs: [\"mngInputTrim\"] }, { kind: \"component\", type: NumberRangeComponent, selector: \"mng-number-range\", inputs: [\"placeholder\", \"useGrouping\", \"minFractionDigits\", \"maxFractionDigits\", \"required\", \"disabled\", \"vertical\", \"templates\", \"className\"], outputs: [\"keyDown\"] }, { kind: \"component\", type: InputNumber, selector: \"p-inputNumber, p-inputnumber, p-input-number\", inputs: [\"showButtons\", \"format\", \"buttonLayout\", \"inputId\", \"styleClass\", \"placeholder\", \"tabindex\", \"title\", \"ariaLabelledBy\", \"ariaDescribedBy\", \"ariaLabel\", \"ariaRequired\", \"autocomplete\", \"incrementButtonClass\", \"decrementButtonClass\", \"incrementButtonIcon\", \"decrementButtonIcon\", \"readonly\", \"allowEmpty\", \"locale\", \"localeMatcher\", \"mode\", \"currency\", \"currencyDisplay\", \"useGrouping\", \"minFractionDigits\", \"maxFractionDigits\", \"prefix\", \"suffix\", \"inputStyle\", \"inputStyleClass\", \"showClear\", \"autofocus\"], outputs: [\"onInput\", \"onFocus\", \"onBlur\", \"onKeyDown\", \"onClear\"] }, { kind: \"component\", type: DateRangeComponent, selector: \"mng-date-range\", inputs: [\"placeholder\", \"showTime\", \"showSeconds\", \"dateFormat\", \"className\", \"required\", \"disabled\", \"vertical\", \"templates\"] }, { kind: \"component\", type: AutocompleteComponent, selector: \"mng-autocomplete\", inputs: [\"dataProvider\", \"optionsTrackProperty\", \"optionsValueProperty\", \"optionsLabelProperty\", \"optionsLabelTranslate\", \"inlineSearch\", \"openOnFocus\", \"multiselect\", \"placeholder\", \"className\", \"dropdownClassName\", \"showClear\", \"autoClear\", \"selectFirst\", \"searchTrim\", \"disabled\", \"templates\"], outputs: [\"valueChange\", \"blur\"] }, { kind: \"component\", type: Checkbox, selector: \"p-checkbox, p-checkBox, p-check-box\", inputs: [\"value\", \"binary\", \"ariaLabelledBy\", \"ariaLabel\", \"tabindex\", \"inputId\", \"inputStyle\", \"styleClass\", \"inputClass\", \"indeterminate\", \"formControl\", \"checkboxIcon\", \"readonly\", \"autofocus\", \"trueValue\", \"falseValue\", \"variant\", \"size\"], outputs: [\"onChange\", \"onFocus\", \"onBlur\"] }, { kind: \"component\", type: Message, selector: \"p-message\", inputs: [\"severity\", \"text\", \"escape\", \"style\", \"styleClass\", \"closable\", \"icon\", \"closeIcon\", \"life\", \"showTransitionOptions\", \"hideTransitionOptions\", \"size\", \"variant\"], outputs: [\"onClose\"] }, { kind: \"directive\", type: InputText, selector: \"[pInputText]\", inputs: [\"pSize\", \"variant\", \"fluid\", \"invalid\"] }, { kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"component\", type: ToggleButton, selector: \"p-toggleButton, p-togglebutton, p-toggle-button\", inputs: [\"onLabel\", \"offLabel\", \"onIcon\", \"offIcon\", \"ariaLabel\", \"ariaLabelledBy\", \"styleClass\", \"inputId\", \"tabindex\", \"iconPos\", \"autofocus\", \"size\", \"allowEmpty\", \"fluid\"], outputs: [\"onChange\"] }, { kind: \"component\", type: DatePicker, selector: \"p-datePicker, p-datepicker, p-date-picker\", inputs: [\"iconDisplay\", \"styleClass\", \"inputStyle\", \"inputId\", \"inputStyleClass\", \"placeholder\", \"ariaLabelledBy\", \"ariaLabel\", \"iconAriaLabel\", \"dateFormat\", \"multipleSeparator\", \"rangeSeparator\", \"inline\", \"showOtherMonths\", \"selectOtherMonths\", \"showIcon\", \"icon\", \"readonlyInput\", \"shortYearCutoff\", \"hourFormat\", \"timeOnly\", \"stepHour\", \"stepMinute\", \"stepSecond\", \"showSeconds\", \"showOnFocus\", \"showWeek\", \"startWeekFromFirstDayOfYear\", \"showClear\", \"dataType\", \"selectionMode\", \"maxDateCount\", \"showButtonBar\", \"todayButtonStyleClass\", \"clearButtonStyleClass\", \"autofocus\", \"autoZIndex\", \"baseZIndex\", \"panelStyleClass\", \"panelStyle\", \"keepInvalid\", \"hideOnDateTimeSelect\", \"touchUI\", \"timeSeparator\", \"focusTrap\", \"showTransitionOptions\", \"hideTransitionOptions\", \"tabindex\", \"minDate\", \"maxDate\", \"disabledDates\", \"disabledDays\", \"showTime\", \"responsiveOptions\", \"numberOfMonths\", \"firstDayOfWeek\", \"view\", \"defaultDate\", \"appendTo\"], outputs: [\"onFocus\", \"onBlur\", \"onClose\", \"onSelect\", \"onClear\", \"onInput\", \"onTodayClick\", \"onClearClick\", \"onMonthChange\", \"onYearChange\", \"onClickOutside\", \"onShow\"] }, { kind: \"directive\", type: ButtonDirective, selector: \"[pButton]\", inputs: [\"iconPos\", \"loadingIcon\", \"loading\", \"severity\", \"raised\", \"rounded\", \"text\", \"outlined\", \"size\", \"plain\", \"fluid\", \"label\", \"icon\", \"buttonProps\"] }, { kind: \"pipe\", type: TranslatePipe, name: \"translate\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TableFilterFormComponent, decorators: [{\n type: Component,\n args: [{ selector: 'mng-table-filter-form', imports: [\n DropdownComponent,\n FormsModule,\n TranslatePipe,\n InputTrimDirective,\n NumberRangeComponent,\n InputNumber,\n DateRangeComponent,\n AutocompleteComponent,\n Checkbox,\n Message,\n InputText,\n NgTemplateOutlet,\n ToggleButton,\n DatePicker,\n ButtonDirective\n ], changeDetection: ChangeDetectionStrategy.OnPush, host: {\n class: 'flex grow'\n }, encapsulation: ViewEncapsulation.None, template: \"<div>\\n <div>\\n <h5>{{ filter() ? ('mngFilter.titleEdit' | translate) : ('mngFilter.titleAdd' | translate) }}</h5>\\n </div>\\n <form #filterForm=\\\"ngForm\\\" (ngSubmit)=\\\"onFormSubmit(filterForm)\\\" class=\\\"flex flex-col items-center lg:flex-row gap-4\\\">\\n <div class=\\\"w-full lg:w-auto\\\">\\n <mng-dropdown\\n name=\\\"property\\\"\\n id=\\\"property\\\"\\n tabindex=\\\"1\\\"\\n #propertyControl=\\\"ngModel\\\"\\n [(ngModel)]=\\\"propertyModel\\\"\\n [options]=\\\"propertyOptionsWithTranslations()\\\"\\n optionsValueProperty=\\\"property\\\"\\n optionsDisabledProperty=\\\"disabled\\\"\\n optionsLabelProperty=\\\"label\\\"\\n [placeholder]=\\\"'mngFilter.property' | translate\\\"\\n [optionsLabelTranslate]=\\\"!propertySearch()\\\"\\n [inlineSearch]=\\\"propertySearch()\\\"\\n required=\\\"true\\\"\\n className=\\\"w-full\\\"\\n [disabled]=\\\"isEdit()\\\"\\n [appendTo]=\\\"null\\\" />\\n </div>\\n <div class=\\\"w-full lg:w-auto\\\">\\n <mng-dropdown\\n name=\\\"matchMode\\\"\\n id=\\\"matchMode\\\"\\n [(ngModel)]=\\\"matchModeModel\\\"\\n className=\\\"w-full\\\"\\n [options]=\\\"selectedFilterMetadata()?.matchModes ?? []\\\"\\n [placeholder]=\\\"'mngFilter.matchMode' | translate\\\"\\n [disabled]=\\\"!propertyControl.value\\\"\\n class=\\\"self-end\\\"\\n required=\\\"true\\\"\\n [appendTo]=\\\"null\\\" />\\n </div>\\n @if (!(matchModeModel() === FilterMatchMode.Exists || matchModeModel() === FilterMatchMode.DoesNotExist)) {\\n <div class=\\\"w-full lg:w-auto flex flex-col\\\">\\n @switch (selectedFilterMetadata()?.descriptor?.filterType) {\\n @case (FilterTypeEnum.Number) {\\n @if (matchModeModel() === FilterMatchMode.Between) {\\n <mng-number-range\\n className=\\\"mng-filter-number\\\"\\n name=\\\"value\\\"\\n [(ngModel)]=\\\"valueModel\\\"\\n [placeholder]=\\\"'mngFilter.value' | translate\\\"\\n [useGrouping]=\\\"selectedFilterMetadata()?.descriptor?.numberUseGrouping ?? false\\\"\\n [minFractionDigits]=\\\"selectedFilterMetadata()?.numberConfig?.fractionsMin\\\"\\n [maxFractionDigits]=\\\"selectedFilterMetadata()?.numberConfig?.fractionsMax\\\"\\n required=\\\"true\\\" />\\n } @else {\\n <p-inputNumber\\n inputStyleClass=\\\"mng-filter-number\\\"\\n name=\\\"value\\\"\\n [(ngModel)]=\\\"valueModel\\\"\\n [styleClass]=\\\"'w-full'\\\"\\n [placeholder]=\\\"'mngFilter.value' | translate\\\"\\n [useGrouping]=\\\"selectedFilterMetadata()?.descriptor?.numberUseGrouping\\\"\\n [minFractionDigits]=\\\"selectedFilterMetadata()?.numberConfig?.fractionsMin\\\"\\n [maxFractionDigits]=\\\"selectedFilterMetadata()?.numberConfig?.fractionsMax\\\"\\n [disabled]=\\\"!matchModeModel()\\\"\\n required=\\\"true\\\" />\\n }\\n }\\n\\n @case (FilterTypeEnum.Boolean) {\\n <p-checkbox [(ngModel)]=\\\"valueModel\\\" [disabled]=\\\"!matchModeModel()\\\" name=\\\"value\\\" binary=\\\"true\\\" required=\\\"true\\\" />\\n }\\n @case (FilterTypeEnum.Date) {\\n @if (matchModeModel() === FilterMatchMode.Between) {\\n <mng-date-range\\n [(ngModel)]=\\\"valueModel\\\"\\n name=\\\"value\\\"\\n [showTime]=\\\"selectedFilterMetadata()?.dateConfig?.showTime ?? false\\\"\\n [showSeconds]=\\\"selectedFilterMetadata()?.dateConfig?.showSeconds ?? false\\\"\\n [dateFormat]=\\\"selectedFilterMetadata()?.dateConfig?.format\\\"\\n [placeholder]=\\\"'mngFilter.value' | translate\\\"\\n required=\\\"true\\\"></mng-date-range>\\n } @else {\\n <p-date-picker\\n appendTo=\\\"body\\\"\\n name=\\\"value\\\"\\n [(ngModel)]=\\\"valueModel\\\"\\n [styleClass]=\\\"'w-full'\\\"\\n [placeholder]=\\\"'mngFilter.value' | translate\\\"\\n [showIcon]=\\\"true\\\"\\n [showTime]=\\\"selectedFilterMetadata()?.dateConfig?.showTime ?? false\\\"\\n [showSeconds]=\\\"selectedFilterMetadata()?.dateConfig?.showSeconds ?? false\\\"\\n [dateFormat]=\\\"selectedFilterMetadata()?.dateConfig?.format\\\"\\n [firstDayOfWeek]=\\\"1\\\"\\n [disabled]=\\\"!matchModeModel()\\\"\\n required=\\\"true\\\">\\n </p-date-picker>\\n }\\n }\\n @case (FilterTypeEnum.Lookup) {\\n <ng-container *ngTemplateOutlet=\\\"lookupFilter\\\"></ng-container>\\n }\\n @case (FilterTypeEnum.LookupEnum) {\\n <ng-container *ngTemplateOutlet=\\\"lookupFilter\\\"></ng-container>\\n }\\n @default {\\n @if (selectedFilterMetadata()?.descriptor?.genericValueProvider && genericValueDataProvider()) {\\n <div class=\\\"flex\\\">\\n <mng-dropdown\\n [(ngModel)]=\\\"valueModel\\\"\\n name=\\\"value\\\"\\n [dataProvider]=\\\"genericValueDataProvider()\\\"\\n [className]=\\\"selectedFilterMetadata()?.descriptor?.className + ' ' + (enableCaseSensitive() ? 'rounded-r-none!' : '')\\\"\\n [dropdownClassName]=\\\"selectedFilterMetadata()?.descriptor?.dropdownClassName\\\"\\n [placeholder]=\\\"valueModel() ? undefined : ('mngFilter.value' | translate)\\\"\\n allowInput=\\\"true\\\"\\n [disabled]=\\\"!matchModeModel()\\\"\\n [appendTo]=\\\"null\\\"\\n required=\\\"true\\\" />\\n @if (enableCaseSensitive()) {\\n <p-toggle-button\\n [(ngModel)]=\\\"caseSensitiveModel\\\"\\n [disabled]=\\\"!matchModeModel()\\\"\\n name=\\\"caseSensitive\\\"\\n styleClass=\\\"mng-button-xs mng-toggle-button-addon-right\\\"\\n onLabel=\\\"Aa\\\"\\n offLabel=\\\"Aa\\\" />\\n }\\n </div>\\n } @else {\\n <div class=\\\"flex\\\">\\n <input\\n [(ngModel)]=\\\"valueModel\\\"\\n name=\\\"value\\\"\\n type=\\\"text\\\"\\n pInputText\\n class=\\\"mng-filter-string w-full\\\"\\n [class.rounded-r-none!]=\\\"enableCaseSensitive()\\\"\\n [attr.placeholder]=\\\"'mngFilter.value' | translate\\\"\\n [mngInputTrim]=\\\"selectedFilterMetadata()?.descriptor?.trimOption\\\"\\n [disabled]=\\\"!matchModeModel()\\\"\\n [placeholder]=\\\"'mngFilter.value' | translate\\\"\\n required=\\\"true\\\" />\\n @if (enableCaseSensitive()) {\\n <p-toggle-button\\n [(ngModel)]=\\\"caseSensitiveModel\\\"\\n [disabled]=\\\"!matchModeModel()\\\"\\n name=\\\"caseSensitive\\\"\\n styleClass=\\\"mng-button-xs mng-toggle-button-addon-right\\\"\\n onLabel=\\\"Aa\\\"\\n offLabel=\\\"Aa\\\" />\\n }\\n </div>\\n }\\n }\\n }\\n <ng-template #lookupFilter>\\n @if (selectedDescriptorAsLookup(); as lookupFilterDescriptor) {\\n @switch (lookupFilterDescriptor.lookupType) {\\n @case (lookupTypeAutocomplete) {\\n <mng-autocomplete\\n [(ngModel)]=\\\"valueModel\\\"\\n name=\\\"value\\\"\\n [dataProvider]=\\\"lookupFilterDescriptor.dataProvider\\\"\\n [optionsTrackProperty]=\\\"lookupFilterDescriptor.optionsValueProperty\\\"\\n [optionsValueProperty]=\\\"lookupFilterDescriptor.optionsValueProperty\\\"\\n [optionsLabelProperty]=\\\"lookupFilterDescriptor.optionsLabelProperty\\\"\\n [optionsLabelTranslate]=\\\"lookupFilterDescriptor.optionsLabelTranslate\\\"\\n [multiselect]=\\\"isMultiselect()\\\"\\n [autoClear]=\\\"lookupFilterDescriptor.autocompleteAutoClear ?? false\\\"\\n [openOnFocus]=\\\"lookupFilterDescriptor.autocompleteAutoClear ?? true\\\"\\n [inlineSearch]=\\\"lookupFilterDescriptor.autocompleteInlineSearch ?? false\\\"\\n [placeholder]=\\\"'mngFilter.value' | translate\\\"\\n [className]=\\\"lookupFilterDescriptor.className\\\"\\n [dropdownClassName]=\\\"lookupFilterDescriptor.dropdownClassName\\\"\\n [searchTrim]=\\\"selectedFilterMetadata()?.descriptor?.trimOption\\\"\\n [disabled]=\\\"!matchModeModel()\\\"\\n required=\\\"true\\\">\\n </mng-autocomplete>\\n }\\n @case (lookupTypeDropdown) {\\n <mng-dropdown\\n [(ngModel)]=\\\"valueModel\\\"\\n name=\\\"value\\\"\\n [dataProvider]=\\\"lookupFilterDescriptor.dataProvider\\\"\\n [optionsValueProperty]=\\\"lookupFilterDescriptor.optionsValueProperty\\\"\\n [optionsLabelProperty]=\\\"lookupFilterDescriptor.optionsLabelProperty\\\"\\n [optionsLabelTranslate]=\\\"lookupFilterDescriptor.optionsLabelTranslate\\\"\\n [multiselect]=\\\"isMultiselect()\\\"\\n [placeholder]=\\\"'mngFilter.value' | translate\\\"\\n [className]=\\\"lookupFilterDescriptor.className + ' w-full'\\\"\\n [dropdownClassName]=\\\"lookupFilterDescriptor.dropdownClassName\\\"\\n showClear=\\\"false\\\"\\n [disabled]=\\\"!matchModeModel()\\\"\\n [appendTo]=\\\"null\\\"\\n required=\\\"true\\\">\\n </mng-dropdown>\\n }\\n }\\n } @else if (selectedFilterMetadata()?.descriptor?.isGenericFilter && genericValueDataProvider()) {\\n <mng-dropdown\\n [(ngModel)]=\\\"valueModel\\\"\\n name=\\\"value\\\"\\n [dataProvider]=\\\"genericValueDataProvider()\\\"\\n [placeholder]=\\\"'mngFilter.value' | translate\\\"\\n showClear=\\\"false\\\"\\n [disabled]=\\\"!matchModeModel()\\\"\\n [appendTo]=\\\"null\\\"\\n required=\\\"true\\\">\\n </mng-dropdown>\\n }\\n </ng-template>\\n </div>\\n }\\n <div class=\\\"flex justify-end\\\">\\n <button pButton type=\\\"submit\\\" class=\\\"self-end\\\">\\n {{ (filter() ? 'general.apply' : 'general.add') | translate }}\\n </button>\\n </div>\\n </form>\\n @if (formSubmitted() && filterForm.invalid) {\\n @for (message of formErrorMessage(); track message) {\\n <p-message [severity]=\\\"message.severity\\\" [text]=\\\"message.detail\\\" [icon]=\\\"message.icon\\\" styleClass=\\\"mt-2\\\" />\\n }\\n }\\n</div>\\n\", styles: [\".mng-toggle-button-addon-right{border-color:var(--p-select-border-color)!important;border-left:none!important;border-top-left-radius:0!important;border-bottom-left-radius:0!important;min-width:35px}.mng-toggle-button-addon-right .p-togglebutton-content{padding-left:.25rem;padding-right:.25rem}\\n\"] }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGFibGUvc3JjL2NvbXBvbmVudHMvZmlsdGVyL2ZpbHRlci1mb3JtL2ZpbHRlci1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3RhYmxlL3NyYy9jb21wb25lbnRzL2ZpbHRlci9maWx0ZXItZm9ybS9maWx0ZXItZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUMsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN0SyxPQUFPLEVBQUMsa0JBQWtCLEVBQUUsWUFBWSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDNUUsT0FBTyxFQUFDLFdBQVcsRUFBUyxNQUFNLGdCQUFnQixDQUFDO0FBRW5ELE9BQU8sRUFBQyxhQUFhLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0MsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzFDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUV4QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1B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QUFLLEtBQUssU0FBUyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUM5RSxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDO1FBQ3RDLENBQUM7YUFBTSxDQUFDO1lBQ0osUUFBUSxHQUFHLHNCQUFzQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsS0FBSyxJQUFJLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3JILENBQUM7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDOzhHQXRNUSx3QkFBd0I7a0dBQXhCLHdCQUF3QixtL0NDcERyQywyOGFBK05BLGtXRGpNUSxpQkFBaUIsNGNBQ2pCLFdBQVcscXdDQUVYLGtCQUFrQixxRkFDbEIsb0JBQW9CLG1PQUNwQixXQUFXLGdxQkFDWCxrQkFBa0IsMkxBQ2xCLHFCQUFxQix5WUFDckIsUUFBUSxnWEFDUixPQUFPLHlQQUNQLFNBQVMsMkdBQ1QsZ0JBQWdCLG9KQUNoQixZQUFZLG9TQUNaLFVBQVUsZ3JDQUNWLGVBQWUsK01BWmYsYUFBYTs7MkZBb0JSLHdCQUF3QjtrQkEzQnBDLFNBQVM7K0JBQ0ksdUJBQXVCLFdBR3hCO3dCQUNMLGlCQUFpQjt3QkFDakIsV0FBVzt3QkFDWCxhQUFhO3dCQUNiLGtCQUFrQjt3QkFDbEIsb0JBQW9CO3dCQUNwQixXQUFXO3dCQUNYLGtCQUFrQjt3QkFDbEIscUJBQXFCO3dCQUNyQixRQUFRO3dCQUNSLE9BQU87d0JBQ1AsU0FBUzt3QkFDVCxnQkFBZ0I7d0JBQ2hCLFlBQVk7d0JBQ1osVUFBVTt3QkFDVixlQUFlO3FCQUNsQixtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTSxRQUN6Qzt3QkFDRixLQUFLLEVBQUUsV0FBVztxQkFDckIsaUJBQ2MsaUJBQWlCLENBQUMsSUFBSSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TmdUZW1wbGF0ZU91dGxldH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRWxlbWVudFJlZiwgVmlld0VuY2Fwc3VsYXRpb24sIGJvb2xlYW5BdHRyaWJ1dGUsIGNvbXB1dGVkLCBpbmplY3QsIGlucHV0LCBvdXRwdXQsIHNpZ25hbCwgdmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7dGFrZVVudGlsRGVzdHJveWVkLCB0b09ic2VydmFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7Rm9ybXNNb2R1bGUsIE5nRm9ybX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQge1RyYW5zbGF0ZVBpcGUsIFRyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtCdXR0b25EaXJlY3RpdmV9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcbmltcG9ydCB7Q2hlY2tib3h9IGZyb20gJ3ByaW1lbmcvY2hlY2tib3gnO1xuaW1wb3J0IHtEYXRlUGlja2VyfSBmcm9tICdwcmltZW5nL2RhdGVwaWNrZXInO1xuaW1wb3J0IHtJbnB1dE51bWJlcn0gZnJvbSAncHJpbWVuZy9pbnB1dG51bWJlcic7XG5pbXBvcnQge0lucHV0VGV4dH0gZnJvbSAncHJpbWVuZy9pbnB1dHRleHQnO1xuaW1wb3J0IHtNZXNzYWdlfSBmcm9tICdwcmltZW5nL21lc3NhZ2UnO1xuaW1wb3J0IHtQb3BvdmVyfSBmcm9tICdwcmltZW5nL3BvcG92ZXInO1xuaW1wb3J0IHtUb2dnbGVCdXR0b259IGZyb20gJ3ByaW1lbmcvdG9nZ2xlYnV0dG9uJztcbmltcG9ydCB7TkVWRVIsIHN3aXRjaE1hcH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7RmlsdGVyTWF0Y2hNb2RlLCBGaWx0ZXJNYXRjaE1vZGVFeHRlbmRlZFR5cGUsIElMb29rdXBEYXRhUHJvdmlkZXIsIGVmZmVjdFdpdGhEZXBzLCBnZXRJMThuVHlwZVByb3BlcnR5S2V5fSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuaW1wb3J0IHtGaWx0ZXJEZXNjcmlwdG9yLCBGaWx0ZXJHZW5lcmljRGVzY3JpcHRvciwgRmlsdGVyTG9va3VwRGVzY3JpcHRvciwgRmlsdGVyTG9va3VwVHlwZUVudW0sIEZpbHRlclR5cGVFbnVtfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2ZpbHRlcic7XG5pbXBvcnQge0F1dG9jb21wbGV0ZUNvbXBvbmVudCwgRGF0ZVJhbmdlQ29tcG9uZW50LCBEcm9wZG93bkNvbXBvbmVudCwgSW5wdXRUcmltRGlyZWN0aXZlLCBOdW1iZXJSYW5nZUNvbXBvbmVudH0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9mb3JtJztcbmltcG9ydCB7bG9va3VwRGF0YVByb3ZpZGVyfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2Zvcm0vYXBpJztcbmltcG9ydCB7TW9kZWxEZXNjcmlwdG9yfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL21vZGVsJztcblxuaW1wb3J0IHtmaWx0ZXJBZGp1c3REaXNwbGF5VmFsdWVPbk1hdGNoTW9kZUNoYW5nZSwgZmlsdGVyR2V0RGVmYXVsdE1hdGNoTW9kZX0gZnJvbSAnLi4vLi4vLi4vaGVscGVycy9maWx0ZXJzJztcbmltcG9ydCB7RmlsdGVyQ29uZmlnLCBGaWx0ZXJGb3JtRW1pdEV2ZW50LCBGaWx0ZXJTdGF0ZVdpdGhDb25maWd9IGZyb20gJy4uLy4uLy4uL21vZGVscy9maWx0ZXIubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ21uZy10YWJsZS1maWx0ZXItZm9ybScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ZpbHRlci1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vZmlsdGVyLWZvcm0uY29tcG9uZW50LmNzcycsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBEcm9wZG93bkNvbXBvbmVudCxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIFRyYW5zbGF0ZVBpcGUsXG4gICAgICAgIElucHV0VHJpbURpcmVjdGl2ZSxcbiAgICAgICAgTnVtYmVyUmFuZ2VDb21wb25lbnQsXG4gICAgICAgIElucHV0TnVtYmVyLFxuICAgICAgICBEYXRlUmFuZ2VDb21wb25lbnQsXG4gICAgICAgIEF1dG9jb21wbGV0ZUNvbXBvbmVudCxcbiAgICAgICAgQ2hlY2tib3gsXG4gICAgICAgIE1lc3NhZ2UsXG4gICAgICAgIElucHV0VGV4dCxcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgVG9nZ2xlQnV0dG9uLFxuICAgICAgICBEYXRlUGlja2VyLFxuICAgICAgICBCdXR0b25EaXJlY3RpdmVcbiAgICBdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdmbGV4IGdyb3cnXG4gICAgfSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlRmlsdGVyRm9ybUNvbXBvbmVudCB7XG4gICAgcHVibGljIHJlYWRvbmx5IGxvb2t1cFR5cGVEcm9wZG93bjogRmlsdGVyTG9va3VwVHlwZUVudW0gPSBGaWx0ZXJMb29rdXBUeXBlRW51bS5Ecm9wZG93bjtcbiAgICBwdWJsaWMgcmVhZG9ubHkgbG9va3VwVHlwZUF1dG9jb21wbGV0ZTogRmlsdGVyTG9va3VwVHlwZUVudW0gPSBGaWx0ZXJMb29rdXBUeXBlRW51bS5BdXRvY29tcGxldGU7XG4gICAgcHVibGljIHJlYWRvbmx5IEZpbHRlclR5cGVFbnVtID0gRmlsdGVyVHlwZUVudW07XG4gICAgcHVibGljIHJlYWRvbmx5IEZpbHRlck1hdGNoTW9kZSA9IEZpbHRlck1hdGNoTW9kZTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcblxuICAgIHB1YmxpYyB0aXRsZSA9IGlucHV0PHN0cmluZz4oKTtcbiAgICBwdWJsaWMgbWV0YWRhdGEgPSBpbnB1dC5yZXF1aXJlZDxGaWx0ZXJDb25maWdbXT4oKTtcbiAgICBwdWJsaWMgZ2VuZXJpY0Rlc2NyaXB0b3IgPSBpbnB1dDxGaWx0ZXJHZW5lcmljRGVzY3JpcHRvcj4oKTtcbiAgICBwdWJsaWMgbW9kZWwgPSBpbnB1dC5yZXF1aXJlZDxNb2RlbERlc2NyaXB0b3I8YW55Pj4oKTtcbiAgICBwdWJsaWMgZmlsdGVyID0gaW5wdXQ8RmlsdGVyU3RhdGVXaXRoQ29uZmlnPigpO1xuICAgIHB1YmxpYyBvdmVybGF5ID0gaW5wdXQ8UG9wb3Zlcj4oKTtcbiAgICBwdWJsaWMgZGlzYWJsZWRQcm9wZXJ0aWVzID0gaW5wdXQ8c3RyaW5nW10+KFtdKTtcbiAgICBwdWJsaWMgZW5hYmxlQ2FzZVNlbnNpdGl2ZSA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuICAgIHB1YmxpYyBwcm9wZXJ0eVNlYXJjaCA9IGlucHV0KGZhbHNlLCB7dHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlfSk7XG5cbiAgICBwdWJsaWMgYXBwbHkgPSBvdXRwdXQ8RmlsdGVyRm9ybUVtaXRFdmVudD4oKTtcblxuICAgIHB1YmxpYyBwcm9wZXJ0eU9wdGlvbnNXaXRoVHJhbnNsYXRpb25zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBkaXNhYmxlZFByb3BlcnRpZXMgPSB0aGlzLmRpc2FibGVkUHJvcGVydGllcygpO1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmZpbHRlcigpO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5tZXRhZGF0YSgpPy5tYXAoZCA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDxQcm9wZXJ0eU1vZGVsPntcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IGQuZGVzY3JpcHRvci5wcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGQuZGVzY3JpcHRvci5pc0dlbmVyaWNGaWx0ZXIgPyBkLmRlc2NyaXB0b3IucHJvcGVydHkgOiB0aGlzLmdldFByb3BlcnR5TGFiZWxLZXkoZC5kZXNjcmlwdG9yKSxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6ICFmaWx0ZXIgJiYgZGlzYWJsZWRQcm9wZXJ0aWVzLmluY2x1ZGVzKGQuZGVzY3JpcHRvci5wcm9wZXJ0eSlcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSkgPz8gW11cbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIHB1YmxpYyBzZWxlY3RlZEZpbHRlck1ldGFkYXRhID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IHRoaXMucHJvcGVydHlNb2RlbCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5tZXRhZGF0YSgpLmZpbmQoZCA9PiBkLmRlc2NyaXB0b3IucHJvcGVydHkgPT09IHByb3BlcnR5KTtcbiAgICB9KTtcblxuICAgIC8vIGNoYW5nZSB2YWx1ZSBsb29rdXAgZnVuY3Rpb24gdG8gaW5jbHVkZSB0aGUgcHJvcGVydHkgbmFtZSBvZiB0aGUgZ2VuZXJpYyBmaWx0ZXJcbiAgICBwdWJsaWMgZ2VuZXJpY1ZhbHVlRGF0YVByb3ZpZGVyID0gY29tcHV0ZWQ8SUxvb2t1cERhdGFQcm92aWRlcjxzdHJpbmcsIGFueSwgYW55LCAnZmllbGQnPiB8IHVuZGVmaW5lZD4oKCkgPT4ge1xuICAgICAgICBjb25zdCBnZW5lcmljVmFsdWVQcm92aWRlciA9IHRoaXMuZ2VuZXJpY0Rlc2NyaXB0b3IoKT8udmFsdWVMb29rdXA7XG5cbiAgICAgICAgaWYgKGdlbmVyaWNWYWx1ZVByb3ZpZGVyICYmIGdlbmVyaWNWYWx1ZVByb3ZpZGVyLnNlcnZpY2VUeXBlKSB7XG4gICAgICAgICAgICBjb25zdCBsb29rdXBGbiA9IGdlbmVyaWNWYWx1ZVByb3ZpZGVyLmxvb2t1cDtcbiAgICAgICAgICAgIHJldHVybiBsb29rdXBEYXRhUHJvdmlkZXI8c3RyaW5nLCBhbnksIGFueSwgJ2ZpZWxkJz4oe3NlcnZpY2U6IGdlbmVyaWNWYWx1ZVByb3ZpZGVyLnNlcnZpY2VUeXBlfSkud2l0aExvb2t1cCgocGFyYW1zLCBzZXJ2aWNlLCBzZWFyY2gpID0+IHtcbiAgICAgICAgICAgICAgICBwYXJhbXMgPSB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4ucGFyYW1zPy5maWx0ZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5zZWxlY3RlZEZpbHRlck1ldGFkYXRhKCk/LmRlc2NyaXB0b3IucHJvcGVydHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hNb2RlOiB0aGlzLnNlbGVjdGVkRmlsdGVyTWV0YWRhdGEoKT8uZGVzY3JpcHRvci5maWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlRW51bS5Mb29rdXBFbnVtID8gRmlsdGVyTWF0Y2hNb2RlLkluIDogRmlsdGVyTWF0Y2hNb2RlLlN0YXJ0c1dpdGhcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvb2t1cEZuKHBhcmFtcywgc2VydmljZSwgc2VhcmNoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9KTtcblxuICAgIHB1YmxpYyBzZWxlY3RlZERlc2NyaXB0b3JBc0xvb2t1cCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgZmlsdGVyRGVzY3JpcHRvciA9IHRoaXMuc2VsZWN0ZWRGaWx0ZXJNZXRhZGF0YSgpPy5kZXNjcmlwdG9yO1xuICAgICAgICByZXR1cm4gZmlsdGVyRGVzY3JpcHRvciAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAhZmlsdGVyRGVzY3JpcHRvci5pc0dlbmVyaWNGaWx0ZXIgJiZcbiAgICAgICAgICAgIChmaWx0ZXJEZXNjcmlwdG9yLmZpbHRlclR5cGUgPT09IEZpbHRlclR5cGVFbnVtLkxvb2t1cCB8fCBmaWx0ZXJEZXNjcmlwdG9yLmZpbHRlclR5cGUgPT09IEZpbHRlclR5cGVFbnVtLkxvb2t1cEVudW0pXG4gICAgICAgICAgICA/IChmaWx0ZXJEZXNjcmlwdG9yIGFzIEZpbHRlckxvb2t1cERlc2NyaXB0b3I8YW55LCBhbnk+KVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfSk7XG5cbiAgICBwdWJsaWMgaXNFZGl0ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5maWx0ZXIoKSAhPSBudWxsKTtcbiAgICBwdWJsaWMgZm9ybVN1Ym1pdHRlZCA9IHNpZ25hbChmYWxzZSk7XG4gICAgcHVibGljIGZvcm1FcnJvck1lc3NhZ2UgPSBzaWduYWw8YW55PihbXSk7XG5cbiAgICAvLyBVSSB1dGlsaXRpZXNcbiAgICBwcml2YXRlIGZpbHRlckZvcm0gPSB2aWV3Q2hpbGQucmVxdWlyZWQ8TmdGb3JtPignZmlsdGVyRm9ybScpO1xuXG4gICAgLy8gRmlsdGVyIGZvcm0gbW9kZWwgYW5kIGZvcm0gdXRpbGl0aWVzXG4gICAgcHVibGljIHByb3BlcnR5TW9kZWwgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gICAgcHVibGljIG1hdGNoTW9kZU1vZGVsID0gc2lnbmFsPEZpbHRlck1hdGNoTW9kZUV4dGVuZGVkVHlwZSB8IG51bGw+KG51bGwpO1xuICAgIHB1YmxpYyB2YWx1ZU1vZGVsID0gc2lnbmFsPGFueSB8IGFueVtdIHwgbnVsbD4obnVsbCk7XG4gICAgcHVibGljIGNhc2VTZW5zaXRpdmVNb2RlbCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgICBwdWJsaWMgaXNNdWx0aXNlbGVjdCA9IGNvbXB1dGVkKCgpID0+IHRoaXMubWF0Y2hNb2RlTW9kZWwoKSA9PT0gRmlsdGVyTWF0Y2hNb2RlLkluIHx8IHRoaXMubWF0Y2hNb2RlTW9kZWwoKSA9PT0gRmlsdGVyTWF0Y2hNb2RlLk5vdEluKTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBlZmZlY3RXaXRoRGVwcyhbdGhpcy5maWx0ZXJdLCAoW2VkaXRdKSA9PiB7XG4gICAgICAgICAgICBpZiAoZWRpdCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRGb3JtKHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IGVkaXQuY29uZmlnLmRlc2NyaXB0b3IucHJvcGVydHksXG4gICAgICAgICAgICAgICAgICAgIG1hdGNoTW9kZTogZWRpdC5kaXNwbGF5TWF0Y2hNb2RlID8/IGVkaXQubWF0Y2hNb2RlID8/IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlZGl0LmRpc3BsYXlWYWx1ZSA/PyBlZGl0LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBjYXNlU2Vuc2l0aXZlOiBlZGl0LmNhc2VTZW5zaXRpdmUgPz8gZmFsc2VcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldEZvcm0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZWZmZWN0V2l0aERlcHMoW3RoaXMuc2VsZWN0ZWRGaWx0ZXJNZXRhZGF0YV0sIChbc2VsZWN0ZWRGaWx0ZXJNZXRhZGF0YV0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBzZWxlY3RlZEZpbHRlck1ldGFkYXRhPy5kZXNjcmlwdG9yO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnZhbHVlTW9kZWwoKTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyByZXNldCB2YWx1ZSBpZiBmaWx0ZXIgdHlwZSBhbmQgdmFsdWUgdHlwZSBtaXNtYXRjaFxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgKGRlc2NyaXB0b3I/LmZpbHRlclR5cGUgPT09IEZpbHRlclR5cGVFbnVtLlN0cmluZyAmJiAodmFsdWUgPT09IHRydWUgfHwgdmFsdWUgPT09IGZhbHNlIHx8IHZhbHVlID09PSAndHJ1ZScgfHwgdmFsdWUgPT09ICdmYWxzZScgfHwgdmFsdWUgaW5zdGFuY2VvZiBEYXRlKSkgfHxcbiAgICAgICAgICAgICAgICAgICAgKGRlc2NyaXB0b3I/LmZpbHRlclR5cGUgPT09IEZpbHRlclR5cGVFbnVtLk51bWJlciAmJiB0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInICYmIGlzTmFOKCt2YWx1ZSkpIHx8XG4gICAgICAgICAgICAgICAgICAgIChkZXNjcmlwdG9yPy5maWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlRW51bS5EYXRlICYmICEodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZU1vZGVsLnNldChudWxsKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRlc2NyaXB0b3I/LmZpbHRlclR5cGUgPT09IEZpbHRlclR5cGVFbnVtLkJvb2xlYW4gJiYgdHlwZW9mIHZhbHVlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZU1vZGVsLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBtYXRjaE1vZGVPcHRpb25zID0gc2VsZWN0ZWRGaWx0ZXJNZXRhZGF0YT8ubWF0Y2hNb2RlcyA/PyBbXTtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoTW9kZSA9IHRoaXMubWF0Y2hNb2RlTW9kZWwoKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlckZvcm0gPSB0aGlzLmZpbHRlckZvcm0oKTtcbiAgICAgICAgICAgIGNvbnN0IGlzRWRpdCA9IHRoaXMuaXNFZGl0KCk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgbWF0Y2hNb2RlT3B0aW9ucy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgKCFtYXRjaE1vZGUgfHxcbiAgICAgICAgICAgICAgICAgICAgKCFpc0VkaXQgJiYgKGZpbHRlckZvcm0uY29udHJvbHNbJ21hdGNoTW9kZSddPy5wcmlzdGluZSB8fCBmaWx0ZXJGb3JtLmNvbnRyb2xzWydtYXRjaE1vZGUnXT8udW50b3VjaGVkKSkgfHxcbiAgICAgICAgICAgICAgICAgICAgIW1hdGNoTW9kZU9wdGlvbnMuZmluZChvID0+IG8udmFsdWUgPT09IG1hdGNoTW9kZSkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyByZXNldCBtYXRjaCBtb2RlIGlzIG5lZWRlZFxuICAgICAgICAgICAgICAgIHRoaXMubWF0Y2hNb2RlTW9kZWwuc2V0KGZpbHRlckdldERlZmF1bHRNYXRjaE1vZGUodGhpcy5zZWxlY3RlZEZpbHRlck1ldGFkYXRhKCk/LmRlc2NyaXB0b3IsIG1hdGNoTW9kZU9wdGlvbnMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZWZmZWN0V2l0aERlcHMoW3RoaXMubWF0Y2hNb2RlTW9kZWxdLCAoW21hdGNoTW9kZU1vZGVsXSkgPT4gdGhpcy52YWx1ZU1vZGVsLnNldChmaWx0ZXJBZGp1c3REaXNwbGF5VmFsdWVPbk1hdGNoTW9kZUNoYW5nZShtYXRjaE1vZGVNb2RlbCA/PyB1bmRlZmluZWQsIHRoaXMudmFsdWVNb2RlbCgpKSkpO1xuXG4gICAgICAgIHRvT2JzZXJ2YWJsZSh0aGlzLm92ZXJsYXkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAobyA9PiAobyA/IG8ub25TaG93IDogTkVWRVIpKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9ybUZpZWxkcyA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgICAgICAgICAgICAgICdpbnB1dDpub3QoW2Rpc2FibGVkXSksIHNlbGVjdDpub3QoW2Rpc2FibGVkXSksIHRleHRhcmVhOm5vdChbZGlzYWJsZWRdKSwgW3JvbGU9XCJjb21ib2JveFwiXTpub3QoW2Rpc2FibGVkXSknXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhY3RpdmVFbCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aXZlSW5wdXRJZHggPSBhY3RpdmVFbCA/IFsuLi5mb3JtRmllbGRzXS5maW5kSW5kZXgoZWwgPT4gYWN0aXZlRWwuaXNFcXVhbE5vZGUoZWwpKSA6IDA7XG4gICAgICAgICAgICAgICAgaWYgKGFjdGl2ZUlucHV0SWR4IDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkc1swXT8uZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkZvcm1TdWJtaXQoZm9ybTogTmdGb3JtKSB7XG4gICAgICAgIHRoaXMuZm9ybVN1Ym1pdHRlZC5zZXQodHJ1ZSk7XG5cbiAgICAgICAgLy8gbWFyayBhbGwgYXMgZGlydHlcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZm9ybS5jb250cm9scykge1xuICAgICAgICAgICAgZm9ybS5jb250cm9sc1trZXldLm1hcmtBc0RpcnR5KCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IHRoaXMucHJvcGVydHlNb2RlbCgpO1xuICAgICAgICBjb25zdCBtYXRjaE1vZGUgPSB0aGlzLm1hdGNoTW9kZU1vZGVsKCk7XG4gICAgICAgIGlmIChmb3JtLmludmFsaWQgfHwgIXByb3BlcnR5IHx8ICFtYXRjaE1vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUVycm9yTWVzc2FnZS5zZXQoW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc2V2ZXJpdHk6ICd3YXJuJyxcbiAgICAgICAgICAgICAgICAgICAgc3VtbWFyeTogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnbW5nRmlsdGVyLm1lc3NhZ2VzLmludmFsaWRGb3JtVGl0bGUnKSxcbiAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdtbmdGaWx0ZXIubWVzc2FnZXMuaW52YWxpZEZvcm1NZXNzYWdlJylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYXBwbHkuZW1pdCh7XG4gICAgICAgICAgICBwcm9wZXJ0eTogcHJvcGVydHksXG4gICAgICAgICAgICBtYXRjaE1vZGU6IG1hdGNoTW9kZSxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlTW9kZWwoKSxcbiAgICAgICAgICAgIGNhc2VTZW5zaXRpdmU6IHRoaXMuY2FzZVNlbnNpdGl2ZU1vZGVsKClcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gcmVzZXR0aW5nIHRoZSBmb3JtIGlzIGRvbmUgZnJvbSB0aGUgcGFyZW50IGNvbXBvbmVudCAoZmlsdGVyLW92ZXJsYXktd2l0aC10YWcpIGZvciBzbW9vdGhlciBhbmltYXRpb25zXG4gICAgfVxuXG4gICAgcHVibGljIHJlc2V0Rm9ybSh2YWx1ZT86IEZpbHRlckZvcm1Nb2RlbCkge1xuICAgICAgICB0aGlzLmZpbHRlckZvcm0oKS5yZXNldEZvcm0odmFsdWUpO1xuICAgICAgICAvLyBzb21laG93IGhhdmUgdG8gc2V0IGNhc2Ugc2Vuc2l0aXZpdHkgbWFudWFsbHlcbiAgICAgICAgdGhpcy5jYXNlU2Vuc2l0aXZlTW9kZWwuc2V0KHZhbHVlPy5jYXNlU2Vuc2l0aXZlID8/IGZhbHNlKTtcbiAgICAgICAgdGhpcy5mb3JtU3VibWl0dGVkLnNldChmYWxzZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQcm9wZXJ0eUxhYmVsS2V5KGZpbHRlckRlc2NyaXB0b3I6IEZpbHRlckRlc2NyaXB0b3I8YW55LCBhbnk+KSB7XG4gICAgICAgIGxldCBsYWJlbEtleTogc3RyaW5nO1xuICAgICAgICBpZiAoZmlsdGVyRGVzY3JpcHRvci50aXRsZSAhPT0gdW5kZWZpbmVkICYmICFmaWx0ZXJEZXNjcmlwdG9yLnRpdGxlVXNlTW9kZWxCYXNlKSB7XG4gICAgICAgICAgICBsYWJlbEtleSA9IGZpbHRlckRlc2NyaXB0b3IudGl0bGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsYWJlbEtleSA9IGdldEkxOG5UeXBlUHJvcGVydHlLZXkodGhpcy5tb2RlbCgpLmkxOG5CYXNlS2V5LCBmaWx0ZXJEZXNjcmlwdG9yLnRpdGxlID8/IGZpbHRlckRlc2NyaXB0b3IucHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsYWJlbEtleTtcbiAgICB9XG59XG5cbmludGVyZmFjZSBGaWx0ZXJGb3JtTW9kZWwge1xuICAgIHByb3BlcnR5OiBzdHJpbmcgfCBudWxsO1xuICAgIG1hdGNoTW9kZTogRmlsdGVyTWF0Y2hNb2RlRXh0ZW5kZWRUeXBlIHwgbnVsbDtcbiAgICB2YWx1ZTogYW55IHwgbnVsbDtcbiAgICBjYXNlU2Vuc2l0aXZlOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgUHJvcGVydHlNb2RlbCB7XG4gICAgcHJvcGVydHk6IHN0cmluZztcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIGRpc2FibGVkOiBib29sZWFuO1xufVxuIiwiPGRpdj5cbiAgICA8ZGl2PlxuICAgICAgICA8aDU+e3sgZmlsdGVyKCkgPyAoJ21uZ0ZpbHRlci50aXRsZUVkaXQnIHwgdHJhbnNsYXRlKSA6ICgnbW5nRmlsdGVyLnRpdGxlQWRkJyB8IHRyYW5zbGF0ZSkgfX08L2g1PlxuICAgIDwvZGl2PlxuICAgIDxmb3JtICNmaWx0ZXJGb3JtPVwibmdGb3JtXCIgKG5nU3VibWl0KT1cIm9uRm9ybVN1Ym1pdChmaWx0ZXJGb3JtKVwiIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgbGc6ZmxleC1yb3cgZ2FwLTRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBsZzp3LWF1dG9cIj5cbiAgICAgICAgICAgIDxtbmctZHJvcGRvd25cbiAgICAgICAgICAgICAgICBuYW1lPVwicHJvcGVydHlcIlxuICAgICAgICAgICAgICAgIGlkPVwicHJvcGVydHlcIlxuICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMVwiXG4gICAgICAgICAgICAgICAgI3Byb3BlcnR5Q29udHJvbD1cIm5nTW9kZWxcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicHJvcGVydHlNb2RlbFwiXG4gICAgICAgICAgICAgICAgW29wdGlvbnNdPVwicHJvcGVydHlPcHRpb25zV2l0aFRyYW5zbGF0aW9ucygpXCJcbiAgICAgICAgICAgICAgICBvcHRpb25zVmFsdWVQcm9wZXJ0eT1cInByb3BlcnR5XCJcbiAgICAgICAgICAgICAgICBvcHRpb25zRGlzYWJsZWRQcm9wZXJ0eT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBvcHRpb25zTGFiZWxQcm9wZXJ0eT1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ21uZ0ZpbHRlci5wcm9wZXJ0eScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFtvcHRpb25zTGFiZWxUcmFuc2xhdGVdPVwiIXByb3BlcnR5U2VhcmNoKClcIlxuICAgICAgICAgICAgICAgIFtpbmxpbmVTZWFyY2hdPVwicHJvcGVydHlTZWFyY2goKVwiXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGxcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0VkaXQoKVwiXG4gICAgICAgICAgICAgICAgW2FwcGVuZFRvXT1cIm51bGxcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBsZzp3LWF1dG9cIj5cbiAgICAgICAgICAgIDxtbmctZHJvcGRvd25cbiAgICAgICAgICAgICAgICBuYW1lPVwibWF0Y2hNb2RlXCJcbiAgICAgICAgICAgICAgICBpZD1cIm1hdGNoTW9kZVwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtYXRjaE1vZGVNb2RlbFwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsXCJcbiAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJzZWxlY3RlZEZpbHRlck1ldGFkYXRhKCk/Lm1hdGNoTW9kZXMgPz8gW11cIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInbW5nRmlsdGVyLm1hdGNoTW9kZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhcHJvcGVydHlDb250cm9sLnZhbHVlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNlbGYtZW5kXCJcbiAgICAgICAgICAgICAgICByZXF1aXJlZD1cInRydWVcIlxuICAgICAgICAgICAgICAgIFthcHBlbmRUb109XCJudWxsXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIEBpZiAoIShtYXRjaE1vZGVNb2RlbCgpID09PSBGaWx0ZXJNYXRjaE1vZGUuRXhpc3RzIHx8IG1hdGNoTW9kZU1vZGVsKCkgPT09IEZpbHRlck1hdGNoTW9kZS5Eb2VzTm90RXhpc3QpKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIGxnOnctYXV0byBmbGV4IGZsZXgtY29sXCI+XG4gICAgICAgICAgICAgICAgQHN3aXRjaCAoc2VsZWN0ZWRGaWx0ZXJNZXRhZGF0YSgpPy5kZXNjcmlwdG9yPy5maWx0ZXJUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIEBjYXNlIChGaWx0ZXJUeXBlRW51bS5OdW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAobWF0Y2hNb2RlTW9kZWwoKSA9PT0gRmlsdGVyTWF0Y2hNb2RlLkJldHdlZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bW5nLW51bWJlci1yYW5nZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtbmctZmlsdGVyLW51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidmFsdWVNb2RlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInbW5nRmlsdGVyLnZhbHVlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt1c2VHcm91cGluZ109XCJzZWxlY3RlZEZpbHRlck1ldGFkYXRhKCk/LmRlc2NyaXB0b3I/Lm51bWJlclVzZUdyb3VwaW5nID8/IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21pbkZyYWN0aW9uRGlnaXRzXT1cInNlbGVjdGVkRmlsdGVyTWV0YWRhdGEoKT8ubnVtYmVyQ29uZmlnPy5mcmFjdGlvbnNNaW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF4RnJhY3Rpb25EaWdpdHNdPVwic2VsZWN0ZWRGaWx0ZXJNZXRhZGF0YSgpPy5udW1iZXJDb25maWc/LmZyYWN0aW9uc01heFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cC1pbnB1dE51bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFN0eWxlQ2xhc3M9XCJtbmctZmlsdGVyLW51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidmFsdWVNb2RlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZUNsYXNzXT1cIid3LWZ1bGwnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidtbmdGaWx0ZXIudmFsdWUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3VzZUdyb3VwaW5nXT1cInNlbGVjdGVkRmlsdGVyTWV0YWRhdGEoKT8uZGVzY3JpcHRvcj8ubnVtYmVyVXNlR3JvdXBpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWluRnJhY3Rpb25EaWdpdHNdPVwic2VsZWN0ZWRGaWx0ZXJNZXRhZGF0YSgpPy5udW1iZXJDb25maWc/LmZyYWN0aW9uc01pblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXhGcmFjdGlvbkRpZ2l0c109XCJzZWxlY3RlZEZpbHRlck1ldGFkYXRhKCk/Lm51bWJlckNvbmZpZz8uZnJhY3Rpb25zTWF4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFtYXRjaE1vZGVNb2RlbCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ9XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEBjYXNlIChGaWx0ZXJUeXBlRW51bS5Cb29sZWFuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8cC1jaGVja2JveCBbKG5nTW9kZWwpXT1cInZhbHVlTW9kZWxcIiBbZGlzYWJsZWRdPVwiIW1hdGNoTW9kZU1vZGVsKClcIiBuYW1lPVwidmFsdWVcIiBiaW5hcnk9XCJ0cnVlXCIgcmVxdWlyZWQ9XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBAY2FzZSAoRmlsdGVyVHlwZUVudW0uRGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChtYXRjaE1vZGVNb2RlbCgpID09PSBGaWx0ZXJNYXRjaE1vZGUuQmV0d2Vlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtbmctZGF0ZS1yYW5nZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInZhbHVlTW9kZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1RpbWVdPVwic2VsZWN0ZWRGaWx0ZXJNZXRhZGF0YSgpPy5kYXRlQ29uZmlnPy5zaG93VGltZSA/PyBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93U2Vjb25kc109XCJzZWxlY3RlZEZpbHRlck1ldGFkYXRhKCk/LmRhdGVDb25maWc/LnNob3dTZWNvbmRzID8/IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGVGb3JtYXRdPVwic2VsZWN0ZWRGaWx0ZXJNZXRhZGF0YSgpPy5kYXRlQ29uZmlnPy5mb3JtYXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ21uZ0ZpbHRlci52YWx1ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZD1cInRydWVcIj48L21uZy1kYXRlLXJhbmdlPlxuICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtZGF0ZS1waWNrZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG89XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ2YWx1ZU1vZGVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlQ2xhc3NdPVwiJ3ctZnVsbCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ21uZ0ZpbHRlci52YWx1ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0ljb25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93VGltZV09XCJzZWxlY3RlZEZpbHRlck1ldGFkYXRhKCk/LmRhdGVDb25maWc/LnNob3dUaW1lID8/IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dTZWNvbmRzXT1cInNlbGVjdGVkRmlsdGVyTWV0YWRhdGEoKT8uZGF0ZUNvbmZpZz8uc2hvd1NlY29uZHMgPz8gZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0ZUZvcm1hdF09XCJzZWxlY3RlZEZpbHRlck1ldGFkYXRhKCk/LmRhdGVDb25maWc/LmZvcm1hdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaXJzdERheU9mV2Vla109XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFtYXRjaE1vZGVNb2RlbCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ9XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wLWRhdGUtcGlja2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBjYXNlIChGaWx0ZXJUeXBlRW51bS5Mb29rdXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb29rdXBGaWx0ZXJcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBAY2FzZSAoRmlsdGVyVHlwZUVudW0uTG9va3VwRW51bSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxvb2t1cEZpbHRlclwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoc2VsZWN0ZWRGaWx0ZXJNZXRhZGF0YSgpPy5kZXNjcmlwdG9yPy5nZW5lcmljVmFsdWVQcm92aWRlciAmJiBnZW5lcmljVmFsdWVEYXRhUHJvdmlkZXIoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtbmctZHJvcGRvd25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidmFsdWVNb2RlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFQcm92aWRlcl09XCJnZW5lcmljVmFsdWVEYXRhUHJvdmlkZXIoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NOYW1lXT1cInNlbGVjdGVkRmlsdGVyTWV0YWRhdGEoKT8uZGVzY3JpcHRvcj8uY2xhc3NOYW1lICsgJyAnICsgKGVuYWJsZUNhc2VTZW5zaXRpdmUoKSA/ICdyb3VuZGVkLXItbm9uZSEnIDogJycpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkcm9wZG93bkNsYXNzTmFtZV09XCJzZWxlY3RlZEZpbHRlck1ldGFkYXRhKCk/LmRlc2NyaXB0b3I/LmRyb3Bkb3duQ2xhc3NOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJ2YWx1ZU1vZGVsKCkgPyB1bmRlZmluZWQgOiAoJ21uZ0ZpbHRlci52YWx1ZScgfCB0cmFuc2xhdGUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93SW5wdXQ9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhbWF0Y2hNb2RlTW9kZWwoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwZW5kVG9dPVwibnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZD1cInRydWVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGVuYWJsZUNhc2VTZW5zaXRpdmUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtdG9nZ2xlLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY2FzZVNlbnNpdGl2ZU1vZGVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIW1hdGNoTW9kZU1vZGVsKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJjYXNlU2Vuc2l0aXZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZUNsYXNzPVwibW5nLWJ1dHRvbi14cyBtbmctdG9nZ2xlLWJ1dHRvbi1hZGRvbi1yaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25MYWJlbD1cIkFhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZMYWJlbD1cIkFhXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInZhbHVlTW9kZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBJbnB1dFRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibW5nLWZpbHRlci1zdHJpbmcgdy1mdWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5yb3VuZGVkLXItbm9uZSFdPVwiZW5hYmxlQ2FzZVNlbnNpdGl2ZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnBsYWNlaG9sZGVyXT1cIidtbmdGaWx0ZXIudmFsdWUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttbmdJbnB1dFRyaW1dPVwic2VsZWN0ZWRGaWx0ZXJNZXRhZGF0YSgpPy5kZXNjcmlwdG9yPy50cmltT3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhbWF0Y2hNb2RlTW9kZWwoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ21uZ0ZpbHRlci52YWx1ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ9XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChlbmFibGVDYXNlU2Vuc2l0aXZlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLXRvZ2dsZS1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNhc2VTZW5zaXRpdmVNb2RlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFtYXRjaE1vZGVNb2RlbCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiY2FzZVNlbnNpdGl2ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVDbGFzcz1cIm1uZy1idXR0b24teHMgbW5nLXRvZ2dsZS1idXR0b24tYWRkb24tcmlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTGFiZWw9XCJBYVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZmTGFiZWw9XCJBYVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2xvb2t1cEZpbHRlcj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChzZWxlY3RlZERlc2NyaXB0b3JBc0xvb2t1cCgpOyBhcyBsb29rdXBGaWx0ZXJEZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBAc3dpdGNoIChsb29rdXBGaWx0ZXJEZXNjcmlwdG9yLmxvb2t1cFR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAobG9va3VwVHlwZUF1dG9jb21wbGV0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bW5nLWF1dG9jb21wbGV0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ2YWx1ZU1vZGVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YVByb3ZpZGVyXT1cImxvb2t1cEZpbHRlckRlc2NyaXB0b3IuZGF0YVByb3ZpZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zVHJhY2tQcm9wZXJ0eV09XCJsb29rdXBGaWx0ZXJEZXNjcmlwdG9yLm9wdGlvbnNWYWx1ZVByb3BlcnR5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zVmFsdWVQcm9wZXJ0eV09XCJsb29rdXBGaWx0ZXJEZXNjcmlwdG9yLm9wdGlvbnNWYWx1ZVByb3BlcnR5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zTGFiZWxQcm9wZXJ0eV09XCJsb29rdXBGaWx0ZXJEZXNjcmlwdG9yLm9wdGlvbnNMYWJlbFByb3BlcnR5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zTGFiZWxUcmFuc2xhdGVdPVwibG9va3VwRmlsdGVyRGVzY3JpcHRvci5vcHRpb25zTGFiZWxUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW211bHRpc2VsZWN0XT1cImlzTXVsdGlzZWxlY3QoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b0NsZWFyXT1cImxvb2t1cEZpbHRlckRlc2NyaXB0b3IuYXV0b2NvbXBsZXRlQXV0b0NsZWFyID8/IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcGVuT25Gb2N1c109XCJsb29rdXBGaWx0ZXJEZXNjcmlwdG9yLmF1dG9jb21wbGV0ZUF1dG9DbGVhciA/PyB0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTZWFyY2hdPVwibG9va3VwRmlsdGVyRGVzY3JpcHRvci5hdXRvY29tcGxldGVJbmxpbmVTZWFyY2ggPz8gZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidtbmdGaWx0ZXIudmFsdWUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc05hbWVdPVwibG9va3VwRmlsdGVyRGVzY3JpcHRvci5jbGFzc05hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Ryb3Bkb3duQ2xhc3NOYW1lXT1cImxvb2t1cEZpbHRlckRlc2NyaXB0b3IuZHJvcGRvd25DbGFzc05hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFRyaW1dPVwic2VsZWN0ZWRGaWx0ZXJNZXRhZGF0YSgpPy5kZXNjcmlwdG9yPy50cmltT3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhbWF0Y2hNb2RlTW9kZWwoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZD1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tbmctYXV0b2NvbXBsZXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAobG9va3VwVHlwZURyb3Bkb3duKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtbmctZHJvcGRvd25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidmFsdWVNb2RlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFQcm92aWRlcl09XCJsb29rdXBGaWx0ZXJEZXNjcmlwdG9yLmRhdGFQcm92aWRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc1ZhbHVlUHJvcGVydHldPVwibG9va3VwRmlsdGVyRGVzY3JpcHRvci5vcHRpb25zVmFsdWVQcm9wZXJ0eVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc0xhYmVsUHJvcGVydHldPVwibG9va3VwRmlsdGVyRGVzY3JpcHRvci5vcHRpb25zTGFiZWxQcm9wZXJ0eVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc0xhYmVsVHJhbnNsYXRlXT1cImxvb2t1cEZpbHRlckRlc2NyaXB0b3Iub3B0aW9uc0xhYmVsVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttdWx0aXNlbGVjdF09XCJpc011bHRpc2VsZWN0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidtbmdGaWx0ZXIudmFsdWUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc05hbWVdPVwibG9va3VwRmlsdGVyRGVzY3JpcHRvci5jbGFzc05hbWUgKyAnIHctZnVsbCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Ryb3Bkb3duQ2xhc3NOYW1lXT1cImxvb2t1cEZpbHRlckRlc2NyaXB0b3IuZHJvcGRvd25DbGFzc05hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0NsZWFyPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFtYXRjaE1vZGVNb2RlbCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcHBlbmRUb109XCJudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21uZy1kcm9wZG93bj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gQGVsc2UgaWYgKHNlbGVjdGVkRmlsdGVyTWV0YWRhdGEoKT8uZGVzY3JpcHRvcj8uaXNHZW5lcmljRmlsdGVyICYmIGdlbmVyaWNWYWx1ZURhdGFQcm92aWRlcigpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8bW5nLWRyb3Bkb3duXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ2YWx1ZU1vZGVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhUHJvdmlkZXJdPVwiZ2VuZXJpY1ZhbHVlRGF0YVByb3ZpZGVyKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInbW5nRmlsdGVyLnZhbHVlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0NsZWFyPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhbWF0Y2hNb2RlTW9kZWwoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FwcGVuZFRvXT1cIm51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tbmctZHJvcGRvd24+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1lbmRcIj5cbiAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJzZWxmLWVuZFwiPlxuICAgICAgICAgICAgICAgIHt7IChmaWx0ZXIoKSA/ICdnZW5lcmFsLmFwcGx5JyA6ICdnZW5lcmFsLmFkZCcpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9mb3JtPlxuICAgIEBpZiAoZm9ybVN1Ym1pdHRlZCgpICYmIGZpbHRlckZvcm0uaW52YWxpZCkge1xuICAgICAgICBAZm9yIChtZXNzYWdlIG9mIGZvcm1FcnJvck1lc3NhZ2UoKTsgdHJhY2sgbWVzc2FnZSkge1xuICAgICAgICAgICAgPHAtbWVzc2FnZSBbc2V2ZXJpdHldPVwibWVzc2FnZS5zZXZlcml0eVwiIFt0ZXh0XT1cIm1lc3NhZ2UuZGV0YWlsXCIgW2ljb25dPVwibWVzc2FnZS5pY29uXCIgc3R5bGVDbGFzcz1cIm10LTJcIiAvPlxuICAgICAgICB9XG4gICAgfVxuPC9kaXY+XG4iXX0=","import { Directive, input } from '@angular/core';\nimport { TemplateDirective } from '@mediusinc/mng-commons/core';\nimport * as i0 from \"@angular/core\";\nexport class TableHeaderWithFiltersTemplateDirective extends TemplateDirective {\n constructor() {\n super(...arguments);\n this.name = input.required(...(ngDevMode ? [{ debugName: \"name\" }] : []));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TableHeaderWithFiltersTemplateDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.1.7\", type: TableHeaderWithFiltersTemplateDirective, isStandalone: true, selector: \"[mngTableHeaderWithFiltersTemplate]\", inputs: { name: { classPropertyName: \"name\", publicName: \"name\", isSignal: true, isRequired: true, transformFunction: null } }, usesInheritance: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TableHeaderWithFiltersTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[mngTableHeaderWithFiltersTemplate]'\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLXdpdGgtZmlsdGVycy10ZW1wbGF0ZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90YWJsZS9zcmMvY29tcG9uZW50cy9maWx0ZXIvaGVhZGVyLXdpdGgtZmlsdGVycy9oZWFkZXItd2l0aC1maWx0ZXJzLXRlbXBsYXRlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUUvQyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQzs7QUFPOUQsTUFBTSxPQUFPLHVDQUF3QyxTQUFRLGlCQUEyQjtJQUh4Rjs7UUFJNkIsU0FBSSxHQUFHLEtBQUssQ0FBQyxRQUFRLCtDQUFZLENBQUM7S0FDOUQ7OEdBRlksdUNBQXVDO2tHQUF2Qyx1Q0FBdUM7OzJGQUF2Qyx1Q0FBdUM7a0JBSG5ELFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHFDQUFxQztpQkFDbEQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RpcmVjdGl2ZSwgaW5wdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1RlbXBsYXRlRGlyZWN0aXZlfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuXG50eXBlIE5hbWVUeXBlID0gJ3RpdGxlJyB8ICd0aXRsZVJvd1JpZ2h0JztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbbW5nVGFibGVIZWFkZXJXaXRoRmlsdGVyc1RlbXBsYXRlXSdcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVIZWFkZXJXaXRoRmlsdGVyc1RlbXBsYXRlRGlyZWN0aXZlIGV4dGVuZHMgVGVtcGxhdGVEaXJlY3RpdmU8TmFtZVR5cGU+IHtcbiAgICBwdWJsaWMgb3ZlcnJpZGUgcmVhZG9ubHkgbmFtZSA9IGlucHV0LnJlcXVpcmVkPE5hbWVUeXBlPigpO1xufVxuIl19","import { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, booleanAttribute, computed, contentChildren, inject, input, signal, viewChild } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { Button } from 'primeng/button';\nimport { IconField } from 'primeng/iconfield';\nimport { InputIcon } from 'primeng/inputicon';\nimport { InputText } from 'primeng/inputtext';\nimport { Popover } from 'primeng/popover';\nimport { Skeleton } from 'primeng/skeleton';\nimport { TagModule } from 'primeng/tag';\nimport { ToggleButton } from 'primeng/togglebutton';\nimport { BehaviorSubject, combineLatest, debounceTime, distinctUntilChanged, skip } from 'rxjs';\nimport { ComponentDirective, FilterMatchMode, findTemplateByName } from '@mediusinc/mng-commons/core';\nimport { FilterDisplayTypeEnum, FilterTypeEnum } from '@mediusinc/mng-commons/filter';\nimport { filterSetStateOnChange, filterSetStateOnDisplayChange } from '../../../helpers/filters';\nimport { TableDataService } from '../../../services/table-data.service';\nimport { COMMONS_TABLE_FEATURE_CONFIG_IT } from '../../../services/table-feature-config.token';\nimport { TableFilterFormComponent } from '../filter-form/filter-form.component';\nimport { TableHeaderWithFiltersTemplateDirective } from './header-with-filters-template.directive';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"primeng/api\";\nimport * as i2 from \"@angular/forms\";\nexport class TableHeaderWithFiltersComponent {\n static { this.SEARCH_WORD_LIMIT_MAX = 4; }\n constructor() {\n this.tableData = inject((TableDataService));\n this.tableConfig = inject(COMMONS_TABLE_FEATURE_CONFIG_IT, { optional: true });\n this.defaultFilterDisplayType = this.tableConfig?.filterDisplayType ?? FilterDisplayTypeEnum.Column;\n this.metadata = input.required(...(ngDevMode ? [{ debugName: \"metadata\" }] : []));\n this.genericFilterDescriptor = input(...(ngDevMode ? [undefined, { debugName: \"genericFilterDescriptor\" }] : []));\n this.model = input.required(...(ngDevMode ? [{ debugName: \"model\" }] : []));\n this.enableSearch = input(false, ...(ngDevMode ? [{ debugName: \"enableSearch\", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));\n this.search = input(...(ngDevMode ? [undefined, { debugName: \"search\" }] : []));\n this.searchLimitWordMax = input(undefined, ...(ngDevMode ? [{ debugName: \"searchLimitWordMax\" }] : []));\n this.enableCaseSensitive = input(true, ...(ngDevMode ? [{ debugName: \"enableCaseSensitive\", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));\n this.filterOverlay = viewChild.required(Popover);\n this.filterFormComponent = viewChild(TableFilterFormComponent, ...(ngDevMode ? [{ debugName: \"filterFormComponent\" }] : []));\n this.templates = contentChildren(TableHeaderWithFiltersTemplateDirective, ...(ngDevMode ? [{ debugName: \"templates\" }] : []));\n this.titleTemplate = computed(() => findTemplateByName([...this.templates()], 'title'), ...(ngDevMode ? [{ debugName: \"titleTemplate\" }] : []));\n this.titleRowRightTemplate = computed(() => findTemplateByName([...this.templates()], 'titleRowRight'), ...(ngDevMode ? [{ debugName: \"titleRowRightTemplate\" }] : []));\n this.overlayFormMetadata = computed(() => this.metadata().filter(f => (f.descriptor.displayType == null && FilterDisplayTypeEnum.OverlayWithTag === this.defaultFilterDisplayType) ||\n f.descriptor.displayType === FilterDisplayTypeEnum.OverlayWithTag), ...(ngDevMode ? [{ debugName: \"overlayFormMetadata\" }] : []));\n this.directInputMetadata = computed(() => this.metadata().filter(f => (f.descriptor.displayType == null && FilterDisplayTypeEnum.DirectInput === this.defaultFilterDisplayType) ||\n f.descriptor.displayType === FilterDisplayTypeEnum.DirectInput), ...(ngDevMode ? [{ debugName: \"directInputMetadata\" }] : []));\n this.overlayFormFilters = computed(() => {\n return this.getInitialFilters(this.tableData.filterStates(), this.overlayFormMetadata());\n }, ...(ngDevMode ? [{ debugName: \"overlayFormFilters\" }] : []));\n this.showOverlayFilterFormButton = computed(() => this.overlayFormMetadata().length > 0, ...(ngDevMode ? [{ debugName: \"showOverlayFilterFormButton\" }] : []));\n this.activeFilters = computed(() => {\n const filterEntry = this.overlayFormFilters();\n return this.overlayFormMetadata()\n .filter(d => {\n const filter = filterEntry[d.descriptor.property];\n return (filter &&\n filter.matchMode !== undefined &&\n filter.displayMatchMode !== undefined &&\n (filter.matchMode === FilterMatchMode.Exists ||\n filter.matchMode === FilterMatchMode.DoesNotExist ||\n (filter.value !== undefined && filter.displayValue !== undefined)));\n })\n .map(d => filterEntry[d.descriptor.property]);\n }, ...(ngDevMode ? [{ debugName: \"activeFilters\" }] : []));\n this.activeFilterProperties = computed(() => this.activeFilters().map(f => f.config.descriptor.property), ...(ngDevMode ? [{ debugName: \"activeFilterProperties\" }] : []));\n this.filterEdit = signal(undefined, ...(ngDevMode ? [{ debugName: \"filterEdit\" }] : []));\n this.unsetRequiredFilters = computed(() => {\n const activeFilters = this.activeFilters().map(el => el.config.descriptor.property);\n return this.overlayFormMetadata()\n .filter(el => el.descriptor.isRequired && !activeFilters.includes(el.descriptor.property))\n .map(el => {\n return {\n matchMode: el.defaultMatchMode,\n displayMatchMode: el.defaultMatchMode,\n config: el\n };\n });\n }, ...(ngDevMode ? [{ debugName: \"unsetRequiredFilters\" }] : []));\n // global search model\n this.searchValue = computed(() => this.search()?.value, ...(ngDevMode ? [{ debugName: \"searchValue\" }] : []));\n this.searchCaseSensitive = computed(() => this.search()?.caseSensitive, ...(ngDevMode ? [{ debugName: \"searchCaseSensitive\" }] : []));\n this.searchWordLimitMaxError = signal(false, ...(ngDevMode ? [{ debugName: \"searchWordLimitMaxError\" }] : []));\n this.searchWordLimitMaxCmp = computed(() => {\n const inputLimit = this.searchLimitWordMax();\n if (inputLimit !== undefined) {\n return inputLimit;\n }\n return this.tableConfig?.searchLimitMaxWords !== undefined ? this.tableConfig?.searchLimitMaxWords : TableHeaderWithFiltersComponent.SEARCH_WORD_LIMIT_MAX;\n }, ...(ngDevMode ? [{ debugName: \"searchWordLimitMaxCmp\" }] : []));\n this.searchValueSubject = new BehaviorSubject(undefined);\n this.searchCaseSensitiveSubject = new BehaviorSubject(undefined);\n // UI utilities\n this.clickedOnFilterEvent = undefined;\n this.FilterTypeEnum = FilterTypeEnum;\n combineLatest([this.searchValueSubject.pipe(debounceTime(500), distinctUntilChanged()), this.searchCaseSensitiveSubject])\n // NOTE: skip is used to ignore propagating the initial value of the subjects\n .pipe(skip(1), takeUntilDestroyed())\n .subscribe(([value, caseSensitive]) => {\n this.updatePrimeTableGlobalFilter(value == null ? (this.search()?.value ?? '') : value, caseSensitive == null ? (this.search()?.caseSensitive ?? undefined) : caseSensitive);\n });\n }\n onFilterFormApply(event) {\n const filterMetadata = this.metadata().find(d => d.descriptor.property === event.property);\n if (!filterMetadata) {\n return;\n }\n const filterData = {\n ...filterSetStateOnDisplayChange({ caseSensitive: event.caseSensitive }, event.matchMode, event.value, filterMetadata.descriptor.filterType, filterMetadata.dateConfig),\n config: filterMetadata\n };\n this.updatePrimeTableFilter(filterData);\n // this keeps the UI updated properly before closing the overlay\n this.filterEdit.set(filterData);\n // Resetting the form is done in the onOverlayHide callback because resetting the\n // values here renders empty inputs for a split second before closing the overlay\n this.filterOverlay().hide();\n }\n onFilterRemove(event) {\n this.updatePrimeTableFilter({\n ...this.overlayFormFilters()[event.filter.config.descriptor.property],\n matchMode: undefined,\n displayMatchMode: undefined,\n value: undefined,\n displayValue: undefined\n });\n }\n onFilterEdit(event) {\n this.onFilterAddOrEdit(event.filter, event.event);\n }\n onFilterAdd(event) {\n this.onFilterAddOrEdit(undefined, event);\n }\n onSearchChange(value) {\n const searchWordLimitMax = this.searchWordLimitMaxCmp();\n if (searchWordLimitMax !== null) {\n const wordCount = value.split(/\\s+/).filter(word => word.length > 0).length;\n this.searchWordLimitMaxError.set(wordCount > searchWordLimitMax);\n }\n else {\n this.searchWordLimitMaxError.set(false);\n }\n if (!this.searchWordLimitMaxError()) {\n this.searchValueSubject.next(value);\n }\n }\n onSearchCaseSensitiveChange(value) {\n this.searchCaseSensitiveSubject.next(value);\n }\n onOverlayHide() {\n // resetting the form is done here for a smoother animation\n if (this.filterFormComponent !== undefined) {\n this.filterFormComponent()?.resetForm();\n }\n if (this.clickedOnFilterEvent) {\n // show the overlay again if the user clicked another filter\n setTimeout(() => {\n this.filterEdit.set(this.clickedOnFilterEvent?.filter);\n this.filterOverlay().show(this.clickedOnFilterEvent?.event);\n this.clickedOnFilterEvent = undefined;\n }, 0);\n return;\n }\n else {\n // clean state\n this.filterEdit.set(undefined);\n }\n }\n onFilterAddOrEdit(filter, event) {\n // If user clicks on the same filter or add that is already open, close the overlay\n if (this.filterOverlay().overlayVisible && this.filterEdit()?.config.descriptor.property === filter?.config.descriptor.property) {\n this.filterOverlay().hide();\n return;\n }\n if (this.filterOverlay().overlayVisible) {\n // In case the user clicks another filter, 're-showing' the overlay in\n // the new position is done in the onOverlayHide callback\n this.clickedOnFilterEvent = { event, filter };\n this.filterOverlay().hide();\n }\n else {\n this.filterEdit.set(filter);\n this.filterOverlay().show(event);\n }\n }\n getInitialFilters(filtersInit, metadata) {\n const filtersResult = {};\n if (filtersInit) {\n for (const property in filtersInit) {\n const filterInit = filtersInit[property];\n const filterMetadata = metadata.find(m => m.descriptor.property === property);\n if (!filterMetadata) {\n continue;\n }\n filtersResult[property] = {\n ...filterSetStateOnChange(filterInit, filterInit.matchMode, filterInit.value, filterMetadata.descriptor.filterType, filterMetadata.dateConfig),\n config: filterMetadata\n };\n }\n }\n return filtersResult;\n }\n updatePrimeTableFilter(filter) {\n this.tableData.updatePrimeFilter(filter.config.descriptor.property, filter);\n }\n updatePrimeTableGlobalFilter(searchQuery, caseSensitive = false) {\n // match mode needs to be set for inline search\n this.tableData.updatePrimeFilter('global', { value: searchQuery, matchMode: 'contains', caseSensitive: caseSensitive });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TableHeaderWithFiltersComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.7\", type: TableHeaderWithFiltersComponent, isStandalone: true, selector: \"mng-table-header-with-filters\", inputs: { metadata: { classPropertyName: \"metadata\", publicName: \"metadata\", isSignal: true, isRequired: true, transformFunction: null }, genericFilterDescriptor: { classPropertyName: \"genericFilterDescriptor\", publicName: \"genericFilterDescriptor\", isSignal: true, isRequired: false, transformFunction: null }, model: { classPropertyName: \"model\", publicName: \"model\", isSignal: true, isRequired: true, transformFunction: null }, enableSearch: { classPropertyName: \"enableSearch\", publicName: \"enableSearch\", isSignal: true, isRequired: false, transformFunction: null }, search: { classPropertyName: \"search\", publicName: \"search\", isSignal: true, isRequired: false, transformFunction: null }, searchLimitWordMax: { classPropertyName: \"searchLimitWordMax\", publicName: \"searchLimitWordMax\", isSignal: true, isRequired: false, transformFunction: null }, enableCaseSensitive: { classPropertyName: \"enableCaseSensitive\", publicName: \"enableCaseSensitive\", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: \"templates\", predicate: TableHeaderWithFiltersTemplateDirective, isSignal: true }], viewQueries: [{ propertyName: \"filterOverlay\", first: true, predicate: Popover, descendants: true, isSignal: true }, { propertyName: \"filterFormComponent\", first: true, predicate: TableFilterFormComponent, descendants: true, isSignal: true }], ngImport: i0, template: \"<div class=\\\"flex items-center grow flex-wrap\\\">\\n @if (titleTemplate()) {\\n <ng-container *ngTemplateOutlet=\\\"titleTemplate()\\\"></ng-container>\\n }\\n @if (showOverlayFilterFormButton()) {\\n <p-button\\n rounded=\\\"true\\\"\\n [severity]=\\\"activeFilters().length > 0 ? 'primary' : 'secondary'\\\"\\n size=\\\"small\\\"\\n (click)=\\\"onFilterAdd($event)\\\"\\n [styleClass]=\\\"'my-1 mr-2' + (titleTemplate() ? ' ml-3' : '')\\\">\\n <ng-template pTemplate=\\\"icon\\\">\\n <i class=\\\"pi pi-filter absolute left-1.5 scale-90\\\"></i>\\n <i class=\\\"pi pi-plus absolute bottom-1.5 right-0 scale-60\\\"></i>\\n </ng-template>\\n </p-button>\\n }\\n @if (enableSearch()) {\\n <div class=\\\"mng-search mr-3\\\" [ngClass]=\\\"{'ml-3': !showOverlayFilterFormButton() && titleTemplate()}\\\">\\n <span class=\\\"p-input-icon-left w-full\\\">\\n <p-iconfield>\\n <p-inputicon class=\\\"pi pi-search\\\" />\\n <input\\n [ngModel]=\\\"searchValue()\\\"\\n (ngModelChange)=\\\"onSearchChange($event)\\\"\\n name=\\\"globalSearch\\\"\\n type=\\\"text\\\"\\n pInputText\\n class=\\\"search-input w-full\\\"\\n [ngClass]=\\\"{'ng-invalid': searchWordLimitMaxError()}\\\"\\n [attr.placeholder]=\\\"'mngFilter.search.input' | translate\\\"\\n [placeholder]=\\\"'mngFilter.search.input' | translate\\\" />\\n </p-iconfield>\\n @if (enableCaseSensitive()) {\\n <span class=\\\"toggle-button-input\\\">\\n <p-toggleButton\\n styleClass=\\\"ml-1 p-1 p-button-sm\\\"\\n [ngModel]=\\\"searchCaseSensitive()\\\"\\n (ngModelChange)=\\\"onSearchCaseSensitiveChange($event)\\\"\\n onLabel=\\\"Aa\\\"\\n offLabel=\\\"Aa\\\" />\\n </span>\\n }\\n </span>\\n @if (searchWordLimitMaxError()) {\\n <small class=\\\"p-error block\\\">\\n {{ 'mngFilter.search.maxWordsExceededMessage' | translate }}\\n </small>\\n }\\n </div>\\n }\\n @if (directInputMetadata().length > 0) {\\n <div class=\\\"flex flex-wrap items-center my-1\\\">\\n @for (metadata of directInputMetadata(); track metadata.descriptor.property) {\\n @if (metadata.descriptor.filterType !== FilterTypeEnum.Component) {\\n @defer (on idle) {\\n <mng-table-filter [config]=\\\"metadata\\\" [model]=\\\"model()\\\" [showFilterIcon]=\\\"true\\\" [showTitleAsPlaceholder]=\\\"true\\\" class=\\\"mx-1 my-1\\\" />\\n }\\n } @else if (metadata.descriptor.customComponentType) {\\n <ng-container [mngComponent]=\\\"metadata.descriptor.customComponentType\\\" [inputs]=\\\"{descriptor: metadata.descriptor}\\\"></ng-container>\\n }\\n }\\n </div>\\n }\\n @if (titleRowRightTemplate()) {\\n <ng-container *ngTemplateOutlet=\\\"titleRowRightTemplate()\\\"></ng-container>\\n }\\n</div>\\n@if (activeFilters().length > 0 || unsetRequiredFilters().length > 0) {\\n <div class=\\\"flex items-center flex-wrap mt-2\\\">\\n @for (filter of unsetRequiredFilters(); track filter.config.descriptor.property) {\\n @defer (on viewport) {\\n <mng-table-filter-active-tag [model]=\\\"model()\\\" [filter]=\\\"filter\\\" (edit)=\\\"onFilterEdit($event)\\\" (remove)=\\\"onFilterRemove($event)\\\" />\\n } @placeholder {\\n <p-skeleton width=\\\"10rem\\\" height=\\\"2rem\\\"></p-skeleton>\\n }\\n }\\n @for (filter of activeFilters(); track filter.config.descriptor.property) {\\n @defer (on viewport) {\\n <mng-table-filter-active-tag [model]=\\\"model()\\\" [filter]=\\\"filter\\\" (edit)=\\\"onFilterEdit($event)\\\" (remove)=\\\"onFilterRemove($event)\\\" />\\n } @placeholder {\\n <p-skeleton width=\\\"10rem\\\" height=\\\"2rem\\\"></p-skeleton>\\n }\\n }\\n </div>\\n}\\n<p-popover #op showCloseIcon=\\\"true\\\" (onHide)=\\\"onOverlayHide()\\\" appendTo=\\\"body\\\">\\n @defer (on viewport) {\\n <mng-table-filter-form\\n [model]=\\\"model()\\\"\\n [metadata]=\\\"overlayFormMetadata()\\\"\\n [genericDescriptor]=\\\"genericFilterDescriptor()\\\"\\n [filter]=\\\"filterEdit()\\\"\\n [disabledProperties]=\\\"activeFilterProperties()\\\"\\n [propertySearch]=\\\"genericFilterDescriptor()?.propertySearch\\\"\\n [overlay]=\\\"op\\\"\\n [enableCaseSensitive]=\\\"enableCaseSensitive()\\\"\\n (apply)=\\\"onFilterFormApply($event)\\\" />\\n } @placeholder {\\n <p-skeleton width=\\\"20rem\\\" height=\\\"3rem\\\"></p-skeleton>\\n }\\n</p-popover>\\n\", styles: [\".toggle-button-input{position:absolute;right:.35rem;top:50%;transform:translateY(-50%)}.mng-search{min-width:20rem}\\n\"], dependencies: [{ kind: \"ngmodule\", type: TagModule }, { kind: \"directive\", type: i1.PrimeTemplate, selector: \"[pTemplate]\", inputs: [\"type\", \"pTemplate\"] }, { kind: \"component\", type: Button, selector: \"p-button\", inputs: [\"type\", \"iconPos\", \"icon\", \"badge\", \"label\", \"disabled\", \"loading\", \"loadingIcon\", \"raised\", \"rounded\", \"text\", \"plain\", \"severity\", \"outlined\", \"link\", \"tabindex\", \"size\", \"variant\", \"style\", \"styleClass\", \"badgeClass\", \"badgeSeverity\", \"ariaLabel\", \"buttonProps\", \"autofocus\", \"fluid\"], outputs: [\"onClick\", \"onFocus\", \"onBlur\"] }, { kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: InputText, selector: \"[pInputText]\", inputs: [\"pSize\", \"variant\", \"fluid\", \"invalid\"] }, { kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"component\", type: ToggleButton, selector: \"p-toggleButton, p-togglebutton, p-toggle-button\", inputs: [\"onLabel\", \"offLabel\", \"onIcon\", \"offIcon\", \"ariaLabel\", \"ariaLabelledBy\", \"styleClass\", \"inputId\", \"tabindex\", \"iconPos\", \"autofocus\", \"size\", \"allowEmpty\", \"fluid\"], outputs: [\"onChange\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i2.DefaultValueAccessor, selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { kind: \"directive\", type: i2.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"component\", type: IconField, selector: \"p-iconfield, p-iconField, p-icon-field\", inputs: [\"iconPosition\", \"styleClass\"] }, { kind: \"component\", type: InputIcon, selector: \"p-inputicon, p-inputIcon\", inputs: [\"styleClass\"] }, { kind: \"component\", type: Popover, selector: \"p-popover\", inputs: [\"ariaLabel\", \"ariaLabelledBy\", \"dismissable\", \"style\", \"styleClass\", \"appendTo\", \"autoZIndex\", \"ariaCloseLabel\", \"baseZIndex\", \"focusOnShow\", \"showTransitionOptions\", \"hideTransitionOptions\"], outputs: [\"onShow\", \"onHide\"] }, { kind: \"directive\", type: ComponentDirective, selector: \"[mngComponent]\", inputs: [\"mngComponent\", \"injectionToken\", \"inputs\", \"attachToHost\", \"parentInjector\"], outputs: [\"instanceCreated\"] }, { kind: \"component\", type: Skeleton, selector: \"p-skeleton\", inputs: [\"styleClass\", \"shape\", \"animation\", \"borderRadius\", \"size\", \"width\", \"height\"] }, { kind: \"pipe\", type: TranslatePipe, name: \"translate\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, deferBlockDependencies: [() => [import(\"../filter/filter.component\").then(m => m.TableFilterComponent)], () => [import(\"../filter-active-tag/filter-active-tag.component\").then(m => m.TableFilterActiveTagComponent)], () => [import(\"../filter-active-tag/filter-active-tag.component\").then(m => m.TableFilterActiveTagComponent)], () => [TableFilterFormComponent]] }); }\n}\ni0.ɵɵngDeclareClassMetadataAsync({ minVersion: \"18.0.0\", version: \"20.1.7\", ngImport: i0, type: TableHeaderWithFiltersComponent, resolveDeferredDeps: () => [import(\"../filter/filter.component\").then(m => m.TableFilterComponent), import(\"../filter-active-tag/filter-active-tag.component\").then(m => m.TableFilterActiveTagComponent)], resolveMetadata: (TableFilterComponent, TableFilterActiveTagComponent) => ({ decorators: [{\n type: Component,\n args: [{ selector: 'mng-table-header-with-filters', imports: [\n TranslatePipe,\n TagModule,\n TableFilterFormComponent,\n Button,\n TableFilterActiveTagComponent,\n NgTemplateOutlet,\n InputText,\n NgClass,\n ToggleButton,\n FormsModule,\n IconField,\n InputIcon,\n Popover,\n TableFilterComponent,\n ComponentDirective,\n Skeleton\n ], changeDetection: ChangeDetectionStrategy.OnPush, template: \"<div class=\\\"flex items-center grow flex-wrap\\\">\\n @if (titleTemplate()) {\\n <ng-container *ngTemplateOutlet=\\\"titleTemplate()\\\"></ng-container>\\n }\\n @if (showOverlayFilterFormButton()) {\\n <p-button\\n rounded=\\\"true\\\"\\n [severity]=\\\"activeFilters().length > 0 ? 'primary' : 'secondary'\\\"\\n size=\\\"small\\\"\\n (click)=\\\"onFilterAdd($event)\\\"\\n [styleClass]=\\\"'my-1 mr-2' + (titleTemplate() ? ' ml-3' : '')\\\">\\n <ng-template pTemplate=\\\"icon\\\">\\n <i class=\\\"pi pi-filter absolute left-1.5 scale-90\\\"></i>\\n <i class=\\\"pi pi-plus absolute bottom-1.5 right-0 scale-60\\\"></i>\\n </ng-template>\\n </p-button>\\n }\\n @if (enableSearch()) {\\n <div class=\\\"mng-search mr-3\\\" [ngClass]=\\\"{'ml-3': !showOverlayFilterFormButton() && titleTemplate()}\\\">\\n <span class=\\\"p-input-icon-left w-full\\\">\\n <p-iconfield>\\n <p-inputicon class=\\\"pi pi-search\\\" />\\n <input\\n [ngModel]=\\\"searchValue()\\\"\\n (ngModelChange)=\\\"onSearchChange($event)\\\"\\n name=\\\"globalSearch\\\"\\n type=\\\"text\\\"\\n pInputText\\n class=\\\"search-input w-full\\\"\\n [ngClass]=\\\"{'ng-invalid': searchWordLimitMaxError()}\\\"\\n [attr.placeholder]=\\\"'mngFilter.search.input' | translate\\\"\\n [placeholder]=\\\"'mngFilter.search.input' | translate\\\" />\\n </p-iconfield>\\n @if (enableCaseSensitive()) {\\n <span class=\\\"toggle-button-input\\\">\\n <p-toggleButton\\n styleClass=\\\"ml-1 p-1 p-button-sm\\\"\\n [ngModel]=\\\"searchCaseSensitive()\\\"\\n (ngModelChange)=\\\"onSearchCaseSensitiveChange($event)\\\"\\n onLabel=\\\"Aa\\\"\\n offLabel=\\\"Aa\\\" />\\n </span>\\n }\\n </span>\\n @if (searchWordLimitMaxError()) {\\n <small class=\\\"p-error block\\\">\\n {{ 'mngFilter.search.maxWordsExceededMessage' | translate }}\\n </small>\\n }\\n </div>\\n }\\n @if (directInputMetadata().length > 0) {\\n <div class=\\\"flex flex-wrap items-center my-1\\\">\\n @for (metadata of directInputMetadata(); track metadata.descriptor.property) {\\n @if (metadata.descriptor.filterType !== FilterTypeEnum.Component) {\\n @defer (on idle) {\\n <mng-table-filter [config]=\\\"metadata\\\" [model]=\\\"model()\\\" [showFilterIcon]=\\\"true\\\" [showTitleAsPlaceholder]=\\\"true\\\" class=\\\"mx-1 my-1\\\" />\\n }\\n } @else if (metadata.descriptor.customComponentType) {\\n <ng-container [mngComponent]=\\\"metadata.descriptor.customComponentType\\\" [inputs]=\\\"{descriptor: metadata.descriptor}\\\"></ng-container>\\n }\\n }\\n </div>\\n }\\n @if (titleRowRightTemplate()) {\\n <ng-container *ngTemplateOutlet=\\\"titleRowRightTemplate()\\\"></ng-container>\\n }\\n</div>\\n@if (activeFilters().length > 0 || unsetRequiredFilters().length > 0) {\\n <div class=\\\"flex items-center flex-wrap mt-2\\\">\\n @for (filter of unsetRequiredFilters(); track filter.config.descriptor.property) {\\n @defer (on viewport) {\\n <mng-table-filter-active-tag [model]=\\\"model()\\\" [filter]=\\\"filter\\\" (edit)=\\\"onFilterEdit($event)\\\" (remove)=\\\"onFilterRemove($event)\\\" />\\n } @placeholder {\\n <p-skeleton width=\\\"10rem\\\" height=\\\"2rem\\\"></p-skeleton>\\n }\\n }\\n @for (filter of activeFilters(); track filter.config.descriptor.property) {\\n @defer (on viewport) {\\n <mng-table-filter-active-tag [model]=\\\"model()\\\" [filter]=\\\"filter\\\" (edit)=\\\"onFilterEdit($event)\\\" (remove)=\\\"onFilterRemove($event)\\\" />\\n } @placeholder {\\n <p-skeleton width=\\\"10rem\\\" height=\\\"2rem\\\"></p-skeleton>\\n }\\n }\\n </div>\\n}\\n<p-popover #op showCloseIcon=\\\"true\\\" (onHide)=\\\"onOverlayHide()\\\" appendTo=\\\"body\\\">\\n @defer (on viewport) {\\n <mng-table-filter-form\\n [model]=\\\"model()\\\"\\n [metadata]=\\\"overlayFormMetadata()\\\"\\n [genericDescriptor]=\\\"genericFilterDescriptor()\\\"\\n [filter]=\\\"filterEdit()\\\"\\n [disabledProperties]=\\\"activeFilterProperties()\\\"\\n [propertySearch]=\\\"genericFilterDescriptor()?.propertySearch\\\"\\n [overlay]=\\\"op\\\"\\n [enableCaseSensitive]=\\\"enableCaseSensitive()\\\"\\n (apply)=\\\"onFilterFormApply($event)\\\" />\\n } @placeholder {\\n <p-skeleton width=\\\"20rem\\\" height=\\\"3rem\\\"></p-skeleton>\\n }\\n</p-popover>\\n\", styles: [\".toggle-button-input{position:absolute;right:.35rem;top:50%;transform:translateY(-50%)}.mng-search{min-width:20rem}\\n\"] }]\n }], ctorParameters: () => [], propDecorators: null }) });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLXdpdGgtZmlsdGVycy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90YWJsZS9zcmMvY29tcG9uZW50cy9maWx0ZXIvaGVhZGVyLXdpdGgtZmlsdGVycy9oZWFkZXItd2l0aC1maWx0ZXJzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3RhYmxlL3NyYy9jb21wb25lbnRzL2ZpbHRlci9oZWFkZXItd2l0aC1maWx0ZXJzL2hlYWRlci13aXRoLWZpbHRlcnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzFELE9BQU8sRUFBQyx1QkFBdUIsRUFBRSxTQUFTLEVBQXVCLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3JLLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3RDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUM1QyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDNUMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN4QyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDMUMsT0FBTyxFQUFDLFNBQVMs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dUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOZ0NsYXNzLCBOZ1RlbXBsYXRlT3V0bGV0fSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBTaWduYWwsIFRlbXBsYXRlUmVmLCBib29sZWFuQXR0cmlidXRlLCBjb21wdXRlZCwgY29udGVudENoaWxkcmVuLCBpbmplY3QsIGlucHV0LCBzaWduYWwsIHZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge3Rha2VVbnRpbERlc3Ryb3llZH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHtGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQge1RyYW5zbGF0ZVBpcGV9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtCdXR0b259IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcbmltcG9ydCB7SWNvbkZpZWxkfSBmcm9tICdwcmltZW5nL2ljb25maWVsZCc7XG5pbXBvcnQge0lucHV0SWNvbn0gZnJvbSAncHJpbWVuZy9pbnB1dGljb24nO1xuaW1wb3J0IHtJbnB1dFRleHR9IGZyb20gJ3ByaW1lbmcvaW5wdXR0ZXh0JztcbmltcG9ydCB7UG9wb3Zlcn0gZnJvbSAncHJpbWVuZy9wb3BvdmVyJztcbmltcG9ydCB7U2tlbGV0b259IGZyb20gJ3ByaW1lbmcvc2tlbGV0b24nO1xuaW1wb3J0IHtUYWdNb2R1bGV9IGZyb20gJ3ByaW1lbmcvdGFnJztcbmltcG9ydCB7VG9nZ2xlQnV0dG9ufSBmcm9tICdwcmltZW5nL3RvZ2dsZWJ1dHRvbic7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgc2tpcH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7Q29tcG9uZW50RGlyZWN0aXZlLCBGaWx0ZXJNYXRjaE1vZGUsIEZpbHRlclN0YXRlLCBmaW5kVGVtcGxhdGVCeU5hbWV9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge0ZpbHRlckRpc3BsYXlUeXBlRW51bSwgRmlsdGVyR2VuZXJpY0Rlc2NyaXB0b3IsIEZpbHRlclR5cGVFbnVtfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2ZpbHRlcic7XG5pbXBvcnQge01vZGVsRGVzY3JpcHRvcn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9tb2RlbCc7XG5cbmltcG9ydCB7ZmlsdGVyU2V0U3RhdGVPbkNoYW5nZSwgZmlsdGVyU2V0U3RhdGVPbkRpc3BsYXlDaGFuZ2V9IGZyb20gJy4uLy4uLy4uL2hlbHBlcnMvZmlsdGVycyc7XG5pbXBvcnQge0ZpbHRlckFjdGl2ZVRhZ0V2ZW50LCBGaWx0ZXJDb25maWcsIEZpbHRlckZvcm1FbWl0RXZlbnQsIEZpbHRlclN0YXRlV2l0aENvbmZpZ30gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2ZpbHRlci5tb2RlbCc7XG5pbXBvcnQge1RhYmxlRGF0YVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3RhYmxlLWRhdGEuc2VydmljZSc7XG5pbXBvcnQge0NPTU1PTlNfVEFCTEVfRkVBVFVSRV9DT05GSUdfSVR9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3RhYmxlLWZlYXR1cmUtY29uZmlnLnRva2VuJztcbmltcG9ydCB7VGFibGVGaWx0ZXJBY3RpdmVUYWdDb21wb25lbnR9IGZyb20gJy4uL2ZpbHRlci1hY3RpdmUtdGFnL2ZpbHRlci1hY3RpdmUtdGFnLmNvbXBvbmVudCc7XG5pbXBvcnQge1RhYmxlRmlsdGVyRm9ybUNvbXBvbmVudH0gZnJvbSAnLi4vZmlsdGVyLWZvcm0vZmlsdGVyLWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7VGFibGVGaWx0ZXJDb21wb25lbnR9IGZyb20gJy4uL2ZpbHRlci9maWx0ZXIuY29tcG9uZW50JztcbmltcG9ydCB7VGFibGVIZWFkZXJXaXRoRmlsdGVyc1RlbXBsYXRlRGlyZWN0aXZlfSBmcm9tICcuL2hlYWRlci13aXRoLWZpbHRlcnMtdGVtcGxhdGUuZGlyZWN0aXZlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdtbmctdGFibGUtaGVhZGVyLXdpdGgtZmlsdGVycycsXG4gICAgdGVtcGxhdGVVcmw6ICdoZWFkZXItd2l0aC1maWx0ZXJzLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9oZWFkZXItd2l0aC1maWx0ZXJzLmNvbXBvbmVudC5jc3MnXSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIFRyYW5zbGF0ZVBpcGUsXG4gICAgICAgIFRhZ01vZHVsZSxcbiAgICAgICAgVGFibGVGaWx0ZXJGb3JtQ29tcG9uZW50LFxuICAgICAgICBCdXR0b24sXG4gICAgICAgIFRhYmxlRmlsdGVyQWN0aXZlVGFnQ29tcG9uZW50LFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBJbnB1dFRleHQsXG4gICAgICAgIE5nQ2xhc3MsXG4gICAgICAgIFRvZ2dsZUJ1dHRvbixcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIEljb25GaWVsZCxcbiAgICAgICAgSW5wdXRJY29uLFxuICAgICAgICBQb3BvdmVyLFxuICAgICAgICBUYWJsZUZpbHRlckNvbXBvbmVudCxcbiAgICAgICAgQ29tcG9uZW50RGlyZWN0aXZlLFxuICAgICAgICBTa2VsZXRvblxuICAgIF0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVIZWFkZXJXaXRoRmlsdGVyc0NvbXBvbmVudCB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgU0VBUkNIX1dPUkRfTElNSVRfTUFYID0gNDtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgdGFibGVEYXRhID0gaW5qZWN0KFRhYmxlRGF0YVNlcnZpY2U8YW55Pik7XG4gICAgcHJpdmF0ZSByZWFkb25seSB0YWJsZUNvbmZpZyA9IGluamVjdChDT01NT05TX1RBQkxFX0ZFQVRVUkVfQ09ORklHX0lULCB7b3B0aW9uYWw6IHRydWV9KTtcblxuICAgIHJlYWRvbmx5IGRlZmF1bHRGaWx0ZXJEaXNwbGF5VHlwZTogRmlsdGVyRGlzcGxheVR5cGVFbnVtID0gdGhpcy50YWJsZUNvbmZpZz8uZmlsdGVyRGlzcGxheVR5cGUgPz8gRmlsdGVyRGlzcGxheVR5cGVFbnVtLkNvbHVtbjtcblxuICAgIHB1YmxpYyBtZXRhZGF0YSA9IGlucHV0LnJlcXVpcmVkPEZpbHRlckNvbmZpZ1tdPigpO1xuICAgIHB1YmxpYyBnZW5lcmljRmlsdGVyRGVzY3JpcHRvciA9IGlucHV0PEZpbHRlckdlbmVyaWNEZXNjcmlwdG9yPigpO1xuICAgIHB1YmxpYyBtb2RlbCA9IGlucHV0LnJlcXVpcmVkPE1vZGVsRGVzY3JpcHRvcjxhbnk+PigpO1xuICAgIHB1YmxpYyBlbmFibGVTZWFyY2ggPSBpbnB1dChmYWxzZSwge3RyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZX0pO1xuICAgIHB1YmxpYyBzZWFyY2ggPSBpbnB1dDx7dmFsdWU6IHN0cmluZzsgY2FzZVNlbnNpdGl2ZTogYm9vbGVhbn0gfCB1bmRlZmluZWQ+KCk7XG4gICAgcHVibGljIHNlYXJjaExpbWl0V29yZE1heCA9IGlucHV0PG51bWJlciB8IHVuZGVmaW5lZCB8IG51bGw+KHVuZGVmaW5lZCk7XG4gICAgcHVibGljIGVuYWJsZUNhc2VTZW5zaXRpdmUgPSBpbnB1dCh0cnVlLCB7dHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlfSk7XG5cbiAgICBwcml2YXRlIGZpbHRlck92ZXJsYXkgPSB2aWV3Q2hpbGQucmVxdWlyZWQoUG9wb3Zlcik7XG4gICAgcHJpdmF0ZSBmaWx0ZXJGb3JtQ29tcG9uZW50ID0gdmlld0NoaWxkKFRhYmxlRmlsdGVyRm9ybUNvbXBvbmVudCk7XG5cbiAgICBwdWJsaWMgdGVtcGxhdGVzID0gY29udGVudENoaWxkcmVuKFRhYmxlSGVhZGVyV2l0aEZpbHRlcnNUZW1wbGF0ZURpcmVjdGl2ZSk7XG4gICAgcHVibGljIHRpdGxlVGVtcGxhdGU6IFNpZ25hbDxUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbD4gPSBjb21wdXRlZCgoKSA9PiBmaW5kVGVtcGxhdGVCeU5hbWUoWy4uLnRoaXMudGVtcGxhdGVzKCldLCAndGl0bGUnKSk7XG4gICAgcHVibGljIHRpdGxlUm93UmlnaHRUZW1wbGF0ZTogU2lnbmFsPFRlbXBsYXRlUmVmPGFueT4gfCBudWxsPiA9IGNvbXB1dGVkKCgpID0+IGZpbmRUZW1wbGF0ZUJ5TmFtZShbLi4udGhpcy50ZW1wbGF0ZXMoKV0sICd0aXRsZVJvd1JpZ2h0JykpO1xuXG4gICAgcHVibGljIG92ZXJsYXlGb3JtTWV0YWRhdGEgPSBjb21wdXRlZCgoKSA9PlxuICAgICAgICB0aGlzLm1ldGFkYXRhKCkuZmlsdGVyKFxuICAgICAgICAgICAgZiA9PlxuICAgICAgICAgICAgICAgIChmLmRlc2NyaXB0b3IuZGlzcGxheVR5cGUgPT0gbnVsbCAmJiBGaWx0ZXJEaXNwbGF5VHlwZUVudW0uT3ZlcmxheVdpdGhUYWcgPT09IHRoaXMuZGVmYXVsdEZpbHRlckRpc3BsYXlUeXBlKSB8fFxuICAgICAgICAgICAgICAgIGYuZGVzY3JpcHRvci5kaXNwbGF5VHlwZSA9PT0gRmlsdGVyRGlzcGxheVR5cGVFbnVtLk92ZXJsYXlXaXRoVGFnXG4gICAgICAgIClcbiAgICApO1xuICAgIHB1YmxpYyBkaXJlY3RJbnB1dE1ldGFkYXRhID0gY29tcHV0ZWQoKCkgPT5cbiAgICAgICAgdGhpcy5tZXRhZGF0YSgpLmZpbHRlcihcbiAgICAgICAgICAgIGYgPT5cbiAgICAgICAgICAgICAgICAoZi5kZXNjcmlwdG9yLmRpc3BsYXlUeXBlID09IG51bGwgJiYgRmlsdGVyRGlzcGxheVR5cGVFbnVtLkRpcmVjdElucHV0ID09PSB0aGlzLmRlZmF1bHRGaWx0ZXJEaXNwbGF5VHlwZSkgfHxcbiAgICAgICAgICAgICAgICBmLmRlc2NyaXB0b3IuZGlzcGxheVR5cGUgPT09IEZpbHRlckRpc3BsYXlUeXBlRW51bS5EaXJlY3RJbnB1dFxuICAgICAgICApXG4gICAgKTtcblxuICAgIHB1YmxpYyBvdmVybGF5Rm9ybUZpbHRlcnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEluaXRpYWxGaWx0ZXJzKHRoaXMudGFibGVEYXRhLmZpbHRlclN0YXRlcygpLCB0aGlzLm92ZXJsYXlGb3JtTWV0YWRhdGEoKSk7XG4gICAgfSk7XG5cbiAgICBwdWJsaWMgc2hvd092ZXJsYXlGaWx0ZXJGb3JtQnV0dG9uID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vdmVybGF5Rm9ybU1ldGFkYXRhKCkubGVuZ3RoID4gMCk7XG5cbiAgICBwdWJsaWMgYWN0aXZlRmlsdGVycyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgZmlsdGVyRW50cnkgPSB0aGlzLm92ZXJsYXlGb3JtRmlsdGVycygpO1xuICAgICAgICByZXR1cm4gdGhpcy5vdmVybGF5Rm9ybU1ldGFkYXRhKClcbiAgICAgICAgICAgIC5maWx0ZXIoZCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gZmlsdGVyRW50cnlbZC5kZXNjcmlwdG9yLnByb3BlcnR5XTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyLm1hdGNoTW9kZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlci5kaXNwbGF5TWF0Y2hNb2RlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgKGZpbHRlci5tYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5FeGlzdHMgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5tYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5Eb2VzTm90RXhpc3QgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIChmaWx0ZXIudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBmaWx0ZXIuZGlzcGxheVZhbHVlICE9PSB1bmRlZmluZWQpKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLm1hcChkID0+IGZpbHRlckVudHJ5W2QuZGVzY3JpcHRvci5wcm9wZXJ0eV0hKTtcbiAgICB9KTtcbiAgICBwdWJsaWMgYWN0aXZlRmlsdGVyUHJvcGVydGllcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuYWN0aXZlRmlsdGVycygpLm1hcChmID0+IGYuY29uZmlnLmRlc2NyaXB0b3IucHJvcGVydHkpKTtcbiAgICBwdWJsaWMgZmlsdGVyRWRpdCA9IHNpZ25hbDxGaWx0ZXJTdGF0ZVdpdGhDb25maWcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gICAgcHJvdGVjdGVkIHVuc2V0UmVxdWlyZWRGaWx0ZXJzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBhY3RpdmVGaWx0ZXJzID0gdGhpcy5hY3RpdmVGaWx0ZXJzKCkubWFwKGVsID0+IGVsLmNvbmZpZy5kZXNjcmlwdG9yLnByb3BlcnR5KTtcbiAgICAgICAgcmV0dXJuIHRoaXMub3ZlcmxheUZvcm1NZXRhZGF0YSgpXG4gICAgICAgICAgICAuZmlsdGVyKGVsID0+IGVsLmRlc2NyaXB0b3IuaXNSZXF1aXJlZCAmJiAhYWN0aXZlRmlsdGVycy5pbmNsdWRlcyhlbC5kZXNjcmlwdG9yLnByb3BlcnR5KSlcbiAgICAgICAgICAgIC5tYXAoZWwgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIG1hdGNoTW9kZTogZWwuZGVmYXVsdE1hdGNoTW9kZSxcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheU1hdGNoTW9kZTogZWwuZGVmYXVsdE1hdGNoTW9kZSxcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnOiBlbFxuICAgICAgICAgICAgICAgIH0gc2F0aXNmaWVzIEZpbHRlclN0YXRlV2l0aENvbmZpZztcbiAgICAgICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gZ2xvYmFsIHNlYXJjaCBtb2RlbFxuICAgIHB1YmxpYyBzZWFyY2hWYWx1ZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc2VhcmNoKCk/LnZhbHVlKTtcbiAgICBwdWJsaWMgc2VhcmNoQ2FzZVNlbnNpdGl2ZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc2VhcmNoKCk/LmNhc2VTZW5zaXRpdmUpO1xuICAgIHB1YmxpYyBzZWFyY2hXb3JkTGltaXRNYXhFcnJvciA9IHNpZ25hbChmYWxzZSk7XG4gICAgcHJpdmF0ZSBzZWFyY2hXb3JkTGltaXRNYXhDbXAgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0TGltaXQgPSB0aGlzLnNlYXJjaExpbWl0V29yZE1heCgpO1xuICAgICAgICBpZiAoaW5wdXRMaW1pdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXRMaW1pdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy50YWJsZUNvbmZpZz8uc2VhcmNoTGltaXRNYXhXb3JkcyAhPT0gdW5kZWZpbmVkID8gdGhpcy50YWJsZUNvbmZpZz8uc2VhcmNoTGltaXRNYXhXb3JkcyA6IFRhYmxlSGVhZGVyV2l0aEZpbHRlcnNDb21wb25lbnQuU0VBUkNIX1dPUkRfTElNSVRfTUFYO1xuICAgIH0pO1xuICAgIHByaXZhdGUgc2VhcmNoVmFsdWVTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gICAgcHJpdmF0ZSBzZWFyY2hDYXNlU2Vuc2l0aXZlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICAgIC8vIFVJIHV0aWxpdGllc1xuICAgIHByaXZhdGUgY2xpY2tlZE9uRmlsdGVyRXZlbnQ6IHtldmVudD86IEV2ZW50OyBmaWx0ZXI/OiBGaWx0ZXJTdGF0ZVdpdGhDb25maWd9IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuc2VhcmNoVmFsdWVTdWJqZWN0LnBpcGUoZGVib3VuY2VUaW1lKDUwMCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpLCB0aGlzLnNlYXJjaENhc2VTZW5zaXRpdmVTdWJqZWN0XSlcbiAgICAgICAgICAgIC8vIE5PVEU6IHNraXAgaXMgdXNlZCB0byBpZ25vcmUgcHJvcGFnYXRpbmcgdGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIHN1YmplY3RzXG4gICAgICAgICAgICAucGlwZShza2lwKDEpLCB0YWtlVW50aWxEZXN0cm95ZWQoKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKFt2YWx1ZSwgY2FzZVNlbnNpdGl2ZV0pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVByaW1lVGFibGVHbG9iYWxGaWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID09IG51bGwgPyAodGhpcy5zZWFyY2goKT8udmFsdWUgPz8gJycpIDogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGNhc2VTZW5zaXRpdmUgPT0gbnVsbCA/ICh0aGlzLnNlYXJjaCgpPy5jYXNlU2Vuc2l0aXZlID8/IHVuZGVmaW5lZCkgOiBjYXNlU2Vuc2l0aXZlXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uRmlsdGVyRm9ybUFwcGx5KGV2ZW50OiBGaWx0ZXJGb3JtRW1pdEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGZpbHRlck1ldGFkYXRhID0gdGhpcy5tZXRhZGF0YSgpLmZpbmQoZCA9PiBkLmRlc2NyaXB0b3IucHJvcGVydHkgPT09IGV2ZW50LnByb3BlcnR5KTtcbiAgICAgICAgaWYgKCFmaWx0ZXJNZXRhZGF0YSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsdGVyRGF0YTogRmlsdGVyU3RhdGVXaXRoQ29uZmlnID0ge1xuICAgICAgICAgICAgLi4uZmlsdGVyU2V0U3RhdGVPbkRpc3BsYXlDaGFuZ2Uoe2Nhc2VTZW5zaXRpdmU6IGV2ZW50LmNhc2VTZW5zaXRpdmV9LCBldmVudC5tYXRjaE1vZGUsIGV2ZW50LnZhbHVlLCBmaWx0ZXJNZXRhZGF0YS5kZXNjcmlwdG9yLmZpbHRlclR5cGUsIGZpbHRlck1ldGFkYXRhLmRhdGVDb25maWcpLFxuICAgICAgICAgICAgY29uZmlnOiBmaWx0ZXJNZXRhZGF0YVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMudXBkYXRlUHJpbWVUYWJsZUZpbHRlcihmaWx0ZXJEYXRhKTtcblxuICAgICAgICAvLyB0aGlzIGtlZXBzIHRoZSBVSSB1cGRhdGVkIHByb3Blcmx5IGJlZm9yZSBjbG9zaW5nIHRoZSBvdmVybGF5XG4gICAgICAgIHRoaXMuZmlsdGVyRWRpdC5zZXQoZmlsdGVyRGF0YSk7XG5cbiAgICAgICAgLy8gUmVzZXR0aW5nIHRoZSBmb3JtIGlzIGRvbmUgaW4gdGhlIG9uT3ZlcmxheUhpZGUgY2FsbGJhY2sgYmVjYXVzZSByZXNldHRpbmcgdGhlXG4gICAgICAgIC8vIHZhbHVlcyBoZXJlIHJlbmRlcnMgZW1wdHkgaW5wdXRzIGZvciBhIHNwbGl0IHNlY29uZCBiZWZvcmUgY2xvc2luZyB0aGUgb3ZlcmxheVxuICAgICAgICB0aGlzLmZpbHRlck92ZXJsYXkoKS5oaWRlKCk7XG4gICAgfVxuXG4gICAgb25GaWx0ZXJSZW1vdmUoZXZlbnQ6IEZpbHRlckFjdGl2ZVRhZ0V2ZW50KSB7XG4gICAgICAgIHRoaXMudXBkYXRlUHJpbWVUYWJsZUZpbHRlcih7XG4gICAgICAgICAgICAuLi50aGlzLm92ZXJsYXlGb3JtRmlsdGVycygpW2V2ZW50LmZpbHRlci5jb25maWcuZGVzY3JpcHRvci5wcm9wZXJ0eV0sXG4gICAgICAgICAgICBtYXRjaE1vZGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGRpc3BsYXlNYXRjaE1vZGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBkaXNwbGF5VmFsdWU6IHVuZGVmaW5lZFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkZpbHRlckVkaXQoZXZlbnQ6IEZpbHRlckFjdGl2ZVRhZ0V2ZW50KSB7XG4gICAgICAgIHRoaXMub25GaWx0ZXJBZGRPckVkaXQoZXZlbnQuZmlsdGVyLCBldmVudC5ldmVudCk7XG4gICAgfVxuXG4gICAgb25GaWx0ZXJBZGQoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIHRoaXMub25GaWx0ZXJBZGRPckVkaXQodW5kZWZpbmVkLCBldmVudCk7XG4gICAgfVxuXG4gICAgb25TZWFyY2hDaGFuZ2UodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWFyY2hXb3JkTGltaXRNYXggPSB0aGlzLnNlYXJjaFdvcmRMaW1pdE1heENtcCgpO1xuICAgICAgICBpZiAoc2VhcmNoV29yZExpbWl0TWF4ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCB3b3JkQ291bnQgPSB2YWx1ZS5zcGxpdCgvXFxzKy8pLmZpbHRlcih3b3JkID0+IHdvcmQubGVuZ3RoID4gMCkubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hXb3JkTGltaXRNYXhFcnJvci5zZXQod29yZENvdW50ID4gc2VhcmNoV29yZExpbWl0TWF4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoV29yZExpbWl0TWF4RXJyb3Iuc2V0KGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5zZWFyY2hXb3JkTGltaXRNYXhFcnJvcigpKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaFZhbHVlU3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uU2VhcmNoQ2FzZVNlbnNpdGl2ZUNoYW5nZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnNlYXJjaENhc2VTZW5zaXRpdmVTdWJqZWN0Lm5leHQodmFsdWUpO1xuICAgIH1cblxuICAgIG9uT3ZlcmxheUhpZGUoKSB7XG4gICAgICAgIC8vIHJlc2V0dGluZyB0aGUgZm9ybSBpcyBkb25lIGhlcmUgZm9yIGEgc21vb3RoZXIgYW5pbWF0aW9uXG4gICAgICAgIGlmICh0aGlzLmZpbHRlckZvcm1Db21wb25lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJGb3JtQ29tcG9uZW50KCk/LnJlc2V0Rm9ybSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY2xpY2tlZE9uRmlsdGVyRXZlbnQpIHtcbiAgICAgICAgICAgIC8vIHNob3cgdGhlIG92ZXJsYXkgYWdhaW4gaWYgdGhlIHVzZXIgY2xpY2tlZCBhbm90aGVyIGZpbHRlclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJFZGl0LnNldCh0aGlzLmNsaWNrZWRPbkZpbHRlckV2ZW50Py5maWx0ZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyT3ZlcmxheSgpLnNob3codGhpcy5jbGlja2VkT25GaWx0ZXJFdmVudD8uZXZlbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2xpY2tlZE9uRmlsdGVyRXZlbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGNsZWFuIHN0YXRlXG4gICAgICAgICAgICB0aGlzLmZpbHRlckVkaXQuc2V0KHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRmlsdGVyQWRkT3JFZGl0KGZpbHRlcj86IEZpbHRlclN0YXRlV2l0aENvbmZpZywgZXZlbnQ/OiBFdmVudCkge1xuICAgICAgICAvLyBJZiB1c2VyIGNsaWNrcyBvbiB0aGUgc2FtZSBmaWx0ZXIgb3IgYWRkIHRoYXQgaXMgYWxyZWFkeSBvcGVuLCBjbG9zZSB0aGUgb3ZlcmxheVxuICAgICAgICBpZiAodGhpcy5maWx0ZXJPdmVybGF5KCkub3ZlcmxheVZpc2libGUgJiYgdGhpcy5maWx0ZXJFZGl0KCk/LmNvbmZpZy5kZXNjcmlwdG9yLnByb3BlcnR5ID09PSBmaWx0ZXI/LmNvbmZpZy5kZXNjcmlwdG9yLnByb3BlcnR5KSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlck92ZXJsYXkoKS5oaWRlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5maWx0ZXJPdmVybGF5KCkub3ZlcmxheVZpc2libGUpIHtcbiAgICAgICAgICAgIC8vIEluIGNhc2UgdGhlIHVzZXIgY2xpY2tzIGFub3RoZXIgZmlsdGVyLCAncmUtc2hvd2luZycgdGhlIG92ZXJsYXkgaW5cbiAgICAgICAgICAgIC8vIHRoZSBuZXcgcG9zaXRpb24gaXMgZG9uZSBpbiB0aGUgb25PdmVybGF5SGlkZSBjYWxsYmFja1xuICAgICAgICAgICAgdGhpcy5jbGlja2VkT25GaWx0ZXJFdmVudCA9IHtldmVudCwgZmlsdGVyfTtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyT3ZlcmxheSgpLmhpZGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyRWRpdC5zZXQoZmlsdGVyKTtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyT3ZlcmxheSgpLnNob3coZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRJbml0aWFsRmlsdGVycyhmaWx0ZXJzSW5pdDogUmVjb3JkPHN0cmluZywgRmlsdGVyU3RhdGU+IHwgdW5kZWZpbmVkLCBtZXRhZGF0YTogRmlsdGVyQ29uZmlnW10pIHtcbiAgICAgICAgY29uc3QgZmlsdGVyc1Jlc3VsdDoge1twOiBzdHJpbmddOiBGaWx0ZXJTdGF0ZVdpdGhDb25maWd9ID0ge307XG5cbiAgICAgICAgaWYgKGZpbHRlcnNJbml0KSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIGZpbHRlcnNJbml0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVySW5pdCA9IGZpbHRlcnNJbml0W3Byb3BlcnR5XTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlck1ldGFkYXRhID0gbWV0YWRhdGEuZmluZChtID0+IG0uZGVzY3JpcHRvci5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpO1xuICAgICAgICAgICAgICAgIGlmICghZmlsdGVyTWV0YWRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZmlsdGVyc1Jlc3VsdFtwcm9wZXJ0eV0gPSB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmZpbHRlclNldFN0YXRlT25DaGFuZ2UoZmlsdGVySW5pdCwgZmlsdGVySW5pdC5tYXRjaE1vZGUsIGZpbHRlckluaXQudmFsdWUsIGZpbHRlck1ldGFkYXRhLmRlc2NyaXB0b3IuZmlsdGVyVHlwZSwgZmlsdGVyTWV0YWRhdGEuZGF0ZUNvbmZpZyksXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZzogZmlsdGVyTWV0YWRhdGFcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpbHRlcnNSZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVQcmltZVRhYmxlRmlsdGVyKGZpbHRlcjogRmlsdGVyU3RhdGVXaXRoQ29uZmlnKSB7XG4gICAgICAgIHRoaXMudGFibGVEYXRhLnVwZGF0ZVByaW1lRmlsdGVyKGZpbHRlci5jb25maWcuZGVzY3JpcHRvci5wcm9wZXJ0eSwgZmlsdGVyKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVByaW1lVGFibGVHbG9iYWxGaWx0ZXIoc2VhcmNoUXVlcnk6IHN0cmluZyB8IG51bGwsIGNhc2VTZW5zaXRpdmUgPSBmYWxzZSkge1xuICAgICAgICAvLyBtYXRjaCBtb2RlIG5lZWRzIHRvIGJlIHNldCBmb3IgaW5saW5lIHNlYXJjaFxuICAgICAgICB0aGlzLnRhYmxlRGF0YS51cGRhdGVQcmltZUZpbHRlcignZ2xvYmFsJywge3ZhbHVlOiBzZWFyY2hRdWVyeSwgbWF0Y2hNb2RlOiAnY29udGFpbnMnLCBjYXNlU2Vuc2l0aXZlOiBjYXNlU2Vuc2l0aXZlfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IEZpbHRlclR5cGVFbnVtID0gRmlsdGVyVHlwZUVudW07XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ3JvdyBmbGV4LXdyYXBcIj5cbiAgICBAaWYgKHRpdGxlVGVtcGxhdGUoKSkge1xuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGl0bGVUZW1wbGF0ZSgpXCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuICAgIEBpZiAoc2hvd092ZXJsYXlGaWx0ZXJGb3JtQnV0dG9uKCkpIHtcbiAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICByb3VuZGVkPVwidHJ1ZVwiXG4gICAgICAgICAgICBbc2V2ZXJpdHldPVwiYWN0aXZlRmlsdGVycygpLmxlbmd0aCA+IDAgPyAncHJpbWFyeScgOiAnc2Vjb25kYXJ5J1wiXG4gICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uRmlsdGVyQWRkKCRldmVudClcIlxuICAgICAgICAgICAgW3N0eWxlQ2xhc3NdPVwiJ215LTEgbXItMicgKyAodGl0bGVUZW1wbGF0ZSgpID8gJyBtbC0zJyA6ICcnKVwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImljb25cIj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWZpbHRlciBhYnNvbHV0ZSBsZWZ0LTEuNSBzY2FsZS05MFwiPjwvaT5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLXBsdXMgYWJzb2x1dGUgYm90dG9tLTEuNSByaWdodC0wIHNjYWxlLTYwXCI+PC9pPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9wLWJ1dHRvbj5cbiAgICB9XG4gICAgQGlmIChlbmFibGVTZWFyY2goKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwibW5nLXNlYXJjaCBtci0zXCIgW25nQ2xhc3NdPVwieydtbC0zJzogIXNob3dPdmVybGF5RmlsdGVyRm9ybUJ1dHRvbigpICYmIHRpdGxlVGVtcGxhdGUoKX1cIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1pbnB1dC1pY29uLWxlZnQgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgPHAtaWNvbmZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8cC1pbnB1dGljb24gY2xhc3M9XCJwaSBwaS1zZWFyY2hcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInNlYXJjaFZhbHVlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25TZWFyY2hDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiZ2xvYmFsU2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBJbnB1dFRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2VhcmNoLWlucHV0IHctZnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J25nLWludmFsaWQnOiBzZWFyY2hXb3JkTGltaXRNYXhFcnJvcigpfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5wbGFjZWhvbGRlcl09XCInbW5nRmlsdGVyLnNlYXJjaC5pbnB1dCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidtbmdGaWx0ZXIuc2VhcmNoLmlucHV0JyB8IHRyYW5zbGF0ZVwiIC8+XG4gICAgICAgICAgICAgICAgPC9wLWljb25maWVsZD5cbiAgICAgICAgICAgICAgICBAaWYgKGVuYWJsZUNhc2VTZW5zaXRpdmUoKSkge1xuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvZ2dsZS1idXR0b24taW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwLXRvZ2dsZUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJtbC0xIHAtMSBwLWJ1dHRvbi1zbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwic2VhcmNoQ2FzZVNlbnNpdGl2ZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblNlYXJjaENhc2VTZW5zaXRpdmVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25MYWJlbD1cIkFhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZMYWJlbD1cIkFhXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIEBpZiAoc2VhcmNoV29yZExpbWl0TWF4RXJyb3IoKSkge1xuICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInAtZXJyb3IgYmxvY2tcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgJ21uZ0ZpbHRlci5zZWFyY2gubWF4V29yZHNFeGNlZWRlZE1lc3NhZ2UnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuICAgIEBpZiAoZGlyZWN0SW5wdXRNZXRhZGF0YSgpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBteS0xXCI+XG4gICAgICAgICAgICBAZm9yIChtZXRhZGF0YSBvZiBkaXJlY3RJbnB1dE1ldGFkYXRhKCk7IHRyYWNrIG1ldGFkYXRhLmRlc2NyaXB0b3IucHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICBAaWYgKG1ldGFkYXRhLmRlc2NyaXB0b3IuZmlsdGVyVHlwZSAhPT0gRmlsdGVyVHlwZUVudW0uQ29tcG9uZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIEBkZWZlciAob24gaWRsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPG1uZy10YWJsZS1maWx0ZXIgW2NvbmZpZ109XCJtZXRhZGF0YVwiIFttb2RlbF09XCJtb2RlbCgpXCIgW3Nob3dGaWx0ZXJJY29uXT1cInRydWVcIiBbc2hvd1RpdGxlQXNQbGFjZWhvbGRlcl09XCJ0cnVlXCIgY2xhc3M9XCJteC0xIG15LTFcIiAvPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBAZWxzZSBpZiAobWV0YWRhdGEuZGVzY3JpcHRvci5jdXN0b21Db21wb25lbnRUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW21uZ0NvbXBvbmVudF09XCJtZXRhZGF0YS5kZXNjcmlwdG9yLmN1c3RvbUNvbXBvbmVudFR5cGVcIiBbaW5wdXRzXT1cIntkZXNjcmlwdG9yOiBtZXRhZGF0YS5kZXNjcmlwdG9yfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuICAgIEBpZiAodGl0bGVSb3dSaWdodFRlbXBsYXRlKCkpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRpdGxlUm93UmlnaHRUZW1wbGF0ZSgpXCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuPC9kaXY+XG5AaWYgKGFjdGl2ZUZpbHRlcnMoKS5sZW5ndGggPiAwIHx8IHVuc2V0UmVxdWlyZWRGaWx0ZXJzKCkubGVuZ3RoID4gMCkge1xuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBmbGV4LXdyYXAgbXQtMlwiPlxuICAgICAgICBAZm9yIChmaWx0ZXIgb2YgdW5zZXRSZXF1aXJlZEZpbHRlcnMoKTsgdHJhY2sgZmlsdGVyLmNvbmZpZy5kZXNjcmlwdG9yLnByb3BlcnR5KSB7XG4gICAgICAgICAgICBAZGVmZXIgKG9uIHZpZXdwb3J0KSB7XG4gICAgICAgICAgICAgICAgPG1uZy10YWJsZS1maWx0ZXItYWN0aXZlLXRhZyBbbW9kZWxdPVwibW9kZWwoKVwiIFtmaWx0ZXJdPVwiZmlsdGVyXCIgKGVkaXQpPVwib25GaWx0ZXJFZGl0KCRldmVudClcIiAocmVtb3ZlKT1cIm9uRmlsdGVyUmVtb3ZlKCRldmVudClcIiAvPlxuICAgICAgICAgICAgfSBAcGxhY2Vob2xkZXIge1xuICAgICAgICAgICAgICAgIDxwLXNrZWxldG9uIHdpZHRoPVwiMTByZW1cIiBoZWlnaHQ9XCIycmVtXCI+PC9wLXNrZWxldG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIEBmb3IgKGZpbHRlciBvZiBhY3RpdmVGaWx0ZXJzKCk7IHRyYWNrIGZpbHRlci5jb25maWcuZGVzY3JpcHRvci5wcm9wZXJ0eSkge1xuICAgICAgICAgICAgQGRlZmVyIChvbiB2aWV3cG9ydCkge1xuICAgICAgICAgICAgICAgIDxtbmctdGFibGUtZmlsdGVyLWFjdGl2ZS10YWcgW21vZGVsXT1cIm1vZGVsKClcIiBbZmlsdGVyXT1cImZpbHRlclwiIChlZGl0KT1cIm9uRmlsdGVyRWRpdCgkZXZlbnQpXCIgKHJlbW92ZSk9XCJvbkZpbHRlclJlbW92ZSgkZXZlbnQpXCIgLz5cbiAgICAgICAgICAgIH0gQHBsYWNlaG9sZGVyIHtcbiAgICAgICAgICAgICAgICA8cC1za2VsZXRvbiB3aWR0aD1cIjEwcmVtXCIgaGVpZ2h0PVwiMnJlbVwiPjwvcC1za2VsZXRvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIDwvZGl2PlxufVxuPHAtcG9wb3ZlciAjb3Agc2hvd0Nsb3NlSWNvbj1cInRydWVcIiAob25IaWRlKT1cIm9uT3ZlcmxheUhpZGUoKVwiIGFwcGVuZFRvPVwiYm9keVwiPlxuICAgIEBkZWZlciAob24gdmlld3BvcnQpIHtcbiAgICAgICAgPG1uZy10YWJsZS1maWx0ZXItZm9ybVxuICAgICAgICAgICAgW21vZGVsXT1cIm1vZGVsKClcIlxuICAgICAgICAgICAgW21ldGFkYXRhXT1cIm92ZXJsYXlGb3JtTWV0YWRhdGEoKVwiXG4gICAgICAgICAgICBbZ2VuZXJpY0Rlc2NyaXB0b3JdPVwiZ2VuZXJpY0ZpbHRlckRlc2NyaXB0b3IoKVwiXG4gICAgICAgICAgICBbZmlsdGVyXT1cImZpbHRlckVkaXQoKVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRQcm9wZXJ0aWVzXT1cImFjdGl2ZUZpbHRlclByb3BlcnRpZXMoKVwiXG4gICAgICAgICAgICBbcHJvcGVydHlTZWFyY2hdPVwiZ2VuZXJpY0ZpbHRlckRlc2NyaXB0b3IoKT8ucHJvcGVydHlTZWFyY2hcIlxuICAgICAgICAgICAgW292ZXJsYXldPVwib3BcIlxuICAgICAgICAgICAgW2VuYWJsZUNhc2VTZW5zaXRpdmVdPVwiZW5hYmxlQ2FzZVNlbnNpdGl2ZSgpXCJcbiAgICAgICAgICAgIChhcHBseSk9XCJvbkZpbHRlckZvcm1BcHBseSgkZXZlbnQpXCIgLz5cbiAgICB9IEBwbGFjZWhvbGRlciB7XG4gICAgICAgIDxwLXNrZWxldG9uIHdpZHRoPVwiMjByZW1cIiBoZWlnaHQ9XCIzcmVtXCI+PC9wLXNrZWxldG9uPlxuICAgIH1cbjwvcC1wb3BvdmVyPlxuIl19","import { getI18nErrorParams, getI18nForError, toastMessage } from '@mediusinc/mng-commons/core';\nimport { getI18nForModel } from '@mediusinc/mng-commons/model';\n/**\n * Generates and displays a notification for a table-related error with localized error messages and details.\n *\n * @param {TranslateService} translate - The service used to handle localization and translations.\n * @param {MessageService} messageService - The service used to manage and display messages.\n * @param {TableDescriptorInst<any>} table - The table descriptor containing table-specific information and model data.\n * @param {Error} error - The error object providing details about the error that occurred.\n * @return {Message | null} The generated message object for the error notification or null if no notification was created.\n */\nexport function tableNotificationError(translate, messageService, table, error) {\n const params = {\n errorMessage: getI18nForError(translate, error) ?? error.message,\n ...getI18nErrorParams(error)\n };\n const tableErrorTitle = getI18nForModel(translate, table.model, 'table.error.title', { fallbackKey: 'general.error', params }) ?? undefined;\n const tableErrorMessage = getI18nForModel(translate, table.model, 'table.error.message', { fallbackKey: 'general.errorMessage', params }) ?? undefined;\n return toastMessage(tableErrorMessage ?? error.message, 'error', { messageService: messageService, title: tableErrorTitle, icon: 'pi-exclamation-triangle' });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGFibGUvc3JjL2hlbHBlcnMvbm90aWZpY2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBQyxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDOUYsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBRzdEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUFDLFNBQTJCLEVBQUUsY0FBOEIsRUFBRSxLQUErQixFQUFFLEtBQVk7SUFDN0ksTUFBTSxNQUFNLEdBQUc7UUFDWCxZQUFZLEVBQUUsZUFBZSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTztRQUNoRSxHQUFHLGtCQUFrQixDQUFDLEtBQUssQ0FBQztLQUMvQixDQUFDO0lBQ0YsTUFBTSxlQUFlLEdBQUcsZUFBZSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLG1CQUFtQixFQUFFLEVBQUMsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQztJQUMxSSxNQUFNLGlCQUFpQixHQUFHLGVBQWUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxFQUFDLFdBQVcsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLEVBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQztJQUNySixPQUFPLFlBQVksQ0FBQyxpQkFBaUIsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFDLGNBQWMsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUseUJBQXlCLEVBQUMsQ0FBQyxDQUFDO0FBQ2hLLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtNZXNzYWdlU2VydmljZSwgVG9hc3RNZXNzYWdlT3B0aW9uc30gZnJvbSAncHJpbWVuZy9hcGknO1xuXG5pbXBvcnQge2dldEkxOG5FcnJvclBhcmFtcywgZ2V0STE4bkZvckVycm9yLCB0b2FzdE1lc3NhZ2V9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge2dldEkxOG5Gb3JNb2RlbH0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9tb2RlbCc7XG5pbXBvcnQge1RhYmxlRGVzY3JpcHRvckluc3R9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvdGFibGUvYXBpJztcblxuLyoqXG4gKiBHZW5lcmF0ZXMgYW5kIGRpc3BsYXlzIGEgbm90aWZpY2F0aW9uIGZvciBhIHRhYmxlLXJlbGF0ZWQgZXJyb3Igd2l0aCBsb2NhbGl6ZWQgZXJyb3IgbWVzc2FnZXMgYW5kIGRldGFpbHMuXG4gKlxuICogQHBhcmFtIHtUcmFuc2xhdGVTZXJ2aWNlfSB0cmFuc2xhdGUgLSBUaGUgc2VydmljZSB1c2VkIHRvIGhhbmRsZSBsb2NhbGl6YXRpb24gYW5kIHRyYW5zbGF0aW9ucy5cbiAqIEBwYXJhbSB7TWVzc2FnZVNlcnZpY2V9IG1lc3NhZ2VTZXJ2aWNlIC0gVGhlIHNlcnZpY2UgdXNlZCB0byBtYW5hZ2UgYW5kIGRpc3BsYXkgbWVzc2FnZXMuXG4gKiBAcGFyYW0ge1RhYmxlRGVzY3JpcHRvckluc3Q8YW55Pn0gdGFibGUgLSBUaGUgdGFibGUgZGVzY3JpcHRvciBjb250YWluaW5nIHRhYmxlLXNwZWNpZmljIGluZm9ybWF0aW9uIGFuZCBtb2RlbCBkYXRhLlxuICogQHBhcmFtIHtFcnJvcn0gZXJyb3IgLSBUaGUgZXJyb3Igb2JqZWN0IHByb3ZpZGluZyBkZXRhaWxzIGFib3V0IHRoZSBlcnJvciB0aGF0IG9jY3VycmVkLlxuICogQHJldHVybiB7TWVzc2FnZSB8IG51bGx9IFRoZSBnZW5lcmF0ZWQgbWVzc2FnZSBvYmplY3QgZm9yIHRoZSBlcnJvciBub3RpZmljYXRpb24gb3IgbnVsbCBpZiBubyBub3RpZmljYXRpb24gd2FzIGNyZWF0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0YWJsZU5vdGlmaWNhdGlvbkVycm9yKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLCB0YWJsZTogVGFibGVEZXNjcmlwdG9ySW5zdDxhbnk+LCBlcnJvcjogRXJyb3IpOiBUb2FzdE1lc3NhZ2VPcHRpb25zIHwgbnVsbCB7XG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICBlcnJvck1lc3NhZ2U6IGdldEkxOG5Gb3JFcnJvcih0cmFuc2xhdGUsIGVycm9yKSA/PyBlcnJvci5tZXNzYWdlLFxuICAgICAgICAuLi5nZXRJMThuRXJyb3JQYXJhbXMoZXJyb3IpXG4gICAgfTtcbiAgICBjb25zdCB0YWJsZUVycm9yVGl0bGUgPSBnZXRJMThuRm9yTW9kZWwodHJhbnNsYXRlLCB0YWJsZS5tb2RlbCwgJ3RhYmxlLmVycm9yLnRpdGxlJywge2ZhbGxiYWNrS2V5OiAnZ2VuZXJhbC5lcnJvcicsIHBhcmFtc30pID8/IHVuZGVmaW5lZDtcbiAgICBjb25zdCB0YWJsZUVycm9yTWVzc2FnZSA9IGdldEkxOG5Gb3JNb2RlbCh0cmFuc2xhdGUsIHRhYmxlLm1vZGVsLCAndGFibGUuZXJyb3IubWVzc2FnZScsIHtmYWxsYmFja0tleTogJ2dlbmVyYWwuZXJyb3JNZXNzYWdlJywgcGFyYW1zfSkgPz8gdW5kZWZpbmVkO1xuICAgIHJldHVybiB0b2FzdE1lc3NhZ2UodGFibGVFcnJvck1lc3NhZ2UgPz8gZXJyb3IubWVzc2FnZSwgJ2Vycm9yJywge21lc3NhZ2VTZXJ2aWNlOiBtZXNzYWdlU2VydmljZSwgdGl0bGU6IHRhYmxlRXJyb3JUaXRsZSwgaWNvbjogJ3BpLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlJ30pO1xufVxuIl19","import { Injector, Pipe, inject } from '@angular/core';\nimport { CommonsService } from '@mediusinc/mng-commons/core';\nimport * as i0 from \"@angular/core\";\nexport class LocaleDefaultRowClassPipe {\n constructor() {\n this.injector = inject(Injector);\n }\n transform(value, descriptor, item) {\n if (descriptor?.isLocalized) {\n if (item[descriptor.localizationLocaleProperty] === this.injector.get(CommonsService).getDefaultLocale()) {\n return value + ' mng-table-row-localization-default-locale';\n }\n }\n return value ?? '';\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: LocaleDefaultRowClassPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.1.7\", ngImport: i0, type: LocaleDefaultRowClassPipe, isStandalone: true, name: \"mngLocaleDefaultRowClass\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: LocaleDefaultRowClassPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'mngLocaleDefaultRowClass',\n pure: true\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxlLWRlZmF1bHQtcm93LWNsYXNzLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90YWJsZS9zcmMvcGlwZXMvbG9jYWxlLWRlZmF1bHQtcm93LWNsYXNzLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQWlCLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUVwRSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sNkJBQTZCLENBQUM7O0FBTzNELE1BQU0sT0FBTyx5QkFBeUI7SUFKdEM7UUFLcUIsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztLQVVoRDtJQVJHLFNBQVMsQ0FBQyxLQUFXLEVBQUUsVUFBbUMsRUFBRSxJQUFRO1FBQ2hFLElBQUksVUFBVSxFQUFFLFdBQVcsRUFBRSxDQUFDO1lBQzFCLElBQUssSUFBWSxDQUFDLFVBQVUsQ0FBQywwQkFBMkIsQ0FBQyxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQztnQkFDakgsT0FBTyxLQUFLLEdBQUcsNENBQTRDLENBQUM7WUFDaEUsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLEtBQUssSUFBSSxFQUFFLENBQUM7SUFDdkIsQ0FBQzs4R0FWUSx5QkFBeUI7NEdBQXpCLHlCQUF5Qjs7MkZBQXpCLHlCQUF5QjtrQkFKckMsSUFBSTttQkFBQztvQkFDRixJQUFJLEVBQUUsMEJBQTBCO29CQUNoQyxJQUFJLEVBQUUsSUFBSTtpQkFDYiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0b3IsIFBpcGUsIFBpcGVUcmFuc2Zvcm0sIGluamVjdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7Q29tbW9uc1NlcnZpY2V9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge1RhYmxlRGVzY3JpcHRvckluc3R9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvdGFibGUvYXBpJztcblxuQFBpcGUoe1xuICAgIG5hbWU6ICdtbmdMb2NhbGVEZWZhdWx0Um93Q2xhc3MnLFxuICAgIHB1cmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgTG9jYWxlRGVmYXVsdFJvd0NsYXNzUGlwZTxUPiBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuXG4gICAgdHJhbnNmb3JtKHZhbHVlPzogYW55LCBkZXNjcmlwdG9yPzogVGFibGVEZXNjcmlwdG9ySW5zdDxUPiwgaXRlbT86IFQpOiBzdHJpbmcge1xuICAgICAgICBpZiAoZGVzY3JpcHRvcj8uaXNMb2NhbGl6ZWQpIHtcbiAgICAgICAgICAgIGlmICgoaXRlbSBhcyBhbnkpW2Rlc2NyaXB0b3IubG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHkhXSA9PT0gdGhpcy5pbmplY3Rvci5nZXQoQ29tbW9uc1NlcnZpY2UpLmdldERlZmF1bHRMb2NhbGUoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSArICcgbW5nLXRhYmxlLXJvdy1sb2NhbGl6YXRpb24tZGVmYXVsdC1sb2NhbGUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZSA/PyAnJztcbiAgICB9XG59XG4iXX0=","import { Pipe } from '@angular/core';\nimport { FilterTypeEnum } from '@mediusinc/mng-commons/filter';\nimport * as i0 from \"@angular/core\";\nexport class TableFilterClassPipe {\n transform(value, filter, isEnabled) {\n const strValue = typeof value === 'string' ? value : '';\n if (isEnabled && filter?.filterType !== undefined) {\n return `${strValue} mng-filter-${FilterTypeEnum[filter.filterType].toLowerCase()}`;\n }\n else {\n return strValue;\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TableFilterClassPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.1.7\", ngImport: i0, type: TableFilterClassPipe, isStandalone: true, name: \"mngTableFilterClass\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TableFilterClassPipe, decorators: [{\n type: Pipe,\n args: [{\n pure: true,\n name: 'mngTableFilterClass'\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtZmlsdGVyLWNsYXNzLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90YWJsZS9zcmMvcGlwZXMvdGFibGUtZmlsdGVyLWNsYXNzLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLElBQUksRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFFbEQsT0FBTyxFQUFtQixjQUFjLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQzs7QUFNL0UsTUFBTSxPQUFPLG9CQUFvQjtJQUM3QixTQUFTLENBQUMsS0FBYyxFQUFFLE1BQThDLEVBQUUsU0FBa0I7UUFDeEYsTUFBTSxRQUFRLEdBQUcsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN4RCxJQUFJLFNBQVMsSUFBSSxNQUFNLEVBQUUsVUFBVSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2hELE9BQU8sR0FBRyxRQUFRLGVBQWUsY0FBYyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1FBQ3ZGLENBQUM7YUFBTSxDQUFDO1lBQ0osT0FBTyxRQUFRLENBQUM7UUFDcEIsQ0FBQztJQUNMLENBQUM7OEdBUlEsb0JBQW9COzRHQUFwQixvQkFBb0I7OzJGQUFwQixvQkFBb0I7a0JBSmhDLElBQUk7bUJBQUM7b0JBQ0YsSUFBSSxFQUFFLElBQUk7b0JBQ1YsSUFBSSxFQUFFLHFCQUFxQjtpQkFDOUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1BpcGUsIFBpcGVUcmFuc2Zvcm19IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge0ZpbHRlckRlc2NyaXB0b3IsIEZpbHRlclR5cGVFbnVtfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2ZpbHRlcic7XG5cbkBQaXBlKHtcbiAgICBwdXJlOiB0cnVlLFxuICAgIG5hbWU6ICdtbmdUYWJsZUZpbHRlckNsYXNzJ1xufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUZpbHRlckNsYXNzUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIHRyYW5zZm9ybSh2YWx1ZTogdW5rbm93biwgZmlsdGVyOiBGaWx0ZXJEZXNjcmlwdG9yPGFueSwgYW55PiB8IHVuZGVmaW5lZCwgaXNFbmFibGVkOiBib29sZWFuKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3Qgc3RyVmFsdWUgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiAnJztcbiAgICAgICAgaWYgKGlzRW5hYmxlZCAmJiBmaWx0ZXI/LmZpbHRlclR5cGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGAke3N0clZhbHVlfSBtbmctZmlsdGVyLSR7RmlsdGVyVHlwZUVudW1bZmlsdGVyLmZpbHRlclR5cGVdLnRvTG93ZXJDYXNlKCl9YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJWYWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==","/**\n * generates table layout preferences key used when saving preferences to localstorage\n * @param typeName string, required\n * @param url string, required\n * @param trackProperty string, not required\n */\nexport function generateTableLayoutPrefsKey(typeName, url, trackProperty) {\n return `commonsTableLayoutPrefs~~${typeName}~~${trackProperty ?? url.split('?')[0].split('#')[0]}`;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtbGF5b3V0LXByZWZzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGFibGUvc3JjL2hlbHBlcnMvdGFibGUtbGF5b3V0LXByZWZzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLDJCQUEyQixDQUFDLFFBQWdCLEVBQUUsR0FBVyxFQUFFLGFBQXNCO0lBQzdGLE9BQU8sNEJBQTRCLFFBQVEsS0FBSyxhQUFhLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUN2RyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBnZW5lcmF0ZXMgdGFibGUgbGF5b3V0IHByZWZlcmVuY2VzIGtleSB1c2VkIHdoZW4gc2F2aW5nIHByZWZlcmVuY2VzIHRvIGxvY2Fsc3RvcmFnZVxuICogQHBhcmFtIHR5cGVOYW1lIHN0cmluZywgcmVxdWlyZWRcbiAqIEBwYXJhbSB1cmwgc3RyaW5nLCByZXF1aXJlZFxuICogQHBhcmFtIHRyYWNrUHJvcGVydHkgc3RyaW5nLCBub3QgcmVxdWlyZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlVGFibGVMYXlvdXRQcmVmc0tleSh0eXBlTmFtZTogc3RyaW5nLCB1cmw6IHN0cmluZywgdHJhY2tQcm9wZXJ0eT86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBjb21tb25zVGFibGVMYXlvdXRQcmVmc35+JHt0eXBlTmFtZX1+fiR7dHJhY2tQcm9wZXJ0eSA/PyB1cmwuc3BsaXQoJz8nKVswXS5zcGxpdCgnIycpWzBdfWA7XG59XG4iXX0=","import { Injectable, computed, inject, signal } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { CommonsStorageService } from '@mediusinc/mng-commons/core';\nimport { FilterDisplayTypeEnum } from '@mediusinc/mng-commons/filter';\nimport { generateTableLayoutPrefsKey } from '../helpers/table-layout-prefs';\nimport { TableMetadataService } from './table-metadata.service';\nimport * as i0 from \"@angular/core\";\nexport class TablePreferencesService {\n constructor() {\n this.#router = inject(Router);\n this.#storageService = inject(CommonsStorageService);\n this.#metadata = inject(TableMetadataService);\n this.localstorageKey = computed(() => {\n const descriptor = this.#metadata.descriptor();\n return descriptor.model.i18nBaseKey ? generateTableLayoutPrefsKey(descriptor.model.i18nBaseKey, this.#router.url, descriptor.identifier) : null;\n }, ...(ngDevMode ? [{ debugName: \"localstorageKey\" }] : []));\n this.#layoutPrefsSaveCnt = signal(0, ...(ngDevMode ? [{ debugName: \"#layoutPrefsSaveCnt\" }] : []));\n this.layoutPreferences = computed(() => {\n const lsKey = this.localstorageKey();\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const cnt = this.#layoutPrefsSaveCnt(); // needed to force updates on user changes\n const layoutPrefs = lsKey ? this.#storageService.getItem(TableMetadataService.cmpTypeName, lsKey) : undefined;\n return layoutPrefs ?? { columnWidths: {} };\n }, ...(ngDevMode ? [{ debugName: \"layoutPreferences\" }] : []));\n // columns\n this.columnsWithPrefs = computed(() => this.#computeColumnsWithLayout(), ...(ngDevMode ? [{ debugName: \"columnsWithPrefs\" }] : []));\n }\n #router;\n #storageService;\n #metadata;\n #layoutPrefsSaveCnt;\n /**\n * Method is called on column resize\n * @param element event's element\n */\n onColumnResize({ element }) {\n const fieldId = element.id;\n const width = element.offsetWidth;\n const layoutPrefs = this.layoutPreferences();\n const col = this.columnsWithPrefs().find(el => el.descriptor.property === fieldId);\n if (col)\n col.width = width;\n if (!layoutPrefs.columnWidths)\n layoutPrefs.columnWidths = {};\n layoutPrefs.columnWidths[fieldId] = width;\n this.#saveLayoutPreferences(layoutPrefs);\n }\n onColumnToggle(event) {\n const layoutPrefs = this.layoutPreferences();\n const selectedColumns = event.value.map(v => v.descriptor.property);\n layoutPrefs.columnHidden = this.columnsWithPrefs()\n .filter(c => selectedColumns.indexOf(c.descriptor.property) < 0)\n .map(c => c.descriptor.property);\n this.#saveLayoutPreferences(layoutPrefs, true);\n }\n onColumnToggleAll() {\n const layoutPrefs = this.layoutPreferences();\n const columns = [...this.columnsWithPrefs()];\n const isVisible = !this.columnsWithPrefs().some(c => c.isVisible);\n for (const col of columns) {\n if (isVisible !== col.isVisible) {\n col.isVisible = isVisible;\n }\n }\n layoutPrefs.columnHidden = columns.filter(c => !c.isVisible).map(c => c.descriptor.property);\n this.#saveLayoutPreferences(layoutPrefs, true);\n }\n onColumnReorder(event) {\n if (event.dropIndex !== undefined && event.dropIndex >= 0 && event.dragIndex !== undefined && event.dragIndex >= 0 && event.dropIndex !== event.dragIndex) {\n const eventDropIndex = event.dropIndex;\n const eventDragIndex = event.dragIndex;\n const prevVisibleColumns = this.columnsWithPrefs().filter(c => c.isVisible);\n const colAtDrop = prevVisibleColumns[eventDropIndex];\n const colAtDrag = prevVisibleColumns[eventDragIndex];\n const colAtDropIndex = this.columnsWithPrefs().findIndex(el => el.id === colAtDrop.id);\n const colAtDragIndex = this.columnsWithPrefs().findIndex(el => el.id === colAtDrag.id);\n if (colAtDropIndex > -1 && colAtDragIndex > -1) {\n let columns = [...this.columnsWithPrefs()];\n columns.splice(colAtDragIndex, 1);\n const dropIndex = columns.findIndex(el => el.id === colAtDrop.id) + (eventDropIndex > eventDragIndex ? 1 : 0);\n columns = [...columns.slice(0, dropIndex), colAtDrag, ...columns.slice(dropIndex)];\n const layoutPrefs = this.layoutPreferences();\n layoutPrefs.columnOrder = columns.map(el => el.descriptor.property);\n this.#saveLayoutPreferences(layoutPrefs);\n }\n }\n }\n /**\n * Reset column order and column visibility to default settings\n */\n clearLayoutPreferences() {\n const key = this.localstorageKey();\n if (key) {\n this.#storageService.removeItem(TableMetadataService.cmpTypeName, key);\n this.#layoutPrefsSaveCnt.update(v => v + 1);\n }\n }\n #saveLayoutPreferences(layoutPrefs, forceUpdate = false) {\n const key = this.localstorageKey();\n if (key) {\n this.#storageService.setItem(TableMetadataService.cmpTypeName, key, layoutPrefs);\n if (forceUpdate) {\n this.#layoutPrefsSaveCnt.update(v => v + 1);\n }\n }\n }\n #computeColumnsWithLayout() {\n const descriptor = this.#metadata.descriptor();\n const layoutPrefs = this.layoutPreferences();\n // initialize columns with additional properties\n const timestamp = new Date().getTime();\n const columns = descriptor.columns.map(col => ({\n id: `${col.property}-${timestamp}`,\n descriptor: col,\n filter: this.#metadata\n .filters()\n .find(f => f.descriptor.showOnColumn === col.property &&\n ((f.descriptor.displayType == null && this.#metadata.defaultFilterDisplayType === FilterDisplayTypeEnum.Column) ||\n f.descriptor.displayType === FilterDisplayTypeEnum.Column)),\n sort: descriptor.sorts.find(f => f.showOnColumn === col.property),\n disabled: !col.isToggleable,\n isVisible: layoutPrefs.columnHidden ? !layoutPrefs.columnHidden.includes(col.property) : col.isVisible,\n width: layoutPrefs.columnWidths?.[col.property]\n }));\n if (layoutPrefs.columnOrder) {\n for (let i = 0; i < layoutPrefs.columnOrder.length; i++) {\n const colName = layoutPrefs.columnOrder[i];\n const colWithPrefs = columns.find(el => el.descriptor.property === colName);\n if (colWithPrefs) {\n colWithPrefs.orderIdx = i;\n }\n }\n }\n return columns.sort((a, b) => (a.orderIdx !== undefined && b.orderIdx !== undefined ? a.orderIdx - b.orderIdx : 0));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TablePreferencesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TablePreferencesService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TablePreferencesService, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtcHJlZmVyZW5jZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RhYmxlL3NyYy9zZXJ2aWNlcy90YWJsZS1wcmVmZXJlbmNlcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBS3ZDLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ2xFLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBR3BFLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBRTFFLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDOztBQUc5RCxNQUFNLE9BQU8sdUJBQXVCO0lBRHBDO1FBRWEsWUFBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QixvQkFBZSxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ2hELGNBQVMsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUV6QyxvQkFBZSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDckMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMvQyxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQywyQkFBMkIsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNwSixDQUFDLDJEQUFDLENBQUM7UUFD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LENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsS0FBSyxPQUFPLENBQUMsQ0FBQztnQkFDNUUsSUFBSSxZQUFZLEVBQUUsQ0FBQztvQkFDZixZQUFZLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztnQkFDOUIsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hILENBQUM7OEdBeklRLHVCQUF1QjtrSEFBdkIsdUJBQXVCOzsyRkFBdkIsdUJBQXVCO2tCQURuQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBjb21wdXRlZCwgaW5qZWN0LCBzaWduYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7TXVsdGlTZWxlY3RDaGFuZ2VFdmVudH0gZnJvbSAncHJpbWVuZy9tdWx0aXNlbGVjdCc7XG5pbXBvcnQge1RhYmxlQ29sdW1uUmVvcmRlckV2ZW50fSBmcm9tICdwcmltZW5nL3RhYmxlJztcblxuaW1wb3J0IHtDb21tb25zU3RvcmFnZVNlcnZpY2V9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge0ZpbHRlckRpc3BsYXlUeXBlRW51bX0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9maWx0ZXInO1xuaW1wb3J0IHtUYWJsZUxheW91dFByZWZlcmVuY2VzfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL3RhYmxlL2FwaSc7XG5cbmltcG9ydCB7Z2VuZXJhdGVUYWJsZUxheW91dFByZWZzS2V5fSBmcm9tICcuLi9oZWxwZXJzL3RhYmxlLWxheW91dC1wcmVmcyc7XG5pbXBvcnQge0NvbHVtbldpdGhQcmVmZXJlbmNlc30gZnJvbSAnLi4vbW9kZWxzL2NvbHVtbi1wcmVmZXJlbmNlcy5tb2RlbCc7XG5pbXBvcnQge1RhYmxlTWV0YWRhdGFTZXJ2aWNlfSBmcm9tICcuL3RhYmxlLW1ldGFkYXRhLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVGFibGVQcmVmZXJlbmNlc1NlcnZpY2Uge1xuICAgIHJlYWRvbmx5ICNyb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgICByZWFkb25seSAjc3RvcmFnZVNlcnZpY2UgPSBpbmplY3QoQ29tbW9uc1N0b3JhZ2VTZXJ2aWNlKTtcbiAgICByZWFkb25seSAjbWV0YWRhdGEgPSBpbmplY3QoVGFibGVNZXRhZGF0YVNlcnZpY2UpO1xuXG4gICAgcmVhZG9ubHkgbG9jYWxzdG9yYWdlS2V5ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gdGhpcy4jbWV0YWRhdGEuZGVzY3JpcHRvcigpO1xuICAgICAgICByZXR1cm4gZGVzY3JpcHRvci5tb2RlbC5pMThuQmFzZUtleSA/IGdlbmVyYXRlVGFibGVMYXlvdXRQcmVmc0tleShkZXNjcmlwdG9yLm1vZGVsLmkxOG5CYXNlS2V5LCB0aGlzLiNyb3V0ZXIudXJsLCBkZXNjcmlwdG9yLmlkZW50aWZpZXIpIDogbnVsbDtcbiAgICB9KTtcbiAgICByZWFkb25seSAjbGF5b3V0UHJlZnNTYXZlQ250ID0gc2lnbmFsKDApO1xuICAgIHJlYWRvbmx5IGxheW91dFByZWZlcmVuY2VzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBsc0tleSA9IHRoaXMubG9jYWxzdG9yYWdlS2V5KCk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgICAgY29uc3QgY250ID0gdGhpcy4jbGF5b3V0UHJlZnNTYXZlQ250KCk7IC8vIG5lZWRlZCB0byBmb3JjZSB1cGRhdGVzIG9uIHVzZXIgY2hhbmdlc1xuICAgICAgICBjb25zdCBsYXlvdXRQcmVmcyA9IGxzS2V5ID8gdGhpcy4jc3RvcmFnZVNlcnZpY2UuZ2V0SXRlbTxUYWJsZUxheW91dFByZWZlcmVuY2VzPihUYWJsZU1ldGFkYXRhU2VydmljZS5jbXBUeXBlTmFtZSwgbHNLZXkpIDogdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gbGF5b3V0UHJlZnMgPz8ge2NvbHVtbldpZHRoczoge319O1xuICAgIH0pO1xuXG4gICAgLy8gY29sdW1uc1xuICAgIGNvbHVtbnNXaXRoUHJlZnMgPSBjb21wdXRlZDxDb2x1bW5XaXRoUHJlZmVyZW5jZXNbXT4oKCkgPT4gdGhpcy4jY29tcHV0ZUNvbHVtbnNXaXRoTGF5b3V0KCkpO1xuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIGlzIGNhbGxlZCBvbiBjb2x1bW4gcmVzaXplXG4gICAgICogQHBhcmFtIGVsZW1lbnQgZXZlbnQncyBlbGVtZW50XG4gICAgICovXG4gICAgcHVibGljIG9uQ29sdW1uUmVzaXplKHtlbGVtZW50fTogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZpZWxkSWQ6IHN0cmluZyA9IGVsZW1lbnQuaWQ7XG4gICAgICAgIGNvbnN0IHdpZHRoOiBudW1iZXIgPSBlbGVtZW50Lm9mZnNldFdpZHRoO1xuXG4gICAgICAgIGNvbnN0IGxheW91dFByZWZzID0gdGhpcy5sYXlvdXRQcmVmZXJlbmNlcygpO1xuICAgICAgICBjb25zdCBjb2wgPSB0aGlzLmNvbHVtbnNXaXRoUHJlZnMoKS5maW5kKGVsID0+IGVsLmRlc2NyaXB0b3IucHJvcGVydHkgPT09IGZpZWxkSWQpO1xuICAgICAgICBpZiAoY29sKSBjb2wud2lkdGggPSB3aWR0aDtcbiAgICAgICAgaWYgKCFsYXlvdXRQcmVmcy5jb2x1bW5XaWR0aHMpIGxheW91dFByZWZzLmNvbHVtbldpZHRocyA9IHt9O1xuXG4gICAgICAgIGxheW91dFByZWZzLmNvbHVtbldpZHRoc1tmaWVsZElkXSA9IHdpZHRoO1xuICAgICAgICB0aGlzLiNzYXZlTGF5b3V0UHJlZmVyZW5jZXMobGF5b3V0UHJlZnMpO1xuICAgIH1cblxuICAgIG9uQ29sdW1uVG9nZ2xlKGV2ZW50OiBNdWx0aVNlbGVjdENoYW5nZUV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGxheW91dFByZWZzID0gdGhpcy5sYXlvdXRQcmVmZXJlbmNlcygpO1xuICAgICAgICBjb25zdCBzZWxlY3RlZENvbHVtbnMgPSAoZXZlbnQudmFsdWUgYXMgQ29sdW1uV2l0aFByZWZlcmVuY2VzW10pLm1hcCh2ID0+IHYuZGVzY3JpcHRvci5wcm9wZXJ0eSk7XG4gICAgICAgIGxheW91dFByZWZzLmNvbHVtbkhpZGRlbiA9IHRoaXMuY29sdW1uc1dpdGhQcmVmcygpXG4gICAgICAgICAgICAuZmlsdGVyKGMgPT4gc2VsZWN0ZWRDb2x1bW5zLmluZGV4T2YoYy5kZXNjcmlwdG9yLnByb3BlcnR5KSA8IDApXG4gICAgICAgICAgICAubWFwKGMgPT4gYy5kZXNjcmlwdG9yLnByb3BlcnR5KTtcbiAgICAgICAgdGhpcy4jc2F2ZUxheW91dFByZWZlcmVuY2VzKGxheW91dFByZWZzLCB0cnVlKTtcbiAgICB9XG5cbiAgICBvbkNvbHVtblRvZ2dsZUFsbCgpIHtcbiAgICAgICAgY29uc3QgbGF5b3V0UHJlZnMgPSB0aGlzLmxheW91dFByZWZlcmVuY2VzKCk7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSBbLi4udGhpcy5jb2x1bW5zV2l0aFByZWZzKCldO1xuICAgICAgICBjb25zdCBpc1Zpc2libGUgPSAhdGhpcy5jb2x1bW5zV2l0aFByZWZzKCkuc29tZShjID0+IGMuaXNWaXNpYmxlKTtcbiAgICAgICAgZm9yIChjb25zdCBjb2wgb2YgY29sdW1ucykge1xuICAgICAgICAgICAgaWYgKGlzVmlzaWJsZSAhPT0gY29sLmlzVmlzaWJsZSkge1xuICAgICAgICAgICAgICAgIGNvbC5pc1Zpc2libGUgPSBpc1Zpc2libGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGF5b3V0UHJlZnMuY29sdW1uSGlkZGVuID0gY29sdW1ucy5maWx0ZXIoYyA9PiAhYy5pc1Zpc2libGUpLm1hcChjID0+IGMuZGVzY3JpcHRvci5wcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuI3NhdmVMYXlvdXRQcmVmZXJlbmNlcyhsYXlvdXRQcmVmcywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgb25Db2x1bW5SZW9yZGVyKGV2ZW50OiBUYWJsZUNvbHVtblJlb3JkZXJFdmVudCkge1xuICAgICAgICBpZiAoZXZlbnQuZHJvcEluZGV4ICE9PSB1bmRlZmluZWQgJiYgZXZlbnQuZHJvcEluZGV4ID49IDAgJiYgZXZlbnQuZHJhZ0luZGV4ICE9PSB1bmRlZmluZWQgJiYgZXZlbnQuZHJhZ0luZGV4ID49IDAgJiYgZXZlbnQuZHJvcEluZGV4ICE9PSBldmVudC5kcmFnSW5kZXgpIHtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50RHJvcEluZGV4ID0gZXZlbnQuZHJvcEluZGV4O1xuICAgICAgICAgICAgY29uc3QgZXZlbnREcmFnSW5kZXggPSBldmVudC5kcmFnSW5kZXg7XG4gICAgICAgICAgICBjb25zdCBwcmV2VmlzaWJsZUNvbHVtbnMgPSB0aGlzLmNvbHVtbnNXaXRoUHJlZnMoKS5maWx0ZXIoYyA9PiBjLmlzVmlzaWJsZSk7XG4gICAgICAgICAgICBjb25zdCBjb2xBdERyb3AgPSBwcmV2VmlzaWJsZUNvbHVtbnNbZXZlbnREcm9wSW5kZXhdO1xuICAgICAgICAgICAgY29uc3QgY29sQXREcmFnID0gcHJldlZpc2libGVDb2x1bW5zW2V2ZW50RHJhZ0luZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IGNvbEF0RHJvcEluZGV4ID0gdGhpcy5jb2x1bW5zV2l0aFByZWZzKCkuZmluZEluZGV4KGVsID0+IGVsLmlkID09PSBjb2xBdERyb3AuaWQpO1xuICAgICAgICAgICAgY29uc3QgY29sQXREcmFnSW5kZXggPSB0aGlzLmNvbHVtbnNXaXRoUHJlZnMoKS5maW5kSW5kZXgoZWwgPT4gZWwuaWQgPT09IGNvbEF0RHJhZy5pZCk7XG5cbiAgICAgICAgICAgIGlmIChjb2xBdERyb3BJbmRleCA+IC0xICYmIGNvbEF0RHJhZ0luZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICBsZXQgY29sdW1ucyA9IFsuLi50aGlzLmNvbHVtbnNXaXRoUHJlZnMoKV07XG4gICAgICAgICAgICAgICAgY29sdW1ucy5zcGxpY2UoY29sQXREcmFnSW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRyb3BJbmRleCA9IGNvbHVtbnMuZmluZEluZGV4KGVsID0+IGVsLmlkID09PSBjb2xBdERyb3AuaWQpICsgKGV2ZW50RHJvcEluZGV4ID4gZXZlbnREcmFnSW5kZXggPyAxIDogMCk7XG4gICAgICAgICAgICAgICAgY29sdW1ucyA9IFsuLi5jb2x1bW5zLnNsaWNlKDAsIGRyb3BJbmRleCksIGNvbEF0RHJhZywgLi4uY29sdW1ucy5zbGljZShkcm9wSW5kZXgpXTtcbiAgICAgICAgICAgICAgICBjb25zdCBsYXlvdXRQcmVmcyA9IHRoaXMubGF5b3V0UHJlZmVyZW5jZXMoKTtcbiAgICAgICAgICAgICAgICBsYXlvdXRQcmVmcy5jb2x1bW5PcmRlciA9IGNvbHVtbnMubWFwKGVsID0+IGVsLmRlc2NyaXB0b3IucHJvcGVydHkpO1xuICAgICAgICAgICAgICAgIHRoaXMuI3NhdmVMYXlvdXRQcmVmZXJlbmNlcyhsYXlvdXRQcmVmcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXNldCBjb2x1bW4gb3JkZXIgYW5kIGNvbHVtbiB2aXNpYmlsaXR5IHRvIGRlZmF1bHQgc2V0dGluZ3NcbiAgICAgKi9cbiAgICBjbGVhckxheW91dFByZWZlcmVuY2VzKCkge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmxvY2Fsc3RvcmFnZUtleSgpO1xuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICB0aGlzLiNzdG9yYWdlU2VydmljZS5yZW1vdmVJdGVtKFRhYmxlTWV0YWRhdGFTZXJ2aWNlLmNtcFR5cGVOYW1lLCBrZXkpO1xuICAgICAgICAgICAgdGhpcy4jbGF5b3V0UHJlZnNTYXZlQ250LnVwZGF0ZSh2ID0+IHYgKyAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICNzYXZlTGF5b3V0UHJlZmVyZW5jZXMobGF5b3V0UHJlZnM6IFRhYmxlTGF5b3V0UHJlZmVyZW5jZXMsIGZvcmNlVXBkYXRlID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5sb2NhbHN0b3JhZ2VLZXkoKTtcbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgdGhpcy4jc3RvcmFnZVNlcnZpY2Uuc2V0SXRlbShUYWJsZU1ldGFkYXRhU2VydmljZS5jbXBUeXBlTmFtZSwga2V5LCBsYXlvdXRQcmVmcyk7XG4gICAgICAgICAgICBpZiAoZm9yY2VVcGRhdGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNsYXlvdXRQcmVmc1NhdmVDbnQudXBkYXRlKHYgPT4gdiArIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgI2NvbXB1dGVDb2x1bW5zV2l0aExheW91dCgpIHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IHRoaXMuI21ldGFkYXRhLmRlc2NyaXB0b3IoKTtcbiAgICAgICAgY29uc3QgbGF5b3V0UHJlZnMgPSB0aGlzLmxheW91dFByZWZlcmVuY2VzKCk7XG5cbiAgICAgICAgLy8gaW5pdGlhbGl6ZSBjb2x1bW5zIHdpdGggYWRkaXRpb25hbCBwcm9wZXJ0aWVzXG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICBjb25zdCBjb2x1bW5zOiBDb2x1bW5XaXRoUHJlZmVyZW5jZXNbXSA9IGRlc2NyaXB0b3IuY29sdW1ucy5tYXAoY29sID0+ICh7XG4gICAgICAgICAgICBpZDogYCR7Y29sLnByb3BlcnR5fS0ke3RpbWVzdGFtcH1gLFxuICAgICAgICAgICAgZGVzY3JpcHRvcjogY29sLFxuICAgICAgICAgICAgZmlsdGVyOiB0aGlzLiNtZXRhZGF0YVxuICAgICAgICAgICAgICAgIC5maWx0ZXJzKClcbiAgICAgICAgICAgICAgICAuZmluZChcbiAgICAgICAgICAgICAgICAgICAgZiA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgZi5kZXNjcmlwdG9yLnNob3dPbkNvbHVtbiA9PT0gY29sLnByb3BlcnR5ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoKGYuZGVzY3JpcHRvci5kaXNwbGF5VHlwZSA9PSBudWxsICYmIHRoaXMuI21ldGFkYXRhLmRlZmF1bHRGaWx0ZXJEaXNwbGF5VHlwZSA9PT0gRmlsdGVyRGlzcGxheVR5cGVFbnVtLkNvbHVtbikgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLmRlc2NyaXB0b3IuZGlzcGxheVR5cGUgPT09IEZpbHRlckRpc3BsYXlUeXBlRW51bS5Db2x1bW4pXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHNvcnQ6IGRlc2NyaXB0b3Iuc29ydHMuZmluZChmID0+IGYuc2hvd09uQ29sdW1uID09PSBjb2wucHJvcGVydHkpLFxuICAgICAgICAgICAgZGlzYWJsZWQ6ICFjb2wuaXNUb2dnbGVhYmxlLFxuICAgICAgICAgICAgaXNWaXNpYmxlOiBsYXlvdXRQcmVmcy5jb2x1bW5IaWRkZW4gPyAhbGF5b3V0UHJlZnMuY29sdW1uSGlkZGVuLmluY2x1ZGVzKGNvbC5wcm9wZXJ0eSkgOiBjb2wuaXNWaXNpYmxlLFxuICAgICAgICAgICAgd2lkdGg6IGxheW91dFByZWZzLmNvbHVtbldpZHRocz8uW2NvbC5wcm9wZXJ0eV1cbiAgICAgICAgfSkpO1xuXG4gICAgICAgIGlmIChsYXlvdXRQcmVmcy5jb2x1bW5PcmRlcikge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsYXlvdXRQcmVmcy5jb2x1bW5PcmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbE5hbWUgPSBsYXlvdXRQcmVmcy5jb2x1bW5PcmRlcltpXTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2xXaXRoUHJlZnMgPSBjb2x1bW5zLmZpbmQoZWwgPT4gZWwuZGVzY3JpcHRvci5wcm9wZXJ0eSA9PT0gY29sTmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbFdpdGhQcmVmcykge1xuICAgICAgICAgICAgICAgICAgICBjb2xXaXRoUHJlZnMub3JkZXJJZHggPSBpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb2x1bW5zLnNvcnQoKGEsIGIpID0+IChhLm9yZGVySWR4ICE9PSB1bmRlZmluZWQgJiYgYi5vcmRlcklkeCAhPT0gdW5kZWZpbmVkID8gYS5vcmRlcklkeCAtIGIub3JkZXJJZHggOiAwKSk7XG4gICAgfVxufVxuIl19","import { Directive, inject } from '@angular/core';\nimport { Table } from 'primeng/table';\nimport * as i0 from \"@angular/core\";\nexport class TableRemovableSortDirective {\n #pTable = inject(Table);\n constructor() {\n this.#overrideSortMethod(this.#pTable);\n }\n #overrideSortMethod(pTable) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n pTable.sort = (event) => {\n const originalEvent = event.originalEvent;\n const metaKey = originalEvent.metaKey || originalEvent.ctrlKey;\n const sortMeta = pTable.getSortMeta(event.field);\n if (sortMeta) {\n if (!metaKey) {\n this.#updateSingleSortMeta(pTable, sortMeta, event.field);\n }\n else {\n this.#updateMultiSortMeta(pTable, sortMeta);\n }\n }\n else {\n this.#addNewSortMeta(pTable, metaKey, event.field);\n }\n this.#applySort(pTable);\n if (pTable.isStateful()) {\n pTable.saveState();\n }\n pTable.anchorRowIndex = null;\n };\n }\n #updateSingleSortMeta(pTable, sortMeta, field) {\n if (pTable.multiSortMeta && pTable.multiSortMeta.length > 1) {\n pTable.multiSortMeta = [{ field, order: pTable.defaultSortOrder }];\n }\n else if (sortMeta.order === -1) {\n pTable.multiSortMeta = [];\n }\n else {\n pTable.multiSortMeta = [{ field, order: sortMeta.order * -1 }];\n }\n }\n #updateMultiSortMeta(pTable, sortMeta) {\n pTable.multiSortMeta ??= [];\n for (let i = 0; i < pTable.multiSortMeta.length; i++) {\n if (pTable.multiSortMeta[i].field === sortMeta.field) {\n pTable.multiSortMeta.splice(i, 1);\n }\n }\n if (sortMeta.order === 1) {\n sortMeta.order = sortMeta.order * -1;\n pTable.multiSortMeta?.push(sortMeta);\n }\n }\n #addNewSortMeta(pTable, metaKey, field) {\n if (!metaKey || !pTable.multiSortMeta) {\n pTable.multiSortMeta = [];\n }\n pTable.multiSortMeta?.push({ field, order: pTable.defaultSortOrder });\n }\n #applySort(pTable) {\n if (pTable.multiSortMeta?.length === 0 && !pTable.lazy) {\n pTable.multiSortMeta = this.#defaultMultiSortMeta();\n }\n pTable.sortMultiple();\n }\n #defaultMultiSortMeta() {\n const multiSortMeta = this.#pTable.columns\n ?.filter(column => column.sort._defaultIsEnabled)\n .sort((a, b) => a.sort._defaultOrder - b.sort._defaultOrder)\n .map(column => ({ field: column.sort._property, order: column.sort._defaultIsAscending ? 1 : -1 }));\n if (!multiSortMeta || multiSortMeta.length === 0) {\n return [{ field: this.#pTable.columns?.[0].sort._property, order: 1 }];\n }\n return multiSortMeta;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TableRemovableSortDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.1.7\", type: TableRemovableSortDirective, isStandalone: true, selector: \"[mngRemovableSort]\", ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TableRemovableSortDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[mngRemovableSort]'\n }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtcmVtb3ZhYmxlLXNvcnQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGFibGUvc3JjL2NvbXBvbmVudHMvdGFibGUvdGFibGUtcmVtb3ZhYmxlLXNvcnQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBR2hELE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7O0FBS3BDLE1BQU0sT0FBTywyQkFBMkI7SUFDM0IsT0FBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVqQztRQUNJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELG1CQUFtQixDQUFDLE1BQWE7UUFDN0IsOERBQThEO1FBQzlELE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUN6QixNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDO1lBRTFDLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxPQUFPLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQztZQUMvRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUVqRCxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUNYLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDWCxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzlELENBQUM7cUJBQU0sQ0FBQztvQkFDSixJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUNoRCxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxDQUFDO2dC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QUM7YUFDaEQsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7YUFDM0QsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQztRQUN0RyxJQUFJLENBQUMsYUFBYSxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDL0MsT0FBTyxDQUFDLEVBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztRQUN6RSxDQUFDO1FBQ0QsT0FBTyxhQUFhLENBQUM7SUFDekIsQ0FBQzs4R0FoRlEsMkJBQTJCO2tHQUEzQiwyQkFBMkI7OzJGQUEzQiwyQkFBMkI7a0JBSHZDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLG9CQUFvQjtpQkFDakMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RpcmVjdGl2ZSwgaW5qZWN0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtTb3J0TWV0YX0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHtUYWJsZX0gZnJvbSAncHJpbWVuZy90YWJsZSc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW21uZ1JlbW92YWJsZVNvcnRdJ1xufSlcbmV4cG9ydCBjbGFzcyBUYWJsZVJlbW92YWJsZVNvcnREaXJlY3RpdmUge1xuICAgIHJlYWRvbmx5ICNwVGFibGUgPSBpbmplY3QoVGFibGUpO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuI292ZXJyaWRlU29ydE1ldGhvZCh0aGlzLiNwVGFibGUpO1xuICAgIH1cblxuICAgICNvdmVycmlkZVNvcnRNZXRob2QocFRhYmxlOiBUYWJsZSk6IHZvaWQge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICBwVGFibGUuc29ydCA9IChldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEV2ZW50ID0gZXZlbnQub3JpZ2luYWxFdmVudDtcblxuICAgICAgICAgICAgY29uc3QgbWV0YUtleSA9IG9yaWdpbmFsRXZlbnQubWV0YUtleSB8fCBvcmlnaW5hbEV2ZW50LmN0cmxLZXk7XG4gICAgICAgICAgICBjb25zdCBzb3J0TWV0YSA9IHBUYWJsZS5nZXRTb3J0TWV0YShldmVudC5maWVsZCk7XG5cbiAgICAgICAgICAgIGlmIChzb3J0TWV0YSkge1xuICAgICAgICAgICAgICAgIGlmICghbWV0YUtleSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiN1cGRhdGVTaW5nbGVTb3J0TWV0YShwVGFibGUsIHNvcnRNZXRhLCBldmVudC5maWVsZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jdXBkYXRlTXVsdGlTb3J0TWV0YShwVGFibGUsIHNvcnRNZXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuI2FkZE5ld1NvcnRNZXRhKHBUYWJsZSwgbWV0YUtleSwgZXZlbnQuZmllbGQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLiNhcHBseVNvcnQocFRhYmxlKTtcblxuICAgICAgICAgICAgaWYgKHBUYWJsZS5pc1N0YXRlZnVsKCkpIHtcbiAgICAgICAgICAgICAgICBwVGFibGUuc2F2ZVN0YXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwVGFibGUuYW5jaG9yUm93SW5kZXggPSBudWxsO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgICN1cGRhdGVTaW5nbGVTb3J0TWV0YShwVGFibGU6IFRhYmxlLCBzb3J0TWV0YTogU29ydE1ldGEsIGZpZWxkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKHBUYWJsZS5tdWx0aVNvcnRNZXRhICYmIHBUYWJsZS5tdWx0aVNvcnRNZXRhLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHBUYWJsZS5tdWx0aVNvcnRNZXRhID0gW3tmaWVsZCwgb3JkZXI6IHBUYWJsZS5kZWZhdWx0U29ydE9yZGVyfV07XG4gICAgICAgIH0gZWxzZSBpZiAoc29ydE1ldGEub3JkZXIgPT09IC0xKSB7XG4gICAgICAgICAgICBwVGFibGUubXVsdGlTb3J0TWV0YSA9IFtdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcFRhYmxlLm11bHRpU29ydE1ldGEgPSBbe2ZpZWxkLCBvcmRlcjogc29ydE1ldGEub3JkZXIgKiAtMX1dO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgI3VwZGF0ZU11bHRpU29ydE1ldGEocFRhYmxlOiBUYWJsZSwgc29ydE1ldGE6IFNvcnRNZXRhKTogdm9pZCB7XG4gICAgICAgIHBUYWJsZS5tdWx0aVNvcnRNZXRhID8/PSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwVGFibGUubXVsdGlTb3J0TWV0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHBUYWJsZS5tdWx0aVNvcnRNZXRhW2ldLmZpZWxkID09PSBzb3J0TWV0YS5maWVsZCkge1xuICAgICAgICAgICAgICAgIHBUYWJsZS5tdWx0aVNvcnRNZXRhLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc29ydE1ldGEub3JkZXIgPT09IDEpIHtcbiAgICAgICAgICAgIHNvcnRNZXRhLm9yZGVyID0gc29ydE1ldGEub3JkZXIgKiAtMTtcbiAgICAgICAgICAgIHBUYWJsZS5tdWx0aVNvcnRNZXRhPy5wdXNoKHNvcnRNZXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICNhZGROZXdTb3J0TWV0YShwVGFibGU6IFRhYmxlLCBtZXRhS2V5OiBib29sZWFuLCBmaWVsZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICghbWV0YUtleSB8fCAhcFRhYmxlLm11bHRpU29ydE1ldGEpIHtcbiAgICAgICAgICAgIHBUYWJsZS5tdWx0aVNvcnRNZXRhID0gW107XG4gICAgICAgIH1cbiAgICAgICAgcFRhYmxlLm11bHRpU29ydE1ldGE/LnB1c2goe2ZpZWxkLCBvcmRlcjogcFRhYmxlLmRlZmF1bHRTb3J0T3JkZXJ9KTtcbiAgICB9XG5cbiAgICAjYXBwbHlTb3J0KHBUYWJsZTogVGFibGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHBUYWJsZS5tdWx0aVNvcnRNZXRhPy5sZW5ndGggPT09IDAgJiYgIXBUYWJsZS5sYXp5KSB7XG4gICAgICAgICAgICBwVGFibGUubXVsdGlTb3J0TWV0YSA9IHRoaXMuI2RlZmF1bHRNdWx0aVNvcnRNZXRhKCk7XG4gICAgICAgIH1cbiAgICAgICAgcFRhYmxlLnNvcnRNdWx0aXBsZSgpO1xuICAgIH1cblxuICAgICNkZWZhdWx0TXVsdGlTb3J0TWV0YSgpOiBTb3J0TWV0YVtdIHtcbiAgICAgICAgY29uc3QgbXVsdGlTb3J0TWV0YTogU29ydE1ldGFbXSB8IHVuZGVmaW5lZCA9IHRoaXMuI3BUYWJsZS5jb2x1bW5zXG4gICAgICAgICAgICA/LmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnNvcnQuX2RlZmF1bHRJc0VuYWJsZWQpXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5zb3J0Ll9kZWZhdWx0T3JkZXIgLSBiLnNvcnQuX2RlZmF1bHRPcmRlcilcbiAgICAgICAgICAgIC5tYXAoY29sdW1uID0+ICh7ZmllbGQ6IGNvbHVtbi5zb3J0Ll9wcm9wZXJ0eSwgb3JkZXI6IGNvbHVtbi5zb3J0Ll9kZWZhdWx0SXNBc2NlbmRpbmcgPyAxIDogLTF9KSk7XG4gICAgICAgIGlmICghbXVsdGlTb3J0TWV0YSB8fCBtdWx0aVNvcnRNZXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFt7ZmllbGQ6IHRoaXMuI3BUYWJsZS5jb2x1bW5zPy5bMF0uc29ydC5fcHJvcGVydHksIG9yZGVyOiAxfV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG11bHRpU29ydE1ldGE7XG4gICAgfVxufVxuIl19","import { Directive, input } from '@angular/core';\nimport { TemplateDirective } from '@mediusinc/mng-commons/core';\nimport * as i0 from \"@angular/core\";\nexport class TableTemplateDirective extends TemplateDirective {\n constructor() {\n super(...arguments);\n this.name = input.required(...(ngDevMode ? [{ debugName: \"name\" }] : []));\n }\n // narrow the type of the context using the generic type of the directive.\n static ngTemplateContextGuard(dir, ctx) {\n return true;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TableTemplateDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.1.7\", type: TableTemplateDirective, isStandalone: true, selector: \"[mngTableTemplate]\", inputs: { name: { classPropertyName: \"name\", publicName: \"name\", isSignal: true, isRequired: true, transformFunction: null } }, usesInheritance: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TableTemplateDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[mngTableTemplate]'\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtdGVtcGxhdGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGFibGUvc3JjL2NvbXBvbmVudHMvdGFibGUvdGFibGUtdGVtcGxhdGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRS9DLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLDZCQUE2QixDQUFDOztBQWU5RCxNQUFNLE9BQU8sc0JBQXlELFNBQVEsaUJBQTBDO0lBSHhIOztRQUk2QixTQUFJLEdBQUcsS0FBSyxDQUFDLFFBQVEsK0NBQVEsQ0FBQztLQU0xRDtJQUpHLDBFQUEwRTtJQUMxRSxNQUFNLENBQUMsc0JBQXNCLENBQXdCLEdBQWlDLEVBQUUsR0FBUTtRQUM1RixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDOzhHQU5RLHNCQUFzQjtrR0FBdEIsc0JBQXNCOzsyRkFBdEIsc0JBQXNCO2tCQUhsQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxvQkFBb0I7aUJBQ2pDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEaXJlY3RpdmUsIGlucHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtUZW1wbGF0ZURpcmVjdGl2ZX0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9jb3JlJztcblxuaW1wb3J0IHtUYWJsZUNvbHVtblRlbXBsYXRlQ29udGV4dCwgVGFibGVSb3dUZW1wbGF0ZUNvbnRleHQsIFRhYmxlVGVtcGxhdGVDb250ZXh0fSBmcm9tICcuL3RhYmxlLXRlbXBsYXRlLm1vZGVsJztcblxudHlwZSBOYW1lVHlwZSA9ICdjb2x1bW5DdXN0b21MYXN0JyB8ICdmb290ZXInIHwgJ3Jvd0V4cGFuZENvbnRlbnQnIHwgJ2NvbHVtbkhlYWRlcicgfCAnaGVhZGVyVGl0bGVSb3dSaWdodCcgfCAnaGVhZGVyVGl0bGUnIHwgJ2hlYWRlcic7XG5cbnR5cGUgQ29udGV4dFR5cGU8TmFtZSBleHRlbmRzIE5hbWVUeXBlPiA9IE5hbWUgZXh0ZW5kcyAnY29sdW1uQ3VzdG9tTGFzdCcgfCAncm93RXhwYW5kQ29udGVudCdcbiAgICA/IFRhYmxlUm93VGVtcGxhdGVDb250ZXh0XG4gICAgOiBOYW1lIGV4dGVuZHMgJ2NvbHVtbkhlYWRlcidcbiAgICAgID8gVGFibGVDb2x1bW5UZW1wbGF0ZUNvbnRleHRcbiAgICAgIDogVGFibGVUZW1wbGF0ZUNvbnRleHQ7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW21uZ1RhYmxlVGVtcGxhdGVdJ1xufSlcbmV4cG9ydCBjbGFzcyBUYWJsZVRlbXBsYXRlRGlyZWN0aXZlPE5hbWUgZXh0ZW5kcyBOYW1lVHlwZSA9IE5hbWVUeXBlPiBleHRlbmRzIFRlbXBsYXRlRGlyZWN0aXZlPE5hbWUsIENvbnRleHRUeXBlPE5hbWU+PiB7XG4gICAgcHVibGljIG92ZXJyaWRlIHJlYWRvbmx5IG5hbWUgPSBpbnB1dC5yZXF1aXJlZDxOYW1lPigpO1xuXG4gICAgLy8gbmFycm93IHRoZSB0eXBlIG9mIHRoZSBjb250ZXh0IHVzaW5nIHRoZSBnZW5lcmljIHR5cGUgb2YgdGhlIGRpcmVjdGl2ZS5cbiAgICBzdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZDxOYW1lIGV4dGVuZHMgTmFtZVR5cGU+KGRpcjogVGFibGVUZW1wbGF0ZURpcmVjdGl2ZTxOYW1lPiwgY3R4OiBhbnkpOiBjdHggaXMgQ29udGV4dFR5cGU8TmFtZT4ge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG4iXX0=","import { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation, afterNextRender, booleanAttribute, computed, contentChildren, inject, input, output, signal, viewChild } from '@angular/core';\nimport { outputFromObservable, takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, NavigationCancel, NavigationEnd, NavigationError, NavigationStart, Router } from '@angular/router';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { MessageService } from 'primeng/api';\nimport { ButtonDirective } from 'primeng/button';\nimport { Skeleton } from 'primeng/skeleton';\nimport { Table, TableModule } from 'primeng/table';\nimport { NEVER, Subject, filter, of, switchMap } from 'rxjs';\nimport { ClassMapPipe, ComponentDirective, I18nPropertyPipe, LoggerService, booleanOrUndefinedAttribute, dataListParamsToUrlQuery, effectWithDeps, findTemplateByName, fromSubscribeError, fromTableLoadToDataListParams, fromUrlQueryToDataListParams, getErrorLogLevel, mergeDataListParamsWithDefaults } from '@mediusinc/mng-commons/core';\nimport { FilterDisplayTypeEnum, FilterTypeEnum } from '@mediusinc/mng-commons/filter';\nimport { TablePaginationModeEnum, TableSizeEnum } from '@mediusinc/mng-commons/table/api';\nimport { isFilterValueBlank } from '../../helpers/filters';\nimport { tableNotificationError } from '../../helpers/notification';\nimport { LocaleDefaultRowClassPipe } from '../../pipes/locale-default-row-class.pipe';\nimport { TableFilterClassPipe } from '../../pipes/table-filter-class.pipe';\nimport { TableDataService } from '../../services/table-data.service';\nimport { TableMetadataService } from '../../services/table-metadata.service';\nimport { TablePreferencesService } from '../../services/table-preferences.service';\nimport { TableColumnValueComponent } from '../column-value/column-value.component';\nimport { TableHeaderWithFiltersTemplateDirective } from '../filter/header-with-filters/header-with-filters-template.directive';\nimport { TableHeaderWithFiltersComponent } from '../filter/header-with-filters/header-with-filters.component';\nimport { TableRemovableSortDirective } from './table-removable-sort.directive';\nimport { TableTemplateDirective } from './table-template.directive';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"primeng/table\";\nexport class TableComponent {\n #primeTableEffect;\n // templates\n #templatesMerged;\n // subscriptions and refs\n #previousDataProvider;\n #dataProviderEagerFirstLoad;\n #dataProviderReloadSubscription;\n #routeQueryParamsSubscription;\n #routerEventsSubscription;\n #afterNextRenderRef;\n constructor() {\n this.filterKeyPrepend = 'f_';\n this.FilterTypeEnum = FilterTypeEnum;\n this.logger = inject(LoggerService).create(TableMetadataService.cmpTypeName);\n this.router = inject(Router);\n this.route = inject(ActivatedRoute);\n this.translate = inject(TranslateService);\n this.messageService = inject(MessageService);\n this.metadata = inject(TableMetadataService);\n this.prefs = inject(TablePreferencesService);\n this.data = inject((TableDataService));\n // descriptor\n this.descriptorInput = input.required(...(ngDevMode ? [{ debugName: \"descriptorInput\", alias: 'descriptor' }] : [{ alias: 'descriptor' }]));\n // data source inputs\n this.items = input(...(ngDevMode ? [undefined, { debugName: \"items\" }] : []));\n this.result = input(...(ngDevMode ? [undefined, { debugName: \"result\" }] : []));\n this.loadingInput = input(undefined, ...(ngDevMode ? [{ debugName: \"loadingInput\", alias: 'loading', transform: booleanOrUndefinedAttribute }] : [{ alias: 'loading', transform: booleanOrUndefinedAttribute }]));\n this.dataProvider = input(...(ngDevMode ? [undefined, { debugName: \"dataProvider\" }] : []));\n // extra features input\n this.useQueryParams = input(false, ...(ngDevMode ? [{ debugName: \"useQueryParams\", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));\n this.cellClickEnabled = input(true, ...(ngDevMode ? [{ debugName: \"cellClickEnabled\", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));\n this.selectionMode = input('multiple', ...(ngDevMode ? [{ debugName: \"selectionMode\" }] : []));\n this.selectionEnabled = input(false, ...(ngDevMode ? [{ debugName: \"selectionEnabled\", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));\n this.rowReorderEnabledInput = input(true, ...(ngDevMode ? [{ debugName: \"rowReorderEnabledInput\", alias: 'rowReorderEnabled', transform: booleanAttribute }] : [{ alias: 'rowReorderEnabled', transform: booleanAttribute }]));\n this.rowReorderEnabled = computed(() => this.rowReorderEnabledInput() && this.metadata.descriptor().rowReorderable, ...(ngDevMode ? [{ debugName: \"rowReorderEnabled\" }] : []));\n this.expandedRowKeys = computed(() => {\n const descriptor = this.metadata.descriptor();\n if (typeof descriptor.isRowExpanded === 'string') {\n return this.data.data()?.reduce((acc, item) => {\n acc[item[descriptor.trackProperty]] = !!item[descriptor.isRowExpanded];\n return acc;\n }, {});\n }\n else if (typeof descriptor.isRowExpanded === 'function') {\n return this.data.data()?.reduce((acc, item) => {\n acc[item[descriptor.trackProperty]] = descriptor.isRowExpanded(item);\n return acc;\n }, {});\n }\n return {};\n }, ...(ngDevMode ? [{ debugName: \"expandedRowKeys\" }] : []));\n // styling\n this.columnLastMinWidth = input(...(ngDevMode ? [undefined, { debugName: \"columnLastMinWidth\" }] : []));\n this.columnsColspan = computed(() => this.visibleColumns().length + (this.hasLastColumn() ? 1 : 0) + (this.selectionEnabled() ? 1 : 0) + (this.rowReorderEnabled() ? 1 : 0), ...(ngDevMode ? [{ debugName: \"columnsColspan\" }] : []));\n this.hasTitleDisplay = computed(() => this.headerTitleTemplate() || this.metadata.descriptor().title, ...(ngDevMode ? [{ debugName: \"hasTitleDisplay\" }] : []));\n this.isCaptionVisible = computed(() => this.headerTemplate() || this.hasTitleDisplay() || this.tableHeaderFilters().length > 0 || this.metadata.descriptor().search, ...(ngDevMode ? [{ debugName: \"isCaptionVisible\" }] : []));\n // component inputs\n this.globalFilterFieldsInput = input(undefined, ...(ngDevMode ? [{ debugName: \"globalFilterFieldsInput\", alias: 'globalFilterFields' }] : [{ alias: 'globalFilterFields' }]));\n // cell click\n this.cellClickSubject = new Subject();\n this.isCellClickObserved = signal(this.cellClickSubject.observed, ...(ngDevMode ? [{ debugName: \"isCellClickObserved\" }] : []));\n this.isCellClickEnabled = computed(() => this.cellClickEnabled() && this.isCellClickObserved(), ...(ngDevMode ? [{ debugName: \"isCellClickEnabled\" }] : []));\n // event outputs\n this.tableLoad = output();\n this.cellClick = outputFromObservable(this.cellClickSubject);\n this.selectionChange = output();\n this.rowReorder = output();\n // content and view queries\n this.templates = input([], ...(ngDevMode ? [{ debugName: \"templates\" }] : []));\n this.contentTemplates = contentChildren(TableTemplateDirective, ...(ngDevMode ? [{ debugName: \"contentTemplates\" }] : []));\n this.primeTable = viewChild((Table), ...(ngDevMode ? [{ debugName: \"primeTable\" }] : []));\n this.#primeTableEffect = effectWithDeps([this.primeTable], ([table]) => this.data.setPrimeTable(table));\n // templates\n this.#templatesMerged = computed(() => [...this.contentTemplates(), ...this.templates()], ...(ngDevMode ? [{ debugName: \"#templatesMerged\" }] : []));\n this.headerTemplate = computed(() => findTemplateByName([...this.#templatesMerged()], 'header'), ...(ngDevMode ? [{ debugName: \"headerTemplate\" }] : []));\n this.headerTitleTemplate = computed(() => findTemplateByName([...this.#templatesMerged()], 'headerTitle'), ...(ngDevMode ? [{ debugName: \"headerTitleTemplate\" }] : []));\n this.titleRowRightTemplate = computed(() => findTemplateByName([...this.#templatesMerged()], 'headerTitleRowRight'), ...(ngDevMode ? [{ debugName: \"titleRowRightTemplate\" }] : []));\n this.columnCustomLastTemplate = computed(() => findTemplateByName([...this.#templatesMerged()], 'columnCustomLast'), ...(ngDevMode ? [{ debugName: \"columnCustomLastTemplate\" }] : []));\n this.footerTemplate = computed(() => findTemplateByName([...this.#templatesMerged()], 'footer'), ...(ngDevMode ? [{ debugName: \"footerTemplate\" }] : []));\n this.rowExpandTemplate = computed(() => findTemplateByName([...this.#templatesMerged()], 'rowExpandContent'), ...(ngDevMode ? [{ debugName: \"rowExpandTemplate\" }] : []));\n this.columnHeaderTemplate = computed(() => findTemplateByName([...this.#templatesMerged()], 'columnHeader'), ...(ngDevMode ? [{ debugName: \"columnHeaderTemplate\" }] : []));\n // data provider and items\n this.isLazy = computed(() => this.dataProvider()?.isLazy === true, ...(ngDevMode ? [{ debugName: \"isLazy\" }] : []));\n this.isPagination = computed(() => this.data.paginationMode() === TablePaginationModeEnum.Pagination, ...(ngDevMode ? [{ debugName: \"isPagination\" }] : []));\n // visual\n this.className = computed(() => {\n let className = this.metadata.descriptor().className ?? '';\n switch (this.metadata.descriptor().size) {\n case TableSizeEnum.Small:\n className += ' p-datatable-sm';\n break;\n case undefined:\n case TableSizeEnum.Large:\n className += ' p-datatable-lg';\n break;\n }\n if (this.metadata.descriptor().hasGridlines) {\n className += ' p-datatable-gridlines';\n }\n return className;\n }, ...(ngDevMode ? [{ debugName: \"className\" }] : []));\n // columns\n this.visibleColumns = computed(() => this.prefs.columnsWithPrefs().filter(col => col.isVisible), ...(ngDevMode ? [{ debugName: \"visibleColumns\" }] : []));\n this.areColumnsReorderable = computed(() => this.prefs.columnsWithPrefs().some(col => col.descriptor.isReorderable), ...(ngDevMode ? [{ debugName: \"areColumnsReorderable\" }] : []));\n this.areColumnsToggleable = computed(() => this.prefs.columnsWithPrefs().some(col => col.descriptor.isToggleable), ...(ngDevMode ? [{ debugName: \"areColumnsToggleable\" }] : []));\n // filter, sort\n this.hasColumnFilters = computed(() => (this.metadata.defaultFilterDisplayType === FilterDisplayTypeEnum.OverlayWithTag &&\n this.metadata.filterDescriptors().some(d => d.displayType === FilterDisplayTypeEnum.Column)) ||\n (this.metadata.defaultFilterDisplayType === FilterDisplayTypeEnum.Column && this.metadata.filterDescriptors().some(d => d.displayType == null)), ...(ngDevMode ? [{ debugName: \"hasColumnFilters\" }] : []));\n this.tableHeaderFilters = computed(() => {\n // statically defined filters AND generic filters\n const filters = this.metadata\n .filters()\n .filter(d => (d.descriptor.displayType == null &&\n [FilterDisplayTypeEnum.OverlayWithTag, FilterDisplayTypeEnum.DirectInput].includes(this.metadata.defaultFilterDisplayType)) ||\n (d.descriptor.displayType != null && [FilterDisplayTypeEnum.OverlayWithTag, FilterDisplayTypeEnum.DirectInput].includes(d.descriptor.displayType)));\n return filters.concat(this.metadata.genericFilters());\n }, ...(ngDevMode ? [{ debugName: \"tableHeaderFilters\" }] : []));\n this.requiredFiltersMissing = computed(() => {\n const paramsWithDefaults = this.data.params() ?? this.metadata.defaultParams();\n const requiredFilters = this.metadata\n .filters()\n .filter(f => f.descriptor.isRequired)\n .map(f => f.descriptor.property);\n return requiredFilters.some(filterProperty => {\n const filter = paramsWithDefaults.filters?.[filterProperty];\n return (filter === undefined ||\n filter.matchMode === undefined ||\n (!['exists', 'doesNotExist'].includes(filter.matchMode) && isFilterValueBlank(filter.value)));\n });\n }, ...(ngDevMode ? [{ debugName: \"requiredFiltersMissing\" }] : []));\n this.hasLastColumn = computed(() => this.columnCustomLastTemplate() || this.areColumnsToggleable() || this.areColumnsReorderable(), ...(ngDevMode ? [{ debugName: \"hasLastColumn\" }] : []));\n // other\n this.navigationOutOfTableInProgress = false;\n this.navigationInTableInProgress = false;\n this.#dataProviderEagerFirstLoad = effectWithDeps([this.dataProvider], ([dataProvider]) => {\n if (dataProvider?.isLazy === false) {\n this.loadTableWithDataProvider(this.metadata.defaultParams());\n }\n else if (this.#previousDataProvider && dataProvider) {\n this.reload();\n }\n this.#previousDataProvider = dataProvider;\n });\n this.#dataProviderReloadSubscription = toObservable(this.dataProvider)\n .pipe(switchMap(dp => dp?.tableReload$ ?? of({})), takeUntilDestroyed())\n .subscribe({\n next: e => {\n this.reload(e);\n }\n });\n this.#routeQueryParamsSubscription = toObservable(this.useQueryParams)\n .pipe(switchMap(useQp => (useQp ? this.route.queryParams : NEVER)), takeUntilDestroyed())\n .subscribe(qp => {\n this.loadTableFromRouteUpdate(qp);\n });\n this.#routerEventsSubscription = toObservable(this.useQueryParams)\n .pipe(switchMap(useQp => (useQp ? this.router.events : NEVER)), filter(e => (e instanceof NavigationStart && e.url.split('?')[0].split('#')[0] !== this.router.url.split('?')[0].split('#')[0]) ||\n e instanceof NavigationEnd ||\n e instanceof NavigationCancel ||\n e instanceof NavigationError), takeUntilDestroyed())\n .subscribe(e => {\n this.navigationOutOfTableInProgress = e instanceof NavigationStart;\n });\n this.#afterNextRenderRef = afterNextRender(() => {\n this.isCellClickObserved.set(this.cellClickSubject.observed);\n });\n this.metadata.setSignalSources(this.descriptorInput, this.globalFilterFieldsInput);\n this.data.setDataSources(this.items, this.result, this.dataProvider, this.loadingInput);\n }\n reload(emitEvent) {\n const params = emitEvent?.params ? emitEvent?.params : emitEvent?.resetParams ? undefined : this.lastParamsWithDefaults;\n const reloadParams = mergeDataListParamsWithDefaults(params ?? {}, this.metadata.defaultParams());\n this.loadTableWithDataProvider(reloadParams, emitEvent?.emitEvent ?? false);\n }\n onTableLazyLoad(event) {\n this.lastLazyLoadEvent = event;\n const params = fromTableLoadToDataListParams(event);\n if (this.useQueryParams()) {\n if (!this.navigationOutOfTableInProgress && !this.navigationInTableInProgress) {\n // this check is necessary: from some reason, primeNG commits one last lazy load event whenever any angular router navigation occurs\n this.navigationInTableInProgress = true;\n const newParams = dataListParamsToUrlQuery(params, this.metadata.defaultParams(), { prependFilterName: this.filterKeyPrepend, skipPresetDefaultsLimit: true });\n const newParamsWithParamsToRemove = { ...newParams };\n const currentQp = this.route.snapshot.queryParams;\n if (currentQp) {\n Object.keys(currentQp)\n .filter(k => (k.startsWith(this.filterKeyPrepend) || ['offset', 'limit', 'sort', 'q'].indexOf(k) >= 0) && newParams[k] === undefined)\n .forEach(k => (newParamsWithParamsToRemove[k] = null));\n }\n this.router\n .navigate([], {\n relativeTo: this.route,\n replaceUrl: true,\n queryParams: newParamsWithParamsToRemove,\n queryParamsHandling: 'merge'\n })\n .then(() => {\n this.navigationInTableInProgress = false;\n });\n }\n }\n else {\n const paramsWithDefaults = mergeDataListParamsWithDefaults(params, this.metadata.defaultParams());\n this.data.setParams(paramsWithDefaults);\n this.loadTableWithDataProvider(paramsWithDefaults);\n }\n }\n onTableFilter(event) {\n if (this.useQueryParams()) {\n return;\n }\n const params = fromTableLoadToDataListParams({ filters: event.filters });\n const paramsWithDefaults = mergeDataListParamsWithDefaults(params, this.metadata.defaultParams());\n // if table doesn't use lazy loading, filter params need to be set here\n // because the onTableLazyLoad event is not emitted\n if (!this.isLazy()) {\n this.data.setParams(paramsWithDefaults);\n }\n }\n onCellClick(event, col, item, idx) {\n if (!this.isCellClickEnabled()) {\n return;\n }\n const tableEvent = {\n column: col,\n rowItem: item,\n rowIndex: idx,\n event: event\n };\n this.cellClickSubject.next(tableEvent);\n }\n onSelectionChange(event) {\n this.data.selectedItems.set(event);\n this.selectionChange.emit(event);\n }\n onRowReorder(event) {\n this.rowReorder.emit(event);\n }\n loadTableWithDataProvider(paramsWithDefaults, emitEvent = true) {\n if (this.requiredFiltersMissing() && this.isLazy()) {\n return;\n }\n const isFetched = this.data.fetchWithDataProvider(paramsWithDefaults, error => {\n tableNotificationError(this.translate, this.messageService, this.metadata.descriptor(), error);\n const commonsError = fromSubscribeError(error, 'TableComponentError', {\n params: paramsWithDefaults\n });\n this.logger.log(commonsError, getErrorLogLevel(commonsError));\n });\n if (isFetched) {\n this.lastParamsWithDefaults = paramsWithDefaults;\n if (emitEvent) {\n const tableEvent = {\n originalEvent: this.lastLazyLoadEvent,\n params: paramsWithDefaults\n };\n this.tableLoad.emit(tableEvent);\n }\n }\n }\n loadTableFromRouteUpdate(urlParams) {\n const paramsWithDefaults = mergeDataListParamsWithDefaults(fromUrlQueryToDataListParams(urlParams, {\n prependFilterName: this.filterKeyPrepend,\n searchAsGlobal: true\n }), this.metadata.defaultParams());\n this.data.setParams(paramsWithDefaults, true);\n this.loadTableWithDataProvider(paramsWithDefaults);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.7\", type: TableComponent, isStandalone: true, selector: \"mng-table\", inputs: { descriptorInput: { classPropertyName: \"descriptorInput\", publicName: \"descriptor\", isSignal: true, isRequired: true, transformFunction: null }, items: { classPropertyName: \"items\", publicName: \"items\", isSignal: true, isRequired: false, transformFunction: null }, result: { classPropertyName: \"result\", publicName: \"result\", isSignal: true, isRequired: false, transformFunction: null }, loadingInput: { classPropertyName: \"loadingInput\", publicName: \"loading\", isSignal: true, isRequired: false, transformFunction: null }, dataProvider: { classPropertyName: \"dataProvider\", publicName: \"dataProvider\", isSignal: true, isRequired: false, transformFunction: null }, useQueryParams: { classPropertyName: \"useQueryParams\", publicName: \"useQueryParams\", isSignal: true, isRequired: false, transformFunction: null }, cellClickEnabled: { classPropertyName: \"cellClickEnabled\", publicName: \"cellClickEnabled\", isSignal: true, isRequired: false, transformFunction: null }, selectionMode: { classPropertyName: \"selectionMode\", publicName: \"selectionMode\", isSignal: true, isRequired: false, transformFunction: null }, selectionEnabled: { classPropertyName: \"selectionEnabled\", publicName: \"selectionEnabled\", isSignal: true, isRequired: false, transformFunction: null }, rowReorderEnabledInput: { classPropertyName: \"rowReorderEnabledInput\", publicName: \"rowReorderEnabled\", isSignal: true, isRequired: false, transformFunction: null }, columnLastMinWidth: { classPropertyName: \"columnLastMinWidth\", publicName: \"columnLastMinWidth\", isSignal: true, isRequired: false, transformFunction: null }, globalFilterFieldsInput: { classPropertyName: \"globalFilterFieldsInput\", publicName: \"globalFilterFields\", isSignal: true, isRequired: false, transformFunction: null }, templates: { classPropertyName: \"templates\", publicName: \"templates\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { tableLoad: \"tableLoad\", cellClick: \"cellClick\", selectionChange: \"selectionChange\", rowReorder: \"rowReorder\" }, host: { properties: { \"class.mng-table-no-header\": \"!isCaptionVisible()\" } }, providers: [TableMetadataService, TableDataService, TablePreferencesService], queries: [{ propertyName: \"contentTemplates\", predicate: TableTemplateDirective, isSignal: true }], viewQueries: [{ propertyName: \"primeTable\", first: true, predicate: (Table), descendants: true, isSignal: true }], ngImport: i0, template: \"<div>\\n <!-- MUST NOT use observable for value when using virtual scroll - does not work for some reason -->\\n @if (data.isAllPaginationMetaInitialized()) {\\n <p-table\\n [value]=\\\"requiredFiltersMissing() ? [] : data.data()\\\"\\n [dataKey]=\\\"metadata.descriptor().trackProperty\\\"\\n [lazy]=\\\"isLazy()\\\"\\n [loading]=\\\"data.loading()\\\"\\n [paginator]=\\\"isPagination()\\\"\\n [rows]=\\\"data.rows()\\\"\\n [first]=\\\"data.offset()\\\"\\n [totalRecords]=\\\"data.count()\\\"\\n [rowsPerPageOptions]=\\\"metadata.rowsPerPageOptions()\\\"\\n [showCurrentPageReport]=\\\"true\\\"\\n [currentPageReportTemplate]=\\\"'mngTable.paginationMsg' | translate\\\"\\n [multiSortMeta]=\\\"data.sortMeta()\\\"\\n [filters]=\\\"data.filterStates()\\\"\\n [globalFilterFields]=\\\"metadata.searchFields()\\\"\\n sortMode=\\\"multiple\\\"\\n [selection]=\\\"[]\\\"\\n (selectionChange)=\\\"onSelectionChange($event)\\\"\\n [selectionMode]=\\\"selectionEnabled() ? selectionMode() : null\\\"\\n [scrollable]=\\\"true\\\"\\n scrollHeight=\\\"flex\\\"\\n [rowHover]=\\\"metadata.descriptor().hasHover\\\"\\n [styleClass]=\\\"className()\\\"\\n [resizableColumns]=\\\"metadata.descriptor().hasResizableColumns\\\"\\n [columnResizeMode]=\\\"metadata.descriptor().columnResizeMode ?? 'expand'\\\"\\n [reorderableColumns]=\\\"areColumnsReorderable()\\\"\\n paginatorDropdownAppendTo=\\\"body\\\"\\n [columns]=\\\"visibleColumns()\\\"\\n [expandedRowKeys]=\\\"expandedRowKeys()\\\"\\n (onColResize)=\\\"prefs.onColumnResize($event)\\\"\\n (onColReorder)=\\\"prefs.onColumnReorder($event)\\\"\\n (onLazyLoad)=\\\"onTableLazyLoad($event)\\\"\\n (onFilter)=\\\"onTableFilter($event)\\\"\\n (onRowReorder)=\\\"onRowReorder($event)\\\"\\n mngRemovableSort>\\n <ng-template #caption>\\n @if (isCaptionVisible()) {\\n <div class=\\\"table-header\\\">\\n @if (headerTemplate()) {\\n <ng-container *ngTemplateOutlet=\\\"headerTemplate(); context: {data: data.data(), totalCount: data.count(), table: this}\\\"></ng-container>\\n } @else {\\n <mng-table-header-with-filters\\n [title]=\\\"metadata.descriptor().title\\\"\\n [metadata]=\\\"tableHeaderFilters()\\\"\\n [genericFilterDescriptor]=\\\"metadata.genericFilterDescriptor()\\\"\\n [model]=\\\"metadata.descriptor().model\\\"\\n [enableSearch]=\\\"metadata.descriptor().search\\\"\\n [search]=\\\"data.searchMeta()\\\"\\n [searchLimitWordMax]=\\\"metadata.descriptor().searchLimitMaxWords\\\"\\n [enableCaseSensitive]=\\\"isLazy()\\\">\\n @if (hasTitleDisplay()) {\\n <ng-template mngTableHeaderWithFiltersTemplate name=\\\"title\\\">\\n @if (headerTitleTemplate()) {\\n <ng-container\\n *ngTemplateOutlet=\\\"headerTitleTemplate(); context: {data: data.data(), totalCount: data.count(), table: this}\\\"></ng-container>\\n } @else if (metadata.descriptor().title) {\\n <h5 class=\\\"p-0 m-0\\\">{{ metadata.descriptor().title! | translate }}</h5>\\n }\\n </ng-template>\\n }\\n @if (titleRowRightTemplate()) {\\n <ng-template mngTableHeaderWithFiltersTemplate name=\\\"titleRowRight\\\">\\n <ng-container *ngTemplateOutlet=\\\"titleRowRightTemplate()\\\"></ng-container>\\n </ng-template>\\n }\\n </mng-table-header-with-filters>\\n }\\n </div>\\n }\\n </ng-template>\\n <ng-template #header>\\n @if (!metadata.descriptor().hideHeader) {\\n <tr class=\\\"mng-table-header\\\" [class]=\\\"metadata.descriptor().headerClassName\\\">\\n @if (selectionEnabled()) {\\n @if (selectionMode() === 'multiple') {\\n <th style=\\\"min-width: 36px\\\" pFrozenColumn [frozen]=\\\"metadata.descriptor().selectionColumnFrozen ?? true\\\">\\n <p-tableHeaderCheckbox />\\n </th>\\n } @else {\\n <!-- We need the line below, because otherwise p-tableRadioButton shifts the rest of the columns in table -->\\n <th style=\\\"min-width: 36px\\\" pFrozenColumn [frozen]=\\\"metadata.descriptor().selectionColumnFrozen ?? true\\\"></th>\\n }\\n }\\n @if (metadata.descriptor().rowExpandable) {\\n <th scope=\\\"col\\\" pFrozenColumn [frozen]=\\\"true\\\"></th>\\n }\\n @if (rowReorderEnabled()) {\\n <th scope=\\\"col\\\"></th>\\n }\\n @for (col of visibleColumns(); track col.id) {\\n <ng-template #sortableColumnTHTemplate>\\n @if (columnHeaderTemplate()) {\\n <ng-container\\n *ngTemplateOutlet=\\\"\\n columnHeaderTemplate();\\n context: {data: data.data(), totalCount: data.count(), property: col.descriptor.property, table: this}\\n \\\"></ng-container>\\n } @else {\\n <div class=\\\"flex justify-between items-center\\\">\\n {{\\n (col.descriptor.title && !col.descriptor.titleUseModelBase\\n ? col.descriptor.title\\n : (col.descriptor.title ?? col.descriptor.property | mngI18nProperty: metadata.descriptor().model)\\n ) | translate\\n }}\\n <p-sortIcon [field]=\\\"col.sort?.property\\\" class=\\\"flex\\\"></p-sortIcon>\\n </div>\\n }\\n </ng-template>\\n <ng-template #nonSortableColumnTHTemplate>\\n @if (columnHeaderTemplate()) {\\n <ng-container\\n *ngTemplateOutlet=\\\"\\n columnHeaderTemplate();\\n context: {data: data.data(), totalCount: data.count(), property: col.descriptor.property, table: this}\\n \\\"></ng-container>\\n } @else {\\n {{\\n (col.descriptor.title && !col.descriptor.titleUseModelBase\\n ? col.descriptor.title\\n : (col.descriptor.title ?? col.descriptor.property | mngI18nProperty: metadata.descriptor().model)\\n ) | translate\\n }}\\n }\\n </ng-template>\\n @if (col.descriptor.isReorderable) {\\n <th\\n pResizableColumn\\n pReorderableColumn\\n [id]=\\\"col.descriptor.property\\\"\\n [pSortableColumn]=\\\"col.sort?.property\\\"\\n [pSortableColumnDisabled]=\\\"!col.sort\\\"\\n [style.width]=\\\"col.width ? col.width + 'px' : col.descriptor.width + '%'\\\"\\n [style.min-width.px]=\\\"col.width ? null : col.descriptor.minWidth\\\"\\n [style.max-width.px]=\\\"col.width ?? col.descriptor.maxWidth\\\"\\n [class]=\\\"col.descriptor.headerClassName | mngTableFilterClass: col.filter?.descriptor : hasColumnFilters() && !col.width\\\">\\n <ng-container *ngTemplateOutlet=\\\"col.sort ? sortableColumnTHTemplate : nonSortableColumnTHTemplate\\\"></ng-container>\\n </th>\\n } @else {\\n <th\\n pResizableColumn\\n [id]=\\\"col.descriptor.property\\\"\\n [pSortableColumn]=\\\"col.sort?.property\\\"\\n [pSortableColumnDisabled]=\\\"!col.sort\\\"\\n [style.width]=\\\"col.width ? col.width + 'px' : col.descriptor.width + '%'\\\"\\n [style.min-width.px]=\\\"col.width ? null : col.descriptor.minWidth\\\"\\n [style.max-width.px]=\\\"col.width ?? col.descriptor.maxWidth\\\"\\n [class]=\\\"col.descriptor.headerClassName | mngTableFilterClass: col.filter?.descriptor : hasColumnFilters() && !col.width\\\">\\n <ng-container *ngTemplateOutlet=\\\"col.sort ? sortableColumnTHTemplate : nonSortableColumnTHTemplate\\\"></ng-container>\\n </th>\\n }\\n }\\n @if (hasLastColumn()) {\\n <th\\n [style.min-width.px]=\\\"columnLastMinWidth()\\\"\\n pFrozenColumn\\n [frozen]=\\\"metadata.descriptor().actionColumnFrozen ?? areColumnsToggleable()\\\"\\n alignFrozen=\\\"right\\\"\\n class=\\\"mng-table-column-custom-last text-right!\\\">\\n @if (areColumnsToggleable()) {\\n @defer (on idle) {\\n <mng-table-column-toggle [columns]=\\\"visibleColumns()\\\" />\\n }\\n }\\n </th>\\n }\\n </tr>\\n }\\n @if (hasColumnFilters()) {\\n <tr class=\\\"mng-column-filter-row\\\">\\n <!-- We need the line below, because otherwise p-tableRadioButton shifts the rest of the columns in table -->\\n @if (selectionEnabled()) {\\n <th style=\\\"min-width: 36px\\\" pFrozenColumn [frozen]=\\\"metadata.descriptor().selectionColumnFrozen ?? true\\\"></th>\\n }\\n @if (rowReorderEnabled()) {\\n <th scope=\\\"col\\\"></th>\\n }\\n @if (metadata.descriptor().rowExpandable) {\\n <th scope=\\\"col\\\"></th>\\n }\\n @for (col of visibleColumns(); track col.id) {\\n <th\\n [class]=\\\"'px-1! ' + col.filter?.descriptor?.columnClassName | mngTableFilterClass: col.filter?.descriptor : hasColumnFilters() && !col.width\\\"\\n [style.width.px]=\\\"col.width\\\"\\n [style.width.%]=\\\"col.width ? null : (col.filter?.descriptor?.columnWidth ?? col.descriptor.width ?? null)\\\"\\n [style.min-width.px]=\\\"col.width ? null : (col.filter?.descriptor?.columnMinWidth ?? col.descriptor.minWidth)\\\"\\n [style.max-width.px]=\\\"col.width ?? col.descriptor.maxWidth\\\">\\n @if (col.filter && col.filter.descriptor.filterType !== FilterTypeEnum.Component) {\\n @defer (on idle) {\\n <mng-table-filter [config]=\\\"col.filter\\\" [model]=\\\"metadata.descriptor().model\\\"></mng-table-filter>\\n }\\n } @else if (col.filter && col.filter.descriptor.customComponentType) {\\n <ng-container [mngComponent]=\\\"col.filter.descriptor.customComponentType\\\" [inputs]=\\\"{descriptor: col.filter.descriptor}\\\"></ng-container>\\n }\\n </th>\\n }\\n @if (hasLastColumn()) {\\n <th pFrozenColumn alignFrozen=\\\"right\\\" class=\\\"mng-table-column-custom-last\\\" [style.min-width.px]=\\\"columnLastMinWidth()\\\"></th>\\n }\\n </tr>\\n }\\n </ng-template>\\n <ng-template #body let-item let-idx=\\\"rowIndex\\\" let-expanded=\\\"expanded\\\">\\n <tr\\n [pReorderableRow]=\\\"idx\\\"\\n [ngClass]=\\\"\\n metadata.descriptor().rowClassName | mngClassMap: metadata.descriptor().rowClassNameMapFn : item | mngLocaleDefaultRowClass: metadata.descriptor() : item\\n \\\">\\n @if (selectionEnabled()) {\\n @if (selectionMode() === 'multiple') {\\n <td style=\\\"min-width: 36px\\\" pFrozenColumn [frozen]=\\\"metadata.descriptor().selectionColumnFrozen ?? true\\\">\\n <p-tableCheckbox [value]=\\\"item\\\"></p-tableCheckbox>\\n </td>\\n } @else {\\n <td style=\\\"min-width: 36px\\\" pFrozenColumn [frozen]=\\\"metadata.descriptor().selectionColumnFrozen ?? true\\\">\\n <p-tableRadioButton [value]=\\\"item\\\"></p-tableRadioButton>\\n </td>\\n }\\n }\\n @if (metadata.descriptor().rowExpandable) {\\n <td>\\n @let expandProp = metadata.descriptor().rowExpandableProperty;\\n @if (!expandProp || item[expandProp]) {\\n <button\\n pButton\\n type=\\\"button\\\"\\n [pRowToggler]=\\\"item\\\"\\n rounded=\\\"true\\\"\\n text=\\\"true\\\"\\n class=\\\"mng-button-sm\\\"\\n [icon]=\\\"expanded ? 'pi pi-chevron-down' : 'pi pi-chevron-right'\\\"></button>\\n }\\n </td>\\n }\\n @if (rowReorderEnabled()) {\\n <td>\\n <span class=\\\"pi pi-bars\\\" pReorderableRowHandle></span>\\n </td>\\n }\\n @for (col of visibleColumns(); track col.id) {\\n <td\\n (click)=\\\"onCellClick($event, col.descriptor, item, idx)\\\"\\n [class]=\\\"\\n col.descriptor.className\\n | mngClassMap: col.descriptor.classNameMapFn : item\\n | mngTableFilterClass: col.filter?.descriptor : hasColumnFilters() && !col.width\\n \\\"\\n [class.clickable]=\\\"isCellClickEnabled()\\\"\\n [style.width]=\\\"col.width ? col.width + 'px' : col.descriptor.width + '%'\\\"\\n [style.min-width.px]=\\\"col.width ? null : col.descriptor.minWidth\\\"\\n [style.max-width.px]=\\\"col.width ?? col.descriptor.maxWidth\\\">\\n <mng-table-column-value [descriptor]=\\\"col.descriptor\\\" [item]=\\\"item\\\"></mng-table-column-value>\\n </td>\\n }\\n @if (columnCustomLastTemplate()) {\\n <td\\n class=\\\"mng-table-column-custom-last justify-end text-right!\\\"\\n [style.min-width.px]=\\\"columnLastMinWidth()\\\"\\n pFrozenColumn\\n alignFrozen=\\\"right\\\"\\n [frozen]=\\\"metadata.descriptor().actionColumnFrozen ?? true\\\">\\n <ng-container\\n *ngTemplateOutlet=\\\"\\n columnCustomLastTemplate();\\n context: {item: item, index: idx, data: data.data(), totalCount: data.count(), table: this}\\n \\\"></ng-container>\\n </td>\\n }\\n </tr>\\n </ng-template>\\n <ng-template #expandedrow let-item let-idx=\\\"rowIndex\\\">\\n @if (metadata.descriptor().rowExpandable) {\\n <tr>\\n <td></td>\\n <td [colSpan]=\\\"metadata.descriptor().rowExpandableColSpan\\\">\\n @if (metadata.descriptor().rowExpandableComponentType !== undefined) {\\n <ng-container [mngComponent]=\\\"metadata.descriptor().rowExpandableComponentType\\\" [inputs]=\\\"{item}\\\"> </ng-container>\\n } @else {\\n <ng-container\\n *ngTemplateOutlet=\\\"\\n rowExpandTemplate();\\n context: {item: item, index: idx, data: data.data(), totalCount: data.count(), table: this}\\n \\\"></ng-container>\\n }\\n </td>\\n </tr>\\n }\\n </ng-template>\\n <ng-template #loadingicon>\\n <div class=\\\"flex flex-col items-center\\\">\\n @if (metadata.descriptor().loadingIcon) {\\n <i [class]=\\\"'text-white text-4xl pi-spin ' + metadata.descriptor().loadingIcon\\\"></i>\\n }\\n @if (metadata.descriptor().loadingText) {\\n <div class=\\\"text text-white text-lg font-semibold\\\" [ngClass]=\\\"{'mt-3': metadata.descriptor().loadingIcon}\\\">\\n {{ metadata.descriptor().loadingText ?? '' | translate }}\\n </div>\\n }\\n </div>\\n </ng-template>\\n <ng-template #loadingbody>\\n <tr>\\n <td [attr.colspan]=\\\"columnsColspan()\\\">\\n <div class=\\\"loading-text\\\"></div>\\n <p-skeleton width=\\\"100%\\\"></p-skeleton>\\n </td>\\n </tr>\\n </ng-template>\\n <ng-template #emptymessage>\\n <tr>\\n <td [attr.colspan]=\\\"columnsColspan()\\\">\\n @if (requiredFiltersMissing()) {\\n <i class=\\\"pi pi-exclamation-triangle mr-2\\\"></i> <strong>{{ 'mngTable.requiredFiltersMissing' | translate }}</strong>\\n } @else {\\n {{ 'mngTable.noItems' | translate }}\\n }\\n </td>\\n </tr>\\n </ng-template>\\n @if (footerTemplate()) {\\n <ng-template #summary>\\n <ng-container *ngTemplateOutlet=\\\"footerTemplate(); context: {data: data.data(), totalCount: data.count(), table: this}\\\"></ng-container>\\n </ng-template>\\n }\\n </p-table>\\n }\\n</div>\\n\", styles: [\"mng-table .p-datatable .p-datatable-header{border-top:0}mng-table .p-datatable:not(.p-datatable-gridlines) .p-datatable-tbody>tr>td{cursor:auto}mng-table .p-datatable:not(.p-datatable-gridlines) .p-datatable-tbody>tr>td.clickable{cursor:pointer}:is(mng-table .p-datatable .p-datatable-thead>tr>th,mng-table .p-datatable .p-datatable-tbody>tr>td):hover mng-table-column-value .help-buttons{display:block}mng-table .p-datatable .p-datatable-thead>tr>th.mng-table-column-custom-last{padding:var(--mng-table-column-head-custom-last, .1rem 1rem)}mng-table .p-datatable .p-datatable-tbody>tr>td{position:relative}mng-table .p-datatable .p-datatable-tbody>tr>td.mng-table-column-custom-last{padding-top:.1rem;padding-bottom:.1rem}mng-table .p-datatable .p-datatable-tbody>tr>td.p-datatable-frozen-column{position:sticky;z-index:1;background:transparent}mng-table .p-datatable.p-datatable-lg .p-datatable-tbody>tr>td.mng-table-column-custom-last{padding:var(--mng-table-column-body-custom-last, .15rem 1rem)}mng-table .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td.mng-table-column-custom-last{padding:var(--mng-table-sm-column-body-custom-last, .05rem 1rem)}mng-table .p-datatable.p-datatable-flex-scrollable .p-datatable-thead>tr>th{overflow:hidden;text-overflow:ellipsis}mng-table .p-datatable.p-datatable-flex-scrollable .p-datatable-tbody>tr>td{overflow:hidden}mng-table .p-datatable .mng-table-row-localization-default-locale{background:var(--p-surface-100)!important}mng-table .mng-table-header>th:not(:first-child):not(:last-child){border-radius:0!important}mng-table .mng-table-header>th:first-child{border-top-right-radius:0!important;border-bottom-right-radius:0!important}mng-table .mng-table-header>th:last-child{border-radius:0!important}mng-table .mng-table-header .mng-table-columns-multiselect{width:36px}mng-table .mng-table-header .mng-table-columns-multiselect .p-multiselect-label-container{width:0}mng-table.mng-table-no-header p-datatable .p-datatable-header{display:none}mng-table.mng-table-header-compact .p-datatable-header{padding:var(--mng-table-header-compact-padding, 0 0 .5rem 0)!important}\\n\"], dependencies: [{ kind: \"directive\", type: ComponentDirective, selector: \"[mngComponent]\", inputs: [\"mngComponent\", \"injectionToken\", \"inputs\", \"attachToHost\", \"parentInjector\"], outputs: [\"instanceCreated\"] }, { kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"component\", type: TableColumnValueComponent, selector: \"mng-table-column-value\", inputs: [\"descriptor\", \"item\"] }, { kind: \"component\", type: TableHeaderWithFiltersComponent, selector: \"mng-table-header-with-filters\", inputs: [\"metadata\", \"genericFilterDescriptor\", \"model\", \"enableSearch\", \"search\", \"searchLimitWordMax\", \"enableCaseSensitive\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"ngmodule\", type: TableModule }, { kind: \"component\", type: i1.Table, selector: \"p-table\", inputs: [\"frozenColumns\", \"frozenValue\", \"styleClass\", \"tableStyle\", \"tableStyleClass\", \"paginator\", \"pageLinks\", \"rowsPerPageOptions\", \"alwaysShowPaginator\", \"paginatorPosition\", \"paginatorStyleClass\", \"paginatorDropdownAppendTo\", \"paginatorDropdownScrollHeight\", \"currentPageReportTemplate\", \"showCurrentPageReport\", \"showJumpToPageDropdown\", \"showJumpToPageInput\", \"showFirstLastIcon\", \"showPageLinks\", \"defaultSortOrder\", \"sortMode\", \"resetPageOnSort\", \"selectionMode\", \"selectionPageOnly\", \"contextMenuSelection\", \"contextMenuSelectionMode\", \"dataKey\", \"metaKeySelection\", \"rowSelectable\", \"rowTrackBy\", \"lazy\", \"lazyLoadOnInit\", \"compareSelectionBy\", \"csvSeparator\", \"exportFilename\", \"filters\", \"globalFilterFields\", \"filterDelay\", \"filterLocale\", \"expandedRowKeys\", \"editingRowKeys\", \"rowExpandMode\", \"scrollable\", \"rowGroupMode\", \"scrollHeight\", \"virtualScroll\", \"virtualScrollItemSize\", \"virtualScrollOptions\", \"virtualScrollDelay\", \"frozenWidth\", \"contextMenu\", \"resizableColumns\", \"columnResizeMode\", \"reorderableColumns\", \"loading\", \"loadingIcon\", \"showLoader\", \"rowHover\", \"customSort\", \"showInitialSortBadge\", \"exportFunction\", \"exportHeader\", \"stateKey\", \"stateStorage\", \"editMode\", \"groupRowsBy\", \"size\", \"showGridlines\", \"stripedRows\", \"groupRowsByOrder\", \"responsiveLayout\", \"breakpoint\", \"paginatorLocale\", \"value\", \"columns\", \"first\", \"rows\", \"totalRecords\", \"sortField\", \"sortOrder\", \"multiSortMeta\", \"selection\", \"selectAll\"], outputs: [\"contextMenuSelectionChange\", \"selectAllChange\", \"selectionChange\", \"onRowSelect\", \"onRowUnselect\", \"onPage\", \"onSort\", \"onFilter\", \"onLazyLoad\", \"onRowExpand\", \"onRowCollapse\", \"onContextMenuSelect\", \"onColResize\", \"onColReorder\", \"onRowReorder\", \"onEditInit\", \"onEditComplete\", \"onEditCancel\", \"onHeaderCheckboxToggle\", \"sortFunction\", \"firstChange\", \"rowsChange\", \"onStateSave\", \"onStateRestore\"] }, { kind: \"directive\", type: i1.SortableColumn, selector: \"[pSortableColumn]\", inputs: [\"pSortableColumn\", \"pSortableColumnDisabled\"] }, { kind: \"directive\", type: i1.FrozenColumn, selector: \"[pFrozenColumn]\", inputs: [\"frozen\", \"alignFrozen\"] }, { kind: \"directive\", type: i1.RowToggler, selector: \"[pRowToggler]\", inputs: [\"pRowToggler\", \"pRowTogglerDisabled\"] }, { kind: \"directive\", type: i1.ResizableColumn, selector: \"[pResizableColumn]\", inputs: [\"pResizableColumnDisabled\"] }, { kind: \"directive\", type: i1.ReorderableColumn, selector: \"[pReorderableColumn]\", inputs: [\"pReorderableColumnDisabled\"] }, { kind: \"component\", type: i1.SortIcon, selector: \"p-sortIcon\", inputs: [\"field\"] }, { kind: \"component\", type: i1.TableRadioButton, selector: \"p-tableRadioButton\", inputs: [\"value\", \"disabled\", \"index\", \"inputId\", \"name\", \"ariaLabel\"] }, { kind: \"component\", type: i1.TableCheckbox, selector: \"p-tableCheckbox\", inputs: [\"value\", \"disabled\", \"required\", \"index\", \"inputId\", \"name\", \"ariaLabel\"] }, { kind: \"component\", type: i1.TableHeaderCheckbox, selector: \"p-tableHeaderCheckbox\", inputs: [\"disabled\", \"inputId\", \"name\", \"ariaLabel\"] }, { kind: \"directive\", type: i1.ReorderableRowHandle, selector: \"[pReorderableRowHandle]\" }, { kind: \"directive\", type: i1.ReorderableRow, selector: \"[pReorderableRow]\", inputs: [\"pReorderableRow\", \"pReorderableRowDisabled\"] }, { kind: \"component\", type: Skeleton, selector: \"p-skeleton\", inputs: [\"styleClass\", \"shape\", \"animation\", \"borderRadius\", \"size\", \"width\", \"height\"] }, { kind: \"directive\", type: ButtonDirective, selector: \"[pButton]\", inputs: [\"iconPos\", \"loadingIcon\", \"loading\", \"severity\", \"raised\", \"rounded\", \"text\", \"outlined\", \"size\", \"plain\", \"fluid\", \"label\", \"icon\", \"buttonProps\"] }, { kind: \"directive\", type: TableRemovableSortDirective, selector: \"[mngRemovableSort]\" }, { kind: \"directive\", type: TableHeaderWithFiltersTemplateDirective, selector: \"[mngTableHeaderWithFiltersTemplate]\", inputs: [\"name\"] }, { kind: \"pipe\", type: I18nPropertyPipe, name: \"mngI18nProperty\" }, { kind: \"pipe\", type: TranslatePipe, name: \"translate\" }, { kind: \"pipe\", type: ClassMapPipe, name: \"mngClassMap\" }, { kind: \"pipe\", type: LocaleDefaultRowClassPipe, name: \"mngLocaleDefaultRowClass\" }, { kind: \"pipe\", type: TableFilterClassPipe, name: \"mngTableFilterClass\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None, deferBlockDependencies: [() => [import(\"../column-toggle/column-toggle.component\").then(m => m.TableColumnToggleComponent)], () => [import(\"../filter/filter/filter.component\").then(m => m.TableFilterComponent)]] }); }\n}\ni0.ɵɵngDeclareClassMetadataAsync({ minVersion: \"18.0.0\", version: \"20.1.7\", ngImport: i0, type: TableComponent, resolveDeferredDeps: () => [import(\"../column-toggle/column-toggle.component\").then(m => m.TableColumnToggleComponent), import(\"../filter/filter/filter.component\").then(m => m.TableFilterComponent)], resolveMetadata: (TableColumnToggleComponent, TableFilterComponent) => ({ decorators: [{\n type: Component,\n args: [{ selector: 'mng-table', imports: [\n ComponentDirective,\n I18nPropertyPipe,\n TranslatePipe,\n NgClass,\n NgTemplateOutlet,\n TableColumnValueComponent,\n ClassMapPipe,\n LocaleDefaultRowClassPipe,\n TableFilterComponent,\n TableFilterClassPipe,\n TableHeaderWithFiltersComponent,\n FormsModule,\n TableModule,\n Skeleton,\n TableColumnToggleComponent,\n ButtonDirective,\n TableRemovableSortDirective,\n TableHeaderWithFiltersTemplateDirective\n ], providers: [TableMetadataService, TableDataService, TablePreferencesService], host: {\n '[class.mng-table-no-header]': '!isCaptionVisible()'\n }, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: \"<div>\\n <!-- MUST NOT use observable for value when using virtual scroll - does not work for some reason -->\\n @if (data.isAllPaginationMetaInitialized()) {\\n <p-table\\n [value]=\\\"requiredFiltersMissing() ? [] : data.data()\\\"\\n [dataKey]=\\\"metadata.descriptor().trackProperty\\\"\\n [lazy]=\\\"isLazy()\\\"\\n [loading]=\\\"data.loading()\\\"\\n [paginator]=\\\"isPagination()\\\"\\n [rows]=\\\"data.rows()\\\"\\n [first]=\\\"data.offset()\\\"\\n [totalRecords]=\\\"data.count()\\\"\\n [rowsPerPageOptions]=\\\"metadata.rowsPerPageOptions()\\\"\\n [showCurrentPageReport]=\\\"true\\\"\\n [currentPageReportTemplate]=\\\"'mngTable.paginationMsg' | translate\\\"\\n [multiSortMeta]=\\\"data.sortMeta()\\\"\\n [filters]=\\\"data.filterStates()\\\"\\n [globalFilterFields]=\\\"metadata.searchFields()\\\"\\n sortMode=\\\"multiple\\\"\\n [selection]=\\\"[]\\\"\\n (selectionChange)=\\\"onSelectionChange($event)\\\"\\n [selectionMode]=\\\"selectionEnabled() ? selectionMode() : null\\\"\\n [scrollable]=\\\"true\\\"\\n scrollHeight=\\\"flex\\\"\\n [rowHover]=\\\"metadata.descriptor().hasHover\\\"\\n [styleClass]=\\\"className()\\\"\\n [resizableColumns]=\\\"metadata.descriptor().hasResizableColumns\\\"\\n [columnResizeMode]=\\\"metadata.descriptor().columnResizeMode ?? 'expand'\\\"\\n [reorderableColumns]=\\\"areColumnsReorderable()\\\"\\n paginatorDropdownAppendTo=\\\"body\\\"\\n [columns]=\\\"visibleColumns()\\\"\\n [expandedRowKeys]=\\\"expandedRowKeys()\\\"\\n (onColResize)=\\\"prefs.onColumnResize($event)\\\"\\n (onColReorder)=\\\"prefs.onColumnReorder($event)\\\"\\n (onLazyLoad)=\\\"onTableLazyLoad($event)\\\"\\n (onFilter)=\\\"onTableFilter($event)\\\"\\n (onRowReorder)=\\\"onRowReorder($event)\\\"\\n mngRemovableSort>\\n <ng-template #caption>\\n @if (isCaptionVisible()) {\\n <div class=\\\"table-header\\\">\\n @if (headerTemplate()) {\\n <ng-container *ngTemplateOutlet=\\\"headerTemplate(); context: {data: data.data(), totalCount: data.count(), table: this}\\\"></ng-container>\\n } @else {\\n <mng-table-header-with-filters\\n [title]=\\\"metadata.descriptor().title\\\"\\n [metadata]=\\\"tableHeaderFilters()\\\"\\n [genericFilterDescriptor]=\\\"metadata.genericFilterDescriptor()\\\"\\n [model]=\\\"metadata.descriptor().model\\\"\\n [enableSearch]=\\\"metadata.descriptor().search\\\"\\n [search]=\\\"data.searchMeta()\\\"\\n [searchLimitWordMax]=\\\"metadata.descriptor().searchLimitMaxWords\\\"\\n [enableCaseSensitive]=\\\"isLazy()\\\">\\n @if (hasTitleDisplay()) {\\n <ng-template mngTableHeaderWithFiltersTemplate name=\\\"title\\\">\\n @if (headerTitleTemplate()) {\\n <ng-container\\n *ngTemplateOutlet=\\\"headerTitleTemplate(); context: {data: data.data(), totalCount: data.count(), table: this}\\\"></ng-container>\\n } @else if (metadata.descriptor().title) {\\n <h5 class=\\\"p-0 m-0\\\">{{ metadata.descriptor().title! | translate }}</h5>\\n }\\n </ng-template>\\n }\\n @if (titleRowRightTemplate()) {\\n <ng-template mngTableHeaderWithFiltersTemplate name=\\\"titleRowRight\\\">\\n <ng-container *ngTemplateOutlet=\\\"titleRowRightTemplate()\\\"></ng-container>\\n </ng-template>\\n }\\n </mng-table-header-with-filters>\\n }\\n </div>\\n }\\n </ng-template>\\n <ng-template #header>\\n @if (!metadata.descriptor().hideHeader) {\\n <tr class=\\\"mng-table-header\\\" [class]=\\\"metadata.descriptor().headerClassName\\\">\\n @if (selectionEnabled()) {\\n @if (selectionMode() === 'multiple') {\\n <th style=\\\"min-width: 36px\\\" pFrozenColumn [frozen]=\\\"metadata.descriptor().selectionColumnFrozen ?? true\\\">\\n <p-tableHeaderCheckbox />\\n </th>\\n } @else {\\n <!-- We need the line below, because otherwise p-tableRadioButton shifts the rest of the columns in table -->\\n <th style=\\\"min-width: 36px\\\" pFrozenColumn [frozen]=\\\"metadata.descriptor().selectionColumnFrozen ?? true\\\"></th>\\n }\\n }\\n @if (metadata.descriptor().rowExpandable) {\\n <th scope=\\\"col\\\" pFrozenColumn [frozen]=\\\"true\\\"></th>\\n }\\n @if (rowReorderEnabled()) {\\n <th scope=\\\"col\\\"></th>\\n }\\n @for (col of visibleColumns(); track col.id) {\\n <ng-template #sortableColumnTHTemplate>\\n @if (columnHeaderTemplate()) {\\n <ng-container\\n *ngTemplateOutlet=\\\"\\n columnHeaderTemplate();\\n context: {data: data.data(), totalCount: data.count(), property: col.descriptor.property, table: this}\\n \\\"></ng-container>\\n } @else {\\n <div class=\\\"flex justify-between items-center\\\">\\n {{\\n (col.descriptor.title && !col.descriptor.titleUseModelBase\\n ? col.descriptor.title\\n : (col.descriptor.title ?? col.descriptor.property | mngI18nProperty: metadata.descriptor().model)\\n ) | translate\\n }}\\n <p-sortIcon [field]=\\\"col.sort?.property\\\" class=\\\"flex\\\"></p-sortIcon>\\n </div>\\n }\\n </ng-template>\\n <ng-template #nonSortableColumnTHTemplate>\\n @if (columnHeaderTemplate()) {\\n <ng-container\\n *ngTemplateOutlet=\\\"\\n columnHeaderTemplate();\\n context: {data: data.data(), totalCount: data.count(), property: col.descriptor.property, table: this}\\n \\\"></ng-container>\\n } @else {\\n {{\\n (col.descriptor.title && !col.descriptor.titleUseModelBase\\n ? col.descriptor.title\\n : (col.descriptor.title ?? col.descriptor.property | mngI18nProperty: metadata.descriptor().model)\\n ) | translate\\n }}\\n }\\n </ng-template>\\n @if (col.descriptor.isReorderable) {\\n <th\\n pResizableColumn\\n pReorderableColumn\\n [id]=\\\"col.descriptor.property\\\"\\n [pSortableColumn]=\\\"col.sort?.property\\\"\\n [pSortableColumnDisabled]=\\\"!col.sort\\\"\\n [style.width]=\\\"col.width ? col.width + 'px' : col.descriptor.width + '%'\\\"\\n [style.min-width.px]=\\\"col.width ? null : col.descriptor.minWidth\\\"\\n [style.max-width.px]=\\\"col.width ?? col.descriptor.maxWidth\\\"\\n [class]=\\\"col.descriptor.headerClassName | mngTableFilterClass: col.filter?.descriptor : hasColumnFilters() && !col.width\\\">\\n <ng-container *ngTemplateOutlet=\\\"col.sort ? sortableColumnTHTemplate : nonSortableColumnTHTemplate\\\"></ng-container>\\n </th>\\n } @else {\\n <th\\n pResizableColumn\\n [id]=\\\"col.descriptor.property\\\"\\n [pSortableColumn]=\\\"col.sort?.property\\\"\\n [pSortableColumnDisabled]=\\\"!col.sort\\\"\\n [style.width]=\\\"col.width ? col.width + 'px' : col.descriptor.width + '%'\\\"\\n [style.min-width.px]=\\\"col.width ? null : col.descriptor.minWidth\\\"\\n [style.max-width.px]=\\\"col.width ?? col.descriptor.maxWidth\\\"\\n [class]=\\\"col.descriptor.headerClassName | mngTableFilterClass: col.filter?.descriptor : hasColumnFilters() && !col.width\\\">\\n <ng-container *ngTemplateOutlet=\\\"col.sort ? sortableColumnTHTemplate : nonSortableColumnTHTemplate\\\"></ng-container>\\n </th>\\n }\\n }\\n @if (hasLastColumn()) {\\n <th\\n [style.min-width.px]=\\\"columnLastMinWidth()\\\"\\n pFrozenColumn\\n [frozen]=\\\"metadata.descriptor().actionColumnFrozen ?? areColumnsToggleable()\\\"\\n alignFrozen=\\\"right\\\"\\n class=\\\"mng-table-column-custom-last text-right!\\\">\\n @if (areColumnsToggleable()) {\\n @defer (on idle) {\\n <mng-table-column-toggle [columns]=\\\"visibleColumns()\\\" />\\n }\\n }\\n </th>\\n }\\n </tr>\\n }\\n @if (hasColumnFilters()) {\\n <tr class=\\\"mng-column-filter-row\\\">\\n <!-- We need the line below, because otherwise p-tableRadioButton shifts the rest of the columns in table -->\\n @if (selectionEnabled()) {\\n <th style=\\\"min-width: 36px\\\" pFrozenColumn [frozen]=\\\"metadata.descriptor().selectionColumnFrozen ?? true\\\"></th>\\n }\\n @if (rowReorderEnabled()) {\\n <th scope=\\\"col\\\"></th>\\n }\\n @if (metadata.descriptor().rowExpandable) {\\n <th scope=\\\"col\\\"></th>\\n }\\n @for (col of visibleColumns(); track col.id) {\\n <th\\n [class]=\\\"'px-1! ' + col.filter?.descriptor?.columnClassName | mngTableFilterClass: col.filter?.descriptor : hasColumnFilters() && !col.width\\\"\\n [style.width.px]=\\\"col.width\\\"\\n [style.width.%]=\\\"col.width ? null : (col.filter?.descriptor?.columnWidth ?? col.descriptor.width ?? null)\\\"\\n [style.min-width.px]=\\\"col.width ? null : (col.filter?.descriptor?.columnMinWidth ?? col.descriptor.minWidth)\\\"\\n [style.max-width.px]=\\\"col.width ?? col.descriptor.maxWidth\\\">\\n @if (col.filter && col.filter.descriptor.filterType !== FilterTypeEnum.Component) {\\n @defer (on idle) {\\n <mng-table-filter [config]=\\\"col.filter\\\" [model]=\\\"metadata.descriptor().model\\\"></mng-table-filter>\\n }\\n } @else if (col.filter && col.filter.descriptor.customComponentType) {\\n <ng-container [mngComponent]=\\\"col.filter.descriptor.customComponentType\\\" [inputs]=\\\"{descriptor: col.filter.descriptor}\\\"></ng-container>\\n }\\n </th>\\n }\\n @if (hasLastColumn()) {\\n <th pFrozenColumn alignFrozen=\\\"right\\\" class=\\\"mng-table-column-custom-last\\\" [style.min-width.px]=\\\"columnLastMinWidth()\\\"></th>\\n }\\n </tr>\\n }\\n </ng-template>\\n <ng-template #body let-item let-idx=\\\"rowIndex\\\" let-expanded=\\\"expanded\\\">\\n <tr\\n [pReorderableRow]=\\\"idx\\\"\\n [ngClass]=\\\"\\n metadata.descriptor().rowClassName | mngClassMap: metadata.descriptor().rowClassNameMapFn : item | mngLocaleDefaultRowClass: metadata.descriptor() : item\\n \\\">\\n @if (selectionEnabled()) {\\n @if (selectionMode() === 'multiple') {\\n <td style=\\\"min-width: 36px\\\" pFrozenColumn [frozen]=\\\"metadata.descriptor().selectionColumnFrozen ?? true\\\">\\n <p-tableCheckbox [value]=\\\"item\\\"></p-tableCheckbox>\\n </td>\\n } @else {\\n <td style=\\\"min-width: 36px\\\" pFrozenColumn [frozen]=\\\"metadata.descriptor().selectionColumnFrozen ?? true\\\">\\n <p-tableRadioButton [value]=\\\"item\\\"></p-tableRadioButton>\\n </td>\\n }\\n }\\n @if (metadata.descriptor().rowExpandable) {\\n <td>\\n @let expandProp = metadata.descriptor().rowExpandableProperty;\\n @if (!expandProp || item[expandProp]) {\\n <button\\n pButton\\n type=\\\"button\\\"\\n [pRowToggler]=\\\"item\\\"\\n rounded=\\\"true\\\"\\n text=\\\"true\\\"\\n class=\\\"mng-button-sm\\\"\\n [icon]=\\\"expanded ? 'pi pi-chevron-down' : 'pi pi-chevron-right'\\\"></button>\\n }\\n </td>\\n }\\n @if (rowReorderEnabled()) {\\n <td>\\n <span class=\\\"pi pi-bars\\\" pReorderableRowHandle></span>\\n </td>\\n }\\n @for (col of visibleColumns(); track col.id) {\\n <td\\n (click)=\\\"onCellClick($event, col.descriptor, item, idx)\\\"\\n [class]=\\\"\\n col.descriptor.className\\n | mngClassMap: col.descriptor.classNameMapFn : item\\n | mngTableFilterClass: col.filter?.descriptor : hasColumnFilters() && !col.width\\n \\\"\\n [class.clickable]=\\\"isCellClickEnabled()\\\"\\n [style.width]=\\\"col.width ? col.width + 'px' : col.descriptor.width + '%'\\\"\\n [style.min-width.px]=\\\"col.width ? null : col.descriptor.minWidth\\\"\\n [style.max-width.px]=\\\"col.width ?? col.descriptor.maxWidth\\\">\\n <mng-table-column-value [descriptor]=\\\"col.descriptor\\\" [item]=\\\"item\\\"></mng-table-column-value>\\n </td>\\n }\\n @if (columnCustomLastTemplate()) {\\n <td\\n class=\\\"mng-table-column-custom-last justify-end text-right!\\\"\\n [style.min-width.px]=\\\"columnLastMinWidth()\\\"\\n pFrozenColumn\\n alignFrozen=\\\"right\\\"\\n [frozen]=\\\"metadata.descriptor().actionColumnFrozen ?? true\\\">\\n <ng-container\\n *ngTemplateOutlet=\\\"\\n columnCustomLastTemplate();\\n context: {item: item, index: idx, data: data.data(), totalCount: data.count(), table: this}\\n \\\"></ng-container>\\n </td>\\n }\\n </tr>\\n </ng-template>\\n <ng-template #expandedrow let-item let-idx=\\\"rowIndex\\\">\\n @if (metadata.descriptor().rowExpandable) {\\n <tr>\\n <td></td>\\n <td [colSpan]=\\\"metadata.descriptor().rowExpandableColSpan\\\">\\n @if (metadata.descriptor().rowExpandableComponentType !== undefined) {\\n <ng-container [mngComponent]=\\\"metadata.descriptor().rowExpandableComponentType\\\" [inputs]=\\\"{item}\\\"> </ng-container>\\n } @else {\\n <ng-container\\n *ngTemplateOutlet=\\\"\\n rowExpandTemplate();\\n context: {item: item, index: idx, data: data.data(), totalCount: data.count(), table: this}\\n \\\"></ng-container>\\n }\\n </td>\\n </tr>\\n }\\n </ng-template>\\n <ng-template #loadingicon>\\n <div class=\\\"flex flex-col items-center\\\">\\n @if (metadata.descriptor().loadingIcon) {\\n <i [class]=\\\"'text-white text-4xl pi-spin ' + metadata.descriptor().loadingIcon\\\"></i>\\n }\\n @if (metadata.descriptor().loadingText) {\\n <div class=\\\"text text-white text-lg font-semibold\\\" [ngClass]=\\\"{'mt-3': metadata.descriptor().loadingIcon}\\\">\\n {{ metadata.descriptor().loadingText ?? '' | translate }}\\n </div>\\n }\\n </div>\\n </ng-template>\\n <ng-template #loadingbody>\\n <tr>\\n <td [attr.colspan]=\\\"columnsColspan()\\\">\\n <div class=\\\"loading-text\\\"></div>\\n <p-skeleton width=\\\"100%\\\"></p-skeleton>\\n </td>\\n </tr>\\n </ng-template>\\n <ng-template #emptymessage>\\n <tr>\\n <td [attr.colspan]=\\\"columnsColspan()\\\">\\n @if (requiredFiltersMissing()) {\\n <i class=\\\"pi pi-exclamation-triangle mr-2\\\"></i> <strong>{{ 'mngTable.requiredFiltersMissing' | translate }}</strong>\\n } @else {\\n {{ 'mngTable.noItems' | translate }}\\n }\\n </td>\\n </tr>\\n </ng-template>\\n @if (footerTemplate()) {\\n <ng-template #summary>\\n <ng-container *ngTemplateOutlet=\\\"footerTemplate(); context: {data: data.data(), totalCount: data.count(), table: this}\\\"></ng-container>\\n </ng-template>\\n }\\n </p-table>\\n }\\n</div>\\n\", styles: [\"mng-table .p-datatable .p-datatable-header{border-top:0}mng-table .p-datatable:not(.p-datatable-gridlines) .p-datatable-tbody>tr>td{cursor:auto}mng-table .p-datatable:not(.p-datatable-gridlines) .p-datatable-tbody>tr>td.clickable{cursor:pointer}:is(mng-table .p-datatable .p-datatable-thead>tr>th,mng-table .p-datatable .p-datatable-tbody>tr>td):hover mng-table-column-value .help-buttons{display:block}mng-table .p-datatable .p-datatable-thead>tr>th.mng-table-column-custom-last{padding:var(--mng-table-column-head-custom-last, .1rem 1rem)}mng-table .p-datatable .p-datatable-tbody>tr>td{position:relative}mng-table .p-datatable .p-datatable-tbody>tr>td.mng-table-column-custom-last{padding-top:.1rem;padding-bottom:.1rem}mng-table .p-datatable .p-datatable-tbody>tr>td.p-datatable-frozen-column{position:sticky;z-index:1;background:transparent}mng-table .p-datatable.p-datatable-lg .p-datatable-tbody>tr>td.mng-table-column-custom-last{padding:var(--mng-table-column-body-custom-last, .15rem 1rem)}mng-table .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td.mng-table-column-custom-last{padding:var(--mng-table-sm-column-body-custom-last, .05rem 1rem)}mng-table .p-datatable.p-datatable-flex-scrollable .p-datatable-thead>tr>th{overflow:hidden;text-overflow:ellipsis}mng-table .p-datatable.p-datatable-flex-scrollable .p-datatable-tbody>tr>td{overflow:hidden}mng-table .p-datatable .mng-table-row-localization-default-locale{background:var(--p-surface-100)!important}mng-table .mng-table-header>th:not(:first-child):not(:last-child){border-radius:0!important}mng-table .mng-table-header>th:first-child{border-top-right-radius:0!important;border-bottom-right-radius:0!important}mng-table .mng-table-header>th:last-child{border-radius:0!important}mng-table .mng-table-header .mng-table-columns-multiselect{width:36px}mng-table .mng-table-header .mng-table-columns-multiselect .p-multiselect-label-container{width:0}mng-table.mng-table-no-header p-datatable .p-datatable-header{display:none}mng-table.mng-table-header-compact .p-datatable-header{padding:var(--mng-table-header-compact-padding, 0 0 .5rem 0)!important}\\n\"] }]\n }], ctorParameters: () => [], propDecorators: null }) });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGFibGUvc3JjL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vdGFibGUvc3JjL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzFELE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUdULGlCQUFpQixFQUNqQixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLFFBQVEsRUFDUixlQUFlLEVBQ2YsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsb0JBQW9CLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDbEcsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQVUsTUFBTSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFbEksT0FBTyxFQUFDLGFBQWEsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3BFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDM0MsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQy9DLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQyxPQUFPLEVBQUMsS0FBSyxFQUF3QyxXQUFXLEVBQXVCLE1BQU0sZUFBZSxDQUFDO0FBQzdHLE9BQU8sRUFBQyxLQUFLLEVBQUUs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dEQsd3pvQkEwVUEsbW9FRDNQUSxrQkFBa0IsaUxBR2xCLE9BQU8sb0ZBQ1AsZ0JBQWdCLG9KQUNoQix5QkFBeUIsbUdBS3pCLCtCQUErQiwwTUFDL0IsV0FBVyw4QkFDWCxXQUFXLCt2R0FDWCxRQUFRLGdKQUVSLGVBQWUsb05BQ2YsMkJBQTJCLCtEQUMzQix1Q0FBdUMsNkZBaEJ2QyxnQkFBZ0IsbURBQ2hCLGFBQWEsNkNBSWIsWUFBWSwrQ0FDWix5QkFBeUIsNERBRXpCLG9CQUFvQjs7Z0dBa0JmLGNBQWM7c0JBL0IxQixTQUFTO21DQUNJLFdBQVcsV0FFWjs0QkFDTCxrQkFBa0I7NEJBQ2xCLGdCQUFnQjs0QkFDaEIsYUFBYTs0QkFDYixPQUFPOzRCQUNQLGdCQUFnQjs0QkFDaEIseUJBQXlCOzRCQUN6QixZQUFZOzRCQUNaLHlCQUF5Qjs0QkFDekIsb0JBQW9COzRCQUNwQixvQkFBb0I7NEJBQ3BCLCtCQUErQjs0QkFDL0IsV0FBVzs0QkFDWCxXQUFXOzRCQUNYLFFBQVE7NEJBQ1IsMEJBQTBCOzRCQUMxQixlQUFlOzRCQUNmLDJCQUEyQjs0QkFDM0IsdUNBQXVDO3lCQUMxQyxhQUVVLENBQUMsb0JBQW9CLEVBQUUsZ0JBQWdCLEVBQUUsdUJBQXVCLENBQUMsUUFDdEU7NEJBQ0YsNkJBQTZCLEVBQUUscUJBQXFCO3lCQUN2RCxtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TmdDbGFzcywgTmdUZW1wbGF0ZU91dGxldH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIFNpZ25hbCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgICBhZnRlck5leHRSZW5kZXIsXG4gICAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBjb21wdXRlZCxcbiAgICBjb250ZW50Q2hpbGRyZW4sXG4gICAgaW5qZWN0LFxuICAgIGlucHV0LFxuICAgIG91dHB1dCxcbiAgICBzaWduYWwsXG4gICAgdmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtvdXRwdXRGcm9tT2JzZXJ2YWJsZSwgdGFrZVVudGlsRGVzdHJveWVkLCB0b09ic2VydmFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25DYW5jZWwsIE5hdmlnYXRpb25FbmQsIE5hdmlnYXRpb25FcnJvciwgTmF2aWdhdGlvblN0YXJ0LCBQYXJhbXMsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHtUcmFuc2xhdGVQaXBlLCBUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7TWVzc2FnZVNlcnZpY2V9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7QnV0dG9uRGlyZWN0aXZlfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XG5pbXBvcnQge1NrZWxldG9ufSBmcm9tICdwcmltZW5nL3NrZWxldG9uJztcbmltcG9ydCB7VGFibGUsIFRhYmxlRmlsdGVyRXZlbnQsIFRhYmxlTGF6eUxvYWRFdmVudCwgVGFibGVNb2R1bGUsIFRhYmxlUm93UmVvcmRlckV2ZW50fSBmcm9tICdwcmltZW5nL3RhYmxlJztcbmltcG9ydCB7TkVWRVIsIFN1YmplY3QsIGZpbHRlciwgb2YsIHN3aXRjaE1hcH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7XG4gICAgQ2xhc3NNYXBQaXBlLFxuICAgIENvbXBvbmVudERpcmVjdGl2ZSxcbiAgICBEYXRhTGlzdFBhcmFtcyxcbiAgICBEYXRhTGlzdFJlc3VsdCxcbiAgICBGaWx0ZXJNYXRjaE1vZGVFeHRlbmRlZFR5cGUsXG4gICAgSTE4blByb3BlcnR5UGlwZSxcbiAgICBMb2dnZXJTZXJ2aWNlLFxuICAgIGJvb2xlYW5PclVuZGVmaW5lZEF0dHJpYnV0ZSxcbiAgICBkYXRhTGlzdFBhcmFtc1RvVXJsUXVlcnksXG4gICAgZWZmZWN0V2l0aERlcHMsXG4gICAgZmluZFRlbXBsYXRlQnlOYW1lLFxuICAgIGZyb21TdWJzY3JpYmVFcnJvcixcbiAgICBmcm9tVGFibGVMb2FkVG9EYXRhTGlzdFBhcmFtcyxcbiAgICBmcm9tVXJsUXVlcnlUb0RhdGFMaXN0UGFyYW1zLFxuICAgIGdldEVycm9yTG9nTGV2ZWwsXG4gICAgbWVyZ2VEYXRhTGlzdFBhcmFtc1dpdGhEZWZhdWx0c1xufSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuaW1wb3J0IHtGaWx0ZXJEaXNwbGF5VHlwZUVudW0sIEZpbHRlclR5cGVFbnVtfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2ZpbHRlcic7XG5pbXBvcnQge1xuICAgIENvbHVtbkRlc2NyaXB0b3IsXG4gICAgSVRhYmxlRGF0YVByb3ZpZGVyLFxuICAgIFRhYmxlQ2VsbENsaWNrRXZlbnQsXG4gICAgVGFibGVEZXNjcmlwdG9ySW5zdCxcbiAgICBUYWJsZUxvYWRFdmVudCxcbiAgICBUYWJsZVBhZ2luYXRpb25Nb2RlRW51bSxcbiAgICBUYWJsZVJlbG9hZEV2ZW50LFxuICAgIFRhYmxlU2l6ZUVudW1cbn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy90YWJsZS9hcGknO1xuXG5pbXBvcnQge2lzRmlsdGVyVmFsdWVCbGFua30gZnJvbSAnLi4vLi4vaGVscGVycy9maWx0ZXJzJztcbmltcG9ydCB7dGFibGVOb3RpZmljYXRpb25FcnJvcn0gZnJvbSAnLi4vLi4vaGVscGVycy9ub3RpZmljYXRpb24nO1xuaW1wb3J0IHtJVGFibGV9IGZyb20gJy4uLy4uL21vZGVscy90YWJsZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHtMb2NhbGVEZWZhdWx0Um93Q2xhc3NQaXBlfSBmcm9tICcuLi8uLi9waXBlcy9sb2NhbGUtZGVmYXVsdC1yb3ctY2xhc3MucGlwZSc7XG5pbXBvcnQge1RhYmxlRmlsdGVyQ2xhc3NQaXBlfSBmcm9tICcuLi8uLi9waXBlcy90YWJsZS1maWx0ZXItY2xhc3MucGlwZSc7XG5pbXBvcnQge1RhYmxlRGF0YVNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RhYmxlLWRhdGEuc2VydmljZSc7XG5pbXBvcnQge1RhYmxlTWV0YWRhdGFTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90YWJsZS1tZXRhZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7VGFibGVQcmVmZXJlbmNlc1NlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RhYmxlLXByZWZlcmVuY2VzLnNlcnZpY2UnO1xuaW1wb3J0IHtUYWJsZUNvbHVtblRvZ2dsZUNvbXBvbmVudH0gZnJvbSAnLi4vY29sdW1uLXRvZ2dsZS9jb2x1bW4tdG9nZ2xlLmNvbXBvbmVudCc7XG5pbXBvcnQge1RhYmxlQ29sdW1uVmFsdWVDb21wb25lbnR9IGZyb20gJy4uL2NvbHVtbi12YWx1ZS9jb2x1bW4tdmFsdWUuY29tcG9uZW50JztcbmltcG9ydCB7VGFibGVGaWx0ZXJDb21wb25lbnR9IGZyb20gJy4uL2ZpbHRlci9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudCc7XG5pbXBvcnQge1RhYmxlSGVhZGVyV2l0aEZpbHRlcnNUZW1wbGF0ZURpcmVjdGl2ZX0gZnJvbSAnLi4vZmlsdGVyL2hlYWRlci13aXRoLWZpbHRlcnMvaGVhZGVyLXdpdGgtZmlsdGVycy10ZW1wbGF0ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHtUYWJsZUhlYWRlcldpdGhGaWx0ZXJzQ29tcG9uZW50fSBmcm9tICcuLi9maWx0ZXIvaGVhZGVyLXdpdGgtZmlsdGVycy9oZWFkZXItd2l0aC1maWx0ZXJzLmNvbXBvbmVudCc7XG5pbXBvcnQge1RhYmxlUmVtb3ZhYmxlU29ydERpcmVjdGl2ZX0gZnJvbSAnLi90YWJsZS1yZW1vdmFibGUtc29ydC5kaXJlY3RpdmUnO1xuaW1wb3J0IHtUYWJsZVRlbXBsYXRlRGlyZWN0aXZlfSBmcm9tICcuL3RhYmxlLXRlbXBsYXRlLmRpcmVjdGl2ZSc7XG5pbXBvcnQge1RhYmxlQ29sdW1uVGVtcGxhdGVDb250ZXh0LCBUYWJsZVJvd1RlbXBsYXRlQ29udGV4dCwgVGFibGVUZW1wbGF0ZUNvbnRleHR9IGZyb20gJy4vdGFibGUtdGVtcGxhdGUubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ21uZy10YWJsZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbXBvbmVudERpcmVjdGl2ZSxcbiAgICAgICAgSTE4blByb3BlcnR5UGlwZSxcbiAgICAgICAgVHJhbnNsYXRlUGlwZSxcbiAgICAgICAgTmdDbGFzcyxcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgVGFibGVDb2x1bW5WYWx1ZUNvbXBvbmVudCxcbiAgICAgICAgQ2xhc3NNYXBQaXBlLFxuICAgICAgICBMb2NhbGVEZWZhdWx0Um93Q2xhc3NQaXBlLFxuICAgICAgICBUYWJsZUZpbHRlckNvbXBvbmVudCxcbiAgICAgICAgVGFibGVGaWx0ZXJDbGFzc1BpcGUsXG4gICAgICAgIFRhYmxlSGVhZGVyV2l0aEZpbHRlcnNDb21wb25lbnQsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBUYWJsZU1vZHVsZSxcbiAgICAgICAgU2tlbGV0b24sXG4gICAgICAgIFRhYmxlQ29sdW1uVG9nZ2xlQ29tcG9uZW50LFxuICAgICAgICBCdXR0b25EaXJlY3RpdmUsXG4gICAgICAgIFRhYmxlUmVtb3ZhYmxlU29ydERpcmVjdGl2ZSxcbiAgICAgICAgVGFibGVIZWFkZXJXaXRoRmlsdGVyc1RlbXBsYXRlRGlyZWN0aXZlXG4gICAgXSxcbiAgICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuY3NzJ10sXG4gICAgcHJvdmlkZXJzOiBbVGFibGVNZXRhZGF0YVNlcnZpY2UsIFRhYmxlRGF0YVNlcnZpY2UsIFRhYmxlUHJlZmVyZW5jZXNTZXJ2aWNlXSxcbiAgICBob3N0OiB7XG4gICAgICAgICdbY2xhc3MubW5nLXRhYmxlLW5vLWhlYWRlcl0nOiAnIWlzQ2FwdGlvblZpc2libGUoKSdcbiAgICB9LFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQ8SXRlbSA9IGFueSwgU2VydmljZSA9IHVuZGVmaW5lZCwgU29ydHMgPSBhbnksIEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBhbnkgPSBhbnk+IGltcGxlbWVudHMgSVRhYmxlPEl0ZW0+IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZpbHRlcktleVByZXBlbmQgPSAnZl8nO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBGaWx0ZXJUeXBlRW51bSA9IEZpbHRlclR5cGVFbnVtO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBpbmplY3QoTG9nZ2VyU2VydmljZSkuY3JlYXRlKFRhYmxlTWV0YWRhdGFTZXJ2aWNlLmNtcFR5cGVOYW1lKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZVNlcnZpY2UgPSBpbmplY3QoTWVzc2FnZVNlcnZpY2UpO1xuICAgIHB1YmxpYyByZWFkb25seSBtZXRhZGF0YSA9IGluamVjdChUYWJsZU1ldGFkYXRhU2VydmljZSk7XG4gICAgcHVibGljIHJlYWRvbmx5IHByZWZzID0gaW5qZWN0KFRhYmxlUHJlZmVyZW5jZXNTZXJ2aWNlKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgZGF0YSA9IGluamVjdChUYWJsZURhdGFTZXJ2aWNlPEl0ZW0+KTtcblxuICAgIC8vIGRlc2NyaXB0b3JcbiAgICBwdWJsaWMgZGVzY3JpcHRvcklucHV0ID0gaW5wdXQucmVxdWlyZWQ8VGFibGVEZXNjcmlwdG9ySW5zdDxJdGVtLCBTb3J0cywgRmlsdGVycz4+KHthbGlhczogJ2Rlc2NyaXB0b3InfSk7XG5cbiAgICAvLyBkYXRhIHNvdXJjZSBpbnB1dHNcbiAgICBwdWJsaWMgaXRlbXMgPSBpbnB1dDxJdGVtW10+KCk7XG4gICAgcHVibGljIHJlc3VsdCA9IGlucHV0PERhdGFMaXN0UmVzdWx0PEl0ZW0+PigpO1xuICAgIHB1YmxpYyBsb2FkaW5nSW5wdXQgPSBpbnB1dCh1bmRlZmluZWQsIHthbGlhczogJ2xvYWRpbmcnLCB0cmFuc2Zvcm06IGJvb2xlYW5PclVuZGVmaW5lZEF0dHJpYnV0ZX0pO1xuICAgIHB1YmxpYyBkYXRhUHJvdmlkZXIgPSBpbnB1dDxJVGFibGVEYXRhUHJvdmlkZXI8SXRlbSwgU2VydmljZSwgU29ydHMsIEZpbHRlcnM+PigpO1xuXG4gICAgLy8gZXh0cmEgZmVhdHVyZXMgaW5wdXRcbiAgICBwdWJsaWMgdXNlUXVlcnlQYXJhbXMgPSBpbnB1dChmYWxzZSwge3RyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZX0pO1xuICAgIHB1YmxpYyBjZWxsQ2xpY2tFbmFibGVkID0gaW5wdXQodHJ1ZSwge3RyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZX0pO1xuICAgIHB1YmxpYyBzZWxlY3Rpb25Nb2RlID0gaW5wdXQ8J3NpbmdsZScgfCAnbXVsdGlwbGUnPignbXVsdGlwbGUnKTtcbiAgICBwdWJsaWMgc2VsZWN0aW9uRW5hYmxlZCA9IGlucHV0KGZhbHNlLCB7dHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlfSk7XG4gICAgcHVibGljIHJvd1Jlb3JkZXJFbmFibGVkSW5wdXQgPSBpbnB1dCh0cnVlLCB7YWxpYXM6ICdyb3dSZW9yZGVyRW5hYmxlZCcsIHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZX0pO1xuICAgIHB1YmxpYyByb3dSZW9yZGVyRW5hYmxlZCA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHRoaXMucm93UmVvcmRlckVuYWJsZWRJbnB1dCgpICYmIHRoaXMubWV0YWRhdGEuZGVzY3JpcHRvcigpLnJvd1Jlb3JkZXJhYmxlKTtcbiAgICBwdWJsaWMgZXhwYW5kZWRSb3dLZXlzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gdGhpcy5tZXRhZGF0YS5kZXNjcmlwdG9yKCk7XG4gICAgICAgIGlmICh0eXBlb2YgZGVzY3JpcHRvci5pc1Jvd0V4cGFuZGVkID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5kYXRhKCk/LnJlZHVjZSgoYWNjOiB7W2tleTogc3RyaW5nXTogYm9vbGVhbn0sIGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGFjY1tpdGVtW2Rlc2NyaXB0b3IudHJhY2tQcm9wZXJ0eSFdXSA9ICEhaXRlbVtkZXNjcmlwdG9yLmlzUm93RXhwYW5kZWQgYXMgc3RyaW5nXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfSwge30pO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkZXNjcmlwdG9yLmlzUm93RXhwYW5kZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGEuZGF0YSgpPy5yZWR1Y2UoKGFjYzoge1trZXk6IHN0cmluZ106IGJvb2xlYW59LCBpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBhY2NbaXRlbVtkZXNjcmlwdG9yLnRyYWNrUHJvcGVydHkhXV0gPSAoZGVzY3JpcHRvci5pc1Jvd0V4cGFuZGVkIGFzIChpdGVtOiBJdGVtKSA9PiBib29sZWFuKShpdGVtKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfSwge30pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9KTtcblxuICAgIC8vIHN0eWxpbmdcbiAgICBwdWJsaWMgY29sdW1uTGFzdE1pbldpZHRoID0gaW5wdXQ8bnVtYmVyPigpO1xuICAgIHB1YmxpYyBjb2x1bW5zQ29sc3BhbiA9IGNvbXB1dGVkKCgpID0+IHRoaXMudmlzaWJsZUNvbHVtbnMoKS5sZW5ndGggKyAodGhpcy5oYXNMYXN0Q29sdW1uKCkgPyAxIDogMCkgKyAodGhpcy5zZWxlY3Rpb25FbmFibGVkKCkgPyAxIDogMCkgKyAodGhpcy5yb3dSZW9yZGVyRW5hYmxlZCgpID8gMSA6IDApKTtcbiAgICBwdWJsaWMgaGFzVGl0bGVEaXNwbGF5ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5oZWFkZXJUaXRsZVRlbXBsYXRlKCkgfHwgdGhpcy5tZXRhZGF0YS5kZXNjcmlwdG9yKCkudGl0bGUpO1xuICAgIHB1YmxpYyBpc0NhcHRpb25WaXNpYmxlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5oZWFkZXJUZW1wbGF0ZSgpIHx8IHRoaXMuaGFzVGl0bGVEaXNwbGF5KCkgfHwgdGhpcy50YWJsZUhlYWRlckZpbHRlcnMoKS5sZW5ndGggPiAwIHx8IHRoaXMubWV0YWRhdGEuZGVzY3JpcHRvcigpLnNlYXJjaCk7XG5cbiAgICAvLyBjb21wb25lbnQgaW5wdXRzXG4gICAgcHVibGljIGdsb2JhbEZpbHRlckZpZWxkc0lucHV0ID0gaW5wdXQ8c3RyaW5nW10gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCwge2FsaWFzOiAnZ2xvYmFsRmlsdGVyRmllbGRzJ30pO1xuXG4gICAgLy8gY2VsbCBjbGlja1xuICAgIHByaXZhdGUgY2VsbENsaWNrU3ViamVjdCA9IG5ldyBTdWJqZWN0PFRhYmxlQ2VsbENsaWNrRXZlbnQ8SXRlbT4+KCk7XG4gICAgcHVibGljIGlzQ2VsbENsaWNrT2JzZXJ2ZWQgPSBzaWduYWwodGhpcy5jZWxsQ2xpY2tTdWJqZWN0Lm9ic2VydmVkKTtcbiAgICBwdWJsaWMgaXNDZWxsQ2xpY2tFbmFibGVkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jZWxsQ2xpY2tFbmFibGVkKCkgJiYgdGhpcy5pc0NlbGxDbGlja09ic2VydmVkKCkpO1xuXG4gICAgLy8gZXZlbnQgb3V0cHV0c1xuICAgIHB1YmxpYyB0YWJsZUxvYWQgPSBvdXRwdXQ8VGFibGVMb2FkRXZlbnQ+KCk7XG4gICAgcHVibGljIGNlbGxDbGljayA9IG91dHB1dEZyb21PYnNlcnZhYmxlKHRoaXMuY2VsbENsaWNrU3ViamVjdCk7XG4gICAgcHVibGljIHNlbGVjdGlvbkNoYW5nZSA9IG91dHB1dDxBcnJheTxJdGVtPj4oKTtcbiAgICBwdWJsaWMgcm93UmVvcmRlciA9IG91dHB1dDxUYWJsZVJvd1Jlb3JkZXJFdmVudD4oKTtcblxuICAgIC8vIGNvbnRlbnQgYW5kIHZpZXcgcXVlcmllc1xuICAgIHB1YmxpYyByZWFkb25seSB0ZW1wbGF0ZXMgPSBpbnB1dDxUYWJsZVRlbXBsYXRlRGlyZWN0aXZlW10+KFtdKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgY29udGVudFRlbXBsYXRlcyA9IGNvbnRlbnRDaGlsZHJlbihUYWJsZVRlbXBsYXRlRGlyZWN0aXZlKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgcHJpbWVUYWJsZSA9IHZpZXdDaGlsZChUYWJsZTxJdGVtPik7XG4gICAgcmVhZG9ubHkgI3ByaW1lVGFibGVFZmZlY3QgPSBlZmZlY3RXaXRoRGVwcyhbdGhpcy5wcmltZVRhYmxlXSwgKFt0YWJsZV0pID0+IHRoaXMuZGF0YS5zZXRQcmltZVRhYmxlKHRhYmxlKSk7XG5cbiAgICAvLyB0ZW1wbGF0ZXNcbiAgICByZWFkb25seSAjdGVtcGxhdGVzTWVyZ2VkID0gY29tcHV0ZWQoKCkgPT4gWy4uLnRoaXMuY29udGVudFRlbXBsYXRlcygpLCAuLi50aGlzLnRlbXBsYXRlcygpXSk7XG4gICAgcHVibGljIGhlYWRlclRlbXBsYXRlOiBTaWduYWw8VGVtcGxhdGVSZWY8VGFibGVUZW1wbGF0ZUNvbnRleHQ+IHwgbnVsbD4gPSBjb21wdXRlZCgoKSA9PiBmaW5kVGVtcGxhdGVCeU5hbWUoWy4uLnRoaXMuI3RlbXBsYXRlc01lcmdlZCgpXSwgJ2hlYWRlcicpKTtcbiAgICBwdWJsaWMgaGVhZGVyVGl0bGVUZW1wbGF0ZTogU2lnbmFsPFRlbXBsYXRlUmVmPFRhYmxlVGVtcGxhdGVDb250ZXh0PiB8IG51bGw+ID0gY29tcHV0ZWQoKCkgPT4gZmluZFRlbXBsYXRlQnlOYW1lKFsuLi50aGlzLiN0ZW1wbGF0ZXNNZXJnZWQoKV0sICdoZWFkZXJUaXRsZScpKTtcbiAgICBwdWJsaWMgdGl0bGVSb3dSaWdodFRlbXBsYXRlOiBTaWduYWw8VGVtcGxhdGVSZWY8VGFibGVUZW1wbGF0ZUNvbnRleHQ+IHwgbnVsbD4gPSBjb21wdXRlZCgoKSA9PiBmaW5kVGVtcGxhdGVCeU5hbWUoWy4uLnRoaXMuI3RlbXBsYXRlc01lcmdlZCgpXSwgJ2hlYWRlclRpdGxlUm93UmlnaHQnKSk7XG4gICAgcHVibGljIGNvbHVtbkN1c3RvbUxhc3RUZW1wbGF0ZTogU2lnbmFsPFRlbXBsYXRlUmVmPFRhYmxlUm93VGVtcGxhdGVDb250ZXh0PiB8IG51bGw+ID0gY29tcHV0ZWQoKCkgPT4gZmluZFRlbXBsYXRlQnlOYW1lKFsuLi50aGlzLiN0ZW1wbGF0ZXNNZXJnZWQoKV0sICdjb2x1bW5DdXN0b21MYXN0JykpO1xuICAgIHB1YmxpYyBmb290ZXJUZW1wbGF0ZTogU2lnbmFsPFRlbXBsYXRlUmVmPFRhYmxlVGVtcGxhdGVDb250ZXh0PiB8IG51bGw+ID0gY29tcHV0ZWQoKCkgPT4gZmluZFRlbXBsYXRlQnlOYW1lKFsuLi50aGlzLiN0ZW1wbGF0ZXNNZXJnZWQoKV0sICdmb290ZXInKSk7XG4gICAgcHVibGljIHJvd0V4cGFuZFRlbXBsYXRlOiBTaWduYWw8VGVtcGxhdGVSZWY8VGFibGVSb3dUZW1wbGF0ZUNvbnRleHQ+IHwgbnVsbD4gPSBjb21wdXRlZCgoKSA9PiBmaW5kVGVtcGxhdGVCeU5hbWUoWy4uLnRoaXMuI3RlbXBsYXRlc01lcmdlZCgpXSwgJ3Jvd0V4cGFuZENvbnRlbnQnKSk7XG4gICAgcHVibGljIGNvbHVtbkhlYWRlclRlbXBsYXRlOiBTaWduYWw8VGVtcGxhdGVSZWY8VGFibGVDb2x1bW5UZW1wbGF0ZUNvbnRleHQ+IHwgbnVsbD4gPSBjb21wdXRlZCgoKSA9PiBmaW5kVGVtcGxhdGVCeU5hbWUoWy4uLnRoaXMuI3RlbXBsYXRlc01lcmdlZCgpXSwgJ2NvbHVtbkhlYWRlcicpKTtcblxuICAgIC8vIGRhdGEgcHJvdmlkZXIgYW5kIGl0ZW1zXG4gICAgcHVibGljIGlzTGF6eSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZGF0YVByb3ZpZGVyKCk/LmlzTGF6eSA9PT0gdHJ1ZSk7XG4gICAgcHVibGljIGlzUGFnaW5hdGlvbiA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZGF0YS5wYWdpbmF0aW9uTW9kZSgpID09PSBUYWJsZVBhZ2luYXRpb25Nb2RlRW51bS5QYWdpbmF0aW9uKTtcblxuICAgIC8vIHZpc3VhbFxuICAgIHB1YmxpYyBjbGFzc05hbWUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGxldCBjbGFzc05hbWUgPSB0aGlzLm1ldGFkYXRhLmRlc2NyaXB0b3IoKS5jbGFzc05hbWUgPz8gJyc7XG4gICAgICAgIHN3aXRjaCAodGhpcy5tZXRhZGF0YS5kZXNjcmlwdG9yKCkuc2l6ZSkge1xuICAgICAgICAgICAgY2FzZSBUYWJsZVNpemVFbnVtLlNtYWxsOlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZSArPSAnIHAtZGF0YXRhYmxlLXNtJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICAgICAgY2FzZSBUYWJsZVNpemVFbnVtLkxhcmdlOlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZSArPSAnIHAtZGF0YXRhYmxlLWxnJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tZXRhZGF0YS5kZXNjcmlwdG9yKCkuaGFzR3JpZGxpbmVzKSB7XG4gICAgICAgICAgICBjbGFzc05hbWUgKz0gJyBwLWRhdGF0YWJsZS1ncmlkbGluZXMnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbGFzc05hbWU7XG4gICAgfSk7XG5cbiAgICAvLyBjb2x1bW5zXG4gICAgcHVibGljIHZpc2libGVDb2x1bW5zID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5wcmVmcy5jb2x1bW5zV2l0aFByZWZzKCkuZmlsdGVyKGNvbCA9PiBjb2wuaXNWaXNpYmxlKSk7XG4gICAgcHVibGljIGFyZUNvbHVtbnNSZW9yZGVyYWJsZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMucHJlZnMuY29sdW1uc1dpdGhQcmVmcygpLnNvbWUoY29sID0+IGNvbC5kZXNjcmlwdG9yLmlzUmVvcmRlcmFibGUpKTtcbiAgICBwdWJsaWMgYXJlQ29sdW1uc1RvZ2dsZWFibGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnByZWZzLmNvbHVtbnNXaXRoUHJlZnMoKS5zb21lKGNvbCA9PiBjb2wuZGVzY3JpcHRvci5pc1RvZ2dsZWFibGUpKTtcblxuICAgIC8vIGZpbHRlciwgc29ydFxuICAgIHB1YmxpYyBoYXNDb2x1bW5GaWx0ZXJzID0gY29tcHV0ZWQoXG4gICAgICAgICgpID0+XG4gICAgICAgICAgICAodGhpcy5tZXRhZGF0YS5kZWZhdWx0RmlsdGVyRGlzcGxheVR5cGUgPT09IEZpbHRlckRpc3BsYXlUeXBlRW51bS5PdmVybGF5V2l0aFRhZyAmJlxuICAgICAgICAgICAgICAgIHRoaXMubWV0YWRhdGEuZmlsdGVyRGVzY3JpcHRvcnMoKS5zb21lKGQgPT4gZC5kaXNwbGF5VHlwZSA9PT0gRmlsdGVyRGlzcGxheVR5cGVFbnVtLkNvbHVtbikpIHx8XG4gICAgICAgICAgICAodGhpcy5tZXRhZGF0YS5kZWZhdWx0RmlsdGVyRGlzcGxheVR5cGUgPT09IEZpbHRlckRpc3BsYXlUeXBlRW51bS5Db2x1bW4gJiYgdGhpcy5tZXRhZGF0YS5maWx0ZXJEZXNjcmlwdG9ycygpLnNvbWUoZCA9PiBkLmRpc3BsYXlUeXBlID09IG51bGwpKVxuICAgICk7XG4gICAgcHVibGljIHRhYmxlSGVhZGVyRmlsdGVycyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgLy8gc3RhdGljYWxseSBkZWZpbmVkIGZpbHRlcnMgQU5EIGdlbmVyaWMgZmlsdGVyc1xuICAgICAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5tZXRhZGF0YVxuICAgICAgICAgICAgLmZpbHRlcnMoKVxuICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICBkID0+XG4gICAgICAgICAgICAgICAgICAgIChkLmRlc2NyaXB0b3IuZGlzcGxheVR5cGUgPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgW0ZpbHRlckRpc3BsYXlUeXBlRW51bS5PdmVybGF5V2l0aFRhZywgRmlsdGVyRGlzcGxheVR5cGVFbnVtLkRpcmVjdElucHV0XS5pbmNsdWRlcyh0aGlzLm1ldGFkYXRhLmRlZmF1bHRGaWx0ZXJEaXNwbGF5VHlwZSkpIHx8XG4gICAgICAgICAgICAgICAgICAgIChkLmRlc2NyaXB0b3IuZGlzcGxheVR5cGUgIT0gbnVsbCAmJiBbRmlsdGVyRGlzcGxheVR5cGVFbnVtLk92ZXJsYXlXaXRoVGFnLCBGaWx0ZXJEaXNwbGF5VHlwZUVudW0uRGlyZWN0SW5wdXRdLmluY2x1ZGVzKGQuZGVzY3JpcHRvci5kaXNwbGF5VHlwZSkpXG4gICAgICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBmaWx0ZXJzLmNvbmNhdCh0aGlzLm1ldGFkYXRhLmdlbmVyaWNGaWx0ZXJzKCkpO1xuICAgIH0pO1xuICAgIHByb3RlY3RlZCByZXF1aXJlZEZpbHRlcnNNaXNzaW5nID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBwYXJhbXNXaXRoRGVmYXVsdHMgPSB0aGlzLmRhdGEucGFyYW1zKCkgPz8gdGhpcy5tZXRhZGF0YS5kZWZhdWx0UGFyYW1zKCk7XG4gICAgICAgIGNvbnN0IHJlcXVpcmVkRmlsdGVycyA9IHRoaXMubWV0YWRhdGFcbiAgICAgICAgICAgIC5maWx0ZXJzKClcbiAgICAgICAgICAgIC5maWx0ZXIoZiA9PiBmLmRlc2NyaXB0b3IuaXNSZXF1aXJlZClcbiAgICAgICAgICAgIC5tYXAoZiA9PiBmLmRlc2NyaXB0b3IucHJvcGVydHkpO1xuICAgICAgICByZXR1cm4gcmVxdWlyZWRGaWx0ZXJzLnNvbWUoZmlsdGVyUHJvcGVydHkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gcGFyYW1zV2l0aERlZmF1bHRzLmZpbHRlcnM/LltmaWx0ZXJQcm9wZXJ0eV07XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIGZpbHRlciA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgICAgZmlsdGVyLm1hdGNoTW9kZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgICAgKCEoWydleGlzdHMnLCAnZG9lc05vdEV4aXN0J10gc2F0aXNmaWVzIEZpbHRlck1hdGNoTW9kZUV4dGVuZGVkVHlwZVtdKS5pbmNsdWRlcyhmaWx0ZXIubWF0Y2hNb2RlKSAmJiBpc0ZpbHRlclZhbHVlQmxhbmsoZmlsdGVyLnZhbHVlKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcHVibGljIGhhc0xhc3RDb2x1bW4gPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNvbHVtbkN1c3RvbUxhc3RUZW1wbGF0ZSgpIHx8IHRoaXMuYXJlQ29sdW1uc1RvZ2dsZWFibGUoKSB8fCB0aGlzLmFyZUNvbHVtbnNSZW9yZGVyYWJsZSgpKTtcblxuICAgIC8vIHRhYmxlIGxvYWQgcGFyYW1zXG4gICAgcHJpdmF0ZSBsYXN0TGF6eUxvYWRFdmVudD86IFRhYmxlTGF6eUxvYWRFdmVudDtcbiAgICBwcml2YXRlIGxhc3RQYXJhbXNXaXRoRGVmYXVsdHM/OiBEYXRhTGlzdFBhcmFtcztcblxuICAgIC8vIG90aGVyXG4gICAgcHJpdmF0ZSBuYXZpZ2F0aW9uT3V0T2ZUYWJsZUluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICBwcml2YXRlIG5hdmlnYXRpb25JblRhYmxlSW5Qcm9ncmVzcyA9IGZhbHNlO1xuXG4gICAgLy8gc3Vic2NyaXB0aW9ucyBhbmQgcmVmc1xuICAgICNwcmV2aW91c0RhdGFQcm92aWRlcj86IElUYWJsZURhdGFQcm92aWRlcjxJdGVtLCBTZXJ2aWNlLCBTb3J0cywgRmlsdGVycz47XG5cbiAgICAjZGF0YVByb3ZpZGVyRWFnZXJGaXJzdExvYWQgPSBlZmZlY3RXaXRoRGVwcyhbdGhpcy5kYXRhUHJvdmlkZXJdLCAoW2RhdGFQcm92aWRlcl0pID0+IHtcbiAgICAgICAgaWYgKGRhdGFQcm92aWRlcj8uaXNMYXp5ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhpcy5sb2FkVGFibGVXaXRoRGF0YVByb3ZpZGVyKHRoaXMubWV0YWRhdGEuZGVmYXVsdFBhcmFtcygpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLiNwcmV2aW91c0RhdGFQcm92aWRlciAmJiBkYXRhUHJvdmlkZXIpIHtcbiAgICAgICAgICAgIHRoaXMucmVsb2FkKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLiNwcmV2aW91c0RhdGFQcm92aWRlciA9IGRhdGFQcm92aWRlcjtcbiAgICB9KTtcbiAgICAjZGF0YVByb3ZpZGVyUmVsb2FkU3Vic2NyaXB0aW9uID0gdG9PYnNlcnZhYmxlKHRoaXMuZGF0YVByb3ZpZGVyKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcChkcCA9PiBkcD8udGFibGVSZWxvYWQkID8/IG9mKHt9KSksXG4gICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWxvYWQoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICNyb3V0ZVF1ZXJ5UGFyYW1zU3Vic2NyaXB0aW9uID0gdG9PYnNlcnZhYmxlKHRoaXMudXNlUXVlcnlQYXJhbXMpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKHVzZVFwID0+ICh1c2VRcCA/IHRoaXMucm91dGUucXVlcnlQYXJhbXMgOiBORVZFUikpLFxuICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKHFwID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZFRhYmxlRnJvbVJvdXRlVXBkYXRlKHFwKTtcbiAgICAgICAgfSk7XG4gICAgI3JvdXRlckV2ZW50c1N1YnNjcmlwdGlvbiA9IHRvT2JzZXJ2YWJsZSh0aGlzLnVzZVF1ZXJ5UGFyYW1zKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcCh1c2VRcCA9PiAodXNlUXAgPyB0aGlzLnJvdXRlci5ldmVudHMgOiBORVZFUikpLFxuICAgICAgICAgICAgZmlsdGVyKFxuICAgICAgICAgICAgICAgIGUgPT5cbiAgICAgICAgICAgICAgICAgICAgKGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQgJiYgZS51cmwuc3BsaXQoJz8nKVswXS5zcGxpdCgnIycpWzBdICE9PSB0aGlzLnJvdXRlci51cmwuc3BsaXQoJz8nKVswXS5zcGxpdCgnIycpWzBdKSB8fFxuICAgICAgICAgICAgICAgICAgICBlIGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCB8fFxuICAgICAgICAgICAgICAgICAgICBlIGluc3RhbmNlb2YgTmF2aWdhdGlvbkNhbmNlbCB8fFxuICAgICAgICAgICAgICAgICAgICBlIGluc3RhbmNlb2YgTmF2aWdhdGlvbkVycm9yXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKGUgPT4ge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uT3V0T2ZUYWJsZUluUHJvZ3Jlc3MgPSBlIGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0O1xuICAgICAgICB9KTtcbiAgICAjYWZ0ZXJOZXh0UmVuZGVyUmVmID0gYWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcbiAgICAgICAgdGhpcy5pc0NlbGxDbGlja09ic2VydmVkLnNldCh0aGlzLmNlbGxDbGlja1N1YmplY3Qub2JzZXJ2ZWQpO1xuICAgIH0pO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMubWV0YWRhdGEuc2V0U2lnbmFsU291cmNlcyh0aGlzLmRlc2NyaXB0b3JJbnB1dCwgdGhpcy5nbG9iYWxGaWx0ZXJGaWVsZHNJbnB1dCk7XG4gICAgICAgIHRoaXMuZGF0YS5zZXREYXRhU291cmNlcyh0aGlzLml0ZW1zLCB0aGlzLnJlc3VsdCwgdGhpcy5kYXRhUHJvdmlkZXIsIHRoaXMubG9hZGluZ0lucHV0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVsb2FkKGVtaXRFdmVudD86IFRhYmxlUmVsb2FkRXZlbnQ8U29ydHMsIEZpbHRlcnM+KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IGVtaXRFdmVudD8ucGFyYW1zID8gKGVtaXRFdmVudD8ucGFyYW1zIGFzIERhdGFMaXN0UGFyYW1zKSA6IGVtaXRFdmVudD8ucmVzZXRQYXJhbXMgPyB1bmRlZmluZWQgOiB0aGlzLmxhc3RQYXJhbXNXaXRoRGVmYXVsdHM7XG4gICAgICAgIGNvbnN0IHJlbG9hZFBhcmFtcyA9IG1lcmdlRGF0YUxpc3RQYXJhbXNXaXRoRGVmYXVsdHMocGFyYW1zID8/IHt9LCB0aGlzLm1ldGFkYXRhLmRlZmF1bHRQYXJhbXMoKSk7XG4gICAgICAgIHRoaXMubG9hZFRhYmxlV2l0aERhdGFQcm92aWRlcihyZWxvYWRQYXJhbXMsIGVtaXRFdmVudD8uZW1pdEV2ZW50ID8/IGZhbHNlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25UYWJsZUxhenlMb2FkKGV2ZW50OiBUYWJsZUxhenlMb2FkRXZlbnQpIHtcbiAgICAgICAgdGhpcy5sYXN0TGF6eUxvYWRFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IGZyb21UYWJsZUxvYWRUb0RhdGFMaXN0UGFyYW1zKGV2ZW50KTtcblxuICAgICAgICBpZiAodGhpcy51c2VRdWVyeVBhcmFtcygpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMubmF2aWdhdGlvbk91dE9mVGFibGVJblByb2dyZXNzICYmICF0aGlzLm5hdmlnYXRpb25JblRhYmxlSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgIC8vIHRoaXMgY2hlY2sgaXMgbmVjZXNzYXJ5OiBmcm9tIHNvbWUgcmVhc29uLCBwcmltZU5HIGNvbW1pdHMgb25lIGxhc3QgbGF6eSBsb2FkIGV2ZW50IHdoZW5ldmVyIGFueSBhbmd1bGFyIHJvdXRlciBuYXZpZ2F0aW9uIG9jY3Vyc1xuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvbkluVGFibGVJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdQYXJhbXMgPSBkYXRhTGlzdFBhcmFtc1RvVXJsUXVlcnkocGFyYW1zLCB0aGlzLm1ldGFkYXRhLmRlZmF1bHRQYXJhbXMoKSwge3ByZXBlbmRGaWx0ZXJOYW1lOiB0aGlzLmZpbHRlcktleVByZXBlbmQsIHNraXBQcmVzZXREZWZhdWx0c0xpbWl0OiB0cnVlfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3UGFyYW1zV2l0aFBhcmFtc1RvUmVtb3ZlID0gey4uLm5ld1BhcmFtc307XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFFwID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcztcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFFwKSB7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGN1cnJlbnRRcClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoayA9PiAoay5zdGFydHNXaXRoKHRoaXMuZmlsdGVyS2V5UHJlcGVuZCkgfHwgWydvZmZzZXQnLCAnbGltaXQnLCAnc29ydCcsICdxJ10uaW5kZXhPZihrKSA+PSAwKSAmJiBuZXdQYXJhbXNba10gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKGsgPT4gKG5ld1BhcmFtc1dpdGhQYXJhbXNUb1JlbW92ZVtrXSA9IG51bGwpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlclxuICAgICAgICAgICAgICAgICAgICAubmF2aWdhdGUoW10sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlVXJsOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXM6IG5ld1BhcmFtc1dpdGhQYXJhbXNUb1JlbW92ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZSdcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uSW5UYWJsZUluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXNXaXRoRGVmYXVsdHMgPSBtZXJnZURhdGFMaXN0UGFyYW1zV2l0aERlZmF1bHRzKHBhcmFtcywgdGhpcy5tZXRhZGF0YS5kZWZhdWx0UGFyYW1zKCkpO1xuICAgICAgICAgICAgdGhpcy5kYXRhLnNldFBhcmFtcyhwYXJhbXNXaXRoRGVmYXVsdHMpO1xuICAgICAgICAgICAgdGhpcy5sb2FkVGFibGVXaXRoRGF0YVByb3ZpZGVyKHBhcmFtc1dpdGhEZWZhdWx0cyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25UYWJsZUZpbHRlcihldmVudDogVGFibGVGaWx0ZXJFdmVudCkge1xuICAgICAgICBpZiAodGhpcy51c2VRdWVyeVBhcmFtcygpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyYW1zID0gZnJvbVRhYmxlTG9hZFRvRGF0YUxpc3RQYXJhbXMoe2ZpbHRlcnM6IGV2ZW50LmZpbHRlcnN9KTtcbiAgICAgICAgY29uc3QgcGFyYW1zV2l0aERlZmF1bHRzID0gbWVyZ2VEYXRhTGlzdFBhcmFtc1dpdGhEZWZhdWx0cyhwYXJhbXMsIHRoaXMubWV0YWRhdGEuZGVmYXVsdFBhcmFtcygpKTtcblxuICAgICAgICAvLyBpZiB0YWJsZSBkb2Vzbid0IHVzZSBsYXp5IGxvYWRpbmcsIGZpbHRlciBwYXJhbXMgbmVlZCB0byBiZSBzZXQgaGVyZVxuICAgICAgICAvLyBiZWNhdXNlIHRoZSBvblRhYmxlTGF6eUxvYWQgZXZlbnQgaXMgbm90IGVtaXR0ZWRcbiAgICAgICAgaWYgKCF0aGlzLmlzTGF6eSgpKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuc2V0UGFyYW1zKHBhcmFtc1dpdGhEZWZhdWx0cyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25DZWxsQ2xpY2soZXZlbnQ6IEV2ZW50LCBjb2w6IENvbHVtbkRlc2NyaXB0b3I8YW55LCBJdGVtPiwgaXRlbTogSXRlbSwgaWR4OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzQ2VsbENsaWNrRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGFibGVFdmVudDogVGFibGVDZWxsQ2xpY2tFdmVudDxJdGVtPiA9IHtcbiAgICAgICAgICAgIGNvbHVtbjogY29sLFxuICAgICAgICAgICAgcm93SXRlbTogaXRlbSxcbiAgICAgICAgICAgIHJvd0luZGV4OiBpZHgsXG4gICAgICAgICAgICBldmVudDogZXZlbnRcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5jZWxsQ2xpY2tTdWJqZWN0Lm5leHQodGFibGVFdmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uU2VsZWN0aW9uQ2hhbmdlKGV2ZW50OiBBcnJheTxJdGVtPikge1xuICAgICAgICB0aGlzLmRhdGEuc2VsZWN0ZWRJdGVtcy5zZXQoZXZlbnQpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Sb3dSZW9yZGVyKGV2ZW50OiBUYWJsZVJvd1Jlb3JkZXJFdmVudCkge1xuICAgICAgICB0aGlzLnJvd1Jlb3JkZXIuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkVGFibGVXaXRoRGF0YVByb3ZpZGVyKHBhcmFtc1dpdGhEZWZhdWx0czogRGF0YUxpc3RQYXJhbXMsIGVtaXRFdmVudCA9IHRydWUpIHtcbiAgICAgICAgaWYgKHRoaXMucmVxdWlyZWRGaWx0ZXJzTWlzc2luZygpICYmIHRoaXMuaXNMYXp5KCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc0ZldGNoZWQgPSB0aGlzLmRhdGEuZmV0Y2hXaXRoRGF0YVByb3ZpZGVyKHBhcmFtc1dpdGhEZWZhdWx0cywgZXJyb3IgPT4ge1xuICAgICAgICAgICAgdGFibGVOb3RpZmljYXRpb25FcnJvcih0aGlzLnRyYW5zbGF0ZSwgdGhpcy5tZXNzYWdlU2VydmljZSwgdGhpcy5tZXRhZGF0YS5kZXNjcmlwdG9yKCksIGVycm9yKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbW1vbnNFcnJvciA9IGZyb21TdWJzY3JpYmVFcnJvcihlcnJvciwgJ1RhYmxlQ29tcG9uZW50RXJyb3InLCB7XG4gICAgICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXNXaXRoRGVmYXVsdHNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIubG9nKGNvbW1vbnNFcnJvciwgZ2V0RXJyb3JMb2dMZXZlbChjb21tb25zRXJyb3IpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGlzRmV0Y2hlZCkge1xuICAgICAgICAgICAgdGhpcy5sYXN0UGFyYW1zV2l0aERlZmF1bHRzID0gcGFyYW1zV2l0aERlZmF1bHRzO1xuICAgICAgICAgICAgaWYgKGVtaXRFdmVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhYmxlRXZlbnQ6IFRhYmxlTG9hZEV2ZW50ID0ge1xuICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiB0aGlzLmxhc3RMYXp5TG9hZEV2ZW50LFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtc1dpdGhEZWZhdWx0c1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZUxvYWQuZW1pdCh0YWJsZUV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgbG9hZFRhYmxlRnJvbVJvdXRlVXBkYXRlKHVybFBhcmFtczogUGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtc1dpdGhEZWZhdWx0cyA9IG1lcmdlRGF0YUxpc3RQYXJhbXNXaXRoRGVmYXVsdHMoXG4gICAgICAgICAgICBmcm9tVXJsUXVlcnlUb0RhdGFMaXN0UGFyYW1zKHVybFBhcmFtcywge1xuICAgICAgICAgICAgICAgIHByZXBlbmRGaWx0ZXJOYW1lOiB0aGlzLmZpbHRlcktleVByZXBlbmQsXG4gICAgICAgICAgICAgICAgc2VhcmNoQXNHbG9iYWw6IHRydWVcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGhpcy5tZXRhZGF0YS5kZWZhdWx0UGFyYW1zKClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5kYXRhLnNldFBhcmFtcyhwYXJhbXNXaXRoRGVmYXVsdHMsIHRydWUpO1xuICAgICAgICB0aGlzLmxvYWRUYWJsZVdpdGhEYXRhUHJvdmlkZXIocGFyYW1zV2l0aERlZmF1bHRzKTtcbiAgICB9XG59XG4iLCI8ZGl2PlxuICAgIDwhLS0gTVVTVCBOT1QgdXNlIG9ic2VydmFibGUgZm9yIHZhbHVlIHdoZW4gdXNpbmcgdmlydHVhbCBzY3JvbGwgLSBkb2VzIG5vdCB3b3JrIGZvciBzb21lIHJlYXNvbiAtLT5cbiAgICBAaWYgKGRhdGEuaXNBbGxQYWdpbmF0aW9uTWV0YUluaXRpYWxpemVkKCkpIHtcbiAgICAgICAgPHAtdGFibGVcbiAgICAgICAgICAgIFt2YWx1ZV09XCJyZXF1aXJlZEZpbHRlcnNNaXNzaW5nKCkgPyBbXSA6IGRhdGEuZGF0YSgpXCJcbiAgICAgICAgICAgIFtkYXRhS2V5XT1cIm1ldGFkYXRhLmRlc2NyaXB0b3IoKS50cmFja1Byb3BlcnR5XCJcbiAgICAgICAgICAgIFtsYXp5XT1cImlzTGF6eSgpXCJcbiAgICAgICAgICAgIFtsb2FkaW5nXT1cImRhdGEubG9hZGluZygpXCJcbiAgICAgICAgICAgIFtwYWdpbmF0b3JdPVwiaXNQYWdpbmF0aW9uKClcIlxuICAgICAgICAgICAgW3Jvd3NdPVwiZGF0YS5yb3dzKClcIlxuICAgICAgICAgICAgW2ZpcnN0XT1cImRhdGEub2Zmc2V0KClcIlxuICAgICAgICAgICAgW3RvdGFsUmVjb3Jkc109XCJkYXRhLmNvdW50KClcIlxuICAgICAgICAgICAgW3Jvd3NQZXJQYWdlT3B0aW9uc109XCJtZXRhZGF0YS5yb3dzUGVyUGFnZU9wdGlvbnMoKVwiXG4gICAgICAgICAgICBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInRydWVcIlxuICAgICAgICAgICAgW2N1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGVdPVwiJ21uZ1RhYmxlLnBhZ2luYXRpb25Nc2cnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFttdWx0aVNvcnRNZXRhXT1cImRhdGEuc29ydE1ldGEoKVwiXG4gICAgICAgICAgICBbZmlsdGVyc109XCJkYXRhLmZpbHRlclN0YXRlcygpXCJcbiAgICAgICAgICAgIFtnbG9iYWxGaWx0ZXJGaWVsZHNdPVwibWV0YWRhdGEuc2VhcmNoRmllbGRzKClcIlxuICAgICAgICAgICAgc29ydE1vZGU9XCJtdWx0aXBsZVwiXG4gICAgICAgICAgICBbc2VsZWN0aW9uXT1cIltdXCJcbiAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICBbc2VsZWN0aW9uTW9kZV09XCJzZWxlY3Rpb25FbmFibGVkKCkgPyBzZWxlY3Rpb25Nb2RlKCkgOiBudWxsXCJcbiAgICAgICAgICAgIFtzY3JvbGxhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgc2Nyb2xsSGVpZ2h0PVwiZmxleFwiXG4gICAgICAgICAgICBbcm93SG92ZXJdPVwibWV0YWRhdGEuZGVzY3JpcHRvcigpLmhhc0hvdmVyXCJcbiAgICAgICAgICAgIFtzdHlsZUNsYXNzXT1cImNsYXNzTmFtZSgpXCJcbiAgICAgICAgICAgIFtyZXNpemFibGVDb2x1bW5zXT1cIm1ldGFkYXRhLmRlc2NyaXB0b3IoKS5oYXNSZXNpemFibGVDb2x1bW5zXCJcbiAgICAgICAgICAgIFtjb2x1bW5SZXNpemVNb2RlXT1cIm1ldGFkYXRhLmRlc2NyaXB0b3IoKS5jb2x1bW5SZXNpemVNb2RlID8/ICdleHBhbmQnXCJcbiAgICAgICAgICAgIFtyZW9yZGVyYWJsZUNvbHVtbnNdPVwiYXJlQ29sdW1uc1Jlb3JkZXJhYmxlKClcIlxuICAgICAgICAgICAgcGFnaW5hdG9yRHJvcGRvd25BcHBlbmRUbz1cImJvZHlcIlxuICAgICAgICAgICAgW2NvbHVtbnNdPVwidmlzaWJsZUNvbHVtbnMoKVwiXG4gICAgICAgICAgICBbZXhwYW5kZWRSb3dLZXlzXT1cImV4cGFuZGVkUm93S2V5cygpXCJcbiAgICAgICAgICAgIChvbkNvbFJlc2l6ZSk9XCJwcmVmcy5vbkNvbHVtblJlc2l6ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChvbkNvbFJlb3JkZXIpPVwicHJlZnMub25Db2x1bW5SZW9yZGVyKCRldmVudClcIlxuICAgICAgICAgICAgKG9uTGF6eUxvYWQpPVwib25UYWJsZUxhenlMb2FkKCRldmVudClcIlxuICAgICAgICAgICAgKG9uRmlsdGVyKT1cIm9uVGFibGVGaWx0ZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAob25Sb3dSZW9yZGVyKT1cIm9uUm93UmVvcmRlcigkZXZlbnQpXCJcbiAgICAgICAgICAgIG1uZ1JlbW92YWJsZVNvcnQ+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2NhcHRpb24+XG4gICAgICAgICAgICAgICAgQGlmIChpc0NhcHRpb25WaXNpYmxlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChoZWFkZXJUZW1wbGF0ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlclRlbXBsYXRlKCk7IGNvbnRleHQ6IHtkYXRhOiBkYXRhLmRhdGEoKSwgdG90YWxDb3VudDogZGF0YS5jb3VudCgpLCB0YWJsZTogdGhpc31cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtbmctdGFibGUtaGVhZGVyLXdpdGgtZmlsdGVyc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwibWV0YWRhdGEuZGVzY3JpcHRvcigpLnRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21ldGFkYXRhXT1cInRhYmxlSGVhZGVyRmlsdGVycygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dlbmVyaWNGaWx0ZXJEZXNjcmlwdG9yXT1cIm1ldGFkYXRhLmdlbmVyaWNGaWx0ZXJEZXNjcmlwdG9yKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbW9kZWxdPVwibWV0YWRhdGEuZGVzY3JpcHRvcigpLm1vZGVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VuYWJsZVNlYXJjaF09XCJtZXRhZGF0YS5kZXNjcmlwdG9yKCkuc2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaF09XCJkYXRhLnNlYXJjaE1ldGEoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hMaW1pdFdvcmRNYXhdPVwibWV0YWRhdGEuZGVzY3JpcHRvcigpLnNlYXJjaExpbWl0TWF4V29yZHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZW5hYmxlQ2FzZVNlbnNpdGl2ZV09XCJpc0xhenkoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGhhc1RpdGxlRGlzcGxheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbW5nVGFibGVIZWFkZXJXaXRoRmlsdGVyc1RlbXBsYXRlIG5hbWU9XCJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaGVhZGVyVGl0bGVUZW1wbGF0ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyVGl0bGVUZW1wbGF0ZSgpOyBjb250ZXh0OiB7ZGF0YTogZGF0YS5kYXRhKCksIHRvdGFsQ291bnQ6IGRhdGEuY291bnQoKSwgdGFibGU6IHRoaXN9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSBpZiAobWV0YWRhdGEuZGVzY3JpcHRvcigpLnRpdGxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cInAtMCBtLTBcIj57eyBtZXRhZGF0YS5kZXNjcmlwdG9yKCkudGl0bGUhIHwgdHJhbnNsYXRlIH19PC9oNT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAodGl0bGVSb3dSaWdodFRlbXBsYXRlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtbmdUYWJsZUhlYWRlcldpdGhGaWx0ZXJzVGVtcGxhdGUgbmFtZT1cInRpdGxlUm93UmlnaHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGl0bGVSb3dSaWdodFRlbXBsYXRlKClcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21uZy10YWJsZS1oZWFkZXItd2l0aC1maWx0ZXJzPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNoZWFkZXI+XG4gICAgICAgICAgICAgICAgQGlmICghbWV0YWRhdGEuZGVzY3JpcHRvcigpLmhpZGVIZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwibW5nLXRhYmxlLWhlYWRlclwiIFtjbGFzc109XCJtZXRhZGF0YS5kZXNjcmlwdG9yKCkuaGVhZGVyQ2xhc3NOYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHNlbGVjdGlvbkVuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoc2VsZWN0aW9uTW9kZSgpID09PSAnbXVsdGlwbGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIm1pbi13aWR0aDogMzZweFwiIHBGcm96ZW5Db2x1bW4gW2Zyb3plbl09XCJtZXRhZGF0YS5kZXNjcmlwdG9yKCkuc2VsZWN0aW9uQ29sdW1uRnJvemVuID8/IHRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLXRhYmxlSGVhZGVyQ2hlY2tib3ggLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBXZSBuZWVkIHRoZSBsaW5lIGJlbG93LCBiZWNhdXNlIG90aGVyd2lzZSBwLXRhYmxlUmFkaW9CdXR0b24gc2hpZnRzIHRoZSByZXN0IG9mIHRoZSBjb2x1bW5zIGluIHRhYmxlIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJtaW4td2lkdGg6IDM2cHhcIiBwRnJvemVuQ29sdW1uIFtmcm96ZW5dPVwibWV0YWRhdGEuZGVzY3JpcHRvcigpLnNlbGVjdGlvbkNvbHVtbkZyb3plbiA/PyB0cnVlXCI+PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKG1ldGFkYXRhLmRlc2NyaXB0b3IoKS5yb3dFeHBhbmRhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCIgcEZyb3plbkNvbHVtbiBbZnJvemVuXT1cInRydWVcIj48L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChyb3dSZW9yZGVyRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGNvbCBvZiB2aXNpYmxlQ29sdW1ucygpOyB0cmFjayBjb2wuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3NvcnRhYmxlQ29sdW1uVEhUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChjb2x1bW5IZWFkZXJUZW1wbGF0ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uSGVhZGVyVGVtcGxhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge2RhdGE6IGRhdGEuZGF0YSgpLCB0b3RhbENvdW50OiBkYXRhLmNvdW50KCksIHByb3BlcnR5OiBjb2wuZGVzY3JpcHRvci5wcm9wZXJ0eSwgdGFibGU6IHRoaXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb2wuZGVzY3JpcHRvci50aXRsZSAmJiAhY29sLmRlc2NyaXB0b3IudGl0bGVVc2VNb2RlbEJhc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gY29sLmRlc2NyaXB0b3IudGl0bGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKGNvbC5kZXNjcmlwdG9yLnRpdGxlID8/IGNvbC5kZXNjcmlwdG9yLnByb3BlcnR5IHwgbW5nSTE4blByb3BlcnR5OiBtZXRhZGF0YS5kZXNjcmlwdG9yKCkubW9kZWwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLXNvcnRJY29uIFtmaWVsZF09XCJjb2wuc29ydD8ucHJvcGVydHlcIiBjbGFzcz1cImZsZXhcIj48L3Atc29ydEljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub25Tb3J0YWJsZUNvbHVtblRIVGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoY29sdW1uSGVhZGVyVGVtcGxhdGUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkhlYWRlclRlbXBsYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtkYXRhOiBkYXRhLmRhdGEoKSwgdG90YWxDb3VudDogZGF0YS5jb3VudCgpLCBwcm9wZXJ0eTogY29sLmRlc2NyaXB0b3IucHJvcGVydHksIHRhYmxlOiB0aGlzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbC5kZXNjcmlwdG9yLnRpdGxlICYmICFjb2wuZGVzY3JpcHRvci50aXRsZVVzZU1vZGVsQmFzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGNvbC5kZXNjcmlwdG9yLnRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKGNvbC5kZXNjcmlwdG9yLnRpdGxlID8/IGNvbC5kZXNjcmlwdG9yLnByb3BlcnR5IHwgbW5nSTE4blByb3BlcnR5OiBtZXRhZGF0YS5kZXNjcmlwdG9yKCkubW9kZWwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChjb2wuZGVzY3JpcHRvci5pc1Jlb3JkZXJhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFJlc2l6YWJsZUNvbHVtblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFJlb3JkZXJhYmxlQ29sdW1uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiY29sLmRlc2NyaXB0b3IucHJvcGVydHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BTb3J0YWJsZUNvbHVtbl09XCJjb2wuc29ydD8ucHJvcGVydHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BTb3J0YWJsZUNvbHVtbkRpc2FibGVkXT1cIiFjb2wuc29ydFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiY29sLndpZHRoID8gY29sLndpZHRoICsgJ3B4JyA6IGNvbC5kZXNjcmlwdG9yLndpZHRoICsgJyUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwiY29sLndpZHRoID8gbnVsbCA6IGNvbC5kZXNjcmlwdG9yLm1pbldpZHRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5tYXgtd2lkdGgucHhdPVwiY29sLndpZHRoID8/IGNvbC5kZXNjcmlwdG9yLm1heFdpZHRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJjb2wuZGVzY3JpcHRvci5oZWFkZXJDbGFzc05hbWUgfCBtbmdUYWJsZUZpbHRlckNsYXNzOiBjb2wuZmlsdGVyPy5kZXNjcmlwdG9yIDogaGFzQ29sdW1uRmlsdGVycygpICYmICFjb2wud2lkdGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb2wuc29ydCA/IHNvcnRhYmxlQ29sdW1uVEhUZW1wbGF0ZSA6IG5vblNvcnRhYmxlQ29sdW1uVEhUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBSZXNpemFibGVDb2x1bW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJjb2wuZGVzY3JpcHRvci5wcm9wZXJ0eVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcFNvcnRhYmxlQ29sdW1uXT1cImNvbC5zb3J0Py5wcm9wZXJ0eVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcFNvcnRhYmxlQ29sdW1uRGlzYWJsZWRdPVwiIWNvbC5zb3J0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJjb2wud2lkdGggPyBjb2wud2lkdGggKyAncHgnIDogY29sLmRlc2NyaXB0b3Iud2lkdGggKyAnJSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJjb2wud2lkdGggPyBudWxsIDogY29sLmRlc2NyaXB0b3IubWluV2lkdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLm1heC13aWR0aC5weF09XCJjb2wud2lkdGggPz8gY29sLmRlc2NyaXB0b3IubWF4V2lkdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNvbC5kZXNjcmlwdG9yLmhlYWRlckNsYXNzTmFtZSB8IG1uZ1RhYmxlRmlsdGVyQ2xhc3M6IGNvbC5maWx0ZXI/LmRlc2NyaXB0b3IgOiBoYXNDb2x1bW5GaWx0ZXJzKCkgJiYgIWNvbC53aWR0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbC5zb3J0ID8gc29ydGFibGVDb2x1bW5USFRlbXBsYXRlIDogbm9uU29ydGFibGVDb2x1bW5USFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChoYXNMYXN0Q29sdW1uKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJjb2x1bW5MYXN0TWluV2lkdGgoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBGcm96ZW5Db2x1bW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zyb3plbl09XCJtZXRhZGF0YS5kZXNjcmlwdG9yKCkuYWN0aW9uQ29sdW1uRnJvemVuID8/IGFyZUNvbHVtbnNUb2dnbGVhYmxlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbkZyb3plbj1cInJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtbmctdGFibGUtY29sdW1uLWN1c3RvbS1sYXN0IHRleHQtcmlnaHQhXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoYXJlQ29sdW1uc1RvZ2dsZWFibGUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGRlZmVyIChvbiBpZGxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1uZy10YWJsZS1jb2x1bW4tdG9nZ2xlIFtjb2x1bW5zXT1cInZpc2libGVDb2x1bW5zKClcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmIChoYXNDb2x1bW5GaWx0ZXJzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwibW5nLWNvbHVtbi1maWx0ZXItcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFdlIG5lZWQgdGhlIGxpbmUgYmVsb3csIGJlY2F1c2Ugb3RoZXJ3aXNlIHAtdGFibGVSYWRpb0J1dHRvbiBzaGlmdHMgdGhlIHJlc3Qgb2YgdGhlIGNvbHVtbnMgaW4gdGFibGUgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHNlbGVjdGlvbkVuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIm1pbi13aWR0aDogMzZweFwiIHBGcm96ZW5Db2x1bW4gW2Zyb3plbl09XCJtZXRhZGF0YS5kZXNjcmlwdG9yKCkuc2VsZWN0aW9uQ29sdW1uRnJvemVuID8/IHRydWVcIj48L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChyb3dSZW9yZGVyRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAobWV0YWRhdGEuZGVzY3JpcHRvcigpLnJvd0V4cGFuZGFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIj48L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoY29sIG9mIHZpc2libGVDb2x1bW5zKCk7IHRyYWNrIGNvbC5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiJ3B4LTEhICcgKyBjb2wuZmlsdGVyPy5kZXNjcmlwdG9yPy5jb2x1bW5DbGFzc05hbWUgfCBtbmdUYWJsZUZpbHRlckNsYXNzOiBjb2wuZmlsdGVyPy5kZXNjcmlwdG9yIDogaGFzQ29sdW1uRmlsdGVycygpICYmICFjb2wud2lkdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiY29sLndpZHRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLiVdPVwiY29sLndpZHRoID8gbnVsbCA6IChjb2wuZmlsdGVyPy5kZXNjcmlwdG9yPy5jb2x1bW5XaWR0aCA/PyBjb2wuZGVzY3JpcHRvci53aWR0aCA/PyBudWxsKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwiY29sLndpZHRoID8gbnVsbCA6IChjb2wuZmlsdGVyPy5kZXNjcmlwdG9yPy5jb2x1bW5NaW5XaWR0aCA/PyBjb2wuZGVzY3JpcHRvci5taW5XaWR0aClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUubWF4LXdpZHRoLnB4XT1cImNvbC53aWR0aCA/PyBjb2wuZGVzY3JpcHRvci5tYXhXaWR0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGNvbC5maWx0ZXIgJiYgY29sLmZpbHRlci5kZXNjcmlwdG9yLmZpbHRlclR5cGUgIT09IEZpbHRlclR5cGVFbnVtLkNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGRlZmVyIChvbiBpZGxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1uZy10YWJsZS1maWx0ZXIgW2NvbmZpZ109XCJjb2wuZmlsdGVyXCIgW21vZGVsXT1cIm1ldGFkYXRhLmRlc2NyaXB0b3IoKS5tb2RlbFwiPjwvbW5nLXRhYmxlLWZpbHRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSBpZiAoY29sLmZpbHRlciAmJiBjb2wuZmlsdGVyLmRlc2NyaXB0b3IuY3VzdG9tQ29tcG9uZW50VHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbW5nQ29tcG9uZW50XT1cImNvbC5maWx0ZXIuZGVzY3JpcHRvci5jdXN0b21Db21wb25lbnRUeXBlXCIgW2lucHV0c109XCJ7ZGVzY3JpcHRvcjogY29sLmZpbHRlci5kZXNjcmlwdG9yfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaGFzTGFzdENvbHVtbigpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHBGcm96ZW5Db2x1bW4gYWxpZ25Gcm96ZW49XCJyaWdodFwiIGNsYXNzPVwibW5nLXRhYmxlLWNvbHVtbi1jdXN0b20tbGFzdFwiIFtzdHlsZS5taW4td2lkdGgucHhdPVwiY29sdW1uTGFzdE1pbldpZHRoKClcIj48L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2JvZHkgbGV0LWl0ZW0gbGV0LWlkeD1cInJvd0luZGV4XCIgbGV0LWV4cGFuZGVkPVwiZXhwYW5kZWRcIj5cbiAgICAgICAgICAgICAgICA8dHJcbiAgICAgICAgICAgICAgICAgICAgW3BSZW9yZGVyYWJsZVJvd109XCJpZHhcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLmRlc2NyaXB0b3IoKS5yb3dDbGFzc05hbWUgfCBtbmdDbGFzc01hcDogbWV0YWRhdGEuZGVzY3JpcHRvcigpLnJvd0NsYXNzTmFtZU1hcEZuIDogaXRlbSB8IG1uZ0xvY2FsZURlZmF1bHRSb3dDbGFzczogbWV0YWRhdGEuZGVzY3JpcHRvcigpIDogaXRlbVxuICAgICAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChzZWxlY3Rpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoc2VsZWN0aW9uTW9kZSgpID09PSAnbXVsdGlwbGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwibWluLXdpZHRoOiAzNnB4XCIgcEZyb3plbkNvbHVtbiBbZnJvemVuXT1cIm1ldGFkYXRhLmRlc2NyaXB0b3IoKS5zZWxlY3Rpb25Db2x1bW5Gcm96ZW4gPz8gdHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cC10YWJsZUNoZWNrYm94IFt2YWx1ZV09XCJpdGVtXCI+PC9wLXRhYmxlQ2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT1cIm1pbi13aWR0aDogMzZweFwiIHBGcm96ZW5Db2x1bW4gW2Zyb3plbl09XCJtZXRhZGF0YS5kZXNjcmlwdG9yKCkuc2VsZWN0aW9uQ29sdW1uRnJvemVuID8/IHRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtdGFibGVSYWRpb0J1dHRvbiBbdmFsdWVdPVwiaXRlbVwiPjwvcC10YWJsZVJhZGlvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmIChtZXRhZGF0YS5kZXNjcmlwdG9yKCkucm93RXhwYW5kYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBsZXQgZXhwYW5kUHJvcCA9IG1ldGFkYXRhLmRlc2NyaXB0b3IoKS5yb3dFeHBhbmRhYmxlUHJvcGVydHk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghZXhwYW5kUHJvcCB8fCBpdGVtW2V4cGFuZFByb3BdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BSb3dUb2dnbGVyXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91bmRlZD1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dD1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtbmctYnV0dG9uLXNtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uXT1cImV4cGFuZGVkID8gJ3BpIHBpLWNoZXZyb24tZG93bicgOiAncGkgcGktY2hldnJvbi1yaWdodCdcIj48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpZiAocm93UmVvcmRlckVuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGkgcGktYmFyc1wiIHBSZW9yZGVyYWJsZVJvd0hhbmRsZT48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGNvbCBvZiB2aXNpYmxlQ29sdW1ucygpOyB0cmFjayBjb2wuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNlbGxDbGljaygkZXZlbnQsIGNvbC5kZXNjcmlwdG9yLCBpdGVtLCBpZHgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbC5kZXNjcmlwdG9yLmNsYXNzTmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtbmdDbGFzc01hcDogY29sLmRlc2NyaXB0b3IuY2xhc3NOYW1lTWFwRm4gOiBpdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1uZ1RhYmxlRmlsdGVyQ2xhc3M6IGNvbC5maWx0ZXI/LmRlc2NyaXB0b3IgOiBoYXNDb2x1bW5GaWx0ZXJzKCkgJiYgIWNvbC53aWR0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmNsaWNrYWJsZV09XCJpc0NlbGxDbGlja0VuYWJsZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvbC53aWR0aCA/IGNvbC53aWR0aCArICdweCcgOiBjb2wuZGVzY3JpcHRvci53aWR0aCArICclJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJjb2wud2lkdGggPyBudWxsIDogY29sLmRlc2NyaXB0b3IubWluV2lkdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5tYXgtd2lkdGgucHhdPVwiY29sLndpZHRoID8/IGNvbC5kZXNjcmlwdG9yLm1heFdpZHRoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1uZy10YWJsZS1jb2x1bW4tdmFsdWUgW2Rlc2NyaXB0b3JdPVwiY29sLmRlc2NyaXB0b3JcIiBbaXRlbV09XCJpdGVtXCI+PC9tbmctdGFibGUtY29sdW1uLXZhbHVlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBAaWYgKGNvbHVtbkN1c3RvbUxhc3RUZW1wbGF0ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1uZy10YWJsZS1jb2x1bW4tY3VzdG9tLWxhc3QganVzdGlmeS1lbmQgdGV4dC1yaWdodCFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwiY29sdW1uTGFzdE1pbldpZHRoKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBGcm96ZW5Db2x1bW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbkZyb3plbj1cInJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZnJvemVuXT1cIm1ldGFkYXRhLmRlc2NyaXB0b3IoKS5hY3Rpb25Db2x1bW5Gcm96ZW4gPz8gdHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkN1c3RvbUxhc3RUZW1wbGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge2l0ZW06IGl0ZW0sIGluZGV4OiBpZHgsIGRhdGE6IGRhdGEuZGF0YSgpLCB0b3RhbENvdW50OiBkYXRhLmNvdW50KCksIHRhYmxlOiB0aGlzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZXhwYW5kZWRyb3cgbGV0LWl0ZW0gbGV0LWlkeD1cInJvd0luZGV4XCI+XG4gICAgICAgICAgICAgICAgQGlmIChtZXRhZGF0YS5kZXNjcmlwdG9yKCkucm93RXhwYW5kYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBbY29sU3Bhbl09XCJtZXRhZGF0YS5kZXNjcmlwdG9yKCkucm93RXhwYW5kYWJsZUNvbFNwYW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKG1ldGFkYXRhLmRlc2NyaXB0b3IoKS5yb3dFeHBhbmRhYmxlQ29tcG9uZW50VHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW21uZ0NvbXBvbmVudF09XCJtZXRhZGF0YS5kZXNjcmlwdG9yKCkucm93RXhwYW5kYWJsZUNvbXBvbmVudFR5cGVcIiBbaW5wdXRzXT1cIntpdGVtfVwiPiA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dFeHBhbmRUZW1wbGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtpdGVtOiBpdGVtLCBpbmRleDogaWR4LCBkYXRhOiBkYXRhLmRhdGEoKSwgdG90YWxDb3VudDogZGF0YS5jb3VudCgpLCB0YWJsZTogdGhpc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbG9hZGluZ2ljb24+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAobWV0YWRhdGEuZGVzY3JpcHRvcigpLmxvYWRpbmdJY29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwiJ3RleHQtd2hpdGUgdGV4dC00eGwgcGktc3BpbiAnICsgbWV0YWRhdGEuZGVzY3JpcHRvcigpLmxvYWRpbmdJY29uXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpZiAobWV0YWRhdGEuZGVzY3JpcHRvcigpLmxvYWRpbmdUZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dCB0ZXh0LXdoaXRlIHRleHQtbGcgZm9udC1zZW1pYm9sZFwiIFtuZ0NsYXNzXT1cInsnbXQtMyc6IG1ldGFkYXRhLmRlc2NyaXB0b3IoKS5sb2FkaW5nSWNvbn1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBtZXRhZGF0YS5kZXNjcmlwdG9yKCkubG9hZGluZ1RleHQgPz8gJycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsb2FkaW5nYm9keT5cbiAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cImNvbHVtbnNDb2xzcGFuKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2FkaW5nLXRleHRcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwLXNrZWxldG9uIHdpZHRoPVwiMTAwJVwiPjwvcC1za2VsZXRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZW1wdHltZXNzYWdlPlxuICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwiY29sdW1uc0NvbHNwYW4oKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChyZXF1aXJlZEZpbHRlcnNNaXNzaW5nKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlIG1yLTJcIj48L2k+IDxzdHJvbmc+e3sgJ21uZ1RhYmxlLnJlcXVpcmVkRmlsdGVyc01pc3NpbmcnIHwgdHJhbnNsYXRlIH19PC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnbW5nVGFibGUubm9JdGVtcycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIEBpZiAoZm9vdGVyVGVtcGxhdGUoKSkge1xuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc3VtbWFyeT5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZvb3RlclRlbXBsYXRlKCk7IGNvbnRleHQ6IHtkYXRhOiBkYXRhLmRhdGEoKSwgdG90YWxDb3VudDogZGF0YS5jb3VudCgpLCB0YWJsZTogdGhpc31cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L3AtdGFibGU+XG4gICAgfVxuPC9kaXY+XG4iXX0=","import { CommonsFeatureTypeEnum } from '@mediusinc/mng-commons/core';\nimport { COMMONS_TABLE_FEATURE_CONFIG_IT } from './services/table-feature-config.token';\n/**\n * Prepares providers for usage of the tableview functionalities.\n *\n * @returns {CommonsFeature} The `CommonsFeature` object with the layout configuration.\n */\nexport function withTable(config) {\n return {\n type: CommonsFeatureTypeEnum.Table,\n providers: [\n {\n provide: COMMONS_TABLE_FEATURE_CONFIG_IT,\n useValue: config\n }\n ]\n };\n}\n/**\n * Provides a list of providers for configuring a table feature. Useful for lazy-loading table chunk in child (lazy loaded routes).\n *\n * @param {TableFeatureConfig} [config] - An optional configuration object for the table feature.\n */\nexport function provideTableChild(config) {\n return [\n {\n provide: COMMONS_TABLE_FEATURE_CONFIG_IT,\n useValue: config\n }\n ];\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RhYmxlL3NyYy9wcm92aWRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBaUIsc0JBQXNCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUVuRixPQUFPLEVBQUMsK0JBQStCLEVBQXFCLE1BQU0sdUNBQXVDLENBQUM7QUFFMUc7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsTUFBMkI7SUFDakQsT0FBTztRQUNILElBQUksRUFBRSxzQkFBc0IsQ0FBQyxLQUFLO1FBQ2xDLFNBQVMsRUFBRTtZQUNQO2dCQUNJLE9BQU8sRUFBRSwrQkFBK0I7Z0JBQ3hDLFFBQVEsRUFBRSxNQUFNO2FBQ25CO1NBQ0o7S0FDSixDQUFDO0FBQ04sQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsTUFBMkI7SUFDekQsT0FBTztRQUNIO1lBQ0ksT0FBTyxFQUFFLCtCQUErQjtZQUN4QyxRQUFRLEVBQUUsTUFBTTtTQUNuQjtLQUNKLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtQcm92aWRlcn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7Q29tbW9uc0ZlYXR1cmUsIENvbW1vbnNGZWF0dXJlVHlwZUVudW19IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5cbmltcG9ydCB7Q09NTU9OU19UQUJMRV9GRUFUVVJFX0NPTkZJR19JVCwgVGFibGVGZWF0dXJlQ29uZmlnfSBmcm9tICcuL3NlcnZpY2VzL3RhYmxlLWZlYXR1cmUtY29uZmlnLnRva2VuJztcblxuLyoqXG4gKiBQcmVwYXJlcyBwcm92aWRlcnMgZm9yIHVzYWdlIG9mIHRoZSB0YWJsZXZpZXcgZnVuY3Rpb25hbGl0aWVzLlxuICpcbiAqIEByZXR1cm5zIHtDb21tb25zRmVhdHVyZX0gVGhlIGBDb21tb25zRmVhdHVyZWAgb2JqZWN0IHdpdGggdGhlIGxheW91dCBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aFRhYmxlKGNvbmZpZz86IFRhYmxlRmVhdHVyZUNvbmZpZyk6IENvbW1vbnNGZWF0dXJlIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBDb21tb25zRmVhdHVyZVR5cGVFbnVtLlRhYmxlLFxuICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwcm92aWRlOiBDT01NT05TX1RBQkxFX0ZFQVRVUkVfQ09ORklHX0lULFxuICAgICAgICAgICAgICAgIHVzZVZhbHVlOiBjb25maWdcbiAgICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgIH07XG59XG5cbi8qKlxuICogUHJvdmlkZXMgYSBsaXN0IG9mIHByb3ZpZGVycyBmb3IgY29uZmlndXJpbmcgYSB0YWJsZSBmZWF0dXJlLiBVc2VmdWwgZm9yIGxhenktbG9hZGluZyB0YWJsZSBjaHVuayBpbiBjaGlsZCAobGF6eSBsb2FkZWQgcm91dGVzKS5cbiAqXG4gKiBAcGFyYW0ge1RhYmxlRmVhdHVyZUNvbmZpZ30gW2NvbmZpZ10gLSBBbiBvcHRpb25hbCBjb25maWd1cmF0aW9uIG9iamVjdCBmb3IgdGhlIHRhYmxlIGZlYXR1cmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlVGFibGVDaGlsZChjb25maWc/OiBUYWJsZUZlYXR1cmVDb25maWcpOiBQcm92aWRlcltdIHtcbiAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBDT01NT05TX1RBQkxFX0ZFQVRVUkVfQ09ORklHX0lULFxuICAgICAgICAgICAgdXNlVmFsdWU6IGNvbmZpZ1xuICAgICAgICB9XG4gICAgXTtcbn1cbiJdfQ==","// components\nexport * from './components/filter/filter/filter.component';\nexport * from './components/filter/filter/filter.service';\nexport * from './components/column-value/column-value.component';\nexport * from './components/filter/filter-active-tag/filter-active-tag.component';\nexport * from './components/filter/filter-form/filter-form.component';\nexport * from './components/filter/header-with-filters/header-with-filters.component';\nexport * from './components/table/table.component';\nexport * from './components/table/table-template.directive';\n// helpers\nexport * from './helpers/filters';\nexport * from './helpers/notification';\nexport * from './helpers/table-layout-prefs';\n// models\nexport * from './models/column-preferences.model';\nexport * from './models/filter.model';\nexport * from './models/table.interface';\n// pipes\nexport * from './pipes/filter-value.pipe';\nexport * from './pipes/locale-default-row-class.pipe';\nexport * from './pipes/table-filter-class.pipe';\n// services\nexport * from './services/table-data.service';\nexport * from './services/table-feature-config.token';\n// provide\nexport * from './provide';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90YWJsZS9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsYUFBYTtBQUNiLGNBQWMsNkNBQTZDLENBQUM7QUFDNUQsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLGtEQUFrRCxDQUFDO0FBQ2pFLGNBQWMsbUVBQW1FLENBQUM7QUFDbEYsY0FBYyx1REFBdUQsQ0FBQztBQUN0RSxjQUFjLHVFQUF1RSxDQUFDO0FBQ3RGLGNBQWMsb0NBQW9DLENBQUM7QUFDbkQsY0FBYyw2Q0FBNkMsQ0FBQztBQUU1RCxVQUFVO0FBQ1YsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsOEJBQThCLENBQUM7QUFFN0MsU0FBUztBQUNULGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLDBCQUEwQixDQUFDO0FBRXpDLFFBQVE7QUFDUixjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyxpQ0FBaUMsQ0FBQztBQUVoRCxXQUFXO0FBQ1gsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLHVDQUF1QyxDQUFDO0FBRXRELFVBQVU7QUFDVixjQUFjLFdBQVcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGNvbXBvbmVudHNcbmV4cG9ydCAqIGZyb20gJy4vY29tcG9uZW50cy9maWx0ZXIvZmlsdGVyL2ZpbHRlci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21wb25lbnRzL2ZpbHRlci9maWx0ZXIvZmlsdGVyLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21wb25lbnRzL2NvbHVtbi12YWx1ZS9jb2x1bW4tdmFsdWUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vY29tcG9uZW50cy9maWx0ZXIvZmlsdGVyLWFjdGl2ZS10YWcvZmlsdGVyLWFjdGl2ZS10YWcuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vY29tcG9uZW50cy9maWx0ZXIvZmlsdGVyLWZvcm0vZmlsdGVyLWZvcm0uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vY29tcG9uZW50cy9maWx0ZXIvaGVhZGVyLXdpdGgtZmlsdGVycy9oZWFkZXItd2l0aC1maWx0ZXJzLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vY29tcG9uZW50cy90YWJsZS90YWJsZS10ZW1wbGF0ZS5kaXJlY3RpdmUnO1xuXG4vLyBoZWxwZXJzXG5leHBvcnQgKiBmcm9tICcuL2hlbHBlcnMvZmlsdGVycyc7XG5leHBvcnQgKiBmcm9tICcuL2hlbHBlcnMvbm90aWZpY2F0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vaGVscGVycy90YWJsZS1sYXlvdXQtcHJlZnMnO1xuXG4vLyBtb2RlbHNcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzL2NvbHVtbi1wcmVmZXJlbmNlcy5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL21vZGVscy9maWx0ZXIubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9tb2RlbHMvdGFibGUuaW50ZXJmYWNlJztcblxuLy8gcGlwZXNcbmV4cG9ydCAqIGZyb20gJy4vcGlwZXMvZmlsdGVyLXZhbHVlLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9waXBlcy9sb2NhbGUtZGVmYXVsdC1yb3ctY2xhc3MucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3BpcGVzL3RhYmxlLWZpbHRlci1jbGFzcy5waXBlJztcblxuLy8gc2VydmljZXNcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvdGFibGUtZGF0YS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvdGFibGUtZmVhdHVyZS1jb25maWcudG9rZW4nO1xuXG4vLyBwcm92aWRlXG5leHBvcnQgKiBmcm9tICcuL3Byb3ZpZGUnO1xuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaXVzaW5jLW1uZy1jb21tb25zLXRhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGFibGUvc3JjL21lZGl1c2luYy1tbmctY29tbW9ucy10YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":["commonsToObservable","i1","i2"],"mappings":"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"}