angular-three 2.0.0-beta.2 → 2.0.0-beta.4

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.
@@ -8,28 +8,26 @@ class NgtSignalStore {
8
8
  constructor(initialState = {}) {
9
9
  initialState ??= {};
10
10
  this.#state = createSignal(Object.assign(initialState, { __ngt_dummy_state__: Date.now() }));
11
+ this.state = this.#state.asReadonly();
11
12
  }
12
13
  select(...keysAndOptions) {
13
14
  if (keysAndOptions.length === 0)
14
- return this.#state.asReadonly();
15
+ return this.state;
15
16
  if (keysAndOptions.length === 1 && typeof keysAndOptions[0] === 'object') {
16
17
  if (!this.#computedCache.has(STORE_COMPUTED_KEY)) {
17
- this.#computedCache.set(STORE_COMPUTED_KEY, computed(() => this.#state(), keysAndOptions));
18
+ this.#computedCache.set(STORE_COMPUTED_KEY, computed(this.state, keysAndOptions));
18
19
  return this.#computedCache.get(STORE_COMPUTED_KEY);
19
20
  }
20
21
  }
21
22
  const [keys, options] = parseOptions(keysAndOptions);
22
23
  const joinedKeys = keys.join('-');
23
24
  if (!this.#computedCache.has(joinedKeys)) {
24
- this.#computedCache.set(joinedKeys, computed(() => {
25
- const state = this.#state();
26
- return keys.reduce((value, key) => value[key], state);
27
- }, options));
25
+ this.#computedCache.set(joinedKeys, computed(() => keys.reduce((value, key) => value[key], this.state()), options));
28
26
  }
29
27
  return this.#computedCache.get(joinedKeys);
30
28
  }
