obsidian-dev-utils 8.0.1-beta.3 → 8.0.1-beta.5

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.
@@ -113,29 +113,33 @@ async function retryWithTimeout(fn, retryOptions = {}) {
113
113
  });
114
114
  }
115
115
  async function runWithTimeout(timeoutInMilliseconds, fn) {
116
- let timedOut = false;
116
+ let isTimedOut = true;
117
117
  let result = null;
118
118
  const startTime = performance.now();
119
119
  await Promise.race([run(), timeout2()]);
120
- if (timedOut) {
120
+ if (isTimedOut) {
121
121
  throw new Error("Timed out");
122
122
  }
123
123
  return result;
124
124
  async function run() {
125
125
  result = await fn();
126
- timedOut = false;
126
+ isTimedOut = false;
127
127
  const duration = performance.now() - startTime;
128
128
  console.debug(`Execution time: ${duration.toString()} milliseconds`, { fn });
129
129
  }
130
130
  async function timeout2() {
131
+ if (!isTimedOut) {
132
+ return;
133
+ }
131
134
  await sleep(timeoutInMilliseconds);
135
+ if (!isTimedOut) {
136
+ return;
137
+ }
132
138
  const duration = performance.now() - startTime;
133
139
  console.warn(`Timed out in ${duration.toString()} milliseconds`, { fn });
134
140
  if ((0, import_Debug.isDebug)()) {
135
141
  console.warn("The execution is not terminated because window.DEBUG is set");
136
142
  await timeout2();
137
- } else {
138
- timedOut = true;
139
143
  }
140
144
  }
141
145
  }
@@ -169,4 +173,4 @@ async function toArray(iter) {
169
173
  timeout,
170
174
  toArray
171
175
  });
