@ngutil/aria 0.0.56 → 0.0.57

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.
@@ -10,7 +10,7 @@ export class AbstractUiState {
10
10
  this.yes = computed(() => {
11
11
  const when = this.when();
12
12
  if (when !== NOTSET) {
13
- return this.state.is(this.name, `${when},self`);
13
+ return this.state.is(`${this.name}.self || (${when})`);
14
14
  }
15
15
  return this.state.is(this.name);
16
16
  });
@@ -20,7 +20,6 @@ export class AbstractUiState {
20
20
  if (input !== NOTSET) {
21
21
  this.state.set(name, !!coerceBoolAttr(input));
22
22
  }
23
- this.yes();
24
23
  }, { allowSignalWrites: true });
25
24
  }
26
25
  set(value, source) {
@@ -38,4 +37,4 @@ export class AbstractUiState {
38
37
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: AbstractUiState, decorators: [{
39
38
  type: Directive
40
39
  }], ctorParameters: () => [{ type: undefined }] });
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hcmlhL3NyYy91aS1zdGF0ZS9hYnN0cmFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFBO0FBSTNFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUUvQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFBOztBQUVwQyxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQVEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0FBRzNDLE1BQU0sT0FBZ0IsZUFBZTtJQWVqQyxZQUFxQixJQUFPO1FBQVAsU0FBSSxHQUFKLElBQUksQ0FBRztRQWRuQixVQUFLLEdBQWUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBS25DLFFBQUcsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3pCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQTtZQUN4QixJQUFJLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDbEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQTtZQUNuRCxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDbkMsQ0FBQyxDQUFDLENBQUE7UUFDTyxPQUFFLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUE7UUFHckMsTUFBTSxDQUNGLEdBQUcsRUFBRTtZQUNELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQTtZQUMxQixJQUFJLEtBQUssS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtZQUNqRCxDQUFDO1lBQ0QsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFBO1FBQ2QsQ0FBQyxFQUNELEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQzlCLENBQUE7SUFDTCxDQUFDO0lBRUQsR0FBRyxDQUFDLEtBQWMsRUFBRSxNQUFjO1FBQzlCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQzVDLENBQUM7SUFFRCxTQUFTLENBQUMsTUFBYztRQUNwQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDbEQsQ0FBQztJQUVELElBQUksQ0FBSSxVQUF5QixFQUFFLE1BQWM7UUFDN0MsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUN6RCxDQUFDOzhHQXRDaUIsZUFBZTtrR0FBZixlQUFlOzsyRkFBZixlQUFlO2tCQURwQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcHV0ZWQsIERpcmVjdGl2ZSwgZWZmZWN0LCBpbmplY3QsIFNpZ25hbCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCJcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCJcblxuaW1wb3J0IHsgY29lcmNlQm9vbEF0dHIgfSBmcm9tIFwiQG5ndXRpbC9jb21tb25cIlxuXG5pbXBvcnQgeyBVaVN0YXRlIH0gZnJvbSBcIi4vdWktc3RhdGVcIlxuXG5leHBvcnQgY29uc3QgTk9UU0VUOiBhbnkgPSBTeW1ib2woXCJOT1RTRVRcIilcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RVaVN0YXRlPE4gZXh0ZW5kcyBzdHJpbmc+IHtcbiAgICByZWFkb25seSBzdGF0ZTogVWlTdGF0ZTxOPiA9IGluamVjdChVaVN0YXRlKVxuXG4gICAgYWJzdHJhY3QgcmVhZG9ubHkgaW5wdXQ6IFNpZ25hbDxib29sZWFuPlxuICAgIGFic3RyYWN0IHJlYWRvbmx5IHdoZW46IFNpZ25hbDxzdHJpbmc+XG5cbiAgICByZWFkb25seSB5ZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHdoZW4gPSB0aGlzLndoZW4oKVxuICAgICAgICBpZiAod2hlbiAhPT0gTk9UU0VUKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5pcyh0aGlzLm5hbWUsIGAke3doZW59LHNlbGZgKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLmlzKHRoaXMubmFtZSlcbiAgICB9KVxuICAgIHJlYWRvbmx5IG5vID0gY29tcHV0ZWQoKCkgPT4gIXRoaXMueWVzKCkpXG5cbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSBuYW1lOiBOKSB7XG4gICAgICAgIGVmZmVjdChcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMuaW5wdXQoKVxuICAgICAgICAgICAgICAgIGlmIChpbnB1dCAhPT0gTk9UU0VUKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUuc2V0KG5hbWUsICEhY29lcmNlQm9vbEF0dHIoaW5wdXQpKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnllcygpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgICAgIClcbiAgICB9XG5cbiAgICBzZXQodmFsdWU6IGJvb2xlYW4sIHNvdXJjZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc3RhdGUuc2V0KHRoaXMubmFtZSwgdmFsdWUsIHNvdXJjZSlcbiAgICB9XG5cbiAgICBpbnRlcmNlcHQoc291cmNlOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUuaW50ZXJjZXB0KHRoaXMubmFtZSwgc291cmNlKVxuICAgIH1cblxuICAgIHdyYXA8VD4ob2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxUPiwgc291cmNlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUud3JhcChvYnNlcnZhYmxlLCB0aGlzLm5hbWUsIHNvdXJjZSlcbiAgICB9XG59XG4iXX0=
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hcmlhL3NyYy91aS1zdGF0ZS9hYnN0cmFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFBO0FBSTNFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUUvQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFBOztBQUVwQyxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQVEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0FBRzNDLE1BQU0sT0FBZ0IsZUFBZTtJQWVqQyxZQUFxQixJQUFPO1FBQVAsU0FBSSxHQUFKLElBQUksQ0FBRztRQWRuQixVQUFLLEdBQWUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBS25DLFFBQUcsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3pCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQTtZQUN4QixJQUFJLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDbEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLGFBQWEsSUFBSSxHQUFHLENBQUMsQ0FBQTtZQUMxRCxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDbkMsQ0FBQyxDQUFDLENBQUE7UUFDTyxPQUFFLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUE7UUFHckMsTUFBTSxDQUNGLEdBQUcsRUFBRTtZQUNELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQTtZQUMxQixJQUFJLEtBQUssS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtZQUNqRCxDQUFDO1FBQ0wsQ0FBQyxFQUNELEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQzlCLENBQUE7SUFDTCxDQUFDO0lBRUQsR0FBRyxDQUFDLEtBQWMsRUFBRSxNQUFjO1FBQzlCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQzVDLENBQUM7SUFFRCxTQUFTLENBQUMsTUFBYztRQUNwQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDbEQsQ0FBQztJQUVELElBQUksQ0FBSSxVQUF5QixFQUFFLE1BQWM7UUFDN0MsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUN6RCxDQUFDOzhHQXJDaUIsZUFBZTtrR0FBZixlQUFlOzsyRkFBZixlQUFlO2tCQURwQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcHV0ZWQsIERpcmVjdGl2ZSwgZWZmZWN0LCBpbmplY3QsIFNpZ25hbCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCJcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCJcblxuaW1wb3J0IHsgY29lcmNlQm9vbEF0dHIgfSBmcm9tIFwiQG5ndXRpbC9jb21tb25cIlxuXG5pbXBvcnQgeyBVaVN0YXRlIH0gZnJvbSBcIi4vdWktc3RhdGVcIlxuXG5leHBvcnQgY29uc3QgTk9UU0VUOiBhbnkgPSBTeW1ib2woXCJOT1RTRVRcIilcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RVaVN0YXRlPE4gZXh0ZW5kcyBzdHJpbmc+IHtcbiAgICByZWFkb25seSBzdGF0ZTogVWlTdGF0ZTxOPiA9IGluamVjdChVaVN0YXRlKVxuXG4gICAgYWJzdHJhY3QgcmVhZG9ubHkgaW5wdXQ6IFNpZ25hbDxib29sZWFuPlxuICAgIGFic3RyYWN0IHJlYWRvbmx5IHdoZW46IFNpZ25hbDxzdHJpbmc+XG5cbiAgICByZWFkb25seSB5ZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHdoZW4gPSB0aGlzLndoZW4oKVxuICAgICAgICBpZiAod2hlbiAhPT0gTk9UU0VUKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5pcyhgJHt0aGlzLm5hbWV9LnNlbGYgfHwgKCR7d2hlbn0pYClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5pcyh0aGlzLm5hbWUpXG4gICAgfSlcbiAgICByZWFkb25seSBubyA9IGNvbXB1dGVkKCgpID0+ICF0aGlzLnllcygpKVxuXG4gICAgY29uc3RydWN0b3IocmVhZG9ubHkgbmFtZTogTikge1xuICAgICAgICBlZmZlY3QoXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmlucHV0KClcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQgIT09IE5PVFNFVCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLnNldChuYW1lLCAhIWNvZXJjZUJvb2xBdHRyKGlucHV0KSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgICAgIClcbiAgICB9XG5cbiAgICBzZXQodmFsdWU6IGJvb2xlYW4sIHNvdXJjZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc3RhdGUuc2V0KHRoaXMubmFtZSwgdmFsdWUsIHNvdXJjZSlcbiAgICB9XG5cbiAgICBpbnRlcmNlcHQoc291cmNlOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUuaW50ZXJjZXB0KHRoaXMubmFtZSwgc291cmNlKVxuICAgIH1cblxuICAgIHdyYXA8VD4ob2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxUPiwgc291cmNlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUud3JhcChvYnNlcnZhYmxlLCB0aGlzLm5hbWUsIHNvdXJjZSlcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,308 @@
1
+ const COMPILE_CACHE = {};
2
+ export function compile(selector) {
3
+ return (COMPILE_CACHE[selector] ??= _compile(parse(selector)));
4
+ }
5
+ class Cursor {
6
+ get ch() {
7
+ return this.data[this.position];
8
+ }
9
+ constructor(data) {
10
+ this.data = data;
11
+ this.position = 0;
12
+ }
13
+ inc(value = 1) {
14
+ this.position += value;
15
+ return this;
16
+ }
17
+ eatWs() {
18
+ let end = this.position;
19
+ while (end < this.data.length && /[ \r\n\t]/.test(this.data[end])) {
20
+ end++;
21
+ }
22
+ this.position = end;
23
+ return this;
24
+ }
25
+ is(ch) {
26
+ if (ch.length === 1) {
27
+ return this.ch === ch;
28
+ }
29
+ const begin = this.position;
30
+ const end = begin + ch.length;
31
+ return this.data.substring(begin, end) === ch;
32
+ }
33
+ eof() {
34
+ return this.position >= this.data.length;
35
+ }
36
+ set(position) {
37
+ this.position = position;
38
+ return this;
39
+ }
40
+ }
41
+ /**
42
+ * expression:
43
+ * - "*": any
44
+ * - "name without dot": top level: eg. "busy" or "disabled", this is equal to "busy.*"
45
+ * - "name with dot": nested: eg. "busy.self" or "busy.loading"
46
+ * - negate: "!busy", "!busy.*", "!busy.save"
47
+ * - OR: "busy.* || !disabled.*"
48
+ * - AND: "busy.* && !disabled.*"
49
+ * - GROUP: "(busy || disabled) && !readonly"
50
+ * - Shorted of multiple source of same base: "busy{load,save}", if one of load or save is true, the result is true
51
+ */
52
+ export function parse(selector) {
53
+ const cursor = new Cursor(selector);
54
+ const res = expression(cursor.eatWs());
55
+ if (res == null) {
56
+ throw new Error(`invalid selector: ${selector}`);
57
+ }
58
+ if (!cursor.eof()) {
59
+ throw new Error(`unexpected charcter: ${selector[res.end]} at ${res.end}`);
60
+ }
61
+ return res;
62
+ }
63
+ function expression(cursor, skip) {
64
+ return binary(cursor) || leftExpr(cursor);
65
+ }
66
+ function leftExpr(cursor) {
67
+ const begin = cursor.position;
68
+ const left = unary(cursor) || group(cursor) || load(cursor);
69
+ if (left != null) {
70
+ return left;
71
+ }
72
+ cursor.set(begin);
73
+ return null;
74
+ }
75
+ function group(cursor) {
76
+ const begin = cursor.position;
77
+ if (cursor.is("(")) {
78
+ const expr = expression(cursor.inc().eatWs());
79
+ if (cursor.eatWs().is(")")) {
80
+ cursor.inc();
81
+ return binary(cursor.eatWs(), expr) || expr;
82
+ }
83
+ }
84
+ cursor.set(begin);
85
+ return null;
86
+ }
87
+ function binary(cursor, left = null) {
88
+ const begin = cursor.position;
89
+ left = left ?? leftExpr(cursor);
90
+ if (left != null) {
91
+ cursor.eatWs();
92
+ const result = and(left, cursor) || or(left, cursor);
93
+ if (result != null) {
94
+ return result;
95
+ }
96
+ }
97
+ cursor.set(begin);
98
+ return null;
99
+ }
100
+ function and(left, cursor) {
101
+ if (cursor.is("&&")) {
102
+ cursor.inc(2);
103
+ const right = expression(cursor.eatWs());
104
+ if (right == null) {
105
+ return null;
106
+ }
107
+ return { type: 5 /* TokenType.And */, left, right, begin: left.begin, end: cursor.position };
108
+ }
109
+ return null;
110
+ }
111
+ function or(left, cursor) {
112
+ if (cursor.is("||")) {
113
+ cursor.inc(2);
114
+ const right = expression(cursor.eatWs());
115
+ if (right == null) {
116
+ return null;
117
+ }
118
+ return { type: 4 /* TokenType.Or */, left, right, begin: left.begin, end: cursor.position };
119
+ }
120
+ return null;
121
+ }
122
+ function unary(cursor) {
123
+ const begin = cursor.position;
124
+ if (cursor.is("!")) {
125
+ const expr = leftExpr(cursor.inc().eatWs());
126
+ if (expr != null) {
127
+ return { type: 3 /* TokenType.Negate */, value: expr, begin, end: cursor.position };
128
+ }
129
+ }
130
+ cursor.set(begin);
131
+ return null;
132
+ }
133
+ function load(cursor) {
134
+ cursor.eatWs();
135
+ const _any = any(cursor);
136
+ if (_any != null) {
137
+ return _any;
138
+ }
139
+ const base = name(cursor);
140
+ if (base == null) {
141
+ return null;
142
+ }
143
+ cursor.eatWs();
144
+ const sub = loadSingle(cursor) || loadMulti(cursor);
145
+ if (sub == null) {
146
+ return base;
147
+ }
148
+ else if (Array.isArray(sub)) {
149
+ return {
150
+ type: 8 /* TokenType.MultiSubscript */,
151
+ base,
152
+ subscripts: sub,
153
+ begin: base.begin,
154
+ end: sub[sub.length - 1].end
155
+ };
156
+ }
157
+ else {
158
+ return { type: 7 /* TokenType.Subscript */, base, subscript: sub, begin: base.begin, end: sub.end };
159
+ }
160
+ }
161
+ function loadSingle(cursor) {
162
+ const begin = cursor.position;
163
+ if (cursor.is(".")) {
164
+ cursor.inc().eatWs();
165
+ const prop = any(cursor) || name(cursor);
166
+ if (prop != null) {
167
+ return prop;
168
+ }
169
+ }
170
+ cursor.set(begin);
171
+ return null;
172
+ }
173
+ function loadMulti(cursor) {
174
+ const begin = cursor.position;
175
+ if (cursor.is("{")) {
176
+ const names = [];
177
+ let entry = null;
178
+ cursor.inc().eatWs();
179
+ while ((entry = name(cursor))) {
180
+ names.push(entry);
181
+ cursor.eatWs();
182
+ if (cursor.is(",")) {
183
+ cursor.inc();
184
+ }
185
+ cursor.eatWs();
186
+ if (cursor.is("}")) {
187
+ if (names.length === 0) {
188
+ throw new Error("expected name");
189
+ }
190
+ cursor.inc();
191
+ return names;
192
+ }
193
+ }
194
+ }
195
+ cursor.set(begin);
196
+ return null;
197
+ }
198
+ function name(cursor) {
199
+ const begin = cursor.position;
200
+ while (!cursor.eof() && isNameCh(cursor.ch)) {
201
+ cursor.inc();
202
+ }
203
+ if (cursor.position > begin) {
204
+ return { type: 2 /* TokenType.Name */, begin, end: cursor.position, value: cursor.data.slice(begin, cursor.position) };
205
+ }
206
+ cursor.set(begin);
207
+ return null;
208
+ }
209
+ function isNameCh(ch) {
210
+ return /[^.,{}()!\s&|]/.test(ch);
211
+ }
212
+ function any(cursor) {
213
+ if (cursor.is("*")) {
214
+ const begin = cursor.position;
215
+ cursor.inc();
216
+ return { type: 1 /* TokenType.Any */, begin, end: cursor.position };
217
+ }
218
+ return null;
219
+ }
220
+ function _compile(ast, parent) {
221
+ switch (ast.type) {
222
+ case 1 /* TokenType.Any */:
223
+ return compileAny(ast, parent);
224
+ case 7 /* TokenType.Subscript */:
225
+ return compileSubscript(ast, parent);
226
+ case 8 /* TokenType.MultiSubscript */:
227
+ return compileMultiSubscript(ast, parent);
228
+ case 2 /* TokenType.Name */:
229
+ return compileName(ast, parent);
230
+ case 3 /* TokenType.Negate */:
231
+ return compileNot(_compile(ast.value, parent));
232
+ case 4 /* TokenType.Or */:
233
+ return compileOr(_compile(ast.left, parent), _compile(ast.right, parent));
234
+ case 5 /* TokenType.And */:
235
+ return compileAnd(_compile(ast.left, parent), _compile(ast.right, parent));
236
+ }
237
+ return () => false;
238
+ }
239
+ function compileAny(ast, parent) {
240
+ if (parent) {
241
+ return v => {
242
+ if (v[parent] == null) {
243
+ return false;
244
+ }
245
+ return Object.values(v[parent]).some(v => v === true);
246
+ };
247
+ }
248
+ else {
249
+ return v => {
250
+ for (const entry of Object.values(v)) {
251
+ if (Object.values(entry).some(v => v === true)) {
252
+ return true;
253
+ }
254
+ }
255
+ return false;
256
+ };
257
+ }
258
+ }
259
+ function compileSubscript(ast, parent) {
260
+ parent ??= ast.base.value;
261
+ if (ast.subscript.type === 1 /* TokenType.Any */) {
262
+ return compileAny(ast.subscript, parent);
263
+ }
264
+ if (ast.subscript.type === 2 /* TokenType.Name */) {
265
+ return compileName(ast.subscript, parent);
266
+ }
267
+ return () => false;
268
+ }
269
+ function compileMultiSubscript(ast, parent) {
270
+ parent ??= ast.base.value;
271
+ const values = ast.subscripts.map(v => compileSubscript({ type: 7 /* TokenType.Subscript */, base: ast.base, subscript: v, begin: v.begin, end: v.end }, parent));
272
+ if (values.length === 1) {
273
+ return values[0];
274
+ }
275
+ else {
276
+ let result = values[0];
277
+ for (let i = 1; i < values.length; i++) {
278
+ result = compileOr(result, values[i]);
279
+ }
280
+ return result;
281
+ }
282
+ }
283
+ function compileName(ast, parent) {
284
+ if (parent) {
285
+ return v => {
286
+ if (v[parent] == null) {
287
+ return false;
288
+ }
289
+ return !!v[parent][ast.value];
290
+ };
291
+ }
292
+ else {
293
+ return v => {
294
+ const many = v[ast.value];
295
+ return many != null && Object.values(many).some(v => v === true);
296
+ };
297
+ }
298
+ }
299
+ function compileNot(compiled) {
300
+ return v => !compiled(v);
301
+ }
302
+ function compileOr(left, right) {
303
+ return v => left(v) || right(v);
304
+ }
305
+ function compileAnd(left, right) {
306
+ return v => left(v) && right(v);
307
+ }
308
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hcmlhL3NyYy91aS1zdGF0ZS9zZWxlY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyREEsTUFBTSxhQUFhLEdBQXdDLEVBQUUsQ0FBQTtBQUM3RCxNQUFNLFVBQVUsT0FBTyxDQUFDLFFBQWdCO0lBQ3BDLE9BQU8sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDbEUsQ0FBQztBQUVELE1BQU0sTUFBTTtJQUdSLElBQUksRUFBRTtRQUNGLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDbkMsQ0FBQztJQUVELFlBQXFCLElBQVk7UUFBWixTQUFJLEdBQUosSUFBSSxDQUFRO1FBTmpDLGFBQVEsR0FBVyxDQUFDLENBQUE7SUFNZ0IsQ0FBQztJQUVyQyxHQUFHLENBQUMsUUFBZ0IsQ0FBQztRQUNqQixJQUFJLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQTtRQUN0QixPQUFPLElBQUksQ0FBQTtJQUNmLENBQUM7SUFFRCxLQUFLO1FBQ0QsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQTtRQUN2QixPQUFPLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2hFLEdBQUcsRUFBRSxDQUFBO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFBO1FBQ25CLE9BQU8sSUFBSSxDQUFBO0lBQ2YsQ0FBQztJQUVELEVBQUUsQ0FBQyxFQUFVO1FBQ1QsSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2xCLE9BQU8sSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUE7UUFDekIsQ0FBQztRQUNELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUE7UUFDM0IsTUFBTSxHQUFHLEdBQUcsS0FBSyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUE7UUFDN0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFBO0lBQ2pELENBQUM7SUFFRCxHQUFHO1FBQ0MsT0FBTyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFBO0lBQzVDLENBQUM7SUFFRCxHQUFHLENBQUMsUUFBZ0I7UUFDaEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUE7UUFDeEIsT0FBTyxJQUFJLENBQUE7SUFDZixDQUFDO0NBQ0o7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxVQUFVLEtBQUssQ0FBQyxRQUFnQjtJQUNsQyxNQUFNLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUNuQyxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUE7SUFDdEMsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDZCxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixRQUFRLEVBQUUsQ0FBQyxDQUFBO0lBQ3BELENBQUM7SUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQTtJQUM5RSxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUE7QUFDZCxDQUFDO0FBSUQsU0FBUyxVQUFVLENBQUMsTUFBYyxFQUFFLElBQWU7SUFDL0MsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQzdDLENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FBQyxNQUFjO0lBQzVCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUE7SUFDN0IsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDM0QsSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7UUFDZixPQUFPLElBQUksQ0FBQTtJQUNmLENBQUM7SUFDRCxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ2pCLE9BQU8sSUFBSSxDQUFBO0FBQ2YsQ0FBQztBQUVELFNBQVMsS0FBSyxDQUFDLE1BQWM7SUFDekIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQTtJQUM3QixJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNqQixNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUE7UUFDN0MsSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDekIsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFBO1lBQ1osT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQTtRQUMvQyxDQUFDO0lBQ0wsQ0FBQztJQUNELE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDakIsT0FBTyxJQUFJLENBQUE7QUFDZixDQUFDO0FBRUQsU0FBUyxNQUFNLENBQUMsTUFBYyxFQUFFLE9BQTJCLElBQUk7SUFDM0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQTtJQUM3QixJQUFJLEdBQUcsSUFBSSxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUMvQixJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNmLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUNkLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUNwRCxJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNqQixPQUFPLE1BQU0sQ0FBQTtRQUNqQixDQUFDO0lBQ0wsQ0FBQztJQUNELE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDakIsT0FBTyxJQUFJLENBQUE7QUFDZixDQUFDO0FBRUQsU0FBUyxHQUFHLENBQUMsSUFBaUIsRUFBRSxNQUFjO0lBQzFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2xCLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDYixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUE7UUFDeEMsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7WUFDaEIsT0FBTyxJQUFJLENBQUE7UUFDZixDQUFDO1FBQ0QsT0FBTyxFQUFFLElBQUksdUJBQWUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUE7SUFDeEYsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFBO0FBQ2YsQ0FBQztBQUVELFNBQVMsRUFBRSxDQUFDLElBQWlCLEVBQUUsTUFBYztJQUN6QyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNsQixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2IsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFBO1FBQ3hDLElBQUksS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2hCLE9BQU8sSUFBSSxDQUFBO1FBQ2YsQ0FBQztRQUNELE9BQU8sRUFBRSxJQUFJLHNCQUFjLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFBO0lBQ3ZGLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQTtBQUNmLENBQUM7QUFFRCxTQUFTLEtBQUssQ0FBQyxNQUFjO0lBQ3pCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUE7SUFDN0IsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDakIsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFBO1FBQzNDLElBQUksSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2YsT0FBTyxFQUFFLElBQUksMEJBQWtCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQTtRQUMvRSxDQUFDO0lBQ0wsQ0FBQztJQUNELE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDakIsT0FBTyxJQUFJLENBQUE7QUFDZixDQUFDO0FBRUQsU0FBUyxJQUFJLENBQUMsTUFBYztJQUN4QixNQUFNLENBQUMsS0FBSyxFQUFFLENBQUE7SUFDZCxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDeEIsSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7UUFDZixPQUFPLElBQUksQ0FBQTtJQUNmLENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDekIsSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7UUFDZixPQUFPLElBQUksQ0FBQTtJQUNmLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUE7SUFDZCxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ25ELElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ2QsT0FBTyxJQUFJLENBQUE7SUFDZixDQUFDO1NBQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDNUIsT0FBTztZQUNILElBQUksa0NBQTBCO1lBQzlCLElBQUk7WUFDSixVQUFVLEVBQUUsR0FBRztZQUNmLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztZQUNqQixHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRztTQUMvQixDQUFBO0lBQ0wsQ0FBQztTQUFNLENBQUM7UUFDSixPQUFPLEVBQUUsSUFBSSw2QkFBcUIsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFBO0lBQy9GLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsTUFBYztJQUM5QixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFBO0lBQzdCLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2pCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUNwQixNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ3hDLElBQUksSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2YsT0FBTyxJQUFJLENBQUE7UUFDZixDQUFDO0lBQ0wsQ0FBQztJQUNELE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDakIsT0FBTyxJQUFJLENBQUE7QUFDZixDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsTUFBYztJQUM3QixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFBO0lBQzdCLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2pCLE1BQU0sS0FBSyxHQUFHLEVBQWUsQ0FBQTtRQUM3QixJQUFJLEtBQUssR0FBbUIsSUFBSSxDQUFBO1FBRWhDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUNwQixPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDNUIsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUNqQixNQUFNLENBQUMsS0FBSyxFQUFFLENBQUE7WUFFZCxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDakIsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFBO1lBQ2hCLENBQUM7WUFFRCxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUE7WUFDZCxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDakIsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFBO2dCQUNwQyxDQUFDO2dCQUNELE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQTtnQkFDWixPQUFPLEtBQUssQ0FBQTtZQUNoQixDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFDRCxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ2pCLE9BQU8sSUFBSSxDQUFBO0FBQ2YsQ0FBQztBQUVELFNBQVMsSUFBSSxDQUFDLE1BQWM7SUFDeEIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQTtJQUM3QixPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUMxQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUE7SUFDaEIsQ0FBQztJQUNELElBQUksTUFBTSxDQUFDLFFBQVEsR0FBRyxLQUFLLEVBQUUsQ0FBQztRQUMxQixPQUFPLEVBQUUsSUFBSSx3QkFBZ0IsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQTtJQUNsSCxDQUFDO0lBQ0QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNqQixPQUFPLElBQUksQ0FBQTtBQUNmLENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FBQyxFQUFVO0lBQ3hCLE9BQU8sZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0FBQ3BDLENBQUM7QUFFRCxTQUFTLEdBQUcsQ0FBQyxNQUFjO0lBQ3ZCLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2pCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUE7UUFDN0IsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFBO1FBQ1osT0FBTyxFQUFFLElBQUksdUJBQWUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQTtJQUMvRCxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUE7QUFDZixDQUFDO0FBRUQsU0FBUyxRQUFRLENBQUMsR0FBZ0IsRUFBRSxNQUFlO0lBQy9DLFFBQVEsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2Y7WUFDSSxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDbEM7WUFDSSxPQUFPLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUN4QztZQUNJLE9BQU8scUJBQXFCLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBQzdDO1lBQ0ksT0FBTyxXQUFXLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBQ25DO1lBQ0ksT0FBTyxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtRQUNsRDtZQUNJLE9BQU8sU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7UUFDN0U7WUFDSSxPQUFPLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBQ2xGLENBQUM7SUFDRCxPQUFPLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQTtBQUN0QixDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsR0FBVyxFQUFFLE1BQWU7SUFDNUMsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUNULE9BQU8sQ0FBQyxDQUFDLEVBQUU7WUFDUCxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDcEIsT0FBTyxLQUFLLENBQUE7WUFDaEIsQ0FBQztZQUNELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUE7UUFDekQsQ0FBQyxDQUFBO0lBQ0wsQ0FBQztTQUFNLENBQUM7UUFDSixPQUFPLENBQUMsQ0FBQyxFQUFFO1lBQ1AsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ25DLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDN0MsT0FBTyxJQUFJLENBQUE7Z0JBQ2YsQ0FBQztZQUNMLENBQUM7WUFDRCxPQUFPLEtBQUssQ0FBQTtRQUNoQixDQUFDLENBQUE7SUFDTCxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsR0FBaUIsRUFBRSxNQUFlO0lBQ3hELE1BQU0sS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQTtJQUV6QixJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSwwQkFBa0IsRUFBRSxDQUFDO1FBQ3ZDLE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDNUMsQ0FBQztJQUNELElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLDJCQUFtQixFQUFFLENBQUM7UUFDeEMsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUM3QyxDQUFDO0lBRUQsT0FBTyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUE7QUFDdEIsQ0FBQztBQUVELFNBQVMscUJBQXFCLENBQUMsR0FBc0IsRUFBRSxNQUFlO0lBQ2xFLE1BQU0sS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQTtJQUN6QixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUNsQyxnQkFBZ0IsQ0FDWixFQUFFLElBQUksNkJBQXFCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUN2RixNQUFNLENBQ1QsQ0FDSixDQUFBO0lBRUQsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3BCLENBQUM7U0FBTSxDQUFDO1FBQ0osSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3RCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDckMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDekMsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFBO0lBQ2pCLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsR0FBWSxFQUFFLE1BQWU7SUFDOUMsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUNULE9BQU8sQ0FBQyxDQUFDLEVBQUU7WUFDUCxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDcEIsT0FBTyxLQUFLLENBQUE7WUFDaEIsQ0FBQztZQUNELE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDakMsQ0FBQyxDQUFBO0lBQ0wsQ0FBQztTQUFNLENBQUM7UUFDSixPQUFPLENBQUMsQ0FBQyxFQUFFO1lBQ1AsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUN6QixPQUFPLElBQUksSUFBSSxJQUFJLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUE7UUFDcEUsQ0FBQyxDQUFBO0lBQ0wsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxRQUEwQjtJQUMxQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDNUIsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLElBQXNCLEVBQUUsS0FBdUI7SUFDOUQsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDbkMsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLElBQXNCLEVBQUUsS0FBdUI7SUFDL0QsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDbkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgVWlTdGF0ZURldGFpbHMgfSBmcm9tIFwiLi91aS1zdGF0ZVwiXG5cbmV4cG9ydCB0eXBlIENvbXBpbGVkU2VsZWN0b3IgPSAoc3RhdGU6IFVpU3RhdGVEZXRhaWxzKSA9PiBib29sZWFuXG5cbmV4cG9ydCBjb25zdCBlbnVtIFRva2VuVHlwZSB7XG4gICAgQW55ID0gMSxcbiAgICBOYW1lID0gMixcbiAgICBOZWdhdGUgPSAzLFxuICAgIE9yID0gNCxcbiAgICBBbmQgPSA1LFxuICAgIFN1YnNjcmlwdCA9IDcsXG4gICAgTXVsdGlTdWJzY3JpcHQgPSA4XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXN0QmFzZSB7XG4gICAgYmVnaW46IG51bWJlclxuICAgIGVuZDogbnVtYmVyXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXN0QW55IGV4dGVuZHMgQXN0QmFzZSB7XG4gICAgdHlwZTogVG9rZW5UeXBlLkFueVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFzdE5hbWUgZXh0ZW5kcyBBc3RCYXNlIHtcbiAgICB0eXBlOiBUb2tlblR5cGUuTmFtZVxuICAgIHZhbHVlOiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBc3ROZWdhdGUgZXh0ZW5kcyBBc3RCYXNlIHtcbiAgICB0eXBlOiBUb2tlblR5cGUuTmVnYXRlXG4gICAgdmFsdWU6IFNlbGVjdG9yQXN0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXN0T3IgZXh0ZW5kcyBBc3RCYXNlIHtcbiAgICB0eXBlOiBUb2tlblR5cGUuT3JcbiAgICBsZWZ0OiBTZWxlY3RvckFzdFxuICAgIHJpZ2h0OiBTZWxlY3RvckFzdFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFzdEFuZCBleHRlbmRzIEFzdEJhc2Uge1xuICAgIHR5cGU6IFRva2VuVHlwZS5BbmRcbiAgICBsZWZ0OiBTZWxlY3RvckFzdFxuICAgIHJpZ2h0OiBTZWxlY3RvckFzdFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFzdFN1YnNjcmlwdCBleHRlbmRzIEFzdEJhc2Uge1xuICAgIHR5cGU6IFRva2VuVHlwZS5TdWJzY3JpcHRcbiAgICBiYXNlOiBBc3ROYW1lXG4gICAgc3Vic2NyaXB0OiBBc3RBbnkgfCBBc3ROYW1lXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXN0TXVsdGlTdWJzY3JpcHQgZXh0ZW5kcyBBc3RCYXNlIHtcbiAgICB0eXBlOiBUb2tlblR5cGUuTXVsdGlTdWJzY3JpcHRcbiAgICBiYXNlOiBBc3ROYW1lXG4gICAgc3Vic2NyaXB0czogQXN0TmFtZVtdXG59XG5cbmV4cG9ydCB0eXBlIFNlbGVjdG9yQXN0ID0gQXN0QW55IHwgQXN0TmFtZSB8IEFzdE5lZ2F0ZSB8IEFzdE9yIHwgQXN0QW5kIHwgQXN0U3Vic2NyaXB0IHwgQXN0TXVsdGlTdWJzY3JpcHRcblxuY29uc3QgQ09NUElMRV9DQUNIRTogeyBba2V5OiBzdHJpbmddOiBDb21waWxlZFNlbGVjdG9yIH0gPSB7fVxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBpbGUoc2VsZWN0b3I6IHN0cmluZyk6IENvbXBpbGVkU2VsZWN0b3Ige1xuICAgIHJldHVybiAoQ09NUElMRV9DQUNIRVtzZWxlY3Rvcl0gPz89IF9jb21waWxlKHBhcnNlKHNlbGVjdG9yKSkpXG59XG5cbmNsYXNzIEN1cnNvciB7XG4gICAgcG9zaXRpb246IG51bWJlciA9IDBcblxuICAgIGdldCBjaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVt0aGlzLnBvc2l0aW9uXVxuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGRhdGE6IHN0cmluZykge31cblxuICAgIGluYyh2YWx1ZTogbnVtYmVyID0gMSkge1xuICAgICAgICB0aGlzLnBvc2l0aW9uICs9IHZhbHVlXG4gICAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgZWF0V3MoKSB7XG4gICAgICAgIGxldCBlbmQgPSB0aGlzLnBvc2l0aW9uXG4gICAgICAgIHdoaWxlIChlbmQgPCB0aGlzLmRhdGEubGVuZ3RoICYmIC9bIFxcclxcblxcdF0vLnRlc3QodGhpcy5kYXRhW2VuZF0pKSB7XG4gICAgICAgICAgICBlbmQrK1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucG9zaXRpb24gPSBlbmRcbiAgICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG5cbiAgICBpcyhjaDogc3RyaW5nKSB7XG4gICAgICAgIGlmIChjaC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoID09PSBjaFxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJlZ2luID0gdGhpcy5wb3NpdGlvblxuICAgICAgICBjb25zdCBlbmQgPSBiZWdpbiArIGNoLmxlbmd0aFxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLnN1YnN0cmluZyhiZWdpbiwgZW5kKSA9PT0gY2hcbiAgICB9XG5cbiAgICBlb2YoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uID49IHRoaXMuZGF0YS5sZW5ndGhcbiAgICB9XG5cbiAgICBzZXQocG9zaXRpb246IG51bWJlcikge1xuICAgICAgICB0aGlzLnBvc2l0aW9uID0gcG9zaXRpb25cbiAgICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG59XG5cbi8qKlxuICogZXhwcmVzc2lvbjpcbiAqICAtIFwiKlwiOiBhbnlcbiAqICAtIFwibmFtZSB3aXRob3V0IGRvdFwiOiB0b3AgbGV2ZWw6IGVnLiBcImJ1c3lcIiBvciBcImRpc2FibGVkXCIsIHRoaXMgaXMgZXF1YWwgdG8gXCJidXN5LipcIlxuICogIC0gXCJuYW1lIHdpdGggZG90XCI6IG5lc3RlZDogZWcuIFwiYnVzeS5zZWxmXCIgb3IgXCJidXN5LmxvYWRpbmdcIlxuICogIC0gbmVnYXRlOiBcIiFidXN5XCIsIFwiIWJ1c3kuKlwiLCBcIiFidXN5LnNhdmVcIlxuICogIC0gT1I6IFwiYnVzeS4qIHx8ICFkaXNhYmxlZC4qXCJcbiAqICAtIEFORDogXCJidXN5LiogJiYgIWRpc2FibGVkLipcIlxuICogIC0gR1JPVVA6IFwiKGJ1c3kgfHwgZGlzYWJsZWQpICYmICFyZWFkb25seVwiXG4gKiAgLSBTaG9ydGVkIG9mIG11bHRpcGxlIHNvdXJjZSBvZiBzYW1lIGJhc2U6IFwiYnVzeXtsb2FkLHNhdmV9XCIsIGlmIG9uZSBvZiBsb2FkIG9yIHNhdmUgaXMgdHJ1ZSwgdGhlIHJlc3VsdCBpcyB0cnVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZShzZWxlY3Rvcjogc3RyaW5nKTogU2VsZWN0b3JBc3Qge1xuICAgIGNvbnN0IGN1cnNvciA9IG5ldyBDdXJzb3Ioc2VsZWN0b3IpXG4gICAgY29uc3QgcmVzID0gZXhwcmVzc2lvbihjdXJzb3IuZWF0V3MoKSlcbiAgICBpZiAocmVzID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHNlbGVjdG9yOiAke3NlbGVjdG9yfWApXG4gICAgfVxuXG4gICAgaWYgKCFjdXJzb3IuZW9mKCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmV4cGVjdGVkIGNoYXJjdGVyOiAke3NlbGVjdG9yW3Jlcy5lbmRdfSBhdCAke3Jlcy5lbmR9YClcbiAgICB9XG4gICAgcmV0dXJuIHJlc1xufVxuXG50eXBlIFBhcnNlciA9ICguLi5hcmdzOiBhbnlbXSkgPT4gU2VsZWN0b3JBc3QgfCBudWxsXG5cbmZ1bmN0aW9uIGV4cHJlc3Npb24oY3Vyc29yOiBDdXJzb3IsIHNraXA/OiBQYXJzZXJbXSkge1xuICAgIHJldHVybiBiaW5hcnkoY3Vyc29yKSB8fCBsZWZ0RXhwcihjdXJzb3IpXG59XG5cbmZ1bmN0aW9uIGxlZnRFeHByKGN1cnNvcjogQ3Vyc29yKSB7XG4gICAgY29uc3QgYmVnaW4gPSBjdXJzb3IucG9zaXRpb25cbiAgICBjb25zdCBsZWZ0ID0gdW5hcnkoY3Vyc29yKSB8fCBncm91cChjdXJzb3IpIHx8IGxvYWQoY3Vyc29yKVxuICAgIGlmIChsZWZ0ICE9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGxlZnRcbiAgICB9XG4gICAgY3Vyc29yLnNldChiZWdpbilcbiAgICByZXR1cm4gbnVsbFxufVxuXG5mdW5jdGlvbiBncm91cChjdXJzb3I6IEN1cnNvcik6IFNlbGVjdG9yQXN0IHwgbnVsbCB7XG4gICAgY29uc3QgYmVnaW4gPSBjdXJzb3IucG9zaXRpb25cbiAgICBpZiAoY3Vyc29yLmlzKFwiKFwiKSkge1xuICAgICAgICBjb25zdCBleHByID0gZXhwcmVzc2lvbihjdXJzb3IuaW5jKCkuZWF0V3MoKSlcbiAgICAgICAgaWYgKGN1cnNvci5lYXRXcygpLmlzKFwiKVwiKSkge1xuICAgICAgICAgICAgY3Vyc29yLmluYygpXG4gICAgICAgICAgICByZXR1cm4gYmluYXJ5KGN1cnNvci5lYXRXcygpLCBleHByKSB8fCBleHByXG4gICAgICAgIH1cbiAgICB9XG4gICAgY3Vyc29yLnNldChiZWdpbilcbiAgICByZXR1cm4gbnVsbFxufVxuXG5mdW5jdGlvbiBiaW5hcnkoY3Vyc29yOiBDdXJzb3IsIGxlZnQ6IFNlbGVjdG9yQXN0IHwgbnVsbCA9IG51bGwpOiBTZWxlY3RvckFzdCB8IG51bGwge1xuICAgIGNvbnN0IGJlZ2luID0gY3Vyc29yLnBvc2l0aW9uXG4gICAgbGVmdCA9IGxlZnQgPz8gbGVmdEV4cHIoY3Vyc29yKVxuICAgIGlmIChsZWZ0ICE9IG51bGwpIHtcbiAgICAgICAgY3Vyc29yLmVhdFdzKClcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYW5kKGxlZnQsIGN1cnNvcikgfHwgb3IobGVmdCwgY3Vyc29yKVxuICAgICAgICBpZiAocmVzdWx0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgfVxuICAgIH1cbiAgICBjdXJzb3Iuc2V0KGJlZ2luKVxuICAgIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIGFuZChsZWZ0OiBTZWxlY3RvckFzdCwgY3Vyc29yOiBDdXJzb3IpOiBBc3RBbmQgfCBudWxsIHtcbiAgICBpZiAoY3Vyc29yLmlzKFwiJiZcIikpIHtcbiAgICAgICAgY3Vyc29yLmluYygyKVxuICAgICAgICBjb25zdCByaWdodCA9IGV4cHJlc3Npb24oY3Vyc29yLmVhdFdzKCkpXG4gICAgICAgIGlmIChyaWdodCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHR5cGU6IFRva2VuVHlwZS5BbmQsIGxlZnQsIHJpZ2h0LCBiZWdpbjogbGVmdC5iZWdpbiwgZW5kOiBjdXJzb3IucG9zaXRpb24gfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxufVxuXG5mdW5jdGlvbiBvcihsZWZ0OiBTZWxlY3RvckFzdCwgY3Vyc29yOiBDdXJzb3IpOiBBc3RPciB8IG51bGwge1xuICAgIGlmIChjdXJzb3IuaXMoXCJ8fFwiKSkge1xuICAgICAgICBjdXJzb3IuaW5jKDIpXG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gZXhwcmVzc2lvbihjdXJzb3IuZWF0V3MoKSlcbiAgICAgICAgaWYgKHJpZ2h0ID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgdHlwZTogVG9rZW5UeXBlLk9yLCBsZWZ0LCByaWdodCwgYmVnaW46IGxlZnQuYmVnaW4sIGVuZDogY3Vyc29yLnBvc2l0aW9uIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gdW5hcnkoY3Vyc29yOiBDdXJzb3IpOiBTZWxlY3RvckFzdCB8IG51bGwge1xuICAgIGNvbnN0IGJlZ2luID0gY3Vyc29yLnBvc2l0aW9uXG4gICAgaWYgKGN1cnNvci5pcyhcIiFcIikpIHtcbiAgICAgICAgY29uc3QgZXhwciA9IGxlZnRFeHByKGN1cnNvci5pbmMoKS5lYXRXcygpKVxuICAgICAgICBpZiAoZXhwciAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4geyB0eXBlOiBUb2tlblR5cGUuTmVnYXRlLCB2YWx1ZTogZXhwciwgYmVnaW4sIGVuZDogY3Vyc29yLnBvc2l0aW9uIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjdXJzb3Iuc2V0KGJlZ2luKVxuICAgIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIGxvYWQoY3Vyc29yOiBDdXJzb3IpOiBBc3RBbnkgfCBBc3ROYW1lIHwgQXN0U3Vic2NyaXB0IHwgQXN0TXVsdGlTdWJzY3JpcHQgfCBudWxsIHtcbiAgICBjdXJzb3IuZWF0V3MoKVxuICAgIGNvbnN0IF9hbnkgPSBhbnkoY3Vyc29yKVxuICAgIGlmIChfYW55ICE9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIF9hbnlcbiAgICB9XG5cbiAgICBjb25zdCBiYXNlID0gbmFtZShjdXJzb3IpXG4gICAgaWYgKGJhc2UgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGN1cnNvci5lYXRXcygpXG4gICAgY29uc3Qgc3ViID0gbG9hZFNpbmdsZShjdXJzb3IpIHx8IGxvYWRNdWx0aShjdXJzb3IpXG4gICAgaWYgKHN1YiA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBiYXNlXG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHN1YikpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFRva2VuVHlwZS5NdWx0aVN1YnNjcmlwdCxcbiAgICAgICAgICAgIGJhc2UsXG4gICAgICAgICAgICBzdWJzY3JpcHRzOiBzdWIsXG4gICAgICAgICAgICBiZWdpbjogYmFzZS5iZWdpbixcbiAgICAgICAgICAgIGVuZDogc3ViW3N1Yi5sZW5ndGggLSAxXS5lbmRcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7IHR5cGU6IFRva2VuVHlwZS5TdWJzY3JpcHQsIGJhc2UsIHN1YnNjcmlwdDogc3ViLCBiZWdpbjogYmFzZS5iZWdpbiwgZW5kOiBzdWIuZW5kIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGxvYWRTaW5nbGUoY3Vyc29yOiBDdXJzb3IpOiBBc3RBbnkgfCBBc3ROYW1lIHwgbnVsbCB7XG4gICAgY29uc3QgYmVnaW4gPSBjdXJzb3IucG9zaXRpb25cbiAgICBpZiAoY3Vyc29yLmlzKFwiLlwiKSkge1xuICAgICAgICBjdXJzb3IuaW5jKCkuZWF0V3MoKVxuICAgICAgICBjb25zdCBwcm9wID0gYW55KGN1cnNvcikgfHwgbmFtZShjdXJzb3IpXG4gICAgICAgIGlmIChwcm9wICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBwcm9wXG4gICAgICAgIH1cbiAgICB9XG4gICAgY3Vyc29yLnNldChiZWdpbilcbiAgICByZXR1cm4gbnVsbFxufVxuXG5mdW5jdGlvbiBsb2FkTXVsdGkoY3Vyc29yOiBDdXJzb3IpOiBBc3ROYW1lW10gfCBudWxsIHtcbiAgICBjb25zdCBiZWdpbiA9IGN1cnNvci5wb3NpdGlvblxuICAgIGlmIChjdXJzb3IuaXMoXCJ7XCIpKSB7XG4gICAgICAgIGNvbnN0IG5hbWVzID0gW10gYXMgQXN0TmFtZVtdXG4gICAgICAgIGxldCBlbnRyeTogQXN0TmFtZSB8IG51bGwgPSBudWxsXG5cbiAgICAgICAgY3Vyc29yLmluYygpLmVhdFdzKClcbiAgICAgICAgd2hpbGUgKChlbnRyeSA9IG5hbWUoY3Vyc29yKSkpIHtcbiAgICAgICAgICAgIG5hbWVzLnB1c2goZW50cnkpXG4gICAgICAgICAgICBjdXJzb3IuZWF0V3MoKVxuXG4gICAgICAgICAgICBpZiAoY3Vyc29yLmlzKFwiLFwiKSkge1xuICAgICAgICAgICAgICAgIGN1cnNvci5pbmMoKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdXJzb3IuZWF0V3MoKVxuICAgICAgICAgICAgaWYgKGN1cnNvci5pcyhcIn1cIikpIHtcbiAgICAgICAgICAgICAgICBpZiAobmFtZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImV4cGVjdGVkIG5hbWVcIilcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3Vyc29yLmluYygpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWVzXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY3Vyc29yLnNldChiZWdpbilcbiAgICByZXR1cm4gbnVsbFxufVxuXG5mdW5jdGlvbiBuYW1lKGN1cnNvcjogQ3Vyc29yKTogQXN0TmFtZSB8IG51bGwge1xuICAgIGNvbnN0IGJlZ2luID0gY3Vyc29yLnBvc2l0aW9uXG4gICAgd2hpbGUgKCFjdXJzb3IuZW9mKCkgJiYgaXNOYW1lQ2goY3Vyc29yLmNoKSkge1xuICAgICAgICBjdXJzb3IuaW5jKClcbiAgICB9XG4gICAgaWYgKGN1cnNvci5wb3NpdGlvbiA+IGJlZ2luKSB7XG4gICAgICAgIHJldHVybiB7IHR5cGU6IFRva2VuVHlwZS5OYW1lLCBiZWdpbiwgZW5kOiBjdXJzb3IucG9zaXRpb24sIHZhbHVlOiBjdXJzb3IuZGF0YS5zbGljZShiZWdpbiwgY3Vyc29yLnBvc2l0aW9uKSB9XG4gICAgfVxuICAgIGN1cnNvci5zZXQoYmVnaW4pXG4gICAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gaXNOYW1lQ2goY2g6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvW14uLHt9KCkhXFxzJnxdLy50ZXN0KGNoKVxufVxuXG5mdW5jdGlvbiBhbnkoY3Vyc29yOiBDdXJzb3IpOiBBc3RBbnkgfCBudWxsIHtcbiAgICBpZiAoY3Vyc29yLmlzKFwiKlwiKSkge1xuICAgICAgICBjb25zdCBiZWdpbiA9IGN1cnNvci5wb3NpdGlvblxuICAgICAgICBjdXJzb3IuaW5jKClcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogVG9rZW5UeXBlLkFueSwgYmVnaW4sIGVuZDogY3Vyc29yLnBvc2l0aW9uIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gX2NvbXBpbGUoYXN0OiBTZWxlY3RvckFzdCwgcGFyZW50Pzogc3RyaW5nKTogQ29tcGlsZWRTZWxlY3RvciB7XG4gICAgc3dpdGNoIChhc3QudHlwZSkge1xuICAgICAgICBjYXNlIFRva2VuVHlwZS5Bbnk6XG4gICAgICAgICAgICByZXR1cm4gY29tcGlsZUFueShhc3QsIHBhcmVudClcbiAgICAgICAgY2FzZSBUb2tlblR5cGUuU3Vic2NyaXB0OlxuICAgICAgICAgICAgcmV0dXJuIGNvbXBpbGVTdWJzY3JpcHQoYXN0LCBwYXJlbnQpXG4gICAgICAgIGNhc2UgVG9rZW5UeXBlLk11bHRpU3Vic2NyaXB0OlxuICAgICAgICAgICAgcmV0dXJuIGNvbXBpbGVNdWx0aVN1YnNjcmlwdChhc3QsIHBhcmVudClcbiAgICAgICAgY2FzZSBUb2tlblR5cGUuTmFtZTpcbiAgICAgICAgICAgIHJldHVybiBjb21waWxlTmFtZShhc3QsIHBhcmVudClcbiAgICAgICAgY2FzZSBUb2tlblR5cGUuTmVnYXRlOlxuICAgICAgICAgICAgcmV0dXJuIGNvbXBpbGVOb3QoX2NvbXBpbGUoYXN0LnZhbHVlLCBwYXJlbnQpKVxuICAgICAgICBjYXNlIFRva2VuVHlwZS5PcjpcbiAgICAgICAgICAgIHJldHVybiBjb21waWxlT3IoX2NvbXBpbGUoYXN0LmxlZnQsIHBhcmVudCksIF9jb21waWxlKGFzdC5yaWdodCwgcGFyZW50KSlcbiAgICAgICAgY2FzZSBUb2tlblR5cGUuQW5kOlxuICAgICAgICAgICAgcmV0dXJuIGNvbXBpbGVBbmQoX2NvbXBpbGUoYXN0LmxlZnQsIHBhcmVudCksIF9jb21waWxlKGFzdC5yaWdodCwgcGFyZW50KSlcbiAgICB9XG4gICAgcmV0dXJuICgpID0+IGZhbHNlXG59XG5cbmZ1bmN0aW9uIGNvbXBpbGVBbnkoYXN0OiBBc3RBbnksIHBhcmVudD86IHN0cmluZyk6IENvbXBpbGVkU2VsZWN0b3Ige1xuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgcmV0dXJuIHYgPT4ge1xuICAgICAgICAgICAgaWYgKHZbcGFyZW50XSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh2W3BhcmVudF0pLnNvbWUodiA9PiB2ID09PSB0cnVlKVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHYgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBPYmplY3QudmFsdWVzKHYpKSB7XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC52YWx1ZXMoZW50cnkpLnNvbWUodiA9PiB2ID09PSB0cnVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjb21waWxlU3Vic2NyaXB0KGFzdDogQXN0U3Vic2NyaXB0LCBwYXJlbnQ/OiBzdHJpbmcpOiBDb21waWxlZFNlbGVjdG9yIHtcbiAgICBwYXJlbnQgPz89IGFzdC5iYXNlLnZhbHVlXG5cbiAgICBpZiAoYXN0LnN1YnNjcmlwdC50eXBlID09PSBUb2tlblR5cGUuQW55KSB7XG4gICAgICAgIHJldHVybiBjb21waWxlQW55KGFzdC5zdWJzY3JpcHQsIHBhcmVudClcbiAgICB9XG4gICAgaWYgKGFzdC5zdWJzY3JpcHQudHlwZSA9PT0gVG9rZW5UeXBlLk5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBpbGVOYW1lKGFzdC5zdWJzY3JpcHQsIHBhcmVudClcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gY29tcGlsZU11bHRpU3Vic2NyaXB0KGFzdDogQXN0TXVsdGlTdWJzY3JpcHQsIHBhcmVudD86IHN0cmluZyk6IENvbXBpbGVkU2VsZWN0b3Ige1xuICAgIHBhcmVudCA/Pz0gYXN0LmJhc2UudmFsdWVcbiAgICBjb25zdCB2YWx1ZXMgPSBhc3Quc3Vic2NyaXB0cy5tYXAodiA9PlxuICAgICAgICBjb21waWxlU3Vic2NyaXB0KFxuICAgICAgICAgICAgeyB0eXBlOiBUb2tlblR5cGUuU3Vic2NyaXB0LCBiYXNlOiBhc3QuYmFzZSwgc3Vic2NyaXB0OiB2LCBiZWdpbjogdi5iZWdpbiwgZW5kOiB2LmVuZCB9LFxuICAgICAgICAgICAgcGFyZW50XG4gICAgICAgIClcbiAgICApXG5cbiAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gdmFsdWVzWzBdXG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHZhbHVlc1swXVxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcmVzdWx0ID0gY29tcGlsZU9yKHJlc3VsdCwgdmFsdWVzW2ldKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNvbXBpbGVOYW1lKGFzdDogQXN0TmFtZSwgcGFyZW50Pzogc3RyaW5nKTogQ29tcGlsZWRTZWxlY3RvciB7XG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgICByZXR1cm4gdiA9PiB7XG4gICAgICAgICAgICBpZiAodltwYXJlbnRdID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAhIXZbcGFyZW50XVthc3QudmFsdWVdXG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdiA9PiB7XG4gICAgICAgICAgICBjb25zdCBtYW55ID0gdlthc3QudmFsdWVdXG4gICAgICAgICAgICByZXR1cm4gbWFueSAhPSBudWxsICYmIE9iamVjdC52YWx1ZXMobWFueSkuc29tZSh2ID0+IHYgPT09IHRydWUpXG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNvbXBpbGVOb3QoY29tcGlsZWQ6IENvbXBpbGVkU2VsZWN0b3IpOiBDb21waWxlZFNlbGVjdG9yIHtcbiAgICByZXR1cm4gdiA9PiAhY29tcGlsZWQodilcbn1cblxuZnVuY3Rpb24gY29tcGlsZU9yKGxlZnQ6IENvbXBpbGVkU2VsZWN0b3IsIHJpZ2h0OiBDb21waWxlZFNlbGVjdG9yKTogQ29tcGlsZWRTZWxlY3RvciB7XG4gICAgcmV0dXJuIHYgPT4gbGVmdCh2KSB8fCByaWdodCh2KVxufVxuXG5mdW5jdGlvbiBjb21waWxlQW5kKGxlZnQ6IENvbXBpbGVkU2VsZWN0b3IsIHJpZ2h0OiBDb21waWxlZFNlbGVjdG9yKTogQ29tcGlsZWRTZWxlY3RvciB7XG4gICAgcmV0dXJuIHYgPT4gbGVmdCh2KSAmJiByaWdodCh2KVxufVxuIl19
@@ -2,6 +2,7 @@ var _a;
2
2
  import { computed, Directive, inject, signal, untracked } from "@angular/core";
