@ngutil/data 0.0.15 → 0.0.17

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.
@@ -1,6 +1,8 @@
1
- import { groupBy, isEqual, sortBy } from "lodash";
1
+ import { isEqual } from "lodash";
2
2
  import { toSorted } from "@ngutil/common";
3
3
  import { filterBy } from "./filter";
4
+ import { groupBy } from "./grouper";
5
+ import { sortBy } from "./sorter";
4
6
  const INPUT = Symbol("INPUT");
5
7
  export function queryExecutor(query, previous) {
6
8
  const executors = {
@@ -73,4 +75,4 @@ function compileExec(input, prev, compiler) {
73
75
  });
74
76
  return exec;
75
77
  }
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYXRhL3NyYy9xdWVyeS9leGVjdXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFHakQsT0FBTyxFQUFnQixRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUd2RCxPQUFPLEVBQVUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBSzNDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQTtBQWlCN0IsTUFBTSxVQUFVLGFBQWEsQ0FBa0IsS0FBZSxFQUFFLFFBQTJCO0lBQ3ZGLE1BQU0sU0FBUyxHQUFzQjtRQUNqQyxRQUFRLEVBQUUsY0FBYyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQztRQUMxRCxRQUFRLEVBQUUsY0FBYyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQztRQUMxRCxTQUFTLEVBQUUsZUFBZSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQztRQUM5RCxRQUFRLEVBQUUsYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQztLQUMzRCxDQUFBO0lBRUQsTUFBTSxPQUFPLEdBQUcsUUFBUSxJQUFJLElBQUksSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBRSxRQUFnQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO0lBQzFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNYLE9BQU8sUUFBUSxDQUFBO0lBQ25CLENB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LENBQUE7SUFDbkMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO1FBQy9CLEtBQUssRUFBRSxLQUFLO1FBQ1osVUFBVSxFQUFFLElBQUk7UUFDaEIsUUFBUSxFQUFFLEtBQUs7S0FDbEIsQ0FBQyxDQUFBO0lBQ0YsT0FBTyxJQUFJLENBQUE7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ3JvdXBCeSwgaXNFcXVhbCwgc29ydEJ5IH0gZnJvbSBcImxvZGFzaFwiXG5pbXBvcnQgeyBQcmltaXRpdmUgfSBmcm9tIFwidXRpbGl0eS10eXBlc1wiXG5cbmltcG9ydCB7IERlZXBSZWFkb25seSwgdG9Tb3J0ZWQgfSBmcm9tIFwiQG5ndXRpbC9jb21tb25cIlxuXG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gXCIuLi9tb2RlbFwiXG5pbXBvcnQgeyBGaWx0ZXIsIGZpbHRlckJ5IH0gZnJvbSBcIi4vZmlsdGVyXCJcbmltcG9ydCB7IFF1ZXJ5LCBRdWVyeVJlc3VsdCB9IGZyb20gXCIuL3F1ZXJ5XCJcbmltcG9ydCB7IFNsaWNlIH0gZnJvbSBcIi4vc2xpY2VcIlxuaW1wb3J0IHsgU29ydGVyIH0gZnJvbSBcIi4vc29ydGVyXCJcblxuY29uc3QgSU5QVVQgPSBTeW1ib2woXCJJTlBVVFwiKVxuXG5pbnRlcmZhY2UgUGFydGlhbEV4ZWN1dG9yIHtcbiAgICBbSU5QVVRdOiBhbnlcbn1cblxuZXhwb3J0IGludGVyZmFjZSBRdWVyeUV4ZWN1dG9yczxUIGV4dGVuZHMgTW9kZWw+IHtcbiAgICByZWFkb25seSBmaWx0ZXJGbj86IEZpbHRlckV4ZWN1dG9yPFQ+XG4gICAgcmVhZG9ubHkgc29ydGVyRm4/OiBTb3J0ZXJFeGVjdXRvcjxUPlxuICAgIHJlYWRvbmx5IGdyb3VwZXJGbj86IEdyb3VwZXJFeGVjdXRvcjxUPlxuICAgIHJlYWRvbmx5IHNsaWNlckZuPzogU2xpY2VFeGVjdXRvcjxUPlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJ5RXhlY3V0b3I8VCBleHRlbmRzIE1vZGVsPiBleHRlbmRzIFF1ZXJ5RXhlY3V0b3JzPFQ+IHtcbiAgICAoaXRlbXM6IHJlYWRvbmx5IFRbXSk6IFF1ZXJ5UmVzdWx0PFQ+XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeUV4ZWN1dG9yPFQgZXh0ZW5kcyBNb2RlbD4ocXVlcnk6IFF1ZXJ5PFQ+LCBwcmV2aW91cz86IFF1ZXJ5RXhlY3V0b3I8VD4pOiBRdWVyeUV4ZWN1dG9yPFQ+IHtcbiAgICBjb25zdCBleGVjdXRvcnM6IFF1ZXJ5RXhlY3V0b3JzPFQ+ID0ge1xuICAgICAgICBmaWx0ZXJGbjogZmlsdGVyRXhlY3V0b3IocXVlcnkuZmlsdGVyLCBwcmV2aW91cz8uZmlsdGVyRm4pLFxuICAgICAgICBzb3J0ZXJGbjogc29ydGVyRXhlY3V0b3IocXVlcnkuc29ydGVyLCBwcmV2aW91cz8uc29ydGVyRm4pLFxuICAgICAgICBncm91cGVyRm46IGdyb3VwZXJFeGVjdXRvcihxdWVyeS5ncm91cGVyLCBwcmV2aW91cz8uZ3JvdXBlckZuKSxcbiAgICAgICAgc2xpY2VyRm46IHNsaWNlRXhlY3V0b3IocXVlcnkuc2xpY2UsIHByZXZpb3VzPy5zbGljZXJGbilcbiAgICB9XG5cbiAgICBjb25zdCBjaGFuZ2VkID0gcHJldmlvdXMgPT0gbnVsbCB8fCBPYmplY3QuZW50cmllcyhleGVjdXRvcnMpLnNvbWUoKFtrLCB2XSkgPT4gKHByZXZpb3VzIGFzIGFueSlba10gIT09IHYpXG4gICAgaWYgKCFjaGFuZ2VkKSB7XG4gICAgICAgIHJldHVybiBwcmV2aW91c1xuICAgIH1cblxuICAgIGNvbnN0IGV4ZWN1dG9yID0gKGl0ZW1zOiByZWFkb25seSBUW10pOiBRdWVyeVJlc3VsdDxUPiA9PiB7XG4gICAgICAgIGlmIChpdGVtcyA9PSBudWxsIHx8IGl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgaXRlbXM6IFtdLCB0b3RhbDogMCB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzdWx0OiByZWFkb25seSBUW10gPSBpdGVtc1xuXG4gICAgICAgIGlmIChleGVjdXRvcnMuZmlsdGVyRm4pIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5maWx0ZXIoZXhlY3V0b3JzLmZpbHRlckZuKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV4ZWN1dG9ycy5zb3J0ZXJGbikge1xuICAgICAgICAgICAgcmVzdWx0ID0gdG9Tb3J0ZWQocmVzdWx0LCBleGVjdXRvcnMuc29ydGVyRm4pXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0b3RhbCA9IHJlc3VsdC5sZW5ndGhcblxuICAgICAgICAvLyBUT0RPOiBncm91cGVyXG5cbiAgICAgICAgaWYgKGV4ZWN1dG9ycy5zbGljZXJGbikge1xuICAgICAgICAgICAgcmVzdWx0ID0gZXhlY3V0b3JzLnNsaWNlckZuKHJlc3VsdClcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IGl0ZW1zOiByZXN1bHQsIHRvdGFsIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhleGVjdXRvcnMpKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleGVjdXRvciwgaywge1xuICAgICAgICAgICAgdmFsdWU6IHYsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIGV4ZWN1dG9yXG59XG5cbmludGVyZmFjZSBGaWx0ZXJFeGVjdXRvcjxUIGV4dGVuZHMgTW9kZWw+IGV4dGVuZHMgUGFydGlhbEV4ZWN1dG9yIHtcbiAgICAoaXRlbTogVCk6IGJvb2xlYW5cbn1cblxuZnVuY3Rpb24gZmlsdGVyRXhlY3V0b3I8VCBleHRlbmRzIE1vZGVsPihcbiAgICBmaWx0ZXI/OiBEZWVwUmVhZG9ubHk8RmlsdGVyPFQ+PixcbiAgICBwcmV2PzogRmlsdGVyRXhlY3V0b3I8VD5cbik6IEZpbHRlckV4ZWN1dG9yPFQ+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gY29tcGlsZUV4ZWM8VD4oZmlsdGVyLCBwcmV2LCBmaWx0ZXJCeSlcbn1cblxuaW50ZXJmYWNlIFNvcnRlckV4ZWN1dG9yPFQgZXh0ZW5kcyBNb2RlbD4gZXh0ZW5kcyBQYXJ0aWFsRXhlY3V0b3Ige1xuICAgIChhOiBULCBiOiBUKTogbnVtYmVyXG59XG5cbmZ1bmN0aW9uIHNvcnRlckV4ZWN1dG9yPFQgZXh0ZW5kcyBNb2RlbD4oXG4gICAgc29ydGVyPzogRGVlcFJlYWRvbmx5PFNvcnRlcjxUPj4sXG4gICAgcHJldj86IFNvcnRlckV4ZWN1dG9yPFQ+XG4pOiBTb3J0ZXJFeGVjdXRvcjxUPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIGNvbXBpbGVFeGVjPFQ+KHNvcnRlciwgcHJldiwgc29ydEJ5KVxufVxuXG5pbnRlcmZhY2UgR3JvdXBlckV4ZWN1dG9yPFQgZXh0ZW5kcyBNb2RlbD4gZXh0ZW5kcyBQYXJ0aWFsRXhlY3V0b3Ige1xuICAgIChpdGVtOiBUKTogUHJpbWl0aXZlXG59XG5cbmZ1bmN0aW9uIGdyb3VwZXJFeGVjdXRvcjxUIGV4dGVuZHMgTW9kZWw+KFxuICAgIHNvcnRlcj86IERlZXBSZWFkb25seTxTb3J0ZXI8VD4+LFxuICAgIHByZXY/OiBHcm91cGVyRXhlY3V0b3I8VD5cbik6IEdyb3VwZXJFeGVjdXRvcjxUPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIGNvbXBpbGVFeGVjPFQ+KHNvcnRlciwgcHJldiwgZ3JvdXBCeSlcbn1cblxuaW50ZXJmYWNlIFNsaWNlRXhlY3V0b3I8VCBleHRlbmRzIE1vZGVsPiBleHRlbmRzIFBhcnRpYWxFeGVjdXRvciB7XG4gICAgKGl0ZW1zOiByZWFkb25seSBUW10pOiBUW11cbn1cblxuZnVuY3Rpb24gc2xpY2VFeGVjdXRvcjxUIGV4dGVuZHMgTW9kZWw+KFxuICAgIHNsaWNlPzogRGVlcFJlYWRvbmx5PFNsaWNlPixcbiAgICBwcmV2PzogU2xpY2VFeGVjdXRvcjxUPlxuKTogU2xpY2VFeGVjdXRvcjxUPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIGNvbXBpbGVFeGVjPFQ+KHNsaWNlLCBwcmV2LCBzbGljZUJ5KVxufVxuXG5mdW5jdGlvbiBzbGljZUJ5PFQgZXh0ZW5kcyBNb2RlbD4oc2xpY2U6IFNsaWNlKSB7XG4gICAgcmV0dXJuIChpdGVtczogVFtdKSA9PiBpdGVtcy5zbGljZShzbGljZS5zdGFydCwgc2xpY2UuZW5kKVxufVxuXG5mdW5jdGlvbiBjb21waWxlRXhlYzxUIGV4dGVuZHMgTW9kZWw+KGlucHV0OiBhbnksIHByZXY6IGFueSwgY29tcGlsZXI6IGFueSk6IGFueSB7XG4gICAgaWYgKGlucHV0ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGlmIChwcmV2ICE9IG51bGwpIHtcbiAgICAgICAgLy8gdGhvcmljYWxseSBpbnB1dCBpcyByZWFkb25seVxuICAgICAgICBpZiAocHJldltJTlBVVF0gPT09IGlucHV0IHx8IGlzRXF1YWwocHJldltJTlBVVF0sIGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHByZXZcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGV4ZWMgPSBjb21waWxlcihpbnB1dCkgYXMgYW55XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4ZWMsIElOUFVULCB7XG4gICAgICAgIHZhbHVlOiBpbnB1dCxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgfSlcbiAgICByZXR1cm4gZXhlY1xufVxuIl19
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYXRhL3NyYy9xdWVyeS9leGVjdXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBR2hDLE9BQU8sRUFBZ0IsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFHdkQsT0FBTyxFQUFVLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBR25DLE9BQU8sRUFBRSxNQUFNLEVBQVUsTUFBTSxVQUFVLENBQUE7QUFFekMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0FBaUI3QixNQUFNLFVBQVUsYUFBYSxDQUFrQixLQUFlLEVBQUUsUUFBMkI7SUFDdkYsTUFBTSxTQUFTLEdBQXNCO1FBQ2pDLFFBQVEsRUFBRSxjQUFjLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDO1FBQzFELFFBQVEsRUFBRSxjQUFjLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDO1FBQzFELFNBQVMsRUFBRSxlQUFlLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDO1FBQzlELFFBQVEsRUFBRSxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDO0tBQzNELENBQUE7SUFFRCxNQUFNLE9BQU8sR0FBRyxRQUFRLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFFLFFBQWdCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENB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QUE7UUFDZixDQUFDO0lBQ0wsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQVEsQ0FBQTtJQUNuQyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7UUFDL0IsS0FBSyxFQUFFLEtBQUs7UUFDWixVQUFVLEVBQUUsSUFBSTtRQUNoQixRQUFRLEVBQUUsS0FBSztLQUNsQixDQUFDLENBQUE7SUFDRixPQUFPLElBQUksQ0FBQTtBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0VxdWFsIH0gZnJvbSBcImxvZGFzaFwiXG5pbXBvcnQgeyBQcmltaXRpdmUgfSBmcm9tIFwidXRpbGl0eS10eXBlc1wiXG5cbmltcG9ydCB7IERlZXBSZWFkb25seSwgdG9Tb3J0ZWQgfSBmcm9tIFwiQG5ndXRpbC9jb21tb25cIlxuXG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gXCIuLi9tb2RlbFwiXG5pbXBvcnQgeyBGaWx0ZXIsIGZpbHRlckJ5IH0gZnJvbSBcIi4vZmlsdGVyXCJcbmltcG9ydCB7IGdyb3VwQnkgfSBmcm9tIFwiLi9ncm91cGVyXCJcbmltcG9ydCB7IFF1ZXJ5LCBRdWVyeVJlc3VsdCB9IGZyb20gXCIuL3F1ZXJ5XCJcbmltcG9ydCB7IFNsaWNlIH0gZnJvbSBcIi4vc2xpY2VcIlxuaW1wb3J0IHsgc29ydEJ5LCBTb3J0ZXIgfSBmcm9tIFwiLi9zb3J0ZXJcIlxuXG5jb25zdCBJTlBVVCA9IFN5bWJvbChcIklOUFVUXCIpXG5cbmludGVyZmFjZSBQYXJ0aWFsRXhlY3V0b3Ige1xuICAgIFtJTlBVVF06IGFueVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJ5RXhlY3V0b3JzPFQgZXh0ZW5kcyBNb2RlbD4ge1xuICAgIHJlYWRvbmx5IGZpbHRlckZuPzogRmlsdGVyRXhlY3V0b3I8VD5cbiAgICByZWFkb25seSBzb3J0ZXJGbj86IFNvcnRlckV4ZWN1dG9yPFQ+XG4gICAgcmVhZG9ubHkgZ3JvdXBlckZuPzogR3JvdXBlckV4ZWN1dG9yPFQ+XG4gICAgcmVhZG9ubHkgc2xpY2VyRm4/OiBTbGljZUV4ZWN1dG9yPFQ+XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlFeGVjdXRvcjxUIGV4dGVuZHMgTW9kZWw+IGV4dGVuZHMgUXVlcnlFeGVjdXRvcnM8VD4ge1xuICAgIChpdGVtczogcmVhZG9ubHkgVFtdKTogUXVlcnlSZXN1bHQ8VD5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5RXhlY3V0b3I8VCBleHRlbmRzIE1vZGVsPihxdWVyeTogUXVlcnk8VD4sIHByZXZpb3VzPzogUXVlcnlFeGVjdXRvcjxUPik6IFF1ZXJ5RXhlY3V0b3I8VD4ge1xuICAgIGNvbnN0IGV4ZWN1dG9yczogUXVlcnlFeGVjdXRvcnM8VD4gPSB7XG4gICAgICAgIGZpbHRlckZuOiBmaWx0ZXJFeGVjdXRvcihxdWVyeS5maWx0ZXIsIHByZXZpb3VzPy5maWx0ZXJGbiksXG4gICAgICAgIHNvcnRlckZuOiBzb3J0ZXJFeGVjdXRvcihxdWVyeS5zb3J0ZXIsIHByZXZpb3VzPy5zb3J0ZXJGbiksXG4gICAgICAgIGdyb3VwZXJGbjogZ3JvdXBlckV4ZWN1dG9yKHF1ZXJ5Lmdyb3VwZXIsIHByZXZpb3VzPy5ncm91cGVyRm4pLFxuICAgICAgICBzbGljZXJGbjogc2xpY2VFeGVjdXRvcihxdWVyeS5zbGljZSwgcHJldmlvdXM/LnNsaWNlckZuKVxuICAgIH1cblxuICAgIGNvbnN0IGNoYW5nZWQgPSBwcmV2aW91cyA9PSBudWxsIHx8IE9iamVjdC5lbnRyaWVzKGV4ZWN1dG9ycykuc29tZSgoW2ssIHZdKSA9PiAocHJldmlvdXMgYXMgYW55KVtrXSAhPT0gdilcbiAgICBpZiAoIWNoYW5nZWQpIHtcbiAgICAgICAgcmV0dXJuIHByZXZpb3VzXG4gICAgfVxuXG4gICAgY29uc3QgZXhlY3V0b3IgPSAoaXRlbXM6IHJlYWRvbmx5IFRbXSk6IFF1ZXJ5UmVzdWx0PFQ+ID0+IHtcbiAgICAgICAgaWYgKGl0ZW1zID09IG51bGwgfHwgaXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4geyBpdGVtczogW10sIHRvdGFsOiAwIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXN1bHQ6IHJlYWRvbmx5IFRbXSA9IGl0ZW1zXG5cbiAgICAgICAgaWYgKGV4ZWN1dG9ycy5maWx0ZXJGbikge1xuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcihleGVjdXRvcnMuZmlsdGVyRm4pXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXhlY3V0b3JzLnNvcnRlckZuKSB7XG4gICAgICAgICAgICByZXN1bHQgPSB0b1NvcnRlZChyZXN1bHQsIGV4ZWN1dG9ycy5zb3J0ZXJGbilcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRvdGFsID0gcmVzdWx0Lmxlbmd0aFxuXG4gICAgICAgIC8vIFRPRE86IGdyb3VwZXJcblxuICAgICAgICBpZiAoZXhlY3V0b3JzLnNsaWNlckZuKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBleGVjdXRvcnMuc2xpY2VyRm4ocmVzdWx0KVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgaXRlbXM6IHJlc3VsdCwgdG90YWwgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKGV4ZWN1dG9ycykpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4ZWN1dG9yLCBrLCB7XG4gICAgICAgICAgICB2YWx1ZTogdixcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogZmFsc2VcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gZXhlY3V0b3Jcbn1cblxuaW50ZXJmYWNlIEZpbHRlckV4ZWN1dG9yPFQgZXh0ZW5kcyBNb2RlbD4gZXh0ZW5kcyBQYXJ0aWFsRXhlY3V0b3Ige1xuICAgIChpdGVtOiBUKTogYm9vbGVhblxufVxuXG5mdW5jdGlvbiBmaWx0ZXJFeGVjdXRvcjxUIGV4dGVuZHMgTW9kZWw+KFxuICAgIGZpbHRlcj86IERlZXBSZWFkb25seTxGaWx0ZXI8VD4+LFxuICAgIHByZXY/OiBGaWx0ZXJFeGVjdXRvcjxUPlxuKTogRmlsdGVyRXhlY3V0b3I8VD4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBjb21waWxlRXhlYzxUPihmaWx0ZXIsIHByZXYsIGZpbHRlckJ5KVxufVxuXG5pbnRlcmZhY2UgU29ydGVyRXhlY3V0b3I8VCBleHRlbmRzIE1vZGVsPiBleHRlbmRzIFBhcnRpYWxFeGVjdXRvciB7XG4gICAgKGE6IFQsIGI6IFQpOiBudW1iZXJcbn1cblxuZnVuY3Rpb24gc29ydGVyRXhlY3V0b3I8VCBleHRlbmRzIE1vZGVsPihcbiAgICBzb3J0ZXI/OiBEZWVwUmVhZG9ubHk8U29ydGVyPFQ+PixcbiAgICBwcmV2PzogU29ydGVyRXhlY3V0b3I8VD5cbik6IFNvcnRlckV4ZWN1dG9yPFQ+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gY29tcGlsZUV4ZWM8VD4oc29ydGVyLCBwcmV2LCBzb3J0QnkpXG59XG5cbmludGVyZmFjZSBHcm91cGVyRXhlY3V0b3I8VCBleHRlbmRzIE1vZGVsPiBleHRlbmRzIFBhcnRpYWxFeGVjdXRvciB7XG4gICAgKGl0ZW06IFQpOiBQcmltaXRpdmVcbn1cblxuZnVuY3Rpb24gZ3JvdXBlckV4ZWN1dG9yPFQgZXh0ZW5kcyBNb2RlbD4oXG4gICAgc29ydGVyPzogRGVlcFJlYWRvbmx5PFNvcnRlcjxUPj4sXG4gICAgcHJldj86IEdyb3VwZXJFeGVjdXRvcjxUPlxuKTogR3JvdXBlckV4ZWN1dG9yPFQ+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gY29tcGlsZUV4ZWM8VD4oc29ydGVyLCBwcmV2LCBncm91cEJ5KVxufVxuXG5pbnRlcmZhY2UgU2xpY2VFeGVjdXRvcjxUIGV4dGVuZHMgTW9kZWw+IGV4dGVuZHMgUGFydGlhbEV4ZWN1dG9yIHtcbiAgICAoaXRlbXM6IHJlYWRvbmx5IFRbXSk6IFRbXVxufVxuXG5mdW5jdGlvbiBzbGljZUV4ZWN1dG9yPFQgZXh0ZW5kcyBNb2RlbD4oXG4gICAgc2xpY2U/OiBEZWVwUmVhZG9ubHk8U2xpY2U+LFxuICAgIHByZXY/OiBTbGljZUV4ZWN1dG9yPFQ+XG4pOiBTbGljZUV4ZWN1dG9yPFQ+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gY29tcGlsZUV4ZWM8VD4oc2xpY2UsIHByZXYsIHNsaWNlQnkpXG59XG5cbmZ1bmN0aW9uIHNsaWNlQnk8VCBleHRlbmRzIE1vZGVsPihzbGljZTogU2xpY2UpIHtcbiAgICByZXR1cm4gKGl0ZW1zOiBUW10pID0+IGl0ZW1zLnNsaWNlKHNsaWNlLnN0YXJ0LCBzbGljZS5lbmQpXG59XG5cbmZ1bmN0aW9uIGNvbXBpbGVFeGVjPFQgZXh0ZW5kcyBNb2RlbD4oaW5wdXQ6IGFueSwgcHJldjogYW55LCBjb21waWxlcjogYW55KTogYW55IHtcbiAgICBpZiAoaW5wdXQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgaWYgKHByZXYgIT0gbnVsbCkge1xuICAgICAgICAvLyB0aG9yaWNhbGx5IGlucHV0IGlzIHJlYWRvbmx5XG4gICAgICAgIGlmIChwcmV2W0lOUFVUXSA9PT0gaW5wdXQgfHwgaXNFcXVhbChwcmV2W0lOUFVUXSwgaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJldlxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZXhlYyA9IGNvbXBpbGVyKGlucHV0KSBhcyBhbnlcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhlYywgSU5QVVQsIHtcbiAgICAgICAgdmFsdWU6IGlucHV0LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB3cml0YWJsZTogZmFsc2VcbiAgICB9KVxuICAgIHJldHVybiBleGVjXG59XG4iXX0=
@@ -152,10 +152,18 @@ export function sorterMerge(...sorters) {
152
152
  for (const [k, v] of Object.entries(sentry)) {
153
153
  const existing = result.find((value) => value[k] != null);
154
154
  if (existing) {
155
- ;
156
- existing[k] = deepClone(v);
155
+ if (v == null) {
156
+ delete existing[k];
157
+ if (Object.keys(existing).length === 0) {
158
+ result.splice(result.indexOf(existing), 1);
159
+ }
160
+ }
161
+ else {
162
+ ;
163
+ existing[k] = deepClone(v);
164
+ }
157
165
  }
158
- else {
166
+ else if (v != null) {
159
167
  result.push({ [k]: deepClone(v) });
160
168
  }
161
169
  }
@@ -170,4 +178,4 @@ export function sorterFind(sorters, name) {
170
178
  }
171
179
  return undefined;
172
180
  }
173
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGF0YS9zcmMvcXVlcnkvc29ydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBRTdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFHekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sUUFBUSxDQUFBO0FBb0IxQzs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxNQUFNLENBQWtCLE9BQWtCO0lBQ3RELElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFBO0lBQ25DLENBQUM7SUFDRCxPQUFPLGNBQWMsQ0FBSSxPQUFPLENBQVEsQ0FBQTtBQUM1QyxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFrQixPQUFrQjtJQUMvRCxPQUFPLFdBQVcsQ0FDYixPQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FDNUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQzdCLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDeEIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLEtBQUssQ0FBQTtZQUN2QyxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUMvRCxDQUFDO2FBQU0sSUFB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QUMsRUFBUyxDQUFDLENBQUE7Z0JBQzdDLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQTtBQUNqQixDQUFDO0FBR0QsTUFBTSxVQUFVLFVBQVUsQ0FBa0IsT0FBa0IsRUFBRSxJQUFZO0lBQ3hFLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUE7SUFDakQsSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFLENBQUM7UUFDakIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDdkIsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFBO0FBRXBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmbGF0dGVuRGVlcCwgaXNFcXVhbCB9IGZyb20gXCJsb2Rhc2hcIlxuXG5pbXBvcnQgeyBkZWVwQ2xvbmUsIGlzUGxhaW5PYmplY3QgfSBmcm9tIFwiQG5ndXRpbC9jb21tb25cIlxuXG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gXCIuLi9tb2RlbFwiXG5pbXBvcnQgeyBwYXRoR2V0dGVyQ29tcGlsZSB9IGZyb20gXCIuL3BhdGhcIlxuXG5leHBvcnQgdHlwZSBTb3J0ZXJGbjxUID0gYW55PiA9IChhOiBULCBiOiBUKSA9PiBudW1iZXJcblxuZXhwb3J0IGNvbnN0IGVudW0gU29ydERpcmVjdGlvbiB7XG4gICAgQXNjID0gXCJhc2NcIixcbiAgICBEZXNjID0gXCJkZXNjXCJcbn1cblxuZXhwb3J0IHR5cGUgU29ydERpciA9IFNvcnREaXJlY3Rpb24uQXNjIHwgU29ydERpcmVjdGlvbi5EZXNjIHwgXCJhc2NcIiB8IFwiZGVzY1wiXG5leHBvcnQgdHlwZSBTb3J0RGlyRXh0cmEgPSB7IGRpcjogU29ydERpcjsgZW1wdHlGaXJzdDogYm9vbGVhbiB9XG5cbnR5cGUgX1NvcnRlcjxGPiA9IHsgW0sgaW4ga2V5b2YgRl06IHsgW2tleSBpbiBLXTogU29ydERpciB8IFNvcnREaXJFeHRyYSB9IH1ba2V5b2YgRl1cbi8vIFRPRE86IGZpeCByZWN1cnNpb25cbi8vIGV4cG9ydCB0eXBlIFNvcnRlcjxUIGV4dGVuZHMgTW9kZWw+ID0gQXJyYXk8X1NvcnRlcjxGbGF0dGVuPFQ+Pj5cbmV4cG9ydCB0eXBlIFNvcnRlcjxUIGV4dGVuZHMgTW9kZWw+ID0gQXJyYXk8eyBba2V5OiBzdHJpbmddOiBTb3J0RGlyIHwgU29ydERpckV4dHJhIHwgdW5kZWZpbmVkIH0+XG5cbnR5cGUgTm9ybWFsaXplZEVudHJ5ID0geyBwYXRoOiBzdHJpbmc7IGlzQXNjOiBib29sZWFuOyBlbXB0eUZpcnN0OiBib29sZWFuIH1cbmV4cG9ydCB0eXBlIFNvcnRlck5vcm1hbGl6ZWQgPSBBcnJheTxOb3JtYWxpemVkRW50cnk+XG5cbi8qKlxuICogQGV4YW1wbGVcbiAqYGBgdHNcbiAqIGl0ZW1zLnRvU29ydGVkKHNvcnRCeShbe1wiYXV0aG9yLm5hbWVcIjogXCJhc2NcIn1dKSlcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gc29ydEJ5PFQgZXh0ZW5kcyBNb2RlbD4oc29ydGVyczogU29ydGVyPFQ+KTogU29ydGVyRm48VD4ge1xuICAgIGlmIChzb3J0ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFbXB0eSBzb3J0ZXJcIilcbiAgICB9XG4gICAgcmV0dXJuIF9zb3J0ZXJDb21waWxlPFQ+KHNvcnRlcnMpIGFzIGFueVxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBzb3J0ZXIgZGVmaW5pdGlvblxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogbm9ybWFsaXplU29ydGVyKFt7aWQ6IFwiYXNjXCJ9XSkgLT4gW3twYXRoOiBcImlkXCIsIGlzQXNjOiB0cnVlLCBlbXB0eUZpcnN0OiB0cnVlfV1cbiAqIG5vcm1hbGl6ZVNvcnRlcihbe2lkOiB7ZGlyOiBcImRlc2NcIiwgZW1wdHlGaXJzdDogZmFsc2V9fV0pIC0+IFt7cGF0aDogXCJpZFwiLCBpc0FzYzogZmFsc2UsIGVtcHR5Rmlyc3Q6IGZhbHNlfV1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gc29ydGVyTm9ybWFsaXplPFQgZXh0ZW5kcyBNb2RlbD4oc29ydGVyczogU29ydGVyPFQ+KTogU29ydGVyTm9ybWFsaXplZCB7XG4gICAgcmV0dXJuIGZsYXR0ZW5EZWVwKFxuICAgICAgICAoc29ydGVycyBhcyBhbnkpLm1hcCgoczogYW55KSA9PlxuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMocykubWFwKChbaywgdl0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHYgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNBc2MgPSB2LnRvTG93ZXJDYXNlKCkgPT09IFwiYXNjXCJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgcGF0aDogaywgaXNBc2MsIGVtcHR5Rmlyc3Q6IGlzQXNjID8gZmFsc2UgOiB0cnVlIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QodikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IGssXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0FzYzogKCh2IGFzIFNvcnREaXJFeHRyYSkuZGlyIHx8IFwiYXNjXCIpLnRvTG93ZXJDYXNlKCkgPT09IFwiYXNjXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbXB0eUZpcnN0OiAodiBhcyBTb3J0RGlyRXh0cmEpLmVtcHR5Rmlyc3QgPT0gbnVsbCA/IHRydWUgOiAhISh2IGFzIFNvcnREaXJFeHRyYSkuZW1wdHlGaXJzdFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHNvcnRlcjogJHt2fWApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgIClcbn1cblxuZnVuY3Rpb24gX3NvcnRlckNvbXBpbGU8VCBleHRlbmRzIE1vZGVsPihzb3J0ZXJzOiBTb3J0ZXI8VD4pOiBTb3J0ZXJGbjxUPiB7XG4gICAgaWYgKHNvcnRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiAoX2EsIF9iKSA9PiAwXG4gICAgfVxuXG4gICAgY29uc3Qgbm9ybSA9IHNvcnRlck5vcm1hbGl6ZTxUPihzb3J0ZXJzKS5tYXAoY3JlYXRlQ29tcGFyYXRvcilcbiAgICBpZiAobm9ybS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIG5vcm1bMF1cbiAgICB9XG5cbiAgICBjb25zdCBpbml0aWFsID0gbm9ybS5wb3AoKSFcbiAgICByZXR1cm4gbm9ybS5yZWR1Y2VSaWdodDxTb3J0ZXJGbjxUPj4oXG4gICAgICAgIChuZXh0LCBjdXJyKSA9PiAoYSwgYikgPT4ge1xuICAgICAgICAgICAgY29uc3QgciA9IGN1cnIoYSwgYilcbiAgICAgICAgICAgIHJldHVybiByID09PSAwID8gbmV4dChhLCBiKSA6IHJcbiAgICAgICAgfSxcbiAgICAgICAgaW5pdGlhbFxuICAgIClcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ29tcGFyYXRvcih7IHBhdGgsIGlzQXNjLCBlbXB0eUZpcnN0IH06IE5vcm1hbGl6ZWRFbnRyeSk6IFNvcnRlckZuIHtcbiAgICBjb25zdCBnZXR0ZXIgPSBwYXRoR2V0dGVyQ29tcGlsZShwYXRoKVxuICAgIGlmIChpc0FzYykge1xuICAgICAgICByZXR1cm4gKGEsIGIpID0+IGNvbXBhcmUoZ2V0dGVyKGEpLCBnZXR0ZXIoYiksIGVtcHR5Rmlyc3QpXG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIChhLCBiKSA9PiBjb21wYXJlKGdldHRlcihhKSwgZ2V0dGVyKGIpLCAhZW1wdHlGaXJzdCkgKiAtMVxuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmUoYTogYW55LCBiOiBhbnksIGVtcHR5Rmlyc3Q6IGJvb2xlYW4pOiBudW1iZXIge1xuICAgIC8vIGNvbnNvbGUubG9nKFwiQ09NUEFSRVwiLCBhLCBiKVxuICAgIGlmIChhID09IG51bGwgJiYgYiAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBlbXB0eUZpcnN0ID09PSB0cnVlID8gLTEgOiAxXG4gICAgfSBlbHNlIGlmIChhICE9IG51bGwgJiYgYiA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBlbXB0eUZpcnN0ID09PSB0cnVlID8gMSA6IC0xXG4gICAgfSBlbHNlIGlmIChhID09IG51bGwgJiYgYiA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAwXG4gICAgfSBlbHNlIGlmIChpc0VxdWFsKGEsIGIpKSB7XG4gICAgICAgIHJldHVybiAwXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYSA9PT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgYiA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICByZXR1cm4gYSAtIGJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhID09PSBcInN0cmluZ1wiICYmIHR5cGVvZiBiID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGNvbnN0IGFsID0gYS5sZW5ndGhcbiAgICAgICAgY29uc3QgYmwgPSBiLmxlbmd0aFxuICAgICAgICAvLyBpZiBib3RoIGxlbmd0aHMgaXMgMCB0aGUgY29kZSBleGVjdXRpb24gbm90IHJlYWNoIHRoYXQgcG9pbnQsIGJlY2F1c2UgYSA9PT0gYlxuICAgICAgICBpZiAoZW1wdHlGaXJzdCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKGFsID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGJsID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChhbCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAxXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGJsID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGEubG9jYWxlQ29tcGFyZShiKVxuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhKSAmJiBBcnJheS5pc0FycmF5KGIpKSB7XG4gICAgICAgIGNvbnN0IGFsID0gYS5sZW5ndGhcbiAgICAgICAgY29uc3QgYmwgPSBiLmxlbmd0aFxuICAgICAgICBjb25zdCBsID0gTWF0aC5taW4oYWwsIGJsKVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBjb21wYXJlKGFbaV0sIGJbaV0sIGVtcHR5Rmlyc3QpXG4gICAgICAgICAgICBpZiAocmVzICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFsID09PSBibCkge1xuICAgICAgICAgICAgcmV0dXJuIDBcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbXB0eUZpcnN0ID09PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoYWwgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gLTFcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYmwgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGFsID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDFcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYmwgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gLTFcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhbCAtIGJsXG4gICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGEpICYmIGlzUGxhaW5PYmplY3QoYikpIHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGEpLmxvY2FsZUNvbXBhcmUoSlNPTi5zdHJpbmdpZnkoYikpXG4gICAgfVxuXG4gICAgcmV0dXJuIGEgPiBiID8gLTEgOiAxXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb3J0ZXJNZXJnZTxUIGV4dGVuZHMgTW9kZWw+KC4uLnNvcnRlcnM6IEFycmF5PFNvcnRlcjxUPiB8IHVuZGVmaW5lZCB8IG51bGw+KTogU29ydGVyPFQ+IHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgcmVzdWx0OiBTb3J0ZXI8VD4gfCB1bmRlZmluZWRcblxuICAgIGZvciAoY29uc3Qgc29ydGVyIG9mIHNvcnRlcnMpIHtcbiAgICAgICAgaWYgKHNvcnRlciA9PSBudWxsKSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gZGVlcENsb25lKHNvcnRlcilcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHNlbnRyeSBvZiBzb3J0ZXIpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHNlbnRyeSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZyA9IChyZXN1bHQgYXMgYW55KS5maW5kKCh2YWx1ZTogYW55KSA9PiB2YWx1ZVtrXSAhPSBudWxsKVxuICAgICAgICAgICAgICAgIGlmIChleGlzdGluZykge1xuICAgICAgICAgICAgICAgICAgICA7KGV4aXN0aW5nIGFzIGFueSlba10gPSBkZWVwQ2xvbmUodilcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7IFtrXTogZGVlcENsb25lKHYpIH0gYXMgYW55KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gc29ydGVyRmluZDxUIGV4dGVuZHMgTW9kZWw+KHNvcnRlcnM6IFNvcnRlcjxUPiwgbmFtZTogc3RyaW5nKTogU29ydERpciB8IFNvcnREaXJFeHRyYSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc29ydGVyID0gc29ydGVycy5maW5kKHYgPT4gdltuYW1lXSAhPSBudWxsKVxuICAgIGlmIChzb3J0ZXIgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gc29ydGVyW25hbWVdXG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWRcblxufVxuIl19
181
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGF0YS9zcmMvcXVlcnkvc29ydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBRTdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFHekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sUUFBUSxDQUFBO0FBb0IxQzs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxNQUFNLENBQWtCLE9BQWtCO0lBQ3RELElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFBO0lBQ25DLENBQUM7SUFDRCxPQUFPLGNBQWMsQ0FBSSxPQUFPLENBQVEsQ0FBQTtBQUM1QyxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFrQixPQUFrQjtJQUMvRCxPQUFPLFdBQVcsQ0FDYixPQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FDNUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQzdCLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDeEIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLEtBQUssQ0FBQTtZQUN2QyxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUMvRCxDQUFDO2FBQU0sSUFB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QUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7d0JBQzlDLENBQUM7b0JBQ0wsQ0FBQzt5QkFBTSxDQUFDO3dCQUNKLENBQUM7d0JBQUMsUUFBZ0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUE7b0JBQ3hDLENBQUM7Z0JBQ0wsQ0FBQztxQkFBTSxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztvQkFDbkIsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFTLENBQUMsQ0FBQTtnQkFDN0MsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFBO0FBQ2pCLENBQUM7QUFFRCxNQUFNLFVBQVUsVUFBVSxDQUFrQixPQUFrQixFQUFFLElBQVk7SUFDeEUsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQTtJQUNqRCxJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNqQixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUN2QixDQUFDO0lBQ0QsT0FBTyxTQUFTLENBQUE7QUFDcEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZsYXR0ZW5EZWVwLCBpc0VxdWFsIH0gZnJvbSBcImxvZGFzaFwiXG5cbmltcG9ydCB7IGRlZXBDbG9uZSwgaXNQbGFpbk9iamVjdCB9IGZyb20gXCJAbmd1dGlsL2NvbW1vblwiXG5cbmltcG9ydCB7IE1vZGVsIH0gZnJvbSBcIi4uL21vZGVsXCJcbmltcG9ydCB7IHBhdGhHZXR0ZXJDb21waWxlIH0gZnJvbSBcIi4vcGF0aFwiXG5cbmV4cG9ydCB0eXBlIFNvcnRlckZuPFQgPSBhbnk+ID0gKGE6IFQsIGI6IFQpID0+IG51bWJlclxuXG5leHBvcnQgY29uc3QgZW51bSBTb3J0RGlyZWN0aW9uIHtcbiAgICBBc2MgPSBcImFzY1wiLFxuICAgIERlc2MgPSBcImRlc2NcIlxufVxuXG5leHBvcnQgdHlwZSBTb3J0RGlyID0gU29ydERpcmVjdGlvbi5Bc2MgfCBTb3J0RGlyZWN0aW9uLkRlc2MgfCBcImFzY1wiIHwgXCJkZXNjXCJcbmV4cG9ydCB0eXBlIFNvcnREaXJFeHRyYSA9IHsgZGlyOiBTb3J0RGlyOyBlbXB0eUZpcnN0OiBib29sZWFuIH1cblxudHlwZSBfU29ydGVyPEY+ID0geyBbSyBpbiBrZXlvZiBGXTogeyBba2V5IGluIEtdOiBTb3J0RGlyIHwgU29ydERpckV4dHJhIH0gfVtrZXlvZiBGXVxuLy8gVE9ETzogZml4IHJlY3Vyc2lvblxuLy8gZXhwb3J0IHR5cGUgU29ydGVyPFQgZXh0ZW5kcyBNb2RlbD4gPSBBcnJheTxfU29ydGVyPEZsYXR0ZW48VD4+PlxuZXhwb3J0IHR5cGUgU29ydGVyPFQgZXh0ZW5kcyBNb2RlbD4gPSBBcnJheTx7IFtrZXk6IHN0cmluZ106IFNvcnREaXIgfCBTb3J0RGlyRXh0cmEgfCB1bmRlZmluZWQgfT5cblxudHlwZSBOb3JtYWxpemVkRW50cnkgPSB7IHBhdGg6IHN0cmluZzsgaXNBc2M6IGJvb2xlYW47IGVtcHR5Rmlyc3Q6IGJvb2xlYW4gfVxuZXhwb3J0IHR5cGUgU29ydGVyTm9ybWFsaXplZCA9IEFycmF5PE5vcm1hbGl6ZWRFbnRyeT5cblxuLyoqXG4gKiBAZXhhbXBsZVxuICpgYGB0c1xuICogaXRlbXMudG9Tb3J0ZWQoc29ydEJ5KFt7XCJhdXRob3IubmFtZVwiOiBcImFzY1wifV0pKVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb3J0Qnk8VCBleHRlbmRzIE1vZGVsPihzb3J0ZXJzOiBTb3J0ZXI8VD4pOiBTb3J0ZXJGbjxUPiB7XG4gICAgaWYgKHNvcnRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVtcHR5IHNvcnRlclwiKVxuICAgIH1cbiAgICByZXR1cm4gX3NvcnRlckNvbXBpbGU8VD4oc29ydGVycykgYXMgYW55XG59XG5cbi8qKlxuICogTm9ybWFsaXplIHNvcnRlciBkZWZpbml0aW9uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBub3JtYWxpemVTb3J0ZXIoW3tpZDogXCJhc2NcIn1dKSAtPiBbe3BhdGg6IFwiaWRcIiwgaXNBc2M6IHRydWUsIGVtcHR5Rmlyc3Q6IHRydWV9XVxuICogbm9ybWFsaXplU29ydGVyKFt7aWQ6IHtkaXI6IFwiZGVzY1wiLCBlbXB0eUZpcnN0OiBmYWxzZX19XSkgLT4gW3twYXRoOiBcImlkXCIsIGlzQXNjOiBmYWxzZSwgZW1wdHlGaXJzdDogZmFsc2V9XVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb3J0ZXJOb3JtYWxpemU8VCBleHRlbmRzIE1vZGVsPihzb3J0ZXJzOiBTb3J0ZXI8VD4pOiBTb3J0ZXJOb3JtYWxpemVkIHtcbiAgICByZXR1cm4gZmxhdHRlbkRlZXAoXG4gICAgICAgIChzb3J0ZXJzIGFzIGFueSkubWFwKChzOiBhbnkpID0+XG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhzKS5tYXAoKFtrLCB2XSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0FzYyA9IHYudG9Mb3dlckNhc2UoKSA9PT0gXCJhc2NcIlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBwYXRoOiBrLCBpc0FzYywgZW1wdHlGaXJzdDogaXNBc2MgPyBmYWxzZSA6IHRydWUgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh2KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogayxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQXNjOiAoKHYgYXMgU29ydERpckV4dHJhKS5kaXIgfHwgXCJhc2NcIikudG9Mb3dlckNhc2UoKSA9PT0gXCJhc2NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGVtcHR5Rmlyc3Q6ICh2IGFzIFNvcnREaXJFeHRyYSkuZW1wdHlGaXJzdCA9PSBudWxsID8gdHJ1ZSA6ICEhKHYgYXMgU29ydERpckV4dHJhKS5lbXB0eUZpcnN0XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgc29ydGVyOiAke3Z9YClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgKVxufVxuXG5mdW5jdGlvbiBfc29ydGVyQ29tcGlsZTxUIGV4dGVuZHMgTW9kZWw+KHNvcnRlcnM6IFNvcnRlcjxUPik6IFNvcnRlckZuPFQ+IHtcbiAgICBpZiAoc29ydGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIChfYSwgX2IpID0+IDBcbiAgICB9XG5cbiAgICBjb25zdCBub3JtID0gc29ydGVyTm9ybWFsaXplPFQ+KHNvcnRlcnMpLm1hcChjcmVhdGVDb21wYXJhdG9yKVxuICAgIGlmIChub3JtLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gbm9ybVswXVxuICAgIH1cblxuICAgIGNvbnN0IGluaXRpYWwgPSBub3JtLnBvcCgpIVxuICAgIHJldHVybiBub3JtLnJlZHVjZVJpZ2h0PFNvcnRlckZuPFQ+PihcbiAgICAgICAgKG5leHQsIGN1cnIpID0+IChhLCBiKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByID0gY3VycihhLCBiKVxuICAgICAgICAgICAgcmV0dXJuIHIgPT09IDAgPyBuZXh0KGEsIGIpIDogclxuICAgICAgICB9LFxuICAgICAgICBpbml0aWFsXG4gICAgKVxufVxuXG5mdW5jdGlvbiBjcmVhdGVDb21wYXJhdG9yKHsgcGF0aCwgaXNBc2MsIGVtcHR5Rmlyc3QgfTogTm9ybWFsaXplZEVudHJ5KTogU29ydGVyRm4ge1xuICAgIGNvbnN0IGdldHRlciA9IHBhdGhHZXR0ZXJDb21waWxlKHBhdGgpXG4gICAgaWYgKGlzQXNjKSB7XG4gICAgICAgIHJldHVybiAoYSwgYikgPT4gY29tcGFyZShnZXR0ZXIoYSksIGdldHRlcihiKSwgZW1wdHlGaXJzdClcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gKGEsIGIpID0+IGNvbXBhcmUoZ2V0dGVyKGEpLCBnZXR0ZXIoYiksICFlbXB0eUZpcnN0KSAqIC0xXG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcGFyZShhOiBhbnksIGI6IGFueSwgZW1wdHlGaXJzdDogYm9vbGVhbik6IG51bWJlciB7XG4gICAgLy8gY29uc29sZS5sb2coXCJDT01QQVJFXCIsIGEsIGIpXG4gICAgaWYgKGEgPT0gbnVsbCAmJiBiICE9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGVtcHR5Rmlyc3QgPT09IHRydWUgPyAtMSA6IDFcbiAgICB9IGVsc2UgaWYgKGEgIT0gbnVsbCAmJiBiID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGVtcHR5Rmlyc3QgPT09IHRydWUgPyAxIDogLTFcbiAgICB9IGVsc2UgaWYgKGEgPT0gbnVsbCAmJiBiID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIDBcbiAgICB9IGVsc2UgaWYgKGlzRXF1YWwoYSwgYikpIHtcbiAgICAgICAgcmV0dXJuIDBcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhID09PSBcIm51bWJlclwiICYmIHR5cGVvZiBiID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHJldHVybiBhIC0gYlxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGEgPT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIGIgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgY29uc3QgYWwgPSBhLmxlbmd0aFxuICAgICAgICBjb25zdCBibCA9IGIubGVuZ3RoXG4gICAgICAgIC8vIGlmIGJvdGggbGVuZ3RocyBpcyAwIHRoZSBjb2RlIGV4ZWN1dGlvbiBub3QgcmVhY2ggdGhhdCBwb2ludCwgYmVjYXVzZSBhID09PSBiXG4gICAgICAgIGlmIChlbXB0eUZpcnN0ID09PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoYWwgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gLTFcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYmwgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGFsID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDFcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYmwgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gLTFcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYS5sb2NhbGVDb21wYXJlKGIpXG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGEpICYmIEFycmF5LmlzQXJyYXkoYikpIHtcbiAgICAgICAgY29uc3QgYWwgPSBhLmxlbmd0aFxuICAgICAgICBjb25zdCBibCA9IGIubGVuZ3RoXG4gICAgICAgIGNvbnN0IGwgPSBNYXRoLm1pbihhbCwgYmwpXG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGNvbXBhcmUoYVtpXSwgYltpXSwgZW1wdHlGaXJzdClcbiAgICAgICAgICAgIGlmIChyZXMgIT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWwgPT09IGJsKSB7XG4gICAgICAgICAgICByZXR1cm4gMFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVtcHR5Rmlyc3QgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChhbCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAtMVxuICAgICAgICAgICAgfSBlbHNlIGlmIChibCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAxXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoYWwgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMVxuICAgICAgICAgICAgfSBlbHNlIGlmIChibCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAtMVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFsIC0gYmxcbiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QoYSkgJiYgaXNQbGFpbk9iamVjdChiKSkge1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYSkubG9jYWxlQ29tcGFyZShKU09OLnN0cmluZ2lmeShiKSlcbiAgICB9XG5cbiAgICByZXR1cm4gYSA+IGIgPyAtMSA6IDFcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvcnRlck1lcmdlPFQgZXh0ZW5kcyBNb2RlbD4oLi4uc29ydGVyczogQXJyYXk8U29ydGVyPFQ+IHwgdW5kZWZpbmVkIHwgbnVsbD4pOiBTb3J0ZXI8VD4gfCB1bmRlZmluZWQge1xuICAgIGxldCByZXN1bHQ6IFNvcnRlcjxUPiB8IHVuZGVmaW5lZFxuXG4gICAgZm9yIChjb25zdCBzb3J0ZXIgb2Ygc29ydGVycykge1xuICAgICAgICBpZiAoc29ydGVyID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBkZWVwQ2xvbmUoc29ydGVyKVxuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3Qgc2VudHJ5IG9mIHNvcnRlcikge1xuICAgICAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMoc2VudHJ5KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nID0gKHJlc3VsdCBhcyBhbnkpLmZpbmQoKHZhbHVlOiBhbnkpID0+IHZhbHVlW2tdICE9IG51bGwpXG4gICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSAoZXhpc3RpbmcgYXMgYW55KVtrXVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGV4aXN0aW5nKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3BsaWNlKHJlc3VsdC5pbmRleE9mKGV4aXN0aW5nKSwgMSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDsoZXhpc3RpbmcgYXMgYW55KVtrXSA9IGRlZXBDbG9uZSh2KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goeyBba106IGRlZXBDbG9uZSh2KSB9IGFzIGFueSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb3J0ZXJGaW5kPFQgZXh0ZW5kcyBNb2RlbD4oc29ydGVyczogU29ydGVyPFQ+LCBuYW1lOiBzdHJpbmcpOiBTb3J0RGlyIHwgU29ydERpckV4dHJhIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzb3J0ZXIgPSBzb3J0ZXJzLmZpbmQodiA9PiB2W25hbWVdICE9IG51bGwpXG4gICAgaWYgKHNvcnRlciAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBzb3J0ZXJbbmFtZV1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxufVxuIl19
@@ -1,5 +1,5 @@
1
1
  import { map } from "rxjs";
2
- import { sorterMerge, sorterFind } from "../../query";
2
+ import { sorterFind, sorterMerge } from "../../query";
3
3
  import { mergedProperty, Property, PropertyCombined } from "./abstract";
4
4
  export class SorterProperty extends Property {
5
5
  update(other) {
@@ -15,7 +15,7 @@ export class SorterCombined extends PropertyCombined {
15
15
  this.merged$ = mergedProperty(sorterMerge, this.normal, this.forced);
16
16
  }
17
17
  of(name) {
18
- return this.merged$.pipe(map((sorters) => sorters == null ? undefined : sorterFind(sorters, name)));
18
+ return this.merged$.pipe(map((sorters) => (sorters == null ? undefined : sorterFind(sorters, name))));
19
19
  }
20
20
  directionOf(name) {
21
21
  return this.of(name).pipe(map(value => {
@@ -40,4 +40,4 @@ export class SorterCombined extends PropertyCombined {
40
40
  return this.directionOf(name).pipe(map(v => v === "desc" /* SortDirection.Desc */));
41
41
  }
42
42
  }
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGF0YS9zcmMvc291cmNlL3Byb3BlcnRpZXMvc29ydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFJdEMsT0FBTyxFQUFFLFdBQVcsRUFBaUIsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQ3BFLE9BQU8sRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sWUFBWSxDQUFBO0FBR3ZFLE1BQU0sT0FBTyxjQUFrQixTQUFRLFFBQVc7SUFDckMsTUFBTSxDQUFDLEtBQVE7UUFDcEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUUsSUFBdUIsQ0FBQyxLQUFLLEVBQUUsS0FBWSxDQUFRLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDckYsQ0FBQztDQUNKO0FBS0QsTUFBTSxPQUFPLGNBQWdDLFNBQVEsZ0JBQW1CO0lBQXhFOztRQUNhLFdBQU0sR0FBRyxJQUFJLGNBQWMsQ0FBSSxTQUFTLENBQUMsQ0FBQTtRQUN6QyxXQUFNLEdBQUcsSUFBSSxjQUFjLENBQUksU0FBUyxDQUFDLENBQUE7UUFDbEQsMEJBQTBCO1FBQ2pCLFlBQU8sR0FBNEMsY0FBYyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQStCckgsQ0FBQztJQTdCRyxFQUFFLENBQUMsSUFBWTtRQUNYLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ3BCLEdBQUcsQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQ2pGLENBQUE7SUFDTCxDQUFDO0lBRUQsV0FBVyxDQUFDLElBQVk7UUFDcEIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbEMsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ2hCLE9BQU8sU0FBUyxDQUFBO1lBQ3BCLENBQUM7aUJBQU0sSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDbkMsT0FBTyxLQUFLLENBQUE7WUFDaEIsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQTtZQUNwQixDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNQLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDM0QsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLGtDQUFzQixDQUFDLENBQUMsQ0FBQTtJQUN6RSxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQVk7UUFDZixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsb0NBQXVCLENBQUMsQ0FBQyxDQUFBO0lBQzFFLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIG1hcCB9IGZyb20gXCJyeGpzXCJcblxuaW1wb3J0IHsgRGVlcFJlYWRvbmx5IH0gZnJvbSBcIkBuZ3V0aWwvY29tbW9uXCJcblxuaW1wb3J0IHsgc29ydGVyTWVyZ2UsIFNvcnREaXJlY3Rpb24sIHNvcnRlckZpbmQgfSBmcm9tIFwiLi4vLi4vcXVlcnlcIlxuaW1wb3J0IHsgbWVyZ2VkUHJvcGVydHksIFByb3BlcnR5LCBQcm9wZXJ0eUNvbWJpbmVkIH0gZnJvbSBcIi4vYWJzdHJhY3RcIlxuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiLi4vLi4vbW9kZWxcIlxuXG5leHBvcnQgY2xhc3MgU29ydGVyUHJvcGVydHk8VD4gZXh0ZW5kcyBQcm9wZXJ0eTxUPiB7XG4gICAgb3ZlcnJpZGUgdXBkYXRlKG90aGVyOiBUKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0KHNvcnRlck1lcmdlKCh0aGlzIGFzIHsgdmFsdWU6IGFueSB9KS52YWx1ZSwgb3RoZXIgYXMgYW55KSBhcyBhbnksIGZhbHNlKVxuICAgIH1cbn1cblxuXG50eXBlIE9mVHlwZXM8VCBleHRlbmRzIE1vZGVsPiA9IFJldHVyblR5cGU8dHlwZW9mIHNvcnRlckZpbmQ8VD4+XG5cbmV4cG9ydCBjbGFzcyBTb3J0ZXJDb21iaW5lZDxUIGV4dGVuZHMgTW9kZWw+IGV4dGVuZHMgUHJvcGVydHlDb21iaW5lZDxUPiB7XG4gICAgb3ZlcnJpZGUgbm9ybWFsID0gbmV3IFNvcnRlclByb3BlcnR5PFQ+KHVuZGVmaW5lZClcbiAgICBvdmVycmlkZSBmb3JjZWQgPSBuZXcgU29ydGVyUHJvcGVydHk8VD4odW5kZWZpbmVkKVxuICAgIC8vIFRPRE86IG5vcm1hbGl6ZWQgc29ydGVyXG4gICAgb3ZlcnJpZGUgbWVyZ2VkJDogT2JzZXJ2YWJsZTxEZWVwUmVhZG9ubHk8VD4gfCB1bmRlZmluZWQ+ID0gbWVyZ2VkUHJvcGVydHkoc29ydGVyTWVyZ2UsIHRoaXMubm9ybWFsLCB0aGlzLmZvcmNlZClcblxuICAgIG9mKG5hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8T2ZUeXBlczxUPj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tZXJnZWQkLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHNvcnRlcnM6IGFueSkgPT4gc29ydGVycyA9PSBudWxsID8gdW5kZWZpbmVkIDogc29ydGVyRmluZChzb3J0ZXJzLCBuYW1lKSlcbiAgICAgICAgKVxuICAgIH1cblxuICAgIGRpcmVjdGlvbk9mKG5hbWU6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5vZihuYW1lKS5waXBlKG1hcCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5kaXJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpXG4gICAgfVxuXG4gICAgaXNTZXQobmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpcmVjdGlvbk9mKG5hbWUpLnBpcGUobWFwKHYgPT4gdiAhPSBudWxsKSlcbiAgICB9XG5cbiAgICBpc0FzYyhuYW1lOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlyZWN0aW9uT2YobmFtZSkucGlwZShtYXAodiA9PiB2ID09PSBTb3J0RGlyZWN0aW9uLkFzYykpXG4gICAgfVxuXG4gICAgaXNEZXNjKG5hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXJlY3Rpb25PZihuYW1lKS5waXBlKG1hcCh2ID0+IHYgPT09IFNvcnREaXJlY3Rpb24uRGVzYykpXG4gICAgfVxufVxuIl19
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGF0YS9zcmMvc291cmNlL3Byb3BlcnRpZXMvc29ydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxHQUFHLEVBQWMsTUFBTSxNQUFNLENBQUE7QUFLdEMsT0FBTyxFQUFpQixVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQ3BFLE9BQU8sRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sWUFBWSxDQUFBO0FBRXZFLE1BQU0sT0FBTyxjQUFrQixTQUFRLFFBQVc7SUFDckMsTUFBTSxDQUFDLEtBQVE7UUFDcEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUUsSUFBdUIsQ0FBQyxLQUFLLEVBQUUsS0FBWSxDQUFRLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDckYsQ0FBQztDQUNKO0FBSUQsTUFBTSxPQUFPLGNBQWdDLFNBQVEsZ0JBQW1CO0lBQXhFOztRQUNhLFdBQU0sR0FBRyxJQUFJLGNBQWMsQ0FBSSxTQUFTLENBQUMsQ0FBQTtRQUN6QyxXQUFNLEdBQUcsSUFBSSxjQUFjLENBQUksU0FBUyxDQUFDLENBQUE7UUFDbEQsMEJBQTBCO1FBQ2pCLFlBQU8sR0FBNEMsY0FBYyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQStCckgsQ0FBQztJQTdCRyxFQUFFLENBQUMsSUFBWTtRQUNYLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUM5RyxDQUFDO0lBRUQsV0FBVyxDQUFDLElBQVk7UUFDcEIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FDckIsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ1IsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ2hCLE9BQU8sU0FBUyxDQUFBO1lBQ3BCLENBQUM7aUJBQU0sSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDbkMsT0FBTyxLQUFLLENBQUE7WUFDaEIsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQTtZQUNwQixDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQ0wsQ0FBQTtJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDM0QsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLGtDQUFzQixDQUFDLENBQUMsQ0FBQTtJQUN6RSxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQVk7UUFDZixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsb0NBQXVCLENBQUMsQ0FBQyxDQUFBO0lBQzFFLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1hcCwgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCJcblxuaW1wb3J0IHsgRGVlcFJlYWRvbmx5IH0gZnJvbSBcIkBuZ3V0aWwvY29tbW9uXCJcblxuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiLi4vLi4vbW9kZWxcIlxuaW1wb3J0IHsgU29ydERpcmVjdGlvbiwgc29ydGVyRmluZCwgc29ydGVyTWVyZ2UgfSBmcm9tIFwiLi4vLi4vcXVlcnlcIlxuaW1wb3J0IHsgbWVyZ2VkUHJvcGVydHksIFByb3BlcnR5LCBQcm9wZXJ0eUNvbWJpbmVkIH0gZnJvbSBcIi4vYWJzdHJhY3RcIlxuXG5leHBvcnQgY2xhc3MgU29ydGVyUHJvcGVydHk8VD4gZXh0ZW5kcyBQcm9wZXJ0eTxUPiB7XG4gICAgb3ZlcnJpZGUgdXBkYXRlKG90aGVyOiBUKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0KHNvcnRlck1lcmdlKCh0aGlzIGFzIHsgdmFsdWU6IGFueSB9KS52YWx1ZSwgb3RoZXIgYXMgYW55KSBhcyBhbnksIGZhbHNlKVxuICAgIH1cbn1cblxudHlwZSBPZlR5cGVzPFQgZXh0ZW5kcyBNb2RlbD4gPSBSZXR1cm5UeXBlPHR5cGVvZiBzb3J0ZXJGaW5kPFQ+PlxuXG5leHBvcnQgY2xhc3MgU29ydGVyQ29tYmluZWQ8VCBleHRlbmRzIE1vZGVsPiBleHRlbmRzIFByb3BlcnR5Q29tYmluZWQ8VD4ge1xuICAgIG92ZXJyaWRlIG5vcm1hbCA9IG5ldyBTb3J0ZXJQcm9wZXJ0eTxUPih1bmRlZmluZWQpXG4gICAgb3ZlcnJpZGUgZm9yY2VkID0gbmV3IFNvcnRlclByb3BlcnR5PFQ+KHVuZGVmaW5lZClcbiAgICAvLyBUT0RPOiBub3JtYWxpemVkIHNvcnRlclxuICAgIG92ZXJyaWRlIG1lcmdlZCQ6IE9ic2VydmFibGU8RGVlcFJlYWRvbmx5PFQ+IHwgdW5kZWZpbmVkPiA9IG1lcmdlZFByb3BlcnR5KHNvcnRlck1lcmdlLCB0aGlzLm5vcm1hbCwgdGhpcy5mb3JjZWQpXG5cbiAgICBvZihuYW1lOiBzdHJpbmcpOiBPYnNlcnZhYmxlPE9mVHlwZXM8VD4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWVyZ2VkJC5waXBlKG1hcCgoc29ydGVyczogYW55KSA9PiAoc29ydGVycyA9PSBudWxsID8gdW5kZWZpbmVkIDogc29ydGVyRmluZChzb3J0ZXJzLCBuYW1lKSkpKVxuICAgIH1cblxuICAgIGRpcmVjdGlvbk9mKG5hbWU6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5vZihuYW1lKS5waXBlKFxuICAgICAgICAgICAgbWFwKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmRpclxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICB9XG5cbiAgICBpc1NldChuYW1lOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlyZWN0aW9uT2YobmFtZSkucGlwZShtYXAodiA9PiB2ICE9IG51bGwpKVxuICAgIH1cblxuICAgIGlzQXNjKG5hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXJlY3Rpb25PZihuYW1lKS5waXBlKG1hcCh2ID0+IHYgPT09IFNvcnREaXJlY3Rpb24uQXNjKSlcbiAgICB9XG5cbiAgICBpc0Rlc2MobmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpcmVjdGlvbk9mKG5hbWUpLnBpcGUobWFwKHYgPT4gdiA9PT0gU29ydERpcmVjdGlvbi5EZXNjKSlcbiAgICB9XG59XG4iXX0=
@@ -1,6 +1,6 @@
1
1
  import { DataSource as CdkDataSource } from "@angular/cdk/collections";
2
2
  import { BehaviorSubject, combineLatest, debounceTime, distinctUntilChanged, finalize, map, Observable, of, ReplaySubject, shareReplay, Subject, switchMap, take, takeUntil, tap } from "rxjs";
3
- import { isEqual, merge } from "lodash";
3
+ import { isEqual } from "lodash";
4
4
  import { deepClone, deepFreeze } from "@ngutil/common";
5
5
  import { MemoryStore } from "../store";
6
6
  import { FilterCombined, GrouperCombined, SlimerCombined, SorterCombined } from "./properties";
@@ -26,26 +26,26 @@ export class DataSource extends CdkDataSource {
26
26
  }).pipe(shareReplay(1));
27
27
  this.#slice = new ReplaySubject(1);
28
28
  this.slice$ = this.#slice.pipe(switchMap(slice => this.provider.clampSlice(slice)), distinctUntilChanged(isEqual), map(slice => deepFreeze(deepClone(slice))), shareReplay(1));
29
- this.#reload = new Subject();
30
- this.reset$ = merge(this.#queryBase, this.#reload).pipe(tap(() => this.#setBusy(true)), switchMap(() => this.store.clear()), shareReplay(1));
31
- this.query$ = combineLatest({ base: this.#queryBase, slice: this.slice$ }).pipe(map(({ base, slice }) => {
32
- return { ...base, slice };
33
- }), shareReplay(1));
34
- this.items$ = combineLatest({ query: this.query$, reset: this.reset$ }).pipe(tap(() => this.#setBusy(true)), debounceTime(DEBOUNCE_TIME), switchMap(({ query }) => {
35
- return this.store.hasSlice(query.slice).pipe(switchMap(hasSlice => {
36
- if (hasSlice) {
37
- return this.store.getSlice(query.slice);
38
- }
39
- else {
40
- return this.provider.queryList(query).pipe(switchMap(result => {
41
- if (result.total != null) {
42
- this.total$.next(result.total);
43
- }
44
- return this.store.insertSlice(query.slice, result.items);
45
- }), take(1));
46
- }
47
- }));
48
- }), finalize(() => this.#setBusy(false)), shareReplay(1));
29
+ this.#reload = new BehaviorSubject(undefined);
30
+ this.query$ = combineLatest({ base: this.#queryBase, reload: this.#reload }).pipe(tap(() => this.#setBusy(true)),
31
+ // TODO: maybe silent reset or prevent items$ chenges
32
+ // TODO: alternative solution use cacheId, and query item from store with this cacheId
33
+ switchMap(({ base }) => this.store.clear().pipe(map(() => base))), switchMap(queryBase => this.slice$.pipe(tap(() => this.#setBusy(true)), map(slice => {
34
+ return { ...queryBase, slice };
35
+ }))), shareReplay(1));
36
+ this.items$ = this.query$.pipe(tap(() => this.#setBusy(true)), debounceTime(DEBOUNCE_TIME), switchMap(query => this.store.hasSlice(query.slice).pipe(switchMap(hasSlice => {
37
+ if (hasSlice) {
38
+ return this.store.getSlice(query.slice);
39
+ }
40
+ else {
41
+ return this.provider.queryList(query).pipe(switchMap(result => {
42
+ if (result.total != null) {
43
+ this.total$.next(result.total);
44
+ }
45
+ return this.store.insertSlice(query.slice, result.items);
46
+ }), take(1));
47
+ }
48
+ }))), finalize(() => this.#setBusy(false)), shareReplay(1));
49
49
  this.#cvSubs = new Map();
50
50
  if (store == null) {
51
51
  store = new MemoryStore();
@@ -106,4 +106,4 @@ export class DataSource extends CdkDataSource {
106
106
  this.#cvSubs.delete(collectionViewer);
107
107
  }
108
108
  }
109
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGF0YS9zcmMvc291cmNlL3NvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxJQUFJLGFBQWEsRUFBb0IsTUFBTSwwQkFBMEIsQ0FBQTtBQUV4RixPQUFPLEVBQ0gsZUFBZSxFQUNmLGFBQWEsRUFFYixZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLFFBQVEsRUFDUixHQUFHLEVBQ0gsVUFBVSxFQUNWLEVBQUUsRUFDRixhQUFhLEVBQ2IsV0FBVyxFQUNYLE9BQU8sRUFFUCxTQUFTLEVBQ1QsSUFBSSxFQUNKLFNBQVMsRUFDVCxHQUFHLEVBQ04sTUFBTSxNQUFNLENBQUE7QUFFYixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUV2QyxPQUFPLEVBQW1CLFNBQVMsRUFBRSxVQUFVLEVBQWdCLE1BQU0sZ0JBQWdCLENBQUE7QUFLckYsT0FBTyxFQUF3QixXQUFXLEVBQTBCLE1BQU0sVUFBVSxDQUFBO0FBQ3BGLE9BQU8sRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFFOUYsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFBO0FBSXhCLE1BQU0sT0FBTyxVQUE0QixTQUFRLGFBQTRCO0lBU2hFLFVBQVUsQ0FLSTtJQUVkLE1BQU0sQ0FBOEI7SUFRcEMsT0FBTyxDQUFzQjtJQXlDdEMsWUFDb0IsUUFBeUIsRUFDekMsS0FBMEI7UUFFMUIsS0FBSyxFQUFFLENBQUE7UUFIUyxhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQWpFcEMsVUFBSyxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFBO1FBQzNDLFdBQU0sR0FBRyxJQUFJLGVBQWUsQ0FBcUIsU0FBUyxDQUFDLENBQUE7UUFFM0QsV0FBTSxHQUFHLElBQUksY0FB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QUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUV6QyxPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsVUFBa0QsRUFBRSxFQUFFO1lBQ3pFLE1BQU0sSUFBSSxHQUFHLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQy9ELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1lBRTlDLE9BQU8sR0FBRyxFQUFFO2dCQUNSLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQztvQkFDL0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtnQkFDekMsQ0FBQztnQkFDRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7Z0JBQ2xCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtZQUN0QixDQUFDLENBQUE7UUFDTCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7SUFDN0IsQ0FBQztJQUVRLFVBQVUsQ0FBQyxnQkFBa0M7UUFDbEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQTtRQUMxQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO0lBQ3pDLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGFTb3VyY2UgYXMgQ2RrRGF0YVNvdXJjZSwgQ29sbGVjdGlvblZpZXdlciB9IGZyb20gXCJAYW5ndWxhci9jZGsvY29sbGVjdGlvbnNcIlxuXG5pbXBvcnQge1xuICAgIEJlaGF2aW9yU3ViamVjdCxcbiAgICBjb21iaW5lTGF0ZXN0LFxuICAgIGNvbmNhdE1hcCxcbiAgICBkZWJvdW5jZVRpbWUsXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gICAgZmluYWxpemUsXG4gICAgbWFwLFxuICAgIE9ic2VydmFibGUsXG4gICAgb2YsXG4gICAgUmVwbGF5U3ViamVjdCxcbiAgICBzaGFyZVJlcGxheSxcbiAgICBTdWJqZWN0LFxuICAgIFN1YnNjcmliZXIsXG4gICAgc3dpdGNoTWFwLFxuICAgIHRha2UsXG4gICAgdGFrZVVudGlsLFxuICAgIHRhcFxufSBmcm9tIFwicnhqc1wiXG5cbmltcG9ydCB7IGlzRXF1YWwsIG1lcmdlIH0gZnJvbSBcImxvZGFzaFwiXG5cbmltcG9ydCB7IENvbm5lY3RQcm90b2NvbCwgZGVlcENsb25lLCBkZWVwRnJlZXplLCBEZWVwUmVhZG9ubHkgfSBmcm9tIFwiQG5ndXRpbC9jb21tb25cIlxuXG5pbXBvcnQgdHlwZSB7IE1vZGVsLCBNb2RlbFJlZiB9IGZyb20gXCIuLi9tb2RlbFwiXG5pbXBvcnQgdHlwZSB7IERhdGFQcm92aWRlciB9IGZyb20gXCIuLi9wcm92aWRlci9wcm92aWRlclwiXG5pbXBvcnQgdHlwZSB7IEZpbHRlciwgR3JvdXBlciwgUXVlcnksIFNsaWNlLCBTbGltZXIsIFNvcnRlciB9IGZyb20gXCIuLi9xdWVyeVwiXG5pbXBvcnQgeyB0eXBlIENvbGxlY3Rpb25TdG9yZSwgTWVtb3J5U3RvcmUsIHR5cGUgUGFydGlhbENvbGxlY3Rpb24gfSBmcm9tIFwiLi4vc3RvcmVcIlxuaW1wb3J0IHsgRmlsdGVyQ29tYmluZWQsIEdyb3VwZXJDb21iaW5lZCwgU2xpbWVyQ29tYmluZWQsIFNvcnRlckNvbWJpbmVkIH0gZnJvbSBcIi4vcHJvcGVydGllc1wiXG5cbmNvbnN0IERFQk9VTkNFX1RJTUUgPSA1MFxuXG50eXBlIERTUXVlcnk8VCBleHRlbmRzIE1vZGVsPiA9IFF1ZXJ5PFQ+ICYgeyBzbGljZTogRGVlcFJlYWRvbmx5PFNsaWNlPiB9XG5cbmV4cG9ydCBjbGFzcyBEYXRhU291cmNlPFQgZXh0ZW5kcyBNb2RlbD4gZXh0ZW5kcyBDZGtEYXRhU291cmNlPFQgfCB1bmRlZmluZWQ+IGltcGxlbWVudHMgQ29ubmVjdFByb3RvY29sIHtcbiAgICByZWFkb25seSBidXN5JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpXG4gICAgcmVhZG9ubHkgdG90YWwkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcblxuICAgIHJlYWRvbmx5IGZpbHRlciA9IG5ldyBGaWx0ZXJDb21iaW5lZDxGaWx0ZXI8VD4+KClcbiAgICByZWFkb25seSBzb3J0ZXIgPSBuZXcgU29ydGVyQ29tYmluZWQ8U29ydGVyPFQ+PigpXG4gICAgcmVhZG9ubHkgc2xpbWVyID0gbmV3IFNsaW1lckNvbWJpbmVkPFNsaW1lcjxUPj4oKVxuICAgIHJlYWRvbmx5IGdyb3VwZXIgPSBuZXcgR3JvdXBlckNvbWJpbmVkPEdyb3VwZXI8VD4+KClcblxuICAgIHJlYWRvbmx5ICNxdWVyeUJhc2UgPSBjb21iaW5lTGF0ZXN0KHtcbiAgICAgICAgZmlsdGVyOiB0aGlzLmZpbHRlci5tZXJnZWQkLFxuICAgICAgICBzb3J0ZXI6IHRoaXMuc29ydGVyLm1lcmdlZCQsXG4gICAgICAgIHNsaW1lcjogdGhpcy5zbGltZXIubWVyZ2VkJCxcbiAgICAgICAgZ3JvdXBlcjogdGhpcy5ncm91cGVyLm1lcmdlZCRcbiAgICB9KS5waXBlKHNoYXJlUmVwbGF5KDEpKVxuXG4gICAgcmVhZG9ubHkgI3NsaWNlID0gbmV3IFJlcGxheVN1YmplY3Q8U2xpY2U+KDEpXG4gICAgcmVhZG9ubHkgc2xpY2UkOiBPYnNlcnZhYmxlPFNsaWNlPiA9IHRoaXMuI3NsaWNlLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcChzbGljZSA9PiB0aGlzLnByb3ZpZGVyLmNsYW1wU2xpY2Uoc2xpY2UpKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoaXNFcXVhbCksXG4gICAgICAgIG1hcChzbGljZSA9PiBkZWVwRnJlZXplKGRlZXBDbG9uZShzbGljZSkpKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApXG5cbiAgICByZWFkb25seSAjcmVsb2FkID0gbmV3IFN1YmplY3Q8dm9pZD4oKVxuICAgIHJlYWRvbmx5IHJlc2V0JDogT2JzZXJ2YWJsZTx1bmtub3duPiA9IG1lcmdlKHRoaXMuI3F1ZXJ5QmFzZSwgdGhpcy4jcmVsb2FkKS5waXBlKFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy4jc2V0QnVzeSh0cnVlKSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLnN0b3JlLmNsZWFyKCkpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgIClcblxuICAgIHJlYWRvbmx5IHF1ZXJ5JDogT2JzZXJ2YWJsZTxEU1F1ZXJ5PFQ+PiA9IGNvbWJpbmVMYXRlc3QoeyBiYXNlOiB0aGlzLiNxdWVyeUJhc2UsIHNsaWNlOiB0aGlzLnNsaWNlJCB9KS5waXBlKFxuICAgICAgICBtYXAoKHsgYmFzZSwgc2xpY2UgfSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgc2xpY2UgfVxuICAgICAgICB9KSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApXG5cbiAgICByZWFkb25seSBpdGVtcyQ6IE9ic2VydmFibGU8UGFydGlhbENvbGxlY3Rpb248VD4+ID0gY29tYmluZUxhdGVzdCh7IHF1ZXJ5OiB0aGlzLnF1ZXJ5JCwgcmVzZXQ6IHRoaXMucmVzZXQkIH0pLnBpcGUoXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLiNzZXRCdXN5KHRydWUpKSxcbiAgICAgICAgZGVib3VuY2VUaW1lKERFQk9VTkNFX1RJTUUpLFxuICAgICAgICBzd2l0Y2hNYXAoKHsgcXVlcnkgfSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuaGFzU2xpY2UocXVlcnkuc2xpY2UpLnBpcGUoXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKGhhc1NsaWNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1NsaWNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5nZXRTbGljZShxdWVyeS5zbGljZSlcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3ZpZGVyLnF1ZXJ5TGlzdChxdWVyeSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC50b3RhbCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvdGFsJC5uZXh0KHJlc3VsdC50b3RhbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5pbnNlcnRTbGljZShxdWVyeS5zbGljZSwgcmVzdWx0Lml0ZW1zKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2UoMSlcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgIH0pLFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLiNzZXRCdXN5KGZhbHNlKSksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKVxuXG4gICAgcmVhZG9ubHkgc3RvcmU6IENvbGxlY3Rpb25TdG9yZTxUPlxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgcHJvdmlkZXI6IERhdGFQcm92aWRlcjxUPixcbiAgICAgICAgc3RvcmU/OiBDb2xsZWN0aW9uU3RvcmU8VD5cbiAgICApIHtcbiAgICAgICAgc3VwZXIoKVxuICAgICAgICBpZiAoc3RvcmUgPT0gbnVsbCkge1xuICAgICAgICAgICAgc3RvcmUgPSBuZXcgTWVtb3J5U3RvcmUoKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RvcmUgPSBzdG9yZVxuICAgIH1cblxuICAgIHNldFNsaWNlKHNsaWNlOiBTbGljZSkge1xuICAgICAgICB0aGlzLiNzbGljZS5uZXh0KHNsaWNlKVxuICAgICAgICByZXR1cm4gdGhpc1xuICAgIH1cblxuICAgIGFsbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0U2xpY2Uoe3N0YXJ0OiAwLCBlbmQ6IEluZmluaXR5fSlcbiAgICB9XG5cbiAgICByZWFsb2QoKSB7XG4gICAgICAgIHRoaXMuI3JlbG9hZC5uZXh0KClcbiAgICB9XG5cbiAgICBnZXRJdGVtKHJlZjogTW9kZWxSZWYpOiBPYnNlcnZhYmxlPFQgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgcmVmbiA9IHRoaXMucHJvdmlkZXIubWV0YS5ub3JtYWxpemVSZWYocmVmKVxuICAgICAgICByZXR1cm4gdGhpcy4jc3RvcmVGaXJzdChcbiAgICAgICAgICAgIHF1ZXJ5ID0+IHRoaXMuc3RvcmUuZ2V0KHJlZm4pLFxuICAgICAgICAgICAgcXVlcnkgPT4gdGhpcy5wcm92aWRlci5xdWVyeUl0ZW0ocmVmbiwgcXVlcnkpXG4gICAgICAgIClcbiAgICB9XG5cbiAgICBnZXRJdGVtUG9zaXRpb24ocmVmOiBNb2RlbFJlZik6IE9ic2VydmFibGU8bnVtYmVyIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IHJlZm4gPSB0aGlzLnByb3ZpZGVyLm1ldGEubm9ybWFsaXplUmVmKHJlZilcbiAgICAgICAgcmV0dXJuIHRoaXMuI3N0b3JlRmlyc3QoXG4gICAgICAgICAgICBxdWVyeSA9PiB0aGlzLnN0b3JlLmluZGV4T2YocmVmbikucGlwZShtYXAoaSA9PiAoaSA8IDAgPyB1bmRlZmluZWQgOiBpKSkpLFxuICAgICAgICAgICAgcXVlcnkgPT4gdGhpcy5wcm92aWRlci5xdWVyeVBvc2l0aW9uKHJlZm4sIHF1ZXJ5KVxuICAgICAgICApXG4gICAgfVxuXG4gICAgcmVhbG9kSXRlbShyZWY6IE1vZGVsUmVmLCBpbnNlcnRQb3NpdGlvbj86IG51bWJlcik6IE9ic2VydmFibGU8VCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCByZWZuID0gdGhpcy5wcm92aWRlci5tZXRhLm5vcm1hbGl6ZVJlZihyZWYpXG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXJ5JC5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKHF1ZXJ5ID0+IHRoaXMucHJvdmlkZXIucXVlcnlJdGVtKHJlZm4sIHF1ZXJ5KSksXG4gICAgICAgICAgICBzd2l0Y2hNYXAoaXRlbSA9PlxuICAgICAgICAgICAgICAgIGl0ZW0gIT0gbnVsbCA/IHRoaXMuc3RvcmUudXBkYXRlT3JJbnNlcnQocmVmbiwgaXRlbSwgaW5zZXJ0UG9zaXRpb24pLnBpcGUobWFwKCgpID0+IGl0ZW0pKSA6IG9mKGl0ZW0pXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgdGFrZSgxKVxuICAgICAgICApXG4gICAgfVxuXG4gICAgI3N0b3JlRmlyc3Q8WD4oXG4gICAgICAgIHN0b3JlRm46IChxdWVyeTogUXVlcnk8VD4pID0+IE9ic2VydmFibGU8WD4sXG4gICAgICAgIHNlbGZGbjogKHF1ZXJ5OiBRdWVyeTxUPikgPT4gT2JzZXJ2YWJsZTxYPlxuICAgICk6IE9ic2VydmFibGU8WD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5xdWVyeSQucGlwZShcbiAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICBzd2l0Y2hNYXAocXVlcnkgPT4gc3RvcmVGbihxdWVyeSkucGlwZShzd2l0Y2hNYXAocmVzdWx0ID0+IChyZXN1bHQgPT0gbnVsbCA/IHNlbGZGbihxdWVyeSkgOiBvZihyZXN1bHQpKSkpKVxuICAgICAgICApXG4gICAgfVxuXG4gICAgI3NldEJ1c3koYnVzeTogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5wcm92aWRlci5pc0FzeW5jKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5idXN5JC52YWx1ZSAhPT0gYnVzeSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnVzeSQubmV4dChidXN5KVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgI2N2U3VicyA9IG5ldyBNYXA8Q29sbGVjdGlvblZpZXdlciwgU3ViamVjdDx2b2lkPj4oKVxuXG4gICAgb3ZlcnJpZGUgY29ubmVjdChjb2xsZWN0aW9uVmlld2VyOiBDb2xsZWN0aW9uVmlld2VyKTogT2JzZXJ2YWJsZTxyZWFkb25seSAoVCB8IHVuZGVmaW5lZClbXT4ge1xuICAgICAgICBjb25zdCB1bnRpbCA9IG5ldyBTdWJqZWN0PHZvaWQ+KClcblxuICAgICAgICB0aGlzLiNjdlN1YnMuZ2V0KGNvbGxlY3Rpb25WaWV3ZXIpPy5uZXh0KClcbiAgICAgICAgdGhpcy4jY3ZTdWJzLnNldChjb2xsZWN0aW9uVmlld2VyLCB1bnRpbClcblxuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKHN1YnNjcmliZXI6IFN1YnNjcmliZXI8cmVhZG9ubHkgKFQgfCB1bmRlZmluZWQpW10+KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdWIxID0gY29sbGVjdGlvblZpZXdlci52aWV3Q2hhbmdlLnN1YnNjcmliZSh0aGlzLiNzbGljZSlcbiAgICAgICAgICAgIGNvbnN0IHN1YjIgPSB0aGlzLml0ZW1zJC5zdWJzY3JpYmUoc3Vic2NyaWJlcilcblxuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy4jY3ZTdWJzLmdldChjb2xsZWN0aW9uVmlld2VyKSA9PT0gdW50aWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jY3ZTdWJzLmRlbGV0ZShjb2xsZWN0aW9uVmlld2VyKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdWIxLnVuc3Vic2NyaWJlKClcbiAgICAgICAgICAgICAgICBzdWIyLnVuc3Vic2NyaWJlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkucGlwZSh0YWtlVW50aWwodW50aWwpKVxuICAgIH1cblxuICAgIG92ZXJyaWRlIGRpc2Nvbm5lY3QoY29sbGVjdGlvblZpZXdlcjogQ29sbGVjdGlvblZpZXdlcik6IHZvaWQge1xuICAgICAgICB0aGlzLiNjdlN1YnMuZ2V0KGNvbGxlY3Rpb25WaWV3ZXIpPy5uZXh0KClcbiAgICAgICAgdGhpcy4jY3ZTdWJzLmRlbGV0ZShjb2xsZWN0aW9uVmlld2VyKVxuICAgIH1cbn1cbiJdfQ==
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGF0YS9zcmMvc291cmNlL3NvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxJQUFJLGFBQWEsRUFBb0IsTUFBTSwwQkFBMEIsQ0FBQTtBQUV4RixPQUFPLEVBQ0gsZUFBZSxFQUNmLGFBQWEsRUFDYixZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLFFBQVEsRUFDUixHQUFHLEVBQ0gsVUFBVSxFQUNWLEVBQUUsRUFDRixhQUFhLEVBQ2IsV0FBVyxFQUNYLE9BQU8sRUFFUCxTQUFTLEVBQ1QsSUFBSSxFQUNKLFNBQVMsRUFDVCxHQUFHLEVBQ04sTUFBTSxNQUFNLENBQUE7QUFFYixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBRWhDLE9BQU8sRUFBbUIsU0FBUyxFQUFFLFVBQVUsRUFBZ0IsTUFBTSxnQkFBZ0IsQ0FBQTtBQUtyRixPQUFPLEVBQXdCLFdBQVcsRUFBMEIsTUFBTSxVQUFVLENBQUE7QUFDcEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUU5RixNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUE7QUFJeEIsTUFBTSxPQUFPLFVBQTRCLFNBQVEsYUFBNEI7SUFTaEUsVUFBVSxDQUtJO0lBRWQsTUFBTSxDQUE4QjtJQVFwQyxPQUFPLENBQXVDO0lBNkN2RCxZQUNvQixRQUF5QixFQUN6QyxLQUEwQjtRQUUxQixLQUFLLEVBQUUsQ0FBQTtRQUhTLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBckVwQyxVQUFLLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUE7UUFDM0MsV0FBTSxHQUFHLElBQUksZUFBZSxDQUFxQixTQUFTLENBQUMsQ0FBQTtRQUUzRCxXQUFNLEdBQUcsSUFBSSxjQUFjLEVBQWEsQ0FB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QU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFFekMsT0FBTyxJQUFJLFVBQVUsQ0FBQyxDQUFDLFVBQWtELEVBQUUsRUFBRTtZQUN6RSxNQUFNLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUMvRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQTtZQUU5QyxPQUFPLEdBQUcsRUFBRTtnQkFDUixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEtBQUssS0FBSyxFQUFFLENBQUM7b0JBQy9DLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUE7Z0JBQ3pDLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFBO2dCQUNsQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7WUFDdEIsQ0FBQyxDQUFBO1FBQ0wsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO0lBQzdCLENBQUM7SUFFUSxVQUFVLENBQUMsZ0JBQWtDO1FBQ2xELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUE7UUFDMUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtJQUN6QyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRhU291cmNlIGFzIENka0RhdGFTb3VyY2UsIENvbGxlY3Rpb25WaWV3ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zXCJcblxuaW1wb3J0IHtcbiAgICBCZWhhdmlvclN1YmplY3QsXG4gICAgY29tYmluZUxhdGVzdCxcbiAgICBkZWJvdW5jZVRpbWUsXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gICAgZmluYWxpemUsXG4gICAgbWFwLFxuICAgIE9ic2VydmFibGUsXG4gICAgb2YsXG4gICAgUmVwbGF5U3ViamVjdCxcbiAgICBzaGFyZVJlcGxheSxcbiAgICBTdWJqZWN0LFxuICAgIFN1YnNjcmliZXIsXG4gICAgc3dpdGNoTWFwLFxuICAgIHRha2UsXG4gICAgdGFrZVVudGlsLFxuICAgIHRhcFxufSBmcm9tIFwicnhqc1wiXG5cbmltcG9ydCB7IGlzRXF1YWwgfSBmcm9tIFwibG9kYXNoXCJcblxuaW1wb3J0IHsgQ29ubmVjdFByb3RvY29sLCBkZWVwQ2xvbmUsIGRlZXBGcmVlemUsIERlZXBSZWFkb25seSB9IGZyb20gXCJAbmd1dGlsL2NvbW1vblwiXG5cbmltcG9ydCB0eXBlIHsgTW9kZWwsIE1vZGVsUmVmIH0gZnJvbSBcIi4uL21vZGVsXCJcbmltcG9ydCB0eXBlIHsgRGF0YVByb3ZpZGVyIH0gZnJvbSBcIi4uL3Byb3ZpZGVyL3Byb3ZpZGVyXCJcbmltcG9ydCB0eXBlIHsgRmlsdGVyLCBHcm91cGVyLCBRdWVyeSwgU2xpY2UsIFNsaW1lciwgU29ydGVyIH0gZnJvbSBcIi4uL3F1ZXJ5XCJcbmltcG9ydCB7IHR5cGUgQ29sbGVjdGlvblN0b3JlLCBNZW1vcnlTdG9yZSwgdHlwZSBQYXJ0aWFsQ29sbGVjdGlvbiB9IGZyb20gXCIuLi9zdG9yZVwiXG5pbXBvcnQgeyBGaWx0ZXJDb21iaW5lZCwgR3JvdXBlckNvbWJpbmVkLCBTbGltZXJDb21iaW5lZCwgU29ydGVyQ29tYmluZWQgfSBmcm9tIFwiLi9wcm9wZXJ0aWVzXCJcblxuY29uc3QgREVCT1VOQ0VfVElNRSA9IDUwXG5cbnR5cGUgRFNRdWVyeTxUIGV4dGVuZHMgTW9kZWw+ID0gUXVlcnk8VD4gJiB7IHNsaWNlOiBEZWVwUmVhZG9ubHk8U2xpY2U+IH1cblxuZXhwb3J0IGNsYXNzIERhdGFTb3VyY2U8VCBleHRlbmRzIE1vZGVsPiBleHRlbmRzIENka0RhdGFTb3VyY2U8VCB8IHVuZGVmaW5lZD4gaW1wbGVtZW50cyBDb25uZWN0UHJvdG9jb2wge1xuICAgIHJlYWRvbmx5IGJ1c3kkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSlcbiAgICByZWFkb25seSB0b3RhbCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuXG4gICAgcmVhZG9ubHkgZmlsdGVyID0gbmV3IEZpbHRlckNvbWJpbmVkPEZpbHRlcjxUPj4oKVxuICAgIHJlYWRvbmx5IHNvcnRlciA9IG5ldyBTb3J0ZXJDb21iaW5lZDxTb3J0ZXI8VD4+KClcbiAgICByZWFkb25seSBzbGltZXIgPSBuZXcgU2xpbWVyQ29tYmluZWQ8U2xpbWVyPFQ+PigpXG4gICAgcmVhZG9ubHkgZ3JvdXBlciA9IG5ldyBHcm91cGVyQ29tYmluZWQ8R3JvdXBlcjxUPj4oKVxuXG4gICAgcmVhZG9ubHkgI3F1ZXJ5QmFzZSA9IGNvbWJpbmVMYXRlc3Qoe1xuICAgICAgICBmaWx0ZXI6IHRoaXMuZmlsdGVyLm1lcmdlZCQsXG4gICAgICAgIHNvcnRlcjogdGhpcy5zb3J0ZXIubWVyZ2VkJCxcbiAgICAgICAgc2xpbWVyOiB0aGlzLnNsaW1lci5tZXJnZWQkLFxuICAgICAgICBncm91cGVyOiB0aGlzLmdyb3VwZXIubWVyZ2VkJFxuICAgIH0pLnBpcGUoc2hhcmVSZXBsYXkoMSkpXG5cbiAgICByZWFkb25seSAjc2xpY2UgPSBuZXcgUmVwbGF5U3ViamVjdDxTbGljZT4oMSlcbiAgICByZWFkb25seSBzbGljZSQ6IE9ic2VydmFibGU8U2xpY2U+ID0gdGhpcy4jc2xpY2UucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKHNsaWNlID0+IHRoaXMucHJvdmlkZXIuY2xhbXBTbGljZShzbGljZSkpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc0VxdWFsKSxcbiAgICAgICAgbWFwKHNsaWNlID0+IGRlZXBGcmVlemUoZGVlcENsb25lKHNsaWNlKSkpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgIClcblxuICAgIHJlYWRvbmx5ICNyZWxvYWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHZvaWQ+KHVuZGVmaW5lZClcblxuICAgIHJlYWRvbmx5IHF1ZXJ5JDogT2JzZXJ2YWJsZTxEU1F1ZXJ5PFQ+PiA9IGNvbWJpbmVMYXRlc3QoeyBiYXNlOiB0aGlzLiNxdWVyeUJhc2UsIHJlbG9hZDogdGhpcy4jcmVsb2FkIH0pLnBpcGUoXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLiNzZXRCdXN5KHRydWUpKSxcbiAgICAgICAgLy8gVE9ETzogbWF5YmUgc2lsZW50IHJlc2V0IG9yIHByZXZlbnQgaXRlbXMkIGNoZW5nZXNcbiAgICAgICAgLy8gVE9ETzogYWx0ZXJuYXRpdmUgc29sdXRpb24gdXNlIGNhY2hlSWQsIGFuZCBxdWVyeSBpdGVtIGZyb20gc3RvcmUgd2l0aCB0aGlzIGNhY2hlSWRcbiAgICAgICAgc3dpdGNoTWFwKCh7IGJhc2UgfSkgPT4gdGhpcy5zdG9yZS5jbGVhcigpLnBpcGUobWFwKCgpID0+IGJhc2UpKSksXG4gICAgICAgIHN3aXRjaE1hcChxdWVyeUJhc2UgPT5cbiAgICAgICAgICAgIHRoaXMuc2xpY2UkLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFwKCgpID0+IHRoaXMuI3NldEJ1c3kodHJ1ZSkpLFxuICAgICAgICAgICAgICAgIG1hcChzbGljZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLnF1ZXJ5QmFzZSwgc2xpY2UgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKVxuXG4gICAgcmVhZG9ubHkgaXRlbXMkOiBPYnNlcnZhYmxlPFBhcnRpYWxDb2xsZWN0aW9uPFQ+PiA9IHRoaXMucXVlcnkkLnBpcGUoXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLiNzZXRCdXN5KHRydWUpKSxcbiAgICAgICAgZGVib3VuY2VUaW1lKERFQk9VTkNFX1RJTUUpLFxuICAgICAgICBzd2l0Y2hNYXAocXVlcnkgPT5cbiAgICAgICAgICAgIHRoaXMuc3RvcmUuaGFzU2xpY2UocXVlcnkuc2xpY2UpLnBpcGUoXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKGhhc1NsaWNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1NsaWNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5nZXRTbGljZShxdWVyeS5zbGljZSlcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3ZpZGVyLnF1ZXJ5TGlzdChxdWVyeSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC50b3RhbCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvdGFsJC5uZXh0KHJlc3VsdC50b3RhbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5pbnNlcnRTbGljZShxdWVyeS5zbGljZSwgcmVzdWx0Lml0ZW1zKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2UoMSlcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMuI3NldEJ1c3koZmFsc2UpKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApXG5cbiAgICByZWFkb25seSBzdG9yZTogQ29sbGVjdGlvblN0b3JlPFQ+XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBwcm92aWRlcjogRGF0YVByb3ZpZGVyPFQ+LFxuICAgICAgICBzdG9yZT86IENvbGxlY3Rpb25TdG9yZTxUPlxuICAgICkge1xuICAgICAgICBzdXBlcigpXG4gICAgICAgIGlmIChzdG9yZSA9PSBudWxsKSB7XG4gICAgICAgICAgICBzdG9yZSA9IG5ldyBNZW1vcnlTdG9yZSgpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdG9yZSA9IHN0b3JlXG4gICAgfVxuXG4gICAgc2V0U2xpY2Uoc2xpY2U6IFNsaWNlKSB7XG4gICAgICAgIHRoaXMuI3NsaWNlLm5leHQoc2xpY2UpXG4gICAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgYWxsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXRTbGljZSh7IHN0YXJ0OiAwLCBlbmQ6IEluZmluaXR5IH0pXG4gICAgfVxuXG4gICAgcmVhbG9kKCkge1xuICAgICAgICB0aGlzLiNyZWxvYWQubmV4dCgpXG4gICAgfVxuXG4gICAgZ2V0SXRlbShyZWY6IE1vZGVsUmVmKTogT2JzZXJ2YWJsZTxUIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IHJlZm4gPSB0aGlzLnByb3ZpZGVyLm1ldGEubm9ybWFsaXplUmVmKHJlZilcbiAgICAgICAgcmV0dXJuIHRoaXMuI3N0b3JlRmlyc3QoXG4gICAgICAgICAgICBxdWVyeSA9PiB0aGlzLnN0b3JlLmdldChyZWZuKSxcbiAgICAgICAgICAgIHF1ZXJ5ID0+IHRoaXMucHJvdmlkZXIucXVlcnlJdGVtKHJlZm4sIHF1ZXJ5KVxuICAgICAgICApXG4gICAgfVxuXG4gICAgZ2V0SXRlbVBvc2l0aW9uKHJlZjogTW9kZWxSZWYpOiBPYnNlcnZhYmxlPG51bWJlciB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCByZWZuID0gdGhpcy5wcm92aWRlci5tZXRhLm5vcm1hbGl6ZVJlZihyZWYpXG4gICAgICAgIHJldHVybiB0aGlzLiNzdG9yZUZpcnN0KFxuICAgICAgICAgICAgcXVlcnkgPT4gdGhpcy5zdG9yZS5pbmRleE9mKHJlZm4pLnBpcGUobWFwKGkgPT4gKGkgPCAwID8gdW5kZWZpbmVkIDogaSkpKSxcbiAgICAgICAgICAgIHF1ZXJ5ID0+IHRoaXMucHJvdmlkZXIucXVlcnlQb3NpdGlvbihyZWZuLCBxdWVyeSlcbiAgICAgICAgKVxuICAgIH1cblxuICAgIHJlYWxvZEl0ZW0ocmVmOiBNb2RlbFJlZiwgaW5zZXJ0UG9zaXRpb24/OiBudW1iZXIpOiBPYnNlcnZhYmxlPFQgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgcmVmbiA9IHRoaXMucHJvdmlkZXIubWV0YS5ub3JtYWxpemVSZWYocmVmKVxuICAgICAgICByZXR1cm4gdGhpcy5xdWVyeSQucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcChxdWVyeSA9PiB0aGlzLnByb3ZpZGVyLnF1ZXJ5SXRlbShyZWZuLCBxdWVyeSkpLFxuICAgICAgICAgICAgc3dpdGNoTWFwKGl0ZW0gPT5cbiAgICAgICAgICAgICAgICBpdGVtICE9IG51bGwgPyB0aGlzLnN0b3JlLnVwZGF0ZU9ySW5zZXJ0KHJlZm4sIGl0ZW0sIGluc2VydFBvc2l0aW9uKS5waXBlKG1hcCgoKSA9PiBpdGVtKSkgOiBvZihpdGVtKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHRha2UoMSlcbiAgICAgICAgKVxuICAgIH1cblxuICAgICNzdG9yZUZpcnN0PFg+KFxuICAgICAgICBzdG9yZUZuOiAocXVlcnk6IFF1ZXJ5PFQ+KSA9PiBPYnNlcnZhYmxlPFg+LFxuICAgICAgICBzZWxmRm46IChxdWVyeTogUXVlcnk8VD4pID0+IE9ic2VydmFibGU8WD5cbiAgICApOiBPYnNlcnZhYmxlPFg+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucXVlcnkkLnBpcGUoXG4gICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgc3dpdGNoTWFwKHF1ZXJ5ID0+IHN0b3JlRm4ocXVlcnkpLnBpcGUoc3dpdGNoTWFwKHJlc3VsdCA9PiAocmVzdWx0ID09IG51bGwgPyBzZWxmRm4ocXVlcnkpIDogb2YocmVzdWx0KSkpKSlcbiAgICAgICAgKVxuICAgIH1cblxuICAgICNzZXRCdXN5KGJ1c3k6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMucHJvdmlkZXIuaXNBc3luYykge1xuICAgICAgICAgICAgaWYgKHRoaXMuYnVzeSQudmFsdWUgIT09IGJ1c3kpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1c3kkLm5leHQoYnVzeSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgICNjdlN1YnMgPSBuZXcgTWFwPENvbGxlY3Rpb25WaWV3ZXIsIFN1YmplY3Q8dm9pZD4+KClcblxuICAgIG92ZXJyaWRlIGNvbm5lY3QoY29sbGVjdGlvblZpZXdlcjogQ29sbGVjdGlvblZpZXdlcik6IE9ic2VydmFibGU8cmVhZG9ubHkgKFQgfCB1bmRlZmluZWQpW10+IHtcbiAgICAgICAgY29uc3QgdW50aWwgPSBuZXcgU3ViamVjdDx2b2lkPigpXG5cbiAgICAgICAgdGhpcy4jY3ZTdWJzLmdldChjb2xsZWN0aW9uVmlld2VyKT8ubmV4dCgpXG4gICAgICAgIHRoaXMuI2N2U3Vicy5zZXQoY29sbGVjdGlvblZpZXdlciwgdW50aWwpXG5cbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChzdWJzY3JpYmVyOiBTdWJzY3JpYmVyPHJlYWRvbmx5IChUIHwgdW5kZWZpbmVkKVtdPikgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3ViMSA9IGNvbGxlY3Rpb25WaWV3ZXIudmlld0NoYW5nZS5zdWJzY3JpYmUodGhpcy4jc2xpY2UpXG4gICAgICAgICAgICBjb25zdCBzdWIyID0gdGhpcy5pdGVtcyQuc3Vic2NyaWJlKHN1YnNjcmliZXIpXG5cbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuI2N2U3Vicy5nZXQoY29sbGVjdGlvblZpZXdlcikgPT09IHVudGlsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2N2U3Vicy5kZWxldGUoY29sbGVjdGlvblZpZXdlcilcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3ViMS51bnN1YnNjcmliZSgpXG4gICAgICAgICAgICAgICAgc3ViMi51bnN1YnNjcmliZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLnBpcGUodGFrZVVudGlsKHVudGlsKSlcbiAgICB9XG5cbiAgICBvdmVycmlkZSBkaXNjb25uZWN0KGNvbGxlY3Rpb25WaWV3ZXI6IENvbGxlY3Rpb25WaWV3ZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy4jY3ZTdWJzLmdldChjb2xsZWN0aW9uVmlld2VyKT8ubmV4dCgpXG4gICAgICAgIHRoaXMuI2N2U3Vicy5kZWxldGUoY29sbGVjdGlvblZpZXdlcilcbiAgICB9XG59XG4iXX0=
@@ -1,7 +1,7 @@
1
- import { flattenDepth, intersection, flattenDeep, isEqual, sortBy as sortBy$1, groupBy as groupBy$1, merge } from 'lodash';
1
+ import { flattenDepth, intersection, flattenDeep, isEqual } from 'lodash';
2
2
  import * as i1 from '@ngutil/common';
3
3
  import { isPlainObject, deepClone, toSorted, deepFreeze } from '@ngutil/common';
4
- import { BehaviorSubject, map, combineLatest, take, of, shareReplay, ReplaySubject, switchMap, distinctUntilChanged, Subject, tap, debounceTime, finalize, Observable, takeUntil, share, Subscription, throwError } from 'rxjs';
4
+ import { BehaviorSubject, map, combineLatest, take, of, shareReplay, ReplaySubject, switchMap, distinctUntilChanged, tap, debounceTime, finalize, Subject, Observable, takeUntil, share, Subscription, throwError } from 'rxjs';
5
5
  import { DataSource as DataSource$1 } from '@angular/cdk/collections';
6
6
  import * as i0 from '@angular/core';
7
7
  import { Directive, Optional, Input } from '@angular/core';
@@ -527,10 +527,18 @@ function sorterMerge(...sorters) {
527
527
  for (const [k, v] of Object.entries(sentry)) {
528
528
  const existing = result.find((value) => value[k] != null);
529
529
  if (existing) {
530
- ;
531
- existing[k] = deepClone(v);
530
+ if (v == null) {
531
+ delete existing[k];
532
+ if (Object.keys(existing).length === 0) {
533
+ result.splice(result.indexOf(existing), 1);
534
+ }
535
+ }
536
+ else {
537
+ ;
538
+ existing[k] = deepClone(v);
539
+ }
532
540
  }
533
- else {
541
+ else if (v != null) {
534
542
  result.push({ [k]: deepClone(v) });
535
543
  }
536
544
  }
@@ -656,10 +664,10 @@ function filterExecutor(filter, prev) {
656
664
  return compileExec(filter, prev, filterBy);
657
665
  }
658
666
  function sorterExecutor(sorter, prev) {
659
- return compileExec(sorter, prev, sortBy$1);
667
+ return compileExec(sorter, prev, sortBy);
660
668
  }
661
669
  function grouperExecutor(sorter, prev) {
662
- return compileExec(sorter, prev, groupBy$1);
670
+ return compileExec(sorter, prev, groupBy);
663
671
  }
664
672
  function sliceExecutor(slice, prev) {
665
673
  return compileExec(slice, prev, sliceBy);
@@ -946,7 +954,7 @@ class SorterCombined extends PropertyCombined {
946
954
  this.merged$ = mergedProperty(sorterMerge, this.normal, this.forced);
947
955
  }
948
956
  of(name) {
949
- return this.merged$.pipe(map((sorters) => sorters == null ? undefined : sorterFind(sorters, name)));
957
+ return this.merged$.pipe(map((sorters) => (sorters == null ? undefined : sorterFind(sorters, name))));
950
958
  }
951
959
  directionOf(name) {
952
960
  return this.of(name).pipe(map(value => {
@@ -1022,26 +1030,26 @@ class DataSource extends DataSource$1 {
1022
1030
  }).pipe(shareReplay(1));
1023
1031
  this.#slice = new ReplaySubject(1);
1024
1032
  this.slice$ = this.#slice.pipe(switchMap(slice => this.provider.clampSlice(slice)), distinctUntilChanged(isEqual), map(slice => deepFreeze(deepClone(slice))), shareReplay(1));
1025
- this.#reload = new Subject();
1026
- this.reset$ = merge(this.#queryBase, this.#reload).pipe(tap(() => this.#setBusy(true)), switchMap(() => this.store.clear()), shareReplay(1));
1027
- this.query$ = combineLatest({ base: this.#queryBase, slice: this.slice$ }).pipe(map(({ base, slice }) => {
1028
- return { ...base, slice };
1029
- }), shareReplay(1));
1030
- this.items$ = combineLatest({ query: this.query$, reset: this.reset$ }).pipe(tap(() => this.#setBusy(true)), debounceTime(DEBOUNCE_TIME), switchMap(({ query }) => {
1031
- return this.store.hasSlice(query.slice).pipe(switchMap(hasSlice => {
1032
- if (hasSlice) {
1033
- return this.store.getSlice(query.slice);
1034
- }
1035
- else {
1036
- return this.provider.queryList(query).pipe(switchMap(result => {
1037
- if (result.total != null) {
1038
- this.total$.next(result.total);
1039
- }
1040
- return this.store.insertSlice(query.slice, result.items);
1041
- }), take(1));
1042
- }
1043
- }));
1044
- }), finalize(() => this.#setBusy(false)), shareReplay(1));
1033
+ this.#reload = new BehaviorSubject(undefined);
1034
+ this.query$ = combineLatest({ base: this.#queryBase, reload: this.#reload }).pipe(tap(() => this.#setBusy(true)),
1035
+ // TODO: maybe silent reset or prevent items$ chenges
1036
+ // TODO: alternative solution use cacheId, and query item from store with this cacheId
1037
+ switchMap(({ base }) => this.store.clear().pipe(map(() => base))), switchMap(queryBase => this.slice$.pipe(tap(() => this.#setBusy(true)), map(slice => {
1038
+ return { ...queryBase, slice };
1039
+ }))), shareReplay(1));
1040
+ this.items$ = this.query$.pipe(tap(() => this.#setBusy(true)), debounceTime(DEBOUNCE_TIME), switchMap(query => this.store.hasSlice(query.slice).pipe(switchMap(hasSlice => {
1041
+ if (hasSlice) {
1042
+ return this.store.getSlice(query.slice);
1043
+ }
1044
+ else {
1045
+ return this.provider.queryList(query).pipe(switchMap(result => {
1046
+ if (result.total != null) {
1047
+ this.total$.next(result.total);
1048
+ }
1049
+ return this.store.insertSlice(query.slice, result.items);
1050
+ }), take(1));
1051
+ }
1052
+ }))), finalize(() => this.#setBusy(false)), shareReplay(1));
1045
1053
  this.#cvSubs = new Map();
1046
1054
  if (store == null) {
1047
1055
  store = new MemoryStore();
@@ -1 +1 @@
1
- {"version":3,"file":"ngutil-data.mjs","sources":["../../../../packages/data/src/query/path.ts","../../../../packages/data/src/query/filter.ts","../../../../packages/data/src/query/grouper.ts","../../../../packages/data/src/query/sorter.ts","../../../../packages/data/src/query/slimer.ts","../../../../packages/data/src/query/slice.ts","../../../../packages/data/src/query/executor.ts","../../../../packages/data/src/model/meta.ts","../../../../packages/data/src/store/collection-store.ts","../../../../packages/data/src/store/memory-store.ts","../../../../packages/data/src/source/properties/abstract.ts","../../../../packages/data/src/source/properties/filter.ts","../../../../packages/data/src/source/properties/sorter.ts","../../../../packages/data/src/source/properties/slimer.ts","../../../../packages/data/src/source/properties/grouper.ts","../../../../packages/data/src/source/source.ts","../../../../packages/data/src/source/proxy.directive.ts","../../../../packages/data/src/provider/provider.ts","../../../../packages/data/src/provider/local.ts","../../../../packages/data/src/provider/array.ts","../../../../packages/data/src/provider/observable.ts","../../../../packages/data/src/ngutil-data.ts"],"sourcesContent":["import { flattenDepth } from \"lodash\"\n\ntype GetterFn = (srcs: any[]) => any[]\nexport type PathGetter<T = any, R = any> = (obj: T) => R[]\n\nexport function pathGetterCompile(path: string): PathGetter {\n if (!path || path.length === 0) {\n throw new Error(\"Empty path\")\n }\n\n return path.split(\".\").reduce<GetterFn>(\n (parent, part) => makeGetter(part, parent),\n (obj: any) => (obj == null ? [] : [obj])\n )\n}\n\nconst IsNumber = /^\\d+$/\n\nfunction makeGetter(part: string, parent: GetterFn): GetterFn {\n if (part === \"*\") {\n return obj => flattenDepth(parent(obj), 1)\n } else {\n const key = IsNumber.test(part) ? Number(part) : part\n return obj => parent(obj).map(v => (v != null ? v[key] : undefined))\n }\n}\n","import { flattenDeep, intersection } from \"lodash\"\n\nimport { AsPrimitive, deepClone, isPlainObject, MaxRecursion } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\nimport { PathGetter, pathGetterCompile } from \"./path\"\n\nexport const enum FilterOp {\n Eq = \"==\",\n EqStrict = \"===\",\n EqInsesitive = \"==*\",\n Neq = \"!=\",\n NeqStrict = \"!==\",\n NeqInsesitive = \"!=*\",\n Gt = \">\",\n GtInsesitive = \">*\",\n Gte = \">=\",\n GteInsesitive = \">=*\",\n Lt = \"<\",\n LtInsesitive = \"<*\",\n Lte = \"<=\",\n LteInsesitive = \"<=*\",\n Contains = \"%\",\n ContainsInsesitive = \"%*\",\n StartsWith = \"^\",\n StartsWithInsesitive = \"^*\",\n EndsWith = \"$\",\n EndsWithInsesitive = \"$*\",\n Regexp = \"~\",\n RegexpInsesitive = \"~*\",\n Or = \"|\",\n And = \"&\"\n}\n\nexport const OPERATORS: Array<string> = [\n FilterOp.Eq,\n FilterOp.EqStrict,\n FilterOp.EqInsesitive,\n FilterOp.Neq,\n FilterOp.NeqStrict,\n FilterOp.NeqInsesitive,\n FilterOp.Gt,\n FilterOp.GtInsesitive,\n FilterOp.Gte,\n FilterOp.GteInsesitive,\n FilterOp.Lt,\n FilterOp.LtInsesitive,\n FilterOp.Lte,\n FilterOp.LteInsesitive,\n FilterOp.Contains,\n FilterOp.ContainsInsesitive,\n FilterOp.StartsWith,\n FilterOp.StartsWithInsesitive,\n FilterOp.EndsWith,\n FilterOp.EndsWithInsesitive,\n FilterOp.Regexp,\n FilterOp.RegexpInsesitive,\n FilterOp.Or,\n FilterOp.And\n]\n\nexport function asOperators(value: any): Array<{ op: FilterOp; value: any }> {\n const ops = intersection(Object.keys(value), OPERATORS) as FilterOp[]\n if (ops.length > 0) {\n return ops.map(op => {\n return { op, value: value[op] }\n })\n } else {\n return [{ op: FilterOp.Eq, value }]\n }\n}\n\n// export type Filter<T extends Model> = _Filter<Flatten<T>, [], MaxRecursion>\n// TODO: fix recursion\nexport type Filter<T extends Model> = { [key: string]: any }\n\ntype _Filter<F, P extends number[], D extends number> = P[\"length\"] extends D ? never : _ObjectFilter<F, P, D>\n\ntype _ObjectFilter<F, P extends number[], D extends number> = P[\"length\"] extends D\n ? never\n : { [K in keyof F]?: Operators<F[K], P, D> }\n\ntype RootOr<F, P extends number[], D extends number> = P[\"length\"] extends D\n ? never\n : { [FilterOp.Or]: Array<_Filter<F, [...P, 0], D>> | undefined }\n\ntype RootAnd<F, P extends number[], D extends number> = P[\"length\"] extends D\n ? never\n : { [FilterOp.And]: Array<_Filter<F, [...P, 0], D>> | undefined }\n\nexport type Operators<T, P extends number[], D extends number = MaxRecursion> = P[\"length\"] extends D\n ? never\n : SimpleOperators<T>\n\ntype LocalOr<T, P extends number[], D extends number> = P[\"length\"] extends D\n ? never\n : { [FilterOp.Or]: Array<Operators<T, [...P, 0], D>> | undefined }\n\ntype LocalAnd<T, P extends number[], D extends number> = P[\"length\"] extends D\n ? never\n : { [FilterOp.And]: Array<Operators<T, [...P, 0], D>> | undefined }\n\ntype SimpleOperators<T> =\n | EqStrict<T>\n | NeqStrict<T>\n | Eq<T>\n | Neq<T>\n | Gt<T>\n | Gte<T>\n | Lt<T>\n | Lte<T>\n | Contains<T>\n | StartsWith<T>\n | EndsWith<T>\n | Regexp<T>\n | T\n | undefined\n | null\n\ntype EqStrict<T> = Operator<T, T, FilterOp.EqStrict, never, null>\ntype NeqStrict<T> = Operator<T, T, FilterOp.NeqStrict, never, null>\ntype Eq<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Eq, FilterOp.EqInsesitive, null>\ntype Neq<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Neq, FilterOp.NeqInsesitive, null>\ntype Gt<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Gt, FilterOp.GtInsesitive>\ntype Gte<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Gte, FilterOp.GteInsesitive>\ntype Lt<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Lt, FilterOp.LtInsesitive>\ntype Lte<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Lte, FilterOp.LteInsesitive>\ntype Contains<T> = Operator<T, string, FilterOp.Contains, FilterOp.ContainsInsesitive>\ntype StartsWith<T> = Operator<T, string, FilterOp.StartsWith, FilterOp.StartsWithInsesitive>\ntype EndsWith<T> = Operator<T, string, FilterOp.EndsWith, FilterOp.EndsWithInsesitive>\ntype Regexp<T> = Operator<T, string, FilterOp.Regexp, FilterOp.RegexpInsesitive, RegExp>\n\ntype Operator<T, R, OP extends string, OPI extends string = never, ET = never> =\n | (T extends R ? { [k in OP]: T | ET | R } : never)\n | (T extends string ? (OPI extends never ? never : { [k in OPI]: string }) : never)\n\nexport type FilterFn<T = any> = (item: T) => boolean\n\n/**\n * @example\n * ```ts\n * items.filter(filterBy({id: 42}))\n * ```\n */\nexport function filterBy<T extends Model>(filters: Filter<T>): FilterFn<T> {\n return _filterCompile<T>(filters)\n}\n\n// TODO: Normalize filter\n// type _Filter = { path: string; op: FilterOp; value: any }\n// type _Or = { \"|\": Array<_Filter> }\n// type _And = { \"&\": Array<_Filter> }\n// export type NormalizedFilter = _Or | _And\n\n// /**\n// * @example\n// * ```ts\n// * normalizeFilter({id: 2, name: {\"=*\": \"AnyName\"}}) -> {id: {\"==\": 2}, name: {\"=*\": \"AnyName\"}}}\n// * normalizeFilter({id: {\">\": 0, \"<\": 10}}) -> {\"&\": [{id: {\">\": 0}}, {id: {\"<\": 10}}]}\n// * ```\n// */\n// export function normalizeFilter<T extends Model>(filters: Filters<T>): Filters<T> {\n// return _normalizeFilter(filters)\n// }\n\n// function _normalizeFilter(filters: any, path?: string): any {\n// const result = {} as any\n\n// for (const [path, v] of Object.entries(filters)) {\n// switch (path) {\n// case FilterOp.And:\n// if (!Array.isArray(v)) {\n// throw new Error(\"The '&' (AND) operator must have array type\")\n// }\n\n// if (!result[FilterOp.And]) {\n// result[FilterOp.And] = []\n// }\n\n// result[FilterOp.And] = result[FilterOp.And].concat(v.map(f => _normalizeFilter(f)))\n// break\n\n// case FilterOp.Or:\n// if (!Array.isArray(v)) {\n// throw new Error(\"The '|' (OR) operator must have array type\")\n// }\n\n// if (!result[FilterOp.Or]) {\n// result[FilterOp.Or] = []\n// }\n\n// result[FilterOp.Or] = result[FilterOp.Or].concat(v.map(f => _normalizeFilter(f)))\n// break\n\n// default:\n// for (const entry of asOperators(v)) {\n// switch (entry.op) {\n// case FilterOp.And:\n// if (!result[FilterOp.And]) {\n// result[FilterOp.And] = []\n// }\n\n// result[FilterOp.And] = result[FilterOp.And].concat(\n// entry.value.map((v: any) => _normalizeFilter(v, path))\n// )\n// break\n\n// case FilterOp.Or:\n// if (!result[FilterOp.Or]) {\n// result[FilterOp.Or] = []\n// }\n\n// result[FilterOp.Or] = result[FilterOp.Or].concat(\n// entry.value.map((v: any) => _normalizeFilter(v, path))\n// )\n// break\n\n// default:\n// if (!result[FilterOp.And]) {\n// result[FilterOp.And] = []\n// }\n\n// result[FilterOp.And].push({ path, ...entry })\n// }\n// }\n// }\n// }\n\n// return result\n// }\n\nfunction _filterCompile<T extends Model>(filters: Filter<T>): FilterFn<T> {\n let getter: PathGetter\n const result: FilterFn<T>[] = []\n for (const [pth, value] of Object.entries(filters)) {\n switch (pth) {\n case FilterOp.And:\n if (!Array.isArray(value)) {\n throw new Error(\"Root '&' (AND) operator must have array type\")\n }\n result.splice(result.length, 0, ...value.map(_filterCompile<T>))\n break\n\n case FilterOp.Or:\n if (!Array.isArray(value)) {\n throw new Error(\"Root '|' (OR) operator must have array type\")\n }\n result.push(or_(value.map(_filterCompile<T>)))\n break\n\n default:\n getter = pathGetterCompile(pth)\n if (isPlainObject(value)) {\n result.push(and_(Object.entries(value).map(([op, opv]) => filterCompileOp(getter, op as any, opv))))\n } else {\n result.push(filterCompileOp(getter, FilterOp.Eq, value))\n }\n\n break\n }\n }\n return and_(result)\n}\n\nfunction filterCompileOp(getter: PathGetter, op: FilterOp, value: any): FilterFn {\n let lower: string\n let regex: RegExp\n switch (op) {\n case FilterOp.Eq:\n // eslint-disable-next-line eqeqeq\n return matcher(getter, v => v == value)\n\n case FilterOp.EqStrict:\n return matcher(getter, v => v === value)\n\n case FilterOp.EqInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() === lower)\n\n case FilterOp.Neq:\n // eslint-disable-next-line eqeqeq\n return matcher(getter, v => v != value)\n\n case FilterOp.NeqStrict:\n return matcher(getter, v => v !== value)\n\n case FilterOp.NeqInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() !== lower)\n\n case FilterOp.Gt:\n return matcher(getter, v => v > value)\n\n case FilterOp.GtInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() > lower)\n\n case FilterOp.Gte:\n return matcher(getter, v => v >= value)\n\n case FilterOp.GteInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() >= lower)\n\n case FilterOp.Lt:\n return matcher(getter, v => v < value)\n\n case FilterOp.LtInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() < lower)\n\n case FilterOp.Lte:\n return matcher(getter, v => v <= value)\n\n case FilterOp.LteInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() <= lower)\n\n case FilterOp.Contains:\n lower = String(value)\n return matcher(getter, v => (Array.isArray(v) ? v.includes(value) : String(v).includes(lower)))\n\n case FilterOp.ContainsInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase().includes(lower))\n\n case FilterOp.StartsWith:\n lower = String(value)\n return matcher(getter, v => String(v).startsWith(lower))\n\n case FilterOp.StartsWithInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase().startsWith(lower))\n\n case FilterOp.EndsWith:\n lower = String(value)\n return matcher(getter, v => String(v).endsWith(lower))\n\n case FilterOp.EndsWithInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase().endsWith(lower))\n\n case FilterOp.Regexp:\n regex = value instanceof RegExp ? value : new RegExp(value, \"msv\")\n return matcher(getter, v => regex.test(v))\n\n case FilterOp.RegexpInsesitive:\n regex = value instanceof RegExp ? value : new RegExp(value, \"msvi\")\n return matcher(getter, v => regex.test(v))\n\n case FilterOp.And:\n if (!Array.isArray(value)) {\n throw new Error(\"Root '&' (AND) operator must have array type\")\n }\n return and_(\n flattenDeep(\n value.map(v => {\n if (isPlainObject(v)) {\n return Object.entries(v).map(([op, opv]) => filterCompileOp(getter, op as any, opv))\n } else {\n return filterCompileOp(getter, FilterOp.Eq, v)\n }\n })\n )\n )\n\n case FilterOp.Or:\n if (!Array.isArray(value)) {\n throw new Error(\"Root '|' (OR) operator must have array type\")\n }\n return or_(\n flattenDeep(\n value.map(v => {\n if (isPlainObject(v)) {\n return Object.entries(v).map(([op, opv]) => filterCompileOp(getter, op as any, opv))\n } else {\n return filterCompileOp(getter, FilterOp.Eq, v)\n }\n })\n )\n )\n }\n\n throw new Error(`Unexpected operator: ${op}`)\n}\n\nfunction matcher(getter: PathGetter, predict: (value: any) => boolean): FilterFn {\n return obj => getter(obj).some(predict)\n}\n\nfunction and_(fns: FilterFn[]): FilterFn {\n if (fns.length === 0) {\n return _ => true\n }\n\n return item => {\n for (const fn of fns) {\n if (!fn(item)) {\n return false\n }\n }\n return true\n }\n}\n\nfunction or_(fns: FilterFn[]): FilterFn {\n if (fns.length === 0) {\n return _ => true\n }\n\n return item => {\n for (const fn of fns) {\n if (fn(item)) {\n return true\n }\n }\n return false\n }\n}\n\nexport function filterMerge(...filters: any[]): any | undefined {\n let result: { [key: string]: any } | undefined = undefined\n\n for (const filter of filters) {\n if (filter == null) {\n continue\n }\n if (result == null) {\n result = deepClone(filter)\n } else {\n for (const [k, v] of Object.entries(filter)) {\n if (v === undefined) {\n delete result[k]\n continue\n }\n\n result[k] = deepClone(v)\n }\n }\n }\n\n return result as any\n}\n","import { Flatten, Primitive } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\n\nexport type GrouperFn<T = any> = (item: any) => Primitive\n\nexport type Grouper<T extends Model, F = Flatten<T>> = any\n\nexport function groupBy<T extends Model, F = Flatten<T>>(grouper: Grouper<T, F>): GrouperFn<T> {\n return grouperCompile<T, F>(grouper)\n}\n\nfunction grouperCompile<T extends Model, F = Flatten<T>>(grouper: Grouper<T, F>): GrouperFn<T> {\n return _ => undefined\n}\n\nexport function grouperMerge<T extends Model, F = Flatten<T>>(\n ...groupers: Array<Grouper<T, F> | undefined | null>\n): Grouper<T, F> | undefined {\n return undefined\n}\n\n// import { Primitive } from \"utility-types\"\n\n// import { Eval, Flatten } from \"@ngutil/common\"\n\n// import { type Model } from \"./query\"\n// import { SorterFn } from \"./sorter\"\n\n// export interface Grouped<T extends Model> {\n// items: T[]\n// groups: Group<T>\n// }\n\n// export type GrouperFn<T extends Model> = (items: T[]) => any\n\n// export type GroupKey<T extends Model> = (item: T, index: number) => Primitive[]\n\n// export type GroupItemIsMatch<T extends Model> = (item: T, index: number) => boolean\n\n// export interface GrouperX<T extends Model> {\n// name: string\n// title?: string\n// isMatch?: GroupKey<T>\n// [key: string]: any\n// }\n\n// export interface GrouperXNormalized<T extends Model> extends GrouperX<T> {\n// key: GroupKey<T>\n// }\n\n// type _Groupers<T extends Model, F> = keyof F | Grouper<T>\n// export type Grouper<T extends Model, F = Flatten<T>> = Eval<Array<_Groupers<T, F>>>\n\n// export type GrouperNormalized<T extends Model> = { [key: string]: GrouperXNormalized<T> }\n\n// export interface Group<T extends Model, G extends Grouper<T> = Grouper<T>> {\n// grouper: G\n// begin: number\n// end: number\n// }\n\n// /**\n// * @example\n// * ```ts\n// * const grouped = groupBy([\"status\"])(items)\n// * // expexted: {[status]: [...items]}\n// *\n// * const grouped = groupBy([\"name\", \"age\"])(items)\n// * // expected {[status]: {[age]: [...items]}}\n// *\n// * const STATUS_LABELS = {active: \"Active\", inactive: \"Inactive\"}\n// * const grouped = groupBy([(item) => (STATUS_LABELS[item.status] || \"Undefined\")])(items)\n// * // expected {[\"Active\" | \"Inactive\" | \"Undefined\"]: [...items]}\n// *\n// * const grouped = groupBy([(item) => (STATUS_LABELS[item.status] || \"Undefined\"), \"age\"])(items)\n// * // expected {[\"Active\" | \"Inactive\" | \"Undefined\"]: {[age]: [...items]}}\n// * ```\n// */\n// export function groupBy<T extends Model>(groupers: Grouper<T>): SorterFn<T> {\n// return (_a, _b) => 0\n// }\n\n// export function grouperNormalize() {}\n\n// export function grouperCompile<T extends Model>(groupers: Grouper<T>): GrouperFn<T> {\n// return _ => undefined\n// }\n\n// export function grouperMerge<T extends Model, F = Flatten<T>>(\n// ...groupers: Array<Grouper<T, F> | undefined | null>\n// ): Grouper<T, F> | undefined {\n// return undefined\n// }\n","import { flattenDeep, isEqual } from \"lodash\"\n\nimport { deepClone, isPlainObject } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\nimport { pathGetterCompile } from \"./path\"\n\nexport type SorterFn<T = any> = (a: T, b: T) => number\n\nexport const enum SortDirection {\n Asc = \"asc\",\n Desc = \"desc\"\n}\n\nexport type SortDir = SortDirection.Asc | SortDirection.Desc | \"asc\" | \"desc\"\nexport type SortDirExtra = { dir: SortDir; emptyFirst: boolean }\n\ntype _Sorter<F> = { [K in keyof F]: { [key in K]: SortDir | SortDirExtra } }[keyof F]\n// TODO: fix recursion\n// export type Sorter<T extends Model> = Array<_Sorter<Flatten<T>>>\nexport type Sorter<T extends Model> = Array<{ [key: string]: SortDir | SortDirExtra | undefined }>\n\ntype NormalizedEntry = { path: string; isAsc: boolean; emptyFirst: boolean }\nexport type SorterNormalized = Array<NormalizedEntry>\n\n/**\n * @example\n *```ts\n * items.toSorted(sortBy([{\"author.name\": \"asc\"}]))\n * ```\n */\nexport function sortBy<T extends Model>(sorters: Sorter<T>): SorterFn<T> {\n if (sorters.length === 0) {\n throw new Error(\"Empty sorter\")\n }\n return _sorterCompile<T>(sorters) as any\n}\n\n/**\n * Normalize sorter definition\n *\n * @example\n * ```ts\n * normalizeSorter([{id: \"asc\"}]) -> [{path: \"id\", isAsc: true, emptyFirst: true}]\n * normalizeSorter([{id: {dir: \"desc\", emptyFirst: false}}]) -> [{path: \"id\", isAsc: false, emptyFirst: false}]\n * ```\n */\nexport function sorterNormalize<T extends Model>(sorters: Sorter<T>): SorterNormalized {\n return flattenDeep(\n (sorters as any).map((s: any) =>\n Object.entries(s).map(([k, v]) => {\n if (typeof v === \"string\") {\n const isAsc = v.toLowerCase() === \"asc\"\n return { path: k, isAsc, emptyFirst: isAsc ? false : true }\n } else if (isPlainObject(v)) {\n return {\n path: k,\n isAsc: ((v as SortDirExtra).dir || \"asc\").toLowerCase() === \"asc\",\n emptyFirst: (v as SortDirExtra).emptyFirst == null ? true : !!(v as SortDirExtra).emptyFirst\n }\n } else {\n throw new Error(`Invalid sorter: ${v}`)\n }\n })\n )\n )\n}\n\nfunction _sorterCompile<T extends Model>(sorters: Sorter<T>): SorterFn<T> {\n if (sorters.length === 0) {\n return (_a, _b) => 0\n }\n\n const norm = sorterNormalize<T>(sorters).map(createComparator)\n if (norm.length === 1) {\n return norm[0]\n }\n\n const initial = norm.pop()!\n return norm.reduceRight<SorterFn<T>>(\n (next, curr) => (a, b) => {\n const r = curr(a, b)\n return r === 0 ? next(a, b) : r\n },\n initial\n )\n}\n\nfunction createComparator({ path, isAsc, emptyFirst }: NormalizedEntry): SorterFn {\n const getter = pathGetterCompile(path)\n if (isAsc) {\n return (a, b) => compare(getter(a), getter(b), emptyFirst)\n } else {\n return (a, b) => compare(getter(a), getter(b), !emptyFirst) * -1\n }\n}\n\nexport function compare(a: any, b: any, emptyFirst: boolean): number {\n // console.log(\"COMPARE\", a, b)\n if (a == null && b != null) {\n return emptyFirst === true ? -1 : 1\n } else if (a != null && b == null) {\n return emptyFirst === true ? 1 : -1\n } else if (a == null && b == null) {\n return 0\n } else if (isEqual(a, b)) {\n return 0\n } else if (typeof a === \"number\" && typeof b === \"number\") {\n return a - b\n } else if (typeof a === \"string\" && typeof b === \"string\") {\n const al = a.length\n const bl = b.length\n // if both lengths is 0 the code execution not reach that point, because a === b\n if (emptyFirst === true) {\n if (al === 0) {\n return -1\n } else if (bl === 0) {\n return 1\n }\n } else {\n if (al === 0) {\n return 1\n } else if (bl === 0) {\n return -1\n }\n }\n return a.localeCompare(b)\n } else if (Array.isArray(a) && Array.isArray(b)) {\n const al = a.length\n const bl = b.length\n const l = Math.min(al, bl)\n\n for (let i = 0; i < l; i++) {\n const res = compare(a[i], b[i], emptyFirst)\n if (res !== 0) {\n return res\n }\n }\n\n if (al === bl) {\n return 0\n }\n\n if (emptyFirst === true) {\n if (al === 0) {\n return -1\n } else if (bl === 0) {\n return 1\n }\n } else {\n if (al === 0) {\n return 1\n } else if (bl === 0) {\n return -1\n }\n }\n\n return al - bl\n } else if (isPlainObject(a) && isPlainObject(b)) {\n return JSON.stringify(a).localeCompare(JSON.stringify(b))\n }\n\n return a > b ? -1 : 1\n}\n\nexport function sorterMerge<T extends Model>(...sorters: Array<Sorter<T> | undefined | null>): Sorter<T> | undefined {\n let result: Sorter<T> | undefined\n\n for (const sorter of sorters) {\n if (sorter == null) {\n continue\n }\n if (result == null) {\n result = deepClone(sorter)\n continue\n }\n\n for (const sentry of sorter) {\n for (const [k, v] of Object.entries(sentry)) {\n const existing = (result as any).find((value: any) => value[k] != null)\n if (existing) {\n ;(existing as any)[k] = deepClone(v)\n } else {\n result.push({ [k]: deepClone(v) } as any)\n }\n }\n }\n }\n\n return result\n}\n\n\nexport function sorterFind<T extends Model>(sorters: Sorter<T>, name: string): SortDir | SortDirExtra | undefined {\n const sorter = sorters.find(v => v[name] != null)\n if (sorter != null) {\n return sorter[name]\n }\n return undefined\n\n}\n","import { Model } from \"../model\"\n\n/**\n * @exmaple\n * ```ts\n * [\n * \"field_name\",\n * {\"child_name\": [\"child_field_name\"]},\n * {\"children\": [\"children_field_name\", {\"$type\": Article, slimer: [\"id\", \"title\"]}]},\n * {\"$type\": Employee, slimer: [\"name\"]}.\n * {\"$filter\": Filter<T, F>}\n * ]\n * ```\n */\nexport type Slimer<T extends Model> = any\nexport type SlimerFn<T> = (item: T) => T\n\nexport function slimBy<T extends Model>(slimer: Slimer<T>): void {}\n\nexport function slimerNormalize<T extends Model>(slimer: Slimer<T>): void {}\n\nfunction slimerCompile<T extends Model>(slimer: Slimer<T>): SlimerFn<T> {\n return item => item\n}\n\nexport function slimerMerge<T extends Model>(...slimers: Slimer<T>): void {}\n","import { ListRange } from \"@angular/cdk/collections\"\n\nimport { deepClone } from \"@ngutil/common\"\n\n// https://www.npmjs.com/package/array-view\n\n/**\n * @example\n * ```ts\n * {start: 0, end: 0} // empty range\n * {start: 0, end: 1} // range with one item.eg sliceApply([1, 2, 3], {start:0, end:1}) -> [1]\n * ```\n */\nexport interface Slice extends ListRange {\n /**\n * Start of slice, exact index of item in list\n */\n readonly start: number\n /**\n * End of slice, not include end index of item in list\n */\n readonly end: number\n readonly pageSize?: number\n}\n\nexport function sliceMerge(...slices: Slice[]) {\n let result: Slice | undefined = undefined\n\n for (const slice of slices) {\n if (slice == null) {\n continue\n }\n if (result == null) {\n result = deepClone(slice)\n } else {\n result = { ...(result as any), ...slice }\n }\n }\n\n return result\n}\n\n/**\n * Apply slice to array, and force the result length to equal with Slice length,\n * so fill array with undefined if not enought elements\n */\nexport function sliceApply(slice: Slice, array: readonly any[]): any[] {\n const result = array.slice(slice.start, slice.end)\n result.length = slice.end - slice.start\n return result\n}\n\n/**\n * @returns Page numbers, eg.: `[10, 11, 12, 13, ...]`\n */\nexport function sliceToPages(slice: Slice): number[] {\n if (slice.pageSize == null) {\n throw new Error(\"Missing `step` from slice\")\n }\n\n const start = Math.floor(slice.start / slice.pageSize)\n const end = Math.ceil(slice.end / slice.pageSize)\n return Array.from({ length: end - start }, (_, i) => start + i)\n}\n\nexport function sliceInsert(slice: Slice, array: readonly any[], newItems: readonly any[]): any[] {\n if (slice.start === slice.end) {\n return array as any\n }\n\n let result = array.slice(0, slice.start)\n result.length = slice.start\n\n result = result.concat(newItems)\n result.length = slice.end\n\n return result.concat(array.slice(slice.end))\n}\n\nexport function sliceClamp(slice: Slice, constraint: Slice): Slice {\n return {\n start: Math.max(slice.start, constraint.start),\n end: Math.min(slice.end, constraint.end),\n pageSize: slice.pageSize\n }\n}\n\nexport function sliceEq(a: Slice, b: Slice): boolean {\n return a.start === b.start && a.end === b.end && a.pageSize === b.pageSize\n}\n\n// TODO: sliceOverlap(other: Slice): Slice\n// TODO: sliceIncludes(other: Slice): boolean\n// TODO: sliceConcat(...slices: Slice[]): Slice[]\n// TODO: sliceDiff(slice: Slice): Slice[]\n","import { groupBy, isEqual, sortBy } from \"lodash\"\nimport { Primitive } from \"utility-types\"\n\nimport { DeepReadonly, toSorted } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\nimport { Filter, filterBy } from \"./filter\"\nimport { Query, QueryResult } from \"./query\"\nimport { Slice } from \"./slice\"\nimport { Sorter } from \"./sorter\"\n\nconst INPUT = Symbol(\"INPUT\")\n\ninterface PartialExecutor {\n [INPUT]: any\n}\n\nexport interface QueryExecutors<T extends Model> {\n readonly filterFn?: FilterExecutor<T>\n readonly sorterFn?: SorterExecutor<T>\n readonly grouperFn?: GrouperExecutor<T>\n readonly slicerFn?: SliceExecutor<T>\n}\n\nexport interface QueryExecutor<T extends Model> extends QueryExecutors<T> {\n (items: readonly T[]): QueryResult<T>\n}\n\nexport function queryExecutor<T extends Model>(query: Query<T>, previous?: QueryExecutor<T>): QueryExecutor<T> {\n const executors: QueryExecutors<T> = {\n filterFn: filterExecutor(query.filter, previous?.filterFn),\n sorterFn: sorterExecutor(query.sorter, previous?.sorterFn),\n grouperFn: grouperExecutor(query.grouper, previous?.grouperFn),\n slicerFn: sliceExecutor(query.slice, previous?.slicerFn)\n }\n\n const changed = previous == null || Object.entries(executors).some(([k, v]) => (previous as any)[k] !== v)\n if (!changed) {\n return previous\n }\n\n const executor = (items: readonly T[]): QueryResult<T> => {\n if (items == null || items.length === 0) {\n return { items: [], total: 0 }\n }\n\n let result: readonly T[] = items\n\n if (executors.filterFn) {\n result = result.filter(executors.filterFn)\n }\n\n if (executors.sorterFn) {\n result = toSorted(result, executors.sorterFn)\n }\n\n const total = result.length\n\n // TODO: grouper\n\n if (executors.slicerFn) {\n result = executors.slicerFn(result)\n }\n\n return { items: result, total }\n }\n\n for (const [k, v] of Object.entries(executors)) {\n Object.defineProperty(executor, k, {\n value: v,\n enumerable: true,\n writable: false\n })\n }\n\n return executor\n}\n\ninterface FilterExecutor<T extends Model> extends PartialExecutor {\n (item: T): boolean\n}\n\nfunction filterExecutor<T extends Model>(\n filter?: DeepReadonly<Filter<T>>,\n prev?: FilterExecutor<T>\n): FilterExecutor<T> | undefined {\n return compileExec<T>(filter, prev, filterBy)\n}\n\ninterface SorterExecutor<T extends Model> extends PartialExecutor {\n (a: T, b: T): number\n}\n\nfunction sorterExecutor<T extends Model>(\n sorter?: DeepReadonly<Sorter<T>>,\n prev?: SorterExecutor<T>\n): SorterExecutor<T> | undefined {\n return compileExec<T>(sorter, prev, sortBy)\n}\n\ninterface GrouperExecutor<T extends Model> extends PartialExecutor {\n (item: T): Primitive\n}\n\nfunction grouperExecutor<T extends Model>(\n sorter?: DeepReadonly<Sorter<T>>,\n prev?: GrouperExecutor<T>\n): GrouperExecutor<T> | undefined {\n return compileExec<T>(sorter, prev, groupBy)\n}\n\ninterface SliceExecutor<T extends Model> extends PartialExecutor {\n (items: readonly T[]): T[]\n}\n\nfunction sliceExecutor<T extends Model>(\n slice?: DeepReadonly<Slice>,\n prev?: SliceExecutor<T>\n): SliceExecutor<T> | undefined {\n return compileExec<T>(slice, prev, sliceBy)\n}\n\nfunction sliceBy<T extends Model>(slice: Slice) {\n return (items: T[]) => items.slice(slice.start, slice.end)\n}\n\nfunction compileExec<T extends Model>(input: any, prev: any, compiler: any): any {\n if (input == null) {\n return undefined\n }\n\n if (prev != null) {\n // thorically input is readonly\n if (prev[INPUT] === input || isEqual(prev[INPUT], input)) {\n return prev\n }\n }\n\n const exec = compiler(input) as any\n Object.defineProperty(exec, INPUT, {\n value: input,\n enumerable: true,\n writable: false\n })\n return exec\n}\n","import { TrackByFunction } from \"@angular/core\"\n\nimport { isEqual } from \"lodash\"\nimport { Primitive } from \"utility-types\"\n\nimport { filterBy, pathGetterCompile } from \"../query\"\n\nexport type Model = { [key: string]: any }\n\nexport type ModelRef = { key?: Primitive | Array<Primitive>; index?: number }\nexport type ModelRefFilter<T> = (item: T, index: number) => boolean\n\nexport interface ModelMetaProps<T extends Model> {\n readonly keys: readonly string[]\n readonly trackBy?: TrackByFunction<T>\n}\n\nexport type ModelMetaInput<T extends Model> = ModelMeta<T> | ModelMetaProps<T>\n\nexport type TrackedModel<T extends Model> = { index: number; model: T }\n\nexport class ModelMeta<T extends Model> implements ModelMetaProps<T> {\n static coerce<M extends Model>(value: ModelMetaInput<M>): ModelMeta<M> {\n if (value instanceof ModelMeta) {\n return value\n } else {\n return new ModelMeta(value)\n }\n }\n\n readonly keys: readonly string[]\n readonly trackBy: TrackByFunction<T>\n readonly #getKey?: (model: T) => string\n\n constructor(props: ModelMetaProps<T>) {\n this.keys = props.keys\n\n if (this.keys.length > 0) {\n const getters = this.keys.map(pathGetterCompile)\n if (props.trackBy == null) {\n this.trackBy = (index: number, item: T) => getters.map(p => p(item)).join(\"∀\")\n } else {\n this.trackBy = props.trackBy\n }\n this.#getKey = (item: T) => getters.map(p => p(item)).join(\"∀\")\n } else {\n if (props.trackBy == null) {\n throw new Error(\"Can't compile track by function without `keys` declaration\")\n } else {\n this.trackBy = props.trackBy\n }\n }\n }\n\n isEqual(a: T, b: T): boolean {\n return isEqual(a, b)\n }\n\n isEqualByTrack(a: TrackedModel<T>, b: TrackedModel<T>): boolean {\n if (a == null || b == null) {\n return a == null && b == null\n }\n\n if (a.index == null || b.index == null) {\n return a.index == null && b.index == null\n }\n\n if (a.model == null || b.model == null) {\n return a.model == null && b.model == null\n }\n\n return this.trackBy(a.index, a.model) === this.trackBy(b.index, b.model)\n }\n\n isEqualByKey(a: T, b: T): boolean {\n if (this.#getKey != null) {\n if (a == null || b == null) {\n return a == null && b == null\n }\n return this.#getKey(a) === this.#getKey(b)\n }\n console.warn(\"Primary keys is not defined for\", a, b)\n return false\n }\n\n normalizeRef(ref: ModelRef | ModelRefNorm): ModelRefNorm {\n if (ref instanceof ModelRefNorm) {\n return ref\n }\n\n if (ref.key != null && ref.index != null) {\n throw new Error(\"Only provide `pk` or `index` value not both\")\n }\n\n if (ref.key != null) {\n const keyValue = (Array.isArray(ref.key) ? ref.key : [ref.key]) as readonly Primitive[]\n\n if (keyValue.length > 0) {\n if (this.keys.length === 0) {\n throw new Error(\"Can't normalize ref without `keys`\")\n }\n\n if (keyValue.length !== this.keys.length) {\n throw new Error(`Wrong number of \\`key\\` values for this keys: [${this.keys.join(\",\")}]`)\n }\n return new ModelRefByKey(keyValue, this.keys)\n } else {\n console.warn(\"Empty key in ModelRef\", ref)\n }\n }\n\n if (ref.index != null) {\n return new ModelRefByIndex(ref.index)\n }\n\n throw new Error(\"Missing `key` or `index` value\")\n }\n}\n\nexport abstract class ModelRefNorm {\n readonly key?: readonly Primitive[]\n readonly index?: number\n\n #filter?: ModelRefFilter<any>\n toFilter() {\n if (this.#filter == null) {\n return (this.#filter = this._asFilter())\n }\n return this.#filter\n }\n\n protected abstract _asFilter(): ModelRefFilter<any>\n}\n\nexport class ModelRefByKey extends ModelRefNorm {\n override readonly key: readonly Primitive[]\n\n #keys: readonly string[]\n constructor(key: readonly Primitive[], keys: readonly string[]) {\n super()\n this.key = key\n this.#keys = keys\n }\n\n protected _asFilter(): ModelRefFilter<any> {\n const filter = {} as any\n for (let i = 0; i < this.#keys.length; i++) {\n filter[this.#keys[i]] = this.key[i]\n }\n return filterBy(filter)\n }\n}\n\nexport class ModelRefByIndex extends ModelRefNorm {\n override readonly index: number\n\n constructor(index: number) {\n super()\n this.index = index\n }\n\n protected _asFilter(): ModelRefFilter<any> {\n return (item: any, index: number) => this.index === index\n }\n}\n\nexport class UnknownMeta<T extends Model> extends ModelMeta<T> {\n constructor() {\n super({ keys: [], trackBy: (index: number) => index })\n }\n}\n","import { Observable } from \"rxjs\"\n\nimport { DeepReadonly } from \"@ngutil/common\"\n\nimport { Model, ModelRefNorm } from \"../model\"\nimport { Slice } from \"../query\"\n\nexport type PartialCollection<T> = readonly (T | undefined)[]\n\nexport abstract class CollectionStore<T extends Model> {\n /**\n * Update the given slice, and return all items observable\n */\n abstract insertSlice(slice: DeepReadonly<Slice>, items: readonly T[]): Observable<PartialCollection<T>>\n\n /**\n * @returns `true` when the given slice is available in the cache\n */\n abstract hasSlice(slice: DeepReadonly<Slice>): Observable<boolean>\n\n /**\n * @returns items by the given slice\n */\n abstract getSlice(slice: DeepReadonly<Slice>): Observable<PartialCollection<T>>\n\n /**\n * Get item from collection\n */\n abstract get(ref: ModelRefNorm): Observable<T | undefined>\n\n /**\n * Get index of item in collection, -1 if not found\n */\n abstract indexOf(ref: ModelRefNorm): Observable<number>\n\n /**\n * Update item in collection\n *\n * @returns the updated index, or -1 if not found\n */\n abstract update(ref: ModelRefNorm, item: T): Observable<number>\n\n /**\n * Update item if exists in collection, or insert at the given position\n *\n * @param position If positon is negative, insert at the end of collection\n * @returns the updated index or index of where to insert\n */\n abstract updateOrInsert(ref: ModelRefNorm, item: T, position?: number): Observable<number>\n\n /**\n * Remove item from collection\n * @returns the index of deleted item, -1 if not found\n */\n abstract del(ref: ModelRefNorm): Observable<number>\n\n /**\n * Removes all items from collection\n */\n abstract clear(): Observable<void>\n}\n","import { BehaviorSubject, combineLatest, map, Observable, of, take } from \"rxjs\"\n\nimport { Model, ModelRefNorm } from \"../model\"\nimport { Slice, sliceApply, sliceClamp, sliceEq, sliceInsert } from \"../query\"\nimport { CollectionStore, PartialCollection } from \"./collection-store\"\n\nexport class MemoryStore<T extends Model> extends CollectionStore<T> {\n readonly #data = new BehaviorSubject<PartialCollection<T>>([])\n\n override insertSlice(slice: Slice, items: readonly T[]): Observable<PartialCollection<T>> {\n this.#data.next(sliceInsert(slice, this.#data.value, items))\n return this.#data\n }\n\n override hasSlice(slice: Slice): Observable<boolean> {\n return this.#data.pipe(\n map(data => {\n if (sliceEq(slice, sliceClamp(slice, { start: 0, end: data.length }))) {\n for (let i = slice.start; i < slice.end; i++) {\n if (data[i] == null) {\n return false\n }\n }\n return true\n } else {\n return false\n }\n })\n )\n }\n\n override getSlice(slice: Slice): Observable<PartialCollection<T>> {\n return this.#data.pipe(map(data => sliceApply(slice, data)))\n }\n\n override get(ref: ModelRefNorm): Observable<T | undefined> {\n return this.#data.pipe(map(data => data.find(ref.toFilter())))\n }\n\n override indexOf(ref: ModelRefNorm): Observable<number> {\n return this.#data.pipe(map(data => data.findIndex(ref.toFilter())))\n }\n\n override update(ref: ModelRefNorm, item: T): Observable<number> {\n return combineLatest({\n index: this.indexOf(ref),\n data: this.#data\n }).pipe(\n take(1),\n map(({ index, data }) => {\n if (index < 0) {\n return index\n }\n this.#data.next(sliceInsert({ start: index, end: index + 1 }, data, [item]))\n return index\n })\n )\n }\n\n override updateOrInsert(ref: ModelRefNorm, item: T, position?: number): Observable<number> {\n return combineLatest({\n index: this.indexOf(ref),\n data: this.#data\n }).pipe(\n take(1),\n map(({ index, data }) => {\n if (index < 0) {\n index = position == null ? data.length : position < 0 ? data.length : position\n }\n this.#data.next(sliceInsert({ start: index, end: index + 1 }, data, [item]))\n return index\n })\n )\n }\n\n override del(ref: ModelRefNorm): Observable<number> {\n return combineLatest({\n index: this.indexOf(ref),\n data: this.#data\n }).pipe(\n take(1),\n map(({ index, data }) => {\n if (index < 0) {\n return index\n }\n const result = data.slice(0)\n result.splice(index, 1)\n this.#data.next(result)\n return index\n })\n )\n }\n\n override clear(): Observable<void> {\n if (this.#data.value.length > 0) {\n this.#data.next([])\n }\n return of(undefined)\n }\n}\n","import { BehaviorSubject, combineLatest, map, Observable } from \"rxjs\"\n\nimport { isEqual } from \"lodash\"\n\nimport { deepClone, deepFreeze, DeepReadonly } from \"@ngutil/common\"\n\nexport abstract class Property<T> extends BehaviorSubject<DeepReadonly<T> | undefined> {\n // readonly #signal: Signal<DeepReadonly<T> | undefined> = toSignal(this, { requireSync: true })\n\n set(value: T | undefined, clone: boolean = true) {\n if (!isEqual(this.value, value)) {\n if (value != null) {\n this.next(deepFreeze<T>(clone ? deepClone<T>(value) : value) as any)\n } else {\n this.next(undefined)\n }\n }\n }\n\n get() {\n return this.value\n }\n\n del(): void {\n this.set(undefined)\n }\n\n /**\n * Merge values and emit when changed (dont change original values)\n */\n abstract update(other: T): void\n}\n\nexport abstract class PropertyCombined<T> {\n abstract readonly normal: Property<T>\n abstract readonly forced: Property<T>\n abstract readonly merged$: Observable<DeepReadonly<T> | undefined>\n}\n\nexport function mergedProperty(merger: (...items: any[]) => any, ...props: Observable<any>[]): Observable<any> {\n if (props.length > 1) {\n return combineLatest(props).pipe(map(values => deepFreeze(merger(...values))))\n } else {\n return props[0] as any\n }\n}\n","import { Observable } from \"rxjs\"\n\nimport { DeepReadonly } from \"@ngutil/common\"\n\nimport { filterMerge } from \"../../query\"\nimport { mergedProperty, Property, PropertyCombined } from \"./abstract\"\n\nexport class FilterProperty<T> extends Property<T> {\n override update(other: T): void {\n this.set(filterMerge((this as { value: any }).value, other) as any, false)\n }\n}\n\nexport class FilterCombined<T> extends PropertyCombined<T> {\n override normal = new FilterProperty<T>(undefined)\n override forced = new FilterProperty<T>(undefined)\n override merged$: Observable<DeepReadonly<T> | undefined> = mergedProperty(filterMerge, this.normal, this.forced)\n}\n","import { Observable, map } from \"rxjs\"\n\nimport { DeepReadonly } from \"@ngutil/common\"\n\nimport { sorterMerge, SortDirection, sorterFind } from \"../../query\"\nimport { mergedProperty, Property, PropertyCombined } from \"./abstract\"\nimport { Model } from \"../../model\"\n\nexport class SorterProperty<T> extends Property<T> {\n override update(other: T): void {\n this.set(sorterMerge((this as { value: any }).value, other as any) as any, false)\n }\n}\n\n\ntype OfTypes<T extends Model> = ReturnType<typeof sorterFind<T>>\n\nexport class SorterCombined<T extends Model> extends PropertyCombined<T> {\n override normal = new SorterProperty<T>(undefined)\n override forced = new SorterProperty<T>(undefined)\n // TODO: normalized sorter\n override merged$: Observable<DeepReadonly<T> | undefined> = mergedProperty(sorterMerge, this.normal, this.forced)\n\n of(name: string): Observable<OfTypes<T>> {\n return this.merged$.pipe(\n map((sorters: any) => sorters == null ? undefined : sorterFind(sorters, name))\n )\n }\n\n directionOf(name: string) {\n return this.of(name).pipe(map(value => {\n if (value == null) {\n return undefined\n } else if (typeof value === \"string\") {\n return value\n } else {\n return value.dir\n }\n }))\n }\n\n isSet(name: string): Observable<boolean> {\n return this.directionOf(name).pipe(map(v => v != null))\n }\n\n isAsc(name: string): Observable<boolean> {\n return this.directionOf(name).pipe(map(v => v === SortDirection.Asc))\n }\n\n isDesc(name: string): Observable<boolean> {\n return this.directionOf(name).pipe(map(v => v === SortDirection.Desc))\n }\n}\n","import { Observable } from \"rxjs\"\n\nimport { DeepReadonly } from \"@ngutil/common\"\n\nimport { slimerMerge } from \"../../query\"\nimport { mergedProperty, Property, PropertyCombined } from \"./abstract\"\n\nexport class SlimerProperty<T> extends Property<T> {\n override update(other: T): void {\n this.set(slimerMerge((this as { value: any }).value, other) as any, false)\n }\n}\n\nexport class SlimerCombined<T> extends PropertyCombined<T> {\n override normal = new SlimerProperty<T>(undefined)\n override forced = new SlimerProperty<T>(undefined)\n override merged$: Observable<DeepReadonly<T> | undefined> = mergedProperty(slimerMerge, this.normal, this.forced)\n}\n","import { Observable } from \"rxjs\"\n\nimport { DeepReadonly } from \"@ngutil/common\"\n\nimport { grouperMerge } from \"../../query\"\nimport { mergedProperty, Property, PropertyCombined } from \"./abstract\"\n\nexport class GrouperProperty<T> extends Property<T> {\n override update(other: T): void {\n this.set(grouperMerge((this as { value: any }).value, other) as any, false)\n }\n}\n\nexport class GrouperCombined<T> extends PropertyCombined<T> {\n override normal = new GrouperProperty<T>(undefined)\n override forced = new GrouperProperty<T>(undefined)\n override merged$: Observable<DeepReadonly<T> | undefined> = mergedProperty(grouperMerge, this.normal, this.forced)\n}\n","import { DataSource as CdkDataSource, CollectionViewer } from \"@angular/cdk/collections\"\n\nimport {\n BehaviorSubject,\n combineLatest,\n concatMap,\n debounceTime,\n distinctUntilChanged,\n finalize,\n map,\n Observable,\n of,\n ReplaySubject,\n shareReplay,\n Subject,\n Subscriber,\n switchMap,\n take,\n takeUntil,\n tap\n} from \"rxjs\"\n\nimport { isEqual, merge } from \"lodash\"\n\nimport { ConnectProtocol, deepClone, deepFreeze, DeepReadonly } from \"@ngutil/common\"\n\nimport type { Model, ModelRef } from \"../model\"\nimport type { DataProvider } from \"../provider/provider\"\nimport type { Filter, Grouper, Query, Slice, Slimer, Sorter } from \"../query\"\nimport { type CollectionStore, MemoryStore, type PartialCollection } from \"../store\"\nimport { FilterCombined, GrouperCombined, SlimerCombined, SorterCombined } from \"./properties\"\n\nconst DEBOUNCE_TIME = 50\n\ntype DSQuery<T extends Model> = Query<T> & { slice: DeepReadonly<Slice> }\n\nexport class DataSource<T extends Model> extends CdkDataSource<T | undefined> implements ConnectProtocol {\n readonly busy$ = new BehaviorSubject<boolean>(false)\n readonly total$ = new BehaviorSubject<number | undefined>(undefined)\n\n readonly filter = new FilterCombined<Filter<T>>()\n readonly sorter = new SorterCombined<Sorter<T>>()\n readonly slimer = new SlimerCombined<Slimer<T>>()\n readonly grouper = new GrouperCombined<Grouper<T>>()\n\n readonly #queryBase = combineLatest({\n filter: this.filter.merged$,\n sorter: this.sorter.merged$,\n slimer: this.slimer.merged$,\n grouper: this.grouper.merged$\n }).pipe(shareReplay(1))\n\n readonly #slice = new ReplaySubject<Slice>(1)\n readonly slice$: Observable<Slice> = this.#slice.pipe(\n switchMap(slice => this.provider.clampSlice(slice)),\n distinctUntilChanged(isEqual),\n map(slice => deepFreeze(deepClone(slice))),\n shareReplay(1)\n )\n\n readonly #reload = new Subject<void>()\n readonly reset$: Observable<unknown> = merge(this.#queryBase, this.#reload).pipe(\n tap(() => this.#setBusy(true)),\n switchMap(() => this.store.clear()),\n shareReplay(1)\n )\n\n readonly query$: Observable<DSQuery<T>> = combineLatest({ base: this.#queryBase, slice: this.slice$ }).pipe(\n map(({ base, slice }) => {\n return { ...base, slice }\n }),\n shareReplay(1)\n )\n\n readonly items$: Observable<PartialCollection<T>> = combineLatest({ query: this.query$, reset: this.reset$ }).pipe(\n tap(() => this.#setBusy(true)),\n debounceTime(DEBOUNCE_TIME),\n switchMap(({ query }) => {\n return this.store.hasSlice(query.slice).pipe(\n switchMap(hasSlice => {\n if (hasSlice) {\n return this.store.getSlice(query.slice)\n } else {\n return this.provider.queryList(query).pipe(\n switchMap(result => {\n if (result.total != null) {\n this.total$.next(result.total)\n }\n return this.store.insertSlice(query.slice, result.items)\n }),\n take(1)\n )\n }\n })\n )\n }),\n finalize(() => this.#setBusy(false)),\n shareReplay(1)\n )\n\n readonly store: CollectionStore<T>\n constructor(\n public readonly provider: DataProvider<T>,\n store?: CollectionStore<T>\n ) {\n super()\n if (store == null) {\n store = new MemoryStore()\n }\n this.store = store\n }\n\n setSlice(slice: Slice) {\n this.#slice.next(slice)\n return this\n }\n\n all() {\n return this.setSlice({start: 0, end: Infinity})\n }\n\n realod() {\n this.#reload.next()\n }\n\n getItem(ref: ModelRef): Observable<T | undefined> {\n const refn = this.provider.meta.normalizeRef(ref)\n return this.#storeFirst(\n query => this.store.get(refn),\n query => this.provider.queryItem(refn, query)\n )\n }\n\n getItemPosition(ref: ModelRef): Observable<number | undefined> {\n const refn = this.provider.meta.normalizeRef(ref)\n return this.#storeFirst(\n query => this.store.indexOf(refn).pipe(map(i => (i < 0 ? undefined : i))),\n query => this.provider.queryPosition(refn, query)\n )\n }\n\n realodItem(ref: ModelRef, insertPosition?: number): Observable<T | undefined> {\n const refn = this.provider.meta.normalizeRef(ref)\n return this.query$.pipe(\n switchMap(query => this.provider.queryItem(refn, query)),\n switchMap(item =>\n item != null ? this.store.updateOrInsert(refn, item, insertPosition).pipe(map(() => item)) : of(item)\n ),\n take(1)\n )\n }\n\n #storeFirst<X>(\n storeFn: (query: Query<T>) => Observable<X>,\n selfFn: (query: Query<T>) => Observable<X>\n ): Observable<X> {\n return this.query$.pipe(\n take(1),\n switchMap(query => storeFn(query).pipe(switchMap(result => (result == null ? selfFn(query) : of(result)))))\n )\n }\n\n #setBusy(busy: boolean) {\n if (this.provider.isAsync) {\n if (this.busy$.value !== busy) {\n this.busy$.next(busy)\n }\n }\n }\n\n #cvSubs = new Map<CollectionViewer, Subject<void>>()\n\n override connect(collectionViewer: CollectionViewer): Observable<readonly (T | undefined)[]> {\n const until = new Subject<void>()\n\n this.#cvSubs.get(collectionViewer)?.next()\n this.#cvSubs.set(collectionViewer, until)\n\n return new Observable((subscriber: Subscriber<readonly (T | undefined)[]>) => {\n const sub1 = collectionViewer.viewChange.subscribe(this.#slice)\n const sub2 = this.items$.subscribe(subscriber)\n\n return () => {\n if (this.#cvSubs.get(collectionViewer) === until) {\n this.#cvSubs.delete(collectionViewer)\n }\n sub1.unsubscribe()\n sub2.unsubscribe()\n }\n }).pipe(takeUntil(until))\n }\n\n override disconnect(collectionViewer: CollectionViewer): void {\n this.#cvSubs.get(collectionViewer)?.next()\n this.#cvSubs.delete(collectionViewer)\n }\n}\n","import { DataSource as CdkDataSource, CollectionViewer } from \"@angular/cdk/collections\"\nimport { Directive, Input, OnDestroy, Optional, input } from \"@angular/core\"\nimport { takeUntilDestroyed, toSignal } from \"@angular/core/rxjs-interop\"\n\nimport {\n combineLatest,\n finalize,\n Observable,\n of,\n ReplaySubject,\n share,\n Subject,\n Subscription,\n switchMap,\n takeUntil,\n tap,\n throwError\n} from \"rxjs\"\n\nimport { Busy, ConnectProtocol } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\nimport { DataProvider } from \"../provider/provider\"\nimport { Filter, Grouper, Slimer, Sorter } from \"../query\"\nimport { DataSource } from \"./source\"\n\nexport type DataSourceInput<T extends Model> = any\n\n/**\n * @example\n * ```html\n * <table [nuDataSource]=\"...\" [filter]=\"{isActive: true}\" [sorter]=\"[{name: 'asc'}]\"></table>\n * ```\n *\n * ```ts\n * @Component({\n * template: `<table [nuDataSource]=\"users$\"></table>`\n * })\n * class UserTable {\n * readonly userService = inject(UserService)\n * readonly users$ = UserService.all()\n * }\n * ```\n *\n * ```ts\n * @Component({\n * selector: \"table.my-table\",\n * template: `\n * <cdk-virtual-scroll-viewport itemSize=\"50\" class=\"example-viewport\">\n * <div *cdkVirtualFor=\"let item of dataSource\" class=\"example-item\">{{item}}</div>\n * </cdk-virtual-scroll-viewport>\n * `\n * })\n * class TableComponent {\n * readonly dataSource = inject(DataSourceProxy)\n * }\n * ```\n */\n@Directive({\n standalone: true,\n selector: \"[nuDataSource]\",\n exportAs: \"nuDataSource\"\n})\nexport class DataSourceProxy<T extends Model = Model>\n extends CdkDataSource<T | undefined>\n implements OnDestroy, ConnectProtocol {\n\n @Input({ required: true, alias: \"nuDataSource\" })\n set value(value: DataSourceInput<T>) {\n this.#valueSub?.unsubscribe()\n this.#valueSub = coerceDataSource<T>(value)\n .pipe(\n tap(v => {\n if (v == null) {\n throw new Error(\"Missing DataSource\")\n }\n })\n )\n .subscribe(this.#value)\n }\n\n get value(): DataSource<T> {\n return this.#valueSig()!\n }\n\n #valueSub?: Subscription\n readonly #value = new ReplaySubject<DataSource<T>>(1)\n readonly value$ = this.#value.pipe(takeUntilDestroyed())\n readonly #valueSig = toSignal(this.value$)\n\n readonly items$ = this.value$.pipe(\n switchMap(value => value.items$),\n share()\n )\n\n readonly busy$ = this.value$.pipe(\n switchMap(value => value.busy$),\n share()\n )\n readonly isBusy = toSignal(this.busy$, { rejectErrors: true, initialValue: false })\n\n @Input()\n set filter(value: Filter<T>) {\n this.#filter.next(value)\n }\n readonly #filter = new ReplaySubject<Filter<T>>(1)\n\n @Input()\n set sorter(value: Sorter<T>) {\n this.#sorter.next(value)\n }\n readonly #sorter = new ReplaySubject<Sorter<T>>(1)\n\n @Input()\n set grouper(value: Grouper<T>) {\n this.#grouper.next(value)\n }\n readonly #grouper = new ReplaySubject<Grouper<T>>(1)\n\n @Input()\n set slimer(value: Slimer<T>) {\n this.#slimer.next(value)\n }\n readonly #slimer = new ReplaySubject<Slimer<T>>(1)\n\n readonly #subs = new Subscription()\n\n constructor(@Optional() busy?: Busy<any>) {\n super()\n\n if (busy != null) {\n this.#subs.add(busy.connect(this.busy$).subscribe())\n }\n\n this.#subs.add(\n combineLatest({ src: this.value$, filter: this.#filter }).subscribe(({ src, filter }) => {\n src.filter.forced.set(filter)\n })\n )\n\n this.#subs.add(\n combineLatest({ src: this.value$, sorter: this.#sorter }).subscribe(({ src, sorter }) => {\n src.sorter.forced.set(sorter)\n })\n )\n\n this.#subs.add(\n combineLatest({ src: this.value$, grouper: this.#grouper }).subscribe(({ src, grouper }) => {\n src.grouper.forced.set(grouper)\n })\n )\n\n this.#subs.add(\n combineLatest({ src: this.value$, slimer: this.#slimer }).subscribe(({ src, slimer }) => {\n src.slimer.forced.set(slimer)\n })\n )\n }\n\n #cvSubs = new Map<CollectionViewer, Subject<void>>()\n\n override connect(collectionViewer: CollectionViewer): Observable<readonly (T | undefined)[]> {\n const until = new Subject<void>()\n\n this.#cvSubs.get(collectionViewer)?.next()\n this.#cvSubs.set(collectionViewer, until)\n\n return this.value$.pipe(\n switchMap(value => value.connect(collectionViewer)),\n takeUntil(until),\n finalize(() => this.#cvSubs.delete(collectionViewer))\n )\n }\n\n override disconnect(collectionViewer: CollectionViewer): void {\n this.#cvSubs.get(collectionViewer)?.next()\n this.#cvSubs.delete(collectionViewer)\n }\n\n ngOnDestroy(): void {\n this.#valueSub?.unsubscribe()\n this.#valueSub = undefined\n this.#subs.unsubscribe()\n }\n}\n\nfunction coerceDataSource<T extends Model>(value: DataSourceInput<T>): Observable<DataSource<T>> {\n if (value instanceof DataSourceProxy) {\n return value.value$\n } else if (value instanceof DataSource) {\n return of(value)\n } else if (value instanceof DataProvider) {\n return of(value.toDataSource())\n } else {\n return throwError(() => new Error(\"Invalid DataSource value\"))\n }\n}\n","import type { Observable } from \"rxjs\"\nimport { of } from \"rxjs\"\n\nimport type { Model, ModelMeta, ModelRefNorm } from \"../model\"\nimport type { Query, QueryResult, Slice } from \"../query\"\nimport { DataSource } from \"../source\"\nimport type { CollectionStore } from \"../store\"\n\nexport abstract class DataProvider<T extends Model> {\n /**\n * `true` when the provider is making async requests\n */\n abstract readonly isAsync: boolean\n\n /**\n * Metadata of model\n */\n abstract readonly meta: ModelMeta<T>\n\n /**\n * Query items by the given request\n */\n abstract queryList(request: Query<T>): Observable<QueryResult<T>>\n\n /**\n * Query exactly one item by the given request\n */\n abstract queryItem(ref: ModelRefNorm, request: Query<T>): Observable<T | undefined>\n\n /**\n * Query item position in the list that matching by the given request\n */\n abstract queryPosition(ref: ModelRefNorm, request: Query<T>): Observable<number | undefined>\n\n /**\n * Froce Slice boundaries, useful in array, or obeservable providers\n */\n clampSlice(slice: Slice): Observable<Slice> {\n return of(slice)\n }\n\n /**\n * @returns New data source instance\n */\n toDataSource(store?: CollectionStore<T>): DataSource<T> {\n return new DataSource(this, store)\n }\n}\n","import { map, Observable, take } from \"rxjs\"\n\nimport { Model, ModelMeta, ModelMetaInput, ModelRefNorm } from \"../model\"\nimport { Query, queryExecutor, QueryExecutor, QueryResult, Slice, sliceClamp } from \"../query\"\nimport { DataProvider } from \"./provider\"\n\nexport abstract class LocalProvider<T extends Model> extends DataProvider<T> {\n override readonly isAsync = false\n override readonly meta: ModelMeta<T>\n abstract readonly items$: Observable<readonly T[]>\n\n #executor?: QueryExecutor<T>\n\n constructor(meta: ModelMetaInput<T>) {\n super()\n this.meta = ModelMeta.coerce(meta)\n }\n\n executor(request: Query<T>): QueryExecutor<T> {\n return (this.#executor = queryExecutor(request, this.#executor))\n }\n\n override queryList(request: Query<T>): Observable<QueryResult<T>> {\n const exec = this.executor(request)\n return this.items$.pipe(map(items => exec(items)))\n }\n\n override queryItem(ref: ModelRefNorm, request: Query<T>): Observable<T | undefined> {\n return this.queryList(request).pipe(map(list => list.items.find(ref.toFilter())))\n }\n\n override queryPosition(ref: ModelRefNorm, request: Query<T>): Observable<number | undefined> {\n return this.queryList(request).pipe(map(list => list.items.findIndex(ref.toFilter())))\n }\n\n override clampSlice(slice: Slice): Observable<Slice> {\n return this.items$.pipe(take(1), map(items => sliceClamp(slice, {start: 0, end: items.length})))\n }\n}\n","import { type Observable, of } from \"rxjs\"\n\nimport type { Model, ModelMetaInput } from \"../model\"\nimport { LocalProvider } from \"./local\"\n\n\nexport class ArrayProvider<T extends Model> extends LocalProvider<T> {\n override readonly items$: Observable<readonly T[]>\n\n constructor(meta: ModelMetaInput<T>, items: readonly T[]) {\n super(meta)\n this.items$ = of(items)\n }\n}\n","import type { Observable } from \"rxjs\"\n\nimport type { Model, ModelMetaInput } from \"../model\"\nimport { LocalProvider } from \"./local\"\n\nexport class ObservableProvider<T extends Model> extends LocalProvider<T> {\n readonly items$: Observable<readonly T[]>\n\n constructor(meta: ModelMetaInput<T>, src: Observable<readonly T[]>) {\n super(meta)\n this.items$ = src\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["sortBy","groupBy","CdkDataSource"],"mappings":";;;;;;;;;AAKM,SAAU,iBAAiB,CAAC,IAAY,EAAA;IAC1C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AAC5B,QAAA,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAA;KAChC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CACzB,CAAC,MAAM,EAAE,IAAI,KAAK,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,EAC1C,CAAC,GAAQ,MAAM,GAAG,IAAI,IAAI,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAC3C,CAAA;AACL,CAAC;AAED,MAAM,QAAQ,GAAG,OAAO,CAAA;AAExB,SAAS,UAAU,CAAC,IAAY,EAAE,MAAgB,EAAA;AAC9C,IAAA,IAAI,IAAI,KAAK,GAAG,EAAE;AACd,QAAA,OAAO,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;KAC7C;SAAM;AACH,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;AACrD,QAAA,OAAO,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAA;KACvE;AACL;;ACSO,MAAM,SAAS,GAAkB;;;;;;;;;;;;;;;;;;;;;;;;;CAyBvC,CAAA;AAEK,SAAU,WAAW,CAAC,KAAU,EAAA;AAClC,IAAA,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,SAAS,CAAe,CAAA;AACrE,IAAA,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;AAChB,QAAA,OAAO,GAAG,CAAC,GAAG,CAAC,EAAE,IAAG;YAChB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,CAAA;AACnC,SAAC,CAAC,CAAA;KACL;SAAM;QACH,OAAO,CAAC,EAAE,EAAE,EAAA,IAAA,oBAAe,KAAK,EAAE,CAAC,CAAA;KACtC;AACL,CAAC;AAoED;;;;;AAKG;AACG,SAAU,QAAQ,CAAkB,OAAkB,EAAA;AACxD,IAAA,OAAO,cAAc,CAAI,OAAO,CAAC,CAAA;AACrC,CAAC;AAED;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA,SAAS,cAAc,CAAkB,OAAkB,EAAA;AACvD,IAAA,IAAI,MAAkB,CAAA;IACtB,MAAM,MAAM,GAAkB,EAAE,CAAA;AAChC,IAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;QAChD,QAAQ,GAAG;AACP,YAAA,KAAA,GAAA;gBACI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACvB,oBAAA,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;iBAClE;AACD,gBAAA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,GAAG,EAAC,cAAiB,EAAC,CAAC,CAAA;gBAChE,MAAK;AAET,YAAA,KAAA,GAAA;gBACI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACvB,oBAAA,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAA;iBACjE;AACD,gBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAC,cAAiB,EAAC,CAAC,CAAC,CAAA;gBAC9C,MAAK;AAET,YAAA;AACI,gBAAA,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAA;AAC/B,gBAAA,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE;AACtB,oBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,eAAe,CAAC,MAAM,EAAE,EAAS,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;iBACvG;qBAAM;oBACH,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAe,IAAA,oBAAA,KAAK,CAAC,CAAC,CAAA;iBAC3D;gBAED,MAAK;SACZ;KACJ;AACD,IAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAA;AACvB,CAAC;AAED,SAAS,eAAe,CAAC,MAAkB,EAAE,EAAY,EAAE,KAAU,EAAA;AACjE,IAAA,IAAI,KAAa,CAAA;AACjB,IAAA,IAAI,KAAa,CAAA;IACjB,QAAQ,EAAE;AACN,QAAA,KAAA,IAAA;;AAEI,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAA;AAE3C,QAAA,KAAA,KAAA;AACI,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAA;AAE5C,QAAA,KAAA,KAAA;YACI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,CAAA;AACzC,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,KAAK,KAAK,CAAC,CAAA;AAExE,QAAA,KAAA,IAAA;;AAEI,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAA;AAE3C,QAAA,KAAA,KAAA;AACI,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAA;AAE5C,QAAA,KAAA,KAAA;YACI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,CAAA;AACzC,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,KAAK,KAAK,CAAC,CAAA;AAExE,QAAA,KAAA,GAAA;AACI,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAA;AAE1C,QAAA,KAAA,IAAA;YACI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,CAAA;AACzC,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,GAAG,KAAK,CAAC,CAAA;AAEtE,QAAA,KAAA,IAAA;AACI,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAA;AAE3C,QAAA,KAAA,KAAA;YACI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,CAAA;AACzC,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,IAAI,KAAK,CAAC,CAAA;AAEvE,QAAA,KAAA,GAAA;AACI,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAA;AAE1C,QAAA,KAAA,IAAA;YACI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,CAAA;AACzC,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,GAAG,KAAK,CAAC,CAAA;AAEtE,QAAA,KAAA,IAAA;AACI,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAA;AAE3C,QAAA,KAAA,KAAA;YACI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,CAAA;AACzC,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,IAAI,KAAK,CAAC,CAAA;AAEvE,QAAA,KAAA,GAAA;AACI,YAAA,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;AACrB,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAEnG,QAAA,KAAA,IAAA;YACI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,CAAA;YACzC,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;AAE9E,QAAA,KAAA,GAAA;AACI,YAAA,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;AACrB,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAA;AAE5D,QAAA,KAAA,IAAA;YACI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,CAAA;YACzC,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAA;AAEhF,QAAA,KAAA,GAAA;AACI,YAAA,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;AACrB,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;AAE1D,QAAA,KAAA,IAAA;YACI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,CAAA;YACzC,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;AAE9E,QAAA,KAAA,GAAA;AACI,YAAA,KAAK,GAAG,KAAK,YAAY,MAAM,GAAG,KAAK,GAAG,IAAI,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AAClE,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;AAE9C,QAAA,KAAA,IAAA;AACI,YAAA,KAAK,GAAG,KAAK,YAAY,MAAM,GAAG,KAAK,GAAG,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;AACnE,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;AAE9C,QAAA,KAAA,GAAA;YACI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACvB,gBAAA,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;aAClE;YACD,OAAO,IAAI,CACP,WAAW,CACP,KAAK,CAAC,GAAG,CAAC,CAAC,IAAG;AACV,gBAAA,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE;oBAClB,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,eAAe,CAAC,MAAM,EAAE,EAAS,EAAE,GAAG,CAAC,CAAC,CAAA;iBACvF;qBAAM;AACH,oBAAA,OAAO,eAAe,CAAC,MAAM,EAAe,IAAA,oBAAA,CAAC,CAAC,CAAA;iBACjD;aACJ,CAAC,CACL,CACJ,CAAA;AAEL,QAAA,KAAA,GAAA;YACI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACvB,gBAAA,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAA;aACjE;YACD,OAAO,GAAG,CACN,WAAW,CACP,KAAK,CAAC,GAAG,CAAC,CAAC,IAAG;AACV,gBAAA,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE;oBAClB,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,eAAe,CAAC,MAAM,EAAE,EAAS,EAAE,GAAG,CAAC,CAAC,CAAA;iBACvF;qBAAM;AACH,oBAAA,OAAO,eAAe,CAAC,MAAM,EAAe,IAAA,oBAAA,CAAC,CAAC,CAAA;iBACjD;aACJ,CAAC,CACL,CACJ,CAAA;KACR;AAED,IAAA,MAAM,IAAI,KAAK,CAAC,wBAAwB,EAAE,CAAA,CAAE,CAAC,CAAA;AACjD,CAAC;AAED,SAAS,OAAO,CAAC,MAAkB,EAAE,OAAgC,EAAA;AACjE,IAAA,OAAO,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AAC3C,CAAC;AAED,SAAS,IAAI,CAAC,GAAe,EAAA;AACzB,IAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;AAClB,QAAA,OAAO,CAAC,IAAI,IAAI,CAAA;KACnB;IAED,OAAO,IAAI,IAAG;AACV,QAAA,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE;AAClB,YAAA,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;AACX,gBAAA,OAAO,KAAK,CAAA;aACf;SACJ;AACD,QAAA,OAAO,IAAI,CAAA;AACf,KAAC,CAAA;AACL,CAAC;AAED,SAAS,GAAG,CAAC,GAAe,EAAA;AACxB,IAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;AAClB,QAAA,OAAO,CAAC,IAAI,IAAI,CAAA;KACnB;IAED,OAAO,IAAI,IAAG;AACV,QAAA,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE;AAClB,YAAA,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE;AACV,gBAAA,OAAO,IAAI,CAAA;aACd;SACJ;AACD,QAAA,OAAO,KAAK,CAAA;AAChB,KAAC,CAAA;AACL,CAAC;AAEe,SAAA,WAAW,CAAC,GAAG,OAAc,EAAA;IACzC,IAAI,MAAM,GAAuC,SAAS,CAAA;AAE1D,IAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;AAC1B,QAAA,IAAI,MAAM,IAAI,IAAI,EAAE;YAChB,SAAQ;SACX;AACD,QAAA,IAAI,MAAM,IAAI,IAAI,EAAE;AAChB,YAAA,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAA;SAC7B;aAAM;AACH,YAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACzC,gBAAA,IAAI,CAAC,KAAK,SAAS,EAAE;AACjB,oBAAA,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;oBAChB,SAAQ;iBACX;gBAED,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAA;aAC3B;SACJ;KACJ;AAED,IAAA,OAAO,MAAa,CAAA;AACxB;;AClbM,SAAU,OAAO,CAAkC,OAAsB,EAAA;AAC3E,IAAA,OAAO,cAAc,CAAO,OAAO,CAAC,CAAA;AACxC,CAAC;AAED,SAAS,cAAc,CAAkC,OAAsB,EAAA;AAC3E,IAAA,OAAO,CAAC,IAAI,SAAS,CAAA;AACzB,CAAC;AAEe,SAAA,YAAY,CACxB,GAAG,QAAiD,EAAA;AAEpD,IAAA,OAAO,SAAS,CAAA;AACpB,CAAC;AAED;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;ACpEA;;;;;AAKG;AACG,SAAU,MAAM,CAAkB,OAAkB,EAAA;AACtD,IAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACtB,QAAA,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAA;KAClC;AACD,IAAA,OAAO,cAAc,CAAI,OAAO,CAAQ,CAAA;AAC5C,CAAC;AAED;;;;;;;;AAQG;AACG,SAAU,eAAe,CAAkB,OAAkB,EAAA;IAC/D,OAAO,WAAW,CACb,OAAe,CAAC,GAAG,CAAC,CAAC,CAAM,KACxB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAI;AAC7B,QAAA,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;YACvB,MAAM,KAAK,GAAG,CAAC,CAAC,WAAW,EAAE,KAAK,KAAK,CAAA;AACvC,YAAA,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,GAAG,KAAK,GAAG,IAAI,EAAE,CAAA;SAC9D;AAAM,aAAA,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE;YACzB,OAAO;AACH,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,KAAK,EAAE,CAAE,CAAkB,CAAC,GAAG,IAAI,KAAK,EAAE,WAAW,EAAE,KAAK,KAAK;AACjE,gBAAA,UAAU,EAAG,CAAkB,CAAC,UAAU,IAAI,IAAI,GAAG,IAAI,GAAG,CAAC,CAAE,CAAkB,CAAC,UAAU;aAC/F,CAAA;SACJ;aAAM;AACH,YAAA,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAA,CAAE,CAAC,CAAA;SAC1C;KACJ,CAAC,CACL,CACJ,CAAA;AACL,CAAC;AAED,SAAS,cAAc,CAAkB,OAAkB,EAAA;AACvD,IAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;QACtB,OAAO,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,CAAA;KACvB;IAED,MAAM,IAAI,GAAG,eAAe,CAAI,OAAO,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;AAC9D,IAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACnB,QAAA,OAAO,IAAI,CAAC,CAAC,CAAC,CAAA;KACjB;AAED,IAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAG,CAAA;AAC3B,IAAA,OAAO,IAAI,CAAC,WAAW,CACnB,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,KAAI;QACrB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AACpB,QAAA,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAA;KAClC,EACD,OAAO,CACV,CAAA;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAmB,EAAA;AAClE,IAAA,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAA;IACtC,IAAI,KAAK,EAAE;QACP,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAA;KAC7D;SAAM;QACH,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAA;KACnE;AACL,CAAC;SAEe,OAAO,CAAC,CAAM,EAAE,CAAM,EAAE,UAAmB,EAAA;;IAEvD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE;AACxB,QAAA,OAAO,UAAU,KAAK,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;KACtC;SAAM,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE;AAC/B,QAAA,OAAO,UAAU,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;KACtC;SAAM,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE;AAC/B,QAAA,OAAO,CAAC,CAAA;KACX;AAAM,SAAA,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;AACtB,QAAA,OAAO,CAAC,CAAA;KACX;SAAM,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;QACvD,OAAO,CAAC,GAAG,CAAC,CAAA;KACf;SAAM,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;AACvD,QAAA,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAA;AACnB,QAAA,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAA;;AAEnB,QAAA,IAAI,UAAU,KAAK,IAAI,EAAE;AACrB,YAAA,IAAI,EAAE,KAAK,CAAC,EAAE;gBACV,OAAO,CAAC,CAAC,CAAA;aACZ;AAAM,iBAAA,IAAI,EAAE,KAAK,CAAC,EAAE;AACjB,gBAAA,OAAO,CAAC,CAAA;aACX;SACJ;aAAM;AACH,YAAA,IAAI,EAAE,KAAK,CAAC,EAAE;AACV,gBAAA,OAAO,CAAC,CAAA;aACX;AAAM,iBAAA,IAAI,EAAE,KAAK,CAAC,EAAE;gBACjB,OAAO,CAAC,CAAC,CAAA;aACZ;SACJ;AACD,QAAA,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;KAC5B;AAAM,SAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AAC7C,QAAA,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAA;AACnB,QAAA,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAA;QACnB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;AAE1B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACxB,YAAA,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAA;AAC3C,YAAA,IAAI,GAAG,KAAK,CAAC,EAAE;AACX,gBAAA,OAAO,GAAG,CAAA;aACb;SACJ;AAED,QAAA,IAAI,EAAE,KAAK,EAAE,EAAE;AACX,YAAA,OAAO,CAAC,CAAA;SACX;AAED,QAAA,IAAI,UAAU,KAAK,IAAI,EAAE;AACrB,YAAA,IAAI,EAAE,KAAK,CAAC,EAAE;gBACV,OAAO,CAAC,CAAC,CAAA;aACZ;AAAM,iBAAA,IAAI,EAAE,KAAK,CAAC,EAAE;AACjB,gBAAA,OAAO,CAAC,CAAA;aACX;SACJ;aAAM;AACH,YAAA,IAAI,EAAE,KAAK,CAAC,EAAE;AACV,gBAAA,OAAO,CAAC,CAAA;aACX;AAAM,iBAAA,IAAI,EAAE,KAAK,CAAC,EAAE;gBACjB,OAAO,CAAC,CAAC,CAAA;aACZ;SACJ;QAED,OAAO,EAAE,GAAG,EAAE,CAAA;KACjB;SAAM,IAAI,aAAa,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE;AAC7C,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;KAC5D;AAED,IAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;AACzB,CAAC;AAEe,SAAA,WAAW,CAAkB,GAAG,OAA4C,EAAA;AACxF,IAAA,IAAI,MAA6B,CAAA;AAEjC,IAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;AAC1B,QAAA,IAAI,MAAM,IAAI,IAAI,EAAE;YAChB,SAAQ;SACX;AACD,QAAA,IAAI,MAAM,IAAI,IAAI,EAAE;AAChB,YAAA,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAA;YAC1B,SAAQ;SACX;AAED,QAAA,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE;AACzB,YAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACzC,gBAAA,MAAM,QAAQ,GAAI,MAAc,CAAC,IAAI,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAA;gBACvE,IAAI,QAAQ,EAAE;oBACV,CAAC;oBAAC,QAAgB,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAA;iBACvC;qBAAM;AACH,oBAAA,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,EAAS,CAAC,CAAA;iBAC5C;aACJ;SACJ;KACJ;AAED,IAAA,OAAO,MAAM,CAAA;AACjB,CAAC;AAGe,SAAA,UAAU,CAAkB,OAAkB,EAAE,IAAY,EAAA;AACxE,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAA;AACjD,IAAA,IAAI,MAAM,IAAI,IAAI,EAAE;AAChB,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,CAAA;KACtB;AACD,IAAA,OAAO,SAAS,CAAA;AAEpB;;ACvLgB,SAAA,MAAM,CAAkB,MAAiB,KAAU;AAEnD,SAAA,eAAe,CAAkB,MAAiB,KAAU;AAE5E,SAAS,aAAa,CAAkB,MAAiB,EAAA;AACrD,IAAA,OAAO,IAAI,IAAI,IAAI,CAAA;AACvB,CAAC;SAEe,WAAW,CAAkB,GAAG,OAAkB;;ACAlD,SAAA,UAAU,CAAC,GAAG,MAAe,EAAA;IACzC,IAAI,MAAM,GAAsB,SAAS,CAAA;AAEzC,IAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;AACxB,QAAA,IAAI,KAAK,IAAI,IAAI,EAAE;YACf,SAAQ;SACX;AACD,QAAA,IAAI,MAAM,IAAI,IAAI,EAAE;AAChB,YAAA,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAA;SAC5B;aAAM;YACH,MAAM,GAAG,EAAE,GAAI,MAAc,EAAE,GAAG,KAAK,EAAE,CAAA;SAC5C;KACJ;AAED,IAAA,OAAO,MAAM,CAAA;AACjB,CAAC;AAED;;;AAGG;AACa,SAAA,UAAU,CAAC,KAAY,EAAE,KAAqB,EAAA;AAC1D,IAAA,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;IAClD,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,CAAA;AACvC,IAAA,OAAO,MAAM,CAAA;AACjB,CAAC;AAED;;AAEG;AACG,SAAU,YAAY,CAAC,KAAY,EAAA;AACrC,IAAA,IAAI,KAAK,CAAC,QAAQ,IAAI,IAAI,EAAE;AACxB,QAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAA;KAC/C;AAED,IAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAA;AACtD,IAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAA;IACjD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,GAAG,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC,CAAA;AACnE,CAAC;SAEe,WAAW,CAAC,KAAY,EAAE,KAAqB,EAAE,QAAwB,EAAA;IACrF,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG,EAAE;AAC3B,QAAA,OAAO,KAAY,CAAA;KACtB;AAED,IAAA,IAAI,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;AACxC,IAAA,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAA;AAE3B,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;AAChC,IAAA,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,CAAA;AAEzB,IAAA,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;AAChD,CAAC;AAEe,SAAA,UAAU,CAAC,KAAY,EAAE,UAAiB,EAAA;IACtD,OAAO;AACH,QAAA,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC;AAC9C,QAAA,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC;QACxC,QAAQ,EAAE,KAAK,CAAC,QAAQ;KAC3B,CAAA;AACL,CAAC;AAEe,SAAA,OAAO,CAAC,CAAQ,EAAE,CAAQ,EAAA;IACtC,OAAO,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,CAAA;AAC9E,CAAC;AAED;AACA;AACA;AACA;;ACnFA,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;AAiBb,SAAA,aAAa,CAAkB,KAAe,EAAE,QAA2B,EAAA;AACvF,IAAA,MAAM,SAAS,GAAsB;QACjC,QAAQ,EAAE,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC;QAC1D,QAAQ,EAAE,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC;QAC1D,SAAS,EAAE,eAAe,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC;QAC9D,QAAQ,EAAE,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC;KAC3D,CAAA;AAED,IAAA,MAAM,OAAO,GAAG,QAAQ,IAAI,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAM,QAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;IAC1G,IAAI,CAAC,OAAO,EAAE;AACV,QAAA,OAAO,QAAQ,CAAA;KAClB;AAED,IAAA,MAAM,QAAQ,GAAG,CAAC,KAAmB,KAAoB;QACrD,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YACrC,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAA;SACjC;QAED,IAAI,MAAM,GAAiB,KAAK,CAAA;AAEhC,QAAA,IAAI,SAAS,CAAC,QAAQ,EAAE;YACpB,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;SAC7C;AAED,QAAA,IAAI,SAAS,CAAC,QAAQ,EAAE;YACpB,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAA;SAChD;AAED,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAA;;AAI3B,QAAA,IAAI,SAAS,CAAC,QAAQ,EAAE;AACpB,YAAA,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;SACtC;AAED,QAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;AACnC,KAAC,CAAA;AAED,IAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;AAC5C,QAAA,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,EAAE;AAC/B,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,QAAQ,EAAE,KAAK;AAClB,SAAA,CAAC,CAAA;KACL;AAED,IAAA,OAAO,QAAQ,CAAA;AACnB,CAAC;AAMD,SAAS,cAAc,CACnB,MAAgC,EAChC,IAAwB,EAAA;IAExB,OAAO,WAAW,CAAI,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;AACjD,CAAC;AAMD,SAAS,cAAc,CACnB,MAAgC,EAChC,IAAwB,EAAA;IAExB,OAAO,WAAW,CAAI,MAAM,EAAE,IAAI,EAAEA,QAAM,CAAC,CAAA;AAC/C,CAAC;AAMD,SAAS,eAAe,CACpB,MAAgC,EAChC,IAAyB,EAAA;IAEzB,OAAO,WAAW,CAAI,MAAM,EAAE,IAAI,EAAEC,SAAO,CAAC,CAAA;AAChD,CAAC;AAMD,SAAS,aAAa,CAClB,KAA2B,EAC3B,IAAuB,EAAA;IAEvB,OAAO,WAAW,CAAI,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;AAC/C,CAAC;AAED,SAAS,OAAO,CAAkB,KAAY,EAAA;AAC1C,IAAA,OAAO,CAAC,KAAU,KAAK,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;AAC9D,CAAC;AAED,SAAS,WAAW,CAAkB,KAAU,EAAE,IAAS,EAAE,QAAa,EAAA;AACtE,IAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACf,QAAA,OAAO,SAAS,CAAA;KACnB;AAED,IAAA,IAAI,IAAI,IAAI,IAAI,EAAE;;AAEd,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE;AACtD,YAAA,OAAO,IAAI,CAAA;SACd;KACJ;AAED,IAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAQ,CAAA;AACnC,IAAA,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE;AAC/B,QAAA,KAAK,EAAE,KAAK;AACZ,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,QAAQ,EAAE,KAAK;AAClB,KAAA,CAAC,CAAA;AACF,IAAA,OAAO,IAAI,CAAA;AACf;;MC5Ha,SAAS,CAAA;IAClB,OAAO,MAAM,CAAkB,KAAwB,EAAA;AACnD,QAAA,IAAI,KAAK,YAAY,SAAS,EAAE;AAC5B,YAAA,OAAO,KAAK,CAAA;SACf;aAAM;AACH,YAAA,OAAO,IAAI,SAAS,CAAC,KAAK,CAAC,CAAA;SAC9B;KACJ;AAIQ,IAAA,OAAO,CAAuB;AAEvC,IAAA,WAAA,CAAY,KAAwB,EAAA;AAChC,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;QAEtB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;YACtB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;AAChD,YAAA,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,EAAE;AACvB,gBAAA,IAAI,CAAC,OAAO,GAAG,CAAC,KAAa,EAAE,IAAO,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;aACjF;iBAAM;AACH,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAA;aAC/B;YACD,IAAI,CAAC,OAAO,GAAG,CAAC,IAAO,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;SAClE;aAAM;AACH,YAAA,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,EAAE;AACvB,gBAAA,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAA;aAChF;iBAAM;AACH,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAA;aAC/B;SACJ;KACJ;IAED,OAAO,CAAC,CAAI,EAAE,CAAI,EAAA;AACd,QAAA,OAAO,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;KACvB;IAED,cAAc,CAAC,CAAkB,EAAE,CAAkB,EAAA;QACjD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE;AACxB,YAAA,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,CAAA;SAChC;AAED,QAAA,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,EAAE;YACpC,OAAO,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,CAAA;SAC5C;AAED,QAAA,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,EAAE;YACpC,OAAO,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,CAAA;SAC5C;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAA;KAC3E;IAED,YAAY,CAAC,CAAI,EAAE,CAAI,EAAA;AACnB,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE;YACtB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE;AACxB,gBAAA,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,CAAA;aAChC;AACD,YAAA,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;SAC7C;QACD,OAAO,CAAC,IAAI,CAAC,iCAAiC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;AACrD,QAAA,OAAO,KAAK,CAAA;KACf;AAED,IAAA,YAAY,CAAC,GAA4B,EAAA;AACrC,QAAA,IAAI,GAAG,YAAY,YAAY,EAAE;AAC7B,YAAA,OAAO,GAAG,CAAA;SACb;AAED,QAAA,IAAI,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,GAAG,CAAC,KAAK,IAAI,IAAI,EAAE;AACtC,YAAA,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAA;SACjE;AAED,QAAA,IAAI,GAAG,CAAC,GAAG,IAAI,IAAI,EAAE;YACjB,MAAM,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAyB,CAAA;AAEvF,YAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;gBACrB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACxB,oBAAA,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;iBACxD;gBAED,IAAI,QAAQ,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACtC,oBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,+CAAA,EAAkD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAA,CAAG,CAAC,CAAA;iBAC5F;gBACD,OAAO,IAAI,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;aAChD;iBAAM;AACH,gBAAA,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAA;aAC7C;SACJ;AAED,QAAA,IAAI,GAAG,CAAC,KAAK,IAAI,IAAI,EAAE;AACnB,YAAA,OAAO,IAAI,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;SACxC;AAED,QAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;KACpD;AACJ,CAAA;MAEqB,YAAY,CAAA;AAI9B,IAAA,OAAO,CAAsB;IAC7B,QAAQ,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE;YACtB,QAAQ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,EAAC;SAC3C;QACD,OAAO,IAAI,CAAC,OAAO,CAAA;KACtB;AAGJ,CAAA;AAEK,MAAO,aAAc,SAAQ,YAAY,CAAA;AAG3C,IAAA,KAAK,CAAmB;IACxB,WAAY,CAAA,GAAyB,EAAE,IAAuB,EAAA;AAC1D,QAAA,KAAK,EAAE,CAAA;AACP,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;AACd,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;KACpB;IAES,SAAS,GAAA;QACf,MAAM,MAAM,GAAG,EAAS,CAAA;AACxB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxC,YAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;SACtC;AACD,QAAA,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAA;KAC1B;AACJ,CAAA;AAEK,MAAO,eAAgB,SAAQ,YAAY,CAAA;AAG7C,IAAA,WAAA,CAAY,KAAa,EAAA;AACrB,QAAA,KAAK,EAAE,CAAA;AACP,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;KACrB;IAES,SAAS,GAAA;AACf,QAAA,OAAO,CAAC,IAAS,EAAE,KAAa,KAAK,IAAI,CAAC,KAAK,KAAK,KAAK,CAAA;KAC5D;AACJ,CAAA;AAEK,MAAO,WAA6B,SAAQ,SAAY,CAAA;AAC1D,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,KAAa,KAAK,KAAK,EAAE,CAAC,CAAA;KACzD;AACJ;;MCjKqB,eAAe,CAAA;AAmDpC;;ACtDK,MAAO,WAA6B,SAAQ,eAAkB,CAAA;AACvD,IAAA,KAAK,GAAG,IAAI,eAAe,CAAuB,EAAE,CAAC,CAAA;IAErD,WAAW,CAAC,KAAY,EAAE,KAAmB,EAAA;AAClD,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAA;QAC5D,OAAO,IAAI,CAAC,KAAK,CAAA;KACpB;AAEQ,IAAA,QAAQ,CAAC,KAAY,EAAA;QAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAClB,GAAG,CAAC,IAAI,IAAG;YACP,IAAI,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE;AACnE,gBAAA,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;AAC1C,oBAAA,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE;AACjB,wBAAA,OAAO,KAAK,CAAA;qBACf;iBACJ;AACD,gBAAA,OAAO,IAAI,CAAA;aACd;iBAAM;AACH,gBAAA,OAAO,KAAK,CAAA;aACf;SACJ,CAAC,CACL,CAAA;KACJ;AAEQ,IAAA,QAAQ,CAAC,KAAY,EAAA;QAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;KAC/D;AAEQ,IAAA,GAAG,CAAC,GAAiB,EAAA;QAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAA;KACjE;AAEQ,IAAA,OAAO,CAAC,GAAiB,EAAA;QAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAA;KACtE;IAEQ,MAAM,CAAC,GAAiB,EAAE,IAAO,EAAA;AACtC,QAAA,OAAO,aAAa,CAAC;AACjB,YAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;YACxB,IAAI,EAAE,IAAI,CAAC,KAAK;AACnB,SAAA,CAAC,CAAC,IAAI,CACH,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAI;AACpB,YAAA,IAAI,KAAK,GAAG,CAAC,EAAE;AACX,gBAAA,OAAO,KAAK,CAAA;aACf;YACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AAC5E,YAAA,OAAO,KAAK,CAAA;SACf,CAAC,CACL,CAAA;KACJ;AAEQ,IAAA,cAAc,CAAC,GAAiB,EAAE,IAAO,EAAE,QAAiB,EAAA;AACjE,QAAA,OAAO,aAAa,CAAC;AACjB,YAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;YACxB,IAAI,EAAE,IAAI,CAAC,KAAK;AACnB,SAAA,CAAC,CAAC,IAAI,CACH,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAI;AACpB,YAAA,IAAI,KAAK,GAAG,CAAC,EAAE;gBACX,KAAK,GAAG,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAA;aACjF;YACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AAC5E,YAAA,OAAO,KAAK,CAAA;SACf,CAAC,CACL,CAAA;KACJ;AAEQ,IAAA,GAAG,CAAC,GAAiB,EAAA;AAC1B,QAAA,OAAO,aAAa,CAAC;AACjB,YAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;YACxB,IAAI,EAAE,IAAI,CAAC,KAAK;AACnB,SAAA,CAAC,CAAC,IAAI,CACH,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAI;AACpB,YAAA,IAAI,KAAK,GAAG,CAAC,EAAE;AACX,gBAAA,OAAO,KAAK,CAAA;aACf;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAC5B,YAAA,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;AACvB,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AACvB,YAAA,OAAO,KAAK,CAAA;SACf,CAAC,CACL,CAAA;KACJ;IAEQ,KAAK,GAAA;QACV,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;SACtB;AACD,QAAA,OAAO,EAAE,CAAC,SAAS,CAAC,CAAA;KACvB;AACJ;;AC7FK,MAAgB,QAAY,SAAQ,eAA4C,CAAA;;AAGlF,IAAA,GAAG,CAAC,KAAoB,EAAE,KAAA,GAAiB,IAAI,EAAA;QAC3C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;AAC7B,YAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACf,gBAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAI,KAAK,GAAG,SAAS,CAAI,KAAK,CAAC,GAAG,KAAK,CAAQ,CAAC,CAAA;aACvE;iBAAM;AACH,gBAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;aACvB;SACJ;KACJ;IAED,GAAG,GAAA;QACC,OAAO,IAAI,CAAC,KAAK,CAAA;KACpB;IAED,GAAG,GAAA;AACC,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;KACtB;AAMJ,CAAA;MAEqB,gBAAgB,CAAA;AAIrC,CAAA;SAEe,cAAc,CAAC,MAAgC,EAAE,GAAG,KAAwB,EAAA;AACxF,IAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;QAClB,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;KACjF;SAAM;AACH,QAAA,OAAO,KAAK,CAAC,CAAC,CAAQ,CAAA;KACzB;AACL;;ACtCM,MAAO,cAAkB,SAAQ,QAAW,CAAA;AACrC,IAAA,MAAM,CAAC,KAAQ,EAAA;AACpB,QAAA,IAAI,CAAC,GAAG,CAAC,WAAW,CAAE,IAAuB,CAAC,KAAK,EAAE,KAAK,CAAQ,EAAE,KAAK,CAAC,CAAA;KAC7E;AACJ,CAAA;AAEK,MAAO,cAAkB,SAAQ,gBAAmB,CAAA;AAA1D,IAAA,WAAA,GAAA;;AACa,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,cAAc,CAAI,SAAS,CAAC,CAAA;AACzC,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,cAAc,CAAI,SAAS,CAAC,CAAA;AACzC,QAAA,IAAA,CAAA,OAAO,GAA4C,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;KACpH;AAAA;;ACTK,MAAO,cAAkB,SAAQ,QAAW,CAAA;AACrC,IAAA,MAAM,CAAC,KAAQ,EAAA;AACpB,QAAA,IAAI,CAAC,GAAG,CAAC,WAAW,CAAE,IAAuB,CAAC,KAAK,EAAE,KAAY,CAAQ,EAAE,KAAK,CAAC,CAAA;KACpF;AACJ,CAAA;AAKK,MAAO,cAAgC,SAAQ,gBAAmB,CAAA;AAAxE,IAAA,WAAA,GAAA;;AACa,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,cAAc,CAAI,SAAS,CAAC,CAAA;AACzC,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,cAAc,CAAI,SAAS,CAAC,CAAA;;AAEzC,QAAA,IAAA,CAAA,OAAO,GAA4C,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;KA+BpH;AA7BG,IAAA,EAAE,CAAC,IAAY,EAAA;AACX,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CACpB,GAAG,CAAC,CAAC,OAAY,KAAK,OAAO,IAAI,IAAI,GAAG,SAAS,GAAG,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CACjF,CAAA;KACJ;AAED,IAAA,WAAW,CAAC,IAAY,EAAA;AACpB,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAG;AAClC,YAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACf,gBAAA,OAAO,SAAS,CAAA;aACnB;AAAM,iBAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAClC,gBAAA,OAAO,KAAK,CAAA;aACf;iBAAM;gBACH,OAAO,KAAK,CAAC,GAAG,CAAA;aACnB;SACJ,CAAC,CAAC,CAAA;KACN;AAED,IAAA,KAAK,CAAC,IAAY,EAAA;QACd,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAA;KAC1D;AAED,IAAA,KAAK,CAAC,IAAY,EAAA;AACd,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAsB,KAAA,yBAAC,CAAC,CAAA;KACxE;AAED,IAAA,MAAM,CAAC,IAAY,EAAA;AACf,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAuB,MAAA,0BAAC,CAAC,CAAA;KACzE;AACJ;;AC7CK,MAAO,cAAkB,SAAQ,QAAW,CAAA;AACrC,IAAA,MAAM,CAAC,KAAQ,EAAA;AACpB,QAAA,IAAI,CAAC,GAAG,CAAC,WAAW,CAAE,IAAuB,CAAC,KAAK,EAAE,KAAK,CAAQ,EAAE,KAAK,CAAC,CAAA;KAC7E;AACJ,CAAA;AAEK,MAAO,cAAkB,SAAQ,gBAAmB,CAAA;AAA1D,IAAA,WAAA,GAAA;;AACa,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,cAAc,CAAI,SAAS,CAAC,CAAA;AACzC,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,cAAc,CAAI,SAAS,CAAC,CAAA;AACzC,QAAA,IAAA,CAAA,OAAO,GAA4C,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;KACpH;AAAA;;ACVK,MAAO,eAAmB,SAAQ,QAAW,CAAA;AACtC,IAAA,MAAM,CAAC,KAAQ,EAAA;AACpB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,CAAE,IAAuB,CAAC,KAAK,EAAE,KAAK,CAAQ,EAAE,KAAK,CAAC,CAAA;KAC9E;AACJ,CAAA;AAEK,MAAO,eAAmB,SAAQ,gBAAmB,CAAA;AAA3D,IAAA,WAAA,GAAA;;AACa,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,eAAe,CAAI,SAAS,CAAC,CAAA;AAC1C,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,eAAe,CAAI,SAAS,CAAC,CAAA;AAC1C,QAAA,IAAA,CAAA,OAAO,GAA4C,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;KACrH;AAAA;;ACeD,MAAM,aAAa,GAAG,EAAE,CAAA;AAIlB,MAAO,UAA4B,SAAQC,YAA4B,CAAA;AAShE,IAAA,UAAU,CAKI;AAEd,IAAA,MAAM,CAA8B;AAQpC,IAAA,OAAO,CAAsB;IAyCtC,WACoB,CAAA,QAAyB,EACzC,KAA0B,EAAA;AAE1B,QAAA,KAAK,EAAE,CAAA;QAHS,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAiB;AAjEpC,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAA;AAC3C,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,eAAe,CAAqB,SAAS,CAAC,CAAA;AAE3D,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,cAAc,EAAa,CAAA;AACxC,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,cAAc,EAAa,CAAA;AACxC,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,cAAc,EAAa,CAAA;AACxC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,eAAe,EAAc,CAAA;QAE3C,IAAU,CAAA,UAAA,GAAG,aAAa,CAAC;AAChC,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;AAC3B,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;AAC3B,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;AAC3B,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;SAChC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;AAEd,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,aAAa,CAAQ,CAAC,CAAC,CAAA;QACpC,IAAM,CAAA,MAAA,GAAsB,IAAI,CAAC,MAAM,CAAC,IAAI,CACjD,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EACnD,oBAAoB,CAAC,OAAO,CAAC,EAC7B,GAAG,CAAC,KAAK,IAAI,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAC1C,WAAW,CAAC,CAAC,CAAC,CACjB,CAAA;AAEQ,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,OAAO,EAAQ,CAAA;QAC7B,IAAM,CAAA,MAAA,GAAwB,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAC5E,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAC9B,SAAS,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EACnC,WAAW,CAAC,CAAC,CAAC,CACjB,CAAA;AAEQ,QAAA,IAAA,CAAA,MAAM,GAA2B,aAAa,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CACvG,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAI;AACpB,YAAA,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,CAAA;AAC7B,SAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACjB,CAAA;QAEQ,IAAM,CAAA,MAAA,GAAqC,aAAa,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAC9G,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAC9B,YAAY,CAAC,aAAa,CAAC,EAC3B,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,KAAI;AACpB,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CACxC,SAAS,CAAC,QAAQ,IAAG;gBACjB,IAAI,QAAQ,EAAE;oBACV,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;iBAC1C;qBAAM;AACH,oBAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CACtC,SAAS,CAAC,MAAM,IAAG;AACf,wBAAA,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,EAAE;4BACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;yBACjC;AACD,wBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;AAC5D,qBAAC,CAAC,EACF,IAAI,CAAC,CAAC,CAAC,CACV,CAAA;iBACJ;aACJ,CAAC,CACL,CAAA;SACJ,CAAC,EACF,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EACpC,WAAW,CAAC,CAAC,CAAC,CACjB,CAAA;AAwED,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,GAAG,EAAmC,CAAA;AAhEhD,QAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACf,YAAA,KAAK,GAAG,IAAI,WAAW,EAAE,CAAA;SAC5B;AACD,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;KACrB;AAED,IAAA,QAAQ,CAAC,KAAY,EAAA;AACjB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AACvB,QAAA,OAAO,IAAI,CAAA;KACd;IAED,GAAG,GAAA;AACC,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAC,CAAC,CAAA;KAClD;IAED,MAAM,GAAA;AACF,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;KACtB;AAED,IAAA,OAAO,CAAC,GAAa,EAAA;AACjB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;AACjD,QAAA,OAAO,IAAI,CAAC,WAAW,CACnB,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAC7B,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAChD,CAAA;KACJ;AAED,IAAA,eAAe,CAAC,GAAa,EAAA;AACzB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;QACjD,OAAO,IAAI,CAAC,WAAW,CACnB,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,EACzE,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CACpD,CAAA;KACJ;IAED,UAAU,CAAC,GAAa,EAAE,cAAuB,EAAA;AAC7C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;AACjD,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CACnB,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EACxD,SAAS,CAAC,IAAI,IACV,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CACxG,EACD,IAAI,CAAC,CAAC,CAAC,CACV,CAAA;KACJ;IAED,WAAW,CACP,OAA2C,EAC3C,MAA0C,EAAA;QAE1C,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CACnB,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,MAAM,IAAI,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAC9G,CAAA;KACJ;AAED,IAAA,QAAQ,CAAC,IAAa,EAAA;AAClB,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;YACvB,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,EAAE;AAC3B,gBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;aACxB;SACJ;KACJ;AAED,IAAA,OAAO,CAA6C;AAE3C,IAAA,OAAO,CAAC,gBAAkC,EAAA;AAC/C,QAAA,MAAM,KAAK,GAAG,IAAI,OAAO,EAAQ,CAAA;QAEjC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,CAAA;QAC1C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAA;AAEzC,QAAA,OAAO,IAAI,UAAU,CAAC,CAAC,UAAkD,KAAI;AACzE,YAAA,MAAM,IAAI,GAAG,gBAAgB,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YAC/D,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;AAE9C,YAAA,OAAO,MAAK;gBACR,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,KAAK,KAAK,EAAE;AAC9C,oBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;iBACxC;gBACD,IAAI,CAAC,WAAW,EAAE,CAAA;gBAClB,IAAI,CAAC,WAAW,EAAE,CAAA;AACtB,aAAC,CAAA;SACJ,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;KAC5B;AAEQ,IAAA,UAAU,CAAC,gBAAkC,EAAA;QAClD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,CAAA;AAC1C,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;KACxC;AACJ;;ACxKD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BG;AAMG,MAAO,eACT,SAAQA,YAA4B,CAAA;IAGpC,IACI,KAAK,CAAC,KAAyB,EAAA;AAC/B,QAAA,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,CAAA;AAC7B,QAAA,IAAI,CAAC,SAAS,GAAG,gBAAgB,CAAI,KAAK,CAAC;AACtC,aAAA,IAAI,CACD,GAAG,CAAC,CAAC,IAAG;AACJ,YAAA,IAAI,CAAC,IAAI,IAAI,EAAE;AACX,gBAAA,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;aACxC;AACL,SAAC,CAAC,CACL;AACA,aAAA,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;KAC9B;AAED,IAAA,IAAI,KAAK,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,SAAS,EAAG,CAAA;KAC3B;AAED,IAAA,SAAS,CAAe;AACf,IAAA,MAAM,CAAsC;AAE5C,IAAA,SAAS,CAAwB;IAa1C,IACI,MAAM,CAAC,KAAgB,EAAA;AACvB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;KAC3B;AACQ,IAAA,OAAO,CAAkC;IAElD,IACI,MAAM,CAAC,KAAgB,EAAA;AACvB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;KAC3B;AACQ,IAAA,OAAO,CAAkC;IAElD,IACI,OAAO,CAAC,KAAiB,EAAA;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;KAC5B;AACQ,IAAA,QAAQ,CAAmC;IAEpD,IACI,MAAM,CAAC,KAAgB,EAAA;AACvB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;KAC3B;AACQ,IAAA,OAAO,CAAkC;AAEzC,IAAA,KAAK,CAAqB;AAEnC,IAAA,WAAA,CAAwB,IAAgB,EAAA;AACpC,QAAA,KAAK,EAAE,CAAA;AA1CF,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,aAAa,CAAgB,CAAC,CAAC,CAAA;QAC5C,IAAM,CAAA,MAAA,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAA;AAC/C,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAEjC,IAAM,CAAA,MAAA,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAC9B,SAAS,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,EAChC,KAAK,EAAE,CACV,CAAA;QAEQ,IAAK,CAAA,KAAA,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAC7B,SAAS,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,EAC/B,KAAK,EAAE,CACV,CAAA;AACQ,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAA;AAM1E,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,aAAa,CAAY,CAAC,CAAC,CAAA;AAMzC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,aAAa,CAAY,CAAC,CAAC,CAAA;AAMzC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,aAAa,CAAa,CAAC,CAAC,CAAA;AAM3C,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,aAAa,CAAY,CAAC,CAAC,CAAA;AAEzC,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,YAAY,EAAE,CAAA;AAkCnC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,GAAG,EAAmC,CAAA;AA7BhD,QAAA,IAAI,IAAI,IAAI,IAAI,EAAE;AACd,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC,CAAA;SACvD;AAED,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CACV,aAAa,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAI;YACpF,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;SAChC,CAAC,CACL,CAAA;AAED,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CACV,aAAa,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAI;YACpF,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;SAChC,CAAC,CACL,CAAA;AAED,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CACV,aAAa,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAI;YACvF,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;SAClC,CAAC,CACL,CAAA;AAED,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CACV,aAAa,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAI;YACpF,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;SAChC,CAAC,CACL,CAAA;KACJ;AAED,IAAA,OAAO,CAA6C;AAE3C,IAAA,OAAO,CAAC,gBAAkC,EAAA;AAC/C,QAAA,MAAM,KAAK,GAAG,IAAI,OAAO,EAAQ,CAAA;QAEjC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,CAAA;QAC1C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAA;AAEzC,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CACnB,SAAS,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,EACnD,SAAS,CAAC,KAAK,CAAC,EAChB,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CACxD,CAAA;KACJ;AAEQ,IAAA,UAAU,CAAC,gBAAkC,EAAA;QAClD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,CAAA;AAC1C,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;KACxC;IAED,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,CAAA;AAC7B,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;AAC1B,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAA;KAC3B;8GAxHQ,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,CAAA,cAAA,EAAA,OAAA,CAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAL3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,QAAQ,EAAE,cAAc;AAC3B,iBAAA,CAAA;;0BAiEgB,QAAQ;yCA3DjB,KAAK,EAAA,CAAA;sBADR,KAAK;AAAC,gBAAA,IAAA,EAAA,CAAA,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,CAAA;gBAmC5C,MAAM,EAAA,CAAA;sBADT,KAAK;gBAOF,MAAM,EAAA,CAAA;sBADT,KAAK;gBAOF,OAAO,EAAA,CAAA;sBADV,KAAK;gBAOF,MAAM,EAAA,CAAA;sBADT,KAAK;;AAmEV,SAAS,gBAAgB,CAAkB,KAAyB,EAAA;AAChE,IAAA,IAAI,KAAK,YAAY,eAAe,EAAE;QAClC,OAAO,KAAK,CAAC,MAAM,CAAA;KACtB;AAAM,SAAA,IAAI,KAAK,YAAY,UAAU,EAAE;AACpC,QAAA,OAAO,EAAE,CAAC,KAAK,CAAC,CAAA;KACnB;AAAM,SAAA,IAAI,KAAK,YAAY,YAAY,EAAE;AACtC,QAAA,OAAO,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAA;KAClC;SAAM;QACH,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAA;KACjE;AACL;;MC5LsB,YAAY,CAAA;AA0B9B;;AAEG;AACH,IAAA,UAAU,CAAC,KAAY,EAAA;AACnB,QAAA,OAAO,EAAE,CAAC,KAAK,CAAC,CAAA;KACnB;AAED;;AAEG;AACH,IAAA,YAAY,CAAC,KAA0B,EAAA;AACnC,QAAA,OAAO,IAAI,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;KACrC;AACJ;;ACzCK,MAAgB,aAA+B,SAAQ,YAAe,CAAA;AAKxE,IAAA,SAAS,CAAmB;AAE5B,IAAA,WAAA,CAAY,IAAuB,EAAA;AAC/B,QAAA,KAAK,EAAE,CAAA;QAPO,IAAO,CAAA,OAAA,GAAG,KAAK,CAAA;QAQ7B,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;KACrC;AAED,IAAA,QAAQ,CAAC,OAAiB,EAAA;AACtB,QAAA,QAAQ,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAC;KACnE;AAEQ,IAAA,SAAS,CAAC,OAAiB,EAAA;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;AACnC,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;KACrD;IAEQ,SAAS,CAAC,GAAiB,EAAE,OAAiB,EAAA;AACnD,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAA;KACpF;IAEQ,aAAa,CAAC,GAAiB,EAAE,OAAiB,EAAA;AACvD,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAA;KACzF;AAEQ,IAAA,UAAU,CAAC,KAAY,EAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,EAAE,EAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,MAAM,EAAC,CAAC,CAAC,CAAC,CAAA;KACnG;AACJ;;AChCK,MAAO,aAA+B,SAAQ,aAAgB,CAAA;IAGhE,WAAY,CAAA,IAAuB,EAAE,KAAmB,EAAA;QACpD,KAAK,CAAC,IAAI,CAAC,CAAA;AACX,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,CAAA;KAC1B;AACJ;;ACRK,MAAO,kBAAoC,SAAQ,aAAgB,CAAA;IAGrE,WAAY,CAAA,IAAuB,EAAE,GAA6B,EAAA;QAC9D,KAAK,CAAC,IAAI,CAAC,CAAA;AACX,QAAA,IAAI,CAAC,MAAM,GAAG,GAAG,CAAA;KACpB;AACJ;;ACZD;;AAEG;;;;"}
1
+ {"version":3,"file":"ngutil-data.mjs","sources":["../../../../packages/data/src/query/path.ts","../../../../packages/data/src/query/filter.ts","../../../../packages/data/src/query/grouper.ts","../../../../packages/data/src/query/sorter.ts","../../../../packages/data/src/query/slimer.ts","../../../../packages/data/src/query/slice.ts","../../../../packages/data/src/query/executor.ts","../../../../packages/data/src/model/meta.ts","../../../../packages/data/src/store/collection-store.ts","../../../../packages/data/src/store/memory-store.ts","../../../../packages/data/src/source/properties/abstract.ts","../../../../packages/data/src/source/properties/filter.ts","../../../../packages/data/src/source/properties/sorter.ts","../../../../packages/data/src/source/properties/slimer.ts","../../../../packages/data/src/source/properties/grouper.ts","../../../../packages/data/src/source/source.ts","../../../../packages/data/src/source/proxy.directive.ts","../../../../packages/data/src/provider/provider.ts","../../../../packages/data/src/provider/local.ts","../../../../packages/data/src/provider/array.ts","../../../../packages/data/src/provider/observable.ts","../../../../packages/data/src/ngutil-data.ts"],"sourcesContent":["import { flattenDepth } from \"lodash\"\n\ntype GetterFn = (srcs: any[]) => any[]\nexport type PathGetter<T = any, R = any> = (obj: T) => R[]\n\nexport function pathGetterCompile(path: string): PathGetter {\n if (!path || path.length === 0) {\n throw new Error(\"Empty path\")\n }\n\n return path.split(\".\").reduce<GetterFn>(\n (parent, part) => makeGetter(part, parent),\n (obj: any) => (obj == null ? [] : [obj])\n )\n}\n\nconst IsNumber = /^\\d+$/\n\nfunction makeGetter(part: string, parent: GetterFn): GetterFn {\n if (part === \"*\") {\n return obj => flattenDepth(parent(obj), 1)\n } else {\n const key = IsNumber.test(part) ? Number(part) : part\n return obj => parent(obj).map(v => (v != null ? v[key] : undefined))\n }\n}\n","import { flattenDeep, intersection } from \"lodash\"\n\nimport { AsPrimitive, deepClone, isPlainObject, MaxRecursion } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\nimport { PathGetter, pathGetterCompile } from \"./path\"\n\nexport const enum FilterOp {\n Eq = \"==\",\n EqStrict = \"===\",\n EqInsesitive = \"==*\",\n Neq = \"!=\",\n NeqStrict = \"!==\",\n NeqInsesitive = \"!=*\",\n Gt = \">\",\n GtInsesitive = \">*\",\n Gte = \">=\",\n GteInsesitive = \">=*\",\n Lt = \"<\",\n LtInsesitive = \"<*\",\n Lte = \"<=\",\n LteInsesitive = \"<=*\",\n Contains = \"%\",\n ContainsInsesitive = \"%*\",\n StartsWith = \"^\",\n StartsWithInsesitive = \"^*\",\n EndsWith = \"$\",\n EndsWithInsesitive = \"$*\",\n Regexp = \"~\",\n RegexpInsesitive = \"~*\",\n Or = \"|\",\n And = \"&\"\n}\n\nexport const OPERATORS: Array<string> = [\n FilterOp.Eq,\n FilterOp.EqStrict,\n FilterOp.EqInsesitive,\n FilterOp.Neq,\n FilterOp.NeqStrict,\n FilterOp.NeqInsesitive,\n FilterOp.Gt,\n FilterOp.GtInsesitive,\n FilterOp.Gte,\n FilterOp.GteInsesitive,\n FilterOp.Lt,\n FilterOp.LtInsesitive,\n FilterOp.Lte,\n FilterOp.LteInsesitive,\n FilterOp.Contains,\n FilterOp.ContainsInsesitive,\n FilterOp.StartsWith,\n FilterOp.StartsWithInsesitive,\n FilterOp.EndsWith,\n FilterOp.EndsWithInsesitive,\n FilterOp.Regexp,\n FilterOp.RegexpInsesitive,\n FilterOp.Or,\n FilterOp.And\n]\n\nexport function asOperators(value: any): Array<{ op: FilterOp; value: any }> {\n const ops = intersection(Object.keys(value), OPERATORS) as FilterOp[]\n if (ops.length > 0) {\n return ops.map(op => {\n return { op, value: value[op] }\n })\n } else {\n return [{ op: FilterOp.Eq, value }]\n }\n}\n\n// export type Filter<T extends Model> = _Filter<Flatten<T>, [], MaxRecursion>\n// TODO: fix recursion\nexport type Filter<T extends Model> = { [key: string]: any }\n\ntype _Filter<F, P extends number[], D extends number> = P[\"length\"] extends D ? never : _ObjectFilter<F, P, D>\n\ntype _ObjectFilter<F, P extends number[], D extends number> = P[\"length\"] extends D\n ? never\n : { [K in keyof F]?: Operators<F[K], P, D> }\n\ntype RootOr<F, P extends number[], D extends number> = P[\"length\"] extends D\n ? never\n : { [FilterOp.Or]: Array<_Filter<F, [...P, 0], D>> | undefined }\n\ntype RootAnd<F, P extends number[], D extends number> = P[\"length\"] extends D\n ? never\n : { [FilterOp.And]: Array<_Filter<F, [...P, 0], D>> | undefined }\n\nexport type Operators<T, P extends number[], D extends number = MaxRecursion> = P[\"length\"] extends D\n ? never\n : SimpleOperators<T>\n\ntype LocalOr<T, P extends number[], D extends number> = P[\"length\"] extends D\n ? never\n : { [FilterOp.Or]: Array<Operators<T, [...P, 0], D>> | undefined }\n\ntype LocalAnd<T, P extends number[], D extends number> = P[\"length\"] extends D\n ? never\n : { [FilterOp.And]: Array<Operators<T, [...P, 0], D>> | undefined }\n\ntype SimpleOperators<T> =\n | EqStrict<T>\n | NeqStrict<T>\n | Eq<T>\n | Neq<T>\n | Gt<T>\n | Gte<T>\n | Lt<T>\n | Lte<T>\n | Contains<T>\n | StartsWith<T>\n | EndsWith<T>\n | Regexp<T>\n | T\n | undefined\n | null\n\ntype EqStrict<T> = Operator<T, T, FilterOp.EqStrict, never, null>\ntype NeqStrict<T> = Operator<T, T, FilterOp.NeqStrict, never, null>\ntype Eq<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Eq, FilterOp.EqInsesitive, null>\ntype Neq<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Neq, FilterOp.NeqInsesitive, null>\ntype Gt<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Gt, FilterOp.GtInsesitive>\ntype Gte<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Gte, FilterOp.GteInsesitive>\ntype Lt<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Lt, FilterOp.LtInsesitive>\ntype Lte<T> = Operator<T, T | AsPrimitive<T>, FilterOp.Lte, FilterOp.LteInsesitive>\ntype Contains<T> = Operator<T, string, FilterOp.Contains, FilterOp.ContainsInsesitive>\ntype StartsWith<T> = Operator<T, string, FilterOp.StartsWith, FilterOp.StartsWithInsesitive>\ntype EndsWith<T> = Operator<T, string, FilterOp.EndsWith, FilterOp.EndsWithInsesitive>\ntype Regexp<T> = Operator<T, string, FilterOp.Regexp, FilterOp.RegexpInsesitive, RegExp>\n\ntype Operator<T, R, OP extends string, OPI extends string = never, ET = never> =\n | (T extends R ? { [k in OP]: T | ET | R } : never)\n | (T extends string ? (OPI extends never ? never : { [k in OPI]: string }) : never)\n\nexport type FilterFn<T = any> = (item: T) => boolean\n\n/**\n * @example\n * ```ts\n * items.filter(filterBy({id: 42}))\n * ```\n */\nexport function filterBy<T extends Model>(filters: Filter<T>): FilterFn<T> {\n return _filterCompile<T>(filters)\n}\n\n// TODO: Normalize filter\n// type _Filter = { path: string; op: FilterOp; value: any }\n// type _Or = { \"|\": Array<_Filter> }\n// type _And = { \"&\": Array<_Filter> }\n// export type NormalizedFilter = _Or | _And\n\n// /**\n// * @example\n// * ```ts\n// * normalizeFilter({id: 2, name: {\"=*\": \"AnyName\"}}) -> {id: {\"==\": 2}, name: {\"=*\": \"AnyName\"}}}\n// * normalizeFilter({id: {\">\": 0, \"<\": 10}}) -> {\"&\": [{id: {\">\": 0}}, {id: {\"<\": 10}}]}\n// * ```\n// */\n// export function normalizeFilter<T extends Model>(filters: Filters<T>): Filters<T> {\n// return _normalizeFilter(filters)\n// }\n\n// function _normalizeFilter(filters: any, path?: string): any {\n// const result = {} as any\n\n// for (const [path, v] of Object.entries(filters)) {\n// switch (path) {\n// case FilterOp.And:\n// if (!Array.isArray(v)) {\n// throw new Error(\"The '&' (AND) operator must have array type\")\n// }\n\n// if (!result[FilterOp.And]) {\n// result[FilterOp.And] = []\n// }\n\n// result[FilterOp.And] = result[FilterOp.And].concat(v.map(f => _normalizeFilter(f)))\n// break\n\n// case FilterOp.Or:\n// if (!Array.isArray(v)) {\n// throw new Error(\"The '|' (OR) operator must have array type\")\n// }\n\n// if (!result[FilterOp.Or]) {\n// result[FilterOp.Or] = []\n// }\n\n// result[FilterOp.Or] = result[FilterOp.Or].concat(v.map(f => _normalizeFilter(f)))\n// break\n\n// default:\n// for (const entry of asOperators(v)) {\n// switch (entry.op) {\n// case FilterOp.And:\n// if (!result[FilterOp.And]) {\n// result[FilterOp.And] = []\n// }\n\n// result[FilterOp.And] = result[FilterOp.And].concat(\n// entry.value.map((v: any) => _normalizeFilter(v, path))\n// )\n// break\n\n// case FilterOp.Or:\n// if (!result[FilterOp.Or]) {\n// result[FilterOp.Or] = []\n// }\n\n// result[FilterOp.Or] = result[FilterOp.Or].concat(\n// entry.value.map((v: any) => _normalizeFilter(v, path))\n// )\n// break\n\n// default:\n// if (!result[FilterOp.And]) {\n// result[FilterOp.And] = []\n// }\n\n// result[FilterOp.And].push({ path, ...entry })\n// }\n// }\n// }\n// }\n\n// return result\n// }\n\nfunction _filterCompile<T extends Model>(filters: Filter<T>): FilterFn<T> {\n let getter: PathGetter\n const result: FilterFn<T>[] = []\n for (const [pth, value] of Object.entries(filters)) {\n switch (pth) {\n case FilterOp.And:\n if (!Array.isArray(value)) {\n throw new Error(\"Root '&' (AND) operator must have array type\")\n }\n result.splice(result.length, 0, ...value.map(_filterCompile<T>))\n break\n\n case FilterOp.Or:\n if (!Array.isArray(value)) {\n throw new Error(\"Root '|' (OR) operator must have array type\")\n }\n result.push(or_(value.map(_filterCompile<T>)))\n break\n\n default:\n getter = pathGetterCompile(pth)\n if (isPlainObject(value)) {\n result.push(and_(Object.entries(value).map(([op, opv]) => filterCompileOp(getter, op as any, opv))))\n } else {\n result.push(filterCompileOp(getter, FilterOp.Eq, value))\n }\n\n break\n }\n }\n return and_(result)\n}\n\nfunction filterCompileOp(getter: PathGetter, op: FilterOp, value: any): FilterFn {\n let lower: string\n let regex: RegExp\n switch (op) {\n case FilterOp.Eq:\n // eslint-disable-next-line eqeqeq\n return matcher(getter, v => v == value)\n\n case FilterOp.EqStrict:\n return matcher(getter, v => v === value)\n\n case FilterOp.EqInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() === lower)\n\n case FilterOp.Neq:\n // eslint-disable-next-line eqeqeq\n return matcher(getter, v => v != value)\n\n case FilterOp.NeqStrict:\n return matcher(getter, v => v !== value)\n\n case FilterOp.NeqInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() !== lower)\n\n case FilterOp.Gt:\n return matcher(getter, v => v > value)\n\n case FilterOp.GtInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() > lower)\n\n case FilterOp.Gte:\n return matcher(getter, v => v >= value)\n\n case FilterOp.GteInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() >= lower)\n\n case FilterOp.Lt:\n return matcher(getter, v => v < value)\n\n case FilterOp.LtInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() < lower)\n\n case FilterOp.Lte:\n return matcher(getter, v => v <= value)\n\n case FilterOp.LteInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase() <= lower)\n\n case FilterOp.Contains:\n lower = String(value)\n return matcher(getter, v => (Array.isArray(v) ? v.includes(value) : String(v).includes(lower)))\n\n case FilterOp.ContainsInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase().includes(lower))\n\n case FilterOp.StartsWith:\n lower = String(value)\n return matcher(getter, v => String(v).startsWith(lower))\n\n case FilterOp.StartsWithInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase().startsWith(lower))\n\n case FilterOp.EndsWith:\n lower = String(value)\n return matcher(getter, v => String(v).endsWith(lower))\n\n case FilterOp.EndsWithInsesitive:\n lower = String(value).toLocaleLowerCase()\n return matcher(getter, v => String(v).toLocaleLowerCase().endsWith(lower))\n\n case FilterOp.Regexp:\n regex = value instanceof RegExp ? value : new RegExp(value, \"msv\")\n return matcher(getter, v => regex.test(v))\n\n case FilterOp.RegexpInsesitive:\n regex = value instanceof RegExp ? value : new RegExp(value, \"msvi\")\n return matcher(getter, v => regex.test(v))\n\n case FilterOp.And:\n if (!Array.isArray(value)) {\n throw new Error(\"Root '&' (AND) operator must have array type\")\n }\n return and_(\n flattenDeep(\n value.map(v => {\n if (isPlainObject(v)) {\n return Object.entries(v).map(([op, opv]) => filterCompileOp(getter, op as any, opv))\n } else {\n return filterCompileOp(getter, FilterOp.Eq, v)\n }\n })\n )\n )\n\n case FilterOp.Or:\n if (!Array.isArray(value)) {\n throw new Error(\"Root '|' (OR) operator must have array type\")\n }\n return or_(\n flattenDeep(\n value.map(v => {\n if (isPlainObject(v)) {\n return Object.entries(v).map(([op, opv]) => filterCompileOp(getter, op as any, opv))\n } else {\n return filterCompileOp(getter, FilterOp.Eq, v)\n }\n })\n )\n )\n }\n\n throw new Error(`Unexpected operator: ${op}`)\n}\n\nfunction matcher(getter: PathGetter, predict: (value: any) => boolean): FilterFn {\n return obj => getter(obj).some(predict)\n}\n\nfunction and_(fns: FilterFn[]): FilterFn {\n if (fns.length === 0) {\n return _ => true\n }\n\n return item => {\n for (const fn of fns) {\n if (!fn(item)) {\n return false\n }\n }\n return true\n }\n}\n\nfunction or_(fns: FilterFn[]): FilterFn {\n if (fns.length === 0) {\n return _ => true\n }\n\n return item => {\n for (const fn of fns) {\n if (fn(item)) {\n return true\n }\n }\n return false\n }\n}\n\nexport function filterMerge(...filters: any[]): any | undefined {\n let result: { [key: string]: any } | undefined = undefined\n\n for (const filter of filters) {\n if (filter == null) {\n continue\n }\n if (result == null) {\n result = deepClone(filter)\n } else {\n for (const [k, v] of Object.entries(filter)) {\n if (v === undefined) {\n delete result[k]\n continue\n }\n\n result[k] = deepClone(v)\n }\n }\n }\n\n return result as any\n}\n","import { Flatten, Primitive } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\n\nexport type GrouperFn<T = any> = (item: any) => Primitive\n\nexport type Grouper<T extends Model, F = Flatten<T>> = any\n\nexport function groupBy<T extends Model, F = Flatten<T>>(grouper: Grouper<T, F>): GrouperFn<T> {\n return grouperCompile<T, F>(grouper)\n}\n\nfunction grouperCompile<T extends Model, F = Flatten<T>>(grouper: Grouper<T, F>): GrouperFn<T> {\n return _ => undefined\n}\n\nexport function grouperMerge<T extends Model, F = Flatten<T>>(\n ...groupers: Array<Grouper<T, F> | undefined | null>\n): Grouper<T, F> | undefined {\n return undefined\n}\n\n// import { Primitive } from \"utility-types\"\n\n// import { Eval, Flatten } from \"@ngutil/common\"\n\n// import { type Model } from \"./query\"\n// import { SorterFn } from \"./sorter\"\n\n// export interface Grouped<T extends Model> {\n// items: T[]\n// groups: Group<T>\n// }\n\n// export type GrouperFn<T extends Model> = (items: T[]) => any\n\n// export type GroupKey<T extends Model> = (item: T, index: number) => Primitive[]\n\n// export type GroupItemIsMatch<T extends Model> = (item: T, index: number) => boolean\n\n// export interface GrouperX<T extends Model> {\n// name: string\n// title?: string\n// isMatch?: GroupKey<T>\n// [key: string]: any\n// }\n\n// export interface GrouperXNormalized<T extends Model> extends GrouperX<T> {\n// key: GroupKey<T>\n// }\n\n// type _Groupers<T extends Model, F> = keyof F | Grouper<T>\n// export type Grouper<T extends Model, F = Flatten<T>> = Eval<Array<_Groupers<T, F>>>\n\n// export type GrouperNormalized<T extends Model> = { [key: string]: GrouperXNormalized<T> }\n\n// export interface Group<T extends Model, G extends Grouper<T> = Grouper<T>> {\n// grouper: G\n// begin: number\n// end: number\n// }\n\n// /**\n// * @example\n// * ```ts\n// * const grouped = groupBy([\"status\"])(items)\n// * // expexted: {[status]: [...items]}\n// *\n// * const grouped = groupBy([\"name\", \"age\"])(items)\n// * // expected {[status]: {[age]: [...items]}}\n// *\n// * const STATUS_LABELS = {active: \"Active\", inactive: \"Inactive\"}\n// * const grouped = groupBy([(item) => (STATUS_LABELS[item.status] || \"Undefined\")])(items)\n// * // expected {[\"Active\" | \"Inactive\" | \"Undefined\"]: [...items]}\n// *\n// * const grouped = groupBy([(item) => (STATUS_LABELS[item.status] || \"Undefined\"), \"age\"])(items)\n// * // expected {[\"Active\" | \"Inactive\" | \"Undefined\"]: {[age]: [...items]}}\n// * ```\n// */\n// export function groupBy<T extends Model>(groupers: Grouper<T>): SorterFn<T> {\n// return (_a, _b) => 0\n// }\n\n// export function grouperNormalize() {}\n\n// export function grouperCompile<T extends Model>(groupers: Grouper<T>): GrouperFn<T> {\n// return _ => undefined\n// }\n\n// export function grouperMerge<T extends Model, F = Flatten<T>>(\n// ...groupers: Array<Grouper<T, F> | undefined | null>\n// ): Grouper<T, F> | undefined {\n// return undefined\n// }\n","import { flattenDeep, isEqual } from \"lodash\"\n\nimport { deepClone, isPlainObject } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\nimport { pathGetterCompile } from \"./path\"\n\nexport type SorterFn<T = any> = (a: T, b: T) => number\n\nexport const enum SortDirection {\n Asc = \"asc\",\n Desc = \"desc\"\n}\n\nexport type SortDir = SortDirection.Asc | SortDirection.Desc | \"asc\" | \"desc\"\nexport type SortDirExtra = { dir: SortDir; emptyFirst: boolean }\n\ntype _Sorter<F> = { [K in keyof F]: { [key in K]: SortDir | SortDirExtra } }[keyof F]\n// TODO: fix recursion\n// export type Sorter<T extends Model> = Array<_Sorter<Flatten<T>>>\nexport type Sorter<T extends Model> = Array<{ [key: string]: SortDir | SortDirExtra | undefined }>\n\ntype NormalizedEntry = { path: string; isAsc: boolean; emptyFirst: boolean }\nexport type SorterNormalized = Array<NormalizedEntry>\n\n/**\n * @example\n *```ts\n * items.toSorted(sortBy([{\"author.name\": \"asc\"}]))\n * ```\n */\nexport function sortBy<T extends Model>(sorters: Sorter<T>): SorterFn<T> {\n if (sorters.length === 0) {\n throw new Error(\"Empty sorter\")\n }\n return _sorterCompile<T>(sorters) as any\n}\n\n/**\n * Normalize sorter definition\n *\n * @example\n * ```ts\n * normalizeSorter([{id: \"asc\"}]) -> [{path: \"id\", isAsc: true, emptyFirst: true}]\n * normalizeSorter([{id: {dir: \"desc\", emptyFirst: false}}]) -> [{path: \"id\", isAsc: false, emptyFirst: false}]\n * ```\n */\nexport function sorterNormalize<T extends Model>(sorters: Sorter<T>): SorterNormalized {\n return flattenDeep(\n (sorters as any).map((s: any) =>\n Object.entries(s).map(([k, v]) => {\n if (typeof v === \"string\") {\n const isAsc = v.toLowerCase() === \"asc\"\n return { path: k, isAsc, emptyFirst: isAsc ? false : true }\n } else if (isPlainObject(v)) {\n return {\n path: k,\n isAsc: ((v as SortDirExtra).dir || \"asc\").toLowerCase() === \"asc\",\n emptyFirst: (v as SortDirExtra).emptyFirst == null ? true : !!(v as SortDirExtra).emptyFirst\n }\n } else {\n throw new Error(`Invalid sorter: ${v}`)\n }\n })\n )\n )\n}\n\nfunction _sorterCompile<T extends Model>(sorters: Sorter<T>): SorterFn<T> {\n if (sorters.length === 0) {\n return (_a, _b) => 0\n }\n\n const norm = sorterNormalize<T>(sorters).map(createComparator)\n if (norm.length === 1) {\n return norm[0]\n }\n\n const initial = norm.pop()!\n return norm.reduceRight<SorterFn<T>>(\n (next, curr) => (a, b) => {\n const r = curr(a, b)\n return r === 0 ? next(a, b) : r\n },\n initial\n )\n}\n\nfunction createComparator({ path, isAsc, emptyFirst }: NormalizedEntry): SorterFn {\n const getter = pathGetterCompile(path)\n if (isAsc) {\n return (a, b) => compare(getter(a), getter(b), emptyFirst)\n } else {\n return (a, b) => compare(getter(a), getter(b), !emptyFirst) * -1\n }\n}\n\nexport function compare(a: any, b: any, emptyFirst: boolean): number {\n // console.log(\"COMPARE\", a, b)\n if (a == null && b != null) {\n return emptyFirst === true ? -1 : 1\n } else if (a != null && b == null) {\n return emptyFirst === true ? 1 : -1\n } else if (a == null && b == null) {\n return 0\n } else if (isEqual(a, b)) {\n return 0\n } else if (typeof a === \"number\" && typeof b === \"number\") {\n return a - b\n } else if (typeof a === \"string\" && typeof b === \"string\") {\n const al = a.length\n const bl = b.length\n // if both lengths is 0 the code execution not reach that point, because a === b\n if (emptyFirst === true) {\n if (al === 0) {\n return -1\n } else if (bl === 0) {\n return 1\n }\n } else {\n if (al === 0) {\n return 1\n } else if (bl === 0) {\n return -1\n }\n }\n return a.localeCompare(b)\n } else if (Array.isArray(a) && Array.isArray(b)) {\n const al = a.length\n const bl = b.length\n const l = Math.min(al, bl)\n\n for (let i = 0; i < l; i++) {\n const res = compare(a[i], b[i], emptyFirst)\n if (res !== 0) {\n return res\n }\n }\n\n if (al === bl) {\n return 0\n }\n\n if (emptyFirst === true) {\n if (al === 0) {\n return -1\n } else if (bl === 0) {\n return 1\n }\n } else {\n if (al === 0) {\n return 1\n } else if (bl === 0) {\n return -1\n }\n }\n\n return al - bl\n } else if (isPlainObject(a) && isPlainObject(b)) {\n return JSON.stringify(a).localeCompare(JSON.stringify(b))\n }\n\n return a > b ? -1 : 1\n}\n\nexport function sorterMerge<T extends Model>(...sorters: Array<Sorter<T> | undefined | null>): Sorter<T> | undefined {\n let result: Sorter<T> | undefined\n\n for (const sorter of sorters) {\n if (sorter == null) {\n continue\n }\n if (result == null) {\n result = deepClone(sorter)\n continue\n }\n\n for (const sentry of sorter) {\n for (const [k, v] of Object.entries(sentry)) {\n const existing = (result as any).find((value: any) => value[k] != null)\n if (existing) {\n if (v == null) {\n delete (existing as any)[k]\n if (Object.keys(existing).length === 0) {\n result.splice(result.indexOf(existing), 1)\n }\n } else {\n ;(existing as any)[k] = deepClone(v)\n }\n } else if (v != null) {\n result.push({ [k]: deepClone(v) } as any)\n }\n }\n }\n }\n\n return result\n}\n\nexport function sorterFind<T extends Model>(sorters: Sorter<T>, name: string): SortDir | SortDirExtra | undefined {\n const sorter = sorters.find(v => v[name] != null)\n if (sorter != null) {\n return sorter[name]\n }\n return undefined\n}\n","import { Model } from \"../model\"\n\n/**\n * @exmaple\n * ```ts\n * [\n * \"field_name\",\n * {\"child_name\": [\"child_field_name\"]},\n * {\"children\": [\"children_field_name\", {\"$type\": Article, slimer: [\"id\", \"title\"]}]},\n * {\"$type\": Employee, slimer: [\"name\"]}.\n * {\"$filter\": Filter<T, F>}\n * ]\n * ```\n */\nexport type Slimer<T extends Model> = any\nexport type SlimerFn<T> = (item: T) => T\n\nexport function slimBy<T extends Model>(slimer: Slimer<T>): void {}\n\nexport function slimerNormalize<T extends Model>(slimer: Slimer<T>): void {}\n\nfunction slimerCompile<T extends Model>(slimer: Slimer<T>): SlimerFn<T> {\n return item => item\n}\n\nexport function slimerMerge<T extends Model>(...slimers: Slimer<T>): void {}\n","import { ListRange } from \"@angular/cdk/collections\"\n\nimport { deepClone } from \"@ngutil/common\"\n\n// https://www.npmjs.com/package/array-view\n\n/**\n * @example\n * ```ts\n * {start: 0, end: 0} // empty range\n * {start: 0, end: 1} // range with one item.eg sliceApply([1, 2, 3], {start:0, end:1}) -> [1]\n * ```\n */\nexport interface Slice extends ListRange {\n /**\n * Start of slice, exact index of item in list\n */\n readonly start: number\n /**\n * End of slice, not include end index of item in list\n */\n readonly end: number\n readonly pageSize?: number\n}\n\nexport function sliceMerge(...slices: Slice[]) {\n let result: Slice | undefined = undefined\n\n for (const slice of slices) {\n if (slice == null) {\n continue\n }\n if (result == null) {\n result = deepClone(slice)\n } else {\n result = { ...(result as any), ...slice }\n }\n }\n\n return result\n}\n\n/**\n * Apply slice to array, and force the result length to equal with Slice length,\n * so fill array with undefined if not enought elements\n */\nexport function sliceApply(slice: Slice, array: readonly any[]): any[] {\n const result = array.slice(slice.start, slice.end)\n result.length = slice.end - slice.start\n return result\n}\n\n/**\n * @returns Page numbers, eg.: `[10, 11, 12, 13, ...]`\n */\nexport function sliceToPages(slice: Slice): number[] {\n if (slice.pageSize == null) {\n throw new Error(\"Missing `step` from slice\")\n }\n\n const start = Math.floor(slice.start / slice.pageSize)\n const end = Math.ceil(slice.end / slice.pageSize)\n return Array.from({ length: end - start }, (_, i) => start + i)\n}\n\nexport function sliceInsert(slice: Slice, array: readonly any[], newItems: readonly any[]): any[] {\n if (slice.start === slice.end) {\n return array as any\n }\n\n let result = array.slice(0, slice.start)\n result.length = slice.start\n\n result = result.concat(newItems)\n result.length = slice.end\n\n return result.concat(array.slice(slice.end))\n}\n\nexport function sliceClamp(slice: Slice, constraint: Slice): Slice {\n return {\n start: Math.max(slice.start, constraint.start),\n end: Math.min(slice.end, constraint.end),\n pageSize: slice.pageSize\n }\n}\n\nexport function sliceEq(a: Slice, b: Slice): boolean {\n return a.start === b.start && a.end === b.end && a.pageSize === b.pageSize\n}\n\n// TODO: sliceOverlap(other: Slice): Slice\n// TODO: sliceIncludes(other: Slice): boolean\n// TODO: sliceConcat(...slices: Slice[]): Slice[]\n// TODO: sliceDiff(slice: Slice): Slice[]\n","import { isEqual } from \"lodash\"\nimport { Primitive } from \"utility-types\"\n\nimport { DeepReadonly, toSorted } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\nimport { Filter, filterBy } from \"./filter\"\nimport { groupBy } from \"./grouper\"\nimport { Query, QueryResult } from \"./query\"\nimport { Slice } from \"./slice\"\nimport { sortBy, Sorter } from \"./sorter\"\n\nconst INPUT = Symbol(\"INPUT\")\n\ninterface PartialExecutor {\n [INPUT]: any\n}\n\nexport interface QueryExecutors<T extends Model> {\n readonly filterFn?: FilterExecutor<T>\n readonly sorterFn?: SorterExecutor<T>\n readonly grouperFn?: GrouperExecutor<T>\n readonly slicerFn?: SliceExecutor<T>\n}\n\nexport interface QueryExecutor<T extends Model> extends QueryExecutors<T> {\n (items: readonly T[]): QueryResult<T>\n}\n\nexport function queryExecutor<T extends Model>(query: Query<T>, previous?: QueryExecutor<T>): QueryExecutor<T> {\n const executors: QueryExecutors<T> = {\n filterFn: filterExecutor(query.filter, previous?.filterFn),\n sorterFn: sorterExecutor(query.sorter, previous?.sorterFn),\n grouperFn: grouperExecutor(query.grouper, previous?.grouperFn),\n slicerFn: sliceExecutor(query.slice, previous?.slicerFn)\n }\n\n const changed = previous == null || Object.entries(executors).some(([k, v]) => (previous as any)[k] !== v)\n if (!changed) {\n return previous\n }\n\n const executor = (items: readonly T[]): QueryResult<T> => {\n if (items == null || items.length === 0) {\n return { items: [], total: 0 }\n }\n\n let result: readonly T[] = items\n\n if (executors.filterFn) {\n result = result.filter(executors.filterFn)\n }\n\n if (executors.sorterFn) {\n result = toSorted(result, executors.sorterFn)\n }\n\n const total = result.length\n\n // TODO: grouper\n\n if (executors.slicerFn) {\n result = executors.slicerFn(result)\n }\n\n return { items: result, total }\n }\n\n for (const [k, v] of Object.entries(executors)) {\n Object.defineProperty(executor, k, {\n value: v,\n enumerable: true,\n writable: false\n })\n }\n\n return executor\n}\n\ninterface FilterExecutor<T extends Model> extends PartialExecutor {\n (item: T): boolean\n}\n\nfunction filterExecutor<T extends Model>(\n filter?: DeepReadonly<Filter<T>>,\n prev?: FilterExecutor<T>\n): FilterExecutor<T> | undefined {\n return compileExec<T>(filter, prev, filterBy)\n}\n\ninterface SorterExecutor<T extends Model> extends PartialExecutor {\n (a: T, b: T): number\n}\n\nfunction sorterExecutor<T extends Model>(\n sorter?: DeepReadonly<Sorter<T>>,\n prev?: SorterExecutor<T>\n): SorterExecutor<T> | undefined {\n return compileExec<T>(sorter, prev, sortBy)\n}\n\ninterface GrouperExecutor<T extends Model> extends PartialExecutor {\n (item: T): Primitive\n}\n\nfunction grouperExecutor<T extends Model>(\n sorter?: DeepReadonly<Sorter<T>>,\n prev?: GrouperExecutor<T>\n): GrouperExecutor<T> | undefined {\n return compileExec<T>(sorter, prev, groupBy)\n}\n\ninterface SliceExecutor<T extends Model> extends PartialExecutor {\n (items: readonly T[]): T[]\n}\n\nfunction sliceExecutor<T extends Model>(\n slice?: DeepReadonly<Slice>,\n prev?: SliceExecutor<T>\n): SliceExecutor<T> | undefined {\n return compileExec<T>(slice, prev, sliceBy)\n}\n\nfunction sliceBy<T extends Model>(slice: Slice) {\n return (items: T[]) => items.slice(slice.start, slice.end)\n}\n\nfunction compileExec<T extends Model>(input: any, prev: any, compiler: any): any {\n if (input == null) {\n return undefined\n }\n\n if (prev != null) {\n // thorically input is readonly\n if (prev[INPUT] === input || isEqual(prev[INPUT], input)) {\n return prev\n }\n }\n\n const exec = compiler(input) as any\n Object.defineProperty(exec, INPUT, {\n value: input,\n enumerable: true,\n writable: false\n })\n return exec\n}\n","import { TrackByFunction } from \"@angular/core\"\n\nimport { isEqual } from \"lodash\"\nimport { Primitive } from \"utility-types\"\n\nimport { filterBy, pathGetterCompile } from \"../query\"\n\nexport type Model = { [key: string]: any }\n\nexport type ModelRef = { key?: Primitive | Array<Primitive>; index?: number }\nexport type ModelRefFilter<T> = (item: T, index: number) => boolean\n\nexport interface ModelMetaProps<T extends Model> {\n readonly keys: readonly string[]\n readonly trackBy?: TrackByFunction<T>\n}\n\nexport type ModelMetaInput<T extends Model> = ModelMeta<T> | ModelMetaProps<T>\n\nexport type TrackedModel<T extends Model> = { index: number; model: T }\n\nexport class ModelMeta<T extends Model> implements ModelMetaProps<T> {\n static coerce<M extends Model>(value: ModelMetaInput<M>): ModelMeta<M> {\n if (value instanceof ModelMeta) {\n return value\n } else {\n return new ModelMeta(value)\n }\n }\n\n readonly keys: readonly string[]\n readonly trackBy: TrackByFunction<T>\n readonly #getKey?: (model: T) => string\n\n constructor(props: ModelMetaProps<T>) {\n this.keys = props.keys\n\n if (this.keys.length > 0) {\n const getters = this.keys.map(pathGetterCompile)\n if (props.trackBy == null) {\n this.trackBy = (index: number, item: T) => getters.map(p => p(item)).join(\"∀\")\n } else {\n this.trackBy = props.trackBy\n }\n this.#getKey = (item: T) => getters.map(p => p(item)).join(\"∀\")\n } else {\n if (props.trackBy == null) {\n throw new Error(\"Can't compile track by function without `keys` declaration\")\n } else {\n this.trackBy = props.trackBy\n }\n }\n }\n\n isEqual(a: T, b: T): boolean {\n return isEqual(a, b)\n }\n\n isEqualByTrack(a: TrackedModel<T>, b: TrackedModel<T>): boolean {\n if (a == null || b == null) {\n return a == null && b == null\n }\n\n if (a.index == null || b.index == null) {\n return a.index == null && b.index == null\n }\n\n if (a.model == null || b.model == null) {\n return a.model == null && b.model == null\n }\n\n return this.trackBy(a.index, a.model) === this.trackBy(b.index, b.model)\n }\n\n isEqualByKey(a: T, b: T): boolean {\n if (this.#getKey != null) {\n if (a == null || b == null) {\n return a == null && b == null\n }\n return this.#getKey(a) === this.#getKey(b)\n }\n console.warn(\"Primary keys is not defined for\", a, b)\n return false\n }\n\n normalizeRef(ref: ModelRef | ModelRefNorm): ModelRefNorm {\n if (ref instanceof ModelRefNorm) {\n return ref\n }\n\n if (ref.key != null && ref.index != null) {\n throw new Error(\"Only provide `pk` or `index` value not both\")\n }\n\n if (ref.key != null) {\n const keyValue = (Array.isArray(ref.key) ? ref.key : [ref.key]) as readonly Primitive[]\n\n if (keyValue.length > 0) {\n if (this.keys.length === 0) {\n throw new Error(\"Can't normalize ref without `keys`\")\n }\n\n if (keyValue.length !== this.keys.length) {\n throw new Error(`Wrong number of \\`key\\` values for this keys: [${this.keys.join(\",\")}]`)\n }\n return new ModelRefByKey(keyValue, this.keys)\n } else {\n console.warn(\"Empty key in ModelRef\", ref)\n }\n }\n\n if (ref.index != null) {\n return new ModelRefByIndex(ref.index)\n }\n\n throw new Error(\"Missing `key` or `index` value\")\n }\n}\n\nexport abstract class ModelRefNorm {\n readonly key?: readonly Primitive[]\n readonly index?: number\n\n #filter?: ModelRefFilter<any>\n toFilter() {\n if (this.#filter == null) {\n return (this.#filter = this._asFilter())\n }\n return this.#filter\n }\n\n protected abstract _asFilter(): ModelRefFilter<any>\n}\n\nexport class ModelRefByKey extends ModelRefNorm {\n override readonly key: readonly Primitive[]\n\n #keys: readonly string[]\n constructor(key: readonly Primitive[], keys: readonly string[]) {\n super()\n this.key = key\n this.#keys = keys\n }\n\n protected _asFilter(): ModelRefFilter<any> {\n const filter = {} as any\n for (let i = 0; i < this.#keys.length; i++) {\n filter[this.#keys[i]] = this.key[i]\n }\n return filterBy(filter)\n }\n}\n\nexport class ModelRefByIndex extends ModelRefNorm {\n override readonly index: number\n\n constructor(index: number) {\n super()\n this.index = index\n }\n\n protected _asFilter(): ModelRefFilter<any> {\n return (item: any, index: number) => this.index === index\n }\n}\n\nexport class UnknownMeta<T extends Model> extends ModelMeta<T> {\n constructor() {\n super({ keys: [], trackBy: (index: number) => index })\n }\n}\n","import { Observable } from \"rxjs\"\n\nimport { DeepReadonly } from \"@ngutil/common\"\n\nimport { Model, ModelRefNorm } from \"../model\"\nimport { Slice } from \"../query\"\n\nexport type PartialCollection<T> = readonly (T | undefined)[]\n\nexport abstract class CollectionStore<T extends Model> {\n /**\n * Update the given slice, and return all items observable\n */\n abstract insertSlice(slice: DeepReadonly<Slice>, items: readonly T[]): Observable<PartialCollection<T>>\n\n /**\n * @returns `true` when the given slice is available in the cache\n */\n abstract hasSlice(slice: DeepReadonly<Slice>): Observable<boolean>\n\n /**\n * @returns items by the given slice\n */\n abstract getSlice(slice: DeepReadonly<Slice>): Observable<PartialCollection<T>>\n\n /**\n * Get item from collection\n */\n abstract get(ref: ModelRefNorm): Observable<T | undefined>\n\n /**\n * Get index of item in collection, -1 if not found\n */\n abstract indexOf(ref: ModelRefNorm): Observable<number>\n\n /**\n * Update item in collection\n *\n * @returns the updated index, or -1 if not found\n */\n abstract update(ref: ModelRefNorm, item: T): Observable<number>\n\n /**\n * Update item if exists in collection, or insert at the given position\n *\n * @param position If positon is negative, insert at the end of collection\n * @returns the updated index or index of where to insert\n */\n abstract updateOrInsert(ref: ModelRefNorm, item: T, position?: number): Observable<number>\n\n /**\n * Remove item from collection\n * @returns the index of deleted item, -1 if not found\n */\n abstract del(ref: ModelRefNorm): Observable<number>\n\n /**\n * Removes all items from collection\n */\n abstract clear(): Observable<void>\n}\n","import { BehaviorSubject, combineLatest, map, Observable, of, take } from \"rxjs\"\n\nimport { Model, ModelRefNorm } from \"../model\"\nimport { Slice, sliceApply, sliceClamp, sliceEq, sliceInsert } from \"../query\"\nimport { CollectionStore, PartialCollection } from \"./collection-store\"\n\nexport class MemoryStore<T extends Model> extends CollectionStore<T> {\n readonly #data = new BehaviorSubject<PartialCollection<T>>([])\n\n override insertSlice(slice: Slice, items: readonly T[]): Observable<PartialCollection<T>> {\n this.#data.next(sliceInsert(slice, this.#data.value, items))\n return this.#data\n }\n\n override hasSlice(slice: Slice): Observable<boolean> {\n return this.#data.pipe(\n map(data => {\n if (sliceEq(slice, sliceClamp(slice, { start: 0, end: data.length }))) {\n for (let i = slice.start; i < slice.end; i++) {\n if (data[i] == null) {\n return false\n }\n }\n return true\n } else {\n return false\n }\n })\n )\n }\n\n override getSlice(slice: Slice): Observable<PartialCollection<T>> {\n return this.#data.pipe(map(data => sliceApply(slice, data)))\n }\n\n override get(ref: ModelRefNorm): Observable<T | undefined> {\n return this.#data.pipe(map(data => data.find(ref.toFilter())))\n }\n\n override indexOf(ref: ModelRefNorm): Observable<number> {\n return this.#data.pipe(map(data => data.findIndex(ref.toFilter())))\n }\n\n override update(ref: ModelRefNorm, item: T): Observable<number> {\n return combineLatest({\n index: this.indexOf(ref),\n data: this.#data\n }).pipe(\n take(1),\n map(({ index, data }) => {\n if (index < 0) {\n return index\n }\n this.#data.next(sliceInsert({ start: index, end: index + 1 }, data, [item]))\n return index\n })\n )\n }\n\n override updateOrInsert(ref: ModelRefNorm, item: T, position?: number): Observable<number> {\n return combineLatest({\n index: this.indexOf(ref),\n data: this.#data\n }).pipe(\n take(1),\n map(({ index, data }) => {\n if (index < 0) {\n index = position == null ? data.length : position < 0 ? data.length : position\n }\n this.#data.next(sliceInsert({ start: index, end: index + 1 }, data, [item]))\n return index\n })\n )\n }\n\n override del(ref: ModelRefNorm): Observable<number> {\n return combineLatest({\n index: this.indexOf(ref),\n data: this.#data\n }).pipe(\n take(1),\n map(({ index, data }) => {\n if (index < 0) {\n return index\n }\n const result = data.slice(0)\n result.splice(index, 1)\n this.#data.next(result)\n return index\n })\n )\n }\n\n override clear(): Observable<void> {\n if (this.#data.value.length > 0) {\n this.#data.next([])\n }\n return of(undefined)\n }\n}\n","import { BehaviorSubject, combineLatest, map, Observable } from \"rxjs\"\n\nimport { isEqual } from \"lodash\"\n\nimport { deepClone, deepFreeze, DeepReadonly } from \"@ngutil/common\"\n\nexport abstract class Property<T> extends BehaviorSubject<DeepReadonly<T> | undefined> {\n // readonly #signal: Signal<DeepReadonly<T> | undefined> = toSignal(this, { requireSync: true })\n\n set(value: T | undefined, clone: boolean = true) {\n if (!isEqual(this.value, value)) {\n if (value != null) {\n this.next(deepFreeze<T>(clone ? deepClone<T>(value) : value) as any)\n } else {\n this.next(undefined)\n }\n }\n }\n\n get() {\n return this.value\n }\n\n del(): void {\n this.set(undefined)\n }\n\n /**\n * Merge values and emit when changed (dont change original values)\n */\n abstract update(other: T): void\n}\n\nexport abstract class PropertyCombined<T> {\n abstract readonly normal: Property<T>\n abstract readonly forced: Property<T>\n abstract readonly merged$: Observable<DeepReadonly<T> | undefined>\n}\n\nexport function mergedProperty(merger: (...items: any[]) => any, ...props: Observable<any>[]): Observable<any> {\n if (props.length > 1) {\n return combineLatest(props).pipe(map(values => deepFreeze(merger(...values))))\n } else {\n return props[0] as any\n }\n}\n","import { Observable } from \"rxjs\"\n\nimport { DeepReadonly } from \"@ngutil/common\"\n\nimport { filterMerge } from \"../../query\"\nimport { mergedProperty, Property, PropertyCombined } from \"./abstract\"\n\nexport class FilterProperty<T> extends Property<T> {\n override update(other: T): void {\n this.set(filterMerge((this as { value: any }).value, other) as any, false)\n }\n}\n\nexport class FilterCombined<T> extends PropertyCombined<T> {\n override normal = new FilterProperty<T>(undefined)\n override forced = new FilterProperty<T>(undefined)\n override merged$: Observable<DeepReadonly<T> | undefined> = mergedProperty(filterMerge, this.normal, this.forced)\n}\n","import { map, Observable } from \"rxjs\"\n\nimport { DeepReadonly } from \"@ngutil/common\"\n\nimport { Model } from \"../../model\"\nimport { SortDirection, sorterFind, sorterMerge } from \"../../query\"\nimport { mergedProperty, Property, PropertyCombined } from \"./abstract\"\n\nexport class SorterProperty<T> extends Property<T> {\n override update(other: T): void {\n this.set(sorterMerge((this as { value: any }).value, other as any) as any, false)\n }\n}\n\ntype OfTypes<T extends Model> = ReturnType<typeof sorterFind<T>>\n\nexport class SorterCombined<T extends Model> extends PropertyCombined<T> {\n override normal = new SorterProperty<T>(undefined)\n override forced = new SorterProperty<T>(undefined)\n // TODO: normalized sorter\n override merged$: Observable<DeepReadonly<T> | undefined> = mergedProperty(sorterMerge, this.normal, this.forced)\n\n of(name: string): Observable<OfTypes<T>> {\n return this.merged$.pipe(map((sorters: any) => (sorters == null ? undefined : sorterFind(sorters, name))))\n }\n\n directionOf(name: string) {\n return this.of(name).pipe(\n map(value => {\n if (value == null) {\n return undefined\n } else if (typeof value === \"string\") {\n return value\n } else {\n return value.dir\n }\n })\n )\n }\n\n isSet(name: string): Observable<boolean> {\n return this.directionOf(name).pipe(map(v => v != null))\n }\n\n isAsc(name: string): Observable<boolean> {\n return this.directionOf(name).pipe(map(v => v === SortDirection.Asc))\n }\n\n isDesc(name: string): Observable<boolean> {\n return this.directionOf(name).pipe(map(v => v === SortDirection.Desc))\n }\n}\n","import { Observable } from \"rxjs\"\n\nimport { DeepReadonly } from \"@ngutil/common\"\n\nimport { slimerMerge } from \"../../query\"\nimport { mergedProperty, Property, PropertyCombined } from \"./abstract\"\n\nexport class SlimerProperty<T> extends Property<T> {\n override update(other: T): void {\n this.set(slimerMerge((this as { value: any }).value, other) as any, false)\n }\n}\n\nexport class SlimerCombined<T> extends PropertyCombined<T> {\n override normal = new SlimerProperty<T>(undefined)\n override forced = new SlimerProperty<T>(undefined)\n override merged$: Observable<DeepReadonly<T> | undefined> = mergedProperty(slimerMerge, this.normal, this.forced)\n}\n","import { Observable } from \"rxjs\"\n\nimport { DeepReadonly } from \"@ngutil/common\"\n\nimport { grouperMerge } from \"../../query\"\nimport { mergedProperty, Property, PropertyCombined } from \"./abstract\"\n\nexport class GrouperProperty<T> extends Property<T> {\n override update(other: T): void {\n this.set(grouperMerge((this as { value: any }).value, other) as any, false)\n }\n}\n\nexport class GrouperCombined<T> extends PropertyCombined<T> {\n override normal = new GrouperProperty<T>(undefined)\n override forced = new GrouperProperty<T>(undefined)\n override merged$: Observable<DeepReadonly<T> | undefined> = mergedProperty(grouperMerge, this.normal, this.forced)\n}\n","import { DataSource as CdkDataSource, CollectionViewer } from \"@angular/cdk/collections\"\n\nimport {\n BehaviorSubject,\n combineLatest,\n debounceTime,\n distinctUntilChanged,\n finalize,\n map,\n Observable,\n of,\n ReplaySubject,\n shareReplay,\n Subject,\n Subscriber,\n switchMap,\n take,\n takeUntil,\n tap\n} from \"rxjs\"\n\nimport { isEqual } from \"lodash\"\n\nimport { ConnectProtocol, deepClone, deepFreeze, DeepReadonly } from \"@ngutil/common\"\n\nimport type { Model, ModelRef } from \"../model\"\nimport type { DataProvider } from \"../provider/provider\"\nimport type { Filter, Grouper, Query, Slice, Slimer, Sorter } from \"../query\"\nimport { type CollectionStore, MemoryStore, type PartialCollection } from \"../store\"\nimport { FilterCombined, GrouperCombined, SlimerCombined, SorterCombined } from \"./properties\"\n\nconst DEBOUNCE_TIME = 50\n\ntype DSQuery<T extends Model> = Query<T> & { slice: DeepReadonly<Slice> }\n\nexport class DataSource<T extends Model> extends CdkDataSource<T | undefined> implements ConnectProtocol {\n readonly busy$ = new BehaviorSubject<boolean>(false)\n readonly total$ = new BehaviorSubject<number | undefined>(undefined)\n\n readonly filter = new FilterCombined<Filter<T>>()\n readonly sorter = new SorterCombined<Sorter<T>>()\n readonly slimer = new SlimerCombined<Slimer<T>>()\n readonly grouper = new GrouperCombined<Grouper<T>>()\n\n readonly #queryBase = combineLatest({\n filter: this.filter.merged$,\n sorter: this.sorter.merged$,\n slimer: this.slimer.merged$,\n grouper: this.grouper.merged$\n }).pipe(shareReplay(1))\n\n readonly #slice = new ReplaySubject<Slice>(1)\n readonly slice$: Observable<Slice> = this.#slice.pipe(\n switchMap(slice => this.provider.clampSlice(slice)),\n distinctUntilChanged(isEqual),\n map(slice => deepFreeze(deepClone(slice))),\n shareReplay(1)\n )\n\n readonly #reload = new BehaviorSubject<void>(undefined)\n\n readonly query$: Observable<DSQuery<T>> = combineLatest({ base: this.#queryBase, reload: this.#reload }).pipe(\n tap(() => this.#setBusy(true)),\n // TODO: maybe silent reset or prevent items$ chenges\n // TODO: alternative solution use cacheId, and query item from store with this cacheId\n switchMap(({ base }) => this.store.clear().pipe(map(() => base))),\n switchMap(queryBase =>\n this.slice$.pipe(\n tap(() => this.#setBusy(true)),\n map(slice => {\n return { ...queryBase, slice }\n })\n )\n ),\n shareReplay(1)\n )\n\n readonly items$: Observable<PartialCollection<T>> = this.query$.pipe(\n tap(() => this.#setBusy(true)),\n debounceTime(DEBOUNCE_TIME),\n switchMap(query =>\n this.store.hasSlice(query.slice).pipe(\n switchMap(hasSlice => {\n if (hasSlice) {\n return this.store.getSlice(query.slice)\n } else {\n return this.provider.queryList(query).pipe(\n switchMap(result => {\n if (result.total != null) {\n this.total$.next(result.total)\n }\n return this.store.insertSlice(query.slice, result.items)\n }),\n take(1)\n )\n }\n })\n )\n ),\n finalize(() => this.#setBusy(false)),\n shareReplay(1)\n )\n\n readonly store: CollectionStore<T>\n constructor(\n public readonly provider: DataProvider<T>,\n store?: CollectionStore<T>\n ) {\n super()\n if (store == null) {\n store = new MemoryStore()\n }\n this.store = store\n }\n\n setSlice(slice: Slice) {\n this.#slice.next(slice)\n return this\n }\n\n all() {\n return this.setSlice({ start: 0, end: Infinity })\n }\n\n realod() {\n this.#reload.next()\n }\n\n getItem(ref: ModelRef): Observable<T | undefined> {\n const refn = this.provider.meta.normalizeRef(ref)\n return this.#storeFirst(\n query => this.store.get(refn),\n query => this.provider.queryItem(refn, query)\n )\n }\n\n getItemPosition(ref: ModelRef): Observable<number | undefined> {\n const refn = this.provider.meta.normalizeRef(ref)\n return this.#storeFirst(\n query => this.store.indexOf(refn).pipe(map(i => (i < 0 ? undefined : i))),\n query => this.provider.queryPosition(refn, query)\n )\n }\n\n realodItem(ref: ModelRef, insertPosition?: number): Observable<T | undefined> {\n const refn = this.provider.meta.normalizeRef(ref)\n return this.query$.pipe(\n switchMap(query => this.provider.queryItem(refn, query)),\n switchMap(item =>\n item != null ? this.store.updateOrInsert(refn, item, insertPosition).pipe(map(() => item)) : of(item)\n ),\n take(1)\n )\n }\n\n #storeFirst<X>(\n storeFn: (query: Query<T>) => Observable<X>,\n selfFn: (query: Query<T>) => Observable<X>\n ): Observable<X> {\n return this.query$.pipe(\n take(1),\n switchMap(query => storeFn(query).pipe(switchMap(result => (result == null ? selfFn(query) : of(result)))))\n )\n }\n\n #setBusy(busy: boolean) {\n if (this.provider.isAsync) {\n if (this.busy$.value !== busy) {\n this.busy$.next(busy)\n }\n }\n }\n\n #cvSubs = new Map<CollectionViewer, Subject<void>>()\n\n override connect(collectionViewer: CollectionViewer): Observable<readonly (T | undefined)[]> {\n const until = new Subject<void>()\n\n this.#cvSubs.get(collectionViewer)?.next()\n this.#cvSubs.set(collectionViewer, until)\n\n return new Observable((subscriber: Subscriber<readonly (T | undefined)[]>) => {\n const sub1 = collectionViewer.viewChange.subscribe(this.#slice)\n const sub2 = this.items$.subscribe(subscriber)\n\n return () => {\n if (this.#cvSubs.get(collectionViewer) === until) {\n this.#cvSubs.delete(collectionViewer)\n }\n sub1.unsubscribe()\n sub2.unsubscribe()\n }\n }).pipe(takeUntil(until))\n }\n\n override disconnect(collectionViewer: CollectionViewer): void {\n this.#cvSubs.get(collectionViewer)?.next()\n this.#cvSubs.delete(collectionViewer)\n }\n}\n","import { DataSource as CdkDataSource, CollectionViewer } from \"@angular/cdk/collections\"\nimport { Directive, Input, OnDestroy, Optional, input } from \"@angular/core\"\nimport { takeUntilDestroyed, toSignal } from \"@angular/core/rxjs-interop\"\n\nimport {\n combineLatest,\n finalize,\n Observable,\n of,\n ReplaySubject,\n share,\n Subject,\n Subscription,\n switchMap,\n takeUntil,\n tap,\n throwError\n} from \"rxjs\"\n\nimport { Busy, ConnectProtocol } from \"@ngutil/common\"\n\nimport { Model } from \"../model\"\nimport { DataProvider } from \"../provider/provider\"\nimport { Filter, Grouper, Slimer, Sorter } from \"../query\"\nimport { DataSource } from \"./source\"\n\nexport type DataSourceInput<T extends Model> = any\n\n/**\n * @example\n * ```html\n * <table [nuDataSource]=\"...\" [filter]=\"{isActive: true}\" [sorter]=\"[{name: 'asc'}]\"></table>\n * ```\n *\n * ```ts\n * @Component({\n * template: `<table [nuDataSource]=\"users$\"></table>`\n * })\n * class UserTable {\n * readonly userService = inject(UserService)\n * readonly users$ = UserService.all()\n * }\n * ```\n *\n * ```ts\n * @Component({\n * selector: \"table.my-table\",\n * template: `\n * <cdk-virtual-scroll-viewport itemSize=\"50\" class=\"example-viewport\">\n * <div *cdkVirtualFor=\"let item of dataSource\" class=\"example-item\">{{item}}</div>\n * </cdk-virtual-scroll-viewport>\n * `\n * })\n * class TableComponent {\n * readonly dataSource = inject(DataSourceProxy)\n * }\n * ```\n */\n@Directive({\n standalone: true,\n selector: \"[nuDataSource]\",\n exportAs: \"nuDataSource\"\n})\nexport class DataSourceProxy<T extends Model = Model>\n extends CdkDataSource<T | undefined>\n implements OnDestroy, ConnectProtocol {\n\n @Input({ required: true, alias: \"nuDataSource\" })\n set value(value: DataSourceInput<T>) {\n this.#valueSub?.unsubscribe()\n this.#valueSub = coerceDataSource<T>(value)\n .pipe(\n tap(v => {\n if (v == null) {\n throw new Error(\"Missing DataSource\")\n }\n })\n )\n .subscribe(this.#value)\n }\n\n get value(): DataSource<T> {\n return this.#valueSig()!\n }\n\n #valueSub?: Subscription\n readonly #value = new ReplaySubject<DataSource<T>>(1)\n readonly value$ = this.#value.pipe(takeUntilDestroyed())\n readonly #valueSig = toSignal(this.value$)\n\n readonly items$ = this.value$.pipe(\n switchMap(value => value.items$),\n share()\n )\n\n readonly busy$ = this.value$.pipe(\n switchMap(value => value.busy$),\n share()\n )\n readonly isBusy = toSignal(this.busy$, { rejectErrors: true, initialValue: false })\n\n @Input()\n set filter(value: Filter<T>) {\n this.#filter.next(value)\n }\n readonly #filter = new ReplaySubject<Filter<T>>(1)\n\n @Input()\n set sorter(value: Sorter<T>) {\n this.#sorter.next(value)\n }\n readonly #sorter = new ReplaySubject<Sorter<T>>(1)\n\n @Input()\n set grouper(value: Grouper<T>) {\n this.#grouper.next(value)\n }\n readonly #grouper = new ReplaySubject<Grouper<T>>(1)\n\n @Input()\n set slimer(value: Slimer<T>) {\n this.#slimer.next(value)\n }\n readonly #slimer = new ReplaySubject<Slimer<T>>(1)\n\n readonly #subs = new Subscription()\n\n constructor(@Optional() busy?: Busy<any>) {\n super()\n\n if (busy != null) {\n this.#subs.add(busy.connect(this.busy$).subscribe())\n }\n\n this.#subs.add(\n combineLatest({ src: this.value$, filter: this.#filter }).subscribe(({ src, filter }) => {\n src.filter.forced.set(filter)\n })\n )\n\n this.#subs.add(\n combineLatest({ src: this.value$, sorter: this.#sorter }).subscribe(({ src, sorter }) => {\n src.sorter.forced.set(sorter)\n })\n )\n\n this.#subs.add(\n combineLatest({ src: this.value$, grouper: this.#grouper }).subscribe(({ src, grouper }) => {\n src.grouper.forced.set(grouper)\n })\n )\n\n this.#subs.add(\n combineLatest({ src: this.value$, slimer: this.#slimer }).subscribe(({ src, slimer }) => {\n src.slimer.forced.set(slimer)\n })\n )\n }\n\n #cvSubs = new Map<CollectionViewer, Subject<void>>()\n\n override connect(collectionViewer: CollectionViewer): Observable<readonly (T | undefined)[]> {\n const until = new Subject<void>()\n\n this.#cvSubs.get(collectionViewer)?.next()\n this.#cvSubs.set(collectionViewer, until)\n\n return this.value$.pipe(\n switchMap(value => value.connect(collectionViewer)),\n takeUntil(until),\n finalize(() => this.#cvSubs.delete(collectionViewer))\n )\n }\n\n override disconnect(collectionViewer: CollectionViewer): void {\n this.#cvSubs.get(collectionViewer)?.next()\n this.#cvSubs.delete(collectionViewer)\n }\n\n ngOnDestroy(): void {\n this.#valueSub?.unsubscribe()\n this.#valueSub = undefined\n this.#subs.unsubscribe()\n }\n}\n\nfunction coerceDataSource<T extends Model>(value: DataSourceInput<T>): Observable<DataSource<T>> {\n if (value instanceof DataSourceProxy) {\n return value.value$\n } else if (value instanceof DataSource) {\n return of(value)\n } else if (value instanceof DataProvider) {\n return of(value.toDataSource())\n } else {\n return throwError(() => new Error(\"Invalid DataSource value\"))\n }\n}\n","import type { Observable } from \"rxjs\"\nimport { of } from \"rxjs\"\n\nimport type { Model, ModelMeta, ModelRefNorm } from \"../model\"\nimport type { Query, QueryResult, Slice } from \"../query\"\nimport { DataSource } from \"../source\"\nimport type { CollectionStore } from \"../store\"\n\nexport abstract class DataProvider<T extends Model> {\n /**\n * `true` when the provider is making async requests\n */\n abstract readonly isAsync: boolean\n\n /**\n * Metadata of model\n */\n abstract readonly meta: ModelMeta<T>\n\n /**\n * Query items by the given request\n */\n abstract queryList(request: Query<T>): Observable<QueryResult<T>>\n\n /**\n * Query exactly one item by the given request\n */\n abstract queryItem(ref: ModelRefNorm, request: Query<T>): Observable<T | undefined>\n\n /**\n * Query item position in the list that matching by the given request\n */\n abstract queryPosition(ref: ModelRefNorm, request: Query<T>): Observable<number | undefined>\n\n /**\n * Froce Slice boundaries, useful in array, or obeservable providers\n */\n clampSlice(slice: Slice): Observable<Slice> {\n return of(slice)\n }\n\n /**\n * @returns New data source instance\n */\n toDataSource(store?: CollectionStore<T>): DataSource<T> {\n return new DataSource(this, store)\n }\n}\n","import { map, Observable, take } from \"rxjs\"\n\nimport { Model, ModelMeta, ModelMetaInput, ModelRefNorm } from \"../model\"\nimport { Query, queryExecutor, QueryExecutor, QueryResult, Slice, sliceClamp } from \"../query\"\nimport { DataProvider } from \"./provider\"\n\nexport abstract class LocalProvider<T extends Model> extends DataProvider<T> {\n override readonly isAsync = false\n override readonly meta: ModelMeta<T>\n abstract readonly items$: Observable<readonly T[]>\n\n #executor?: QueryExecutor<T>\n\n constructor(meta: ModelMetaInput<T>) {\n super()\n this.meta = ModelMeta.coerce(meta)\n }\n\n executor(request: Query<T>): QueryExecutor<T> {\n return (this.#executor = queryExecutor(request, this.#executor))\n }\n\n override queryList(request: Query<T>): Observable<QueryResult<T>> {\n const exec = this.executor(request)\n return this.items$.pipe(map(items => exec(items)))\n }\n\n override queryItem(ref: ModelRefNorm, request: Query<T>): Observable<T | undefined> {\n return this.queryList(request).pipe(map(list => list.items.find(ref.toFilter())))\n }\n\n override queryPosition(ref: ModelRefNorm, request: Query<T>): Observable<number | undefined> {\n return this.queryList(request).pipe(map(list => list.items.findIndex(ref.toFilter())))\n }\n\n override clampSlice(slice: Slice): Observable<Slice> {\n return this.items$.pipe(take(1), map(items => sliceClamp(slice, {start: 0, end: items.length})))\n }\n}\n","import { type Observable, of } from \"rxjs\"\n\nimport type { Model, ModelMetaInput } from \"../model\"\nimport { LocalProvider } from \"./local\"\n\n\nexport class ArrayProvider<T extends Model> extends LocalProvider<T> {\n override readonly items$: Observable<readonly T[]>\n\n constructor(meta: ModelMetaInput<T>, items: readonly T[]) {\n super(meta)\n this.items$ = of(items)\n }\n}\n","import type { Observable } from \"rxjs\"\n\nimport type { Model, ModelMetaInput } from \"../model\"\nimport { LocalProvider } from \"./local\"\n\nexport class ObservableProvider<T extends Model> extends LocalProvider<T> {\n readonly items$: Observable<readonly T[]>\n\n constructor(meta: ModelMetaInput<T>, src: Observable<readonly T[]>) {\n super(meta)\n this.items$ = src\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["CdkDataSource"],"mappings":";;;;;;;;;AAKM,SAAU,iBAAiB,CAAC,IAAY,EAAA;IAC1C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AAC5B,QAAA,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAA;KAChC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CACzB,CAAC,MAAM,EAAE,IAAI,KAAK,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,EAC1C,CAAC,GAAQ,MAAM,GAAG,IAAI,IAAI,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAC3C,CAAA;AACL,CAAC;AAED,MAAM,QAAQ,GAAG,OAAO,CAAA;AAExB,SAAS,UAAU,CAAC,IAAY,EAAE,MAAgB,EAAA;AAC9C,IAAA,IAAI,IAAI,KAAK,GAAG,EAAE;AACd,QAAA,OAAO,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;KAC7C;SAAM;AACH,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;AACrD,QAAA,OAAO,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAA;KACvE;AACL;;ACSO,MAAM,SAAS,GAAkB;;;;;;;;;;;;;;;;;;;;;;;;;CAyBvC,CAAA;AAEK,SAAU,WAAW,CAAC,KAAU,EAAA;AAClC,IAAA,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,SAAS,CAAe,CAAA;AACrE,IAAA,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;AAChB,QAAA,OAAO,GAAG,CAAC,GAAG,CAAC,EAAE,IAAG;YAChB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,CAAA;AACnC,SAAC,CAAC,CAAA;KACL;SAAM;QACH,OAAO,CAAC,EAAE,EAAE,EAAA,IAAA,oBAAe,KAAK,EAAE,CAAC,CAAA;KACtC;AACL,CAAC;AAoED;;;;;AAKG;AACG,SAAU,QAAQ,CAAkB,OAAkB,EAAA;AACxD,IAAA,OAAO,cAAc,CAAI,OAAO,CAAC,CAAA;AACrC,CAAC;AAED;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA,SAAS,cAAc,CAAkB,OAAkB,EAAA;AACvD,IAAA,IAAI,MAAkB,CAAA;IACtB,MAAM,MAAM,GAAkB,EAAE,CAAA;AAChC,IAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;QAChD,QAAQ,GAAG;AACP,YAAA,KAAA,GAAA;gBACI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACvB,oBAAA,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;iBAClE;AACD,gBAAA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,GAAG,EAAC,cAAiB,EAAC,CAAC,CAAA;gBAChE,MAAK;AAET,YAAA,KAAA,GAAA;gBACI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACvB,oBAAA,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAA;iBACjE;AACD,gBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAC,cAAiB,EAAC,CAAC,CAAC,CAAA;gBAC9C,MAAK;AAET,YAAA;AACI,gBAAA,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAA;AAC/B,gBAAA,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE;AACtB,oBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,eAAe,CAAC,MAAM,EAAE,EAAS,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;iBACvG;qBAAM;oBACH,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAe,IAAA,oBAAA,KAAK,CAAC,CAAC,CAAA;iBAC3D;gBAED,MAAK;SACZ;KACJ;AACD,IAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAA;AACvB,CAAC;AAED,SAAS,eAAe,CAAC,MAAkB,EAAE,EAAY,EAAE,KAAU,EAAA;AACjE,IAAA,IAAI,KAAa,CAAA;AACjB,IAAA,IAAI,KAAa,CAAA;IACjB,QAAQ,EAAE;AACN,QAAA,KAAA,IAAA;;AAEI,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAA;AAE3C,QAAA,KAAA,KAAA;AACI,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAA;AAE5C,QAAA,KAAA,KAAA;YACI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,CAAA;AACzC,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,KAAK,KAAK,CAAC,CAAA;AAExE,QAAA,KAAA,IAAA;;AAEI,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAA;AAE3C,QAAA,KAAA,KAAA;AACI,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAA;AAE5C,QAAA,KAAA,KAAA;YACI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,CAAA;AACzC,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,KAAK,KAAK,CAAC,CAAA;AAExE,QAAA,KAAA,GAAA;AACI,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAA;AAE1C,QAAA,KAAA,IAAA;YACI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,CAAA;AACzC,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,GAAG,KAAK,CAAC,CAAA;AAEtE,QAAA,KAAA,IAAA;AACI,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAA;AAE3C,QAAA,KAAA,KAAA;YACI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,CAAA;AACzC,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,IAAI,KAAK,CAAC,CAAA;AAEvE,QAAA,KAAA,GAAA;AACI,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAA;AAE1C,QAAA,KAAA,IAAA;YACI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,CAAA;AACzC,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,GAAG,KAAK,CAAC,CAAA;AAEtE,QAAA,KAAA,IAAA;AACI,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAA;AAE3C,QAAA,KAAA,KAAA;YACI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,CAAA;AACzC,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,IAAI,KAAK,CAAC,CAAA;AAEvE,QAAA,KAAA,GAAA;AACI,YAAA,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;AACrB,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAEnG,QAAA,KAAA,IAAA;YACI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,CAAA;YACzC,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;AAE9E,QAAA,KAAA,GAAA;AACI,YAAA,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;AACrB,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAA;AAE5D,QAAA,KAAA,IAAA;YACI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,CAAA;YACzC,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAA;AAEhF,QAAA,KAAA,GAAA;AACI,YAAA,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;AACrB,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;AAE1D,QAAA,KAAA,IAAA;YACI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,CAAA;YACzC,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;AAE9E,QAAA,KAAA,GAAA;AACI,YAAA,KAAK,GAAG,KAAK,YAAY,MAAM,GAAG,KAAK,GAAG,IAAI,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AAClE,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;AAE9C,QAAA,KAAA,IAAA;AACI,YAAA,KAAK,GAAG,KAAK,YAAY,MAAM,GAAG,KAAK,GAAG,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;AACnE,YAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;AAE9C,QAAA,KAAA,GAAA;YACI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACvB,gBAAA,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;aAClE;YACD,OAAO,IAAI,CACP,WAAW,CACP,KAAK,CAAC,GAAG,CAAC,CAAC,IAAG;AACV,gBAAA,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE;oBAClB,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,eAAe,CAAC,MAAM,EAAE,EAAS,EAAE,GAAG,CAAC,CAAC,CAAA;iBACvF;qBAAM;AACH,oBAAA,OAAO,eAAe,CAAC,MAAM,EAAe,IAAA,oBAAA,CAAC,CAAC,CAAA;iBACjD;aACJ,CAAC,CACL,CACJ,CAAA;AAEL,QAAA,KAAA,GAAA;YACI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACvB,gBAAA,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAA;aACjE;YACD,OAAO,GAAG,CACN,WAAW,CACP,KAAK,CAAC,GAAG,CAAC,CAAC,IAAG;AACV,gBAAA,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE;oBAClB,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,eAAe,CAAC,MAAM,EAAE,EAAS,EAAE,GAAG,CAAC,CAAC,CAAA;iBACvF;qBAAM;AACH,oBAAA,OAAO,eAAe,CAAC,MAAM,EAAe,IAAA,oBAAA,CAAC,CAAC,CAAA;iBACjD;aACJ,CAAC,CACL,CACJ,CAAA;KACR;AAED,IAAA,MAAM,IAAI,KAAK,CAAC,wBAAwB,EAAE,CAAA,CAAE,CAAC,CAAA;AACjD,CAAC;AAED,SAAS,OAAO,CAAC,MAAkB,EAAE,OAAgC,EAAA;AACjE,IAAA,OAAO,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AAC3C,CAAC;AAED,SAAS,IAAI,CAAC,GAAe,EAAA;AACzB,IAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;AAClB,QAAA,OAAO,CAAC,IAAI,IAAI,CAAA;KACnB;IAED,OAAO,IAAI,IAAG;AACV,QAAA,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE;AAClB,YAAA,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;AACX,gBAAA,OAAO,KAAK,CAAA;aACf;SACJ;AACD,QAAA,OAAO,IAAI,CAAA;AACf,KAAC,CAAA;AACL,CAAC;AAED,SAAS,GAAG,CAAC,GAAe,EAAA;AACxB,IAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;AAClB,QAAA,OAAO,CAAC,IAAI,IAAI,CAAA;KACnB;IAED,OAAO,IAAI,IAAG;AACV,QAAA,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE;AAClB,YAAA,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE;AACV,gBAAA,OAAO,IAAI,CAAA;aACd;SACJ;AACD,QAAA,OAAO,KAAK,CAAA;AAChB,KAAC,CAAA;AACL,CAAC;AAEe,SAAA,WAAW,CAAC,GAAG,OAAc,EAAA;IACzC,IAAI,MAAM,GAAuC,SAAS,CAAA;AAE1D,IAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;AAC1B,QAAA,IAAI,MAAM,IAAI,IAAI,EAAE;YAChB,SAAQ;SACX;AACD,QAAA,IAAI,MAAM,IAAI,IAAI,EAAE;AAChB,YAAA,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAA;SAC7B;aAAM;AACH,YAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACzC,gBAAA,IAAI,CAAC,KAAK,SAAS,EAAE;AACjB,oBAAA,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;oBAChB,SAAQ;iBACX;gBAED,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAA;aAC3B;SACJ;KACJ;AAED,IAAA,OAAO,MAAa,CAAA;AACxB;;AClbM,SAAU,OAAO,CAAkC,OAAsB,EAAA;AAC3E,IAAA,OAAO,cAAc,CAAO,OAAO,CAAC,CAAA;AACxC,CAAC;AAED,SAAS,cAAc,CAAkC,OAAsB,EAAA;AAC3E,IAAA,OAAO,CAAC,IAAI,SAAS,CAAA;AACzB,CAAC;AAEe,SAAA,YAAY,CACxB,GAAG,QAAiD,EAAA;AAEpD,IAAA,OAAO,SAAS,CAAA;AACpB,CAAC;AAED;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;ACpEA;;;;;AAKG;AACG,SAAU,MAAM,CAAkB,OAAkB,EAAA;AACtD,IAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACtB,QAAA,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAA;KAClC;AACD,IAAA,OAAO,cAAc,CAAI,OAAO,CAAQ,CAAA;AAC5C,CAAC;AAED;;;;;;;;AAQG;AACG,SAAU,eAAe,CAAkB,OAAkB,EAAA;IAC/D,OAAO,WAAW,CACb,OAAe,CAAC,GAAG,CAAC,CAAC,CAAM,KACxB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAI;AAC7B,QAAA,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;YACvB,MAAM,KAAK,GAAG,CAAC,CAAC,WAAW,EAAE,KAAK,KAAK,CAAA;AACvC,YAAA,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,GAAG,KAAK,GAAG,IAAI,EAAE,CAAA;SAC9D;AAAM,aAAA,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE;YACzB,OAAO;AACH,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,KAAK,EAAE,CAAE,CAAkB,CAAC,GAAG,IAAI,KAAK,EAAE,WAAW,EAAE,KAAK,KAAK;AACjE,gBAAA,UAAU,EAAG,CAAkB,CAAC,UAAU,IAAI,IAAI,GAAG,IAAI,GAAG,CAAC,CAAE,CAAkB,CAAC,UAAU;aAC/F,CAAA;SACJ;aAAM;AACH,YAAA,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAA,CAAE,CAAC,CAAA;SAC1C;KACJ,CAAC,CACL,CACJ,CAAA;AACL,CAAC;AAED,SAAS,cAAc,CAAkB,OAAkB,EAAA;AACvD,IAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;QACtB,OAAO,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,CAAA;KACvB;IAED,MAAM,IAAI,GAAG,eAAe,CAAI,OAAO,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;AAC9D,IAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACnB,QAAA,OAAO,IAAI,CAAC,CAAC,CAAC,CAAA;KACjB;AAED,IAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAG,CAAA;AAC3B,IAAA,OAAO,IAAI,CAAC,WAAW,CACnB,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,KAAI;QACrB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AACpB,QAAA,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAA;KAClC,EACD,OAAO,CACV,CAAA;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAmB,EAAA;AAClE,IAAA,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAA;IACtC,IAAI,KAAK,EAAE;QACP,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAA;KAC7D;SAAM;QACH,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAA;KACnE;AACL,CAAC;SAEe,OAAO,CAAC,CAAM,EAAE,CAAM,EAAE,UAAmB,EAAA;;IAEvD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE;AACxB,QAAA,OAAO,UAAU,KAAK,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;KACtC;SAAM,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE;AAC/B,QAAA,OAAO,UAAU,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;KACtC;SAAM,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE;AAC/B,QAAA,OAAO,CAAC,CAAA;KACX;AAAM,SAAA,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;AACtB,QAAA,OAAO,CAAC,CAAA;KACX;SAAM,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;QACvD,OAAO,CAAC,GAAG,CAAC,CAAA;KACf;SAAM,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;AACvD,QAAA,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAA;AACnB,QAAA,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAA;;AAEnB,QAAA,IAAI,UAAU,KAAK,IAAI,EAAE;AACrB,YAAA,IAAI,EAAE,KAAK,CAAC,EAAE;gBACV,OAAO,CAAC,CAAC,CAAA;aACZ;AAAM,iBAAA,IAAI,EAAE,KAAK,CAAC,EAAE;AACjB,gBAAA,OAAO,CAAC,CAAA;aACX;SACJ;aAAM;AACH,YAAA,IAAI,EAAE,KAAK,CAAC,EAAE;AACV,gBAAA,OAAO,CAAC,CAAA;aACX;AAAM,iBAAA,IAAI,EAAE,KAAK,CAAC,EAAE;gBACjB,OAAO,CAAC,CAAC,CAAA;aACZ;SACJ;AACD,QAAA,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;KAC5B;AAAM,SAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AAC7C,QAAA,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAA;AACnB,QAAA,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAA;QACnB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;AAE1B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACxB,YAAA,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAA;AAC3C,YAAA,IAAI,GAAG,KAAK,CAAC,EAAE;AACX,gBAAA,OAAO,GAAG,CAAA;aACb;SACJ;AAED,QAAA,IAAI,EAAE,KAAK,EAAE,EAAE;AACX,YAAA,OAAO,CAAC,CAAA;SACX;AAED,QAAA,IAAI,UAAU,KAAK,IAAI,EAAE;AACrB,YAAA,IAAI,EAAE,KAAK,CAAC,EAAE;gBACV,OAAO,CAAC,CAAC,CAAA;aACZ;AAAM,iBAAA,IAAI,EAAE,KAAK,CAAC,EAAE;AACjB,gBAAA,OAAO,CAAC,CAAA;aACX;SACJ;aAAM;AACH,YAAA,IAAI,EAAE,KAAK,CAAC,EAAE;AACV,gBAAA,OAAO,CAAC,CAAA;aACX;AAAM,iBAAA,IAAI,EAAE,KAAK,CAAC,EAAE;gBACjB,OAAO,CAAC,CAAC,CAAA;aACZ;SACJ;QAED,OAAO,EAAE,GAAG,EAAE,CAAA;KACjB;SAAM,IAAI,aAAa,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE;AAC7C,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;KAC5D;AAED,IAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;AACzB,CAAC;AAEe,SAAA,WAAW,CAAkB,GAAG,OAA4C,EAAA;AACxF,IAAA,IAAI,MAA6B,CAAA;AAEjC,IAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;AAC1B,QAAA,IAAI,MAAM,IAAI,IAAI,EAAE;YAChB,SAAQ;SACX;AACD,QAAA,IAAI,MAAM,IAAI,IAAI,EAAE;AAChB,YAAA,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAA;YAC1B,SAAQ;SACX;AAED,QAAA,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE;AACzB,YAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACzC,gBAAA,MAAM,QAAQ,GAAI,MAAc,CAAC,IAAI,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAA;gBACvE,IAAI,QAAQ,EAAE;AACV,oBAAA,IAAI,CAAC,IAAI,IAAI,EAAE;AACX,wBAAA,OAAQ,QAAgB,CAAC,CAAC,CAAC,CAAA;wBAC3B,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;AACpC,4BAAA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;yBAC7C;qBACJ;yBAAM;wBACH,CAAC;wBAAC,QAAgB,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAA;qBACvC;iBACJ;AAAM,qBAAA,IAAI,CAAC,IAAI,IAAI,EAAE;AAClB,oBAAA,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,EAAS,CAAC,CAAA;iBAC5C;aACJ;SACJ;KACJ;AAED,IAAA,OAAO,MAAM,CAAA;AACjB,CAAC;AAEe,SAAA,UAAU,CAAkB,OAAkB,EAAE,IAAY,EAAA;AACxE,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAA;AACjD,IAAA,IAAI,MAAM,IAAI,IAAI,EAAE;AAChB,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,CAAA;KACtB;AACD,IAAA,OAAO,SAAS,CAAA;AACpB;;AC5LgB,SAAA,MAAM,CAAkB,MAAiB,KAAU;AAEnD,SAAA,eAAe,CAAkB,MAAiB,KAAU;AAE5E,SAAS,aAAa,CAAkB,MAAiB,EAAA;AACrD,IAAA,OAAO,IAAI,IAAI,IAAI,CAAA;AACvB,CAAC;SAEe,WAAW,CAAkB,GAAG,OAAkB;;ACAlD,SAAA,UAAU,CAAC,GAAG,MAAe,EAAA;IACzC,IAAI,MAAM,GAAsB,SAAS,CAAA;AAEzC,IAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;AACxB,QAAA,IAAI,KAAK,IAAI,IAAI,EAAE;YACf,SAAQ;SACX;AACD,QAAA,IAAI,MAAM,IAAI,IAAI,EAAE;AAChB,YAAA,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAA;SAC5B;aAAM;YACH,MAAM,GAAG,EAAE,GAAI,MAAc,EAAE,GAAG,KAAK,EAAE,CAAA;SAC5C;KACJ;AAED,IAAA,OAAO,MAAM,CAAA;AACjB,CAAC;AAED;;;AAGG;AACa,SAAA,UAAU,CAAC,KAAY,EAAE,KAAqB,EAAA;AAC1D,IAAA,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;IAClD,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,CAAA;AACvC,IAAA,OAAO,MAAM,CAAA;AACjB,CAAC;AAED;;AAEG;AACG,SAAU,YAAY,CAAC,KAAY,EAAA;AACrC,IAAA,IAAI,KAAK,CAAC,QAAQ,IAAI,IAAI,EAAE;AACxB,QAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAA;KAC/C;AAED,IAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAA;AACtD,IAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAA;IACjD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,GAAG,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC,CAAA;AACnE,CAAC;SAEe,WAAW,CAAC,KAAY,EAAE,KAAqB,EAAE,QAAwB,EAAA;IACrF,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG,EAAE;AAC3B,QAAA,OAAO,KAAY,CAAA;KACtB;AAED,IAAA,IAAI,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;AACxC,IAAA,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAA;AAE3B,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;AAChC,IAAA,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,CAAA;AAEzB,IAAA,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;AAChD,CAAC;AAEe,SAAA,UAAU,CAAC,KAAY,EAAE,UAAiB,EAAA;IACtD,OAAO;AACH,QAAA,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC;AAC9C,QAAA,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC;QACxC,QAAQ,EAAE,KAAK,CAAC,QAAQ;KAC3B,CAAA;AACL,CAAC;AAEe,SAAA,OAAO,CAAC,CAAQ,EAAE,CAAQ,EAAA;IACtC,OAAO,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,CAAA;AAC9E,CAAC;AAED;AACA;AACA;AACA;;AClFA,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;AAiBb,SAAA,aAAa,CAAkB,KAAe,EAAE,QAA2B,EAAA;AACvF,IAAA,MAAM,SAAS,GAAsB;QACjC,QAAQ,EAAE,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC;QAC1D,QAAQ,EAAE,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC;QAC1D,SAAS,EAAE,eAAe,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC;QAC9D,QAAQ,EAAE,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC;KAC3D,CAAA;AAED,IAAA,MAAM,OAAO,GAAG,QAAQ,IAAI,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAM,QAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;IAC1G,IAAI,CAAC,OAAO,EAAE;AACV,QAAA,OAAO,QAAQ,CAAA;KAClB;AAED,IAAA,MAAM,QAAQ,GAAG,CAAC,KAAmB,KAAoB;QACrD,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YACrC,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAA;SACjC;QAED,IAAI,MAAM,GAAiB,KAAK,CAAA;AAEhC,QAAA,IAAI,SAAS,CAAC,QAAQ,EAAE;YACpB,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;SAC7C;AAED,QAAA,IAAI,SAAS,CAAC,QAAQ,EAAE;YACpB,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAA;SAChD;AAED,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAA;;AAI3B,QAAA,IAAI,SAAS,CAAC,QAAQ,EAAE;AACpB,YAAA,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;SACtC;AAED,QAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;AACnC,KAAC,CAAA;AAED,IAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;AAC5C,QAAA,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,EAAE;AAC/B,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,QAAQ,EAAE,KAAK;AAClB,SAAA,CAAC,CAAA;KACL;AAED,IAAA,OAAO,QAAQ,CAAA;AACnB,CAAC;AAMD,SAAS,cAAc,CACnB,MAAgC,EAChC,IAAwB,EAAA;IAExB,OAAO,WAAW,CAAI,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;AACjD,CAAC;AAMD,SAAS,cAAc,CACnB,MAAgC,EAChC,IAAwB,EAAA;IAExB,OAAO,WAAW,CAAI,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;AAC/C,CAAC;AAMD,SAAS,eAAe,CACpB,MAAgC,EAChC,IAAyB,EAAA;IAEzB,OAAO,WAAW,CAAI,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;AAChD,CAAC;AAMD,SAAS,aAAa,CAClB,KAA2B,EAC3B,IAAuB,EAAA;IAEvB,OAAO,WAAW,CAAI,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;AAC/C,CAAC;AAED,SAAS,OAAO,CAAkB,KAAY,EAAA;AAC1C,IAAA,OAAO,CAAC,KAAU,KAAK,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;AAC9D,CAAC;AAED,SAAS,WAAW,CAAkB,KAAU,EAAE,IAAS,EAAE,QAAa,EAAA;AACtE,IAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACf,QAAA,OAAO,SAAS,CAAA;KACnB;AAED,IAAA,IAAI,IAAI,IAAI,IAAI,EAAE;;AAEd,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE;AACtD,YAAA,OAAO,IAAI,CAAA;SACd;KACJ;AAED,IAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAQ,CAAA;AACnC,IAAA,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE;AAC/B,QAAA,KAAK,EAAE,KAAK;AACZ,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,QAAQ,EAAE,KAAK;AAClB,KAAA,CAAC,CAAA;AACF,IAAA,OAAO,IAAI,CAAA;AACf;;MC7Ha,SAAS,CAAA;IAClB,OAAO,MAAM,CAAkB,KAAwB,EAAA;AACnD,QAAA,IAAI,KAAK,YAAY,SAAS,EAAE;AAC5B,YAAA,OAAO,KAAK,CAAA;SACf;aAAM;AACH,YAAA,OAAO,IAAI,SAAS,CAAC,KAAK,CAAC,CAAA;SAC9B;KACJ;AAIQ,IAAA,OAAO,CAAuB;AAEvC,IAAA,WAAA,CAAY,KAAwB,EAAA;AAChC,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;QAEtB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;YACtB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;AAChD,YAAA,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,EAAE;AACvB,gBAAA,IAAI,CAAC,OAAO,GAAG,CAAC,KAAa,EAAE,IAAO,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;aACjF;iBAAM;AACH,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAA;aAC/B;YACD,IAAI,CAAC,OAAO,GAAG,CAAC,IAAO,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;SAClE;aAAM;AACH,YAAA,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,EAAE;AACvB,gBAAA,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAA;aAChF;iBAAM;AACH,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAA;aAC/B;SACJ;KACJ;IAED,OAAO,CAAC,CAAI,EAAE,CAAI,EAAA;AACd,QAAA,OAAO,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;KACvB;IAED,cAAc,CAAC,CAAkB,EAAE,CAAkB,EAAA;QACjD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE;AACxB,YAAA,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,CAAA;SAChC;AAED,QAAA,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,EAAE;YACpC,OAAO,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,CAAA;SAC5C;AAED,QAAA,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,EAAE;YACpC,OAAO,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,CAAA;SAC5C;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAA;KAC3E;IAED,YAAY,CAAC,CAAI,EAAE,CAAI,EAAA;AACnB,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE;YACtB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE;AACxB,gBAAA,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,CAAA;aAChC;AACD,YAAA,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;SAC7C;QACD,OAAO,CAAC,IAAI,CAAC,iCAAiC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;AACrD,QAAA,OAAO,KAAK,CAAA;KACf;AAED,IAAA,YAAY,CAAC,GAA4B,EAAA;AACrC,QAAA,IAAI,GAAG,YAAY,YAAY,EAAE;AAC7B,YAAA,OAAO,GAAG,CAAA;SACb;AAED,QAAA,IAAI,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,GAAG,CAAC,KAAK,IAAI,IAAI,EAAE;AACtC,YAAA,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAA;SACjE;AAED,QAAA,IAAI,GAAG,CAAC,GAAG,IAAI,IAAI,EAAE;YACjB,MAAM,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAyB,CAAA;AAEvF,YAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;gBACrB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACxB,oBAAA,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;iBACxD;gBAED,IAAI,QAAQ,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACtC,oBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,+CAAA,EAAkD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAA,CAAG,CAAC,CAAA;iBAC5F;gBACD,OAAO,IAAI,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;aAChD;iBAAM;AACH,gBAAA,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAA;aAC7C;SACJ;AAED,QAAA,IAAI,GAAG,CAAC,KAAK,IAAI,IAAI,EAAE;AACnB,YAAA,OAAO,IAAI,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;SACxC;AAED,QAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;KACpD;AACJ,CAAA;MAEqB,YAAY,CAAA;AAI9B,IAAA,OAAO,CAAsB;IAC7B,QAAQ,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE;YACtB,QAAQ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,EAAC;SAC3C;QACD,OAAO,IAAI,CAAC,OAAO,CAAA;KACtB;AAGJ,CAAA;AAEK,MAAO,aAAc,SAAQ,YAAY,CAAA;AAG3C,IAAA,KAAK,CAAmB;IACxB,WAAY,CAAA,GAAyB,EAAE,IAAuB,EAAA;AAC1D,QAAA,KAAK,EAAE,CAAA;AACP,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;AACd,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;KACpB;IAES,SAAS,GAAA;QACf,MAAM,MAAM,GAAG,EAAS,CAAA;AACxB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxC,YAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;SACtC;AACD,QAAA,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAA;KAC1B;AACJ,CAAA;AAEK,MAAO,eAAgB,SAAQ,YAAY,CAAA;AAG7C,IAAA,WAAA,CAAY,KAAa,EAAA;AACrB,QAAA,KAAK,EAAE,CAAA;AACP,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;KACrB;IAES,SAAS,GAAA;AACf,QAAA,OAAO,CAAC,IAAS,EAAE,KAAa,KAAK,IAAI,CAAC,KAAK,KAAK,KAAK,CAAA;KAC5D;AACJ,CAAA;AAEK,MAAO,WAA6B,SAAQ,SAAY,CAAA;AAC1D,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,KAAa,KAAK,KAAK,EAAE,CAAC,CAAA;KACzD;AACJ;;MCjKqB,eAAe,CAAA;AAmDpC;;ACtDK,MAAO,WAA6B,SAAQ,eAAkB,CAAA;AACvD,IAAA,KAAK,GAAG,IAAI,eAAe,CAAuB,EAAE,CAAC,CAAA;IAErD,WAAW,CAAC,KAAY,EAAE,KAAmB,EAAA;AAClD,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAA;QAC5D,OAAO,IAAI,CAAC,KAAK,CAAA;KACpB;AAEQ,IAAA,QAAQ,CAAC,KAAY,EAAA;QAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAClB,GAAG,CAAC,IAAI,IAAG;YACP,IAAI,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE;AACnE,gBAAA,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;AAC1C,oBAAA,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE;AACjB,wBAAA,OAAO,KAAK,CAAA;qBACf;iBACJ;AACD,gBAAA,OAAO,IAAI,CAAA;aACd;iBAAM;AACH,gBAAA,OAAO,KAAK,CAAA;aACf;SACJ,CAAC,CACL,CAAA;KACJ;AAEQ,IAAA,QAAQ,CAAC,KAAY,EAAA;QAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;KAC/D;AAEQ,IAAA,GAAG,CAAC,GAAiB,EAAA;QAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAA;KACjE;AAEQ,IAAA,OAAO,CAAC,GAAiB,EAAA;QAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAA;KACtE;IAEQ,MAAM,CAAC,GAAiB,EAAE,IAAO,EAAA;AACtC,QAAA,OAAO,aAAa,CAAC;AACjB,YAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;YACxB,IAAI,EAAE,IAAI,CAAC,KAAK;AACnB,SAAA,CAAC,CAAC,IAAI,CACH,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAI;AACpB,YAAA,IAAI,KAAK,GAAG,CAAC,EAAE;AACX,gBAAA,OAAO,KAAK,CAAA;aACf;YACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AAC5E,YAAA,OAAO,KAAK,CAAA;SACf,CAAC,CACL,CAAA;KACJ;AAEQ,IAAA,cAAc,CAAC,GAAiB,EAAE,IAAO,EAAE,QAAiB,EAAA;AACjE,QAAA,OAAO,aAAa,CAAC;AACjB,YAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;YACxB,IAAI,EAAE,IAAI,CAAC,KAAK;AACnB,SAAA,CAAC,CAAC,IAAI,CACH,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAI;AACpB,YAAA,IAAI,KAAK,GAAG,CAAC,EAAE;gBACX,KAAK,GAAG,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAA;aACjF;YACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AAC5E,YAAA,OAAO,KAAK,CAAA;SACf,CAAC,CACL,CAAA;KACJ;AAEQ,IAAA,GAAG,CAAC,GAAiB,EAAA;AAC1B,QAAA,OAAO,aAAa,CAAC;AACjB,YAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;YACxB,IAAI,EAAE,IAAI,CAAC,KAAK;AACnB,SAAA,CAAC,CAAC,IAAI,CACH,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAI;AACpB,YAAA,IAAI,KAAK,GAAG,CAAC,EAAE;AACX,gBAAA,OAAO,KAAK,CAAA;aACf;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAC5B,YAAA,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;AACvB,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AACvB,YAAA,OAAO,KAAK,CAAA;SACf,CAAC,CACL,CAAA;KACJ;IAEQ,KAAK,GAAA;QACV,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;SACtB;AACD,QAAA,OAAO,EAAE,CAAC,SAAS,CAAC,CAAA;KACvB;AACJ;;AC7FK,MAAgB,QAAY,SAAQ,eAA4C,CAAA;;AAGlF,IAAA,GAAG,CAAC,KAAoB,EAAE,KAAA,GAAiB,IAAI,EAAA;QAC3C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;AAC7B,YAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACf,gBAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAI,KAAK,GAAG,SAAS,CAAI,KAAK,CAAC,GAAG,KAAK,CAAQ,CAAC,CAAA;aACvE;iBAAM;AACH,gBAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;aACvB;SACJ;KACJ;IAED,GAAG,GAAA;QACC,OAAO,IAAI,CAAC,KAAK,CAAA;KACpB;IAED,GAAG,GAAA;AACC,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;KACtB;AAMJ,CAAA;MAEqB,gBAAgB,CAAA;AAIrC,CAAA;SAEe,cAAc,CAAC,MAAgC,EAAE,GAAG,KAAwB,EAAA;AACxF,IAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;QAClB,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;KACjF;SAAM;AACH,QAAA,OAAO,KAAK,CAAC,CAAC,CAAQ,CAAA;KACzB;AACL;;ACtCM,MAAO,cAAkB,SAAQ,QAAW,CAAA;AACrC,IAAA,MAAM,CAAC,KAAQ,EAAA;AACpB,QAAA,IAAI,CAAC,GAAG,CAAC,WAAW,CAAE,IAAuB,CAAC,KAAK,EAAE,KAAK,CAAQ,EAAE,KAAK,CAAC,CAAA;KAC7E;AACJ,CAAA;AAEK,MAAO,cAAkB,SAAQ,gBAAmB,CAAA;AAA1D,IAAA,WAAA,GAAA;;AACa,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,cAAc,CAAI,SAAS,CAAC,CAAA;AACzC,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,cAAc,CAAI,SAAS,CAAC,CAAA;AACzC,QAAA,IAAA,CAAA,OAAO,GAA4C,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;KACpH;AAAA;;ACTK,MAAO,cAAkB,SAAQ,QAAW,CAAA;AACrC,IAAA,MAAM,CAAC,KAAQ,EAAA;AACpB,QAAA,IAAI,CAAC,GAAG,CAAC,WAAW,CAAE,IAAuB,CAAC,KAAK,EAAE,KAAY,CAAQ,EAAE,KAAK,CAAC,CAAA;KACpF;AACJ,CAAA;AAIK,MAAO,cAAgC,SAAQ,gBAAmB,CAAA;AAAxE,IAAA,WAAA,GAAA;;AACa,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,cAAc,CAAI,SAAS,CAAC,CAAA;AACzC,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,cAAc,CAAI,SAAS,CAAC,CAAA;;AAEzC,QAAA,IAAA,CAAA,OAAO,GAA4C,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;KA+BpH;AA7BG,IAAA,EAAE,CAAC,IAAY,EAAA;AACX,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAY,MAAM,OAAO,IAAI,IAAI,GAAG,SAAS,GAAG,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;KAC7G;AAED,IAAA,WAAW,CAAC,IAAY,EAAA;AACpB,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CACrB,GAAG,CAAC,KAAK,IAAG;AACR,YAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACf,gBAAA,OAAO,SAAS,CAAA;aACnB;AAAM,iBAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAClC,gBAAA,OAAO,KAAK,CAAA;aACf;iBAAM;gBACH,OAAO,KAAK,CAAC,GAAG,CAAA;aACnB;SACJ,CAAC,CACL,CAAA;KACJ;AAED,IAAA,KAAK,CAAC,IAAY,EAAA;QACd,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAA;KAC1D;AAED,IAAA,KAAK,CAAC,IAAY,EAAA;AACd,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAsB,KAAA,yBAAC,CAAC,CAAA;KACxE;AAED,IAAA,MAAM,CAAC,IAAY,EAAA;AACf,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAuB,MAAA,0BAAC,CAAC,CAAA;KACzE;AACJ;;AC5CK,MAAO,cAAkB,SAAQ,QAAW,CAAA;AACrC,IAAA,MAAM,CAAC,KAAQ,EAAA;AACpB,QAAA,IAAI,CAAC,GAAG,CAAC,WAAW,CAAE,IAAuB,CAAC,KAAK,EAAE,KAAK,CAAQ,EAAE,KAAK,CAAC,CAAA;KAC7E;AACJ,CAAA;AAEK,MAAO,cAAkB,SAAQ,gBAAmB,CAAA;AAA1D,IAAA,WAAA,GAAA;;AACa,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,cAAc,CAAI,SAAS,CAAC,CAAA;AACzC,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,cAAc,CAAI,SAAS,CAAC,CAAA;AACzC,QAAA,IAAA,CAAA,OAAO,GAA4C,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;KACpH;AAAA;;ACVK,MAAO,eAAmB,SAAQ,QAAW,CAAA;AACtC,IAAA,MAAM,CAAC,KAAQ,EAAA;AACpB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,CAAE,IAAuB,CAAC,KAAK,EAAE,KAAK,CAAQ,EAAE,KAAK,CAAC,CAAA;KAC9E;AACJ,CAAA;AAEK,MAAO,eAAmB,SAAQ,gBAAmB,CAAA;AAA3D,IAAA,WAAA,GAAA;;AACa,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,eAAe,CAAI,SAAS,CAAC,CAAA;AAC1C,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,eAAe,CAAI,SAAS,CAAC,CAAA;AAC1C,QAAA,IAAA,CAAA,OAAO,GAA4C,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;KACrH;AAAA;;ACcD,MAAM,aAAa,GAAG,EAAE,CAAA;AAIlB,MAAO,UAA4B,SAAQA,YAA4B,CAAA;AAShE,IAAA,UAAU,CAKI;AAEd,IAAA,MAAM,CAA8B;AAQpC,IAAA,OAAO,CAAuC;IA6CvD,WACoB,CAAA,QAAyB,EACzC,KAA0B,EAAA;AAE1B,QAAA,KAAK,EAAE,CAAA;QAHS,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAiB;AArEpC,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAA;AAC3C,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,eAAe,CAAqB,SAAS,CAAC,CAAA;AAE3D,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,cAAc,EAAa,CAAA;AACxC,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,cAAc,EAAa,CAAA;AACxC,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,cAAc,EAAa,CAAA;AACxC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,eAAe,EAAc,CAAA;QAE3C,IAAU,CAAA,UAAA,GAAG,aAAa,CAAC;AAChC,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;AAC3B,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;AAC3B,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;AAC3B,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;SAChC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;AAEd,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,aAAa,CAAQ,CAAC,CAAC,CAAA;QACpC,IAAM,CAAA,MAAA,GAAsB,IAAI,CAAC,MAAM,CAAC,IAAI,CACjD,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EACnD,oBAAoB,CAAC,OAAO,CAAC,EAC7B,GAAG,CAAC,KAAK,IAAI,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAC1C,WAAW,CAAC,CAAC,CAAC,CACjB,CAAA;AAEQ,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,eAAe,CAAO,SAAS,CAAC,CAAA;AAE9C,QAAA,IAAA,CAAA,MAAM,GAA2B,aAAa,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CACzG,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;;;QAG9B,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,EACjE,SAAS,CAAC,SAAS,IACf,IAAI,CAAC,MAAM,CAAC,IAAI,CACZ,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAC9B,GAAG,CAAC,KAAK,IAAG;AACR,YAAA,OAAO,EAAE,GAAG,SAAS,EAAE,KAAK,EAAE,CAAA;SACjC,CAAC,CACL,CACJ,EACD,WAAW,CAAC,CAAC,CAAC,CACjB,CAAA;QAEQ,IAAM,CAAA,MAAA,GAAqC,IAAI,CAAC,MAAM,CAAC,IAAI,CAChE,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAC9B,YAAY,CAAC,aAAa,CAAC,EAC3B,SAAS,CAAC,KAAK,IACX,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CACjC,SAAS,CAAC,QAAQ,IAAG;YACjB,IAAI,QAAQ,EAAE;gBACV,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;aAC1C;iBAAM;AACH,gBAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CACtC,SAAS,CAAC,MAAM,IAAG;AACf,oBAAA,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,EAAE;wBACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;qBACjC;AACD,oBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;AAC5D,iBAAC,CAAC,EACF,IAAI,CAAC,CAAC,CAAC,CACV,CAAA;aACJ;SACJ,CAAC,CACL,CACJ,EACD,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EACpC,WAAW,CAAC,CAAC,CAAC,CACjB,CAAA;AAwED,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,GAAG,EAAmC,CAAA;AAhEhD,QAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACf,YAAA,KAAK,GAAG,IAAI,WAAW,EAAE,CAAA;SAC5B;AACD,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;KACrB;AAED,IAAA,QAAQ,CAAC,KAAY,EAAA;AACjB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AACvB,QAAA,OAAO,IAAI,CAAA;KACd;IAED,GAAG,GAAA;AACC,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAA;KACpD;IAED,MAAM,GAAA;AACF,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;KACtB;AAED,IAAA,OAAO,CAAC,GAAa,EAAA;AACjB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;AACjD,QAAA,OAAO,IAAI,CAAC,WAAW,CACnB,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAC7B,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAChD,CAAA;KACJ;AAED,IAAA,eAAe,CAAC,GAAa,EAAA;AACzB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;QACjD,OAAO,IAAI,CAAC,WAAW,CACnB,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,EACzE,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CACpD,CAAA;KACJ;IAED,UAAU,CAAC,GAAa,EAAE,cAAuB,EAAA;AAC7C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;AACjD,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CACnB,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EACxD,SAAS,CAAC,IAAI,IACV,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CACxG,EACD,IAAI,CAAC,CAAC,CAAC,CACV,CAAA;KACJ;IAED,WAAW,CACP,OAA2C,EAC3C,MAA0C,EAAA;QAE1C,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CACnB,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,MAAM,IAAI,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAC9G,CAAA;KACJ;AAED,IAAA,QAAQ,CAAC,IAAa,EAAA;AAClB,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;YACvB,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,EAAE;AAC3B,gBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;aACxB;SACJ;KACJ;AAED,IAAA,OAAO,CAA6C;AAE3C,IAAA,OAAO,CAAC,gBAAkC,EAAA;AAC/C,QAAA,MAAM,KAAK,GAAG,IAAI,OAAO,EAAQ,CAAA;QAEjC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,CAAA;QAC1C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAA;AAEzC,QAAA,OAAO,IAAI,UAAU,CAAC,CAAC,UAAkD,KAAI;AACzE,YAAA,MAAM,IAAI,GAAG,gBAAgB,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YAC/D,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;AAE9C,YAAA,OAAO,MAAK;gBACR,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,KAAK,KAAK,EAAE;AAC9C,oBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;iBACxC;gBACD,IAAI,CAAC,WAAW,EAAE,CAAA;gBAClB,IAAI,CAAC,WAAW,EAAE,CAAA;AACtB,aAAC,CAAA;SACJ,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;KAC5B;AAEQ,IAAA,UAAU,CAAC,gBAAkC,EAAA;QAClD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,CAAA;AAC1C,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;KACxC;AACJ;;AC3KD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BG;AAMG,MAAO,eACT,SAAQA,YAA4B,CAAA;IAGpC,IACI,KAAK,CAAC,KAAyB,EAAA;AAC/B,QAAA,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,CAAA;AAC7B,QAAA,IAAI,CAAC,SAAS,GAAG,gBAAgB,CAAI,KAAK,CAAC;AACtC,aAAA,IAAI,CACD,GAAG,CAAC,CAAC,IAAG;AACJ,YAAA,IAAI,CAAC,IAAI,IAAI,EAAE;AACX,gBAAA,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;aACxC;AACL,SAAC,CAAC,CACL;AACA,aAAA,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;KAC9B;AAED,IAAA,IAAI,KAAK,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,SAAS,EAAG,CAAA;KAC3B;AAED,IAAA,SAAS,CAAe;AACf,IAAA,MAAM,CAAsC;AAE5C,IAAA,SAAS,CAAwB;IAa1C,IACI,MAAM,CAAC,KAAgB,EAAA;AACvB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;KAC3B;AACQ,IAAA,OAAO,CAAkC;IAElD,IACI,MAAM,CAAC,KAAgB,EAAA;AACvB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;KAC3B;AACQ,IAAA,OAAO,CAAkC;IAElD,IACI,OAAO,CAAC,KAAiB,EAAA;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;KAC5B;AACQ,IAAA,QAAQ,CAAmC;IAEpD,IACI,MAAM,CAAC,KAAgB,EAAA;AACvB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;KAC3B;AACQ,IAAA,OAAO,CAAkC;AAEzC,IAAA,KAAK,CAAqB;AAEnC,IAAA,WAAA,CAAwB,IAAgB,EAAA;AACpC,QAAA,KAAK,EAAE,CAAA;AA1CF,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,aAAa,CAAgB,CAAC,CAAC,CAAA;QAC5C,IAAM,CAAA,MAAA,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAA;AAC/C,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAEjC,IAAM,CAAA,MAAA,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAC9B,SAAS,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,EAChC,KAAK,EAAE,CACV,CAAA;QAEQ,IAAK,CAAA,KAAA,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAC7B,SAAS,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,EAC/B,KAAK,EAAE,CACV,CAAA;AACQ,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAA;AAM1E,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,aAAa,CAAY,CAAC,CAAC,CAAA;AAMzC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,aAAa,CAAY,CAAC,CAAC,CAAA;AAMzC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,aAAa,CAAa,CAAC,CAAC,CAAA;AAM3C,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,aAAa,CAAY,CAAC,CAAC,CAAA;AAEzC,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,YAAY,EAAE,CAAA;AAkCnC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,GAAG,EAAmC,CAAA;AA7BhD,QAAA,IAAI,IAAI,IAAI,IAAI,EAAE;AACd,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC,CAAA;SACvD;AAED,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CACV,aAAa,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAI;YACpF,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;SAChC,CAAC,CACL,CAAA;AAED,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CACV,aAAa,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAI;YACpF,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;SAChC,CAAC,CACL,CAAA;AAED,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CACV,aAAa,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAI;YACvF,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;SAClC,CAAC,CACL,CAAA;AAED,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CACV,aAAa,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAI;YACpF,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;SAChC,CAAC,CACL,CAAA;KACJ;AAED,IAAA,OAAO,CAA6C;AAE3C,IAAA,OAAO,CAAC,gBAAkC,EAAA;AAC/C,QAAA,MAAM,KAAK,GAAG,IAAI,OAAO,EAAQ,CAAA;QAEjC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,CAAA;QAC1C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAA;AAEzC,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CACnB,SAAS,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,EACnD,SAAS,CAAC,KAAK,CAAC,EAChB,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CACxD,CAAA;KACJ;AAEQ,IAAA,UAAU,CAAC,gBAAkC,EAAA;QAClD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,CAAA;AAC1C,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;KACxC;IAED,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,CAAA;AAC7B,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;AAC1B,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAA;KAC3B;8GAxHQ,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,CAAA,cAAA,EAAA,OAAA,CAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAL3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,QAAQ,EAAE,cAAc;AAC3B,iBAAA,CAAA;;0BAiEgB,QAAQ;yCA3DjB,KAAK,EAAA,CAAA;sBADR,KAAK;AAAC,gBAAA,IAAA,EAAA,CAAA,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,CAAA;gBAmC5C,MAAM,EAAA,CAAA;sBADT,KAAK;gBAOF,MAAM,EAAA,CAAA;sBADT,KAAK;gBAOF,OAAO,EAAA,CAAA;sBADV,KAAK;gBAOF,MAAM,EAAA,CAAA;sBADT,KAAK;;AAmEV,SAAS,gBAAgB,CAAkB,KAAyB,EAAA;AAChE,IAAA,IAAI,KAAK,YAAY,eAAe,EAAE;QAClC,OAAO,KAAK,CAAC,MAAM,CAAA;KACtB;AAAM,SAAA,IAAI,KAAK,YAAY,UAAU,EAAE;AACpC,QAAA,OAAO,EAAE,CAAC,KAAK,CAAC,CAAA;KACnB;AAAM,SAAA,IAAI,KAAK,YAAY,YAAY,EAAE;AACtC,QAAA,OAAO,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAA;KAClC;SAAM;QACH,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAA;KACjE;AACL;;MC5LsB,YAAY,CAAA;AA0B9B;;AAEG;AACH,IAAA,UAAU,CAAC,KAAY,EAAA;AACnB,QAAA,OAAO,EAAE,CAAC,KAAK,CAAC,CAAA;KACnB;AAED;;AAEG;AACH,IAAA,YAAY,CAAC,KAA0B,EAAA;AACnC,QAAA,OAAO,IAAI,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;KACrC;AACJ;;ACzCK,MAAgB,aAA+B,SAAQ,YAAe,CAAA;AAKxE,IAAA,SAAS,CAAmB;AAE5B,IAAA,WAAA,CAAY,IAAuB,EAAA;AAC/B,QAAA,KAAK,EAAE,CAAA;QAPO,IAAO,CAAA,OAAA,GAAG,KAAK,CAAA;QAQ7B,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;KACrC;AAED,IAAA,QAAQ,CAAC,OAAiB,EAAA;AACtB,QAAA,QAAQ,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAC;KACnE;AAEQ,IAAA,SAAS,CAAC,OAAiB,EAAA;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;AACnC,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;KACrD;IAEQ,SAAS,CAAC,GAAiB,EAAE,OAAiB,EAAA;AACnD,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAA;KACpF;IAEQ,aAAa,CAAC,GAAiB,EAAE,OAAiB,EAAA;AACvD,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAA;KACzF;AAEQ,IAAA,UAAU,CAAC,KAAY,EAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,EAAE,EAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,MAAM,EAAC,CAAC,CAAC,CAAC,CAAA;KACnG;AACJ;;AChCK,MAAO,aAA+B,SAAQ,aAAgB,CAAA;IAGhE,WAAY,CAAA,IAAuB,EAAE,KAAmB,EAAA;QACpD,KAAK,CAAC,IAAI,CAAC,CAAA;AACX,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,CAAA;KAC1B;AACJ;;ACRK,MAAO,kBAAoC,SAAQ,aAAgB,CAAA;IAGrE,WAAY,CAAA,IAAuB,EAAE,GAA6B,EAAA;QAC9D,KAAK,CAAC,IAAI,CAAC,CAAA;AACX,QAAA,IAAI,CAAC,MAAM,GAAG,GAAG,CAAA;KACpB;AACJ;;ACZD;;AAEG;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ngutil/data",
3
- "version": "0.0.15",
3
+ "version": "0.0.17",
4
4
  "publishConfig": {
5
5
  "access": "public",
6
6
  "directory": "../../dist/packages/data/"
@@ -11,7 +11,7 @@
11
11
  "lodash": "^4.17.21",
12
12
  "utility-types": "^3.11.0",
13
13
  "rxjs": "^7.8.1",
14
- "@ngutil/common": "0.0.15"
14
+ "@ngutil/common": "0.0.17"
15
15
  },
16
16
  "sideEffects": false,
17
17
  "module": "fesm2022/ngutil-data.mjs",
@@ -1,8 +1,8 @@
1
1
  import { Observable } from "rxjs";
2
2
  import { DeepReadonly } from "@ngutil/common";
3
+ import { Model } from "../../model";
3
4
  import { sorterFind } from "../../query";
4
5
  import { Property, PropertyCombined } from "./abstract";
5
- import { Model } from "../../model";
6
6
  export declare class SorterProperty<T> extends Property<T> {
7
7
  update(other: T): void;
8
8
  }
@@ -19,7 +19,6 @@ export declare class DataSource<T extends Model> extends CdkDataSource<T | undef
19
19
  readonly slimer: SlimerCombined<any>;
20
20
  readonly grouper: GrouperCombined<any>;
21
21
  readonly slice$: Observable<Slice>;
22
- readonly reset$: Observable<unknown>;
23
22
  readonly query$: Observable<DSQuery<T>>;
24
23
  readonly items$: Observable<PartialCollection<T>>;
25
24
  readonly store: CollectionStore<T>;