172
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL0FzeW5jLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvbiBBc3luY1xuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGFzeW5jaHJvbm91cyBvcGVyYXRpb25zLlxuICovXG5cbmltcG9ydCB7IGlzRGVidWcgfSBmcm9tICcuL0RlYnVnLnRzJztcbmltcG9ydCB7XG4gIGVtaXRBc3luY0Vycm9yRXZlbnQsXG4gIGdldFN0YWNrVHJhY2UsXG4gIHByaW50RXJyb3Jcbn0gZnJvbSAnLi9FcnJvci50cyc7XG5cbi8qKlxuICogQSB0eXBlIHJlcHJlc2VudGluZyBhIHZhbHVlIHRoYXQgY2FuIGVpdGhlciBiZSBhIGRpcmVjdCB2YWx1ZSBvciBhIFByb21pc2UgcmVzb2x2aW5nIHRvIHRoYXQgdmFsdWUuXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUuXG4gKi9cbmV4cG9ydCB0eXBlIE1heWJlUHJvbWlzZTxUPiA9IFByb21pc2U8VD4gfCBUO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIHRoZSByZXRyeSBiZWhhdmlvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXRyeU9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGFib3J0IHNpZ25hbCB0byBjYW5jZWwgdGhlIHJldHJ5IG9wZXJhdGlvbi5cbiAgICovXG4gIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWw7XG5cbiAgLyoqXG4gICAqIFRoZSBkZWxheSBpbiBtaWxsaXNlY29uZHMgYmV0d2VlbiByZXRyeSBhdHRlbXB0cy5cbiAgICovXG4gIHJldHJ5RGVsYXlJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZXRyeSB0aGUgZnVuY3Rpb24gb24gZXJyb3IuXG4gICAqL1xuICBzaG91bGRSZXRyeU9uRXJyb3I/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSB0aW1lIGluIG1pbGxpc2Vjb25kcyB0byB3YWl0IGJlZm9yZSBnaXZpbmcgdXAgb24gcmV0cnlpbmcuXG4gICAqL1xuICB0aW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQSBtYXJrZXIgaW50ZXJmYWNlIHRvIGluZGljYXRlIHRoYXQgYW4gZXJyb3Igc2hvdWxkIHRlcm1pbmF0ZSByZXRyeSBsb2dpYy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZXJtaW5hdGVSZXRyeSB7XG4gIC8qKlxuICAgKiBBIG1hcmtlciBwcm9wZXJ0eSB0byBpbmRpY2F0ZSB0aGF0IGFuIGVycm9yIHNob3VsZCB0ZXJtaW5hdGUgcmV0cnkgbG9naWMuXG4gICAqL1xuICBfX3Rlcm1pbmF0ZVJldHJ5OiB0cnVlO1xufVxuXG4vKipcbiAqIEFkZHMgYW4gZXJyb3IgaGFuZGxlciB0byBhIFByb21pc2UgdGhhdCBjYXRjaGVzIGFueSBlcnJvcnMgYW5kIGVtaXRzIGFuIGFzeW5jIGVycm9yIGV2ZW50LlxuICpcbiAqIEBwYXJhbSBhc3luY0ZuIC0gVGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0byBhZGQgYW4gZXJyb3IgaGFuZGxlciB0by5cbiAqIEByZXR1cm5zIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBjb21wbGV0ZXMgb3IgZW1pdHMgYXN5bmMgZXJyb3IgZXZlbnQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhZGRFcnJvckhhbmRsZXIoYXN5bmNGbjogKCkgPT4gUHJvbWlzZTx1bmtub3duPik6IFByb21pc2U8dm9pZD4ge1xuICB0cnkge1xuICAgIGF3YWl0IGFzeW5jRm4oKTtcbiAgfSBjYXRjaCAoYXN5bmNFcnJvcikge1xuICAgIGVtaXRBc3luY0Vycm9yRXZlbnQoYXN5bmNFcnJvcik7XG4gIH1cbn1cblxuLyoqXG4gKiBGaWx0ZXJzIGFuIGFycmF5IGFzeW5jaHJvbm91c2x5LCBrZWVwaW5nIG9ubHkgdGhlIGVsZW1lbnRzIHRoYXQgc2F0aXNmeSB0aGUgcHJvdmlkZWQgcHJlZGljYXRlIGZ1bmN0aW9uLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIGVsZW1lbnRzIGluIHRoZSBpbnB1dCBhcnJheS5cbiAqIEBwYXJhbSBhcnIgLSBUaGUgYXJyYXkgdG8gZmlsdGVyLlxuICogQHBhcmFtIHByZWRpY2F0ZSAtIFRoZSBwcmVkaWNhdGUgZnVuY3Rpb24gdG8gdGVzdCBlYWNoIGVsZW1lbnQuXG4gKiBAcmV0dXJucyBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGFuIGFycmF5IG9mIGVsZW1lbnRzIHRoYXQgc2F0aXNmeSB0aGUgcHJlZGljYXRlIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXN5bmNGaWx0ZXI8VD4oYXJyOiBUW10sIHByZWRpY2F0ZTogKHZhbHVlOiBULCBpbmRleDogbnVtYmVyLCBhcnJheTogVFtdKSA9PiBNYXliZVByb21pc2U8Ym9vbGVhbj4pOiBQcm9taXNlPFRbXT4ge1xuICBjb25zdCBwcmVkaWNhdGVSZXN1bHRzID0gYXdhaXQgYXN5bmNNYXAoYXJyLCBwcmVkaWNhdGUpO1xuICByZXR1cm4gYXJyLmZpbHRlcigoXywgaW5kZXgpID0+IHByZWRpY2F0ZVJlc3VsdHNbaW5kZXhdKTtcbn1cblxuLyoqXG4gKiBNYXBzIG92ZXIgYW4gYXJyYXkgYXN5bmNocm9ub3VzbHksIGFwcGx5aW5nIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiB0byBlYWNoIGVsZW1lbnQsIGFuZCB0aGVuIGZsYXR0ZW5zIHRoZSByZXN1bHRzIGludG8gYSBzaW5nbGUgYXJyYXkuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgZWxlbWVudHMgaW4gdGhlIGlucHV0IGFycmF5LlxuICogQHR5cGVQYXJhbSBVIC0gVGhlIHR5cGUgb2YgZWxlbWVudHMgaW4gdGhlIG91dHB1dCBhcnJheS5cbiAqIEBwYXJhbSBhcnIgLSBUaGUgYXJyYXkgdG8gbWFwIG92ZXIgYW5kIGZsYXR0ZW4uXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaCBlbGVtZW50LlxuICogQHJldHVybnMgQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhIGZsYXR0ZW5lZCBhcnJheSBvZiB0aGUgcmVzdWx0cyBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhc3luY0ZsYXRNYXA8VCwgVT4oYXJyOiBUW10sIGNhbGxiYWNrOiAodmFsdWU6IFQsIGluZGV4OiBudW1iZXIsIGFycmF5OiBUW10pID0+IE1heWJlUHJvbWlzZTxVW10+KTogUHJvbWlzZTxVW10+IHtcbiAgcmV0dXJuIChhd2FpdCBhc3luY01hcChhcnIsIGNhbGxiYWNrKSkuZmxhdCgpO1xufVxuXG4vKipcbiAqIE1hcHMgb3ZlciBhbiBhcnJheSBhc3luY2hyb25vdXNseSwgYXBwbHlpbmcgdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGVhY2ggZWxlbWVudC5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBlbGVtZW50cyBpbiB0aGUgaW5wdXQgYXJyYXkuXG4gKiBAdHlwZVBhcmFtIFUgLSBUaGUgdHlwZSBvZiBlbGVtZW50cyBpbiB0aGUgb3V0cHV0IGFycmF5LlxuICogQHBhcmFtIGFyciAtIFRoZSBhcnJheSB0byBtYXAgb3Zlci5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIGVsZW1lbnQuXG4gKiBAcmV0dXJucyBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGFuIGFycmF5IG9mIHRoZSByZXN1bHRzIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFzeW5jTWFwPFQsIFU+KGFycjogVFtdLCBjYWxsYmFjazogKHZhbHVlOiBULCBpbmRleDogbnVtYmVyLCBhcnJheTogVFtdKSA9PiBNYXliZVByb21pc2U8VT4pOiBQcm9taXNlPFVbXT4ge1xuICByZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwoYXJyLm1hcChjYWxsYmFjaykpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0byBhIHN5bmNocm9ub3VzIG9uZSBieSBhdXRvbWF0aWNhbGx5IGhhbmRsaW5nIHRoZSBQcm9taXNlIHJlamVjdGlvbi5cbiAqXG4gKiBAdHlwZVBhcmFtIEFyZ3MgLSBUaGUgdHlwZXMgb2YgdGhlIGFyZ3VtZW50cyB0aGUgZnVuY3Rpb24gYWNjZXB0cy5cbiAqIEBwYXJhbSBhc3luY0Z1bmMgLSBUaGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRoYXQgd3JhcHMgdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBpbiBhIHN5bmNocm9ub3VzIGludGVyZmFjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRBc3luY1RvU3luYzxBcmdzIGV4dGVuZHMgdW5rbm93bltdPihhc3luY0Z1bmM6ICguLi5hcmdzOiBBcmdzKSA9PiBQcm9taXNlPHVua25vd24+KTogKC4uLmFyZ3M6IEFyZ3MpID0+IHZvaWQge1xuICByZXR1cm4gKC4uLmFyZ3M6IEFyZ3MpOiB2b2lkID0+IHtcbiAgICBpbnZva2VBc3luY1NhZmVseSgoKSA9PiBhc3luY0Z1bmMoLi4uYXJncykpO1xuICB9O1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgc3luY2hyb25vdXMgZnVuY3Rpb24gdG8gYW4gYXN5bmNocm9ub3VzIG9uZSBieSB3cmFwcGluZyBpdCBpbiBhIFByb21pc2UuXG4gKlxuICogQHR5cGVQYXJhbSBBcmdzIC0gVGhlIHR5cGVzIG9mIHRoZSBhcmd1bWVudHMgdGhlIGZ1bmN0aW9uIGFjY2VwdHMuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdCAtIFRoZSB0eXBlIG9mIHRoZSBmdW5jdGlvbidzIHJldHVybiB2YWx1ZS5cbiAqIEBwYXJhbSBzeW5jRm4gLSBUaGUgc3luY2hyb25vdXMgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdGhhdCB3cmFwcyB0aGUgc3luY2hyb25vdXMgZnVuY3Rpb24gaW4gYW4gYXN5bmNocm9ub3VzIGludGVyZmFjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRTeW5jVG9Bc3luYzxBcmdzIGV4dGVuZHMgdW5rbm93bltdLCBSZXN1bHQ+KHN5bmNGbjogKC4uLmFyZ3M6IEFyZ3MpID0+IFJlc3VsdCk6ICguLi5hcmdzOiBBcmdzKSA9PiBQcm9taXNlPFJlc3VsdD4ge1xuICByZXR1cm4gKC4uLmFyZ3M6IEFyZ3MpOiBQcm9taXNlPFJlc3VsdD4gPT4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiBzeW5jRm4oLi4uYXJncykpO1xufVxuXG4vKipcbiAqIEludm9rZXMgYSBQcm9taXNlIGFuZCBzYWZlbHkgaGFuZGxlcyBhbnkgZXJyb3JzIGJ5IGNhdGNoaW5nIHRoZW0gYW5kIGVtaXR0aW5nIGFuIGFzeW5jIGVycm9yIGV2ZW50LlxuICpcbiAqIEBwYXJhbSBhc3luY0ZuIC0gVGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0byBpbnZva2Ugc2FmZWx5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW52b2tlQXN5bmNTYWZlbHkoYXN5bmNGbjogKCkgPT4gUHJvbWlzZTx1bmtub3duPik6IHZvaWQge1xuICB2b2lkIGFkZEVycm9ySGFuZGxlcihhc3luY0ZuKTtcbn1cblxuLyoqXG4gKiBNYXJrcyBhbiBlcnJvciB0byB0ZXJtaW5hdGUgcmV0cnkgbG9naWMuXG4gKlxuICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIHRvIG1hcmsgdG8gdGVybWluYXRlIHJldHJ5IGxvZ2ljLlxuICogQHJldHVybnMgQW4gZXJyb3IgdGhhdCBzaG91bGQgdGVybWluYXRlIHJldHJ5IGxvZ2ljLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFya3NBc1Rlcm1pbmF0ZVJldHJ5PFRFcnJvciBleHRlbmRzIEVycm9yPihlcnJvcjogVEVycm9yKTogVGVybWluYXRlUmV0cnkgJiBURXJyb3Ige1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihlcnJvciwgeyBfX3Rlcm1pbmF0ZVJldHJ5OiB0cnVlIH0gYXMgVGVybWluYXRlUmV0cnkpO1xufVxuXG4vKipcbiAqIFJldHJpZXMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHVudGlsIGl0IHJldHVybnMgdHJ1ZSBvciB0aGUgdGltZW91dCBpcyByZWFjaGVkLlxuICpcbiAqIEBwYXJhbSBmbiAtIFRoZSBmdW5jdGlvbiB0byByZXRyeS5cbiAqIEBwYXJhbSByZXRyeU9wdGlvbnMgLSBPcHRpb25hbCBwYXJhbWV0ZXJzIHRvIGNvbmZpZ3VyZSB0aGUgcmV0cnkgYmVoYXZpb3IuXG4gKiBAcmV0dXJucyBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgb3IgcmVqZWN0cyB3aGVuIHRoZSB0aW1lb3V0IGlzIHJlYWNoZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXRyeVdpdGhUaW1lb3V0KGZuOiAoKSA9PiBNYXliZVByb21pc2U8Ym9vbGVhbj4sIHJldHJ5T3B0aW9uczogUmV0cnlPcHRpb25zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgc3RhY2tUcmFjZSA9IGdldFN0YWNrVHJhY2UoKTtcbiAgY29uc3QgREVGQVVMVF9SRVRSWV9PUFRJT05TID0ge1xuICAgIHJldHJ5RGVsYXlJbk1pbGxpc2Vjb25kczogMTAwLFxuICAgIHNob3VsZFJldHJ5T25FcnJvcjogZmFsc2UsXG4gICAgdGltZW91dEluTWlsbGlzZWNvbmRzOiA1MDAwXG4gIH07XG4gIGNvbnN0IGZ1bGxPcHRpb25zID0geyAuLi5ERUZBVUxUX1JFVFJZX09QVElPTlMsIC4uLnJldHJ5T3B0aW9ucyB9O1xuICBhd2FpdCBydW5XaXRoVGltZW91dChmdWxsT3B0aW9ucy50aW1lb3V0SW5NaWxsaXNlY29uZHMsIGFzeW5jICgpID0+IHtcbiAgICBsZXQgYXR0ZW1wdCA9IDA7XG4gICAgZm9yICg7IDspIHtcbiAgICAgIGZ1bGxPcHRpb25zLmFib3J0U2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgYXR0ZW1wdCsrO1xuICAgICAgbGV0IGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlzU3VjY2VzcyA9IGF3YWl0IGZuKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoIWZ1bGxPcHRpb25zLnNob3VsZFJldHJ5T25FcnJvciB8fCAoZXJyb3IgYXMgUGFydGlhbDxUZXJtaW5hdGVSZXRyeT4pLl9fdGVybWluYXRlUmV0cnkpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBwcmludEVycm9yKGVycm9yKTtcbiAgICAgICAgaXNTdWNjZXNzID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoaXNTdWNjZXNzKSB7XG4gICAgICAgIGlmIChhdHRlbXB0ID4gMSkge1xuICAgICAgICAgIGNvbnNvbGUuZGVidWcoYFJldHJ5IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgYWZ0ZXIgJHthdHRlbXB0LnRvU3RyaW5nKCl9IGF0dGVtcHRzYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zb2xlLmRlYnVnKGBSZXRyeSBhdHRlbXB0ICR7YXR0ZW1wdC50b1N0cmluZygpfSBjb21wbGV0ZWQgdW5zdWNjZXNzZnVsbHkuIFRyeWluZyBhZ2FpbiBpbiAke2Z1bGxPcHRpb25zLnJldHJ5RGVsYXlJbk1pbGxpc2Vjb25kcy50b1N0cmluZygpfSBtaWxsaXNlY29uZHNgLCB7XG4gICAgICAgIGZuLFxuICAgICAgICBzdGFja1RyYWNlXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IHNsZWVwKGZ1bGxPcHRpb25zLnJldHJ5RGVsYXlJbk1pbGxpc2Vjb25kcyk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBFeGVjdXRlcyBhIGZ1bmN0aW9uIHdpdGggYSB0aW1lb3V0LiBJZiB0aGUgZnVuY3Rpb24gZG9lcyBub3QgY29tcGxldGUgd2l0aGluIHRoZSBzcGVjaWZpZWQgdGltZSwgaXQgaXMgY29uc2lkZXJlZCB0byBoYXZlIHRpbWVkIG91dC5cbiAqXG4gKiBJZiBgd2luZG93LkRFQlVHYCBpcyBzZXQsIHRoZSBleGVjdXRpb24gaXMgbm90IHRlcm1pbmF0ZWQgYWZ0ZXIgdGhlIHRpbWVvdXQgYW5kIHRoZSBmdW5jdGlvbiBpcyBhbGxvd2VkIHRvIHJ1biBpbmRlZmluaXRlbHkuXG4gKlxuICogQHR5cGVQYXJhbSBSIC0gVGhlIHR5cGUgb2YgdGhlIHJlc3VsdCBmcm9tIHRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24uXG4gKiBAcGFyYW0gdGltZW91dEluTWlsbGlzZWNvbmRzIC0gVGhlIG1heGltdW0gdGltZSB0byB3YWl0IGluIG1pbGxpc2Vjb25kcy5cbiAqIEBwYXJhbSBmbiAtIFRoZSBmdW5jdGlvbiB0byBleGVjdXRlLlxuICogQHJldHVybnMgQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24gb3IgcmVqZWN0cyBpZiBpdCB0aW1lcyBvdXQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5XaXRoVGltZW91dDxSPih0aW1lb3V0SW5NaWxsaXNlY29uZHM6IG51bWJlciwgZm46ICgpID0+IE1heWJlUHJvbWlzZTxSPik6IFByb21pc2U8Uj4ge1xuICBsZXQgdGltZWRPdXQgPSBmYWxzZTtcbiAgbGV0IHJlc3VsdDogUiA9IG51bGwgYXMgUjtcbiAgY29uc3Qgc3RhcnRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gIGF3YWl0IFByb21pc2UucmFjZShbcnVuKCksIHRpbWVvdXQoKV0pO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvblxuICBpZiAodGltZWRPdXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RpbWVkIG91dCcpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG5cbiAgYXN5bmMgZnVuY3Rpb24gcnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJlc3VsdCA9IGF3YWl0IGZuKCk7XG4gICAgdGltZWRPdXQgPSBmYWxzZTtcbiAgICBjb25zdCBkdXJhdGlvbiA9IHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgIGNvbnNvbGUuZGVidWcoYEV4ZWN1dGlvbiB0aW1lOiAke2R1cmF0aW9uLnRvU3RyaW5nKCl9IG1pbGxpc2Vjb25kc2AsIHsgZm4gfSk7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiB0aW1lb3V0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHNsZWVwKHRpbWVvdXRJbk1pbGxpc2Vjb25kcyk7XG4gICAgY29uc3QgZHVyYXRpb24gPSBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICBjb25zb2xlLndhcm4oYFRpbWVkIG91dCBpbiAke2R1cmF0aW9uLnRvU3RyaW5nKCl9IG1pbGxpc2Vjb25kc2AsIHsgZm4gfSk7XG4gICAgaWYgKGlzRGVidWcoKSkge1xuICAgICAgY29uc29sZS53YXJuKCdUaGUgZXhlY3V0aW9uIGlzIG5vdCB0ZXJtaW5hdGVkIGJlY2F1c2Ugd2luZG93LkRFQlVHIGlzIHNldCcpO1xuICAgICAgYXdhaXQgdGltZW91dCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aW1lZE91dCA9IHRydWU7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRGVsYXlzIGV4ZWN1dGlvbiBmb3IgYSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcGFyYW0gbWlsbGlzZWNvbmRzIC0gVGhlIHRpbWUgdG8gd2FpdCBpbiBtaWxsaXNlY29uZHMuXG4gKiBAcmV0dXJucyBBIFByb21pc2UgdGhhdCByZXNvbHZlcyBhZnRlciB0aGUgc3BlY2lmaWVkIGRlbGF5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2xlZXAobWlsbGlzZWNvbmRzOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbWlsbGlzZWNvbmRzKSk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIFByb21pc2UgdGhhdCByZWplY3RzIGFmdGVyIHRoZSBzcGVjaWZpZWQgdGltZW91dCBwZXJpb2QuXG4gKlxuICogQHBhcmFtIHRpbWVvdXRJbk1pbGxpc2Vjb25kcyAtIFRoZSB0aW1lb3V0IHBlcmlvZCBpbiBtaWxsaXNlY29uZHMuXG4gKiBAcmV0dXJucyBBIFByb21pc2UgdGhhdCBhbHdheXMgcmVqZWN0cyB3aXRoIGEgdGltZW91dCBlcnJvci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRpbWVvdXQodGltZW91dEluTWlsbGlzZWNvbmRzOiBudW1iZXIpOiBQcm9taXNlPG5ldmVyPiB7XG4gIGF3YWl0IHNsZWVwKHRpbWVvdXRJbk1pbGxpc2Vjb25kcyk7XG4gIHRocm93IG5ldyBFcnJvcihgVGltZWQgb3V0IGluICR7dGltZW91dEluTWlsbGlzZWNvbmRzLnRvU3RyaW5nKCl9IG1pbGxpc2Vjb25kc2ApO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0byBhbiBhcnJheSBieSBjb25zdW1pbmcgYWxsIGl0cyBlbGVtZW50cy5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBlbGVtZW50cyBwcm9kdWNlZCBieSB0aGUgQXN5bmNJdGVyYWJsZUl0ZXJhdG9yLlxuICogQHBhcmFtIGl0ZXIgLSBUaGUgQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGFuIGFycmF5IG9mIGFsbCB0aGUgZWxlbWVudHMgaW4gdGhlIEFzeW5jSXRlcmFibGVJdGVyYXRvci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRvQXJyYXk8VD4oaXRlcjogQXN5bmNJdGVyYWJsZUl0ZXJhdG9yPFQ+KTogUHJvbWlzZTxUW10+IHtcbiAgY29uc3QgYXJyOiBUW10gPSBbXTtcbiAgZm9yIGF3YWl0IChjb25zdCBpdGVtIG9mIGl0ZXIpIHtcbiAgICBhcnIucHVzaChpdGVtKTtcbiAgfVxuICByZXR1cm4gYXJyO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUtBLG1CQUF3QjtBQUN4QixtQkFJTztBQWlEUCxlQUFzQixnQkFBZ0IsU0FBZ0Q7QUFDcEYsTUFBSTtBQUNGLFVBQU0sUUFBUTtBQUFBLEVBQ2hCLFNBQVMsWUFBWTtBQUNuQiwwQ0FBb0IsVUFBVTtBQUFBLEVBQ2hDO0FBQ0Y7QUFVQSxlQUFzQixZQUFlLEtBQVUsV0FBeUY7QUFDdEksUUFBTSxtQkFBbUIsTUFBTSxTQUFTLEtBQUssU0FBUztBQUN0RCxTQUFPLElBQUksT0FBTyxDQUFDLEdBQUcsVUFBVSxpQkFBaUIsS0FBSyxDQUFDO0FBQ3pEO0FBV0EsZUFBc0IsYUFBbUIsS0FBVSxVQUFvRjtBQUNySSxVQUFRLE1BQU0sU0FBUyxLQUFLLFFBQVEsR0FBRyxLQUFLO0FBQzlDO0FBV0EsZUFBc0IsU0FBZSxLQUFVLFVBQWtGO0FBQy9ILFNBQU8sTUFBTSxRQUFRLElBQUksSUFBSSxJQUFJLFFBQVEsQ0FBQztBQUM1QztBQVNPLFNBQVMsbUJBQTJDLFdBQXlFO0FBQ2xJLFNBQU8sSUFBSSxTQUFxQjtBQUM5QixzQkFBa0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxD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
176
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL0FzeW5jLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvbiBBc3luY1xuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGFzeW5jaHJvbm91cyBvcGVyYXRpb25zLlxuICovXG5cbmltcG9ydCB7IGlzRGVidWcgfSBmcm9tICcuL0RlYnVnLnRzJztcbmltcG9ydCB7XG4gIGVtaXRBc3luY0Vycm9yRXZlbnQsXG4gIGdldFN0YWNrVHJhY2UsXG4gIHByaW50RXJyb3Jcbn0gZnJvbSAnLi9FcnJvci50cyc7XG5cbi8qKlxuICogQSB0eXBlIHJlcHJlc2VudGluZyBhIHZhbHVlIHRoYXQgY2FuIGVpdGhlciBiZSBhIGRpcmVjdCB2YWx1ZSBvciBhIFByb21pc2UgcmVzb2x2aW5nIHRvIHRoYXQgdmFsdWUuXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUuXG4gKi9cbmV4cG9ydCB0eXBlIE1heWJlUHJvbWlzZTxUPiA9IFByb21pc2U8VD4gfCBUO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIHRoZSByZXRyeSBiZWhhdmlvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXRyeU9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGFib3J0IHNpZ25hbCB0byBjYW5jZWwgdGhlIHJldHJ5IG9wZXJhdGlvbi5cbiAgICovXG4gIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWw7XG5cbiAgLyoqXG4gICAqIFRoZSBkZWxheSBpbiBtaWxsaXNlY29uZHMgYmV0d2VlbiByZXRyeSBhdHRlbXB0cy5cbiAgICovXG4gIHJldHJ5RGVsYXlJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZXRyeSB0aGUgZnVuY3Rpb24gb24gZXJyb3IuXG4gICAqL1xuICBzaG91bGRSZXRyeU9uRXJyb3I/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSB0aW1lIGluIG1pbGxpc2Vjb25kcyB0byB3YWl0IGJlZm9yZSBnaXZpbmcgdXAgb24gcmV0cnlpbmcuXG4gICAqL1xuICB0aW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQSBtYXJrZXIgaW50ZXJmYWNlIHRvIGluZGljYXRlIHRoYXQgYW4gZXJyb3Igc2hvdWxkIHRlcm1pbmF0ZSByZXRyeSBsb2dpYy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZXJtaW5hdGVSZXRyeSB7XG4gIC8qKlxuICAgKiBBIG1hcmtlciBwcm9wZXJ0eSB0byBpbmRpY2F0ZSB0aGF0IGFuIGVycm9yIHNob3VsZCB0ZXJtaW5hdGUgcmV0cnkgbG9naWMuXG4gICAqL1xuICBfX3Rlcm1pbmF0ZVJldHJ5OiB0cnVlO1xufVxuXG4vKipcbiAqIEFkZHMgYW4gZXJyb3IgaGFuZGxlciB0byBhIFByb21pc2UgdGhhdCBjYXRjaGVzIGFueSBlcnJvcnMgYW5kIGVtaXRzIGFuIGFzeW5jIGVycm9yIGV2ZW50LlxuICpcbiAqIEBwYXJhbSBhc3luY0ZuIC0gVGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0byBhZGQgYW4gZXJyb3IgaGFuZGxlciB0by5cbiAqIEByZXR1cm5zIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBjb21wbGV0ZXMgb3IgZW1pdHMgYXN5bmMgZXJyb3IgZXZlbnQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhZGRFcnJvckhhbmRsZXIoYXN5bmNGbjogKCkgPT4gUHJvbWlzZTx1bmtub3duPik6IFByb21pc2U8dm9pZD4ge1xuICB0cnkge1xuICAgIGF3YWl0IGFzeW5jRm4oKTtcbiAgfSBjYXRjaCAoYXN5bmNFcnJvcikge1xuICAgIGVtaXRBc3luY0Vycm9yRXZlbnQoYXN5bmNFcnJvcik7XG4gIH1cbn1cblxuLyoqXG4gKiBGaWx0ZXJzIGFuIGFycmF5IGFzeW5jaHJvbm91c2x5LCBrZWVwaW5nIG9ubHkgdGhlIGVsZW1lbnRzIHRoYXQgc2F0aXNmeSB0aGUgcHJvdmlkZWQgcHJlZGljYXRlIGZ1bmN0aW9uLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIGVsZW1lbnRzIGluIHRoZSBpbnB1dCBhcnJheS5cbiAqIEBwYXJhbSBhcnIgLSBUaGUgYXJyYXkgdG8gZmlsdGVyLlxuICogQHBhcmFtIHByZWRpY2F0ZSAtIFRoZSBwcmVkaWNhdGUgZnVuY3Rpb24gdG8gdGVzdCBlYWNoIGVsZW1lbnQuXG4gKiBAcmV0dXJucyBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGFuIGFycmF5IG9mIGVsZW1lbnRzIHRoYXQgc2F0aXNmeSB0aGUgcHJlZGljYXRlIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXN5bmNGaWx0ZXI8VD4oYXJyOiBUW10sIHByZWRpY2F0ZTogKHZhbHVlOiBULCBpbmRleDogbnVtYmVyLCBhcnJheTogVFtdKSA9PiBNYXliZVByb21pc2U8Ym9vbGVhbj4pOiBQcm9taXNlPFRbXT4ge1xuICBjb25zdCBwcmVkaWNhdGVSZXN1bHRzID0gYXdhaXQgYXN5bmNNYXAoYXJyLCBwcmVkaWNhdGUpO1xuICByZXR1cm4gYXJyLmZpbHRlcigoXywgaW5kZXgpID0+IHByZWRpY2F0ZVJlc3VsdHNbaW5kZXhdKTtcbn1cblxuLyoqXG4gKiBNYXBzIG92ZXIgYW4gYXJyYXkgYXN5bmNocm9ub3VzbHksIGFwcGx5aW5nIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiB0byBlYWNoIGVsZW1lbnQsIGFuZCB0aGVuIGZsYXR0ZW5zIHRoZSByZXN1bHRzIGludG8gYSBzaW5nbGUgYXJyYXkuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgZWxlbWVudHMgaW4gdGhlIGlucHV0IGFycmF5LlxuICogQHR5cGVQYXJhbSBVIC0gVGhlIHR5cGUgb2YgZWxlbWVudHMgaW4gdGhlIG91dHB1dCBhcnJheS5cbiAqIEBwYXJhbSBhcnIgLSBUaGUgYXJyYXkgdG8gbWFwIG92ZXIgYW5kIGZsYXR0ZW4uXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaCBlbGVtZW50LlxuICogQHJldHVybnMgQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhIGZsYXR0ZW5lZCBhcnJheSBvZiB0aGUgcmVzdWx0cyBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhc3luY0ZsYXRNYXA8VCwgVT4oYXJyOiBUW10sIGNhbGxiYWNrOiAodmFsdWU6IFQsIGluZGV4OiBudW1iZXIsIGFycmF5OiBUW10pID0+IE1heWJlUHJvbWlzZTxVW10+KTogUHJvbWlzZTxVW10+IHtcbiAgcmV0dXJuIChhd2FpdCBhc3luY01hcChhcnIsIGNhbGxiYWNrKSkuZmxhdCgpO1xufVxuXG4vKipcbiAqIE1hcHMgb3ZlciBhbiBhcnJheSBhc3luY2hyb25vdXNseSwgYXBwbHlpbmcgdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGVhY2ggZWxlbWVudC5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBlbGVtZW50cyBpbiB0aGUgaW5wdXQgYXJyYXkuXG4gKiBAdHlwZVBhcmFtIFUgLSBUaGUgdHlwZSBvZiBlbGVtZW50cyBpbiB0aGUgb3V0cHV0IGFycmF5LlxuICogQHBhcmFtIGFyciAtIFRoZSBhcnJheSB0byBtYXAgb3Zlci5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIGVsZW1lbnQuXG4gKiBAcmV0dXJucyBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGFuIGFycmF5IG9mIHRoZSByZXN1bHRzIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFzeW5jTWFwPFQsIFU+KGFycjogVFtdLCBjYWxsYmFjazogKHZhbHVlOiBULCBpbmRleDogbnVtYmVyLCBhcnJheTogVFtdKSA9PiBNYXliZVByb21pc2U8VT4pOiBQcm9taXNlPFVbXT4ge1xuICByZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwoYXJyLm1hcChjYWxsYmFjaykpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0byBhIHN5bmNocm9ub3VzIG9uZSBieSBhdXRvbWF0aWNhbGx5IGhhbmRsaW5nIHRoZSBQcm9taXNlIHJlamVjdGlvbi5cbiAqXG4gKiBAdHlwZVBhcmFtIEFyZ3MgLSBUaGUgdHlwZXMgb2YgdGhlIGFyZ3VtZW50cyB0aGUgZnVuY3Rpb24gYWNjZXB0cy5cbiAqIEBwYXJhbSBhc3luY0Z1bmMgLSBUaGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRoYXQgd3JhcHMgdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBpbiBhIHN5bmNocm9ub3VzIGludGVyZmFjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRBc3luY1RvU3luYzxBcmdzIGV4dGVuZHMgdW5rbm93bltdPihhc3luY0Z1bmM6ICguLi5hcmdzOiBBcmdzKSA9PiBQcm9taXNlPHVua25vd24+KTogKC4uLmFyZ3M6IEFyZ3MpID0+IHZvaWQge1xuICByZXR1cm4gKC4uLmFyZ3M6IEFyZ3MpOiB2b2lkID0+IHtcbiAgICBpbnZva2VBc3luY1NhZmVseSgoKSA9PiBhc3luY0Z1bmMoLi4uYXJncykpO1xuICB9O1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgc3luY2hyb25vdXMgZnVuY3Rpb24gdG8gYW4gYXN5bmNocm9ub3VzIG9uZSBieSB3cmFwcGluZyBpdCBpbiBhIFByb21pc2UuXG4gKlxuICogQHR5cGVQYXJhbSBBcmdzIC0gVGhlIHR5cGVzIG9mIHRoZSBhcmd1bWVudHMgdGhlIGZ1bmN0aW9uIGFjY2VwdHMuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdCAtIFRoZSB0eXBlIG9mIHRoZSBmdW5jdGlvbidzIHJldHVybiB2YWx1ZS5cbiAqIEBwYXJhbSBzeW5jRm4gLSBUaGUgc3luY2hyb25vdXMgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdGhhdCB3cmFwcyB0aGUgc3luY2hyb25vdXMgZnVuY3Rpb24gaW4gYW4gYXN5bmNocm9ub3VzIGludGVyZmFjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRTeW5jVG9Bc3luYzxBcmdzIGV4dGVuZHMgdW5rbm93bltdLCBSZXN1bHQ+KHN5bmNGbjogKC4uLmFyZ3M6IEFyZ3MpID0+IFJlc3VsdCk6ICguLi5hcmdzOiBBcmdzKSA9PiBQcm9taXNlPFJlc3VsdD4ge1xuICByZXR1cm4gKC4uLmFyZ3M6IEFyZ3MpOiBQcm9taXNlPFJlc3VsdD4gPT4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiBzeW5jRm4oLi4uYXJncykpO1xufVxuXG4vKipcbiAqIEludm9rZXMgYSBQcm9taXNlIGFuZCBzYWZlbHkgaGFuZGxlcyBhbnkgZXJyb3JzIGJ5IGNhdGNoaW5nIHRoZW0gYW5kIGVtaXR0aW5nIGFuIGFzeW5jIGVycm9yIGV2ZW50LlxuICpcbiAqIEBwYXJhbSBhc3luY0ZuIC0gVGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0byBpbnZva2Ugc2FmZWx5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW52b2tlQXN5bmNTYWZlbHkoYXN5bmNGbjogKCkgPT4gUHJvbWlzZTx1bmtub3duPik6IHZvaWQge1xuICB2b2lkIGFkZEVycm9ySGFuZGxlcihhc3luY0ZuKTtcbn1cblxuLyoqXG4gKiBNYXJrcyBhbiBlcnJvciB0byB0ZXJtaW5hdGUgcmV0cnkgbG9naWMuXG4gKlxuICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIHRvIG1hcmsgdG8gdGVybWluYXRlIHJldHJ5IGxvZ2ljLlxuICogQHJldHVybnMgQW4gZXJyb3IgdGhhdCBzaG91bGQgdGVybWluYXRlIHJldHJ5IGxvZ2ljLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFya3NBc1Rlcm1pbmF0ZVJldHJ5PFRFcnJvciBleHRlbmRzIEVycm9yPihlcnJvcjogVEVycm9yKTogVGVybWluYXRlUmV0cnkgJiBURXJyb3Ige1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihlcnJvciwgeyBfX3Rlcm1pbmF0ZVJldHJ5OiB0cnVlIH0gYXMgVGVybWluYXRlUmV0cnkpO1xufVxuXG4vKipcbiAqIFJldHJpZXMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHVudGlsIGl0IHJldHVybnMgdHJ1ZSBvciB0aGUgdGltZW91dCBpcyByZWFjaGVkLlxuICpcbiAqIEBwYXJhbSBmbiAtIFRoZSBmdW5jdGlvbiB0byByZXRyeS5cbiAqIEBwYXJhbSByZXRyeU9wdGlvbnMgLSBPcHRpb25hbCBwYXJhbWV0ZXJzIHRvIGNvbmZpZ3VyZSB0aGUgcmV0cnkgYmVoYXZpb3IuXG4gKiBAcmV0dXJucyBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgb3IgcmVqZWN0cyB3aGVuIHRoZSB0aW1lb3V0IGlzIHJlYWNoZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXRyeVdpdGhUaW1lb3V0KGZuOiAoKSA9PiBNYXliZVByb21pc2U8Ym9vbGVhbj4sIHJldHJ5T3B0aW9uczogUmV0cnlPcHRpb25zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgc3RhY2tUcmFjZSA9IGdldFN0YWNrVHJhY2UoKTtcbiAgY29uc3QgREVGQVVMVF9SRVRSWV9PUFRJT05TID0ge1xuICAgIHJldHJ5RGVsYXlJbk1pbGxpc2Vjb25kczogMTAwLFxuICAgIHNob3VsZFJldHJ5T25FcnJvcjogZmFsc2UsXG4gICAgdGltZW91dEluTWlsbGlzZWNvbmRzOiA1MDAwXG4gIH07XG4gIGNvbnN0IGZ1bGxPcHRpb25zID0geyAuLi5ERUZBVUxUX1JFVFJZX09QVElPTlMsIC4uLnJldHJ5T3B0aW9ucyB9O1xuICBhd2FpdCBydW5XaXRoVGltZW91dChmdWxsT3B0aW9ucy50aW1lb3V0SW5NaWxsaXNlY29uZHMsIGFzeW5jICgpID0+IHtcbiAgICBsZXQgYXR0ZW1wdCA9IDA7XG4gICAgZm9yICg7IDspIHtcbiAgICAgIGZ1bGxPcHRpb25zLmFib3J0U2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgYXR0ZW1wdCsrO1xuICAgICAgbGV0IGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlzU3VjY2VzcyA9IGF3YWl0IGZuKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoIWZ1bGxPcHRpb25zLnNob3VsZFJldHJ5T25FcnJvciB8fCAoZXJyb3IgYXMgUGFydGlhbDxUZXJtaW5hdGVSZXRyeT4pLl9fdGVybWluYXRlUmV0cnkpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBwcmludEVycm9yKGVycm9yKTtcbiAgICAgICAgaXNTdWNjZXNzID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoaXNTdWNjZXNzKSB7XG4gICAgICAgIGlmIChhdHRlbXB0ID4gMSkge1xuICAgICAgICAgIGNvbnNvbGUuZGVidWcoYFJldHJ5IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgYWZ0ZXIgJHthdHRlbXB0LnRvU3RyaW5nKCl9IGF0dGVtcHRzYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zb2xlLmRlYnVnKGBSZXRyeSBhdHRlbXB0ICR7YXR0ZW1wdC50b1N0cmluZygpfSBjb21wbGV0ZWQgdW5zdWNjZXNzZnVsbHkuIFRyeWluZyBhZ2FpbiBpbiAke2Z1bGxPcHRpb25zLnJldHJ5RGVsYXlJbk1pbGxpc2Vjb25kcy50b1N0cmluZygpfSBtaWxsaXNlY29uZHNgLCB7XG4gICAgICAgIGZuLFxuICAgICAgICBzdGFja1RyYWNlXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IHNsZWVwKGZ1bGxPcHRpb25zLnJldHJ5RGVsYXlJbk1pbGxpc2Vjb25kcyk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBFeGVjdXRlcyBhIGZ1bmN0aW9uIHdpdGggYSB0aW1lb3V0LiBJZiB0aGUgZnVuY3Rpb24gZG9lcyBub3QgY29tcGxldGUgd2l0aGluIHRoZSBzcGVjaWZpZWQgdGltZSwgaXQgaXMgY29uc2lkZXJlZCB0byBoYXZlIHRpbWVkIG91dC5cbiAqXG4gKiBJZiBgd2luZG93LkRFQlVHYCBpcyBzZXQsIHRoZSBleGVjdXRpb24gaXMgbm90IHRlcm1pbmF0ZWQgYWZ0ZXIgdGhlIHRpbWVvdXQgYW5kIHRoZSBmdW5jdGlvbiBpcyBhbGxvd2VkIHRvIHJ1biBpbmRlZmluaXRlbHkuXG4gKlxuICogQHR5cGVQYXJhbSBSIC0gVGhlIHR5cGUgb2YgdGhlIHJlc3VsdCBmcm9tIHRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24uXG4gKiBAcGFyYW0gdGltZW91dEluTWlsbGlzZWNvbmRzIC0gVGhlIG1heGltdW0gdGltZSB0byB3YWl0IGluIG1pbGxpc2Vjb25kcy5cbiAqIEBwYXJhbSBmbiAtIFRoZSBmdW5jdGlvbiB0byBleGVjdXRlLlxuICogQHJldHVybnMgQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24gb3IgcmVqZWN0cyBpZiBpdCB0aW1lcyBvdXQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5XaXRoVGltZW91dDxSPih0aW1lb3V0SW5NaWxsaXNlY29uZHM6IG51bWJlciwgZm46ICgpID0+IE1heWJlUHJvbWlzZTxSPik6IFByb21pc2U8Uj4ge1xuICBsZXQgaXNUaW1lZE91dCA9IHRydWU7XG4gIGxldCByZXN1bHQ6IFIgPSBudWxsIGFzIFI7XG4gIGNvbnN0IHN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICBhd2FpdCBQcm9taXNlLnJhY2UoW3J1bigpLCB0aW1lb3V0KCldKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb25cbiAgaWYgKGlzVGltZWRPdXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RpbWVkIG91dCcpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG5cbiAgYXN5bmMgZnVuY3Rpb24gcnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJlc3VsdCA9IGF3YWl0IGZuKCk7XG4gICAgaXNUaW1lZE91dCA9IGZhbHNlO1xuICAgIGNvbnN0IGR1cmF0aW9uID0gcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydFRpbWU7XG4gICAgY29uc29sZS5kZWJ1ZyhgRXhlY3V0aW9uIHRpbWU6ICR7ZHVyYXRpb24udG9TdHJpbmcoKX0gbWlsbGlzZWNvbmRzYCwgeyBmbiB9KTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHRpbWVvdXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFpc1RpbWVkT3V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IHNsZWVwKHRpbWVvdXRJbk1pbGxpc2Vjb25kcyk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb25cbiAgICBpZiAoIWlzVGltZWRPdXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZHVyYXRpb24gPSBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICBjb25zb2xlLndhcm4oYFRpbWVkIG91dCBpbiAke2R1cmF0aW9uLnRvU3RyaW5nKCl9IG1pbGxpc2Vjb25kc2AsIHsgZm4gfSk7XG4gICAgaWYgKGlzRGVidWcoKSkge1xuICAgICAgY29uc29sZS53YXJuKCdUaGUgZXhlY3V0aW9uIGlzIG5vdCB0ZXJtaW5hdGVkIGJlY2F1c2Ugd2luZG93LkRFQlVHIGlzIHNldCcpO1xuICAgICAgYXdhaXQgdGltZW91dCgpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIERlbGF5cyBleGVjdXRpb24gZm9yIGEgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHBhcmFtIG1pbGxpc2Vjb25kcyAtIFRoZSB0aW1lIHRvIHdhaXQgaW4gbWlsbGlzZWNvbmRzLlxuICogQHJldHVybnMgQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgdGhlIHNwZWNpZmllZCBkZWxheS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNsZWVwKG1pbGxpc2Vjb25kczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1pbGxpc2Vjb25kcykpO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBQcm9taXNlIHRoYXQgcmVqZWN0cyBhZnRlciB0aGUgc3BlY2lmaWVkIHRpbWVvdXQgcGVyaW9kLlxuICpcbiAqIEBwYXJhbSB0aW1lb3V0SW5NaWxsaXNlY29uZHMgLSBUaGUgdGltZW91dCBwZXJpb2QgaW4gbWlsbGlzZWNvbmRzLlxuICogQHJldHVybnMgQSBQcm9taXNlIHRoYXQgYWx3YXlzIHJlamVjdHMgd2l0aCBhIHRpbWVvdXQgZXJyb3IuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0aW1lb3V0KHRpbWVvdXRJbk1pbGxpc2Vjb25kczogbnVtYmVyKTogUHJvbWlzZTxuZXZlcj4ge1xuICBhd2FpdCBzbGVlcCh0aW1lb3V0SW5NaWxsaXNlY29uZHMpO1xuICB0aHJvdyBuZXcgRXJyb3IoYFRpbWVkIG91dCBpbiAke3RpbWVvdXRJbk1pbGxpc2Vjb25kcy50b1N0cmluZygpfSBtaWxsaXNlY29uZHNgKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgdG8gYW4gYXJyYXkgYnkgY29uc3VtaW5nIGFsbCBpdHMgZWxlbWVudHMuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgZWxlbWVudHMgcHJvZHVjZWQgYnkgdGhlIEFzeW5jSXRlcmFibGVJdGVyYXRvci5cbiAqIEBwYXJhbSBpdGVyIC0gVGhlIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0byBjb252ZXJ0LlxuICogQHJldHVybnMgQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiBhbGwgdGhlIGVsZW1lbnRzIGluIHRoZSBBc3luY0l0ZXJhYmxlSXRlcmF0b3IuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0b0FycmF5PFQ+KGl0ZXI6IEFzeW5jSXRlcmFibGVJdGVyYXRvcjxUPik6IFByb21pc2U8VFtdPiB7XG4gIGNvbnN0IGFycjogVFtdID0gW107XG4gIGZvciBhd2FpdCAoY29uc3QgaXRlbSBvZiBpdGVyKSB7XG4gICAgYXJyLnB1c2goaXRlbSk7XG4gIH1cbiAgcmV0dXJuIGFycjtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFLQSxtQkFBd0I7QUFDeEIsbUJBSU87QUFpRFAsZUFBc0IsZ0JBQWdCLFNBQWdEO0FBQ3BGLE1BQUk7QUFDRixVQUFNLFFBQVE7QUFBQSxFQUNoQixTQUFTLFlBQVk7QUFDbkIsMENBQW9CLFVBQVU7QUFBQSxFQUNoQztBQUNGO0FBVUEsZUFBc0IsWUFBZSxLQUFVLFdBQXlGO0FBQ3RJLFFBQU0sbUJBQW1CLE1BQU0sU0FBUyxLQUFLLFNBQVM7QUFDdEQsU0FBTyxJQUFJLE9BQU8sQ0FBQyxHQUFHLFVBQVUsaUJBQWlCLEtBQUssQ0FBQztBQUN6RDtBQVdBLGVBQXNCLGFBQW1CLEtBQVUsVUFBb0Y7QUFDckksVUFBUSxNQUFNLFNBQVMsS0FBSyxRQUFRLEdBQUcsS0FBSztBQUM5QztBQVdBLGVBQXNCLFNBQWUsS0FBVSxVQUFrRjtBQUMvSCxTQUFPLE1BQU0sUUFBUSxJQUFJLElBQUksSUFBSSxRQUFRLENBQUM7QUFDNUM7QUFTTyxTQUFTLG1CQUEyQyxXQUF5RTtBQUNsSSxTQUFPLElBQUksU0FBcUI7QUFDOUIsc0JBQWtCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQztBQUFBLEVBQzVDO0FBQ0Y7QUFVTyxTQUFTLG1CQUFtRCxRQUF1RTtBQUN4SSxTQUFPLElBQUksU0FBZ0MsUUFBUSxRQUFRLEVBQUUsS0FBSyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDekY7QUFPTyxTQUFTLGtCQUFrQixTQUF1QztBQUN2RSxPQUFLLGdCQUFnQixPQUFPO0FBQzlCO0FBUU8sU0FBUyxzQkFBNEMsT0FBd0M7QUFDbEcsU0FBTyxPQUFPLE9BQU8sT0FBTyxFQUFFLGtCQUFrQixLQUFLLENBQW1CO0FBQzFFO0FBU0EsZUFBc0IsaUJBQWlCLElBQWlDLGVBQTZCLENBQUMsR0FBa0I7QUFDdEgsUUFBTSxpQkFBYSw0QkFBYztBQUNqQyxRQUFNLHdCQUF3QjtBQUFBLElBQzVCLDBCQUEwQjtBQUFBLElBQzFCLG9CQUFvQjtBQUFBLElBQ3BCLHVCQUF1QjtBQUFBLEVBQ3pCO0FBQ0EsUUFBTSxjQUFjLEVBQUUsR0FBRyx1QkFBdUIsR0FBRyxhQUFhO0FBQ2hFLFFBQU0sZUFBZSxZQUFZLHVCQUF1QixZQUFZO0FBQ2xFLFFBQUksVUFBVTtBQUNkLGVBQVU7QUFDUixrQkFBWSxhQUFhLGVBQWU7QUFDeEM7QUFDQSxVQUFJO0FBQ0osVUFBSTtBQUNGLG9CQUFZLE1BQU0sR0FBRztBQUFBLE1BQ3ZCLFNBQVMsT0FBTztBQUNkLFlBQUksQ0FBQyxZQUFZLHNCQUF1QixNQUFrQyxrQkFBa0I7QUFDMUYsZ0JBQU07QUFBQSxRQUNSO0FBQ0EscUNBQVcsS0FBSztBQUNoQixvQkFBWTtBQUFBLE1BQ2Q7QUFDQSxVQUFJLFdBQVc7QUFDYixZQUFJLFVBQVUsR0FBRztBQUNmLGtCQUFRLE1BQU0sc0NBQXNDLFFBQVEsU0FBUyxDQUFDLFdBQVc7QUFBQSxRQUNuRjtBQUNBO0FBQUEsTUFDRjtBQUVBLGNBQVEsTUFBTSxpQkFBaUIsUUFBUSxTQUFTLENBQUMsOENBQThDLFlBQVkseUJBQXlCLFNBQVMsQ0FBQyxpQkFBaUI7QUFBQSxRQUM3SjtBQUFBLFFBQ0E7QUFBQSxNQUNGLENBQUM7QUFDRCxZQUFNLE1BQU0sWUFBWSx3QkFBd0I7QUFBQSxJQUNsRDtBQUFBLEVBQ0YsQ0FBQztBQUNIO0FBWUEsZUFBc0IsZUFBa0IsdUJBQStCLElBQXVDO0FBQzVHLE1BQUksYUFBYTtBQUNqQixNQUFJLFNBQVk7QUFDaEIsUUFBTSxZQUFZLFlBQVksSUFBSTtBQUNsQyxRQUFNLFFBQVEsS0FBSyxDQUFDLElBQUksR0FBR0EsU0FBUSxDQUFDLENBQUM7QUFFckMsTUFBSSxZQUFZO0FBQ2QsVUFBTSxJQUFJLE1BQU0sV0FBVztBQUFBLEVBQzdCO0FBQ0EsU0FBTztBQUVQLGlCQUFlLE1BQXFCO0FBQ2xDLGFBQVMsTUFBTSxHQUFHO0FBQ2xCLGlCQUFhO0FBQ2IsVUFBTSxXQUFXLFlBQVksSUFBSSxJQUFJO0FBQ3JDLFlBQVEsTUFBTSxtQkFBbUIsU0FBUyxTQUFTLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxDQUFDO0FBQUEsRUFDN0U7QUFFQSxpQkFBZUEsV0FBeUI7QUFDdEMsUUFBSSxDQUFDLFlBQVk7QUFDZjtBQUFBLElBQ0Y7QUFDQSxVQUFNLE1BQU0scUJBQXFCO0FBRWpDLFFBQUksQ0FBQyxZQUFZO0FBQ2Y7QUFBQSxJQUNGO0FBQ0EsVUFBTSxXQUFXLFlBQVksSUFBSSxJQUFJO0FBQ3JDLFlBQVEsS0FBSyxnQkFBZ0IsU0FBUyxTQUFTLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxDQUFDO0FBQ3ZFLFlBQUksc0JBQVEsR0FBRztBQUNiLGNBQVEsS0FBSyw2REFBNkQ7QUFDMUUsWUFBTUEsU0FBUTtBQUFBLElBQ2hCO0FBQUEsRUFDRjtBQUNGO0FBUUEsZUFBc0IsTUFBTSxjQUFxQztBQUMvRCxRQUFNLElBQUksUUFBUSxDQUFDLFlBQVksV0FBVyxTQUFTLFlBQVksQ0FBQztBQUNsRTtBQVFBLGVBQXNCLFFBQVEsdUJBQStDO0FBQzNFLFFBQU0sTUFBTSxxQkFBcUI7QUFDakMsUUFBTSxJQUFJLE1BQU0sZ0JBQWdCLHNCQUFzQixTQUFTLENBQUMsZUFBZTtBQUNqRjtBQVNBLGVBQXNCLFFBQVcsTUFBOEM7QUFDN0UsUUFBTSxNQUFXLENBQUM7QUFDbEIsbUJBQWlCLFFBQVEsTUFBTTtBQUM3QixRQUFJLEtBQUssSUFBSTtBQUFBLEVBQ2Y7QUFDQSxTQUFPO0FBQ1Q7IiwKICAibmFtZXMiOiBbInRpbWVvdXQiXQp9Cg==
@@ -228,10 +228,13 @@ async function process(app, pathOrFile, newContentProvider, options = {}) {
228
228
  const path = (0, import_FileSystem.getPath)(app, pathOrFile);
229
229
  await (0, import_Async.retryWithTimeout)(async () => {
230
230
  let oldContent = "";
231
- let doesFileExist = await queueFileAction(app, path, fullOptions.shouldFailOnMissingFile, async (file) => {
231
+ let doesFileExist = await invokeFileActionIfFileExists(app, path, async (file) => {
232
232
  oldContent = await app.vault.read(file);
233
233
  });
234
234
  if (!doesFileExist) {
235
+ if (fullOptions.shouldFailOnMissingFile) {
236
+ throw new Error(`File '${path}' not found`);
237
+ }
235
238
  return true;
236
239
  }
237
240
  const newContent = await (0, import_ValueProvider.resolveValue)(newContentProvider, oldContent);
@@ -239,7 +242,7 @@ async function process(app, pathOrFile, newContentProvider, options = {}) {
239
242
  return false;
240
243
  }
241
244
  let isSuccess = true;
242
- doesFileExist = await queueFileAction(app, path, fullOptions.shouldFailOnMissingFile, async (file) => {
245
+ doesFileExist = await invokeFileActionIfFileExists(app, path, async (file) => {
243
246
  await app.vault.process(file, (content) => {
244
247
  if (content !== oldContent) {
245
248
  console.warn("Content has changed since it was read. Retrying...", {
@@ -254,6 +257,9 @@ async function process(app, pathOrFile, newContentProvider, options = {}) {
254
257
  });
255
258
  });
256
259
  if (!doesFileExist) {
260
+ if (fullOptions.shouldFailOnMissingFile) {
261
+ throw new Error(`File '${path}' not found`);
262
+ }
257
263
  return true;
258
264
  }
259
265
  return isSuccess;
@@ -279,20 +285,21 @@ async function renameSafe(app, oldPathOrFile, newPath) {
279
285
  }
280
286
  return newAvailablePath;
281
287
  }
282
- async function queueFileAction(app, path, shouldFailOnMissingFile, fileAction) {
283
- let result = true;
284
- await app.vault.adapter.queue(async () => {
285
- const file = (0, import_FileSystem.getFileOrNull)(app, path);
286
- if (!file || file.deleted) {
287
- if (shouldFailOnMissingFile) {
288
- throw new Error(`File ${path} not found`);
289
- }
290
- result = false;
291
- } else {
292
- await fileAction(file);
288
+ async function invokeFileActionIfFileExists(app, path, fileAction) {
289
+ const file = (0, import_FileSystem.getFileOrNull)(app, path);
290
+ if (!file) {
291
+ return false;
292
+ }
293
+ try {
294
+ await fileAction(file);
295
+ } catch (e) {
296
+ const file2 = (0, import_FileSystem.getFileOrNull)(app, path);
297
+ if (!file2) {
298
+ return false;
293
299
  }
294
- });
295
- return result;
300
+ throw e;
301
+ }
302
+ return true;
296
303
  }
297
304
  // Annotate the CommonJS export names for ESM import in node:
298
305
  0 && (module.exports = {
@@ -311,4 +318,4 @@ async function queueFileAction(app, path, shouldFailOnMissingFile, fileAction) {
311
318
  process,
312
319
  renameSafe
313
320
  });
314
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuL1ZhdWx0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJ2YXIgX19wcm9jZXNzID0gZ2xvYmFsVGhpc1sncHJvY2VzcyddID8/IHtcbiAgXCJjd2RcIjogKCk9PlwiL1wiLFxuICBcImVudlwiOiB7fSxcbiAgXCJwbGF0Zm9ybVwiOiBcImFuZHJvaWRcIlxufTtcbi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uIFZhdWx0XG4gKiBUaGlzIG1vZHVsZSBwcm92aWRlcyB1dGlsaXR5IGZ1bmN0aW9ucyBmb3Igd29ya2luZyB3aXRoIHRoZSBPYnNpZGlhbiBWYXVsdC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIExpc3RlZEZpbGVzLFxuICBURm9sZGVyXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHtcbiAgQXBwLFxuICBOb3RpY2UsXG4gIFRGaWxlXG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB7IHBhcmVudEZvbGRlclBhdGggfSBmcm9tICdvYnNpZGlhbi10eXBpbmdzL2ltcGxlbWVudGF0aW9ucyc7XG5cbmltcG9ydCB0eXBlIHsgUmV0cnlPcHRpb25zIH0gZnJvbSAnLi4vQXN5bmMudHMnO1xuaW1wb3J0IHR5cGUgeyBWYWx1ZVByb3ZpZGVyIH0gZnJvbSAnLi4vVmFsdWVQcm92aWRlci50cyc7XG5pbXBvcnQgdHlwZSB7XG4gIFBhdGhPckFic3RyYWN0RmlsZSxcbiAgUGF0aE9yRmlsZSxcbiAgUGF0aE9yRm9sZGVyXG59IGZyb20gJy4vRmlsZVN5c3RlbS50cyc7XG5cbmltcG9ydCB7IHJldHJ5V2l0aFRpbWVvdXQgfSBmcm9tICcuLi9Bc3luYy50cyc7XG5pbXBvcnQgeyBwcmludEVycm9yIH0gZnJvbSAnLi4vRXJyb3IudHMnO1xuaW1wb3J0IHsgbm9vcEFzeW5jIH0gZnJvbSAnLi4vRnVuY3Rpb24udHMnO1xuaW1wb3J0IHtcbiAgYmFzZW5hbWUsXG4gIGRpcm5hbWUsXG4gIGV4dG5hbWUsXG4gIGpvaW5cbn0gZnJvbSAnLi4vUGF0aC50cyc7XG5pbXBvcnQgeyByZXNvbHZlVmFsdWUgfSBmcm9tICcuLi9WYWx1ZVByb3ZpZGVyLnRzJztcbmltcG9ydCB7XG4gIGdldEFic3RyYWN0RmlsZU9yTnVsbCxcbiAgZ2V0RmlsZSxcbiAgZ2V0RmlsZU9yTnVsbCxcbiAgZ2V0Rm9sZGVyLFxuICBnZXRGb2xkZXJPck51bGwsXG4gIGdldFBhdGgsXG4gIGlzRmlsZSxcbiAgaXNGb2xkZXIsXG4gIGlzTm90ZVxufSBmcm9tICcuL0ZpbGVTeXN0ZW0udHMnO1xuaW1wb3J0IHsgZ2V0QmFja2xpbmtzRm9yRmlsZVNhZmUgfSBmcm9tICcuL01ldGFkYXRhQ2FjaGUudHMnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHRoZSBgcHJvY2Vzc2AgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc09wdGlvbnMgZXh0ZW5kcyBSZXRyeU9wdGlvbnMge1xuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgZnVuY3Rpb24gd2lsbCB0aHJvdyBhbiBlcnJvciBpZiB0aGUgZmlsZSBpcyBtaXNzaW5nIG9yIGRlbGV0ZWQuXG4gICAqL1xuICBzaG91bGRGYWlsT25NaXNzaW5nRmlsZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29waWVzIGEgZmlsZSBzYWZlbHkgaW4gdGhlIHZhdWx0LlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gb2xkUGF0aE9yRmlsZSAtIFRoZSBvbGQgcGF0aCBvciBmaWxlIHRvIGNvcHkuXG4gKiBAcGFyYW0gbmV3UGF0aCAtIFRoZSBuZXcgcGF0aCB0byBjb3B5IHRoZSBmaWxlIHRvLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIG5ldyBwYXRoIG9mIHRoZSBjb3BpZWQgZmlsZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvcHlTYWZlKGFwcDogQXBwLCBvbGRQYXRoT3JGaWxlOiBQYXRoT3JGaWxlLCBuZXdQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBmaWxlID0gZ2V0RmlsZShhcHAsIG9sZFBhdGhPckZpbGUpO1xuXG4gIGNvbnN0IG5ld0ZvbGRlclBhdGggPSBwYXJlbnRGb2xkZXJQYXRoKG5ld1BhdGgpO1xuICBhd2FpdCBjcmVhdGVGb2xkZXJTYWZlKGFwcCwgbmV3Rm9sZGVyUGF0aCk7XG5cbiAgY29uc3QgbmV3QXZhaWxhYmxlUGF0aCA9IGdldEF2YWlsYWJsZVBhdGgoYXBwLCBuZXdQYXRoKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGFwcC52YXVsdC5jb3B5KGZpbGUsIG5ld0F2YWlsYWJsZVBhdGgpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKCFhd2FpdCBhcHAudmF1bHQuZXhpc3RzKG5ld0F2YWlsYWJsZVBhdGgpKSB7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdBdmFpbGFibGVQYXRoO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBmb2xkZXIgc2FmZWx5IGluIHRoZSBzcGVjaWZpZWQgcGF0aC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZm9sZGVyIHRvIGNyZWF0ZS5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGZvbGRlciB3YXMgY3JlYXRlZC5cbiAqIEB0aHJvd3MgSWYgYW4gZXJyb3Igb2NjdXJzIHdoaWxlIGNyZWF0aW5nIHRoZSBmb2xkZXIgYW5kIGl0IHN0aWxsIGRvZXNuJ3QgZXhpc3QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVGb2xkZXJTYWZlKGFwcDogQXBwLCBwYXRoOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgaWYgKGF3YWl0IGFwcC52YXVsdC5hZGFwdGVyLmV4aXN0cyhwYXRoKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgYXBwLnZhdWx0LmNyZWF0ZUZvbGRlcihwYXRoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmICghYXdhaXQgYXBwLnZhdWx0LmV4aXN0cyhwYXRoKSkge1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgdGVtcG9yYXJ5IGZpbGUgaW4gdGhlIHZhdWx0IHdpdGggcGFyZW50IGZvbGRlcnMgaWYgbmVlZGVkLlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggb2YgdGhlIGZpbGUgdG8gY3JlYXRlLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBmdW5jdGlvbiB0aGF0IGNhbiBiZSBjYWxsZWQgdG8gZGVsZXRlIHRoZSB0ZW1wb3JhcnkgZmlsZSBhbmQgYWxsIGl0cyBjcmVhdGVkIHBhcmVudHMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVUZW1wRmlsZShhcHA6IEFwcCwgcGF0aDogc3RyaW5nKTogUHJvbWlzZTwoKSA9PiBQcm9taXNlPHZvaWQ+PiB7XG4gIGxldCBmaWxlID0gZ2V0RmlsZU9yTnVsbChhcHAsIHBhdGgpO1xuICBpZiAoZmlsZSkge1xuICAgIHJldHVybiBub29wQXN5bmM7XG4gIH1cblxuICBjb25zdCBmb2xkZXJDbGVhbnVwID0gYXdhaXQgY3JlYXRlVGVtcEZvbGRlcihhcHAsIHBhcmVudEZvbGRlclBhdGgocGF0aCkpO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgYXBwLnZhdWx0LmNyZWF0ZShwYXRoLCAnJyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoIWF3YWl0IGFwcC52YXVsdC5leGlzdHMocGF0aCkpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgZmlsZSA9IGdldEZpbGUoYXBwLCBwYXRoKTtcblxuICByZXR1cm4gYXN5bmMgKCkgPT4ge1xuICAgIGlmICghZmlsZS5kZWxldGVkKSB7XG4gICAgICBhd2FpdCBhcHAuZmlsZU1hbmFnZXIudHJhc2hGaWxlKGZpbGUpO1xuICAgIH1cbiAgICBhd2FpdCBmb2xkZXJDbGVhbnVwKCk7XG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHRlbXBvcmFyeSBmb2xkZXIgaW4gdGhlIHZhdWx0IHdpdGggcGFyZW50IGZvbGRlcnMgaWYgbmVlZGVkLlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggb2YgdGhlIGZvbGRlciB0byBjcmVhdGUuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIGNhbGxlZCB0byBkZWxldGUgdGhlIHRlbXBvcmFyeSBmb2xkZXIgYW5kIGFsbCBpdHMgY3JlYXRlZCBwYXJlbnRzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVGVtcEZvbGRlcihhcHA6IEFwcCwgcGF0aDogc3RyaW5nKTogUHJvbWlzZTwoKSA9PiBQcm9taXNlPHZvaWQ+PiB7XG4gIGxldCBmb2xkZXIgPSBnZXRGb2xkZXJPck51bGwoYXBwLCBwYXRoKTtcbiAgaWYgKGZvbGRlcikge1xuICAgIHJldHVybiBub29wQXN5bmM7XG4gIH1cblxuICBjb25zdCBkaXJQYXRoID0gcGFyZW50Rm9sZGVyUGF0aChwYXRoKTtcbiAgYXdhaXQgY3JlYXRlVGVtcEZvbGRlcihhcHAsIGRpclBhdGgpO1xuXG4gIGNvbnN0IGZvbGRlckNsZWFudXAgPSBhd2FpdCBjcmVhdGVUZW1wRm9sZGVyKGFwcCwgcGFyZW50Rm9sZGVyUGF0aChwYXRoKSk7XG5cbiAgYXdhaXQgY3JlYXRlRm9sZGVyU2FmZShhcHAsIHBhdGgpO1xuXG4gIGZvbGRlciA9IGdldEZvbGRlcihhcHAsIHBhdGgpO1xuXG4gIHJldHVybiBhc3luYyAoKSA9PiB7XG4gICAgaWYgKCFmb2xkZXIuZGVsZXRlZCkge1xuICAgICAgYXdhaXQgYXBwLmZpbGVNYW5hZ2VyLnRyYXNoRmlsZShmb2xkZXIpO1xuICAgIH1cbiAgICBhd2FpdCBmb2xkZXJDbGVhbnVwKCk7XG4gIH07XG59XG5cbi8qKlxuICogUmVtb3ZlcyBlbXB0eSBmb2xkZXIgaGllcmFyY2h5IHN0YXJ0aW5nIGZyb20gdGhlIGdpdmVuIGZvbGRlci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZvbGRlciAtIFRoZSBmb2xkZXIgdG8gc3RhcnQgcmVtb3ZpbmcgZW1wdHkgaGllcmFyY2h5IGZyb20uXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBlbXB0eSBoaWVyYXJjaHkgaXMgZGVsZXRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZUVtcHR5Rm9sZGVySGllcmFyY2h5KGFwcDogQXBwLCBwYXRoT3JGb2xkZXI6IG51bGwgfCBQYXRoT3JGb2xkZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgbGV0IGZvbGRlciA9IGdldEZvbGRlck9yTnVsbChhcHAsIHBhdGhPckZvbGRlcik7XG5cbiAgd2hpbGUgKGZvbGRlcikge1xuICAgIGlmICghYXdhaXQgaXNFbXB0eUZvbGRlcihhcHAsIGZvbGRlcikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcGFyZW50ID0gZm9sZGVyLnBhcmVudDtcbiAgICBhd2FpdCBkZWxldGVTYWZlKGFwcCwgZm9sZGVyLnBhdGgpO1xuICAgIGZvbGRlciA9IHBhcmVudDtcbiAgfVxufVxuXG4vKipcbiAqIERlbGV0ZXMgYWJzdHJhY3QgZmlsZSBzYWZlbHkgZnJvbSB0aGUgdmF1bHQuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgYWJzdHJhY3QgZmlsZSB0byBkZWxldGUuXG4gKiBAcGFyYW0gZGVsZXRlZE5vdGVQYXRoIC0gT3B0aW9uYWwuIFRoZSBwYXRoIG9mIHRoZSBub3RlIHRoYXQgdHJpZ2dlcmVkIHRoZSByZW1vdmFsLlxuICogQHBhcmFtIHNob3VsZFJlcG9ydFVzZWRBdHRhY2htZW50cyAtIE9wdGlvbmFsLiBJZiBgdHJ1ZWAsIGEgbm90aWNlIHdpbGwgYmUgc2hvd24gZm9yIGVhY2ggYXR0YWNobWVudCB0aGF0IGlzIHN0aWxsIHVzZWQgYnkgb3RoZXIgbm90ZXMuXG4gKiBAcGFyYW0gc2hvdWxkRGVsZXRlRW1wdHlGb2xkZXJzIC0gT3B0aW9uYWwuIElmIGB0cnVlYCwgZW1wdHkgZm9sZGVycyB3aWxsIGJlIGRlbGV0ZWQuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSByZW1vdmFsIHdhcyBzdWNjZXNzZnVsLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVsZXRlU2FmZShhcHA6IEFwcCwgcGF0aE9yRmlsZTogUGF0aE9yQWJzdHJhY3RGaWxlLCBkZWxldGVkTm90ZVBhdGg/OiBzdHJpbmcsIHNob3VsZFJlcG9ydFVzZWRBdHRhY2htZW50cz86IGJvb2xlYW4sIHNob3VsZERlbGV0ZUVtcHR5Rm9sZGVycz86IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgZmlsZSA9IGdldEFic3RyYWN0RmlsZU9yTnVsbChhcHAsIHBhdGhPckZpbGUpO1xuXG4gIGlmICghZmlsZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGxldCBjYW5EZWxldGUgPSBpc0ZpbGUoZmlsZSkgfHwgKHNob3VsZERlbGV0ZUVtcHR5Rm9sZGVycyA/PyB0cnVlKTtcblxuICBpZiAoaXNGaWxlKGZpbGUpKSB7XG4gICAgY29uc3QgYmFja2xpbmtzID0gYXdhaXQgZ2V0QmFja2xpbmtzRm9yRmlsZVNhZmUoYXBwLCBmaWxlKTtcbiAgICBpZiAoZGVsZXRlZE5vdGVQYXRoKSB7XG4gICAgICBiYWNrbGlua3MuY2xlYXIoZGVsZXRlZE5vdGVQYXRoKTtcbiAgICB9XG4gICAgaWYgKGJhY2tsaW5rcy5jb3VudCgpICE9PSAwKSB7XG4gICAgICBpZiAoc2hvdWxkUmVwb3J0VXNlZEF0dGFjaG1lbnRzKSB7XG4gICAgICAgIG5ldyBOb3RpY2UoYEF0dGFjaG1lbnQgJHtmaWxlLnBhdGh9IGlzIHN0aWxsIHVzZWQgYnkgb3RoZXIgbm90ZXMuIEl0IHdpbGwgbm90IGJlIGRlbGV0ZWQuYCk7XG4gICAgICB9XG4gICAgICBjYW5EZWxldGUgPSBmYWxzZTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNGb2xkZXIoZmlsZSkpIHtcbiAgICBjb25zdCBsaXN0ZWRGaWxlcyA9IGF3YWl0IGxpc3RTYWZlKGFwcCwgZmlsZSk7XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBbLi4ubGlzdGVkRmlsZXMuZmlsZXMsIC4uLmxpc3RlZEZpbGVzLmZvbGRlcnNdKSB7XG4gICAgICBjYW5EZWxldGUgJiY9IGF3YWl0IGRlbGV0ZVNhZmUoYXBwLCBjaGlsZCwgZGVsZXRlZE5vdGVQYXRoLCBzaG91bGRSZXBvcnRVc2VkQXR0YWNobWVudHMpO1xuICAgIH1cblxuICAgIGNhbkRlbGV0ZSAmJj0gYXdhaXQgaXNFbXB0eUZvbGRlcihhcHAsIGZpbGUpO1xuICB9XG5cbiAgaWYgKGNhbkRlbGV0ZSkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBhcHAuZmlsZU1hbmFnZXIudHJhc2hGaWxlKGZpbGUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChhd2FpdCBhcHAudmF1bHQuZXhpc3RzKGZpbGUucGF0aCkpIHtcbiAgICAgICAgcHJpbnRFcnJvcihuZXcgRXJyb3IoYEZhaWxlZCB0byBkZWxldGUgJHtmaWxlLnBhdGh9YCwgeyBjYXVzZTogZSB9KSk7XG4gICAgICAgIGNhbkRlbGV0ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjYW5EZWxldGU7XG59XG5cbi8qKlxuICogR2V0cyBhbiBhdmFpbGFibGUgcGF0aCBmb3IgYSBmaWxlIGluIHRoZSB2YXVsdC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZmlsZSB0byBnZXQgYW4gYXZhaWxhYmxlIHBhdGggZm9yLlxuICogQHJldHVybnMgVGhlIGF2YWlsYWJsZSBwYXRoIGZvciB0aGUgZmlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEF2YWlsYWJsZVBhdGgoYXBwOiBBcHAsIHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGV4dCA9IGV4dG5hbWUocGF0aCk7XG4gIHJldHVybiBhcHAudmF1bHQuZ2V0QXZhaWxhYmxlUGF0aChqb2luKGRpcm5hbWUocGF0aCksIGJhc2VuYW1lKHBhdGgsIGV4dCkpLCBleHQuc2xpY2UoMSkpO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyBhbiBhcnJheSBvZiBNYXJrZG93biBmaWxlcyBmcm9tIHRoZSBhcHAncyB2YXVsdCBhbmQgc29ydHMgdGhlbSBhbHBoYWJldGljYWxseSBieSB0aGVpciBmaWxlIHBhdGguXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBNYXJrZG93biBmaWxlcyBzb3J0ZWQgYnkgZmlsZSBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFya2Rvd25GaWxlc1NvcnRlZChhcHA6IEFwcCk6IFRGaWxlW10ge1xuICByZXR1cm4gYXBwLnZhdWx0LmdldE1hcmtkb3duRmlsZXMoKS5zb3J0KChhLCBiKSA9PiBhLnBhdGgubG9jYWxlQ29tcGFyZShiLnBhdGgpKTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgYW4gYXJyYXkgb2YgYWxsIG5vdGUgZmlsZXMgZnJvbSB0aGUgYXBwJ3MgdmF1bHQgYW5kIHNvcnRzIHRoZW0gYWxwaGFiZXRpY2FsbHkgYnkgdGhlaXIgZmlsZSBwYXRoLlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBhbGwgbm90ZSBmaWxlcyBpbiB0aGUgdmF1bHQgc29ydGVkIGJ5IGZpbGUgcGF0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5vdGVGaWxlc1NvcnRlZChhcHA6IEFwcCk6IFRGaWxlW10ge1xuICByZXR1cm4gYXBwLnZhdWx0LmdldEFsbExvYWRlZEZpbGVzKCkuZmlsdGVyKChmaWxlKSA9PiBpc0ZpbGUoZmlsZSkgJiYgaXNOb3RlKGFwcCwgZmlsZSkpLnNvcnQoKGEsIGIpID0+IGEucGF0aC5sb2NhbGVDb21wYXJlKGIucGF0aCkpIGFzIFRGaWxlW107XG59XG5cbi8qKlxuICogR2V0cyBhIHNhZmUgcmVuYW1lIHBhdGggZm9yIGEgZmlsZS5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIG9sZFBhdGhPckZpbGUgLSBUaGUgb2xkIHBhdGggb3IgZmlsZSB0byByZW5hbWUuXG4gKiBAcGFyYW0gbmV3UGF0aCAtIFRoZSBuZXcgcGF0aCB0byByZW5hbWUgdGhlIGZpbGUgdG8uXG4gKiBAcmV0dXJucyBUaGUgc2FmZSByZW5hbWUgcGF0aCBmb3IgdGhlIGZpbGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTYWZlUmVuYW1lUGF0aChhcHA6IEFwcCwgb2xkUGF0aE9yRmlsZTogUGF0aE9yRmlsZSwgbmV3UGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgb2xkUGF0aCA9IGdldFBhdGgoYXBwLCBvbGRQYXRoT3JGaWxlKTtcblxuICBpZiAoYXBwLnZhdWx0LmFkYXB0ZXIuaW5zZW5zaXRpdmUpIHtcbiAgICBsZXQgZm9sZGVyUGF0aCA9IGRpcm5hbWUobmV3UGF0aCk7XG4gICAgbGV0IG5vbkV4aXN0aW5nUGF0aCA9IGJhc2VuYW1lKG5ld1BhdGgpO1xuICAgIGxldCBmb2xkZXI6IG51bGwgfCBURm9sZGVyID0gbnVsbDtcbiAgICBmb3IgKDsgOykge1xuICAgICAgZm9sZGVyID0gZ2V0Rm9sZGVyT3JOdWxsKGFwcCwgZm9sZGVyUGF0aCwgdHJ1ZSk7XG4gICAgICBpZiAoZm9sZGVyKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgbm9uRXhpc3RpbmdQYXRoID0gam9pbihiYXNlbmFtZShmb2xkZXJQYXRoKSwgbm9uRXhpc3RpbmdQYXRoKTtcbiAgICAgIGZvbGRlclBhdGggPSBkaXJuYW1lKGZvbGRlclBhdGgpO1xuICAgIH1cbiAgICBuZXdQYXRoID0gam9pbihmb2xkZXIuZ2V0UGFyZW50UHJlZml4KCksIG5vbkV4aXN0aW5nUGF0aCk7XG4gIH1cblxuICBpZiAob2xkUGF0aC50b0xvd2VyQ2FzZSgpID09PSBuZXdQYXRoLnRvTG93ZXJDYXNlKCkpIHtcbiAgICByZXR1cm4gbmV3UGF0aDtcbiAgfVxuXG4gIHJldHVybiBnZXRBdmFpbGFibGVQYXRoKGFwcCwgbmV3UGF0aCk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgZm9sZGVyIGlzIGVtcHR5LlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGb2xkZXIgLSBUaGUgcGF0aCBvciBmb2xkZXIgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBmb2xkZXIgaXMgZW1wdHkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpc0VtcHR5Rm9sZGVyKGFwcDogQXBwLCBwYXRoT3JGb2xkZXI6IFBhdGhPckZvbGRlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBsaXN0ZWRGaWxlcyA9IGF3YWl0IGxpc3RTYWZlKGFwcCwgZ2V0UGF0aChhcHAsIHBhdGhPckZvbGRlcikpO1xuICByZXR1cm4gbGlzdGVkRmlsZXMuZmlsZXMubGVuZ3RoID09PSAwICYmIGxpc3RlZEZpbGVzLmZvbGRlcnMubGVuZ3RoID09PSAwO1xufVxuXG4vKipcbiAqIFNhZmVseSBsaXN0cyB0aGUgZmlsZXMgYW5kIGZvbGRlcnMgYXQgdGhlIHNwZWNpZmllZCBwYXRoIGluIHRoZSB2YXVsdC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZvbGRlciAtIFRoZSBwYXRoIG9yIGZvbGRlciB0byBsaXN0LlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBgTGlzdGVkRmlsZXNgIG9iamVjdCBjb250YWluaW5nIHRoZSBsaXN0ZWQgZmlsZXMgYW5kIGZvbGRlcnMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaXN0U2FmZShhcHA6IEFwcCwgcGF0aE9yRm9sZGVyOiBQYXRoT3JGb2xkZXIpOiBQcm9taXNlPExpc3RlZEZpbGVzPiB7XG4gIGNvbnN0IHBhdGggPSBnZXRQYXRoKGFwcCwgcGF0aE9yRm9sZGVyKTtcbiAgY29uc3QgRU1QVFkgPSB7IGZpbGVzOiBbXSwgZm9sZGVyczogW10gfTtcblxuICBpZiAoKGF3YWl0IGFwcC52YXVsdC5hZGFwdGVyLnN0YXQocGF0aCkpPy50eXBlICE9PSAnZm9sZGVyJykge1xuICAgIHJldHVybiBFTVBUWTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGFwcC52YXVsdC5hZGFwdGVyLmxpc3QocGF0aCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoYXdhaXQgYXBwLnZhdWx0LmV4aXN0cyhwYXRoKSkge1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgcmV0dXJuIEVNUFRZO1xuICB9XG59XG5cbi8qKlxuICogUHJvY2Vzc2VzIGEgZmlsZSB3aXRoIHJldHJ5IGxvZ2ljLCB1cGRhdGluZyBpdHMgY29udGVudCBiYXNlZCBvbiBhIHByb3ZpZGVkIHZhbHVlIG9yIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UsIHR5cGljYWxseSB1c2VkIGZvciBhY2Nlc3NpbmcgdGhlIHZhdWx0LlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIHRvIGJlIHByb2Nlc3NlZC4gSXQgY2FuIGJlIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgcGF0aCBvciBhIGZpbGUgb2JqZWN0LlxuICogQHBhcmFtIG5ld0NvbnRlbnRQcm92aWRlciAtIEEgdmFsdWUgcHJvdmlkZXIgdGhhdCByZXR1cm5zIHRoZSBuZXcgY29udGVudCBiYXNlZCBvbiB0aGUgb2xkIGNvbnRlbnQgb2YgdGhlIGZpbGUuXG4gKiBJdCBjYW4gYmUgYSBzdHJpbmcgb3IgYSBmdW5jdGlvbiB0aGF0IHRha2VzIHRoZSBvbGQgY29udGVudCBhcyBhbiBhcmd1bWVudCBhbmQgcmV0dXJucyB0aGUgbmV3IGNvbnRlbnQuXG4gKiBJZiBmdW5jdGlvbiBpcyBwcm92aWRlZCwgaXQgc2hvdWxkIHJldHVybiBgbnVsbGAgaWYgdGhlIHByb2Nlc3Mgc2hvdWxkIGJlIHJldHJpZWQuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgZm9yIHByb2Nlc3NpbmcvcmV0cnlpbmcgdGhlIG9wZXJhdGlvbi5cbiAqXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBwcm9jZXNzIGlzIGNvbXBsZXRlLlxuICpcbiAqIEB0aHJvd3MgV2lsbCB0aHJvdyBhbiBlcnJvciBpZiB0aGUgcHJvY2VzcyBmYWlscyBhZnRlciB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiByZXRyaWVzIG9yIHRpbWVvdXQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlLCBuZXdDb250ZW50UHJvdmlkZXI6IFZhbHVlUHJvdmlkZXI8bnVsbCB8IHN0cmluZywgW3N0cmluZ10+LCBvcHRpb25zOiBQcm9jZXNzT3B0aW9ucyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IERFRkFVTFRfUkVUUllfT1BUSU9OUyA9IHtcbiAgICBzaG91bGRGYWlsT25NaXNzaW5nRmlsZTogdHJ1ZVxuICB9O1xuICBjb25zdCBmdWxsT3B0aW9ucyA9IHsgLi4uREVGQVVMVF9SRVRSWV9PUFRJT05TLCAuLi5vcHRpb25zIH07XG4gIGNvbnN0IHBhdGggPSBnZXRQYXRoKGFwcCwgcGF0aE9yRmlsZSk7XG5cbiAgYXdhaXQgcmV0cnlXaXRoVGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgbGV0IG9sZENvbnRlbnQgPSAnJztcblxuICAgIGxldCBkb2VzRmlsZUV4aXN0ID0gYXdhaXQgcXVldWVGaWxlQWN0aW9uKGFwcCwgcGF0aCwgZnVsbE9wdGlvbnMuc2hvdWxkRmFpbE9uTWlzc2luZ0ZpbGUsIGFzeW5jIChmaWxlKSA9PiB7XG4gICAgICBvbGRDb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XG4gICAgfSk7XG5cbiAgICBpZiAoIWRvZXNGaWxlRXhpc3QpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBhd2FpdCByZXNvbHZlVmFsdWUobmV3Q29udGVudFByb3ZpZGVyLCBvbGRDb250ZW50KTtcbiAgICBpZiAobmV3Q29udGVudCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGxldCBpc1N1Y2Nlc3MgPSB0cnVlO1xuICAgIGRvZXNGaWxlRXhpc3QgPSBhd2FpdCBxdWV1ZUZpbGVBY3Rpb24oYXBwLCBwYXRoLCBmdWxsT3B0aW9ucy5zaG91bGRGYWlsT25NaXNzaW5nRmlsZSwgYXN5bmMgKGZpbGUpID0+IHtcbiAgICAgIGF3YWl0IGFwcC52YXVsdC5wcm9jZXNzKGZpbGUsIChjb250ZW50KSA9PiB7XG4gICAgICAgIGlmIChjb250ZW50ICE9PSBvbGRDb250ZW50KSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdDb250ZW50IGhhcyBjaGFuZ2VkIHNpbmNlIGl0IHdhcyByZWFkLiBSZXRyeWluZy4uLicsIHtcbiAgICAgICAgICAgIGFjdHVhbENvbnRlbnQ6IGNvbnRlbnQsXG4gICAgICAgICAgICBleHBlY3RlZENvbnRlbnQ6IG9sZENvbnRlbnQsXG4gICAgICAgICAgICBwYXRoOiBmaWxlLnBhdGhcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpc1N1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXdDb250ZW50O1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpZiAoIWRvZXNGaWxlRXhpc3QpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBpc1N1Y2Nlc3M7XG4gIH0sIGZ1bGxPcHRpb25zKTtcbn1cblxuLyoqXG4gKiBSZW5hbWVzIGEgZmlsZSBzYWZlbHkgaW4gdGhlIHZhdWx0LlxuICogSWYgdGhlIG5ldyBwYXRoIGFscmVhZHkgZXhpc3RzLCB0aGUgZmlsZSB3aWxsIGJlIHJlbmFtZWQgdG8gYW4gYXZhaWxhYmxlIHBhdGguXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBvbGRQYXRoT3JGaWxlIC0gVGhlIG9sZCBwYXRoIG9yIGZpbGUgdG8gcmVuYW1lLlxuICogQHBhcmFtIG5ld1BhdGggLSBUaGUgbmV3IHBhdGggdG8gcmVuYW1lIHRoZSBmaWxlIHRvLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIG5ldyBwYXRoIG9mIHRoZSBmaWxlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVuYW1lU2FmZShhcHA6IEFwcCwgb2xkUGF0aE9yRmlsZTogUGF0aE9yRmlsZSwgbmV3UGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qgb2xkRmlsZSA9IGdldEZpbGUoYXBwLCBvbGRQYXRoT3JGaWxlLCBmYWxzZSwgdHJ1ZSk7XG5cbiAgY29uc3QgbmV3QXZhaWxhYmxlUGF0aCA9IGdldFNhZmVSZW5hbWVQYXRoKGFwcCwgb2xkUGF0aE9yRmlsZSwgbmV3UGF0aCk7XG5cbiAgaWYgKG9sZEZpbGUucGF0aC50b0xvd2VyQ2FzZSgpID09PSBuZXdBdmFpbGFibGVQYXRoLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBpZiAob2xkRmlsZS5wYXRoICE9PSBuZXdQYXRoKSB7XG4gICAgICBhd2FpdCBhcHAudmF1bHQucmVuYW1lKG9sZEZpbGUsIG5ld0F2YWlsYWJsZVBhdGgpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3QXZhaWxhYmxlUGF0aDtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZvbGRlclBhdGggPSBwYXJlbnRGb2xkZXJQYXRoKG5ld0F2YWlsYWJsZVBhdGgpO1xuICBhd2FpdCBjcmVhdGVGb2xkZXJTYWZlKGFwcCwgbmV3Rm9sZGVyUGF0aCk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBhcHAudmF1bHQucmVuYW1lKG9sZEZpbGUsIG5ld0F2YWlsYWJsZVBhdGgpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKCFhd2FpdCBhcHAudmF1bHQuZXhpc3RzKG5ld0F2YWlsYWJsZVBhdGgpIHx8IGF3YWl0IGFwcC52YXVsdC5leGlzdHMob2xkRmlsZS5wYXRoKSkge1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3QXZhaWxhYmxlUGF0aDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcXVldWVGaWxlQWN0aW9uKGFwcDogQXBwLCBwYXRoOiBzdHJpbmcsIHNob3VsZEZhaWxPbk1pc3NpbmdGaWxlOiBib29sZWFuLCBmaWxlQWN0aW9uOiAoZmlsZTogVEZpbGUpID0+IFByb21pc2U8dm9pZD4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgbGV0IHJlc3VsdCA9IHRydWU7XG4gIGF3YWl0IGFwcC52YXVsdC5hZGFwdGVyLnF1ZXVlKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBmaWxlID0gZ2V0RmlsZU9yTnVsbChhcHAsIHBhdGgpO1xuICAgIGlmICghZmlsZSB8fCBmaWxlLmRlbGV0ZWQpIHtcbiAgICAgIGlmIChzaG91bGRGYWlsT25NaXNzaW5nRmlsZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZpbGUgJHtwYXRofSBub3QgZm91bmRgKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBmaWxlQWN0aW9uKGZpbGUpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWVBLHNCQUlPO0FBQ1AsNkJBQWlDO0FBVWpDLG1CQUFpQztBQUNqQyxtQkFBMkI7QUFDM0Isc0JBQTBCO0FBQzFCLGtCQUtPO0FBQ1AsMkJBQTZCO0FBQzdCLHdCQVVPO0FBQ1AsMkJBQXdDO0FBbkR4QyxJQUFJLFlBQVksV0FBVyxTQUFTLEtBQUs7QUFBQSxFQUN2QyxPQUFPLE1BQUk7QUFBQSxFQUNYLE9BQU8sQ0FBQztBQUFBLEVBQ1IsWUFBWTtBQUNkO0FBbUVBLGVBQXNCLFNBQVMsS0FBVSxlQUEyQixTQUFrQztBQUNwRyxRQUFNLFdBQU8sMkJBQVEsS0FBSyxhQUFhO0FBRXZDLFFBQU0sb0JBQWdCLHlDQUFpQixPQUFPO0FBQzlDLFFBQU0saUJBQWlCLEtBQUssYUFBYTtBQUV6QyxRQUFNLG1CQUFtQixpQkFBaUIsS0FBSyxP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
321
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuL1ZhdWx0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJ2YXIgX19wcm9jZXNzID0gZ2xvYmFsVGhpc1sncHJvY2VzcyddID8/IHtcbiAgXCJjd2RcIjogKCk9PlwiL1wiLFxuICBcImVudlwiOiB7fSxcbiAgXCJwbGF0Zm9ybVwiOiBcImFuZHJvaWRcIlxufTtcbi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uIFZhdWx0XG4gKiBUaGlzIG1vZHVsZSBwcm92aWRlcyB1dGlsaXR5IGZ1bmN0aW9ucyBmb3Igd29ya2luZyB3aXRoIHRoZSBPYnNpZGlhbiBWYXVsdC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIExpc3RlZEZpbGVzLFxuICBURm9sZGVyXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHtcbiAgQXBwLFxuICBOb3RpY2UsXG4gIFRGaWxlXG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB7IHBhcmVudEZvbGRlclBhdGggfSBmcm9tICdvYnNpZGlhbi10eXBpbmdzL2ltcGxlbWVudGF0aW9ucyc7XG5cbmltcG9ydCB0eXBlIHsgUmV0cnlPcHRpb25zIH0gZnJvbSAnLi4vQXN5bmMudHMnO1xuaW1wb3J0IHR5cGUgeyBWYWx1ZVByb3ZpZGVyIH0gZnJvbSAnLi4vVmFsdWVQcm92aWRlci50cyc7XG5pbXBvcnQgdHlwZSB7XG4gIFBhdGhPckFic3RyYWN0RmlsZSxcbiAgUGF0aE9yRmlsZSxcbiAgUGF0aE9yRm9sZGVyXG59IGZyb20gJy4vRmlsZVN5c3RlbS50cyc7XG5cbmltcG9ydCB7IHJldHJ5V2l0aFRpbWVvdXQgfSBmcm9tICcuLi9Bc3luYy50cyc7XG5pbXBvcnQgeyBwcmludEVycm9yIH0gZnJvbSAnLi4vRXJyb3IudHMnO1xuaW1wb3J0IHsgbm9vcEFzeW5jIH0gZnJvbSAnLi4vRnVuY3Rpb24udHMnO1xuaW1wb3J0IHtcbiAgYmFzZW5hbWUsXG4gIGRpcm5hbWUsXG4gIGV4dG5hbWUsXG4gIGpvaW5cbn0gZnJvbSAnLi4vUGF0aC50cyc7XG5pbXBvcnQgeyByZXNvbHZlVmFsdWUgfSBmcm9tICcuLi9WYWx1ZVByb3ZpZGVyLnRzJztcbmltcG9ydCB7XG4gIGdldEFic3RyYWN0RmlsZU9yTnVsbCxcbiAgZ2V0RmlsZSxcbiAgZ2V0RmlsZU9yTnVsbCxcbiAgZ2V0Rm9sZGVyLFxuICBnZXRGb2xkZXJPck51bGwsXG4gIGdldFBhdGgsXG4gIGlzRmlsZSxcbiAgaXNGb2xkZXIsXG4gIGlzTm90ZVxufSBmcm9tICcuL0ZpbGVTeXN0ZW0udHMnO1xuaW1wb3J0IHsgZ2V0QmFja2xpbmtzRm9yRmlsZVNhZmUgfSBmcm9tICcuL01ldGFkYXRhQ2FjaGUudHMnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHRoZSBgcHJvY2Vzc2AgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc09wdGlvbnMgZXh0ZW5kcyBSZXRyeU9wdGlvbnMge1xuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgZnVuY3Rpb24gd2lsbCB0aHJvdyBhbiBlcnJvciBpZiB0aGUgZmlsZSBpcyBtaXNzaW5nIG9yIGRlbGV0ZWQuXG4gICAqL1xuICBzaG91bGRGYWlsT25NaXNzaW5nRmlsZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29waWVzIGEgZmlsZSBzYWZlbHkgaW4gdGhlIHZhdWx0LlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gb2xkUGF0aE9yRmlsZSAtIFRoZSBvbGQgcGF0aCBvciBmaWxlIHRvIGNvcHkuXG4gKiBAcGFyYW0gbmV3UGF0aCAtIFRoZSBuZXcgcGF0aCB0byBjb3B5IHRoZSBmaWxlIHRvLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIG5ldyBwYXRoIG9mIHRoZSBjb3BpZWQgZmlsZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvcHlTYWZlKGFwcDogQXBwLCBvbGRQYXRoT3JGaWxlOiBQYXRoT3JGaWxlLCBuZXdQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBmaWxlID0gZ2V0RmlsZShhcHAsIG9sZFBhdGhPckZpbGUpO1xuXG4gIGNvbnN0IG5ld0ZvbGRlclBhdGggPSBwYXJlbnRGb2xkZXJQYXRoKG5ld1BhdGgpO1xuICBhd2FpdCBjcmVhdGVGb2xkZXJTYWZlKGFwcCwgbmV3Rm9sZGVyUGF0aCk7XG5cbiAgY29uc3QgbmV3QXZhaWxhYmxlUGF0aCA9IGdldEF2YWlsYWJsZVBhdGgoYXBwLCBuZXdQYXRoKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGFwcC52YXVsdC5jb3B5KGZpbGUsIG5ld0F2YWlsYWJsZVBhdGgpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKCFhd2FpdCBhcHAudmF1bHQuZXhpc3RzKG5ld0F2YWlsYWJsZVBhdGgpKSB7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdBdmFpbGFibGVQYXRoO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBmb2xkZXIgc2FmZWx5IGluIHRoZSBzcGVjaWZpZWQgcGF0aC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZm9sZGVyIHRvIGNyZWF0ZS5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGZvbGRlciB3YXMgY3JlYXRlZC5cbiAqIEB0aHJvd3MgSWYgYW4gZXJyb3Igb2NjdXJzIHdoaWxlIGNyZWF0aW5nIHRoZSBmb2xkZXIgYW5kIGl0IHN0aWxsIGRvZXNuJ3QgZXhpc3QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVGb2xkZXJTYWZlKGFwcDogQXBwLCBwYXRoOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgaWYgKGF3YWl0IGFwcC52YXVsdC5hZGFwdGVyLmV4aXN0cyhwYXRoKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgYXBwLnZhdWx0LmNyZWF0ZUZvbGRlcihwYXRoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmICghYXdhaXQgYXBwLnZhdWx0LmV4aXN0cyhwYXRoKSkge1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgdGVtcG9yYXJ5IGZpbGUgaW4gdGhlIHZhdWx0IHdpdGggcGFyZW50IGZvbGRlcnMgaWYgbmVlZGVkLlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggb2YgdGhlIGZpbGUgdG8gY3JlYXRlLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBmdW5jdGlvbiB0aGF0IGNhbiBiZSBjYWxsZWQgdG8gZGVsZXRlIHRoZSB0ZW1wb3JhcnkgZmlsZSBhbmQgYWxsIGl0cyBjcmVhdGVkIHBhcmVudHMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVUZW1wRmlsZShhcHA6IEFwcCwgcGF0aDogc3RyaW5nKTogUHJvbWlzZTwoKSA9PiBQcm9taXNlPHZvaWQ+PiB7XG4gIGxldCBmaWxlID0gZ2V0RmlsZU9yTnVsbChhcHAsIHBhdGgpO1xuICBpZiAoZmlsZSkge1xuICAgIHJldHVybiBub29wQXN5bmM7XG4gIH1cblxuICBjb25zdCBmb2xkZXJDbGVhbnVwID0gYXdhaXQgY3JlYXRlVGVtcEZvbGRlcihhcHAsIHBhcmVudEZvbGRlclBhdGgocGF0aCkpO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgYXBwLnZhdWx0LmNyZWF0ZShwYXRoLCAnJyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoIWF3YWl0IGFwcC52YXVsdC5leGlzdHMocGF0aCkpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgZmlsZSA9IGdldEZpbGUoYXBwLCBwYXRoKTtcblxuICByZXR1cm4gYXN5bmMgKCkgPT4ge1xuICAgIGlmICghZmlsZS5kZWxldGVkKSB7XG4gICAgICBhd2FpdCBhcHAuZmlsZU1hbmFnZXIudHJhc2hGaWxlKGZpbGUpO1xuICAgIH1cbiAgICBhd2FpdCBmb2xkZXJDbGVhbnVwKCk7XG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHRlbXBvcmFyeSBmb2xkZXIgaW4gdGhlIHZhdWx0IHdpdGggcGFyZW50IGZvbGRlcnMgaWYgbmVlZGVkLlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggb2YgdGhlIGZvbGRlciB0byBjcmVhdGUuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIGNhbGxlZCB0byBkZWxldGUgdGhlIHRlbXBvcmFyeSBmb2xkZXIgYW5kIGFsbCBpdHMgY3JlYXRlZCBwYXJlbnRzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVGVtcEZvbGRlcihhcHA6IEFwcCwgcGF0aDogc3RyaW5nKTogUHJvbWlzZTwoKSA9PiBQcm9taXNlPHZvaWQ+PiB7XG4gIGxldCBmb2xkZXIgPSBnZXRGb2xkZXJPck51bGwoYXBwLCBwYXRoKTtcbiAgaWYgKGZvbGRlcikge1xuICAgIHJldHVybiBub29wQXN5bmM7XG4gIH1cblxuICBjb25zdCBkaXJQYXRoID0gcGFyZW50Rm9sZGVyUGF0aChwYXRoKTtcbiAgYXdhaXQgY3JlYXRlVGVtcEZvbGRlcihhcHAsIGRpclBhdGgpO1xuXG4gIGNvbnN0IGZvbGRlckNsZWFudXAgPSBhd2FpdCBjcmVhdGVUZW1wRm9sZGVyKGFwcCwgcGFyZW50Rm9sZGVyUGF0aChwYXRoKSk7XG5cbiAgYXdhaXQgY3JlYXRlRm9sZGVyU2FmZShhcHAsIHBhdGgpO1xuXG4gIGZvbGRlciA9IGdldEZvbGRlcihhcHAsIHBhdGgpO1xuXG4gIHJldHVybiBhc3luYyAoKSA9PiB7XG4gICAgaWYgKCFmb2xkZXIuZGVsZXRlZCkge1xuICAgICAgYXdhaXQgYXBwLmZpbGVNYW5hZ2VyLnRyYXNoRmlsZShmb2xkZXIpO1xuICAgIH1cbiAgICBhd2FpdCBmb2xkZXJDbGVhbnVwKCk7XG4gIH07XG59XG5cbi8qKlxuICogUmVtb3ZlcyBlbXB0eSBmb2xkZXIgaGllcmFyY2h5IHN0YXJ0aW5nIGZyb20gdGhlIGdpdmVuIGZvbGRlci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZvbGRlciAtIFRoZSBmb2xkZXIgdG8gc3RhcnQgcmVtb3ZpbmcgZW1wdHkgaGllcmFyY2h5IGZyb20uXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBlbXB0eSBoaWVyYXJjaHkgaXMgZGVsZXRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZUVtcHR5Rm9sZGVySGllcmFyY2h5KGFwcDogQXBwLCBwYXRoT3JGb2xkZXI6IG51bGwgfCBQYXRoT3JGb2xkZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgbGV0IGZvbGRlciA9IGdldEZvbGRlck9yTnVsbChhcHAsIHBhdGhPckZvbGRlcik7XG5cbiAgd2hpbGUgKGZvbGRlcikge1xuICAgIGlmICghYXdhaXQgaXNFbXB0eUZvbGRlcihhcHAsIGZvbGRlcikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcGFyZW50ID0gZm9sZGVyLnBhcmVudDtcbiAgICBhd2FpdCBkZWxldGVTYWZlKGFwcCwgZm9sZGVyLnBhdGgpO1xuICAgIGZvbGRlciA9IHBhcmVudDtcbiAgfVxufVxuXG4vKipcbiAqIERlbGV0ZXMgYWJzdHJhY3QgZmlsZSBzYWZlbHkgZnJvbSB0aGUgdmF1bHQuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgYWJzdHJhY3QgZmlsZSB0byBkZWxldGUuXG4gKiBAcGFyYW0gZGVsZXRlZE5vdGVQYXRoIC0gT3B0aW9uYWwuIFRoZSBwYXRoIG9mIHRoZSBub3RlIHRoYXQgdHJpZ2dlcmVkIHRoZSByZW1vdmFsLlxuICogQHBhcmFtIHNob3VsZFJlcG9ydFVzZWRBdHRhY2htZW50cyAtIE9wdGlvbmFsLiBJZiBgdHJ1ZWAsIGEgbm90aWNlIHdpbGwgYmUgc2hvd24gZm9yIGVhY2ggYXR0YWNobWVudCB0aGF0IGlzIHN0aWxsIHVzZWQgYnkgb3RoZXIgbm90ZXMuXG4gKiBAcGFyYW0gc2hvdWxkRGVsZXRlRW1wdHlGb2xkZXJzIC0gT3B0aW9uYWwuIElmIGB0cnVlYCwgZW1wdHkgZm9sZGVycyB3aWxsIGJlIGRlbGV0ZWQuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSByZW1vdmFsIHdhcyBzdWNjZXNzZnVsLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVsZXRlU2FmZShhcHA6IEFwcCwgcGF0aE9yRmlsZTogUGF0aE9yQWJzdHJhY3RGaWxlLCBkZWxldGVkTm90ZVBhdGg/OiBzdHJpbmcsIHNob3VsZFJlcG9ydFVzZWRBdHRhY2htZW50cz86IGJvb2xlYW4sIHNob3VsZERlbGV0ZUVtcHR5Rm9sZGVycz86IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgZmlsZSA9IGdldEFic3RyYWN0RmlsZU9yTnVsbChhcHAsIHBhdGhPckZpbGUpO1xuXG4gIGlmICghZmlsZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGxldCBjYW5EZWxldGUgPSBpc0ZpbGUoZmlsZSkgfHwgKHNob3VsZERlbGV0ZUVtcHR5Rm9sZGVycyA/PyB0cnVlKTtcblxuICBpZiAoaXNGaWxlKGZpbGUpKSB7XG4gICAgY29uc3QgYmFja2xpbmtzID0gYXdhaXQgZ2V0QmFja2xpbmtzRm9yRmlsZVNhZmUoYXBwLCBmaWxlKTtcbiAgICBpZiAoZGVsZXRlZE5vdGVQYXRoKSB7XG4gICAgICBiYWNrbGlua3MuY2xlYXIoZGVsZXRlZE5vdGVQYXRoKTtcbiAgICB9XG4gICAgaWYgKGJhY2tsaW5rcy5jb3VudCgpICE9PSAwKSB7XG4gICAgICBpZiAoc2hvdWxkUmVwb3J0VXNlZEF0dGFjaG1lbnRzKSB7XG4gICAgICAgIG5ldyBOb3RpY2UoYEF0dGFjaG1lbnQgJHtmaWxlLnBhdGh9IGlzIHN0aWxsIHVzZWQgYnkgb3RoZXIgbm90ZXMuIEl0IHdpbGwgbm90IGJlIGRlbGV0ZWQuYCk7XG4gICAgICB9XG4gICAgICBjYW5EZWxldGUgPSBmYWxzZTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNGb2xkZXIoZmlsZSkpIHtcbiAgICBjb25zdCBsaXN0ZWRGaWxlcyA9IGF3YWl0IGxpc3RTYWZlKGFwcCwgZmlsZSk7XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBbLi4ubGlzdGVkRmlsZXMuZmlsZXMsIC4uLmxpc3RlZEZpbGVzLmZvbGRlcnNdKSB7XG4gICAgICBjYW5EZWxldGUgJiY9IGF3YWl0IGRlbGV0ZVNhZmUoYXBwLCBjaGlsZCwgZGVsZXRlZE5vdGVQYXRoLCBzaG91bGRSZXBvcnRVc2VkQXR0YWNobWVudHMpO1xuICAgIH1cblxuICAgIGNhbkRlbGV0ZSAmJj0gYXdhaXQgaXNFbXB0eUZvbGRlcihhcHAsIGZpbGUpO1xuICB9XG5cbiAgaWYgKGNhbkRlbGV0ZSkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBhcHAuZmlsZU1hbmFnZXIudHJhc2hGaWxlKGZpbGUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChhd2FpdCBhcHAudmF1bHQuZXhpc3RzKGZpbGUucGF0aCkpIHtcbiAgICAgICAgcHJpbnRFcnJvcihuZXcgRXJyb3IoYEZhaWxlZCB0byBkZWxldGUgJHtmaWxlLnBhdGh9YCwgeyBjYXVzZTogZSB9KSk7XG4gICAgICAgIGNhbkRlbGV0ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjYW5EZWxldGU7XG59XG5cbi8qKlxuICogR2V0cyBhbiBhdmFpbGFibGUgcGF0aCBmb3IgYSBmaWxlIGluIHRoZSB2YXVsdC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZmlsZSB0byBnZXQgYW4gYXZhaWxhYmxlIHBhdGggZm9yLlxuICogQHJldHVybnMgVGhlIGF2YWlsYWJsZSBwYXRoIGZvciB0aGUgZmlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEF2YWlsYWJsZVBhdGgoYXBwOiBBcHAsIHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGV4dCA9IGV4dG5hbWUocGF0aCk7XG4gIHJldHVybiBhcHAudmF1bHQuZ2V0QXZhaWxhYmxlUGF0aChqb2luKGRpcm5hbWUocGF0aCksIGJhc2VuYW1lKHBhdGgsIGV4dCkpLCBleHQuc2xpY2UoMSkpO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyBhbiBhcnJheSBvZiBNYXJrZG93biBmaWxlcyBmcm9tIHRoZSBhcHAncyB2YXVsdCBhbmQgc29ydHMgdGhlbSBhbHBoYWJldGljYWxseSBieSB0aGVpciBmaWxlIHBhdGguXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBNYXJrZG93biBmaWxlcyBzb3J0ZWQgYnkgZmlsZSBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFya2Rvd25GaWxlc1NvcnRlZChhcHA6IEFwcCk6IFRGaWxlW10ge1xuICByZXR1cm4gYXBwLnZhdWx0LmdldE1hcmtkb3duRmlsZXMoKS5zb3J0KChhLCBiKSA9PiBhLnBhdGgubG9jYWxlQ29tcGFyZShiLnBhdGgpKTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgYW4gYXJyYXkgb2YgYWxsIG5vdGUgZmlsZXMgZnJvbSB0aGUgYXBwJ3MgdmF1bHQgYW5kIHNvcnRzIHRoZW0gYWxwaGFiZXRpY2FsbHkgYnkgdGhlaXIgZmlsZSBwYXRoLlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBhbGwgbm90ZSBmaWxlcyBpbiB0aGUgdmF1bHQgc29ydGVkIGJ5IGZpbGUgcGF0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5vdGVGaWxlc1NvcnRlZChhcHA6IEFwcCk6IFRGaWxlW10ge1xuICByZXR1cm4gYXBwLnZhdWx0LmdldEFsbExvYWRlZEZpbGVzKCkuZmlsdGVyKChmaWxlKSA9PiBpc0ZpbGUoZmlsZSkgJiYgaXNOb3RlKGFwcCwgZmlsZSkpLnNvcnQoKGEsIGIpID0+IGEucGF0aC5sb2NhbGVDb21wYXJlKGIucGF0aCkpIGFzIFRGaWxlW107XG59XG5cbi8qKlxuICogR2V0cyBhIHNhZmUgcmVuYW1lIHBhdGggZm9yIGEgZmlsZS5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIG9sZFBhdGhPckZpbGUgLSBUaGUgb2xkIHBhdGggb3IgZmlsZSB0byByZW5hbWUuXG4gKiBAcGFyYW0gbmV3UGF0aCAtIFRoZSBuZXcgcGF0aCB0byByZW5hbWUgdGhlIGZpbGUgdG8uXG4gKiBAcmV0dXJucyBUaGUgc2FmZSByZW5hbWUgcGF0aCBmb3IgdGhlIGZpbGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTYWZlUmVuYW1lUGF0aChhcHA6IEFwcCwgb2xkUGF0aE9yRmlsZTogUGF0aE9yRmlsZSwgbmV3UGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgb2xkUGF0aCA9IGdldFBhdGgoYXBwLCBvbGRQYXRoT3JGaWxlKTtcblxuICBpZiAoYXBwLnZhdWx0LmFkYXB0ZXIuaW5zZW5zaXRpdmUpIHtcbiAgICBsZXQgZm9sZGVyUGF0aCA9IGRpcm5hbWUobmV3UGF0aCk7XG4gICAgbGV0IG5vbkV4aXN0aW5nUGF0aCA9IGJhc2VuYW1lKG5ld1BhdGgpO1xuICAgIGxldCBmb2xkZXI6IG51bGwgfCBURm9sZGVyID0gbnVsbDtcbiAgICBmb3IgKDsgOykge1xuICAgICAgZm9sZGVyID0gZ2V0Rm9sZGVyT3JOdWxsKGFwcCwgZm9sZGVyUGF0aCwgdHJ1ZSk7XG4gICAgICBpZiAoZm9sZGVyKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgbm9uRXhpc3RpbmdQYXRoID0gam9pbihiYXNlbmFtZShmb2xkZXJQYXRoKSwgbm9uRXhpc3RpbmdQYXRoKTtcbiAgICAgIGZvbGRlclBhdGggPSBkaXJuYW1lKGZvbGRlclBhdGgpO1xuICAgIH1cbiAgICBuZXdQYXRoID0gam9pbihmb2xkZXIuZ2V0UGFyZW50UHJlZml4KCksIG5vbkV4aXN0aW5nUGF0aCk7XG4gIH1cblxuICBpZiAob2xkUGF0aC50b0xvd2VyQ2FzZSgpID09PSBuZXdQYXRoLnRvTG93ZXJDYXNlKCkpIHtcbiAgICByZXR1cm4gbmV3UGF0aDtcbiAgfVxuXG4gIHJldHVybiBnZXRBdmFpbGFibGVQYXRoKGFwcCwgbmV3UGF0aCk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgZm9sZGVyIGlzIGVtcHR5LlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGb2xkZXIgLSBUaGUgcGF0aCBvciBmb2xkZXIgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBmb2xkZXIgaXMgZW1wdHkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpc0VtcHR5Rm9sZGVyKGFwcDogQXBwLCBwYXRoT3JGb2xkZXI6IFBhdGhPckZvbGRlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBsaXN0ZWRGaWxlcyA9IGF3YWl0IGxpc3RTYWZlKGFwcCwgZ2V0UGF0aChhcHAsIHBhdGhPckZvbGRlcikpO1xuICByZXR1cm4gbGlzdGVkRmlsZXMuZmlsZXMubGVuZ3RoID09PSAwICYmIGxpc3RlZEZpbGVzLmZvbGRlcnMubGVuZ3RoID09PSAwO1xufVxuXG4vKipcbiAqIFNhZmVseSBsaXN0cyB0aGUgZmlsZXMgYW5kIGZvbGRlcnMgYXQgdGhlIHNwZWNpZmllZCBwYXRoIGluIHRoZSB2YXVsdC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZvbGRlciAtIFRoZSBwYXRoIG9yIGZvbGRlciB0byBsaXN0LlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBgTGlzdGVkRmlsZXNgIG9iamVjdCBjb250YWluaW5nIHRoZSBsaXN0ZWQgZmlsZXMgYW5kIGZvbGRlcnMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaXN0U2FmZShhcHA6IEFwcCwgcGF0aE9yRm9sZGVyOiBQYXRoT3JGb2xkZXIpOiBQcm9taXNlPExpc3RlZEZpbGVzPiB7XG4gIGNvbnN0IHBhdGggPSBnZXRQYXRoKGFwcCwgcGF0aE9yRm9sZGVyKTtcbiAgY29uc3QgRU1QVFkgPSB7IGZpbGVzOiBbXSwgZm9sZGVyczogW10gfTtcblxuICBpZiAoKGF3YWl0IGFwcC52YXVsdC5hZGFwdGVyLnN0YXQocGF0aCkpPy50eXBlICE9PSAnZm9sZGVyJykge1xuICAgIHJldHVybiBFTVBUWTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGFwcC52YXVsdC5hZGFwdGVyLmxpc3QocGF0aCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoYXdhaXQgYXBwLnZhdWx0LmV4aXN0cyhwYXRoKSkge1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgcmV0dXJuIEVNUFRZO1xuICB9XG59XG5cbi8qKlxuICogUHJvY2Vzc2VzIGEgZmlsZSB3aXRoIHJldHJ5IGxvZ2ljLCB1cGRhdGluZyBpdHMgY29udGVudCBiYXNlZCBvbiBhIHByb3ZpZGVkIHZhbHVlIG9yIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UsIHR5cGljYWxseSB1c2VkIGZvciBhY2Nlc3NpbmcgdGhlIHZhdWx0LlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIHRvIGJlIHByb2Nlc3NlZC4gSXQgY2FuIGJlIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgcGF0aCBvciBhIGZpbGUgb2JqZWN0LlxuICogQHBhcmFtIG5ld0NvbnRlbnRQcm92aWRlciAtIEEgdmFsdWUgcHJvdmlkZXIgdGhhdCByZXR1cm5zIHRoZSBuZXcgY29udGVudCBiYXNlZCBvbiB0aGUgb2xkIGNvbnRlbnQgb2YgdGhlIGZpbGUuXG4gKiBJdCBjYW4gYmUgYSBzdHJpbmcgb3IgYSBmdW5jdGlvbiB0aGF0IHRha2VzIHRoZSBvbGQgY29udGVudCBhcyBhbiBhcmd1bWVudCBhbmQgcmV0dXJucyB0aGUgbmV3IGNvbnRlbnQuXG4gKiBJZiBmdW5jdGlvbiBpcyBwcm92aWRlZCwgaXQgc2hvdWxkIHJldHVybiBgbnVsbGAgaWYgdGhlIHByb2Nlc3Mgc2hvdWxkIGJlIHJldHJpZWQuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgZm9yIHByb2Nlc3NpbmcvcmV0cnlpbmcgdGhlIG9wZXJhdGlvbi5cbiAqXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBwcm9jZXNzIGlzIGNvbXBsZXRlLlxuICpcbiAqIEB0aHJvd3MgV2lsbCB0aHJvdyBhbiBlcnJvciBpZiB0aGUgcHJvY2VzcyBmYWlscyBhZnRlciB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiByZXRyaWVzIG9yIHRpbWVvdXQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlLCBuZXdDb250ZW50UHJvdmlkZXI6IFZhbHVlUHJvdmlkZXI8bnVsbCB8IHN0cmluZywgW3N0cmluZ10+LCBvcHRpb25zOiBQcm9jZXNzT3B0aW9ucyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IERFRkFVTFRfUkVUUllfT1BUSU9OUyA9IHtcbiAgICBzaG91bGRGYWlsT25NaXNzaW5nRmlsZTogdHJ1ZVxuICB9O1xuICBjb25zdCBmdWxsT3B0aW9ucyA9IHsgLi4uREVGQVVMVF9SRVRSWV9PUFRJT05TLCAuLi5vcHRpb25zIH07XG4gIGNvbnN0IHBhdGggPSBnZXRQYXRoKGFwcCwgcGF0aE9yRmlsZSk7XG5cbiAgYXdhaXQgcmV0cnlXaXRoVGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgbGV0IG9sZENvbnRlbnQgPSAnJztcblxuICAgIGxldCBkb2VzRmlsZUV4aXN0ID0gYXdhaXQgaW52b2tlRmlsZUFjdGlvbklmRmlsZUV4aXN0cyhhcHAsIHBhdGgsIGFzeW5jIChmaWxlKSA9PiB7XG4gICAgICBvbGRDb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XG4gICAgfSk7XG5cbiAgICBpZiAoIWRvZXNGaWxlRXhpc3QpIHtcbiAgICAgIGlmIChmdWxsT3B0aW9ucy5zaG91bGRGYWlsT25NaXNzaW5nRmlsZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZpbGUgJyR7cGF0aH0nIG5vdCBmb3VuZGApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3Q29udGVudCA9IGF3YWl0IHJlc29sdmVWYWx1ZShuZXdDb250ZW50UHJvdmlkZXIsIG9sZENvbnRlbnQpO1xuICAgIGlmIChuZXdDb250ZW50ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgbGV0IGlzU3VjY2VzcyA9IHRydWU7XG4gICAgZG9lc0ZpbGVFeGlzdCA9IGF3YWl0IGludm9rZUZpbGVBY3Rpb25JZkZpbGVFeGlzdHMoYXBwLCBwYXRoLCBhc3luYyAoZmlsZSkgPT4ge1xuICAgICAgYXdhaXQgYXBwLnZhdWx0LnByb2Nlc3MoZmlsZSwgKGNvbnRlbnQpID0+IHtcbiAgICAgICAgaWYgKGNvbnRlbnQgIT09IG9sZENvbnRlbnQpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0NvbnRlbnQgaGFzIGNoYW5nZWQgc2luY2UgaXQgd2FzIHJlYWQuIFJldHJ5aW5nLi4uJywge1xuICAgICAgICAgICAgYWN0dWFsQ29udGVudDogY29udGVudCxcbiAgICAgICAgICAgIGV4cGVjdGVkQ29udGVudDogb2xkQ29udGVudCxcbiAgICAgICAgICAgIHBhdGg6IGZpbGUucGF0aFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlzU3VjY2VzcyA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ld0NvbnRlbnQ7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGlmICghZG9lc0ZpbGVFeGlzdCkge1xuICAgICAgaWYgKGZ1bGxPcHRpb25zLnNob3VsZEZhaWxPbk1pc3NpbmdGaWxlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSAnJHtwYXRofScgbm90IGZvdW5kYCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXNTdWNjZXNzO1xuICB9LCBmdWxsT3B0aW9ucyk7XG59XG5cbi8qKlxuICogUmVuYW1lcyBhIGZpbGUgc2FmZWx5IGluIHRoZSB2YXVsdC5cbiAqIElmIHRoZSBuZXcgcGF0aCBhbHJlYWR5IGV4aXN0cywgdGhlIGZpbGUgd2lsbCBiZSByZW5hbWVkIHRvIGFuIGF2YWlsYWJsZSBwYXRoLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gb2xkUGF0aE9yRmlsZSAtIFRoZSBvbGQgcGF0aCBvciBmaWxlIHRvIHJlbmFtZS5cbiAqIEBwYXJhbSBuZXdQYXRoIC0gVGhlIG5ldyBwYXRoIHRvIHJlbmFtZSB0aGUgZmlsZSB0by5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSBuZXcgcGF0aCBvZiB0aGUgZmlsZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmFtZVNhZmUoYXBwOiBBcHAsIG9sZFBhdGhPckZpbGU6IFBhdGhPckZpbGUsIG5ld1BhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IG9sZEZpbGUgPSBnZXRGaWxlKGFwcCwgb2xkUGF0aE9yRmlsZSwgZmFsc2UsIHRydWUpO1xuXG4gIGNvbnN0IG5ld0F2YWlsYWJsZVBhdGggPSBnZXRTYWZlUmVuYW1lUGF0aChhcHAsIG9sZFBhdGhPckZpbGUsIG5ld1BhdGgpO1xuXG4gIGlmIChvbGRGaWxlLnBhdGgudG9Mb3dlckNhc2UoKSA9PT0gbmV3QXZhaWxhYmxlUGF0aC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgaWYgKG9sZEZpbGUucGF0aCAhPT0gbmV3UGF0aCkge1xuICAgICAgYXdhaXQgYXBwLnZhdWx0LnJlbmFtZShvbGRGaWxlLCBuZXdBdmFpbGFibGVQYXRoKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld0F2YWlsYWJsZVBhdGg7XG4gIH1cblxuICBjb25zdCBuZXdGb2xkZXJQYXRoID0gcGFyZW50Rm9sZGVyUGF0aChuZXdBdmFpbGFibGVQYXRoKTtcbiAgYXdhaXQgY3JlYXRlRm9sZGVyU2FmZShhcHAsIG5ld0ZvbGRlclBhdGgpO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgYXBwLnZhdWx0LnJlbmFtZShvbGRGaWxlLCBuZXdBdmFpbGFibGVQYXRoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmICghYXdhaXQgYXBwLnZhdWx0LmV4aXN0cyhuZXdBdmFpbGFibGVQYXRoKSB8fCBhd2FpdCBhcHAudmF1bHQuZXhpc3RzKG9sZEZpbGUucGF0aCkpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld0F2YWlsYWJsZVBhdGg7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGludm9rZUZpbGVBY3Rpb25JZkZpbGVFeGlzdHMoYXBwOiBBcHAsIHBhdGg6IHN0cmluZywgZmlsZUFjdGlvbjogKGZpbGU6IFRGaWxlKSA9PiBQcm9taXNlPHZvaWQ+KTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IGZpbGUgPSBnZXRGaWxlT3JOdWxsKGFwcCwgcGF0aCk7XG4gIGlmICghZmlsZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB0cnkge1xuICAgIGF3YWl0IGZpbGVBY3Rpb24oZmlsZSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zdCBmaWxlID0gZ2V0RmlsZU9yTnVsbChhcHAsIHBhdGgpO1xuICAgIGlmICghZmlsZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aHJvdyBlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBZUEsc0JBSU87QUFDUCw2QkFBaUM7QUFVakMsbUJBQWlDO0FBQ2pDLG1CQUEyQjtBQUMzQixzQkFBMEI7QUFDMUIsa0JBS087QUFDUCwyQkFBNkI7QUFDN0Isd0JBVU87QUFDUCwyQkFBd0M7QUFuRHhDLElBQUksWUFBWSxXQUFXLFNBQVMsS0FBSztBQUFBLEVBQ3ZDLE9BQU8sTUFBSTtBQUFBLEVBQ1gsT0FBTyxDQUFDO0FBQUEsRUFDUixZQUFZO0FBQ2Q7QUFtRUEsZUFBc0IsU0FBUyxLQUFVLGVBQTJCLFNBQWtDO0FBQ3BHLFFBQU0sV0FBTywyQkFBUSxLQUFLLGFBQWE7QUFFdkMsUUFBTSxvQkFBZ0Is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
@@ -41,7 +41,7 @@ var __process = globalThis["process"] ?? {
41
41
  async function publish(isBeta) {
42
42
  (0, import_dotenv.config)();
43
43
  const npmEnv = import_NodeModules.process.env;
44
- await (0, import_Root.execFromRoot)(["npm", "config", "set", "//registry.npmjs.org/:_authToken", npmEnv.NPM_TOKEN ?? ""]);
44
+ await (0, import_Root.execFromRoot)(["npm", "config", "set", `//registry.npmjs.org/:_authToken=${npmEnv.NPM_TOKEN ?? ""}`]);
45
45
  const tag = isBeta ? "beta" : "latest";
46
46
  await (0, import_Root.execFromRoot)(["npm", "publish", "--tag", tag]);
47
47
  }
@@ -49,4 +49,4 @@ async function publish(isBeta) {
49
49
  0 && (module.exports = {
50
50
  publish
51
51
  });
52
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3NjcmlwdHMvTnBtUHVibGlzaC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsidmFyIF9fcHJvY2VzcyA9IGdsb2JhbFRoaXNbJ3Byb2Nlc3MnXSA/PyB7XG4gIFwiY3dkXCI6ICgpPT5cIi9cIixcbiAgXCJlbnZcIjoge30sXG4gIFwicGxhdGZvcm1cIjogXCJhbmRyb2lkXCJcbn07XG4vKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvbiBOcG1QdWJsaXNoXG4gKiBDb250YWlucyB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgTlBNIHB1Ymxpc2guXG4gKi9cblxuaW1wb3J0IHsgY29uZmlnIH0gZnJvbSAnZG90ZW52JztcblxuaW1wb3J0IHsgcHJvY2VzcyB9IGZyb20gJy4vTm9kZU1vZHVsZXMudHMnO1xuaW1wb3J0IHsgZXhlY0Zyb21Sb290IH0gZnJvbSAnLi9Sb290LnRzJztcblxuaW50ZXJmYWNlIE5wbUVudiB7XG4gIE5QTV9UT0tFTjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFB1Ymxpc2ggdG8gTlBNLlxuICogQHBhcmFtIGlzQmV0YSAtIFdoZXRoZXIgdG8gcHVibGlzaCB0byB0aGUgYmV0YSBOUE0gcmVnaXN0cnkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwdWJsaXNoKGlzQmV0YT86IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uZmlnKCk7XG4gIGNvbnN0IG5wbUVudiA9IHByb2Nlc3MuZW52IGFzIFBhcnRpYWw8TnBtRW52PjtcbiAgYXdhaXQgZXhlY0Zyb21Sb290KFsnbnBtJywgJ2NvbmZpZycsICdzZXQnLCAnLy9yZWdpc3RyeS5ucG1qcy5vcmcvOl9hdXRoVG9rZW4nLCBucG1FbnYuTlBNX1RPS0VOID8/ICcnXSk7XG5cbiAgY29uc3QgdGFnID0gaXNCZXRhID8gJ2JldGEnIDogJ2xhdGVzdCc7XG4gIGF3YWl0IGV4ZWNGcm9tUm9vdChbJ25wbScsICdwdWJsaXNoJywgJy0tdGFnJywgdGFnXSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBVUEsb0JBQXVCO0FBRXZCLHlCQUF3QjtBQUN4QixrQkFBNkI7QUFiN0IsSUFBSSxZQUFZLFdBQVcsU0FBUyxLQUFLO0FBQUEsRUFDdkMsT0FBTyxNQUFJO0FBQUEsRUFDWCxPQUFPLENBQUM7QUFBQSxFQUNSLFlBQVk7QUFDZDtBQW1CQSxlQUFzQixRQUFRLFFBQWlDO0FBQzdELDRCQUFPO0FBQ1AsUUFBTSxTQUFTLDJCQUFRO0FBQ3ZCLFlBQU0sMEJBQWEsQ0FBQyxPQUFPLFVBQVUsT0FBTyxvQ0FBb0MsT0FBTyxhQUFhLEVBQUUsQ0FBQztBQUV2RyxRQUFNLE1BQU0sU0FBUyxTQUFTO0FBQzlCLFlBQU0sMEJBQWEsQ0FBQyxPQUFPLFdBQVcsU0FBUyxHQUFHLENBQUM7QUFDckQ7IiwKICAibmFtZXMiOiBbXQp9Cg==
52
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3NjcmlwdHMvTnBtUHVibGlzaC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsidmFyIF9fcHJvY2VzcyA9IGdsb2JhbFRoaXNbJ3Byb2Nlc3MnXSA/PyB7XG4gIFwiY3dkXCI6ICgpPT5cIi9cIixcbiAgXCJlbnZcIjoge30sXG4gIFwicGxhdGZvcm1cIjogXCJhbmRyb2lkXCJcbn07XG4vKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvbiBOcG1QdWJsaXNoXG4gKiBDb250YWlucyB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgTlBNIHB1Ymxpc2guXG4gKi9cblxuaW1wb3J0IHsgY29uZmlnIH0gZnJvbSAnZG90ZW52JztcblxuaW1wb3J0IHsgcHJvY2VzcyB9IGZyb20gJy4vTm9kZU1vZHVsZXMudHMnO1xuaW1wb3J0IHsgZXhlY0Zyb21Sb290IH0gZnJvbSAnLi9Sb290LnRzJztcblxuaW50ZXJmYWNlIE5wbUVudiB7XG4gIE5QTV9UT0tFTjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFB1Ymxpc2ggdG8gTlBNLlxuICogQHBhcmFtIGlzQmV0YSAtIFdoZXRoZXIgdG8gcHVibGlzaCB0byB0aGUgYmV0YSBOUE0gcmVnaXN0cnkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwdWJsaXNoKGlzQmV0YT86IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uZmlnKCk7XG4gIGNvbnN0IG5wbUVudiA9IHByb2Nlc3MuZW52IGFzIFBhcnRpYWw8TnBtRW52PjtcbiAgYXdhaXQgZXhlY0Zyb21Sb290KFsnbnBtJywgJ2NvbmZpZycsICdzZXQnLCBgLy9yZWdpc3RyeS5ucG1qcy5vcmcvOl9hdXRoVG9rZW49JHtucG1FbnYuTlBNX1RPS0VOID8/ICcnfWBdKTtcblxuICBjb25zdCB0YWcgPSBpc0JldGEgPyAnYmV0YScgOiAnbGF0ZXN0JztcbiAgYXdhaXQgZXhlY0Zyb21Sb290KFsnbnBtJywgJ3B1Ymxpc2gnLCAnLS10YWcnLCB0YWddKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFVQSxvQkFBdUI7QUFFdkIseUJBQXdCO0FBQ3hCLGtCQUE2QjtBQWI3QixJQUFJLFlBQVksV0FBVyxTQUFTLEtBQUs7QUFBQSxFQUN2QyxPQUFPLE1BQUk7QUFBQSxFQUNYLE9BQU8sQ0FBQztBQUFBLEVBQ1IsWUFBWTtBQUNkO0FBbUJBLGVBQXNCLFFBQVEsUUFBaUM7QUFDN0QsNEJBQU87QUFDUCxRQUFNLFNBQVMsMkJBQVE7QUFDdkIsWUFBTSwwQkFBYSxDQUFDLE9BQU8sVUFBVSxPQUFPLG9DQUFvQyxPQUFPLGFBQWEsRUFBRSxFQUFFLENBQUM7QUFFekcsUUFBTSxNQUFNLFNBQVMsU0FBUztBQUM5QixZQUFNLDBCQUFhLENBQUMsT0FBTyxXQUFXLFNBQVMsR0FBRyxDQUFDO0FBQ3JEOyIsCiAgIm5hbWVzIjogW10KfQo=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "obsidian-dev-utils",
3
- "version": "8.0.1-beta.3",
3
+ "version": "8.0.1-beta.5",
4
4
  "description": "This is the collection of useful functions that you can use for your Obsidian plugin development",
5
5
  "main": "./dist/lib/index.cjs",
6
6
  "types": "./dist/lib/index.d.ts",