3
3
  import { Observable } from "rxjs";
4
4
  import { deepClone } from "@ngutil/common";
5
+ import { compile as compileSelector } from "./selector";
5
6
  import * as i0 from "@angular/core";
6
7
  export class UiState {
7
8
  constructor() {
@@ -56,27 +57,14 @@ export class UiState {
56
57
  if (entry[source] !== value) {
57
58
  this.#self.set({ ...current, [name]: { ...entry, [source]: value } });
58
59
  }
59
- const root = this.root;
60
- if (source !== "self" && root !== this) {
61
- root.set(name, value, source);
62
- }
60
+ // TODO: maybe some option to propagate to root
61
+ // const root = this.root
62
+ // if (source !== "self" && root !== this) {
63
+ // root.set(name, value, source)
64
+ // }
63
65
  }
64
- is(name, selector = "*") {
65
- if (selector === "*") {
66
- const current = this.value();
67
- return current[name] ?? false;
68
- }
69
- else if (selector.includes(",")) {
70
- const merged = this.merged();
71
- return selector
72
- .split(/\s*,\s*/)
73
- .map(v => merged[name]?.[v] ?? false)
74
- .some(v => v);
75
- }
76
- else {
77
- const merged = this.merged();
78
- return merged[name]?.[selector] ?? false;
79
- }
66
+ is(selector = "*") {
67
+ return compileSelector(selector)(this.merged());
80
68
  }
81
69
  intercept(name, source) {
82
70
  return (src) => this.wrap(src, name, source);
@@ -96,4 +84,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImpor
96
84
  type: Directive,
97
85
  args: [{ standalone: true }]
98
86
  }] });