31
29
  get(...keys) {
32
- const state = untracked(this.#state);
30
+ const state = untracked(this.state);
33
31
  if (keys.length === 0)
34
32
  return state;
35
33
  return keys.reduce((value, key) => value[key], state);
@@ -78,4 +76,4 @@ function parseOptions(keysAndOptions) {
78
76
  }
79
77
  return [keysAndOptions];
80
78
  }
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsLnN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlL3NyYy9saWIvc3RvcmVzL3NpZ25hbC5zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsTUFBTSxFQUNOLFVBQVUsRUFDVixRQUFRLEVBQ1IsUUFBUSxFQUNSLFNBQVMsR0FJWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBRS9DLE1BQU0sa0JBQWtCLEdBQUcsd0JBQWlDLENBQUM7QUFFN0QsTUFDYSxjQUFjO0lBQ2QsTUFBTSxDQUF5QjtJQUMvQixjQUFjLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUVwQyxZQUdJLGVBQWdDLEVBQWdDO1FBRWhFLFlBQVksS0FBSyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBVyxDQUFDLENBQUM7SUFDM0csQ0FBQztJQTJCRCxNQUFNLENBQUMsR0FBRyxjQUFxQjtRQUMzQixJQUFJLGNBQWMsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNqRSxJQUFJLGNBQWMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLE9BQU8sY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtZQUN0RSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsRUFBRTtnQkFDOUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQ25CLGtCQUFrQixFQUNsQixRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFB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QUFDLENBQUM7aUJBQzVDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDLENBQUM7UUFDRixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlFLENBQUM7OEdBaEhRLGNBQWMsa0JBTVgsZUFBZTtrSEFObEIsY0FBYzs7U0FBZCxjQUFjOzJGQUFkLGNBQWM7a0JBRDFCLFVBQVU7OzBCQU1GLFFBQVE7OzBCQUNSLE1BQU07MkJBQUMsZUFBZTs7QUE2Ry9CLFNBQVMsWUFBWSxDQUFDLGNBQXFCO0lBQ3ZDLElBQUksT0FBTyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO1FBQzNDLE9BQU8sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQy9EO0lBRUQsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQzVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEluamVjdCxcbiAgICBJbmplY3RhYmxlLFxuICAgIE9wdGlvbmFsLFxuICAgIGNvbXB1dGVkLFxuICAgIHVudHJhY2tlZCxcbiAgICB0eXBlIENyZWF0ZUNvbXB1dGVkT3B0aW9ucyxcbiAgICB0eXBlIFNpZ25hbCxcbiAgICB0eXBlIFdyaXRhYmxlU2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgTmd0QW55UmVjb3JkIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgY3JlYXRlU2lnbmFsIH0gZnJvbSAnLi4vdXRpbHMvc2lnbmFsJztcblxuY29uc3QgU1RPUkVfQ09NUFVURURfS0VZID0gJ19fbmd0X3N0b3JlX2NvbXB1dGVkX18nIGFzIGNvbnN0O1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTmd0U2lnbmFsU3RvcmU8VFN0YXRlIGV4dGVuZHMgb2JqZWN0PiB7XG4gICAgcmVhZG9ubHkgI3N0YXRlOiBXcml0YWJsZVNpZ25hbDxUU3RhdGU+O1xuICAgIHJlYWRvbmx5ICNjb21wdXRlZENhY2hlID0gbmV3IE1hcCgpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBPcHRpb25hbCgpXG4gICAgICAgIEBJbmplY3QoJ0lOSVRJQUxfU1RBVEUnKVxuICAgICAgICBpbml0aWFsU3RhdGU6IFBhcnRpYWw8VFN0YXRlPiA9IHt9IGFzIHVua25vd24gYXMgUGFydGlhbDxUU3RhdGU+XG4gICAgKSB7XG4gICAgICAgIGluaXRpYWxTdGF0ZSA/Pz0ge307XG4gICAgICAgIHRoaXMuI3N0YXRlID0gY3JlYXRlU2lnbmFsKE9iamVjdC5hc3NpZ24oaW5pdGlhbFN0YXRlLCB7IF9fbmd0X2R1bW15X3N0YXRlX186IERhdGUubm93KCkgfSkgYXMgVFN0YXRlKTtcbiAgICB9XG5cbiAgICBzZWxlY3Q8XG4gICAgICAgIFRLZXkxIGV4dGVuZHMga2V5b2YgVFN0YXRlLFxuICAgICAgICBUS2V5MiBleHRlbmRzIGtleW9mIFRTdGF0ZVtUS2V5MV0sXG4gICAgICAgIFRLZXkzIGV4dGVuZHMga2V5b2YgVFN0YXRlW1RLZXkxXVtUS2V5Ml0sXG4gICAgICAgIFRLZXk0IGV4dGVuZHMga2V5b2YgVFN0YXRlW1RLZXkxXVtUS2V5Ml1bVEtleTNdXG4gICAgPihcbiAgICAgICAga2V5MTogVEtleTEsXG4gICAgICAgIGtleTI6IFRLZXkyLFxuICAgICAgICBrZXkzOiBUS2V5MyxcbiAgICAgICAga2V5NDogVEtleTQsXG4gICAgICAgIG9wdGlvbnM/OiBDcmVhdGVDb21wdXRlZE9wdGlvbnM8VFN0YXRlW1RLZXkxXVtUS2V5Ml1bVEtleTNdW1RLZXk0XT5cbiAgICApOiBTaWduYWw8VFN0YXRlW1RLZXkxXVtUS2V5Ml1bVEtleTNdW1RLZXk0XT47XG4gICAgc2VsZWN0PFRLZXkxIGV4dGVuZHMga2V5b2YgVFN0YXRlLCBUS2V5MiBleHRlbmRzIGtleW9mIFRTdGF0ZVtUS2V5MV0sIFRLZXkzIGV4dGVuZHMga2V5b2YgVFN0YXRlW1RLZXkxXVtUS2V5Ml0+KFxuICAgICAgICBrZXkxOiBUS2V5MSxcbiAgICAgICAga2V5MjogVEtleTIsXG4gICAgICAgIGtleTM6IFRLZXkzLFxuICAgICAgICBvcHRpb25zPzogQ3JlYXRlQ29tcHV0ZWRPcHRpb25zPFRTdGF0ZVtUS2V5MV1bVEtleTJdW1RLZXkzXT5cbiAgICApOiBTaWduYWw8VFN0YXRlW1RLZXkxXVtUS2V5Ml1bVEtleTNdPjtcbiAgICBzZWxlY3Q8VEtleTEgZXh0ZW5kcyBrZXlvZiBUU3RhdGUsIFRLZXkyIGV4dGVuZHMga2V5b2YgVFN0YXRlW1RLZXkxXT4oXG4gICAgICAgIGtleTE6IFRLZXkxLFxuICAgICAgICBrZXkyOiBUS2V5MixcbiAgICAgICAgb3B0aW9ucz86IENyZWF0ZUNvbXB1dGVkT3B0aW9uczxUU3RhdGVbVEtleTFdW1RLZXkyXT5cbiAgICApOiBTaWduYWw8VFN0YXRlW1RLZXkxXVtUS2V5Ml0+O1xuICAgIHNlbGVjdDxUS2V5IGV4dGVuZHMga2V5b2YgVFN0YXRlPihrZXk6IFRLZXksIG9wdGlvbnM/OiBDcmVhdGVDb21wdXRlZE9wdGlvbnM8VFN0YXRlW1RLZXldPik6IFNpZ25hbDxUU3RhdGVbVEtleV0+O1xuICAgIHNlbGVjdChvcHRpb25zPzogQ3JlYXRlQ29tcHV0ZWRPcHRpb25zPFRTdGF0ZT4pOiBTaWduYWw8VFN0YXRlPjtcbiAgICBzZWxlY3QoLi4ua2V5c0FuZE9wdGlvbnM6IGFueVtdKSB7XG4gICAgICAgIGlmIChrZXlzQW5kT3B0aW9ucy5sZW5ndGggPT09IDApIHJldHVybiB0aGlzLiNzdGF0ZS5hc1JlYWRvbmx5KCk7XG4gICAgICAgIGlmIChrZXlzQW5kT3B0aW9ucy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGtleXNBbmRPcHRpb25zWzBdID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLiNjb21wdXRlZENhY2hlLmhhcyhTVE9SRV9DT01QVVRFRF9LRVkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jY29tcHV0ZWRDYWNoZS5zZXQoXG4gICAgICAgICAgICAgICAgICAgIFNUT1JFX0NPTVBVVEVEX0tFWSxcbiAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWQoKCkgPT4gdGhpcy4jc3RhdGUoKSwga2V5c0FuZE9wdGlvbnMgYXMgQ3JlYXRlQ29tcHV0ZWRPcHRpb25zPFRTdGF0ZT4pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4jY29tcHV0ZWRDYWNoZS5nZXQoU1RPUkVfQ09NUFVURURfS0VZKSE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgW2tleXMsIG9wdGlvbnNdID0gcGFyc2VPcHRpb25zKGtleXNBbmRPcHRpb25zKTtcblxuICAgICAgICBjb25zdCBqb2luZWRLZXlzID0ga2V5cy5qb2luKCctJyk7XG5cbiAgICAgICAgaWYgKCF0aGlzLiNjb21wdXRlZENhY2hlLmhhcyhqb2luZWRLZXlzKSkge1xuICAgICAgICAgICAgdGhpcy4jY29tcHV0ZWRDYWNoZS5zZXQoXG4gICAgICAgICAgICAgICAgam9pbmVkS2V5cyxcbiAgICAgICAgICAgICAgICBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy4jc3RhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleXMucmVkdWNlKCh2YWx1ZSwga2V5KSA9PiAodmFsdWUgYXMgTmd0QW55UmVjb3JkKVtrZXldLCBzdGF0ZSk7XG4gICAgICAgICAgICAgICAgfSwgb3B0aW9ucylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy4jY29tcHV0ZWRDYWNoZS5nZXQoam9pbmVkS2V5cykhO1xuICAgIH1cblxuICAgIGdldDxcbiAgICAgICAgVEtleTEgZXh0ZW5kcyBrZXlvZiBUU3RhdGUsXG4gICAgICAgIFRLZXkyIGV4dGVuZHMga2V5b2YgVFN0YXRlW1RLZXkxXSxcbiAgICAgICAgVEtleTMgZXh0ZW5kcyBrZXlvZiBUU3RhdGVbVEtleTFdW1RLZXkyXSxcbiAgICAgICAgVEtleTQgZXh0ZW5kcyBrZXlvZiBUU3RhdGVbVEtleTFdW1RLZXkyXVtUS2V5M11cbiAgICA+KGtleTE6IFRLZXkxLCBrZXkyOiBUS2V5Miwga2V5MzogVEtleTMsIGtleTQ6IFRLZXk0KTogVFN0YXRlW1RLZXkxXVtUS2V5Ml1bVEtleTNdW1RLZXk0XTtcbiAgICBnZXQ8VEtleTEgZXh0ZW5kcyBrZXlvZiBUU3RhdGUsIFRLZXkyIGV4dGVuZHMga2V5b2YgVFN0YXRlW1RLZXkxXSwgVEtleTMgZXh0ZW5kcyBrZXlvZiBUU3RhdGVbVEtleTFdW1RLZXkyXT4oXG4gICAgICAgIGtleTE6IFRLZXkxLFxuICAgICAgICBrZXkyOiBUS2V5MixcbiAgICAgICAga2V5MzogVEtleTNcbiAgICApOiBUU3RhdGVbVEtleTFdW1RLZXkyXVtUS2V5M107XG4gICAgZ2V0PFRLZXkxIGV4dGVuZHMga2V5b2YgVFN0YXRlLCBUS2V5MiBleHRlbmRzIGtleW9mIFRTdGF0ZVtUS2V5MV0+KGtleTE6IFRLZXkxLCBrZXkyOiBUS2V5Mik6IFRTdGF0ZVtUS2V5MV1bVEtleTJdO1xuICAgIGdldDxUS2V5IGV4dGVuZHMga2V5b2YgVFN0YXRlPihrZXk6IFRLZXkpOiBUU3RhdGVbVEtleV07XG4gICAgZ2V0KCk6IFRTdGF0ZTtcbiAgICBnZXQoLi4ua2V5czogc3RyaW5nW10pIHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB1bnRyYWNrZWQodGhpcy4jc3RhdGUpO1xuICAgICAgICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHJldHVybiBzdGF0ZTtcbiAgICAgICAgcmV0dXJuIGtleXMucmVkdWNlKCh2YWx1ZSwga2V5KSA9PiAodmFsdWUgYXMgTmd0QW55UmVjb3JkKVtrZXldLCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgc2V0KHN0YXRlOiBQYXJ0aWFsPFRTdGF0ZT4gfCAoKHByZXZpb3VzOiBUU3RhdGUpID0+IFBhcnRpYWw8VFN0YXRlPikpIHtcbiAgICAgICAgY29uc3QgdXBkYXRlciA9IChwcmV2aW91czogVFN0YXRlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0aWFsID0gdHlwZW9mIHN0YXRlID09PSAnZnVuY3Rpb24nID8gc3RhdGUocHJldmlvdXMpIDogc3RhdGU7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhwYXJ0aWFsKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJ0aWFsS2V5ID0ga2V5IGFzIGtleW9mIFRTdGF0ZTtcbiAgICAgICAgICAgICAgICBpZiAocGFydGlhbFtwYXJ0aWFsS2V5XSA9PT0gdW5kZWZpbmVkICYmIHByZXZpb3VzW3BhcnRpYWxLZXldICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFydGlhbFtwYXJ0aWFsS2V5XSA9IHByZXZpb3VzW3BhcnRpYWxLZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHBhcnRpYWw7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuI3N0YXRlLnVwZGF0ZSgocHJldmlvdXMpID0+ICh7IC4uLnByZXZpb3VzLCAuLi51cGRhdGVyKHByZXZpb3VzKSB9KSk7XG4gICAgICAgIC8vIHRoaXMuI3N0YXRlLnVwZGF0ZShwcmV2aW91cyA9PiAoey4uLnByZXZpb3VzLCAuLi4odHlwZW9mIHN0YXRlID09PSAnZnVuY3Rpb24nID8gc3RhdGUocHJldmlvdXMpIDogc3RhdGUpfSkpXG4gICAgfVxuXG4gICAgcGF0Y2goc3RhdGU6IFBhcnRpYWw8VFN0YXRlPikge1xuICAgICAgICBjb25zdCB1cGRhdGVyID0gKHByZXZpb3VzOiBUU3RhdGUpID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHN0YXRlKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJ0aWFsS2V5ID0ga2V5IGFzIGtleW9mIFRTdGF0ZTtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGVbcGFydGlhbEtleV0gPT09IHVuZGVmaW5lZCAmJiBwcmV2aW91c1twYXJ0aWFsS2V5XSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlW3BhcnRpYWxLZXldID0gcHJldmlvdXNbcGFydGlhbEtleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuI3N0YXRlLnVwZGF0ZSgocHJldmlvdXMpID0+ICh7IC4uLnVwZGF0ZXIocHJldmlvdXMpLCAuLi5wcmV2aW91cyB9KSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZU9wdGlvbnMoa2V5c0FuZE9wdGlvbnM6IGFueVtdKTogW3N0cmluZ1tdLCBDcmVhdGVDb21wdXRlZE9wdGlvbnM8YW55Pj9dIHtcbiAgICBpZiAodHlwZW9mIGtleXNBbmRPcHRpb25zLmF0KC0xKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIFtrZXlzQW5kT3B0aW9ucy5zbGljZSgwLCAtMSksIGtleXNBbmRPcHRpb25zLmF0KC0xKV07XG4gICAgfVxuXG4gICAgcmV0dXJuIFtrZXlzQW5kT3B0aW9uc107XG59XG4iXX0=
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsLnN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlL3NyYy9saWIvc3RvcmVzL3NpZ25hbC5zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsTUFBTSxFQUNOLFVBQVUsRUFDVixRQUFRLEVBQ1IsUUFBUSxFQUNSLFNBQVMsR0FJWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBRS9DLE1BQU0sa0JBQWtCLEdBQUcsd0JBQWlDLENBQUM7QUFFN0QsTUFDYSxjQUFjO0lBQ2QsTUFBTSxDQUF5QjtJQUMvQixjQUFjLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUdwQyxZQUdJLGVBQWdDLEVBQWdDO1FBRWhFLFlBQVksS0FBSyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBVyxDQUFDLENBQUM7UUFDdkcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQzFDLENBQUM7SUEyQkQsTUFBTSxDQUFDLEdBQUcsY0FBcUI7UUFDM0IsSUFBSSxjQUFjLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDbkQsSUFBSSxjQUFjLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxPQUFPLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUU7WUFDdEUsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLEVBQUU7Z0JBQzlDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxD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QUFDLENBQUM7WUFDSCxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDLENBQUM7UUFDRixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlFLENBQUM7OEdBL0dRLGNBQWMsa0JBT1gsZUFBZTtrSEFQbEIsY0FBYzs7U0FBZCxjQUFjOzJGQUFkLGNBQWM7a0JBRDFCLFVBQVU7OzBCQU9GLFFBQVE7OzBCQUNSLE1BQU07MkJBQUMsZUFBZTs7QUEyRy9CLFNBQVMsWUFBWSxDQUFDLGNBQXFCO0lBQ3ZDLElBQUksT0FBTyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO1FBQzNDLE9BQU8sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQy9EO0lBRUQsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQzVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEluamVjdCxcbiAgICBJbmplY3RhYmxlLFxuICAgIE9wdGlvbmFsLFxuICAgIGNvbXB1dGVkLFxuICAgIHVudHJhY2tlZCxcbiAgICB0eXBlIENyZWF0ZUNvbXB1dGVkT3B0aW9ucyxcbiAgICB0eXBlIFNpZ25hbCxcbiAgICB0eXBlIFdyaXRhYmxlU2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgTmd0QW55UmVjb3JkIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgY3JlYXRlU2lnbmFsIH0gZnJvbSAnLi4vdXRpbHMvc2lnbmFsJztcblxuY29uc3QgU1RPUkVfQ09NUFVURURfS0VZID0gJ19fbmd0X3N0b3JlX2NvbXB1dGVkX18nIGFzIGNvbnN0O1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTmd0U2lnbmFsU3RvcmU8VFN0YXRlIGV4dGVuZHMgb2JqZWN0PiB7XG4gICAgcmVhZG9ubHkgI3N0YXRlOiBXcml0YWJsZVNpZ25hbDxUU3RhdGU+O1xuICAgIHJlYWRvbmx5ICNjb21wdXRlZENhY2hlID0gbmV3IE1hcCgpO1xuICAgIHJlYWRvbmx5IHN0YXRlOiBTaWduYWw8VFN0YXRlPjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBAT3B0aW9uYWwoKVxuICAgICAgICBASW5qZWN0KCdJTklUSUFMX1NUQVRFJylcbiAgICAgICAgaW5pdGlhbFN0YXRlOiBQYXJ0aWFsPFRTdGF0ZT4gPSB7fSBhcyB1bmtub3duIGFzIFBhcnRpYWw8VFN0YXRlPlxuICAgICkge1xuICAgICAgICBpbml0aWFsU3RhdGUgPz89IHt9O1xuICAgICAgICB0aGlzLiNzdGF0ZSA9IGNyZWF0ZVNpZ25hbChPYmplY3QuYXNzaWduKGluaXRpYWxTdGF0ZSwgeyBfX25ndF9kdW1teV9zdGF0ZV9fOiBEYXRlLm5vdygpIH0pIGFzIFRTdGF0ZSk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSB0aGlzLiNzdGF0ZS5hc1JlYWRvbmx5KCk7XG4gICAgfVxuXG4gICAgc2VsZWN0PFxuICAgICAgICBUS2V5MSBleHRlbmRzIGtleW9mIFRTdGF0ZSxcbiAgICAgICAgVEtleTIgZXh0ZW5kcyBrZXlvZiBUU3RhdGVbVEtleTFdLFxuICAgICAgICBUS2V5MyBleHRlbmRzIGtleW9mIFRTdGF0ZVtUS2V5MV1bVEtleTJdLFxuICAgICAgICBUS2V5NCBleHRlbmRzIGtleW9mIFRTdGF0ZVtUS2V5MV1bVEtleTJdW1RLZXkzXVxuICAgID4oXG4gICAgICAgIGtleTE6IFRLZXkxLFxuICAgICAgICBrZXkyOiBUS2V5MixcbiAgICAgICAga2V5MzogVEtleTMsXG4gICAgICAgIGtleTQ6IFRLZXk0LFxuICAgICAgICBvcHRpb25zPzogQ3JlYXRlQ29tcHV0ZWRPcHRpb25zPFRTdGF0ZVtUS2V5MV1bVEtleTJdW1RLZXkzXVtUS2V5NF0+XG4gICAgKTogU2lnbmFsPFRTdGF0ZVtUS2V5MV1bVEtleTJdW1RLZXkzXVtUS2V5NF0+O1xuICAgIHNlbGVjdDxUS2V5MSBleHRlbmRzIGtleW9mIFRTdGF0ZSwgVEtleTIgZXh0ZW5kcyBrZXlvZiBUU3RhdGVbVEtleTFdLCBUS2V5MyBleHRlbmRzIGtleW9mIFRTdGF0ZVtUS2V5MV1bVEtleTJdPihcbiAgICAgICAga2V5MTogVEtleTEsXG4gICAgICAgIGtleTI6IFRLZXkyLFxuICAgICAgICBrZXkzOiBUS2V5MyxcbiAgICAgICAgb3B0aW9ucz86IENyZWF0ZUNvbXB1dGVkT3B0aW9uczxUU3RhdGVbVEtleTFdW1RLZXkyXVtUS2V5M10+XG4gICAgKTogU2lnbmFsPFRTdGF0ZVtUS2V5MV1bVEtleTJdW1RLZXkzXT47XG4gICAgc2VsZWN0PFRLZXkxIGV4dGVuZHMga2V5b2YgVFN0YXRlLCBUS2V5MiBleHRlbmRzIGtleW9mIFRTdGF0ZVtUS2V5MV0+KFxuICAgICAgICBrZXkxOiBUS2V5MSxcbiAgICAgICAga2V5MjogVEtleTIsXG4gICAgICAgIG9wdGlvbnM/OiBDcmVhdGVDb21wdXRlZE9wdGlvbnM8VFN0YXRlW1RLZXkxXVtUS2V5Ml0+XG4gICAgKTogU2lnbmFsPFRTdGF0ZVtUS2V5MV1bVEtleTJdPjtcbiAgICBzZWxlY3Q8VEtleSBleHRlbmRzIGtleW9mIFRTdGF0ZT4oa2V5OiBUS2V5LCBvcHRpb25zPzogQ3JlYXRlQ29tcHV0ZWRPcHRpb25zPFRTdGF0ZVtUS2V5XT4pOiBTaWduYWw8VFN0YXRlW1RLZXldPjtcbiAgICBzZWxlY3Qob3B0aW9ucz86IENyZWF0ZUNvbXB1dGVkT3B0aW9uczxUU3RhdGU+KTogU2lnbmFsPFRTdGF0ZT47XG4gICAgc2VsZWN0KC4uLmtleXNBbmRPcHRpb25zOiBhbnlbXSkge1xuICAgICAgICBpZiAoa2V5c0FuZE9wdGlvbnMubGVuZ3RoID09PSAwKSByZXR1cm4gdGhpcy5zdGF0ZTtcbiAgICAgICAgaWYgKGtleXNBbmRPcHRpb25zLmxlbmd0aCA9PT0gMSAmJiB0eXBlb2Yga2V5c0FuZE9wdGlvbnNbMF0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuI2NvbXB1dGVkQ2FjaGUuaGFzKFNUT1JFX0NPTVBVVEVEX0tFWSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNjb21wdXRlZENhY2hlLnNldChcbiAgICAgICAgICAgICAgICAgICAgU1RPUkVfQ09NUFVURURfS0VZLFxuICAgICAgICAgICAgICAgICAgICBjb21wdXRlZCh0aGlzLnN0YXRlLCBrZXlzQW5kT3B0aW9ucyBhcyBDcmVhdGVDb21wdXRlZE9wdGlvbnM8VFN0YXRlPilcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiNjb21wdXRlZENhY2hlLmdldChTVE9SRV9DT01QVVRFRF9LRVkpITtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBba2V5cywgb3B0aW9uc10gPSBwYXJzZU9wdGlvbnMoa2V5c0FuZE9wdGlvbnMpO1xuXG4gICAgICAgIGNvbnN0IGpvaW5lZEtleXMgPSBrZXlzLmpvaW4oJy0nKTtcblxuICAgICAgICBpZiAoIXRoaXMuI2NvbXB1dGVkQ2FjaGUuaGFzKGpvaW5lZEtleXMpKSB7XG4gICAgICAgICAgICB0aGlzLiNjb21wdXRlZENhY2hlLnNldChcbiAgICAgICAgICAgICAgICBqb2luZWRLZXlzLFxuICAgICAgICAgICAgICAgIGNvbXB1dGVkKCgpID0+IGtleXMucmVkdWNlKCh2YWx1ZSwga2V5KSA9PiAodmFsdWUgYXMgTmd0QW55UmVjb3JkKVtrZXldLCB0aGlzLnN0YXRlKCkpLCBvcHRpb25zKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLiNjb21wdXRlZENhY2hlLmdldChqb2luZWRLZXlzKSE7XG4gICAgfVxuXG4gICAgZ2V0PFxuICAgICAgICBUS2V5MSBleHRlbmRzIGtleW9mIFRTdGF0ZSxcbiAgICAgICAgVEtleTIgZXh0ZW5kcyBrZXlvZiBUU3RhdGVbVEtleTFdLFxuICAgICAgICBUS2V5MyBleHRlbmRzIGtleW9mIFRTdGF0ZVtUS2V5MV1bVEtleTJdLFxuICAgICAgICBUS2V5NCBleHRlbmRzIGtleW9mIFRTdGF0ZVtUS2V5MV1bVEtleTJdW1RLZXkzXVxuICAgID4oa2V5MTogVEtleTEsIGtleTI6IFRLZXkyLCBrZXkzOiBUS2V5Mywga2V5NDogVEtleTQpOiBUU3RhdGVbVEtleTFdW1RLZXkyXVtUS2V5M11bVEtleTRdO1xuICAgIGdldDxUS2V5MSBleHRlbmRzIGtleW9mIFRTdGF0ZSwgVEtleTIgZXh0ZW5kcyBrZXlvZiBUU3RhdGVbVEtleTFdLCBUS2V5MyBleHRlbmRzIGtleW9mIFRTdGF0ZVtUS2V5MV1bVEtleTJdPihcbiAgICAgICAga2V5MTogVEtleTEsXG4gICAgICAgIGtleTI6IFRLZXkyLFxuICAgICAgICBrZXkzOiBUS2V5M1xuICAgICk6IFRTdGF0ZVtUS2V5MV1bVEtleTJdW1RLZXkzXTtcbiAgICBnZXQ8VEtleTEgZXh0ZW5kcyBrZXlvZiBUU3RhdGUsIFRLZXkyIGV4dGVuZHMga2V5b2YgVFN0YXRlW1RLZXkxXT4oa2V5MTogVEtleTEsIGtleTI6IFRLZXkyKTogVFN0YXRlW1RLZXkxXVtUS2V5Ml07XG4gICAgZ2V0PFRLZXkgZXh0ZW5kcyBrZXlvZiBUU3RhdGU+KGtleTogVEtleSk6IFRTdGF0ZVtUS2V5XTtcbiAgICBnZXQoKTogVFN0YXRlO1xuICAgIGdldCguLi5rZXlzOiBzdHJpbmdbXSkge1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHVudHJhY2tlZCh0aGlzLnN0YXRlKTtcbiAgICAgICAgaWYgKGtleXMubGVuZ3RoID09PSAwKSByZXR1cm4gc3RhdGU7XG4gICAgICAgIHJldHVybiBrZXlzLnJlZHVjZSgodmFsdWUsIGtleSkgPT4gKHZhbHVlIGFzIE5ndEFueVJlY29yZClba2V5XSwgc3RhdGUpO1xuICAgIH1cblxuICAgIHNldChzdGF0ZTogUGFydGlhbDxUU3RhdGU+IHwgKChwcmV2aW91czogVFN0YXRlKSA9PiBQYXJ0aWFsPFRTdGF0ZT4pKSB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZXIgPSAocHJldmlvdXM6IFRTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFydGlhbCA9IHR5cGVvZiBzdGF0ZSA9PT0gJ2Z1bmN0aW9uJyA/IHN0YXRlKHByZXZpb3VzKSA6IHN0YXRlO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMocGFydGlhbCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFydGlhbEtleSA9IGtleSBhcyBrZXlvZiBUU3RhdGU7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnRpYWxbcGFydGlhbEtleV0gPT09IHVuZGVmaW5lZCAmJiBwcmV2aW91c1twYXJ0aWFsS2V5XSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnRpYWxbcGFydGlhbEtleV0gPSBwcmV2aW91c1twYXJ0aWFsS2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBwYXJ0aWFsO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLiNzdGF0ZS51cGRhdGUoKHByZXZpb3VzKSA9PiAoeyAuLi5wcmV2aW91cywgLi4udXBkYXRlcihwcmV2aW91cykgfSkpO1xuICAgICAgICAvLyB0aGlzLiNzdGF0ZS51cGRhdGUocHJldmlvdXMgPT4gKHsuLi5wcmV2aW91cywgLi4uKHR5cGVvZiBzdGF0ZSA9PT0gJ2Z1bmN0aW9uJyA/IHN0YXRlKHByZXZpb3VzKSA6IHN0YXRlKX0pKVxuICAgIH1cblxuICAgIHBhdGNoKHN0YXRlOiBQYXJ0aWFsPFRTdGF0ZT4pIHtcbiAgICAgICAgY29uc3QgdXBkYXRlciA9IChwcmV2aW91czogVFN0YXRlKSA9PiB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhzdGF0ZSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFydGlhbEtleSA9IGtleSBhcyBrZXlvZiBUU3RhdGU7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlW3BhcnRpYWxLZXldID09PSB1bmRlZmluZWQgJiYgcHJldmlvdXNbcGFydGlhbEtleV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZVtwYXJ0aWFsS2V5XSA9IHByZXZpb3VzW3BhcnRpYWxLZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLiNzdGF0ZS51cGRhdGUoKHByZXZpb3VzKSA9PiAoeyAuLi51cGRhdGVyKHByZXZpb3VzKSwgLi4ucHJldmlvdXMgfSkpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VPcHRpb25zKGtleXNBbmRPcHRpb25zOiBhbnlbXSk6IFtzdHJpbmdbXSwgQ3JlYXRlQ29tcHV0ZWRPcHRpb25zPGFueT4/XSB7XG4gICAgaWYgKHR5cGVvZiBrZXlzQW5kT3B0aW9ucy5hdCgtMSkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBba2V5c0FuZE9wdGlvbnMuc2xpY2UoMCwgLTEpLCBrZXlzQW5kT3B0aW9ucy5hdCgtMSldO1xuICAgIH1cblxuICAgIHJldHVybiBba2V5c0FuZE9wdGlvbnNdO1xufVxuIl19
@@ -391,10 +391,7 @@ class NgtStore extends NgtSignalStore {
391
391
  }, { injector: this.#injector, allowSignalWrites: true });
392
392
  }
393
393
  #invalidate() {
394
- const state = this.select();
395
- effect(() => {
396
- state().invalidate();
397
- }, { injector: this.#injector });
394
+ effect(() => void this.state().invalidate(), { injector: this.#injector });
398
395
  }
399
396
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtStore, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
400
397
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtStore }); }
@@ -420,4 +417,4 @@ function dispose(obj) {
420
417
  delete obj[p];
421
418
  }
422
419
  }