99
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktc3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hcmlhL3NyYy91aS1zdGF0ZS91aS1zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFOUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUlqQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7O0FBc0IxQyxNQUFNLE9BQU8sT0FBTztJQURwQjtRQUVhLFlBQU8sR0FBRyxNQUFNLENBQUMsRUFBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtRQU03RCxVQUFLLEdBQUcsTUFBTSxDQUFpQixFQUFFLENBQUMsQ0FBQTtRQUVsQyxXQUFNLEdBQUcsUUFBUSxDQUFpQixHQUFHLEVBQUU7WUFDNUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQTtZQUNyQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUE7WUFDekIsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDVCxNQUFNLE1BQU0sR0FBNEIsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUV2RCxLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO29CQUMxQyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtvQkFDcEQsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxpQkFBaUIsRUFBRSxHQUFHLENBQUMsQ0FBQTtvQkFDM0MsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7d0JBQ3BCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRzs0QkFDUixHQUFHLGlCQUFpQjs0QkFDcEIsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDOzRCQUNaLE1BQU0sRUFBRSxZQUFZO3lCQUN2QixDQUFBO29CQUNMLENBQUM7eUJBQU0sQ0FBQzt3QkFDSixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsQ0FBQTtvQkFDOUQsQ0FBQztnQkFDTCxDQUFDO2dCQUVELE9BQU8sTUFBTSxDQUFBO1lBQ2pCLENBQUM7aUJBQU0sQ0FBQztnQkFDSixPQUFPLElBQUksQ0FBQTtZQUNmLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQTtRQUVPLFVBQUssR0FBRyxRQUFRLENBQWUsR0FBRyxFQUFFO1lBQ3pDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQTtZQUM1QixNQUFNLE1BQU0sR0FBMEIsRUFBRSxDQUFBO1lBRXhDLEtBQUssTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQzFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUMvQyxDQUFDO1lBRUQsT0FBTyxNQUFNLENBQUE7UUFDakIsQ0FBQyxDQUFDLENBQUE7S0FnREw7SUEzRlksT0FBTyxDQUFzRDtJQUV0RSxJQUFJLElBQUk7UUFDSixPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQTtJQUNyQyxDQUFDO0lBRVEsS0FBSyxDQUE2QjtJQXVDM0MsR0FBRyxDQUFDLElBQU8sRUFBRSxLQUFjLEVBQUUsU0FBWSxNQUFXO1FBQ2hELElBQUksTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3RCLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQTtZQUN2QyxPQUFNO1FBQ1YsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDckMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUVqQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUN6RSxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQTtRQUN0QixJQUFJLE1BQU0sS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUNqQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEVBQUUsQ0FBQyxJQUFPLEVBQUUsV0FBcUMsR0FBRztRQUNoRCxJQUFJLFFBQVEsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNuQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUE7WUFDNUIsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFBO1FBQ2pDLENBQUM7YUFBTSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUE7WUFDNUIsT0FBTyxRQUFRO2lCQUNWLEtBQUssQ0FBQyxTQUFTLENBQUM7aUJBQ2hCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQztpQkFDcEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDckIsQ0FBQzthQUFNLENBQUM7WUFDSixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUE7WUFDNUIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLENBQUE7UUFDNUMsQ0FBQztJQUNMLENBQUM7SUFFRCxTQUFTLENBQUMsSUFBTyxFQUFFLE1BQVM7UUFDeEIsT0FBTyxDQUFJLEdBQWtCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUNsRSxDQUFDO0lBRUQsSUFBSSxDQUFJLFVBQXlCLEVBQUUsSUFBTyxFQUFFLE1BQVM7UUFDakQsT0FBTyxJQUFJLFVBQVUsQ0FBSSxVQUFVLENBQUMsRUFBRTtZQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUE7WUFDNUIsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtZQUNuRCxPQUFPLFVBQVUsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDM0MsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDOzhHQTNGUSxPQUFPO2tHQUFQLE9BQU87OzsyRkFBUCxPQUFPO2tCQURuQixTQUFTO21CQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbXB1dGVkLCBEaXJlY3RpdmUsIGluamVjdCwgc2lnbmFsLCB1bnRyYWNrZWQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXG5cbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiXG5cbmltcG9ydCB7IE11dGFibGUgfSBmcm9tIFwidXRpbGl0eS10eXBlc1wiXG5cbmltcG9ydCB7IGRlZXBDbG9uZSB9IGZyb20gXCJAbmd1dGlsL2NvbW1vblwiXG5cbi8qKlxuICoge1xuICogIGJ1c3k6IHtcbiAqICAgICAgc2VsZjogdHJ1ZSxcbiAqICAgICAgcGFyZW50OiBmYWxzZSxcbiAqICAgICAgZGlzYWJsZWQ6IGZhbHNlXG4gKiAgfVxuICogfVxuICovXG5leHBvcnQgdHlwZSBVaVN0YXRlRGV0YWlscyA9IHsgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogVWlTdGF0ZUVudHJ5IH1cblxuZXhwb3J0IHR5cGUgVWlTdGF0ZUVudHJ5ID0geyByZWFkb25seSBba2V5OiBVaVN0YXRlU291cmNlXTogYm9vbGVhbiB9XG5cbmV4cG9ydCB0eXBlIFVpU3RhdGVWYWx1ZSA9IHsgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9XG5cbmV4cG9ydCB0eXBlIFVpU3RhdGVTb3VyY2UgPSBcInBhcmVudFwiIHwgXCJzZWxmXCIgfCBzdHJpbmdcblxuZXhwb3J0IHR5cGUgVWlTdGF0ZVNvdXJjZVNlbGVjdG9yPFMgZXh0ZW5kcyBVaVN0YXRlU291cmNlPiA9IFwiKlwiIHwgU1xuXG5ARGlyZWN0aXZlKHsgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIFVpU3RhdGU8TiBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgUyBleHRlbmRzIFVpU3RhdGVTb3VyY2UgPSBVaVN0YXRlU291cmNlPiB7XG4gICAgcmVhZG9ubHkgI3BhcmVudCA9IGluamVjdChVaVN0YXRlLCB7IHNraXBTZWxmOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSB9KVxuXG4gICAgZ2V0IHJvb3QoKTogVWlTdGF0ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwYXJlbnQ/LnJvb3QgfHwgdGhpc1xuICAgIH1cblxuICAgIHJlYWRvbmx5ICNzZWxmID0gc2lnbmFsPFVpU3RhdGVEZXRhaWxzPih7fSlcblxuICAgIHJlYWRvbmx5IG1lcmdlZCA9IGNvbXB1dGVkPFVpU3RhdGVEZXRhaWxzPigoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuI3BhcmVudD8ubWVyZ2VkKClcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXMuI3NlbGYoKVxuICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQ6IE11dGFibGU8VWlTdGF0ZURldGFpbHM+ID0gZGVlcENsb25lKHNlbGYpXG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHBhcmVudCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJc1RydWUgPSBPYmplY3QudmFsdWVzKHYpLmluY2x1ZGVzKHRydWUpXG4gICAgICAgICAgICAgICAgY29uc3QgeyBzZWxmOiBfLCAuLi5wYXJlbnRXaWh0b3V0U2VsZiB9ID0gdlxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHRba10gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRba10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5wYXJlbnRXaWh0b3V0U2VsZixcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnJlc3VsdFtrXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudDogcGFyZW50SXNUcnVlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRba10gPSB7IC4uLnBhcmVudFdpaHRvdXRTZWxmLCBwYXJlbnQ6IHBhcmVudElzVHJ1ZSB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gc2VsZlxuICAgICAgICB9XG4gICAgfSlcblxuICAgIHJlYWRvbmx5IHZhbHVlID0gY29tcHV0ZWQ8VWlTdGF0ZVZhbHVlPigoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lcmdlZCA9IHRoaXMubWVyZ2VkKClcbiAgICAgICAgY29uc3QgcmVzdWx0OiBNdXRhYmxlPFVpU3RhdGVWYWx1ZT4gPSB7fVxuXG4gICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKG1lcmdlZCkpIHtcbiAgICAgICAgICAgIHJlc3VsdFtrXSA9IE9iamVjdC52YWx1ZXModikuaW5jbHVkZXModHJ1ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICB9KVxuXG4gICAgc2V0KG5hbWU6IE4sIHZhbHVlOiBib29sZWFuLCBzb3VyY2U6IFMgPSBcInNlbGZcIiBhcyBTKSB7XG4gICAgICAgIGlmIChzb3VyY2UgPT09IFwicGFyZW50XCIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJjYW4ndCBzZXQgcGFyZW50IHN0YXRlXCIpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSB1bnRyYWNrZWQodGhpcy4jc2VsZilcbiAgICAgICAgY29uc3QgZW50cnkgPSBjdXJyZW50W25hbWVdIHx8IHt9XG5cbiAgICAgICAgaWYgKGVudHJ5W3NvdXJjZV0gIT09IHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLiNzZWxmLnNldCh7IC4uLmN1cnJlbnQsIFtuYW1lXTogeyAuLi5lbnRyeSwgW3NvdXJjZV06IHZhbHVlIH0gfSlcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJvb3QgPSB0aGlzLnJvb3RcbiAgICAgICAgaWYgKHNvdXJjZSAhPT0gXCJzZWxmXCIgJiYgcm9vdCAhPT0gdGhpcykge1xuICAgICAgICAgICAgcm9vdC5zZXQobmFtZSwgdmFsdWUsIHNvdXJjZSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzKG5hbWU6IE4sIHNlbGVjdG9yOiBVaVN0YXRlU291cmNlU2VsZWN0b3I8Uz4gPSBcIipcIik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoc2VsZWN0b3IgPT09IFwiKlwiKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy52YWx1ZSgpXG4gICAgICAgICAgICByZXR1cm4gY3VycmVudFtuYW1lXSA/PyBmYWxzZVxuICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLmluY2x1ZGVzKFwiLFwiKSkge1xuICAgICAgICAgICAgY29uc3QgbWVyZ2VkID0gdGhpcy5tZXJnZWQoKVxuICAgICAgICAgICAgcmV0dXJuIHNlbGVjdG9yXG4gICAgICAgICAgICAgICAgLnNwbGl0KC9cXHMqLFxccyovKVxuICAgICAgICAgICAgICAgIC5tYXAodiA9PiBtZXJnZWRbbmFtZV0/Llt2XSA/PyBmYWxzZSlcbiAgICAgICAgICAgICAgICAuc29tZSh2ID0+IHYpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBtZXJnZWQgPSB0aGlzLm1lcmdlZCgpXG4gICAgICAgICAgICByZXR1cm4gbWVyZ2VkW25hbWVdPy5bc2VsZWN0b3JdID8/IGZhbHNlXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbnRlcmNlcHQobmFtZTogTiwgc291cmNlOiBTKSB7XG4gICAgICAgIHJldHVybiA8Uz4oc3JjOiBPYnNlcnZhYmxlPFM+KSA9PiB0aGlzLndyYXAoc3JjLCBuYW1lLCBzb3VyY2UpXG4gICAgfVxuXG4gICAgd3JhcDxUPihvYnNlcnZhYmxlOiBPYnNlcnZhYmxlPFQ+LCBuYW1lOiBOLCBzb3VyY2U6IFMpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPFQ+KHN1YnNjcmliZXIgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXQobmFtZSwgdHJ1ZSwgc291cmNlKVxuICAgICAgICAgICAgc3Vic2NyaWJlci5hZGQoKCkgPT4gdGhpcy5zZXQobmFtZSwgZmFsc2UsIHNvdXJjZSkpXG4gICAgICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZS5zdWJzY3JpYmUoc3Vic2NyaWJlcilcbiAgICAgICAgfSlcbiAgICB9XG59XG4iXX0=
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktc3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hcmlhL3NyYy91aS1zdGF0ZS91aS1zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFOUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUlqQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFMUMsT0FBTyxFQUFFLE9BQU8sSUFBSSxlQUFlLEVBQUUsTUFBTSxZQUFZLENBQUE7O0FBc0J2RCxNQUFNLE9BQU8sT0FBTztJQURwQjtRQUVhLFlBQU8sR0FBRyxNQUFNLENBQUMsRUFBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtRQU03RCxVQUFLLEdBQUcsTUFBTSxDQUFpQixFQUFFLENBQUMsQ0FBQTtRQUVsQyxXQUFNLEdBQUcsUUFBUSxDQUFpQixHQUFHLEVBQUU7WUFDNUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQTtZQUNyQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUE7WUFDekIsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDVCxNQUFNLE1BQU0sR0FBNEIsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUV2RCxLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO29CQUMxQyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtv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QUksRUFBRSxNQUFNLENBQUMsQ0FBQTtZQUM1QixVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO1lBQ25ELE9BQU8sVUFBVSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUMzQyxDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUM7OEdBaEZRLE9BQU87a0dBQVAsT0FBTzs7OzJGQUFQLE9BQU87a0JBRG5CLFNBQVM7bUJBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcHV0ZWQsIERpcmVjdGl2ZSwgaW5qZWN0LCBzaWduYWwsIHVudHJhY2tlZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCJcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCJcblxuaW1wb3J0IHsgTXV0YWJsZSB9IGZyb20gXCJ1dGlsaXR5LXR5cGVzXCJcblxuaW1wb3J0IHsgZGVlcENsb25lIH0gZnJvbSBcIkBuZ3V0aWwvY29tbW9uXCJcblxuaW1wb3J0IHsgY29tcGlsZSBhcyBjb21waWxlU2VsZWN0b3IgfSBmcm9tIFwiLi9zZWxlY3RvclwiXG5cbi8qKlxuICoge1xuICogIGJ1c3k6IHtcbiAqICAgICAgc2VsZjogdHJ1ZSxcbiAqICAgICAgcGFyZW50OiBmYWxzZSxcbiAqICAgICAgZGlzYWJsZWQ6IGZhbHNlXG4gKiAgfVxuICogfVxuICovXG5leHBvcnQgdHlwZSBVaVN0YXRlRGV0YWlscyA9IHsgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogVWlTdGF0ZUVudHJ5IH1cblxuZXhwb3J0IHR5cGUgVWlTdGF0ZUVudHJ5ID0geyByZWFkb25seSBba2V5OiBVaVN0YXRlU291cmNlXTogYm9vbGVhbiB9XG5cbmV4cG9ydCB0eXBlIFVpU3RhdGVWYWx1ZSA9IHsgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9XG5cbmV4cG9ydCB0eXBlIFVpU3RhdGVTb3VyY2UgPSBcInBhcmVudFwiIHwgXCJzZWxmXCIgfCBzdHJpbmdcblxuZXhwb3J0IHR5cGUgVWlTdGF0ZVNlbGVjdG9yID0gc3RyaW5nXG5cbkBEaXJlY3RpdmUoeyBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgVWlTdGF0ZTxOIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBTIGV4dGVuZHMgVWlTdGF0ZVNvdXJjZSA9IFVpU3RhdGVTb3VyY2U+IHtcbiAgICByZWFkb25seSAjcGFyZW50ID0gaW5qZWN0KFVpU3RhdGUsIHsgc2tpcFNlbGY6IHRydWUsIG9wdGlvbmFsOiB0cnVlIH0pXG5cbiAgICBnZXQgcm9vdCgpOiBVaVN0YXRlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3BhcmVudD8ucm9vdCB8fCB0aGlzXG4gICAgfVxuXG4gICAgcmVhZG9ubHkgI3NlbGYgPSBzaWduYWw8VWlTdGF0ZURldGFpbHM+KHt9KVxuXG4gICAgcmVhZG9ubHkgbWVyZ2VkID0gY29tcHV0ZWQ8VWlTdGF0ZURldGFpbHM+KCgpID0+IHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy4jcGFyZW50Py5tZXJnZWQoKVxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcy4jc2VsZigpXG4gICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogTXV0YWJsZTxVaVN0YXRlRGV0YWlscz4gPSBkZWVwQ2xvbmUoc2VsZilcblxuICAgICAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMocGFyZW50KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudElzVHJ1ZSA9IE9iamVjdC52YWx1ZXModikuaW5jbHVkZXModHJ1ZSlcbiAgICAgICAgICAgICAgICBjb25zdCB7IHNlbGY6IF8sIC4uLnBhcmVudFdpaHRvdXRTZWxmIH0gPSB2XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdFtrXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFtrXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnBhcmVudFdpaHRvdXRTZWxmLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4ucmVzdWx0W2tdLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBwYXJlbnRJc1RydWVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFtrXSA9IHsgLi4ucGFyZW50V2lodG91dFNlbGYsIHBhcmVudDogcGFyZW50SXNUcnVlIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxmXG4gICAgICAgIH1cbiAgICB9KVxuXG4gICAgcmVhZG9ubHkgdmFsdWUgPSBjb21wdXRlZDxVaVN0YXRlVmFsdWU+KCgpID0+IHtcbiAgICAgICAgY29uc3QgbWVyZ2VkID0gdGhpcy5tZXJnZWQoKVxuICAgICAgICBjb25zdCByZXN1bHQ6IE11dGFibGU8VWlTdGF0ZVZhbHVlPiA9IHt9XG5cbiAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMobWVyZ2VkKSkge1xuICAgICAgICAgICAgcmVzdWx0W2tdID0gT2JqZWN0LnZhbHVlcyh2KS5pbmNsdWRlcyh0cnVlKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH0pXG5cbiAgICBzZXQobmFtZTogTiwgdmFsdWU6IGJvb2xlYW4sIHNvdXJjZTogUyA9IFwic2VsZlwiIGFzIFMpIHtcbiAgICAgICAgaWYgKHNvdXJjZSA9PT0gXCJwYXJlbnRcIikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcImNhbid0IHNldCBwYXJlbnQgc3RhdGVcIilcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY3VycmVudCA9IHVudHJhY2tlZCh0aGlzLiNzZWxmKVxuICAgICAgICBjb25zdCBlbnRyeSA9IGN1cnJlbnRbbmFtZV0gfHwge31cblxuICAgICAgICBpZiAoZW50cnlbc291cmNlXSAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuI3NlbGYuc2V0KHsgLi4uY3VycmVudCwgW25hbWVdOiB7IC4uLmVudHJ5LCBbc291cmNlXTogdmFsdWUgfSB9KVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVE9ETzogbWF5YmUgc29tZSBvcHRpb24gdG8gcHJvcGFnYXRlIHRvIHJvb3RcbiAgICAgICAgLy8gY29uc3Qgcm9vdCA9IHRoaXMucm9vdFxuICAgICAgICAvLyBpZiAoc291cmNlICE9PSBcInNlbGZcIiAmJiByb290ICE9PSB0aGlzKSB7XG4gICAgICAgIC8vICAgICByb290LnNldChuYW1lLCB2YWx1ZSwgc291cmNlKVxuICAgICAgICAvLyB9XG4gICAgfVxuXG4gICAgaXMoc2VsZWN0b3I6IFVpU3RhdGVTZWxlY3RvciA9IFwiKlwiKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBjb21waWxlU2VsZWN0b3Ioc2VsZWN0b3IpKHRoaXMubWVyZ2VkKCkpXG4gICAgfVxuXG4gICAgaW50ZXJjZXB0KG5hbWU6IE4sIHNvdXJjZTogUykge1xuICAgICAgICByZXR1cm4gPFM+KHNyYzogT2JzZXJ2YWJsZTxTPikgPT4gdGhpcy53cmFwKHNyYywgbmFtZSwgc291cmNlKVxuICAgIH1cblxuICAgIHdyYXA8VD4ob2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxUPiwgbmFtZTogTiwgc291cmNlOiBTKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxUPihzdWJzY3JpYmVyID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0KG5hbWUsIHRydWUsIHNvdXJjZSlcbiAgICAgICAgICAgIHN1YnNjcmliZXIuYWRkKCgpID0+IHRoaXMuc2V0KG5hbWUsIGZhbHNlLCBzb3VyY2UpKVxuICAgICAgICAgICAgcmV0dXJuIG9ic2VydmFibGUuc3Vic2NyaWJlKHN1YnNjcmliZXIpXG4gICAgICAgIH0pXG4gICAgfVxufVxuIl19