423
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUvc3JjL2xpYi9zdG9yZXMvc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBWXJDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDNUMsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNqQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBRWhELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsRUFBcUMsQ0FBQztBQUN6RSxNQUFNLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUN6RCxNQUFNLFlBQVksR0FBRyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBa0IsQ0FBQztBQUUzRSxNQUNhLFFBQVMsU0FBUSxjQUF3QjtJQUR0RDs7UUFFYSxpQkFBWSxHQUFHLE1BQU0sQ0FBQyxRQUFR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QUMsSUFBSSxHQUFHLEVBQUU7UUFDaEIsQ0FBUyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7UUFDdkIsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDakI7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRWxlbWVudFJlZiwgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgY3JlYXRlTG9vcCB9IGZyb20gJy4uL2xvb3AnO1xuaW1wb3J0IHR5cGUge1xuICAgIE5ndEFueVJlY29yZCxcbiAgICBOZ3RCZWZvcmVSZW5kZXJSZWNvcmQsXG4gICAgTmd0Q2FudmFzSW5wdXRzLFxuICAgIE5ndERwcixcbiAgICBOZ3RFcXVDb25maWcsXG4gICAgTmd0RXZlbnRNYW5hZ2VyLFxuICAgIE5ndFNpemUsXG4gICAgTmd0U3RhdGUsXG4gICAgTmd0Vmlld3BvcnQsXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGFwcGx5UHJvcHMgfSBmcm9tICcuLi91dGlscy9hcHBseS1wcm9wcyc7XG5pbXBvcnQgeyBwcmVwYXJlIH0gZnJvbSAnLi4vdXRpbHMvaW5zdGFuY2UnO1xuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi91dGlscy9pcyc7XG5pbXBvcnQgeyBtYWtlRGVmYXVsdENhbWVyYSwgbWFrZURlZmF1bHRSZW5kZXJlciwgbWFrZURwciB9IGZyb20gJy4uL3V0aWxzL21ha2UnO1xuaW1wb3J0IHsgY2hlY2tOZWVkc1VwZGF0ZSwgdXBkYXRlQ2FtZXJhIH0gZnJvbSAnLi4vdXRpbHMvdXBkYXRlJztcbmltcG9ydCB7IE5ndFNpZ25hbFN0b3JlIH0gZnJvbSAnLi9zaWduYWwuc3RvcmUnO1xuXG5leHBvcnQgY29uc3Qgcm9vdFN0YXRlTWFwID0gbmV3IE1hcDxFbGVtZW50LCBOZ3RTaWduYWxTdG9yZTxOZ3RTdGF0ZT4+KCk7XG5jb25zdCB7IGludmFsaWRhdGUsIGFkdmFuY2UgfSA9IGNyZWF0ZUxvb3Aocm9vdFN0YXRlTWFwKTtcbmNvbnN0IHNoYWxsb3dMb29zZSA9IHsgb2JqZWN0czogJ3NoYWxsb3cnLCBzdHJpY3Q6IGZhbHNlIH0gYXMgTmd0RXF1Q29uZmlnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTmd0U3RvcmUgZXh0ZW5kcyBOZ3RTaWduYWxTdG9yZTxOZ3RTdGF0ZT4ge1xuICAgIHJlYWRvbmx5ICNwYXJlbnRTdG9yZSA9IGluamVjdChOZ3RTdG9yZSwgeyBvcHRpb25hbDogdHJ1ZSwgc2tpcFNlbGY6IHRydWUgfSk7XG4gICAgcmVhZG9ubHkgI3dpbmRvdyA9IGluamVjdChET0NVTUVOVCkuZGVmYXVsdFZpZXc7XG4gICAgcmVhZG9ubHkgI2luamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcblxuICAgIGlzSW5pdCA9IGZhbHNlO1xuXG4gICAgaW5pdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzSW5pdCkge1xuICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xuICAgICAgICAgICAgY29uc3QgZGVmYXVsdFRhcmdldCA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XG4gICAgICAgICAgICBjb25zdCB0ZW1wVGFyZ2V0ID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcblxuICAgICAgICAgICAgY29uc3QgZ2V0Q3VycmVudFZpZXdwb3J0ID0gKFxuICAgICAgICAgICAgICAgIGNhbWVyYSA9IHRoaXMuZ2V0KCdjYW1lcmEnKSxcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IFRIUkVFLlZlY3RvcjMgfCBQYXJhbWV0ZXJzPFRIUkVFLlZlY3RvcjNbJ3NldCddPiA9IGRlZmF1bHRUYXJnZXQsXG4gICAgICAgICAgICAgICAgc2l6ZSA9IHRoaXMuZ2V0KCdzaXplJylcbiAgICAgICAgICAgICk6IE9taXQ8Tmd0Vmlld3BvcnQsICdkcHInIHwgJ2luaXRpYWxEcHInPiA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCB0b3AsIGxlZnQgfSA9IHNpemU7XG4gICAgICAgICAgICAgICAgY29uc3QgYXNwZWN0ID0gd2lkdGggLyBoZWlnaHQ7XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIFRIUkVFLlZlY3RvcjMpIHRlbXBUYXJnZXQuY29weSh0YXJnZXQpO1xuICAgICAgICAgICAgICAgIGVsc2UgdGVtcFRhcmdldC5zZXQoLi4udGFyZ2V0KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlID0gY2FtZXJhLmdldFdvcmxkUG9zaXRpb24ocG9zaXRpb24pLmRpc3RhbmNlVG8odGVtcFRhcmdldCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoaXMub3J0aG9ncmFwaGljQ2FtZXJhKGNhbWVyYSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiB3aWR0aCAvIGNhbWVyYS56b29tLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQgLyBjYW1lcmEuem9vbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3I6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzcGVjdCxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBmb3YgPSAoY2FtZXJhLmZvdiAqIE1hdGguUEkpIC8gMTgwOyAvLyBjb252ZXJ0IHZlcnRpY2FsIGZvdiB0byByYWRpYW5zXG4gICAgICAgICAgICAgICAgY29uc3QgaCA9IDIgKiBNYXRoLnRhbihmb3YgLyAyKSAqIGRpc3RhbmNlOyAvLyB2aXNpYmxlIGhlaWdodFxuICAgICAgICAgICAgICAgIGNvbnN0IHcgPSBoICogYXNwZWN0O1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHdpZHRoOiB3LCBoZWlnaHQ6IGgsIHRvcCwgbGVmdCwgZmFjdG9yOiB3aWR0aCAvIHcsIGRpc3RhbmNlLCBhc3BlY3QgfTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGxldCBwZXJmb3JtYW5jZVRpbWVvdXQ6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xuICAgICAgICAgICAgY29uc3Qgc2V0UGVyZm9ybWFuY2VDdXJyZW50ID0gKGN1cnJlbnQ6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0KChzdGF0ZSkgPT4gKHsgcGVyZm9ybWFuY2U6IHsgLi4uc3RhdGUucGVyZm9ybWFuY2UsIGN1cnJlbnQgfSB9KSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLnNldCh7XG4gICAgICAgICAgICAgICAgZ2V0OiB0aGlzLmdldC5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICAgIHNldDogdGhpcy5zZXQuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICByZWFkeTogZmFsc2UsXG5cbiAgICAgICAgICAgICAgICBldmVudHM6IHsgcHJpb3JpdHk6IDEsIGVuYWJsZWQ6IHRydWUsIGNvbm5lY3RlZDogZmFsc2UgfSxcblxuICAgICAgICAgICAgICAgIGludmFsaWRhdGU6IChmcmFtZXMgPSAxKSA9PiBpbnZhbGlkYXRlKHRoaXMsIGZyYW1lcyksXG4gICAgICAgICAgICAgICAgYWR2YW5jZTogKHRpbWVzdGFtcDogbnVtYmVyLCBydW5HbG9iYWxFZmZlY3RzPzogYm9vbGVhbikgPT4gYWR2YW5jZSh0aW1lc3RhbXAsIHJ1bkdsb2JhbEVmZmVjdHMsIHRoaXMpLFxuXG4gICAgICAgICAgICAgICAgbGVnYWN5OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsaW5lYXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGZsYXQ6IGZhbHNlLFxuXG4gICAgICAgICAgICAgICAgY29udHJvbHM6IG51bGwsXG4gICAgICAgICAgICAgICAgY2xvY2s6IG5ldyBUSFJFRS5DbG9jaygpLFxuICAgICAgICAgICAgICAgIHBvaW50ZXI6IG5ldyBUSFJFRS5WZWN0b3IyKCksXG5cbiAgICAgICAgICAgICAgICBmcmFtZWxvb3A6ICdhbHdheXMnLFxuICAgICAgICAgICAgICAgIHBlcmZvcm1hbmNlOiB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQ6IDEsXG4gICAgICAgICAgICAgICAgICAgIG1pbjogMC41LFxuICAgICAgICAgICAgICAgICAgICBtYXg6IDEsXG4gICAgICAgICAgICAgICAgICAgIGRlYm91bmNlOiAyMDAsXG4gICAgICAgICAgICAgICAgICAgIHJlZ3Jlc3M6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsZWFyIHRpbWVvdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZXJmb3JtYW5jZVRpbWVvdXQpIGNsZWFyVGltZW91dChwZXJmb3JtYW5jZVRpbWVvdXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2V0IGxvd2VyIGJvdW5kXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUucGVyZm9ybWFuY2UuY3VycmVudCAhPT0gc3RhdGUucGVyZm9ybWFuY2UubWluKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFBlcmZvcm1hbmNlQ3VycmVudChzdGF0ZS5wZXJmb3JtYW5jZS5taW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ28gYmFjayB0byB1cHBlciBib3VuZFxuICAgICAgICAgICAgICAgICAgICAgICAgcGVyZm9ybWFuY2VUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UGVyZm9ybWFuY2VDdXJyZW50KHRoaXMuZ2V0KCdwZXJmb3JtYW5jZScsICdtYXgnKSB8fCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHN0YXRlLnBlcmZvcm1hbmNlLmRlYm91bmNlKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNpemU6IHsgd2lkdGg6IDAsIGhlaWdodDogMCwgdG9wOiAwLCBsZWZ0OiAwIH0sXG4gICAgICAgICAgICAgICAgdmlld3BvcnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbERwcjogMCxcbiAgICAgICAgICAgICAgICAgICAgZHByOiAwLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICAgICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICAgICAgICAgIGFzcGVjdDogMCxcbiAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2U6IDAsXG4gICAgICAgICAgICAgICAgICAgIGZhY3RvcjogMCxcbiAgICAgICAgICAgICAgICAgICAgZ2V0Q3VycmVudFZpZXdwb3J0LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcHJldmlvdXNTdG9yZTogdGhpcy4jcGFyZW50U3RvcmUgYXMgTmd0U3RvcmUsXG4gICAgICAgICAgICAgICAgaW50ZXJuYWw6IHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgcHJpb3JpdHk6IDAsXG4gICAgICAgICAgICAgICAgICAgIGZyYW1lczogMCxcbiAgICAgICAgICAgICAgICAgICAgbGFzdEV2ZW50OiBuZXcgRWxlbWVudFJlZihudWxsKSxcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3Rpb246IFtdLFxuICAgICAgICAgICAgICAgICAgICBob3ZlcmVkOiBuZXcgTWFwKCksXG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXJzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbENsaWNrOiBbMCwgMF0sXG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxIaXRzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgY2FwdHVyZWRNYXA6IG5ldyBNYXAoKSxcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlOiAoY2FsbGJhY2s6IE5ndEJlZm9yZVJlbmRlclJlY29yZFsnY2FsbGJhY2snXSwgcHJpb3JpdHkgPSAwLCBzdG9yZSA9IHRoaXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludGVybmFsID0gdGhpcy5nZXQoJ2ludGVybmFsJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIHN1YnNjcmlwdGlvbiB3YXMgZ2l2ZW4gYSBwcmlvcml0eSwgaXQgdGFrZXMgcmVuZGVyaW5nIGludG8gaXRzIG93biBoYW5kc1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9yIHRoYXQgcmVhc29uIHdlIHN3aXRjaCBvZmYgYXV0b21hdGljIHJlbmRlcmluZyBhbmQgaW5jcmVhc2UgdGhlIG1hbnVhbCBmbGFnXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBcyBsb25nIGFzIHRoaXMgZmxhZyBpcyBwb3NpdGl2ZSB0aGVyZSBjYW4gYmUgbm8gaW50ZXJuYWwgcmVuZGVyaW5nIGF0IGFsbFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGVyZSBjb3VsZCBiZSBtdWx0aXBsZSByZW5kZXIgc3Vic2NyaXB0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwucHJpb3JpdHkgPSBpbnRlcm5hbC5wcmlvcml0eSArIChwcmlvcml0eSA+IDAgPyAxIDogMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbC5zdWJzY3JpYmVycy5wdXNoKHsgcHJpb3JpdHksIHN0b3JlLCBjYWxsYmFjayB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlZ2lzdGVyIHN1YnNjcmliZXIgYW5kIHNvcnQgbGF5ZXJzIGZyb20gbG93ZXN0IHRvIGhpZ2hlc3QsIG1lYW5pbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBoaWdoZXN0IHByaW9yaXR5IHJlbmRlcnMgbGFzdCAob24gdG9wIG9mIHRoZSBvdGhlciBmcmFtZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbC5zdWJzY3JpYmVycy5zb3J0KChhLCBiKSA9PiAoYS5wcmlvcml0eSB8fCAwKSAtIChiLnByaW9yaXR5IHx8IDApKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnRlcm5hbCA9IHRoaXMuZ2V0KCdpbnRlcm5hbCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnRlcm5hbD8uc3Vic2NyaWJlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVjcmVhc2UgbWFudWFsIGZsYWcgaWYgdGhpcyBzdWJzY3JpcHRpb24gaGFkIGEgcHJpb3JpdHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwucHJpb3JpdHkgPSBpbnRlcm5hbC5wcmlvcml0eSAtIChwcmlvcml0eSA+IDAgPyAxIDogMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBzdWJzY3JpYmVyIGZyb20gbGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbC5zdWJzY3JpYmVycyA9IGludGVybmFsLnN1YnNjcmliZXJzLmZpbHRlcigocykgPT4gcy5jYWxsYmFjayAhPT0gY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXRFdmVudHM6IChldmVudHM6IFBhcnRpYWw8Tmd0RXZlbnRNYW5hZ2VyPGFueT4+KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0KChzdGF0ZSkgPT4gKHsgZXZlbnRzOiB7IC4uLnN0YXRlLmV2ZW50cywgLi4uZXZlbnRzIH0gfSkpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2V0U2l6ZTogKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCB0b3A/OiBudW1iZXIsIGxlZnQ/OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FtZXJhID0gdGhpcy5nZXQoJ2NhbWVyYScpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplID0geyB3aWR0aCwgaGVpZ2h0LCB0b3A6IHRvcCB8fCAwLCBsZWZ0OiBsZWZ0IHx8IDAgfTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldCgoc3RhdGUpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmlld3BvcnQ6IHsgLi4uc3RhdGUudmlld3BvcnQsIC4uLmdldEN1cnJlbnRWaWV3cG9ydChjYW1lcmEsIGRlZmF1bHRUYXJnZXQsIHNpemUpIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNldERwcjogKGRwcjogTmd0RHByKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkID0gbWFrZURwcihkcHIsIHRoaXMuI3dpbmRvdyBhcyBXaW5kb3cgJiB0eXBlb2YgZ2xvYmFsVGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0KChzdGF0ZSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdwb3J0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uc3RhdGUudmlld3BvcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHByOiByZXNvbHZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsRHByOiBzdGF0ZS52aWV3cG9ydC5pbml0aWFsRHByIHx8IHJlc29sdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2V0RnJhbWVsb29wOiAoZnJhbWVsb29wOiAnYWx3YXlzJyB8ICdkZW1hbmQnIHwgJ25ldmVyJyA9ICdhbHdheXMnKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsb2NrID0gdGhpcy5nZXQoJ2Nsb2NrJyk7XG4gICAgICAgICAgICAgICAgICAgIGNsb2NrLnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgY2xvY2suZWxhcHNlZFRpbWUgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZWxvb3AgIT09ICduZXZlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrLnN0YXJ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbG9jay5lbGFwc2VkVGltZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldCh7IGZyYW1lbG9vcCB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuaXNJbml0ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuI3Jlc2l6ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uZmlndXJlKGlucHV0czogTmd0Q2FudmFzSW5wdXRzLCBjYW52YXNFbGVtZW50OiBIVE1MQ2FudmFzRWxlbWVudCkge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBnbDogZ2xPcHRpb25zLFxuICAgICAgICAgICAgc2l6ZTogc2l6ZU9wdGlvbnMsXG4gICAgICAgICAgICBjYW1lcmE6IGNhbWVyYU9wdGlvbnMsXG4gICAgICAgICAgICByYXljYXN0ZXI6IHJheWNhc3Rlck9wdGlvbnMsXG4gICAgICAgICAgICBzY2VuZTogc2NlbmVPcHRpb25zLFxuICAgICAgICAgICAgZXZlbnRzLFxuICAgICAgICAgICAgb3J0aG9ncmFwaGljLFxuICAgICAgICAgICAgbG9va0F0LFxuICAgICAgICAgICAgc2hhZG93cyxcbiAgICAgICAgICAgIGxpbmVhcixcbiAgICAgICAgICAgIGxlZ2FjeSxcbiAgICAgICAgICAgIGZsYXQsXG4gICAgICAgICAgICBkcHIsXG4gICAgICAgICAgICBmcmFtZWxvb3AsXG4gICAgICAgICAgICBwZXJmb3JtYW5jZSxcbiAgICAgICAgfSA9IGlucHV0cztcblxuICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0KCk7XG4gICAgICAgIGNvbnN0IHN0YXRlVG9VcGRhdGU6IFBhcnRpYWw8Tmd0U3RhdGU+ID0ge307XG5cbiAgICAgICAgLy8gc2V0dXAgcmVuZGVyZXJcbiAgICAgICAgbGV0IGdsID0gc3RhdGUuZ2w7XG4gICAgICAgIGlmICghc3RhdGUuZ2wpIHN0YXRlVG9VcGRhdGUuZ2wgPSBnbCA9IG1ha2VEZWZhdWx0UmVuZGVyZXIoZ2xPcHRpb25zLCBjYW52YXNFbGVtZW50KTtcblxuICAgICAgICAvLyBzZXR1cCByYXljYXN0ZXJcbiAgICAgICAgbGV0IHJheWNhc3RlciA9IHN0YXRlLnJheWNhc3RlcjtcbiAgICAgICAgaWYgKCFyYXljYXN0ZXIpIHN0YXRlVG9VcGRhdGUucmF5Y2FzdGVyID0gcmF5Y2FzdGVyID0gbmV3IFRIUkVFLlJheWNhc3RlcigpO1xuXG4gICAgICAgIC8vIHNldCByYXljYXN0ZXIgb3B0aW9uc1xuICAgICAgICBjb25zdCB7IHBhcmFtcywgLi4ub3B0aW9ucyB9ID0gcmF5Y2FzdGVyT3B0aW9ucyB8fCB7fTtcbiAgICAgICAgaWYgKCFpcy5lcXUob3B0aW9ucywgcmF5Y2FzdGVyLCBzaGFsbG93TG9vc2UpKSBhcHBseVByb3BzKHJheWNhc3RlciwgeyAuLi5vcHRpb25zIH0pO1xuICAgICAgICBpZiAoIWlzLmVxdShwYXJhbXMsIHJheWNhc3Rlci5wYXJhbXMsIHNoYWxsb3dMb29zZSkpIHtcbiAgICAgICAgICAgIGFwcGx5UHJvcHMocmF5Y2FzdGVyLCB7IHBhcmFtczogeyAuLi5yYXljYXN0ZXIucGFyYW1zLCAuLi4ocGFyYW1zIHx8IHt9KSB9IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY3JlYXRlIGRlZmF1bHQgY2FtZXJhXG4gICAgICAgIGlmICghc3RhdGUuY2FtZXJhKSB7XG4gICAgICAgICAgICBjb25zdCBpc0NhbWVyYSA9IGlzLmNhbWVyYShjYW1lcmFPcHRpb25zKTtcbiAgICAgICAgICAgIGxldCBjYW1lcmEgPSBpc0NhbWVyYSA/IGNhbWVyYU9wdGlvbnMgOiBtYWtlRGVmYXVsdENhbWVyYShvcnRob2dyYXBoaWMgfHwgZmFsc2UsIHN0YXRlLnNpemUpO1xuXG4gICAgICAgICAgICBpZiAoIWlzQ2FtZXJhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbWVyYU9wdGlvbnMpIGFwcGx5UHJvcHMoY2FtZXJhLCBjYW1lcmFPcHRpb25zKTtcblxuICAgICAgICAgICAgICAgIC8vIHNldCBwb3NpdGlvbi56XG4gICAgICAgICAgICAgICAgaWYgKCFjYW1lcmFPcHRpb25zPy5wb3NpdGlvbikgY2FtZXJhLnBvc2l0aW9uLnogPSA1O1xuXG4gICAgICAgICAgICAgICAgLy8gYWx3YXlzIGxvb2sgYXQgY2VudGVyIG9yIHBhc3NlZC1pbiBsb29rQXQgYnkgZGVmYXVsdFxuICAgICAgICAgICAgICAgIGlmICghY2FtZXJhT3B0aW9ucz8ucm90YXRpb24gJiYgIWNhbWVyYU9wdGlvbnM/LnF1YXRlcm5pb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobG9va0F0KSkgY2FtZXJhLmxvb2tBdChsb29rQXRbMF0sIGxvb2tBdFsxXSwgbG9va0F0WzJdKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobG9va0F0IGluc3RhbmNlb2YgVEhSRUUuVmVjdG9yMykgY2FtZXJhLmxvb2tBdChsb29rQXQpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGNhbWVyYS5sb29rQXQoMCwgMCwgMCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gdXBkYXRlIHByb2plY3Rpb24gbWF0cml4IGFmdGVyIGFwcGx5cHJvcHNcbiAgICAgICAgICAgICAgICBjYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeD8uKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghaXMuaW5zdGFuY2UoY2FtZXJhKSkgY2FtZXJhID0gcHJlcGFyZShjYW1lcmEsIHsgc3RvcmU6IHRoaXMgfSk7XG5cbiAgICAgICAgICAgIHN0YXRlVG9VcGRhdGUuY2FtZXJhID0gY2FtZXJhO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNldCB1cCBzY2VuZSAob25lIHRpbWUgb25seSEpXG4gICAgICAgIGlmICghc3RhdGUuc2NlbmUpIHtcbiAgICAgICAgICAgIGxldCBzY2VuZTogVEhSRUUuU2NlbmU7XG5cbiAgICAgICAgICAgIGlmIChzY2VuZU9wdGlvbnMgaW5zdGFuY2VvZiBUSFJFRS5TY2VuZSkge1xuICAgICAgICAgICAgICAgIHNjZW5lID0gcHJlcGFyZShzY2VuZU9wdGlvbnMsIHsgc3RvcmU6IHRoaXMgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNjZW5lID0gcHJlcGFyZShuZXcgVEhSRUUuU2NlbmUoKSwgeyBzdG9yZTogdGhpcyB9KTtcbiAgICAgICAgICAgICAgICBpZiAoc2NlbmVPcHRpb25zKSBhcHBseVByb3BzKHNjZW5lLCBzY2VuZU9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdGF0ZVRvVXBkYXRlLnNjZW5lID0gc2NlbmU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXQgdXAgWFIgKG9uZSB0aW1lIG9ubHkhKVxuICAgICAgICBpZiAoIXN0YXRlLnhyKSB7XG4gICAgICAgICAgICAvLyBIYW5kbGUgZnJhbWUgYmVoYXZpb3IgaW4gV2ViWFJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZVhSRnJhbWU6IFhSRnJhbWVSZXF1ZXN0Q2FsbGJhY2sgPSAodGltZXN0YW1wOiBudW1iZXIsIGZyYW1lPzogWFJGcmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nZXQoKTtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZnJhbWVsb29wID09PSAnbmV2ZXInKSByZXR1cm47XG4gICAgICAgICAgICAgICAgYWR2YW5jZSh0aW1lc3RhbXAsIHRydWUsIHRoaXMsIGZyYW1lKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIC8vIFRvZ2dsZSByZW5kZXIgc3dpdGNoaW5nIG9uIHNlc3Npb25cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZVNlc3Npb25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldCgpO1xuICAgICAgICAgICAgICAgIHN0YXRlLmdsLnhyLmVuYWJsZWQgPSBzdGF0ZS5nbC54ci5pc1ByZXNlbnRpbmc7XG5cbiAgICAgICAgICAgICAgICBzdGF0ZS5nbC54ci5zZXRBbmltYXRpb25Mb29wKHN0YXRlLmdsLnhyLmlzUHJlc2VudGluZyA/IGhhbmRsZVhSRnJhbWUgOiBudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIXN0YXRlLmdsLnhyLmlzUHJlc2VudGluZykgc3RhdGUuaW52YWxpZGF0ZSgpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgLy8gV2ViWFIgc2Vzc2lvbiBtYW5hZ2VyXG4gICAgICAgICAgICBjb25zdCB4ciA9IHtcbiAgICAgICAgICAgICAgICBjb25uZWN0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGdsLnhyLmFkZEV2ZW50TGlzdGVuZXIoJ3Nlc3Npb25zdGFydCcsIGhhbmRsZVNlc3Npb25DaGFuZ2UpO1xuICAgICAgICAgICAgICAgICAgICBnbC54ci5hZGRFdmVudExpc3RlbmVyKCdzZXNzaW9uZW5kJywgaGFuZGxlU2Vzc2lvbkNoYW5nZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBkaXNjb25uZWN0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGdsLnhyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Nlc3Npb25zdGFydCcsIGhhbmRsZVNlc3Npb25DaGFuZ2UpO1xuICAgICAgICAgICAgICAgICAgICBnbC54ci5yZW1vdmVFdmVudExpc3RlbmVyKCdzZXNzaW9uZW5kJywgaGFuZGxlU2Vzc2lvbkNoYW5nZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIC8vIFN1YnNjcmliZSB0byBXZWJYUiBzZXNzaW9uIGV2ZW50c1xuICAgICAgICAgICAgaWYgKGdsLnhyKSB4ci5jb25uZWN0KCk7XG4gICAgICAgICAgICBzdGF0ZVRvVXBkYXRlLnhyID0geHI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXQgc2hhZG93bWFwXG4gICAgICAgIGlmIChnbC5zaGFkb3dNYXApIHtcbiAgICAgICAgICAgIGNvbnN0IG9sZEVuYWJsZWQgPSBnbC5zaGFkb3dNYXAuZW5hYmxlZDtcbiAgICAgICAgICAgIGNvbnN0IG9sZFR5cGUgPSBnbC5zaGFkb3dNYXAudHlwZTtcbiAgICAgICAgICAgIGdsLnNoYWRvd01hcC5lbmFibGVkID0gISFzaGFkb3dzO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHNoYWRvd3MgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgIGdsLnNoYWRvd01hcC50eXBlID0gVEhSRUUuUENGU29mdFNoYWRvd01hcDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHNoYWRvd3MgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHlwZXMgPSB7XG4gICAgICAgICAgICAgICAgICAgIGJhc2ljOiBUSFJFRS5CYXNpY1NoYWRvd01hcCxcbiAgICAgICAgICAgICAgICAgICAgcGVyY2VudGFnZTogVEhSRUUuUENGU2hhZG93TWFwLFxuICAgICAgICAgICAgICAgICAgICBzb2Z0OiBUSFJFRS5QQ0ZTb2Z0U2hhZG93TWFwLFxuICAgICAgICAgICAgICAgICAgICB2YXJpYW5jZTogVEhSRUUuVlNNU2hhZG93TWFwLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZ2wuc2hhZG93TWFwLnR5cGUgPSB0eXBlc1tzaGFkb3dzXSA/PyBUSFJFRS5QQ0ZTb2Z0U2hhZG93TWFwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpcy5vYmooc2hhZG93cykpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGdsLnNoYWRvd01hcCwgc2hhZG93cyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChvbGRFbmFibGVkICE9PSBnbC5zaGFkb3dNYXAuZW5hYmxlZCB8fCBvbGRUeXBlICE9PSBnbC5zaGFkb3dNYXAudHlwZSkgY2hlY2tOZWVkc1VwZGF0ZShnbC5zaGFkb3dNYXApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2FmZWx5IHNldCBjb2xvciBtYW5hZ2VtZW50IGlmIGF2YWlsYWJsZS5cbiAgICAgICAgLy8gQXZvaWQgYWNjZXNzaW5nIFRIUkVFLkNvbG9yTWFuYWdlbWVudCB0byBwbGF5IG5pY2Ugd2l0aCBvbGRlciB2ZXJzaW9uc1xuICAgICAgICBpZiAoVEhSRUUuQ29sb3JNYW5hZ2VtZW50KSB7XG4gICAgICAgICAgICBjb25zdCBDb2xvck1hbmFnZW1lbnQgPSBUSFJFRS5Db2xvck1hbmFnZW1lbnQgYXMgTmd0QW55UmVjb3JkO1xuICAgICAgICAgICAgaWYgKCdlbmFibGVkJyBpbiBDb2xvck1hbmFnZW1lbnQpIENvbG9yTWFuYWdlbWVudFsnZW5hYmxlZCddID0gIWxlZ2FjeSA/PyBmYWxzZTtcbiAgICAgICAgICAgIGVsc2UgaWYgKCdsZWdhY3lNb2RlJyBpbiBDb2xvck1hbmFnZW1lbnQpIENvbG9yTWFuYWdlbWVudFsnbGVnYWN5TW9kZSddID0gbGVnYWN5ID8/IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzZXQgY29sb3Igc3BhY2UgYW5kIHRvbmVtYXBwaW5nIHByZWZlcmVuY2VzXG4gICAgICAgIGNvbnN0IExpbmVhckVuY29kaW5nID0gMzAwMDtcbiAgICAgICAgY29uc3Qgc1JHQkVuY29kaW5nID0gMzAwMTtcbiAgICAgICAgYXBwbHlQcm9wcyhnbCwge1xuICAgICAgICAgICAgb3V0cHV0RW5jb2Rpbmc6IGxpbmVhciA/IExpbmVhckVuY29kaW5nIDogc1JHQkVuY29kaW5nLFxuICAgICAgICAgICAgdG9uZU1hcHBpbmc6IGZsYXQgPyBUSFJFRS5Ob1RvbmVNYXBwaW5nIDogVEhSRUUuQUNFU0ZpbG1pY1RvbmVNYXBwaW5nLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBVcGRhdGUgY29sb3IgbWFuYWdlbWVudCBzdGF0ZVxuICAgICAgICBpZiAoc3RhdGUubGVnYWN5ICE9PSBsZWdhY3kpIHN0YXRlVG9VcGRhdGUubGVnYWN5ID0gbGVnYWN5O1xuICAgICAgICBpZiAoc3RhdGUubGluZWFyICE9PSBsaW5lYXIpIHN0YXRlVG9VcGRhdGUubGluZWFyID0gbGluZWFyO1xuICAgICAgICBpZiAoc3RhdGUuZmxhdCAhPT0gZmxhdCkgc3RhdGVUb1VwZGF0ZS5mbGF0ID0gZmxhdDtcblxuICAgICAgICAvLyBTZXQgZ2wgcHJvcHNcbiAgICAgICAgZ2wuc2V0Q2xlYXJBbHBoYSgwKTtcbiAgICAgICAgZ2wuc2V0UGl4ZWxSYXRpbyhtYWtlRHByKHN0YXRlLnZpZXdwb3J0LmRwcikpO1xuICAgICAgICBnbC5zZXRTaXplKHN0YXRlLnNpemUud2lkdGgsIHN0YXRlLnNpemUuaGVpZ2h0KTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBpcy5vYmooZ2xPcHRpb25zKSAmJlxuICAgICAgICAgICAgISh0eXBlb2YgZ2xPcHRpb25zID09PSAnZnVuY3Rpb24nKSAmJlxuICAgICAgICAgICAgIWlzLnJlbmRlcmVyKGdsT3B0aW9ucykgJiZcbiAgICAgICAgICAgICFpcy5lcXUoZ2xPcHRpb25zLCBnbCwgc2hhbGxvd0xvb3NlKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGFwcGx5UHJvcHMoZ2wsIGdsT3B0aW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdG9yZSBldmVudHMgaW50ZXJuYWxseVxuICAgICAgICBpZiAoZXZlbnRzICYmICFzdGF0ZS5ldmVudHMuaGFuZGxlcnMpIHN0YXRlVG9VcGRhdGUuZXZlbnRzID0gZXZlbnRzKHRoaXMpO1xuXG4gICAgICAgIC8vIENoZWNrIHBlcmZvcm1hbmNlXG4gICAgICAgIGlmIChwZXJmb3JtYW5jZSAmJiAhaXMuZXF1KHBlcmZvcm1hbmNlLCBzdGF0ZS5wZXJmb3JtYW5jZSwgc2hhbGxvd0xvb3NlKSkge1xuICAgICAgICAgICAgc3RhdGVUb1VwZGF0ZS5wZXJmb3JtYW5jZSA9IHsgLi4uc3RhdGUucGVyZm9ybWFuY2UsIC4uLnBlcmZvcm1hbmNlIH07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldChzdGF0ZVRvVXBkYXRlKTtcblxuICAgICAgICAvLyBDaGVjayBwaXhlbHJhdGlvXG4gICAgICAgIGlmIChkcHIgJiYgc3RhdGUudmlld3BvcnQuZHByICE9PSBtYWtlRHByKGRwcikpIHN0YXRlLnNldERwcihkcHIpO1xuICAgICAgICAvLyBDaGVjayBzaXplLCBhbGxvdyBpdCB0byB0YWtlIG9uIGNvbnRhaW5lciBib3VuZHMgaW5pdGlhbGx5XG4gICAgICAgIGNvbnN0IHNpemUgPSBjb21wdXRlSW5pdGlhbFNpemUoY2FudmFzRWxlbWVudCwgc2l6ZU9wdGlvbnMpO1xuICAgICAgICBpZiAoIWlzLmVxdShzaXplLCBzdGF0ZS5zaXplLCBzaGFsbG93TG9vc2UpKSBzdGF0ZS5zZXRTaXplKHNpemUud2lkdGgsIHNpemUuaGVpZ2h0LCBzaXplLnRvcCwgc2l6ZS5sZWZ0KTtcblxuICAgICAgICAvLyBDaGVjayBmcmFtZWxvb3BcbiAgICAgICAgaWYgKHN0YXRlLmZyYW1lbG9vcCAhPT0gZnJhbWVsb29wKSBzdGF0ZS5zZXRGcmFtZWxvb3AoZnJhbWVsb29wKTtcblxuICAgICAgICBpZiAoIXRoaXMuZ2V0KCdyZWFkeScpKSB0aGlzLnNldCh7IHJlYWR5OiB0cnVlIH0pO1xuXG4gICAgICAgIHRoaXMuI2ludmFsaWRhdGUoKTtcbiAgICB9XG5cbiAgICBkZXN0cm95KGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5zZXQoKHN0YXRlKSA9PiAoeyBpbnRlcm5hbDogeyAuLi5zdGF0ZS5pbnRlcm5hbCwgYWN0aXZlOiBmYWxzZSB9IH0pKTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgZ2wsIHhyLCBldmVudHMgfSA9IHRoaXMuZ2V0KCk7XG4gICAgICAgICAgICBpZiAoZ2wpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnRzLmRpc2Nvbm5lY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRzLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBnbC5yZW5kZXJMaXN0cy5kaXNwb3NlKCk7XG4gICAgICAgICAgICAgICAgZ2wuZm9yY2VDb250ZXh0TG9zcygpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGdsLnhyICYmIGdsLnhyLmVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2wueHIuc2V0QW5pbWF0aW9uTG9vcChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgeHIuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGRpc3Bvc2UodGhpcy5nZXQoKSk7XG5cbiAgICAgICAgICAgICAgICByb290U3RhdGVNYXAuZGVsZXRlKGNhbnZhcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDUwMCk7XG4gICAgfVxuXG4gICAgI3Jlc2l6ZSgpIHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldCgpO1xuICAgICAgICBsZXQgb2xkU2l6ZSA9IHN0YXRlLnNpemU7XG4gICAgICAgIGxldCBvbGREcHIgPSBzdGF0ZS52aWV3cG9ydC5kcHI7XG4gICAgICAgIGxldCBvbGRDYW1lcmEgPSBzdGF0ZS5jYW1lcmE7XG5cbiAgICAgICAgY29uc3QgY2FtZXJhID0gdGhpcy5zZWxlY3QoJ2NhbWVyYScpO1xuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5zZWxlY3QoJ3NpemUnKTtcbiAgICAgICAgY29uc3Qgdmlld3BvcnQgPSB0aGlzLnNlbGVjdCgndmlld3BvcnQnKTtcblxuICAgICAgICBjb25zdCB0cmlnZ2VycyA9IGNvbXB1dGVkKCgpID0+ICh7IGNhbWVyYTogY2FtZXJhKCksIHNpemU6IHNpemUoKSwgdmlld3BvcnQ6IHZpZXdwb3J0KCksIGdsOiB0aGlzLmdldCgnZ2wnKSB9KSk7XG5cbiAgICAgICAgZWZmZWN0KFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgY2FtZXJhLCBzaXplLCB2aWV3cG9ydCwgZ2wgfSA9IHRyaWdnZXJzKCk7XG4gICAgICAgICAgICAgICAgLy8gcmVzaXplIGNhbWVyYSBhbmQgcmVuZGVyZXIgb24gY2hhbmdlcyB0byBzaXplIGFuZCBkcHJcbiAgICAgICAgICAgICAgICBpZiAoc2l6ZSAhPT0gb2xkU2l6ZSB8fCB2aWV3cG9ydC5kcHIgIT09IG9sZERwcikge1xuICAgICAgICAgICAgICAgICAgICBvbGRTaXplID0gc2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgb2xkRHByID0gdmlld3BvcnQuZHByO1xuICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGUgY2FtZXJhXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUNhbWVyYShjYW1lcmEsIHNpemUpO1xuICAgICAgICAgICAgICAgICAgICBnbC5zZXRQaXhlbFJhdGlvKHZpZXdwb3J0LmRwcik7XG4gICAgICAgICAgICAgICAgICAgIGdsLnNldFNpemUoc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSB2aWV3cG9ydCB3aGVuIGNhbWVyYSBjaGFuZ2VzXG4gICAgICAgICAgICAgICAgaWYgKGNhbWVyYSAhPT0gb2xkQ2FtZXJhKSB7XG4gICAgICAgICAgICAgICAgICAgIG9sZENhbWVyYSA9IGNhbWVyYTtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlQ2FtZXJhKGNhbWVyYSwgc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0KChzdGF0ZSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdwb3J0OiB7IC4uLnN0YXRlLnZpZXdwb3J0LCAuLi5zdGF0ZS52aWV3cG9ydC5nZXRDdXJyZW50Vmlld3BvcnQoY2FtZXJhKSB9LFxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHsgaW5qZWN0b3I6IHRoaXMuI2luamVjdG9yLCBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgI2ludmFsaWRhdGUoKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5zZWxlY3QoKTtcbiAgICAgICAgZWZmZWN0KFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0YXRlKCkuaW52YWxpZGF0ZSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHsgaW5qZWN0b3I6IHRoaXMuI2luamVjdG9yIH1cbiAgICAgICAgKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVJbml0aWFsU2l6ZShjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50IHwgVEhSRUUuT2Zmc2NyZWVuQ2FudmFzLCBkZWZhdWx0U2l6ZT86IE5ndFNpemUpOiBOZ3RTaXplIHtcbiAgICBpZiAoZGVmYXVsdFNpemUpIHJldHVybiBkZWZhdWx0U2l6ZTtcblxuICAgIGlmIChjYW52YXMgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudCAmJiBjYW52YXMucGFyZW50RWxlbWVudCkge1xuICAgICAgICByZXR1cm4gY2FudmFzLnBhcmVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgd2lkdGg6IDAsIGhlaWdodDogMCwgdG9wOiAwLCBsZWZ0OiAwIH07XG59XG5cbi8vIERpc3Bvc2VzIGFuIG9iamVjdCBhbmQgYWxsIGl0cyBwcm9wZXJ0aWVzXG5mdW5jdGlvbiBkaXNwb3NlPFRPYmogZXh0ZW5kcyB7IGRpc3Bvc2U/OiAoKSA9PiB2b2lkOyB0eXBlPzogc3RyaW5nOyBba2V5OiBzdHJpbmddOiBhbnkgfT4ob2JqOiBUT2JqKSB7XG4gICAgaWYgKG9iai5kaXNwb3NlICYmICFpcy5zY2VuZShvYmopKSBvYmouZGlzcG9zZSgpO1xuICAgIGZvciAoY29uc3QgcCBpbiBvYmopIHtcbiAgICAgICAgKHAgYXMgYW55KS5kaXNwb3NlPy4oKTtcbiAgICAgICAgZGVsZXRlIG9ialtwXTtcbiAgICB9XG59XG4iXX0=
420
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUvc3JjL2xpYi9zdG9yZXMvc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBWXJDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDNUMsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNqQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBRWhELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsRUFBcUMsQ0FBQztBQUN6RSxNQUFNLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUN6RCxNQUFNLFlBQVksR0FBRyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBa0IsQ0FBQztBQUUzRSxNQUNhLFFBQVMsU0FBUSxjQUF3QjtJQUR0RDs7UUFFYSxpQkFBWSxHQUFHLE1BQU0sQ0FBQyxRQUFR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RSxDQUFDO1FBQ3ZCLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2pCO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEVsZW1lbnRSZWYsIEluamVjdGFibGUsIEluamVjdG9yLCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcbmltcG9ydCB7IGNyZWF0ZUxvb3AgfSBmcm9tICcuLi9sb29wJztcbmltcG9ydCB0eXBlIHtcbiAgICBOZ3RBbnlSZWNvcmQsXG4gICAgTmd0QmVmb3JlUmVuZGVyUmVjb3JkLFxuICAgIE5ndENhbnZhc0lucHV0cyxcbiAgICBOZ3REcHIsXG4gICAgTmd0RXF1Q29uZmlnLFxuICAgIE5ndEV2ZW50TWFuYWdlcixcbiAgICBOZ3RTaXplLFxuICAgIE5ndFN0YXRlLFxuICAgIE5ndFZpZXdwb3J0LFxufSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBhcHBseVByb3BzIH0gZnJvbSAnLi4vdXRpbHMvYXBwbHktcHJvcHMnO1xuaW1wb3J0IHsgcHJlcGFyZSB9IGZyb20gJy4uL3V0aWxzL2luc3RhbmNlJztcbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vdXRpbHMvaXMnO1xuaW1wb3J0IHsgbWFrZURlZmF1bHRDYW1lcmEsIG1ha2VEZWZhdWx0UmVuZGVyZXIsIG1ha2VEcHIgfSBmcm9tICcuLi91dGlscy9tYWtlJztcbmltcG9ydCB7IGNoZWNrTmVlZHNVcGRhdGUsIHVwZGF0ZUNhbWVyYSB9IGZyb20gJy4uL3V0aWxzL3VwZGF0ZSc7XG5pbXBvcnQgeyBOZ3RTaWduYWxTdG9yZSB9IGZyb20gJy4vc2lnbmFsLnN0b3JlJztcblxuZXhwb3J0IGNvbnN0IHJvb3RTdGF0ZU1hcCA9IG5ldyBNYXA8RWxlbWVudCwgTmd0U2lnbmFsU3RvcmU8Tmd0U3RhdGU+PigpO1xuY29uc3QgeyBpbnZhbGlkYXRlLCBhZHZhbmNlIH0gPSBjcmVhdGVMb29wKHJvb3RTdGF0ZU1hcCk7XG5jb25zdCBzaGFsbG93TG9vc2UgPSB7IG9iamVjdHM6ICdzaGFsbG93Jywgc3RyaWN0OiBmYWxzZSB9IGFzIE5ndEVxdUNvbmZpZztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE5ndFN0b3JlIGV4dGVuZHMgTmd0U2lnbmFsU3RvcmU8Tmd0U3RhdGU+IHtcbiAgICByZWFkb25seSAjcGFyZW50U3RvcmUgPSBpbmplY3QoTmd0U3RvcmUsIHsgb3B0aW9uYWw6IHRydWUsIHNraXBTZWxmOiB0cnVlIH0pO1xuICAgIHJlYWRvbmx5ICN3aW5kb3cgPSBpbmplY3QoRE9DVU1FTlQpLmRlZmF1bHRWaWV3O1xuICAgIHJlYWRvbmx5ICNpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG5cbiAgICBpc0luaXQgPSBmYWxzZTtcblxuICAgIGluaXQoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0luaXQpIHtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRUYXJnZXQgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xuICAgICAgICAgICAgY29uc3QgdGVtcFRhcmdldCA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGdldEN1cnJlbnRWaWV3cG9ydCA9IChcbiAgICAgICAgICAgICAgICBjYW1lcmEgPSB0aGlzLmdldCgnY2FtZXJhJyksXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiBUSFJFRS5WZWN0b3IzIHwgUGFyYW1ldGVyczxUSFJFRS5WZWN0b3IzWydzZXQnXT4gPSBkZWZhdWx0VGFyZ2V0LFxuICAgICAgICAgICAgICAgIHNpemUgPSB0aGlzLmdldCgnc2l6ZScpXG4gICAgICAgICAgICApOiBPbWl0PE5ndFZpZXdwb3J0LCAnZHByJyB8ICdpbml0aWFsRHByJz4gPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgdG9wLCBsZWZ0IH0gPSBzaXplO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFzcGVjdCA9IHdpZHRoIC8gaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBUSFJFRS5WZWN0b3IzKSB0ZW1wVGFyZ2V0LmNvcHkodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICBlbHNlIHRlbXBUYXJnZXQuc2V0KC4uLnRhcmdldCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBkaXN0YW5jZSA9IGNhbWVyYS5nZXRXb3JsZFBvc2l0aW9uKHBvc2l0aW9uKS5kaXN0YW5jZVRvKHRlbXBUYXJnZXQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGlzLm9ydGhvZ3JhcGhpY0NhbWVyYShjYW1lcmEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGggLyBjYW1lcmEuem9vbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0IC8gY2FtZXJhLnpvb20sXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3AsXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3BlY3QsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgZm92ID0gKGNhbWVyYS5mb3YgKiBNYXRoLlBJKSAvIDE4MDsgLy8gY29udmVydCB2ZXJ0aWNhbCBmb3YgdG8gcmFkaWFuc1xuICAgICAgICAgICAgICAgIGNvbnN0IGggPSAyICogTWF0aC50YW4oZm92IC8gMikgKiBkaXN0YW5jZTsgLy8gdmlzaWJsZSBoZWlnaHRcbiAgICAgICAgICAgICAgICBjb25zdCB3ID0gaCAqIGFzcGVjdDtcbiAgICAgICAgICAgICAgICByZXR1cm4geyB3aWR0aDogdywgaGVpZ2h0OiBoLCB0b3AsIGxlZnQsIGZhY3Rvcjogd2lkdGggLyB3LCBkaXN0YW5jZSwgYXNwZWN0IH07XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBsZXQgcGVyZm9ybWFuY2VUaW1lb3V0OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcbiAgICAgICAgICAgIGNvbnN0IHNldFBlcmZvcm1hbmNlQ3VycmVudCA9IChjdXJyZW50OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldCgoc3RhdGUpID0+ICh7IHBlcmZvcm1hbmNlOiB7IC4uLnN0YXRlLnBlcmZvcm1hbmNlLCBjdXJyZW50IH0gfSkpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5zZXQoe1xuICAgICAgICAgICAgICAgIGdldDogdGhpcy5nZXQuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICBzZXQ6IHRoaXMuc2V0LmJpbmQodGhpcyksXG4gICAgICAgICAgICAgICAgcmVhZHk6IGZhbHNlLFxuXG4gICAgICAgICAgICAgICAgZXZlbnRzOiB7IHByaW9yaXR5OiAxLCBlbmFibGVkOiB0cnVlLCBjb25uZWN0ZWQ6IGZhbHNlIH0sXG5cbiAgICAgICAgICAgICAgICBpbnZhbGlkYXRlOiAoZnJhbWVzID0gMSkgPT4gaW52YWxpZGF0ZSh0aGlzLCBmcmFtZXMpLFxuICAgICAgICAgICAgICAgIGFkdmFuY2U6ICh0aW1lc3RhbXA6IG51bWJlciwgcnVuR2xvYmFsRWZmZWN0cz86IGJvb2xlYW4pID0+IGFkdmFuY2UodGltZXN0YW1wLCBydW5HbG9iYWxFZmZlY3RzLCB0aGlzKSxcblxuICAgICAgICAgICAgICAgIGxlZ2FjeTogZmFsc2UsXG4gICAgICAgICAgICAgICAgbGluZWFyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBmbGF0OiBmYWxzZSxcblxuICAgICAgICAgICAgICAgIGNvbnRyb2xzOiBudWxsLFxuICAgICAgICAgICAgICAgIGNsb2NrOiBuZXcgVEhSRUUuQ2xvY2soKSxcbiAgICAgICAgICAgICAgICBwb2ludGVyOiBuZXcgVEhSRUUuVmVjdG9yMigpLFxuXG4gICAgICAgICAgICAgICAgZnJhbWVsb29wOiAnYWx3YXlzJyxcbiAgICAgICAgICAgICAgICBwZXJmb3JtYW5jZToge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50OiAxLFxuICAgICAgICAgICAgICAgICAgICBtaW46IDAuNSxcbiAgICAgICAgICAgICAgICAgICAgbWF4OiAxLFxuICAgICAgICAgICAgICAgICAgICBkZWJvdW5jZTogMjAwLFxuICAgICAgICAgICAgICAgICAgICByZWdyZXNzOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjbGVhciB0aW1lb3V0XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVyZm9ybWFuY2VUaW1lb3V0KSBjbGVhclRpbWVvdXQocGVyZm9ybWFuY2VUaW1lb3V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNldCBsb3dlciBib3VuZFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLnBlcmZvcm1hbmNlLmN1cnJlbnQgIT09IHN0YXRlLnBlcmZvcm1hbmNlLm1pbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQZXJmb3JtYW5jZUN1cnJlbnQoc3RhdGUucGVyZm9ybWFuY2UubWluKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdvIGJhY2sgdG8gdXBwZXIgYm91bmRcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlcmZvcm1hbmNlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFBlcmZvcm1hbmNlQ3VycmVudCh0aGlzLmdldCgncGVyZm9ybWFuY2UnLCAnbWF4JykgfHwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBzdGF0ZS5wZXJmb3JtYW5jZS5kZWJvdW5jZSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzaXplOiB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAsIHRvcDogMCwgbGVmdDogMCB9LFxuICAgICAgICAgICAgICAgIHZpZXdwb3J0OiB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxEcHI6IDAsXG4gICAgICAgICAgICAgICAgICAgIGRwcjogMCxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgICAgICAgICAgICAgdG9wOiAwLFxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgICAgICAgICBhc3BlY3Q6IDAsXG4gICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlOiAwLFxuICAgICAgICAgICAgICAgICAgICBmYWN0b3I6IDAsXG4gICAgICAgICAgICAgICAgICAgIGdldEN1cnJlbnRWaWV3cG9ydCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHByZXZpb3VzU3RvcmU6IHRoaXMuI3BhcmVudFN0b3JlIGFzIE5ndFN0b3JlLFxuICAgICAgICAgICAgICAgIGludGVybmFsOiB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiAwLFxuICAgICAgICAgICAgICAgICAgICBmcmFtZXM6IDAsXG4gICAgICAgICAgICAgICAgICAgIGxhc3RFdmVudDogbmV3IEVsZW1lbnRSZWYobnVsbCksXG4gICAgICAgICAgICAgICAgICAgIGludGVyYWN0aW9uOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJlZDogbmV3IE1hcCgpLFxuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyczogW10sXG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxDbGljazogWzAsIDBdLFxuICAgICAgICAgICAgICAgICAgICBpbml0aWFsSGl0czogW10sXG4gICAgICAgICAgICAgICAgICAgIGNhcHR1cmVkTWFwOiBuZXcgTWFwKCksXG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZTogKGNhbGxiYWNrOiBOZ3RCZWZvcmVSZW5kZXJSZWNvcmRbJ2NhbGxiYWNrJ10sIHByaW9yaXR5ID0gMCwgc3RvcmUgPSB0aGlzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnRlcm5hbCA9IHRoaXMuZ2V0KCdpbnRlcm5hbCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBzdWJzY3JpcHRpb24gd2FzIGdpdmVuIGEgcHJpb3JpdHksIGl0IHRha2VzIHJlbmRlcmluZyBpbnRvIGl0cyBvd24gaGFuZHNcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvciB0aGF0IHJlYXNvbiB3ZSBzd2l0Y2ggb2ZmIGF1dG9tYXRpYyByZW5kZXJpbmcgYW5kIGluY3JlYXNlIHRoZSBtYW51YWwgZmxhZ1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXMgbG9uZyBhcyB0aGlzIGZsYWcgaXMgcG9zaXRpdmUgdGhlcmUgY2FuIGJlIG5vIGludGVybmFsIHJlbmRlcmluZyBhdCBhbGxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlcmUgY291bGQgYmUgbXVsdGlwbGUgcmVuZGVyIHN1YnNjcmlwdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsLnByaW9yaXR5ID0gaW50ZXJuYWwucHJpb3JpdHkgKyAocHJpb3JpdHkgPiAwID8gMSA6IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwuc3Vic2NyaWJlcnMucHVzaCh7IHByaW9yaXR5LCBzdG9yZSwgY2FsbGJhY2sgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWdpc3RlciBzdWJzY3JpYmVyIGFuZCBzb3J0IGxheWVycyBmcm9tIGxvd2VzdCB0byBoaWdoZXN0LCBtZWFuaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGlnaGVzdCBwcmlvcml0eSByZW5kZXJzIGxhc3QgKG9uIHRvcCBvZiB0aGUgb3RoZXIgZnJhbWVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwuc3Vic2NyaWJlcnMuc29ydCgoYSwgYikgPT4gKGEucHJpb3JpdHkgfHwgMCkgLSAoYi5wcmlvcml0eSB8fCAwKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50ZXJuYWwgPSB0aGlzLmdldCgnaW50ZXJuYWwnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW50ZXJuYWw/LnN1YnNjcmliZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlY3JlYXNlIG1hbnVhbCBmbGFnIGlmIHRoaXMgc3Vic2NyaXB0aW9uIGhhZCBhIHByaW9yaXR5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsLnByaW9yaXR5ID0gaW50ZXJuYWwucHJpb3JpdHkgLSAocHJpb3JpdHkgPiAwID8gMSA6IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgc3Vic2NyaWJlciBmcm9tIGxpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwuc3Vic2NyaWJlcnMgPSBpbnRlcm5hbC5zdWJzY3JpYmVycy5maWx0ZXIoKHMpID0+IHMuY2FsbGJhY2sgIT09IGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2V0RXZlbnRzOiAoZXZlbnRzOiBQYXJ0aWFsPE5ndEV2ZW50TWFuYWdlcjxhbnk+PikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldCgoc3RhdGUpID0+ICh7IGV2ZW50czogeyAuLi5zdGF0ZS5ldmVudHMsIC4uLmV2ZW50cyB9IH0pKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNldFNpemU6ICh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgdG9wPzogbnVtYmVyLCBsZWZ0PzogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhbWVyYSA9IHRoaXMuZ2V0KCdjYW1lcmEnKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZSA9IHsgd2lkdGgsIGhlaWdodCwgdG9wOiB0b3AgfHwgMCwgbGVmdDogbGVmdCB8fCAwIH07XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXQoKHN0YXRlKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdwb3J0OiB7IC4uLnN0YXRlLnZpZXdwb3J0LCAuLi5nZXRDdXJyZW50Vmlld3BvcnQoY2FtZXJhLCBkZWZhdWx0VGFyZ2V0LCBzaXplKSB9LFxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXREcHI6IChkcHI6IE5ndERwcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNvbHZlZCA9IG1ha2VEcHIoZHByLCB0aGlzLiN3aW5kb3cgYXMgV2luZG93ICYgdHlwZW9mIGdsb2JhbFRoaXMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldCgoc3RhdGUpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3cG9ydDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlLnZpZXdwb3J0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRwcjogcmVzb2x2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbERwcjogc3RhdGUudmlld3BvcnQuaW5pdGlhbERwciB8fCByZXNvbHZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNldEZyYW1lbG9vcDogKGZyYW1lbG9vcDogJ2Fsd2F5cycgfCAnZGVtYW5kJyB8ICduZXZlcicgPSAnYWx3YXlzJykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjbG9jayA9IHRoaXMuZ2V0KCdjbG9jaycpO1xuICAgICAgICAgICAgICAgICAgICBjbG9jay5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIGNsb2NrLmVsYXBzZWRUaW1lID0gMDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVsb29wICE9PSAnbmV2ZXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbG9jay5zdGFydCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2suZWxhcHNlZFRpbWUgPSAwO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXQoeyBmcmFtZWxvb3AgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLmlzSW5pdCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLiNyZXNpemUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbmZpZ3VyZShpbnB1dHM6IE5ndENhbnZhc0lucHV0cywgY2FudmFzRWxlbWVudDogSFRNTENhbnZhc0VsZW1lbnQpIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgZ2w6IGdsT3B0aW9ucyxcbiAgICAgICAgICAgIHNpemU6IHNpemVPcHRpb25zLFxuICAgICAgICAgICAgY2FtZXJhOiBjYW1lcmFPcHRpb25zLFxuICAgICAgICAgICAgcmF5Y2FzdGVyOiByYXljYXN0ZXJPcHRpb25zLFxuICAgICAgICAgICAgc2NlbmU6IHNjZW5lT3B0aW9ucyxcbiAgICAgICAgICAgIGV2ZW50cyxcbiAgICAgICAgICAgIG9ydGhvZ3JhcGhpYyxcbiAgICAgICAgICAgIGxvb2tBdCxcbiAgICAgICAgICAgIHNoYWRvd3MsXG4gICAgICAgICAgICBsaW5lYXIsXG4gICAgICAgICAgICBsZWdhY3ksXG4gICAgICAgICAgICBmbGF0LFxuICAgICAgICAgICAgZHByLFxuICAgICAgICAgICAgZnJhbWVsb29wLFxuICAgICAgICAgICAgcGVyZm9ybWFuY2UsXG4gICAgICAgIH0gPSBpbnB1dHM7XG5cbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldCgpO1xuICAgICAgICBjb25zdCBzdGF0ZVRvVXBkYXRlOiBQYXJ0aWFsPE5ndFN0YXRlPiA9IHt9O1xuXG4gICAgICAgIC8vIHNldHVwIHJlbmRlcmVyXG4gICAgICAgIGxldCBnbCA9IHN0YXRlLmdsO1xuICAgICAgICBpZiAoIXN0YXRlLmdsKSBzdGF0ZVRvVXBkYXRlLmdsID0gZ2wgPSBtYWtlRGVmYXVsdFJlbmRlcmVyKGdsT3B0aW9ucywgY2FudmFzRWxlbWVudCk7XG5cbiAgICAgICAgLy8gc2V0dXAgcmF5Y2FzdGVyXG4gICAgICAgIGxldCByYXljYXN0ZXIgPSBzdGF0ZS5yYXljYXN0ZXI7XG4gICAgICAgIGlmICghcmF5Y2FzdGVyKSBzdGF0ZVRvVXBkYXRlLnJheWNhc3RlciA9IHJheWNhc3RlciA9IG5ldyBUSFJFRS5SYXljYXN0ZXIoKTtcblxuICAgICAgICAvLyBzZXQgcmF5Y2FzdGVyIG9wdGlvbnNcbiAgICAgICAgY29uc3QgeyBwYXJhbXMsIC4uLm9wdGlvbnMgfSA9IHJheWNhc3Rlck9wdGlvbnMgfHwge307XG4gICAgICAgIGlmICghaXMuZXF1KG9wdGlvbnMsIHJheWNhc3Rlciwgc2hhbGxvd0xvb3NlKSkgYXBwbHlQcm9wcyhyYXljYXN0ZXIsIHsgLi4ub3B0aW9ucyB9KTtcbiAgICAgICAgaWYgKCFpcy5lcXUocGFyYW1zLCByYXljYXN0ZXIucGFyYW1zLCBzaGFsbG93TG9vc2UpKSB7XG4gICAgICAgICAgICBhcHBseVByb3BzKHJheWNhc3RlciwgeyBwYXJhbXM6IHsgLi4ucmF5Y2FzdGVyLnBhcmFtcywgLi4uKHBhcmFtcyB8fCB7fSkgfSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNyZWF0ZSBkZWZhdWx0IGNhbWVyYVxuICAgICAgICBpZiAoIXN0YXRlLmNhbWVyYSkge1xuICAgICAgICAgICAgY29uc3QgaXNDYW1lcmEgPSBpcy5jYW1lcmEoY2FtZXJhT3B0aW9ucyk7XG4gICAgICAgICAgICBsZXQgY2FtZXJhID0gaXNDYW1lcmEgPyBjYW1lcmFPcHRpb25zIDogbWFrZURlZmF1bHRDYW1lcmEob3J0aG9ncmFwaGljIHx8IGZhbHNlLCBzdGF0ZS5zaXplKTtcblxuICAgICAgICAgICAgaWYgKCFpc0NhbWVyYSkge1xuICAgICAgICAgICAgICAgIGlmIChjYW1lcmFPcHRpb25zKSBhcHBseVByb3BzKGNhbWVyYSwgY2FtZXJhT3B0aW9ucyk7XG5cbiAgICAgICAgICAgICAgICAvLyBzZXQgcG9zaXRpb24uelxuICAgICAgICAgICAgICAgIGlmICghY2FtZXJhT3B0aW9ucz8ucG9zaXRpb24pIGNhbWVyYS5wb3NpdGlvbi56ID0gNTtcblxuICAgICAgICAgICAgICAgIC8vIGFsd2F5cyBsb29rIGF0IGNlbnRlciBvciBwYXNzZWQtaW4gbG9va0F0IGJ5IGRlZmF1bHRcbiAgICAgICAgICAgICAgICBpZiAoIWNhbWVyYU9wdGlvbnM/LnJvdGF0aW9uICYmICFjYW1lcmFPcHRpb25zPy5xdWF0ZXJuaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGxvb2tBdCkpIGNhbWVyYS5sb29rQXQobG9va0F0WzBdLCBsb29rQXRbMV0sIGxvb2tBdFsyXSk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGxvb2tBdCBpbnN0YW5jZW9mIFRIUkVFLlZlY3RvcjMpIGNhbWVyYS5sb29rQXQobG9va0F0KTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBjYW1lcmEubG9va0F0KDAsIDAsIDApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBwcm9qZWN0aW9uIG1hdHJpeCBhZnRlciBhcHBseXByb3BzXG4gICAgICAgICAgICAgICAgY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXg/LigpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWlzLmluc3RhbmNlKGNhbWVyYSkpIGNhbWVyYSA9IHByZXBhcmUoY2FtZXJhLCB7IHN0b3JlOiB0aGlzIH0pO1xuXG4gICAgICAgICAgICBzdGF0ZVRvVXBkYXRlLmNhbWVyYSA9IGNhbWVyYTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTZXQgdXAgc2NlbmUgKG9uZSB0aW1lIG9ubHkhKVxuICAgICAgICBpZiAoIXN0YXRlLnNjZW5lKSB7XG4gICAgICAgICAgICBsZXQgc2NlbmU6IFRIUkVFLlNjZW5lO1xuXG4gICAgICAgICAgICBpZiAoc2NlbmVPcHRpb25zIGluc3RhbmNlb2YgVEhSRUUuU2NlbmUpIHtcbiAgICAgICAgICAgICAgICBzY2VuZSA9IHByZXBhcmUoc2NlbmVPcHRpb25zLCB7IHN0b3JlOiB0aGlzIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzY2VuZSA9IHByZXBhcmUobmV3IFRIUkVFLlNjZW5lKCksIHsgc3RvcmU6IHRoaXMgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHNjZW5lT3B0aW9ucykgYXBwbHlQcm9wcyhzY2VuZSwgc2NlbmVPcHRpb25zKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3RhdGVUb1VwZGF0ZS5zY2VuZSA9IHNjZW5lO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2V0IHVwIFhSIChvbmUgdGltZSBvbmx5ISlcbiAgICAgICAgaWYgKCFzdGF0ZS54cikge1xuICAgICAgICAgICAgLy8gSGFuZGxlIGZyYW1lIGJlaGF2aW9yIGluIFdlYlhSXG4gICAgICAgICAgICBjb25zdCBoYW5kbGVYUkZyYW1lOiBYUkZyYW1lUmVxdWVzdENhbGxiYWNrID0gKHRpbWVzdGFtcDogbnVtYmVyLCBmcmFtZT86IFhSRnJhbWUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0KCk7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLmZyYW1lbG9vcCA9PT0gJ25ldmVyJykgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGFkdmFuY2UodGltZXN0YW1wLCB0cnVlLCB0aGlzLCBmcmFtZSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAvLyBUb2dnbGUgcmVuZGVyIHN3aXRjaGluZyBvbiBzZXNzaW9uXG4gICAgICAgICAgICBjb25zdCBoYW5kbGVTZXNzaW9uQ2hhbmdlID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nZXQoKTtcbiAgICAgICAgICAgICAgICBzdGF0ZS5nbC54ci5lbmFibGVkID0gc3RhdGUuZ2wueHIuaXNQcmVzZW50aW5nO1xuXG4gICAgICAgICAgICAgICAgc3RhdGUuZ2wueHIuc2V0QW5pbWF0aW9uTG9vcChzdGF0ZS5nbC54ci5pc1ByZXNlbnRpbmcgPyBoYW5kbGVYUkZyYW1lIDogbnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFzdGF0ZS5nbC54ci5pc1ByZXNlbnRpbmcpIHN0YXRlLmludmFsaWRhdGUoKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIC8vIFdlYlhSIHNlc3Npb24gbWFuYWdlclxuICAgICAgICAgICAgY29uc3QgeHIgPSB7XG4gICAgICAgICAgICAgICAgY29ubmVjdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBnbC54ci5hZGRFdmVudExpc3RlbmVyKCdzZXNzaW9uc3RhcnQnLCBoYW5kbGVTZXNzaW9uQ2hhbmdlKTtcbiAgICAgICAgICAgICAgICAgICAgZ2wueHIuYWRkRXZlbnRMaXN0ZW5lcignc2Vzc2lvbmVuZCcsIGhhbmRsZVNlc3Npb25DaGFuZ2UpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZGlzY29ubmVjdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBnbC54ci5yZW1vdmVFdmVudExpc3RlbmVyKCdzZXNzaW9uc3RhcnQnLCBoYW5kbGVTZXNzaW9uQ2hhbmdlKTtcbiAgICAgICAgICAgICAgICAgICAgZ2wueHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Vzc2lvbmVuZCcsIGhhbmRsZVNlc3Npb25DaGFuZ2UpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAvLyBTdWJzY3JpYmUgdG8gV2ViWFIgc2Vzc2lvbiBldmVudHNcbiAgICAgICAgICAgIGlmIChnbC54cikgeHIuY29ubmVjdCgpO1xuICAgICAgICAgICAgc3RhdGVUb1VwZGF0ZS54ciA9IHhyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2V0IHNoYWRvd21hcFxuICAgICAgICBpZiAoZ2wuc2hhZG93TWFwKSB7XG4gICAgICAgICAgICBjb25zdCBvbGRFbmFibGVkID0gZ2wuc2hhZG93TWFwLmVuYWJsZWQ7XG4gICAgICAgICAgICBjb25zdCBvbGRUeXBlID0gZ2wuc2hhZG93TWFwLnR5cGU7XG4gICAgICAgICAgICBnbC5zaGFkb3dNYXAuZW5hYmxlZCA9ICEhc2hhZG93cztcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzaGFkb3dzID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgICBnbC5zaGFkb3dNYXAudHlwZSA9IFRIUkVFLlBDRlNvZnRTaGFkb3dNYXA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzaGFkb3dzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVzID0ge1xuICAgICAgICAgICAgICAgICAgICBiYXNpYzogVEhSRUUuQmFzaWNTaGFkb3dNYXAsXG4gICAgICAgICAgICAgICAgICAgIHBlcmNlbnRhZ2U6IFRIUkVFLlBDRlNoYWRvd01hcCxcbiAgICAgICAgICAgICAgICAgICAgc29mdDogVEhSRUUuUENGU29mdFNoYWRvd01hcCxcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFuY2U6IFRIUkVFLlZTTVNoYWRvd01hcCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGdsLnNoYWRvd01hcC50eXBlID0gdHlwZXNbc2hhZG93c10gPz8gVEhSRUUuUENGU29mdFNoYWRvd01hcDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXMub2JqKHNoYWRvd3MpKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihnbC5zaGFkb3dNYXAsIHNoYWRvd3MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAob2xkRW5hYmxlZCAhPT0gZ2wuc2hhZG93TWFwLmVuYWJsZWQgfHwgb2xkVHlwZSAhPT0gZ2wuc2hhZG93TWFwLnR5cGUpIGNoZWNrTmVlZHNVcGRhdGUoZ2wuc2hhZG93TWFwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNhZmVseSBzZXQgY29sb3IgbWFuYWdlbWVudCBpZiBhdmFpbGFibGUuXG4gICAgICAgIC8vIEF2b2lkIGFjY2Vzc2luZyBUSFJFRS5Db2xvck1hbmFnZW1lbnQgdG8gcGxheSBuaWNlIHdpdGggb2xkZXIgdmVyc2lvbnNcbiAgICAgICAgaWYgKFRIUkVFLkNvbG9yTWFuYWdlbWVudCkge1xuICAgICAgICAgICAgY29uc3QgQ29sb3JNYW5hZ2VtZW50ID0gVEhSRUUuQ29sb3JNYW5hZ2VtZW50IGFzIE5ndEFueVJlY29yZDtcbiAgICAgICAgICAgIGlmICgnZW5hYmxlZCcgaW4gQ29sb3JNYW5hZ2VtZW50KSBDb2xvck1hbmFnZW1lbnRbJ2VuYWJsZWQnXSA9ICFsZWdhY3kgPz8gZmFsc2U7XG4gICAgICAgICAgICBlbHNlIGlmICgnbGVnYWN5TW9kZScgaW4gQ29sb3JNYW5hZ2VtZW50KSBDb2xvck1hbmFnZW1lbnRbJ2xlZ2FjeU1vZGUnXSA9IGxlZ2FjeSA/PyB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2V0IGNvbG9yIHNwYWNlIGFuZCB0b25lbWFwcGluZyBwcmVmZXJlbmNlc1xuICAgICAgICBjb25zdCBMaW5lYXJFbmNvZGluZyA9IDMwMDA7XG4gICAgICAgIGNvbnN0IHNSR0JFbmNvZGluZyA9IDMwMDE7XG4gICAgICAgIGFwcGx5UHJvcHMoZ2wsIHtcbiAgICAgICAgICAgIG91dHB1dEVuY29kaW5nOiBsaW5lYXIgPyBMaW5lYXJFbmNvZGluZyA6IHNSR0JFbmNvZGluZyxcbiAgICAgICAgICAgIHRvbmVNYXBwaW5nOiBmbGF0ID8gVEhSRUUuTm9Ub25lTWFwcGluZyA6IFRIUkVFLkFDRVNGaWxtaWNUb25lTWFwcGluZyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gVXBkYXRlIGNvbG9yIG1hbmFnZW1lbnQgc3RhdGVcbiAgICAgICAgaWYgKHN0YXRlLmxlZ2FjeSAhPT0gbGVnYWN5KSBzdGF0ZVRvVXBkYXRlLmxlZ2FjeSA9IGxlZ2FjeTtcbiAgICAgICAgaWYgKHN0YXRlLmxpbmVhciAhPT0gbGluZWFyKSBzdGF0ZVRvVXBkYXRlLmxpbmVhciA9IGxpbmVhcjtcbiAgICAgICAgaWYgKHN0YXRlLmZsYXQgIT09IGZsYXQpIHN0YXRlVG9VcGRhdGUuZmxhdCA9IGZsYXQ7XG5cbiAgICAgICAgLy8gU2V0IGdsIHByb3BzXG4gICAgICAgIGdsLnNldENsZWFyQWxwaGEoMCk7XG4gICAgICAgIGdsLnNldFBpeGVsUmF0aW8obWFrZURwcihzdGF0ZS52aWV3cG9ydC5kcHIpKTtcbiAgICAgICAgZ2wuc2V0U2l6ZShzdGF0ZS5zaXplLndpZHRoLCBzdGF0ZS5zaXplLmhlaWdodCk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgaXMub2JqKGdsT3B0aW9ucykgJiZcbiAgICAgICAgICAgICEodHlwZW9mIGdsT3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykgJiZcbiAgICAgICAgICAgICFpcy5yZW5kZXJlcihnbE9wdGlvbnMpICYmXG4gICAgICAgICAgICAhaXMuZXF1KGdsT3B0aW9ucywgZ2wsIHNoYWxsb3dMb29zZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBhcHBseVByb3BzKGdsLCBnbE9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RvcmUgZXZlbnRzIGludGVybmFsbHlcbiAgICAgICAgaWYgKGV2ZW50cyAmJiAhc3RhdGUuZXZlbnRzLmhhbmRsZXJzKSBzdGF0ZVRvVXBkYXRlLmV2ZW50cyA9IGV2ZW50cyh0aGlzKTtcblxuICAgICAgICAvLyBDaGVjayBwZXJmb3JtYW5jZVxuICAgICAgICBpZiAocGVyZm9ybWFuY2UgJiYgIWlzLmVxdShwZXJmb3JtYW5jZSwgc3RhdGUucGVyZm9ybWFuY2UsIHNoYWxsb3dMb29zZSkpIHtcbiAgICAgICAgICAgIHN0YXRlVG9VcGRhdGUucGVyZm9ybWFuY2UgPSB7IC4uLnN0YXRlLnBlcmZvcm1hbmNlLCAuLi5wZXJmb3JtYW5jZSB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXQoc3RhdGVUb1VwZGF0ZSk7XG5cbiAgICAgICAgLy8gQ2hlY2sgcGl4ZWxyYXRpb1xuICAgICAgICBpZiAoZHByICYmIHN0YXRlLnZpZXdwb3J0LmRwciAhPT0gbWFrZURwcihkcHIpKSBzdGF0ZS5zZXREcHIoZHByKTtcbiAgICAgICAgLy8gQ2hlY2sgc2l6ZSwgYWxsb3cgaXQgdG8gdGFrZSBvbiBjb250YWluZXIgYm91bmRzIGluaXRpYWxseVxuICAgICAgICBjb25zdCBzaXplID0gY29tcHV0ZUluaXRpYWxTaXplKGNhbnZhc0VsZW1lbnQsIHNpemVPcHRpb25zKTtcbiAgICAgICAgaWYgKCFpcy5lcXUoc2l6ZSwgc3RhdGUuc2l6ZSwgc2hhbGxvd0xvb3NlKSkgc3RhdGUuc2V0U2l6ZShzaXplLndpZHRoLCBzaXplLmhlaWdodCwgc2l6ZS50b3AsIHNpemUubGVmdCk7XG5cbiAgICAgICAgLy8gQ2hlY2sgZnJhbWVsb29wXG4gICAgICAgIGlmIChzdGF0ZS5mcmFtZWxvb3AgIT09IGZyYW1lbG9vcCkgc3RhdGUuc2V0RnJhbWVsb29wKGZyYW1lbG9vcCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmdldCgncmVhZHknKSkgdGhpcy5zZXQoeyByZWFkeTogdHJ1ZSB9KTtcblxuICAgICAgICB0aGlzLiNpbnZhbGlkYXRlKCk7XG4gICAgfVxuXG4gICAgZGVzdHJveShjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuc2V0KChzdGF0ZSkgPT4gKHsgaW50ZXJuYWw6IHsgLi4uc3RhdGUuaW50ZXJuYWwsIGFjdGl2ZTogZmFsc2UgfSB9KSk7XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGdsLCB4ciwgZXZlbnRzIH0gPSB0aGlzLmdldCgpO1xuICAgICAgICAgICAgaWYgKGdsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50cy5kaXNjb25uZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50cy5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZ2wucmVuZGVyTGlzdHMuZGlzcG9zZSgpO1xuICAgICAgICAgICAgICAgIGdsLmZvcmNlQ29udGV4dExvc3MoKTtcblxuICAgICAgICAgICAgICAgIGlmIChnbC54ciAmJiBnbC54ci5lbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGdsLnhyLnNldEFuaW1hdGlvbkxvb3AobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIHhyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkaXNwb3NlKHRoaXMuZ2V0KCkpO1xuXG4gICAgICAgICAgICAgICAgcm9vdFN0YXRlTWFwLmRlbGV0ZShjYW52YXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCA1MDApO1xuICAgIH1cblxuICAgICNyZXNpemUoKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nZXQoKTtcbiAgICAgICAgbGV0IG9sZFNpemUgPSBzdGF0ZS5zaXplO1xuICAgICAgICBsZXQgb2xkRHByID0gc3RhdGUudmlld3BvcnQuZHByO1xuICAgICAgICBsZXQgb2xkQ2FtZXJhID0gc3RhdGUuY2FtZXJhO1xuXG4gICAgICAgIGNvbnN0IGNhbWVyYSA9IHRoaXMuc2VsZWN0KCdjYW1lcmEnKTtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMuc2VsZWN0KCdzaXplJyk7XG4gICAgICAgIGNvbnN0IHZpZXdwb3J0ID0gdGhpcy5zZWxlY3QoJ3ZpZXdwb3J0Jyk7XG5cbiAgICAgICAgY29uc3QgdHJpZ2dlcnMgPSBjb21wdXRlZCgoKSA9PiAoeyBjYW1lcmE6IGNhbWVyYSgpLCBzaXplOiBzaXplKCksIHZpZXdwb3J0OiB2aWV3cG9ydCgpLCBnbDogdGhpcy5nZXQoJ2dsJykgfSkpO1xuXG4gICAgICAgIGVmZmVjdChcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGNhbWVyYSwgc2l6ZSwgdmlld3BvcnQsIGdsIH0gPSB0cmlnZ2VycygpO1xuICAgICAgICAgICAgICAgIC8vIHJlc2l6ZSBjYW1lcmEgYW5kIHJlbmRlcmVyIG9uIGNoYW5nZXMgdG8gc2l6ZSBhbmQgZHByXG4gICAgICAgICAgICAgICAgaWYgKHNpemUgIT09IG9sZFNpemUgfHwgdmlld3BvcnQuZHByICE9PSBvbGREcHIpIHtcbiAgICAgICAgICAgICAgICAgICAgb2xkU2l6ZSA9IHNpemU7XG4gICAgICAgICAgICAgICAgICAgIG9sZERwciA9IHZpZXdwb3J0LmRwcjtcbiAgICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlIGNhbWVyYVxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVDYW1lcmEoY2FtZXJhLCBzaXplKTtcbiAgICAgICAgICAgICAgICAgICAgZ2wuc2V0UGl4ZWxSYXRpbyh2aWV3cG9ydC5kcHIpO1xuICAgICAgICAgICAgICAgICAgICBnbC5zZXRTaXplKHNpemUud2lkdGgsIHNpemUuaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgdmlld3BvcnQgd2hlbiBjYW1lcmEgY2hhbmdlc1xuICAgICAgICAgICAgICAgIGlmIChjYW1lcmEgIT09IG9sZENhbWVyYSkge1xuICAgICAgICAgICAgICAgICAgICBvbGRDYW1lcmEgPSBjYW1lcmE7XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUNhbWVyYShjYW1lcmEsIHNpemUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldCgoc3RhdGUpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3cG9ydDogeyAuLi5zdGF0ZS52aWV3cG9ydCwgLi4uc3RhdGUudmlld3BvcnQuZ2V0Q3VycmVudFZpZXdwb3J0KGNhbWVyYSkgfSxcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7IGluamVjdG9yOiB0aGlzLiNpbmplY3RvciwgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgICNpbnZhbGlkYXRlKCkge1xuICAgICAgICBlZmZlY3QoKCkgPT4gdm9pZCB0aGlzLnN0YXRlKCkuaW52YWxpZGF0ZSgpLCB7IGluamVjdG9yOiB0aGlzLiNpbmplY3RvciB9KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVJbml0aWFsU2l6ZShjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50IHwgVEhSRUUuT2Zmc2NyZWVuQ2FudmFzLCBkZWZhdWx0U2l6ZT86IE5ndFNpemUpOiBOZ3RTaXplIHtcbiAgICBpZiAoZGVmYXVsdFNpemUpIHJldHVybiBkZWZhdWx0U2l6ZTtcblxuICAgIGlmIChjYW52YXMgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudCAmJiBjYW52YXMucGFyZW50RWxlbWVudCkge1xuICAgICAgICByZXR1cm4gY2FudmFzLnBhcmVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgd2lkdGg6IDAsIGhlaWdodDogMCwgdG9wOiAwLCBsZWZ0OiAwIH07XG59XG5cbi8vIERpc3Bvc2VzIGFuIG9iamVjdCBhbmQgYWxsIGl0cyBwcm9wZXJ0aWVzXG5mdW5jdGlvbiBkaXNwb3NlPFRPYmogZXh0ZW5kcyB7IGRpc3Bvc2U/OiAoKSA9PiB2b2lkOyB0eXBlPzogc3RyaW5nOyBba2V5OiBzdHJpbmddOiBhbnkgfT4ob2JqOiBUT2JqKSB7XG4gICAgaWYgKG9iai5kaXNwb3NlICYmICFpcy5zY2VuZShvYmopKSBvYmouZGlzcG9zZSgpO1xuICAgIGZvciAoY29uc3QgcCBpbiBvYmopIHtcbiAgICAgICAgKHAgYXMgYW55KS5kaXNwb3NlPy4oKTtcbiAgICAgICAgZGVsZXRlIG9ialtwXTtcbiAgICB9XG59XG4iXX0=
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { signal, computed, untracked, Injectable, Optional, Inject, ElementRef, inject, Injector, assertInInjectionContext, runInInjectionContext, ChangeDetectorRef, effect, InjectionToken, EventEmitter, ViewContainerRef, NgZone, TemplateRef, Directive, Input, getDebugNode, RendererFactory2, makeEnvironmentProviders, provideZoneChangeDetection, EnvironmentInjector, DestroyRef, createEnvironmentInjector, Component, ChangeDetectionStrategy, Output, ViewChild, SkipSelf, ContentChild } from '@angular/core';
2
+ import { signal, computed, untracked, Injectable, Optional, Inject, ElementRef, inject, Injector, assertInInjectionContext, runInInjectionContext, ChangeDetectorRef, effect, InjectionToken, EventEmitter, ViewContainerRef, NgZone, TemplateRef, Directive, Input, getDebugNode, RendererFactory2, makeEnvironmentProviders, provideZoneChangeDetection, EnvironmentInjector, DestroyRef, createEnvironmentInjector, Component, ChangeDetectionStrategy, Output, ViewChild, ApplicationRef, SkipSelf, ContentChild } from '@angular/core';
3
3
  import { provideNgxResizeOptions, NgxResize } from 'ngx-resize';
4
4
  import * as THREE from 'three';
5
5
  import { DOCUMENT, NgForOf, NgIf } from '@angular/common';
@@ -38,28 +38,26 @@ class NgtSignalStore {
38
38
  constructor(initialState = {}) {
39
39
  initialState ??= {};
40
40
  this.#state = createSignal(Object.assign(initialState, { __ngt_dummy_state__: Date.now() }));
41
+ this.state = this.#state.asReadonly();
41
42
  }
42
43
  select(...keysAndOptions) {
43
44
  if (keysAndOptions.length === 0)
44
- return this.#state.asReadonly();
45
+ return this.state;
45
46
  if (keysAndOptions.length === 1 && typeof keysAndOptions[0] === 'object') {
46
47
  if (!this.#computedCache.has(STORE_COMPUTED_KEY)) {
47
- this.#computedCache.set(STORE_COMPUTED_KEY, computed(() => this.#state(), keysAndOptions));
48
+ this.#computedCache.set(STORE_COMPUTED_KEY, computed(this.state, keysAndOptions));
48
49
  return this.#computedCache.get(STORE_COMPUTED_KEY);
49
50
  }
50
51
  }
51
52
  const [keys, options] = parseOptions(keysAndOptions);
52
53
  const joinedKeys = keys.join('-');
53
54
  if (!this.#computedCache.has(joinedKeys)) {
54
- this.#computedCache.set(joinedKeys, computed(() => {
55
- const state = this.#state();
56
- return keys.reduce((value, key) => value[key], state);
57
- }, options));
55
+ this.#computedCache.set(joinedKeys, computed(() => keys.reduce((value, key) => value[key], this.state()), options));
58
56
  }
59
57
  return this.#computedCache.get(joinedKeys);
60
58
  }
61
59
  get(...keys) {
62
- const state = untracked(this.#state);
60
+ const state = untracked(this.state);
63
61
  if (keys.length === 0)
64
62
  return state;
65
63
  return keys.reduce((value, key) => value[key], state);
@@ -1445,10 +1443,7 @@ class NgtStore extends NgtSignalStore {
1445
1443
  }, { injector: this.#injector, allowSignalWrites: true });
1446
1444
  }
1447
1445
  #invalidate() {
1448
- const state = this.select();
1449
- effect(() => {
1450
- state().invalidate();
1451
- }, { injector: this.#injector });
1446
+ effect(() => void this.state().invalidate(), { injector: this.#injector });
1452
1447
  }
1453
1448
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtStore, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
1454
1449
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtStore }); }
@@ -1712,7 +1707,7 @@ class NgtCommonDirective {
1712
1707
  }
1713
1708
  this.#zone.runOutsideAngular(() => {
1714
1709
  this.#view = this.#vcr.createEmbeddedView(this.#template);
1715
- this.#view.detectChanges();
1710
+ safeDetectChanges(this.#view);
1716
1711
  });
1717
1712
  }
1718
1713
  }
@@ -1814,7 +1809,7 @@ class NgtRendererStore {
1814
1809
  state[14 /* NgtRendererClassId.injectorFactory */] = () => getDebugNode(rendererNode).injector;
1815
1810
  }
1816
1811
  if (state[0 /* NgtRendererClassId.type */] === 'comment') {
1817
- // we attach an arrow function to the Comment node
1812
+ // NOTE: we attach an arrow function to the Comment node
1818
1813
  // In our directives, we can call this function to then start tracking the RendererNode
1819
1814
  // this is done to limit the amount of Nodes we need to process for getCreationState
1820
1815
  rendererNode[SPECIAL_INTERNAL_ADD_COMMENT] = (node) => {
@@ -2016,9 +2011,9 @@ class NgtRendererStore {
2016
2011
  return null;
2017
2012
  }
2018
2013
  getCreationState() {
2019
- const injectedArgs = this.firstNonInjectedDirective(NgtArgs)?.args || [];
2020
- const injectedParent = this.firstNonInjectedDirective(NgtParent)?.parent || null;
2021
- const store = this.tryGetPortalStore();
2014
+ const injectedArgs = this.#firstNonInjectedDirective(NgtArgs)?.args || [];
2015
+ const injectedParent = this.#firstNonInjectedDirective(NgtParent)?.parent || null;
2016
+ const store = this.#tryGetPortalStore();
2022
2017
  return { injectedArgs, injectedParent, store };
2023
2018
  }
2024
2019
  destroy(node, parent) {
@@ -2094,7 +2089,7 @@ class NgtRendererStore {
2094
2089
  this.removeChild(parent, node);
2095
2090
  }
2096
2091
  }
2097
- firstNonInjectedDirective(dir) {
2092
+ #firstNonInjectedDirective(dir) {
2098
2093
  let directive;
2099
2094
  let i = this.#comments.length - 1;
2100
2095
  while (i >= 0) {
@@ -2117,7 +2112,7 @@ class NgtRendererStore {
2117
2112
  }
2118
2113
  return directive;
2119
2114
  }
2120
- tryGetPortalStore() {
2115
+ #tryGetPortalStore() {
2121
2116
  let store;
2122
2117
  // we only care about the portal states because NgtStore only differs per Portal
2123
2118
  let i = this.portals.length - 1;
@@ -2226,7 +2221,10 @@ class NgtRenderer {
2226
2221
  }
2227
2222
  // handle raw value
2228
2223
  if (name === SPECIAL_DOM_TAG.NGT_VALUE) {
2229
- return this.store.createNode('three', Object.assign({ __ngt_renderer__: { rawValue: undefined } }, { __ngt__: { isRaw: true, parent: createSignal(null) } }));
2224
+ return this.store.createNode('three', Object.assign({ __ngt_renderer__: { rawValue: undefined } },
2225
+ // NOTE: we assign this manually to a raw value node
2226
+ // because we say it is a 'three' node but we're not using prepare()
2227
+ { __ngt__: { isRaw: true, parent: createSignal(null) } }));
2230
2228
  }
2231
2229
  const { injectedArgs, injectedParent, store } = this.store.getCreationState();
2232
2230
  let parent = injectedParent;
@@ -2242,8 +2240,8 @@ class NgtRenderer {
2242
2240
  const object = injectedArgs[0];
2243
2241
  let localState = getLocalState(object);
2244
2242
  if (!Object.keys(localState).length) {
2245
- prepare(object, { store, args: injectedArgs, primitive: true });
2246
- localState = getLocalState(object);
2243
+ // NOTE: if an object isn't already "prepared", we prepare it
2244
+ localState = getLocalState(prepare(object, { store, args: injectedArgs, primitive: true }));
2247
2245
  }
2248
2246
  if (!localState.store)
2249
2247
  localState.store = store;
@@ -2640,9 +2638,8 @@ class NgtCanvas extends NgtSignalStore {
2640
2638
  if (width > 0 && height > 0) {
2641
2639
  if (!this.#store.isInit)
2642
2640
  this.#store.init();
2643
- const inputs = this.select();
2644
2641
  this.#resizeRef = this.#zone.run(() => effect(() => {
2645
- const canvasInputs = inputs();
2642
+ const canvasInputs = this.state();
2646
2643
  this.#zone.runOutsideAngular(() => {
2647
2644
  this.#store.configure({ ...canvasInputs, size: { width, height, top, left } }, this.glCanvas.nativeElement);
2648
2645
  });
@@ -2797,6 +2794,7 @@ function injectNgtRef(initial = null, injector) {
2797
2794
  injector = assertInjectionContext(injectNgtRef, injector);
2798
2795
  return runInInjectionContext(injector, () => {
2799
2796
  const cdr = inject(ChangeDetectorRef);
2797
+ const appRef = inject(ApplicationRef);
2800
2798
  const ref = is.ref(initial) ? initial : new ElementRef(initial);
2801
2799
  const signalRef = createSignal(ref.nativeElement);
2802
2800
  const readonlySignal = signalRef.asReadonly();
@@ -2824,14 +2822,13 @@ function injectNgtRef(initial = null, injector) {
2824
2822
  set: (newElement) => {
2825
2823
  if (newElement !== untracked(signalRef)) {
2826
2824
  signalRef.set(newElement);
2827
- safeDetectChanges(cdr);
2825
+ // trigger CDR
2826
+ requestAnimationFrame(() => void safeDetectChanges(cdr));
2828
2827
  }
2829
2828
  },
2830
2829
  get: () => readonlySignal(),
2831
2830
  });
2832
- Object.defineProperty(ref, 'untracked', {
2833
- get: () => untracked(readonlySignal),
2834
- });
2831
+ Object.defineProperty(ref, 'untracked', { get: () => untracked(readonlySignal) });
2835
2832
  return Object.assign(ref, { children });
2836
2833
  });
2837
2834
  }
@@ -2865,33 +2862,29 @@ const privateKeys = [
2865
2862
  ];
2866
2863
  class NgtPortalBeforeRender {
2867
2864
  #portalStore;
2868
- #subscription;
2869
2865
  constructor() {
2870
2866
  this.#portalStore = inject(NgtStore);
2871
2867
  this.renderPriority = 1;
2872
2868
  this.beforeRender = new EventEmitter();
2873
- inject(DestroyRef).onDestroy(() => {
2874
- this.#subscription?.();
2875
- });
2876
- }
2877
- ngOnInit() {
2878
2869
  let oldClear;
2879
- this.#subscription = this.#portalStore.get('internal').subscribe(({ delta, frame }) => {
2880
- this.beforeRender.emit({ ...this.#portalStore.get(), delta, frame });
2881
- const { gl, scene, camera } = this.#portalStore.get();
2882
- oldClear = gl.autoClear;
2883
- if (this.renderPriority === 1) {
2884
- // clear scene and render with default
2885
- gl.autoClear = true;
2886
- gl.render(this.parentScene, this.parentCamera);
2887
- }
2888
- // disable cleaning
2889
- gl.autoClear = false;
2890
- gl.clearDepth();
2891
- gl.render(scene, camera);
2892
- // restore
2893
- gl.autoClear = oldClear;
2894
- }, this.renderPriority, this.#portalStore);
2870
+ queueMicrotaskInInjectionContext(() => {
2871
+ injectBeforeRender(({ delta, frame }) => {
2872
+ this.beforeRender.emit({ ...this.#portalStore.get(), delta, frame });
2873
+ const { gl, scene, camera } = this.#portalStore.get();
2874
+ oldClear = gl.autoClear;
2875
+ if (this.renderPriority === 1) {
2876
+ // clear scene and render with default
2877
+ gl.autoClear = true;
2878
+ gl.render(this.parentScene, this.parentCamera);
2879
+ }
2880
+ // disable cleaning
2881
+ gl.autoClear = false;
2882
+ gl.clearDepth();
2883
+ gl.render(scene, camera);
2884
+ // restore
2885
+ gl.autoClear = oldClear;
2886
+ }, { priority: this.renderPriority });
2887
+ });
2895
2888
  }
2896
2889
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtPortalBeforeRender, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
2897
2890
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: NgtPortalBeforeRender, isStandalone: true, selector: "[ngtPortalBeforeRender]", inputs: { renderPriority: "renderPriority", parentScene: "parentScene", parentCamera: "parentCamera" }, outputs: { beforeRender: "beforeRender" }, ngImport: i0 }); }
@@ -2931,7 +2924,7 @@ class NgtPortal extends NgtSignalStore {
2931
2924
  set container(container) {
2932
2925
  this.set({ container });
2933
2926
  }
2934
- set state(state) {
2927
+ set portalState(state) {
2935
2928
  this.set({ state });
2936
2929
  }
2937
2930
  #parentStore;
@@ -3037,7 +3030,7 @@ class NgtPortal extends NgtSignalStore {
3037
3030
  };
3038
3031
  }
3039
3032
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtPortal, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3040
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: NgtPortal, isStandalone: true, selector: "ngt-portal", inputs: { container: "container", state: "state", autoRender: "autoRender", autoRenderPriority: "autoRenderPriority" }, outputs: { beforeRender: "beforeRender" }, providers: [NgtStore], queries: [{ propertyName: "portalContentTemplate", first: true, predicate: NgtPortalContent, descendants: true, read: TemplateRef, static: true }], viewQueries: [{ propertyName: "portalContentAnchor", first: true, predicate: ["portalContentAnchor"], descendants: true, read: ViewContainerRef, static: true }], usesInheritance: true, ngImport: i0, template: `
3033
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: NgtPortal, isStandalone: true, selector: "ngt-portal", inputs: { container: "container", portalState: "portalState", autoRender: "autoRender", autoRenderPriority: "autoRenderPriority" }, outputs: { beforeRender: "beforeRender" }, providers: [NgtStore], queries: [{ propertyName: "portalContentTemplate", first: true, predicate: NgtPortalContent, descendants: true, read: TemplateRef, static: true }], viewQueries: [{ propertyName: "portalContentAnchor", first: true, predicate: ["portalContentAnchor"], descendants: true, read: ViewContainerRef, static: true }], usesInheritance: true, ngImport: i0, template: `
3041
3034
  <ng-container #portalContentAnchor>
3042
3035
  <ng-container
3043
3036
  *ngIf="autoRender && portalContentRendered"
@@ -3072,7 +3065,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImpor
3072
3065
  }]
3073
3066
  }], ctorParameters: function () { return []; }, propDecorators: { container: [{
3074
3067
  type: Input
3075
- }], state: [{
3068
+ }], portalState: [{
3076
3069
  type: Input
3077
3070
  }], autoRender: [{
3078
3071
  type: Input