@openelement/core 0.41.0-alpha.1 → 0.41.0-alpha.3

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.
package/src/island.js CHANGED
@@ -1,4 +1,4 @@
1
- import { ERROR_PREFIX } from '@openelement/core';
1
+ import { ERROR_PREFIX } from './index.js';
2
2
  import { formatError } from './errors.js';
3
3
  /**
4
4
  * @openelement/core - defineIsland() wrapper
@@ -339,4 +339,4 @@ export function bindSsrProps(el) {
339
339
  * Exports the `island` function as default for convenience imports.
340
340
  * Tree-shakable: bundlers can eliminate unused named exports from the same module.
341
341
  */ export default defineIsland;
342
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9vcGVuZWxlbWVudC9vcGVuZWxlbWVudC9wYWNrYWdlcy9jb3JlL3NyYy9pc2xhbmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRVJST1JfUFJFRklYIH0gZnJvbSAnQG9wZW5lbGVtZW50L2NvcmUnO1xuaW1wb3J0IHsgZm9ybWF0RXJyb3IgfSBmcm9tICcuL2Vycm9ycy5qcyc7XG4vKipcbiAqIEBvcGVuZWxlbWVudC9jb3JlIC0gZGVmaW5lSXNsYW5kKCkgd3JhcHBlclxuICpcbiAqIHYwLjYuMjogZGVmaW5lSXNsYW5kKCkgd3JhcHMgYW55IEN1c3RvbSBFbGVtZW50IGNsYXNzIHRvIHByb3ZpZGU6XG4gKiAgIC0gQXV0b21hdGljIHJlZ2lzdHJhdGlvbiB2aWEgY3VzdG9tRWxlbWVudHMuZGVmaW5lKClcbiAqICAgLSBIeWRyYXRpb24gc3RyYXRlZ3kgc3VwcG9ydCAobG9hZCwgaWRsZSwgdmlzaWJsZSwgb25seSlcbiAqICAgLSBfX2lzbGFuZCAvIF9fdGFnTmFtZSAvIF9fbGF5ZXIgbWV0YWRhdGEgbWFya2Vyc1xuICogICAtIGRhdGEtc3NyLXByb3BzIHJlc3RvcmF0aW9uIG9uIGNsaWVudCB1cGdyYWRlXG4gKiAgIC0gRFNEIG9wdC1vdXQgdmlhIGBkc2Q6IGZhbHNlYCAoUHVyZSBJc2xhbmQgLyBMYXllciAzKVxuICpcbiAqIEZyYW1ld29yay1hZ25vc3RpYzogd29ya3Mgd2l0aCBMaXQsIHZhbmlsbGEgQ3VzdG9tIEVsZW1lbnRzLFxuICogRkFTVCwgb3IgYW55IFdlYiBDb21wb25lbnQgbGlicmFyeS4gYmluZFNzclByb3BzKCkgc2V0cyBwcm9wc1xuICogZGlyZWN0bHk7IGFkYXB0ZXJzIGhhbmRsZSBmcmFtZXdvcmstc3BlY2lmaWMgdXBkYXRlIHRyaWdnZXJzLlxuICpcbiAqIHYwLjI5LjE6IGRlZmluZUN1c3RvbUVsZW1lbnQgaGVscGVyIGlubGluZWQgZnJvbSBjdXN0b20tZWxlbWVudC50cy5cbiAqL1xuXG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICcuL2xvZ2dlci5qcyc7XG5pbXBvcnQgdHlwZSB7IEh5ZHJhdGlvblN0cmF0ZWd5IH0gZnJvbSAnQG9wZW5lbGVtZW50L3Byb3RvY29sL2ZyYW1ld29yayc7XG5pbXBvcnQgdHlwZSB7IElzbGFuZE1ldGEsIElzbGFuZE9wdGlvbnMgfSBmcm9tICdAb3BlbmVsZW1lbnQvcHJvdG9jb2wvaXNsYW5kJztcbmV4cG9ydCB0eXBlIHsgSXNsYW5kTWV0YSwgSXNsYW5kT3B0aW9ucyB9O1xuXG4vKiogV2Vha1NldCB0byB0cmFjayBlbGVtZW50cyB0aGF0IGhhdmUgYWxyZWFkeSBoYWQgU1NSIHByb3BzIGJvdW5kIChpZGVtcG90ZW50KS4gKi9cbmNvbnN0IHNzclByb3BzQm91bmRTZXQgPSBuZXcgV2Vha1NldDxIVE1MRWxlbWVudD4oKTtcbmNvbnN0IGxvZyA9IGNyZWF0ZUxvZ2dlcignY29yZScpO1xuXG4vKipcbiAqIFNTUi1zYWZlIGN1c3RvbSBlbGVtZW50IHJlZ2lzdHJhdGlvbiBoZWxwZXIuXG4gKiB2MC4yOS4xOiBNZXJnZWQgZnJvbSBjdXN0b20tZWxlbWVudC50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUN1c3RvbUVsZW1lbnQoXG4gIHRhZzogc3RyaW5nLFxuICBjdG9yOiBDdXN0b21FbGVtZW50Q29uc3RydWN0b3IsXG4pOiB2b2lkIHtcbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzLmN1c3RvbUVsZW1lbnRzID09PSAndW5kZWZpbmVkJykgcmV0dXJuO1xuICBpZiAoIWdsb2JhbFRoaXMuY3VzdG9tRWxlbWVudHMuZ2V0KHRhZykpIHtcbiAgICBnbG9iYWxUaGlzLmN1c3RvbUVsZW1lbnRzLmRlZmluZSh0YWcsIGN0b3IpO1xuICB9XG59XG5cbmNvbnN0IFZBTElEX1NUUkFURUdJRVMgPSBuZXcgU2V0PEh5ZHJhdGlvblN0cmF0ZWd5PihbJ2xvYWQnLCAnaWRsZScsICd2aXNpYmxlJywgJ29ubHknXSk7XG5cbi8vIE1vZHVsZS1sZXZlbCBzdG9yZSBvZiBhY3RpdmUgdmlzaWJpbGl0eSBzdHJhdGVneSB0aW1lb3V0IElEcy5cbi8vIFVzZWQgZm9yIHRlc3QgY2xlYW51cCAtIHRlc3RzIGNhbiBjYWxsIF9jbGVhckFsbFZpc2liaWxpdHlUaW1lb3V0cygpXG4vLyB0byBwcmV2ZW50IHRpbWVyIGxlYWtzLlxuY29uc3QgX3Zpc2liaWxpdHlUaW1lb3V0cyA9IG5ldyBTZXQ8UmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4+KCk7XG5cbmNvbnN0IF9pc2xhbmRNZXRhID0gbmV3IFdlYWtNYXA8Q3VzdG9tRWxlbWVudENvbnN0cnVjdG9yLCBJc2xhbmRNZXRhPigpO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXNsYW5kTWV0YShjdG9yOiBDdXN0b21FbGVtZW50Q29uc3RydWN0b3IpOiBJc2xhbmRNZXRhIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIF9pc2xhbmRNZXRhLmdldChjdG9yKTtcbn1cblxuLyoqIENsZWFyIGFsbCBhY3RpdmUgdmlzaWJpbGl0eSBzdHJhdGVneSB0aW1lb3V0cyAoZm9yIHRlc3QgY2xlYW51cCkuICovXG5leHBvcnQgZnVuY3Rpb24gX2NsZWFyQWxsVmlzaWJpbGl0eVRpbWVvdXRzKCk6IHZvaWQge1xuICBmb3IgKGNvbnN0IGlkIG9mIF92aXNpYmlsaXR5VGltZW91dHMpIHtcbiAgICBjbGVhclRpbWVvdXQoaWQpO1xuICB9XG4gIF92aXNpYmlsaXR5VGltZW91dHMuY2xlYXIoKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIG9mIHRoZSBkYXRhLXNzci1wcm9wcyBhdHRyaWJ1dGUgZnJvbSBhIGhvc3QgZWxlbWVudC5cbiAqIFVzZWQgdG8gcmVjb25zdHJ1Y3QgU1NSIHByb3BzIG9uIGNsaWVudCB1cGdyYWRlLlxuICpcbiAqIEBwYXJhbSBlbCAtIFRoZSBjdXN0b20gZWxlbWVudCBob3N0IGVsZW1lbnRcbiAqIEByZXR1cm5zIFBhcnNlZCBwcm9wcyBvYmplY3QsIG9yIG51bGwgaWYgbm8gZGF0YS1zc3ItcHJvcHMgYXR0cmlidXRlXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAqICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAqICAgY29uc3QgcHJvcHMgPSBnZXRTc3JQcm9wcyh0aGlzKTtcbiAqICAgaWYgKHByb3BzKSB7XG4gKiAgICAgdGhpcy5jb3VudCA9IHByb3BzLmNvdW50ID8/IDA7XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3NyUHJvcHMoZWw6IEhUTUxFbGVtZW50KTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsIHtcbiAgY29uc3QgcmF3ID0gZWwuZ2V0QXR0cmlidXRlKCdkYXRhLXNzci1wcm9wcycpO1xuICBpZiAoIXJhdykgcmV0dXJuIG51bGw7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmF3KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfSBjYXRjaCB7XG4gICAgbG9nLndhcm4oYEZhaWxlZCB0byBwYXJzZSBkYXRhLXNzci1wcm9wcyBvbiA8JHtlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCl9PmApO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qKlxuICogQXBwbHkgU1NSIHByb3BzIGZyb20gZGF0YS1zc3ItcHJvcHMgdG8gYSBjb21wb25lbnQgaW5zdGFuY2UuXG4gKiBUaGlzIHJlc3RvcmVzIHNlcnZlci1yZW5kZXJlZCBwcm9wZXJ0eSB2YWx1ZXMgdG8gdGhlXG4gKiBjbGllbnQtc2lkZSBjb21wb25lbnQgb24gdXBncmFkZSwgZW5zdXJpbmcgY29uc2lzdGVuY3kgYmV0d2VlblxuICogU1NSIGFuZCBjbGllbnQgc3RhdGUuXG4gKlxuICogdjAuNi4yOiBGcmFtZXdvcmstYWdub3N0aWMuIE5vIExpdC1zcGVjaWZpYyBkZXRlY3Rpb24uXG4gKiBQcm9wcyBhcmUgc2V0IGRpcmVjdGx5IG9uIHRoZSBpbnN0YW5jZS4gRFNEIGh5ZHJhdGlvbiBhbmQgVk5vZGUgZXZlbnRcbiAqIG1hcmtlcnMgYXJlIGhhbmRsZWQgYXQgdGhlIGNvbXBvbmVudCBsZXZlbCB2aWEgRHNkRWxlbWVudC5cbiAqXG4gKiB2MC4xNC4zOiBQcm90b3R5cGUgcG9sbHV0aW9uIGZpeCAtIGZpbHRlcnMgZGFuZ2Vyb3VzIGtleXNcbiAqIChfX3Byb3RvX18sIGNvbnN0cnVjdG9yLCBwcm90b3R5cGUpIGZyb20gcGFyc2VkIFNTUiBwcm9wcy5cbiAqXG4gKiBAcGFyYW0gZWwgLSBUaGUgdXBncmFkZWQgY3VzdG9tIGVsZW1lbnRcbiAqL1xuXG4vKiogS2V5cyB0aGF0IGNvdWxkIGNhdXNlIHByb3RvdHlwZSBwb2xsdXRpb24gaWYgYXNzaWduZWQgdG8gYW4gb2JqZWN0IGluc3RhbmNlLlxuICogdjAuMTQuNzogRXh0ZW5kZWQgdG8gY292ZXIgYWxsIE9iamVjdC5wcm90b3R5cGUgbWV0aG9kcyB0aGF0IGNvdWxkIGJlXG4gKiBleHBsb2l0ZWQgdmlhIGFyYml0cmFyeSBwcm9wZXJ0eSBhc3NpZ25tZW50IChDLTAzIGZpeCkuXG4gKi9cbmltcG9ydCB7IERBTkdFUk9VU19LRVlTIH0gZnJvbSAnLi9zZWN1cml0eS5qcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kU3NyUHJvcHMoZWw6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gIGNvbnN0IHByb3BzID0gZ2V0U3NyUHJvcHMoZWwpO1xuICBpZiAoIXByb3BzKSByZXR1cm47XG5cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocHJvcHMpKSB7XG4gICAgLy8gdjAuMTQuMzogUHJldmVudCBwcm90b3R5cGUgcG9sbHV0aW9uIC0gc2tpcCBkYW5nZXJvdXMga2V5c1xuICAgIGlmIChEQU5HRVJPVVNfS0VZUy5oYXMoa2V5KSkge1xuICAgICAgbG9nLndhcm4oXG4gICAgICAgIGBTa2lwcGluZyBkYW5nZXJvdXMga2V5IFwiJHtrZXl9XCIgaW4gZGF0YS1zc3ItcHJvcHMgb24gPCR7ZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpfT5gLFxuICAgICAgKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgKGVsIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV0gPSB2YWx1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBTb21lIHByb3BlcnRpZXMgbWF5IGJlIHJlYWQtb25seSAtIHNhZmUgdG8gc2tpcCwgYnV0IGxvZyBmb3IgZGVidWdnYWJpbGl0eVxuICAgICAgbG9nLmRlYnVnKFxuICAgICAgICBgQ2Fubm90IHNldCByZWFkLW9ubHkgcHJvcGVydHkgXCIke2tleX1cIiBvbiA8JHtlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCl9PjogJHtcbiAgICAgICAgICBmb3JtYXRFcnJvcihlKVxuICAgICAgICB9YCxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIEludGVyc2VjdGlvbk9ic2VydmVyLWJhc2VkIHVwZ3JhZGUgc3RyYXRlZ3kuXG4gKiB2MC42JzogVXNlcyBxdWVyeVNlbGVjdG9yQWxsIHRvIG9ic2VydmUgQUxMIGluc3RhbmNlcyBvZiB0aGUgdGFnLFxuICogbm90IGp1c3QgdGhlIGZpcnN0IG9uZS4gUGVyIFdIQVRXRyBJbnRlcnNlY3Rpb25PYnNlcnZlciBzcGVjLlxuICovXG5mdW5jdGlvbiBjcmVhdGVWaXNpYmxlU3RyYXRlZ3koXG4gIHRhZ05hbWU6IHN0cmluZyxcbiAgcmVnaXN0ZXJGbjogKCkgPT4gdm9pZCxcbik6IHZvaWQge1xuICBsZXQgcmVnaXN0ZXJlZCA9IGZhbHNlO1xuICBjb25zdCBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihcbiAgICAoZW50cmllcykgPT4ge1xuICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICAgIGlmIChlbnRyeS5pc0ludGVyc2VjdGluZykge1xuICAgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICBpZiAoIXJlZ2lzdGVyZWQpIHtcbiAgICAgICAgICAgIHJlZ2lzdGVyZWQgPSB0cnVlO1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICBfdmlzaWJpbGl0eVRpbWVvdXRzLmRlbGV0ZSh0aW1lb3V0SWQpO1xuICAgICAgICAgICAgcmVnaXN0ZXJGbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIHsgcm9vdE1hcmdpbjogJzIwMHB4JyB9LCAvLyBTdGFydCBsb2FkaW5nIDIwMHB4IGJlZm9yZSB2aXNpYmxlXG4gICk7XG5cbiAgLy8gV2UgbmVlZCB0byB3YWl0IGZvciBlbGVtZW50cyB0byBiZSBpbiB0aGUgRE9NIGZpcnN0XG4gIGNvbnN0IG9ic2VydmVBbGwgPSAoKSA9PiB7XG4gICAgY29uc3QgZWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHRhZ05hbWUpO1xuICAgIGlmIChlbGVtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICBlbGVtZW50cy5mb3JFYWNoKChlbCkgPT4gb2JzZXJ2ZXIub2JzZXJ2ZShlbCkpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICBjb25zdCBtbyA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChfbXV0YXRpb25zLCBtdXRPYnMpID0+IHtcbiAgICBpZiAob2JzZXJ2ZUFsbCgpKSB7XG4gICAgICBtdXRPYnMuZGlzY29ubmVjdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB2MC4xNC41OiBJZiBlbGVtZW50cyB3ZXJlIHJlbW92ZWQgZnJvbSBET00sIGRpc2Nvbm5lY3QgYWxsIG9ic2VydmVyc1xuICAgICAgY29uc3QgZWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHRhZ05hbWUpO1xuICAgICAgaWYgKGVsZW1lbnRzLmxlbmd0aCA9PT0gMCAmJiAhcmVnaXN0ZXJlZCkge1xuICAgICAgICBtdXRPYnMuZGlzY29ubmVjdCgpO1xuICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICBfdmlzaWJpbGl0eVRpbWVvdXRzLmRlbGV0ZSh0aW1lb3V0SWQpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgLy8gdjAuMTQuMzogVGltZW91dCBndWFyZCAtIGlmIHRoZSB0YXJnZXQgZWxlbWVudCBuZXZlciBhcHBlYXJzXG4gIC8vIChlLmcuLCByb3V0ZSBjaGFuZ2VkIGFmdGVyIGlzbGFuZCB3YXMgcmVnaXN0ZXJlZCksIGRpc2Nvbm5lY3RcbiAgLy8gYm90aCBvYnNlcnZlcnMgYWZ0ZXIgMzAgc2Vjb25kcyB0byBwcmV2ZW50IG1lbW9yeS9wZXJmIGxlYWtzLlxuICBjb25zdCBWSVNJQklMSVRZX1RJTUVPVVQgPSAzMF8wMDA7IC8vIDMwc1xuICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBfdmlzaWJpbGl0eVRpbWVvdXRzLmRlbGV0ZSh0aW1lb3V0SWQpO1xuICAgIGlmICghcmVnaXN0ZXJlZCkge1xuICAgICAgbW8uZGlzY29ubmVjdCgpO1xuICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgbG9nLmRlYnVnKGBWaXNpYmlsaXR5IHN0cmF0ZWd5IGZvciA8JHt0YWdOYW1lfT4gdGltZWQgb3V0IGFmdGVyICR7VklTSUJJTElUWV9USU1FT1VUfW1zYCk7XG4gICAgfVxuICB9LCBWSVNJQklMSVRZX1RJTUVPVVQpO1xuICBfdmlzaWJpbGl0eVRpbWVvdXRzLmFkZCh0aW1lb3V0SWQpO1xuXG4gIC8vIFN0YXJ0IG9ic2VydmluZyBhZnRlciBET00gY29udGVudCBsb2FkZWRcbiAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdsb2FkaW5nJykge1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCAoKSA9PiB7XG4gICAgICBpZiAoIW9ic2VydmVBbGwoKSkge1xuICAgICAgICBtby5vYnNlcnZlKGRvY3VtZW50LmJvZHksIHsgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGlmICghb2JzZXJ2ZUFsbCgpKSB7XG4gICAgICBtby5vYnNlcnZlKGRvY3VtZW50LmJvZHksIHsgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlIH0pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZSBhbiBpZGxlIChyZXF1ZXN0SWRsZUNhbGxiYWNrLWJhc2VkKSBoeWRyYXRpb24gc3RyYXRlZ3kuXG4gKiB2MC42JzogSW1wcm92ZWQgZmFsbGJhY2sgY2hhaW46XG4gKiAgIDEuIHJlcXVlc3RJZGxlQ2FsbGJhY2sgKG9wdGltYWwsIHByb2dyZXNzaXZlKVxuICogICAyLiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgKG5leHQgZnJhbWUsIGdvb2QgZm9yIGludGVyYWN0aW9uKVxuICogICAzLiBzZXRUaW1lb3V0KGZuLCA1MCkgKGZpbmFsIGZhbGxiYWNrLCBzaG9ydGVyIHRoYW4gb2xkIDIwMG1zKVxuICovXG5mdW5jdGlvbiBjcmVhdGVJZGxlU3RyYXRlZ3kocmVnaXN0ZXJGbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICBjb25zdCBnID0gZ2xvYmFsVGhpcyBhcyB7XG4gICAgcmVxdWVzdElkbGVDYWxsYmFjaz86IChmbjogKCkgPT4gdm9pZCkgPT4gdm9pZDtcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWU/OiAoZm46ICgpID0+IHZvaWQpID0+IG51bWJlcjtcbiAgfTtcblxuICBpZiAodHlwZW9mIGcucmVxdWVzdElkbGVDYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGcucmVxdWVzdElkbGVDYWxsYmFjayhyZWdpc3RlckZuKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBnLnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiByZWdpc3RlckZuKCkpO1xuICB9IGVsc2Uge1xuICAgIHNldFRpbWVvdXQocmVnaXN0ZXJGbiwgNTApO1xuICB9XG59XG5cbi8qKlxuICogV3JhcCBhIGNvbXBvbmVudCBjbGFzcyBhcyBhIG9wZW5FbGVtZW50IElzbGFuZC5cbiAqXG4gKiBIYW5kbGVzOlxuICogICAtIEF1dG9tYXRpYyBjdXN0b21FbGVtZW50cy5kZWZpbmUoKSByZWdpc3RyYXRpb25cbiAqICAgLSBTdHJhdGVneS1iYXNlZCB1cGdyYWRlIHRpbWluZ1xuICogICAtIGRhdGEtc3NyLXByb3BzIGJpbmRpbmcgKG9wZW46YmluZClcbiAqICAgLSBfX2lzbGFuZCAvIF9fdGFnTmFtZSBleHBvcnQgbWFya2Vyc1xuICogICAtIF9fbGF5ZXIgbWV0YWRhdGEgKGRzZC1zdGF0aWMsIGRzZC1pbnRlcmFjdGl2ZSwgb3IgcHVyZS1pc2xhbmQpXG4gKiAgIC0gSWRlbXBvdGVudCByZWdpc3RyYXRpb24gKHNhZmUgZm9yIFNTUiB3aXRoIG11bHRpcGxlIHJvdXRlcylcbiAqXG4gKiB2MC42LjI6IEFkZGVkIGBkc2RgIG9wdGlvbi4gV2hlbiBmYWxzZSwgdGhlIGlzbGFuZCBpcyBhIFB1cmUgSXNsYW5kXG4gKiAoTGF5ZXIgMykgLSBubyBEU0QgdGVtcGxhdGUgaXMgZW1pdHRlZCwgZnJhbWV3b3JrIGZ1bGx5IG93bnMgc2hhZG93IHJvb3QuXG4gKlxuICogQHBhcmFtIHRhZ05hbWUgLSBDdXN0b20gZWxlbWVudCB0YWcgbmFtZSAobXVzdCBjb250YWluIGh5cGhlbilcbiAqIEBwYXJhbSBjb21wb25lbnRDbGFzcyAtIEN1c3RvbSBFbGVtZW50IGNvbnN0cnVjdG9yIChmcmFtZXdvcmstYWdub3N0aWMpXG4gKiBAcGFyYW0gb3B0aW9ucyAtIElzbGFuZCBvcHRpb25zXG4gKiBAcmV0dXJucyBUaGUgY29tcG9uZW50IGNsYXNzIChmb3IgY2hhaW5pbmcgLyByZS1leHBvcnQpXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiAvLyBCYXNpYyB1c2FnZSAoRFNEIGVuYWJsZWQgYnkgZGVmYXVsdClcbiAqIGV4cG9ydCBkZWZhdWx0IGRlZmluZUlzbGFuZCgnbXktY291bnRlcicsIE15Q291bnRlcik7XG4gKlxuICogLy8gUHVyZSBJc2xhbmQgLSBubyBEU0QsIGZ1bGwgZnJhbWV3b3JrIHJlYWN0aXZpdHlcbiAqIGV4cG9ydCBkZWZhdWx0IGRlZmluZUlzbGFuZCgnbXktY291bnRlcicsIE15Q291bnRlciwgeyBkc2Q6IGZhbHNlIH0pO1xuICpcbiAqIC8vIFdpdGggdmlzaWJsZSBzdHJhdGVneSAoSW50ZXJzZWN0aW9uT2JzZXJ2ZXIpXG4gKiBleHBvcnQgZGVmYXVsdCBkZWZpbmVJc2xhbmQoJ215LWNvdW50ZXInLCBNeUNvdW50ZXIsIHsgc3RyYXRlZ3k6ICd2aXNpYmxlJyB9KTtcbiAqXG4gKiAvLyBXaXRoIGxvYWQgc3RyYXRlZ3kgKGltbWVkaWF0ZSB1cGdyYWRlKVxuICogZXhwb3J0IGRlZmF1bHQgZGVmaW5lSXNsYW5kKCdteS1jb3VudGVyJywgTXlDb3VudGVyLCB7IHN0cmF0ZWd5OiAnbG9hZCcgfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUlzbGFuZDxUIGV4dGVuZHMgQ3VzdG9tRWxlbWVudENvbnN0cnVjdG9yPihcbiAgdGFnTmFtZTogc3RyaW5nLFxuICBjb21wb25lbnRDbGFzczogVCxcbiAgb3B0aW9uczogSXNsYW5kT3B0aW9ucyA9IHt9LFxuKTogVCB7XG4gIGNvbnN0IHN0cmF0ZWd5ID0gb3B0aW9ucy5zdHJhdGVneSB8fCAnaWRsZSc7XG4gIGlmICghVkFMSURfU1RSQVRFR0lFUy5oYXMoc3RyYXRlZ3kpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYCR7RVJST1JfUFJFRklYfSBJbnZhbGlkIGlzbGFuZCBoeWRyYXRpb24gc3RyYXRlZ3kgXCIke1N0cmluZyhzdHJhdGVneSl9XCIuIGAgK1xuICAgICAgICAnVXNlIG9uZSBvZjogbG9hZCwgaWRsZSwgdmlzaWJsZSwgb25seS4nLFxuICAgICk7XG4gIH1cbiAgY29uc3QgdXNlRHNkID0gc3RyYXRlZ3kgPT09ICdvbmx5JyA/IGZhbHNlIDogb3B0aW9ucy5kc2QgIT09IGZhbHNlOyAvLyBkZWZhdWx0IHRydWVcbiAgY29uc3QgdXNlU3NyID0gc3RyYXRlZ3kgPT09ICdvbmx5JyA/IGZhbHNlIDogb3B0aW9ucy5zc3IgIT09IGZhbHNlOyAvLyBkZWZhdWx0IHRydWVcblxuICAvLyBWYWxpZGF0ZSB0YWcgbmFtZSBwZXIgV0hBVFdHIEN1c3RvbSBFbGVtZW50IG5hbWUgcnVsZXNcbiAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY3VzdG9tLWVsZW1lbnRzLmh0bWwjdmFsaWQtY3VzdG9tLWVsZW1lbnQtbmFtZVxuICBpZiAoIXRhZ05hbWUgfHwgIXRhZ05hbWUuaW5jbHVkZXMoJy0nKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGAke0VSUk9SX1BSRUZJWH0gZGVmaW5lSXNsYW5kKCkgcmVxdWlyZXMgYSBoeXBoZW5hdGVkIHRhZyBuYW1lLCBnb3QgXCIke3RhZ05hbWV9XCIuIGAgK1xuICAgICAgICAnQ3VzdG9tIEVsZW1lbnQgbmFtZXMgbXVzdCBjb250YWluIGEgaHlwaGVuIHBlciB0aGUgSFRNTCBzcGVjLicsXG4gICAgKTtcbiAgfVxuICAvLyBXSEFUV0c6IG11c3Qgc3RhcnQgd2l0aCBsb3dlcmNhc2UgbGV0dGVyLCBvbmx5IGxvd2VyY2FzZS9kaWdpdHMvaHlwaGVucyxcbiAgLy8gbXVzdCBub3Qgc3RhcnQgd2l0aCBhIHJlc2VydmVkIHByZWZpeCwgbm8gdXBwZXJjYXNlXG4gIGlmICghL15bYS16XVthLXowLTldKigtW2EtejAtOV0rKSokLy50ZXN0KHRhZ05hbWUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYCR7RVJST1JfUFJFRklYfSBkZWZpbmVJc2xhbmQoKSB0YWcgbmFtZSBcIiR7dGFnTmFtZX1cIiBpcyBub3QgYSB2YWxpZCBjdXN0b20gZWxlbWVudCBuYW1lLiBgICtcbiAgICAgICAgJ011c3Qgc3RhcnQgd2l0aCBhIGxvd2VyY2FzZSBBU0NJSSBsZXR0ZXIsIGNvbnRhaW4gb25seSBsb3dlcmNhc2UgQVNDSUkgJyArXG4gICAgICAgICdsZXR0ZXJzLCBkaWdpdHMsIGFuZCBoeXBoZW5zLCBhbmQgbm90IHVzZSByZXNlcnZlZCBuYW1lcy4nLFxuICAgICk7XG4gIH1cbiAgLy8gUmVzZXJ2ZWQgbmFtZXMgcGVyIFdIQVRXRyAocGFydGlhbCBsaXN0KVxuICBjb25zdCByZXNlcnZlZFByZWZpeGVzID0gW1xuICAgICdhbm5vdGF0aW9uLScsXG4gICAgJ2NvbG9yLXByb2ZpbGUnLFxuICAgICdmb250LWZhY2UnLFxuICAgICdmb250LWZhY2UtJyxcbiAgICAnbWlzc2luZy1nbHlwaCcsXG4gIF07XG4gIGZvciAoY29uc3QgcHJlZml4IG9mIHJlc2VydmVkUHJlZml4ZXMpIHtcbiAgICBpZiAodGFnTmFtZS5zdGFydHNXaXRoKHByZWZpeCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYCR7RVJST1JfUFJFRklYfSBkZWZpbmVJc2xhbmQoKSB0YWcgbmFtZSBcIiR7dGFnTmFtZX1cIiB1c2VzIGEgcmVzZXJ2ZWQgcHJlZml4IFwiJHtwcmVmaXh9XCIuYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgX2lzbGFuZE1ldGEuc2V0KGNvbXBvbmVudENsYXNzLCB7XG4gICAgaXNJc2xhbmQ6IHRydWUsXG4gICAgdGFnTmFtZSxcbiAgICBsYXllcjogdXNlRHNkID8gJ2RzZC1pbnRlcmFjdGl2ZScgOiAncHVyZS1pc2xhbmQnLFxuICAgIHNzcjogdXNlU3NyLFxuICAgIGRzZDogdXNlRHNkLFxuICB9KTtcblxuICAvLyB2MC42JzogTWl4aW4gcGF0dGVybiBmb3IgY29ubmVjdGVkQ2FsbGJhY2sgLSByZXBsYWNlcyBtb25rZXktcGF0Y2guXG4gIC8vIEluc3RlYWQgb2YgbW9kaWZ5aW5nIHRoZSBwcm90b3R5cGUgZGlyZWN0bHksIHdlIGNyZWF0ZSBhIHdyYXBwZXJcbiAgLy8gdGhhdCBjYWxscyB0aGUgb3JpZ2luYWwgY2FsbGJhY2sgKyBhdXRvLWJpbmRzIFNTUiBwcm9wcy5cbiAgLy8gVGhpcyBpcyBzYWZlciB0aGFuIG1vbmtleS1wYXRjaGluZyBiZWNhdXNlIGl0IGRvZXNuJ3QgaW50ZXJmZXJlXG4gIC8vIHdpdGggTGl0J3Mgb3duIGNvbm5lY3RlZENhbGxiYWNrIGNoYWluLlxuICAvL1xuICAvLyB2MC4xNC4zOiBBZGRlZCBfX3NzclByb3BzQm91bmQgaWRlbXBvdGVuY3kgZ3VhcmQgdG8gcHJldmVudFxuICAvLyBkb3VibGUgYmluZFNzclByb3BzKCkgY2FsbHMgd2hlbiBhIHN1YmNsYXNzIGlzbGFuZCBpbmhlcml0cyBmcm9tIGFcbiAgLy8gcGFyZW50IGlzbGFuZCAoYm90aCByZWdpc3RlcmVkIHZpYSBkZWZpbmVJc2xhbmQoKSkuIFdpdGhvdXQgdGhpcyBndWFyZCxcbiAgLy8gdGhlIHBhcmVudCdzIHdyYXBwZWQgY29ubmVjdGVkQ2FsbGJhY2sgYW5kIHRoZSBzdWJjbGFzcydzIGJvdGhcbiAgLy8gY2FsbCBiaW5kU3NyUHJvcHMgb24gdGhlIHNhbWUgZWxlbWVudC5cbiAgY29uc3Qgb3JpZ0Nvbm5lY3RlZCA9IGNvbXBvbmVudENsYXNzLnByb3RvdHlwZS5jb25uZWN0ZWRDYWxsYmFjaztcbiAgaWYgKCFjb21wb25lbnRDbGFzcy5wcm90b3R5cGUuX19vcGVuSXNsYW5kV3JhcHBlZCkge1xuICAgIGNvbXBvbmVudENsYXNzLnByb3RvdHlwZS5fX29wZW5Jc2xhbmRXcmFwcGVkID0gdHJ1ZTtcbiAgICBjb21wb25lbnRDbGFzcy5wcm90b3R5cGUuY29ubmVjdGVkQ2FsbGJhY2sgPSBmdW5jdGlvbiAodGhpczogSFRNTEVsZW1lbnQpIHtcbiAgICAgIC8vIENhbGwgb3JpZ2luYWwgY29ubmVjdGVkQ2FsbGJhY2sgZmlyc3QgKHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKVxuICAgICAgaWYgKHR5cGVvZiBvcmlnQ29ubmVjdGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG9yaWdDb25uZWN0ZWQuY2FsbCh0aGlzKTtcbiAgICAgIH1cbiAgICAgIC8vIEF1dG8tYmluZCBTU1IgcHJvcHMgb24gdXBncmFkZSAoaWRlbXBvdGVudCAtIG9ubHkgb25jZSBwZXIgZWxlbWVudClcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5oYXNBdHRyaWJ1dGUoJ2RhdGEtc3NyLXByb3BzJykgJiZcbiAgICAgICAgIXNzclByb3BzQm91bmRTZXQuaGFzKHRoaXMpXG4gICAgICApIHtcbiAgICAgICAgc3NyUHJvcHNCb3VuZFNldC5hZGQodGhpcyk7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gYmluZFNzclByb3BzKHRoaXMpKTtcbiAgICAgIH1cbiAgICB9IGFzIHVua25vd24gYXMgdHlwZW9mIGNvbXBvbmVudENsYXNzLnByb3RvdHlwZS5jb25uZWN0ZWRDYWxsYmFjaztcbiAgfVxuXG4gIC8vIERlZmluZSBhIHJlZ2lzdHJhdGlvbiBmdW5jdGlvbiB0aGF0J3MgaWRlbXBvdGVudFxuICBjb25zdCByZWdpc3RlciA9ICgpID0+IHtcbiAgICBjb25zdCByZWdpc3RyeSA9IGdsb2JhbFRoaXMuY3VzdG9tRWxlbWVudHM7XG4gICAgaWYgKCFyZWdpc3RyeSkgcmV0dXJuO1xuICAgIGlmICghcmVnaXN0cnkuZ2V0KHRhZ05hbWUpKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZWdpc3RyeS5kZWZpbmUodGFnTmFtZSwgY29tcG9uZW50Q2xhc3MpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBBbHJlYWR5IGRlZmluZWQgLSBzYWZlIHRvIGlnbm9yZSBpbiBTU1IgY29udGV4dHNcbiAgICAgICAgbG9nLmRlYnVnKFxuICAgICAgICAgIGBjdXN0b21FbGVtZW50cy5kZWZpbmUoXCIke3RhZ05hbWV9XCIpIHNraXBwZWQ6ICR7Zm9ybWF0RXJyb3IoZSl9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLy8gU1NSIGd1YXJkOiBicm93c2VyLXNwZWNpZmljIHN0cmF0ZWd5IHNjaGVkdWxpbmcgaXMgYSBuby1vcCBkdXJpbmcgU1NSLlxuICAvLyBJbnRlcnNlY3Rpb25PYnNlcnZlciwgTXV0YXRpb25PYnNlcnZlciBldGMuIGFyZSBicm93c2VyLW9ubHkgQVBJcy5cbiAgLy8gRHVyaW5nIFNTUiB3ZSBqdXN0IGRlZmluZSB0aGUgY3VzdG9tIGVsZW1lbnQgYW5kIGxldCB0aGUgZ2VuZXJhdGVkXG4gIC8vIGNsaWVudCBlbnRyeSBoYW5kbGUgc3RyYXRlZ3kgZGlzcGF0Y2ggaW4gdGhlIGJyb3dzZXIuXG4gIGNvbnN0IGlzQnJvd3NlciA9IHR5cGVvZiBJbnRlcnNlY3Rpb25PYnNlcnZlciAhPT0gJ3VuZGVmaW5lZCc7XG5cbiAgaWYgKGlzQnJvd3Nlcikge1xuICAgIHN3aXRjaCAoc3RyYXRlZ3kpIHtcbiAgICAgIGNhc2UgJ2xvYWQnOiAvLyBwb255dGFpbDogZmFsbHRocm91Z2gsIGJvdGggJ2xvYWQnIGFuZCAnb25seScgY2FsbCByZWdpc3RlcigpXG4gICAgICBjYXNlICdvbmx5JzpcbiAgICAgICAgcmVnaXN0ZXIoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdpZGxlJzpcbiAgICAgICAgY3JlYXRlSWRsZVN0cmF0ZWd5KHJlZ2lzdGVyKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd2aXNpYmxlJzpcbiAgICAgICAgY3JlYXRlVmlzaWJsZVN0cmF0ZWd5KHRhZ05hbWUsIHJlZ2lzdGVyKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFNTUiBwYXRoOiBkZWZpbmUgdGhlIGVsZW1lbnQgaWRlbXBvdGVudGx5LCBzdHJhdGVneSBydW5zIG9uIGNsaWVudC5cbiAgICByZWdpc3RlcigpO1xuICB9XG5cbiAgcmV0dXJuIGNvbXBvbmVudENsYXNzO1xufVxuXG4vKipcbiAqIEV4cG9ydHMgdGhlIGBpc2xhbmRgIGZ1bmN0aW9uIGFzIGRlZmF1bHQgZm9yIGNvbnZlbmllbmNlIGltcG9ydHMuXG4gKiBUcmVlLXNoYWthYmxlOiBidW5kbGVycyBjYW4gZWxpbWluYXRlIHVudXNlZCBuYW1lZCBleHBvcnRzIGZyb20gdGhlIHNhbWUgbW9kdWxlLlxuICovXG5leHBvcnQgZGVmYXVsdCBkZWZpbmVJc2xhbmQ7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxZQUFZLFFBQVEsb0JBQW9CO0FBQ2pELFNBQVMsV0FBVyxRQUFRLGNBQWM7QUFDMUM7Ozs7Ozs7Ozs7Ozs7OztDQWVDLEdBRUQsU0FBUyxZQUFZLFFBQVEsY0FBYztBQUszQyxrRkFBa0YsR0FDbEYsTUFBTSxtQkFBbUIsSUFBSTtBQUM3QixNQUFNLE1BQU0sYUFBYTtBQUV6Qjs7O0NBR0MsR0FDRCxPQUFPLFNBQVMsb0JBQ2QsR0FBVyxFQUNYLElBQThCO0VBRTlCLElBQUksT0FBTyxXQUFXLGNBQWMsS0FBSyxhQUFhO0VBQ3RELElBQUksQ0FBQyxXQUFXLGNBQWMsQ0FBQyxHQUFHLENBQUMsTUFBTTtJQUN2QyxXQUFXLGNBQWMsQ0FBQyxNQUFNLENBQUMsS0FBSztFQUN4QztBQUNGO0FBRUEsTUFBTSxtQkFBbUIsSUFBSSxJQUF1QjtFQUFDO0VBQVE7RUFBUTtFQUFXO0NBQU87QUFFdkYsZ0VBQWdFO0FBQ2hFLHVFQUF1RTtBQUN2RSwwQkFBMEI7QUFDMUIsTUFBTSxzQkFBc0IsSUFBSTtBQUVoQyxNQUFNLGNBQWMsSUFBSTtBQUV4QixPQUFPLFNBQVMsY0FBYyxJQUE4QjtFQUMxRCxPQUFPLFlBQVksR0FBRyxDQUFDO0FBQ3pCO0FBRUEsc0VBQXNFLEdBQ3RFLE9BQU8sU0FBUztFQUNkLEtBQUssTUFBTSxNQUFNLG9CQUFxQjtJQUNwQyxhQUFhO0VBQ2Y7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
342
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9vcGVuZWxlbWVudC9vcGVuZWxlbWVudC9wYWNrYWdlcy9jb3JlL3NyYy9pc2xhbmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRVJST1JfUFJFRklYIH0gZnJvbSAnLi9pbmRleC5qcyc7XG5pbXBvcnQgeyBmb3JtYXRFcnJvciB9IGZyb20gJy4vZXJyb3JzLmpzJztcbi8qKlxuICogQG9wZW5lbGVtZW50L2NvcmUgLSBkZWZpbmVJc2xhbmQoKSB3cmFwcGVyXG4gKlxuICogdjAuNi4yOiBkZWZpbmVJc2xhbmQoKSB3cmFwcyBhbnkgQ3VzdG9tIEVsZW1lbnQgY2xhc3MgdG8gcHJvdmlkZTpcbiAqICAgLSBBdXRvbWF0aWMgcmVnaXN0cmF0aW9uIHZpYSBjdXN0b21FbGVtZW50cy5kZWZpbmUoKVxuICogICAtIEh5ZHJhdGlvbiBzdHJhdGVneSBzdXBwb3J0IChsb2FkLCBpZGxlLCB2aXNpYmxlLCBvbmx5KVxuICogICAtIF9faXNsYW5kIC8gX190YWdOYW1lIC8gX19sYXllciBtZXRhZGF0YSBtYXJrZXJzXG4gKiAgIC0gZGF0YS1zc3ItcHJvcHMgcmVzdG9yYXRpb24gb24gY2xpZW50IHVwZ3JhZGVcbiAqICAgLSBEU0Qgb3B0LW91dCB2aWEgYGRzZDogZmFsc2VgIChQdXJlIElzbGFuZCAvIExheWVyIDMpXG4gKlxuICogRnJhbWV3b3JrLWFnbm9zdGljOiB3b3JrcyB3aXRoIExpdCwgdmFuaWxsYSBDdXN0b20gRWxlbWVudHMsXG4gKiBGQVNULCBvciBhbnkgV2ViIENvbXBvbmVudCBsaWJyYXJ5LiBiaW5kU3NyUHJvcHMoKSBzZXRzIHByb3BzXG4gKiBkaXJlY3RseTsgYWRhcHRlcnMgaGFuZGxlIGZyYW1ld29yay1zcGVjaWZpYyB1cGRhdGUgdHJpZ2dlcnMuXG4gKlxuICogdjAuMjkuMTogZGVmaW5lQ3VzdG9tRWxlbWVudCBoZWxwZXIgaW5saW5lZCBmcm9tIGN1c3RvbS1lbGVtZW50LnRzLlxuICovXG5cbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyLmpzJztcbmltcG9ydCB0eXBlIHsgSHlkcmF0aW9uU3RyYXRlZ3kgfSBmcm9tICdAb3BlbmVsZW1lbnQvcHJvdG9jb2wvZnJhbWV3b3JrJztcbmltcG9ydCB0eXBlIHsgSXNsYW5kTWV0YSwgSXNsYW5kT3B0aW9ucyB9IGZyb20gJ0BvcGVuZWxlbWVudC9wcm90b2NvbC9pc2xhbmQnO1xuZXhwb3J0IHR5cGUgeyBJc2xhbmRNZXRhLCBJc2xhbmRPcHRpb25zIH07XG5cbi8qKiBXZWFrU2V0IHRvIHRyYWNrIGVsZW1lbnRzIHRoYXQgaGF2ZSBhbHJlYWR5IGhhZCBTU1IgcHJvcHMgYm91bmQgKGlkZW1wb3RlbnQpLiAqL1xuY29uc3Qgc3NyUHJvcHNCb3VuZFNldCA9IG5ldyBXZWFrU2V0PEhUTUxFbGVtZW50PigpO1xuY29uc3QgbG9nID0gY3JlYXRlTG9nZ2VyKCdjb3JlJyk7XG5cbi8qKlxuICogU1NSLXNhZmUgY3VzdG9tIGVsZW1lbnQgcmVnaXN0cmF0aW9uIGhlbHBlci5cbiAqIHYwLjI5LjE6IE1lcmdlZCBmcm9tIGN1c3RvbS1lbGVtZW50LnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lQ3VzdG9tRWxlbWVudChcbiAgdGFnOiBzdHJpbmcsXG4gIGN0b3I6IEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcixcbik6IHZvaWQge1xuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMuY3VzdG9tRWxlbWVudHMgPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG4gIGlmICghZ2xvYmFsVGhpcy5jdXN0b21FbGVtZW50cy5nZXQodGFnKSkge1xuICAgIGdsb2JhbFRoaXMuY3VzdG9tRWxlbWVudHMuZGVmaW5lKHRhZywgY3Rvcik7XG4gIH1cbn1cblxuY29uc3QgVkFMSURfU1RSQVRFR0lFUyA9IG5ldyBTZXQ8SHlkcmF0aW9uU3RyYXRlZ3k+KFsnbG9hZCcsICdpZGxlJywgJ3Zpc2libGUnLCAnb25seSddKTtcblxuLy8gTW9kdWxlLWxldmVsIHN0b3JlIG9mIGFjdGl2ZSB2aXNpYmlsaXR5IHN0cmF0ZWd5IHRpbWVvdXQgSURzLlxuLy8gVXNlZCBmb3IgdGVzdCBjbGVhbnVwIC0gdGVzdHMgY2FuIGNhbGwgX2NsZWFyQWxsVmlzaWJpbGl0eVRpbWVvdXRzKClcbi8vIHRvIHByZXZlbnQgdGltZXIgbGVha3MuXG5jb25zdCBfdmlzaWJpbGl0eVRpbWVvdXRzID0gbmV3IFNldDxSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0Pj4oKTtcblxuY29uc3QgX2lzbGFuZE1ldGEgPSBuZXcgV2Vha01hcDxDdXN0b21FbGVtZW50Q29uc3RydWN0b3IsIElzbGFuZE1ldGE+KCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJc2xhbmRNZXRhKGN0b3I6IEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rvcik6IElzbGFuZE1ldGEgfCB1bmRlZmluZWQge1xuICByZXR1cm4gX2lzbGFuZE1ldGEuZ2V0KGN0b3IpO1xufVxuXG4vKiogQ2xlYXIgYWxsIGFjdGl2ZSB2aXNpYmlsaXR5IHN0cmF0ZWd5IHRpbWVvdXRzIChmb3IgdGVzdCBjbGVhbnVwKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBfY2xlYXJBbGxWaXNpYmlsaXR5VGltZW91dHMoKTogdm9pZCB7XG4gIGZvciAoY29uc3QgaWQgb2YgX3Zpc2liaWxpdHlUaW1lb3V0cykge1xuICAgIGNsZWFyVGltZW91dChpZCk7XG4gIH1cbiAgX3Zpc2liaWxpdHlUaW1lb3V0cy5jbGVhcigpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgdmFsdWUgb2YgdGhlIGRhdGEtc3NyLXByb3BzIGF0dHJpYnV0ZSBmcm9tIGEgaG9zdCBlbGVtZW50LlxuICogVXNlZCB0byByZWNvbnN0cnVjdCBTU1IgcHJvcHMgb24gY2xpZW50IHVwZ3JhZGUuXG4gKlxuICogQHBhcmFtIGVsIC0gVGhlIGN1c3RvbSBlbGVtZW50IGhvc3QgZWxlbWVudFxuICogQHJldHVybnMgUGFyc2VkIHByb3BzIG9iamVjdCwgb3IgbnVsbCBpZiBubyBkYXRhLXNzci1wcm9wcyBhdHRyaWJ1dGVcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICogICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICogICBjb25zdCBwcm9wcyA9IGdldFNzclByb3BzKHRoaXMpO1xuICogICBpZiAocHJvcHMpIHtcbiAqICAgICB0aGlzLmNvdW50ID0gcHJvcHMuY291bnQgPz8gMDtcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTc3JQcm9wcyhlbDogSFRNTEVsZW1lbnQpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwge1xuICBjb25zdCByYXcgPSBlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3NyLXByb3BzJyk7XG4gIGlmICghcmF3KSByZXR1cm4gbnVsbDtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShyYXcpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9IGNhdGNoIHtcbiAgICBsb2cud2FybihgRmFpbGVkIHRvIHBhcnNlIGRhdGEtc3NyLXByb3BzIG9uIDwke2VsLnRhZ05hbWUudG9Mb3dlckNhc2UoKX0+YCk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBBcHBseSBTU1IgcHJvcHMgZnJvbSBkYXRhLXNzci1wcm9wcyB0byBhIGNvbXBvbmVudCBpbnN0YW5jZS5cbiAqIFRoaXMgcmVzdG9yZXMgc2VydmVyLXJlbmRlcmVkIHByb3BlcnR5IHZhbHVlcyB0byB0aGVcbiAqIGNsaWVudC1zaWRlIGNvbXBvbmVudCBvbiB1cGdyYWRlLCBlbnN1cmluZyBjb25zaXN0ZW5jeSBiZXR3ZWVuXG4gKiBTU1IgYW5kIGNsaWVudCBzdGF0ZS5cbiAqXG4gKiB2MC42LjI6IEZyYW1ld29yay1hZ25vc3RpYy4gTm8gTGl0LXNwZWNpZmljIGRldGVjdGlvbi5cbiAqIFByb3BzIGFyZSBzZXQgZGlyZWN0bHkgb24gdGhlIGluc3RhbmNlLiBEU0QgaHlkcmF0aW9uIGFuZCBWTm9kZSBldmVudFxuICogbWFya2VycyBhcmUgaGFuZGxlZCBhdCB0aGUgY29tcG9uZW50IGxldmVsIHZpYSBEc2RFbGVtZW50LlxuICpcbiAqIHYwLjE0LjM6IFByb3RvdHlwZSBwb2xsdXRpb24gZml4IC0gZmlsdGVycyBkYW5nZXJvdXMga2V5c1xuICogKF9fcHJvdG9fXywgY29uc3RydWN0b3IsIHByb3RvdHlwZSkgZnJvbSBwYXJzZWQgU1NSIHByb3BzLlxuICpcbiAqIEBwYXJhbSBlbCAtIFRoZSB1cGdyYWRlZCBjdXN0b20gZWxlbWVudFxuICovXG5cbi8qKiBLZXlzIHRoYXQgY291bGQgY2F1c2UgcHJvdG90eXBlIHBvbGx1dGlvbiBpZiBhc3NpZ25lZCB0byBhbiBvYmplY3QgaW5zdGFuY2UuXG4gKiB2MC4xNC43OiBFeHRlbmRlZCB0byBjb3ZlciBhbGwgT2JqZWN0LnByb3RvdHlwZSBtZXRob2RzIHRoYXQgY291bGQgYmVcbiAqIGV4cGxvaXRlZCB2aWEgYXJiaXRyYXJ5IHByb3BlcnR5IGFzc2lnbm1lbnQgKEMtMDMgZml4KS5cbiAqL1xuaW1wb3J0IHsgREFOR0VST1VTX0tFWVMgfSBmcm9tICcuL3NlY3VyaXR5LmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGJpbmRTc3JQcm9wcyhlbDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgY29uc3QgcHJvcHMgPSBnZXRTc3JQcm9wcyhlbCk7XG4gIGlmICghcHJvcHMpIHJldHVybjtcblxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhwcm9wcykpIHtcbiAgICAvLyB2MC4xNC4zOiBQcmV2ZW50IHByb3RvdHlwZSBwb2xsdXRpb24gLSBza2lwIGRhbmdlcm91cyBrZXlzXG4gICAgaWYgKERBTkdFUk9VU19LRVlTLmhhcyhrZXkpKSB7XG4gICAgICBsb2cud2FybihcbiAgICAgICAgYFNraXBwaW5nIGRhbmdlcm91cyBrZXkgXCIke2tleX1cIiBpbiBkYXRhLXNzci1wcm9wcyBvbiA8JHtlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCl9PmAsXG4gICAgICApO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAoZWwgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XSA9IHZhbHVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIFNvbWUgcHJvcGVydGllcyBtYXkgYmUgcmVhZC1vbmx5IC0gc2FmZSB0byBza2lwLCBidXQgbG9nIGZvciBkZWJ1Z2dhYmlsaXR5XG4gICAgICBsb2cuZGVidWcoXG4gICAgICAgIGBDYW5ub3Qgc2V0IHJlYWQtb25seSBwcm9wZXJ0eSBcIiR7a2V5fVwiIG9uIDwke2VsLnRhZ05hbWUudG9Mb3dlckNhc2UoKX0+OiAke1xuICAgICAgICAgIGZvcm1hdEVycm9yKGUpXG4gICAgICAgIH1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGUgYW4gSW50ZXJzZWN0aW9uT2JzZXJ2ZXItYmFzZWQgdXBncmFkZSBzdHJhdGVneS5cbiAqIHYwLjYnOiBVc2VzIHF1ZXJ5U2VsZWN0b3JBbGwgdG8gb2JzZXJ2ZSBBTEwgaW5zdGFuY2VzIG9mIHRoZSB0YWcsXG4gKiBub3QganVzdCB0aGUgZmlyc3Qgb25lLiBQZXIgV0hBVFdHIEludGVyc2VjdGlvbk9ic2VydmVyIHNwZWMuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVZpc2libGVTdHJhdGVneShcbiAgdGFnTmFtZTogc3RyaW5nLFxuICByZWdpc3RlckZuOiAoKSA9PiB2b2lkLFxuKTogdm9pZCB7XG4gIGxldCByZWdpc3RlcmVkID0gZmFsc2U7XG4gIGNvbnN0IG9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKFxuICAgIChlbnRyaWVzKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgICAgaWYgKGVudHJ5LmlzSW50ZXJzZWN0aW5nKSB7XG4gICAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgICAgIGlmICghcmVnaXN0ZXJlZCkge1xuICAgICAgICAgICAgcmVnaXN0ZXJlZCA9IHRydWU7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgIF92aXNpYmlsaXR5VGltZW91dHMuZGVsZXRlKHRpbWVvdXRJZCk7XG4gICAgICAgICAgICByZWdpc3RlckZuKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgeyByb290TWFyZ2luOiAnMjAwcHgnIH0sIC8vIFN0YXJ0IGxvYWRpbmcgMjAwcHggYmVmb3JlIHZpc2libGVcbiAgKTtcblxuICAvLyBXZSBuZWVkIHRvIHdhaXQgZm9yIGVsZW1lbnRzIHRvIGJlIGluIHRoZSBET00gZmlyc3RcbiAgY29uc3Qgb2JzZXJ2ZUFsbCA9ICgpID0+IHtcbiAgICBjb25zdCBlbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodGFnTmFtZSk7XG4gICAgaWYgKGVsZW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGVsZW1lbnRzLmZvckVhY2goKGVsKSA9PiBvYnNlcnZlci5vYnNlcnZlKGVsKSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIGNvbnN0IG1vID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKF9tdXRhdGlvbnMsIG11dE9icykgPT4ge1xuICAgIGlmIChvYnNlcnZlQWxsKCkpIHtcbiAgICAgIG11dE9icy5kaXNjb25uZWN0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHYwLjE0LjU6IElmIGVsZW1lbnRzIHdlcmUgcmVtb3ZlZCBmcm9tIERPTSwgZGlzY29ubmVjdCBhbGwgb2JzZXJ2ZXJzXG4gICAgICBjb25zdCBlbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodGFnTmFtZSk7XG4gICAgICBpZiAoZWxlbWVudHMubGVuZ3RoID09PSAwICYmICFyZWdpc3RlcmVkKSB7XG4gICAgICAgIG11dE9icy5kaXNjb25uZWN0KCk7XG4gICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgIF92aXNpYmlsaXR5VGltZW91dHMuZGVsZXRlKHRpbWVvdXRJZCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICAvLyB2MC4xNC4zOiBUaW1lb3V0IGd1YXJkIC0gaWYgdGhlIHRhcmdldCBlbGVtZW50IG5ldmVyIGFwcGVhcnNcbiAgLy8gKGUuZy4sIHJvdXRlIGNoYW5nZWQgYWZ0ZXIgaXNsYW5kIHdhcyByZWdpc3RlcmVkKSwgZGlzY29ubmVjdFxuICAvLyBib3RoIG9ic2VydmVycyBhZnRlciAzMCBzZWNvbmRzIHRvIHByZXZlbnQgbWVtb3J5L3BlcmYgbGVha3MuXG4gIGNvbnN0IFZJU0lCSUxJVFlfVElNRU9VVCA9IDMwXzAwMDsgLy8gMzBzXG4gIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIF92aXNpYmlsaXR5VGltZW91dHMuZGVsZXRlKHRpbWVvdXRJZCk7XG4gICAgaWYgKCFyZWdpc3RlcmVkKSB7XG4gICAgICBtby5kaXNjb25uZWN0KCk7XG4gICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICBsb2cuZGVidWcoYFZpc2liaWxpdHkgc3RyYXRlZ3kgZm9yIDwke3RhZ05hbWV9PiB0aW1lZCBvdXQgYWZ0ZXIgJHtWSVNJQklMSVRZX1RJTUVPVVR9bXNgKTtcbiAgICB9XG4gIH0sIFZJU0lCSUxJVFlfVElNRU9VVCk7XG4gIF92aXNpYmlsaXR5VGltZW91dHMuYWRkKHRpbWVvdXRJZCk7XG5cbiAgLy8gU3RhcnQgb2JzZXJ2aW5nIGFmdGVyIERPTSBjb250ZW50IGxvYWRlZFxuICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsICgpID0+IHtcbiAgICAgIGlmICghb2JzZXJ2ZUFsbCgpKSB7XG4gICAgICAgIG1vLm9ic2VydmUoZG9jdW1lbnQuYm9keSwgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKCFvYnNlcnZlQWxsKCkpIHtcbiAgICAgIG1vLm9ic2VydmUoZG9jdW1lbnQuYm9keSwgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGlkbGUgKHJlcXVlc3RJZGxlQ2FsbGJhY2stYmFzZWQpIGh5ZHJhdGlvbiBzdHJhdGVneS5cbiAqIHYwLjYnOiBJbXByb3ZlZCBmYWxsYmFjayBjaGFpbjpcbiAqICAgMS4gcmVxdWVzdElkbGVDYWxsYmFjayAob3B0aW1hbCwgcHJvZ3Jlc3NpdmUpXG4gKiAgIDIuIHJlcXVlc3RBbmltYXRpb25GcmFtZSAobmV4dCBmcmFtZSwgZ29vZCBmb3IgaW50ZXJhY3Rpb24pXG4gKiAgIDMuIHNldFRpbWVvdXQoZm4sIDUwKSAoZmluYWwgZmFsbGJhY2ssIHNob3J0ZXIgdGhhbiBvbGQgMjAwbXMpXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUlkbGVTdHJhdGVneShyZWdpc3RlckZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gIGNvbnN0IGcgPSBnbG9iYWxUaGlzIGFzIHtcbiAgICByZXF1ZXN0SWRsZUNhbGxiYWNrPzogKGZuOiAoKSA9PiB2b2lkKSA9PiB2b2lkO1xuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZT86IChmbjogKCkgPT4gdm9pZCkgPT4gbnVtYmVyO1xuICB9O1xuXG4gIGlmICh0eXBlb2YgZy5yZXF1ZXN0SWRsZUNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZy5yZXF1ZXN0SWRsZUNhbGxiYWNrKHJlZ2lzdGVyRm4pO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBnLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGcucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHJlZ2lzdGVyRm4oKSk7XG4gIH0gZWxzZSB7XG4gICAgc2V0VGltZW91dChyZWdpc3RlckZuLCA1MCk7XG4gIH1cbn1cblxuLyoqXG4gKiBXcmFwIGEgY29tcG9uZW50IGNsYXNzIGFzIGEgb3BlbkVsZW1lbnQgSXNsYW5kLlxuICpcbiAqIEhhbmRsZXM6XG4gKiAgIC0gQXV0b21hdGljIGN1c3RvbUVsZW1lbnRzLmRlZmluZSgpIHJlZ2lzdHJhdGlvblxuICogICAtIFN0cmF0ZWd5LWJhc2VkIHVwZ3JhZGUgdGltaW5nXG4gKiAgIC0gZGF0YS1zc3ItcHJvcHMgYmluZGluZyAob3BlbjpiaW5kKVxuICogICAtIF9faXNsYW5kIC8gX190YWdOYW1lIGV4cG9ydCBtYXJrZXJzXG4gKiAgIC0gX19sYXllciBtZXRhZGF0YSAoZHNkLXN0YXRpYywgZHNkLWludGVyYWN0aXZlLCBvciBwdXJlLWlzbGFuZClcbiAqICAgLSBJZGVtcG90ZW50IHJlZ2lzdHJhdGlvbiAoc2FmZSBmb3IgU1NSIHdpdGggbXVsdGlwbGUgcm91dGVzKVxuICpcbiAqIHYwLjYuMjogQWRkZWQgYGRzZGAgb3B0aW9uLiBXaGVuIGZhbHNlLCB0aGUgaXNsYW5kIGlzIGEgUHVyZSBJc2xhbmRcbiAqIChMYXllciAzKSAtIG5vIERTRCB0ZW1wbGF0ZSBpcyBlbWl0dGVkLCBmcmFtZXdvcmsgZnVsbHkgb3ducyBzaGFkb3cgcm9vdC5cbiAqXG4gKiBAcGFyYW0gdGFnTmFtZSAtIEN1c3RvbSBlbGVtZW50IHRhZyBuYW1lIChtdXN0IGNvbnRhaW4gaHlwaGVuKVxuICogQHBhcmFtIGNvbXBvbmVudENsYXNzIC0gQ3VzdG9tIEVsZW1lbnQgY29uc3RydWN0b3IgKGZyYW1ld29yay1hZ25vc3RpYylcbiAqIEBwYXJhbSBvcHRpb25zIC0gSXNsYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIFRoZSBjb21wb25lbnQgY2xhc3MgKGZvciBjaGFpbmluZyAvIHJlLWV4cG9ydClcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIC8vIEJhc2ljIHVzYWdlIChEU0QgZW5hYmxlZCBieSBkZWZhdWx0KVxuICogZXhwb3J0IGRlZmF1bHQgZGVmaW5lSXNsYW5kKCdteS1jb3VudGVyJywgTXlDb3VudGVyKTtcbiAqXG4gKiAvLyBQdXJlIElzbGFuZCAtIG5vIERTRCwgZnVsbCBmcmFtZXdvcmsgcmVhY3Rpdml0eVxuICogZXhwb3J0IGRlZmF1bHQgZGVmaW5lSXNsYW5kKCdteS1jb3VudGVyJywgTXlDb3VudGVyLCB7IGRzZDogZmFsc2UgfSk7XG4gKlxuICogLy8gV2l0aCB2aXNpYmxlIHN0cmF0ZWd5IChJbnRlcnNlY3Rpb25PYnNlcnZlcilcbiAqIGV4cG9ydCBkZWZhdWx0IGRlZmluZUlzbGFuZCgnbXktY291bnRlcicsIE15Q291bnRlciwgeyBzdHJhdGVneTogJ3Zpc2libGUnIH0pO1xuICpcbiAqIC8vIFdpdGggbG9hZCBzdHJhdGVneSAoaW1tZWRpYXRlIHVwZ3JhZGUpXG4gKiBleHBvcnQgZGVmYXVsdCBkZWZpbmVJc2xhbmQoJ215LWNvdW50ZXInLCBNeUNvdW50ZXIsIHsgc3RyYXRlZ3k6ICdsb2FkJyB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lSXNsYW5kPFQgZXh0ZW5kcyBDdXN0b21FbGVtZW50Q29uc3RydWN0b3I+KFxuICB0YWdOYW1lOiBzdHJpbmcsXG4gIGNvbXBvbmVudENsYXNzOiBULFxuICBvcHRpb25zOiBJc2xhbmRPcHRpb25zID0ge30sXG4pOiBUIHtcbiAgY29uc3Qgc3RyYXRlZ3kgPSBvcHRpb25zLnN0cmF0ZWd5IHx8ICdpZGxlJztcbiAgaWYgKCFWQUxJRF9TVFJBVEVHSUVTLmhhcyhzdHJhdGVneSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgJHtFUlJPUl9QUkVGSVh9IEludmFsaWQgaXNsYW5kIGh5ZHJhdGlvbiBzdHJhdGVneSBcIiR7U3RyaW5nKHN0cmF0ZWd5KX1cIi4gYCArXG4gICAgICAgICdVc2Ugb25lIG9mOiBsb2FkLCBpZGxlLCB2aXNpYmxlLCBvbmx5LicsXG4gICAgKTtcbiAgfVxuICBjb25zdCB1c2VEc2QgPSBzdHJhdGVneSA9PT0gJ29ubHknID8gZmFsc2UgOiBvcHRpb25zLmRzZCAhPT0gZmFsc2U7IC8vIGRlZmF1bHQgdHJ1ZVxuICBjb25zdCB1c2VTc3IgPSBzdHJhdGVneSA9PT0gJ29ubHknID8gZmFsc2UgOiBvcHRpb25zLnNzciAhPT0gZmFsc2U7IC8vIGRlZmF1bHQgdHJ1ZVxuXG4gIC8vIFZhbGlkYXRlIHRhZyBuYW1lIHBlciBXSEFUV0cgQ3VzdG9tIEVsZW1lbnQgbmFtZSBydWxlc1xuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9jdXN0b20tZWxlbWVudHMuaHRtbCN2YWxpZC1jdXN0b20tZWxlbWVudC1uYW1lXG4gIGlmICghdGFnTmFtZSB8fCAhdGFnTmFtZS5pbmNsdWRlcygnLScpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYCR7RVJST1JfUFJFRklYfSBkZWZpbmVJc2xhbmQoKSByZXF1aXJlcyBhIGh5cGhlbmF0ZWQgdGFnIG5hbWUsIGdvdCBcIiR7dGFnTmFtZX1cIi4gYCArXG4gICAgICAgICdDdXN0b20gRWxlbWVudCBuYW1lcyBtdXN0IGNvbnRhaW4gYSBoeXBoZW4gcGVyIHRoZSBIVE1MIHNwZWMuJyxcbiAgICApO1xuICB9XG4gIC8vIFdIQVRXRzogbXVzdCBzdGFydCB3aXRoIGxvd2VyY2FzZSBsZXR0ZXIsIG9ubHkgbG93ZXJjYXNlL2RpZ2l0cy9oeXBoZW5zLFxuICAvLyBtdXN0IG5vdCBzdGFydCB3aXRoIGEgcmVzZXJ2ZWQgcHJlZml4LCBubyB1cHBlcmNhc2VcbiAgaWYgKCEvXlthLXpdW2EtejAtOV0qKC1bYS16MC05XSspKiQvLnRlc3QodGFnTmFtZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgJHtFUlJPUl9QUkVGSVh9IGRlZmluZUlzbGFuZCgpIHRhZyBuYW1lIFwiJHt0YWdOYW1lfVwiIGlzIG5vdCBhIHZhbGlkIGN1c3RvbSBlbGVtZW50IG5hbWUuIGAgK1xuICAgICAgICAnTXVzdCBzdGFydCB3aXRoIGEgbG93ZXJjYXNlIEFTQ0lJIGxldHRlciwgY29udGFpbiBvbmx5IGxvd2VyY2FzZSBBU0NJSSAnICtcbiAgICAgICAgJ2xldHRlcnMsIGRpZ2l0cywgYW5kIGh5cGhlbnMsIGFuZCBub3QgdXNlIHJlc2VydmVkIG5hbWVzLicsXG4gICAgKTtcbiAgfVxuICAvLyBSZXNlcnZlZCBuYW1lcyBwZXIgV0hBVFdHIChwYXJ0aWFsIGxpc3QpXG4gIGNvbnN0IHJlc2VydmVkUHJlZml4ZXMgPSBbXG4gICAgJ2Fubm90YXRpb24tJyxcbiAgICAnY29sb3ItcHJvZmlsZScsXG4gICAgJ2ZvbnQtZmFjZScsXG4gICAgJ2ZvbnQtZmFjZS0nLFxuICAgICdtaXNzaW5nLWdseXBoJyxcbiAgXTtcbiAgZm9yIChjb25zdCBwcmVmaXggb2YgcmVzZXJ2ZWRQcmVmaXhlcykge1xuICAgIGlmICh0YWdOYW1lLnN0YXJ0c1dpdGgocHJlZml4KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgJHtFUlJPUl9QUkVGSVh9IGRlZmluZUlzbGFuZCgpIHRhZyBuYW1lIFwiJHt0YWdOYW1lfVwiIHVzZXMgYSByZXNlcnZlZCBwcmVmaXggXCIke3ByZWZpeH1cIi5gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBfaXNsYW5kTWV0YS5zZXQoY29tcG9uZW50Q2xhc3MsIHtcbiAgICBpc0lzbGFuZDogdHJ1ZSxcbiAgICB0YWdOYW1lLFxuICAgIGxheWVyOiB1c2VEc2QgPyAnZHNkLWludGVyYWN0aXZlJyA6ICdwdXJlLWlzbGFuZCcsXG4gICAgc3NyOiB1c2VTc3IsXG4gICAgZHNkOiB1c2VEc2QsXG4gIH0pO1xuXG4gIC8vIHYwLjYnOiBNaXhpbiBwYXR0ZXJuIGZvciBjb25uZWN0ZWRDYWxsYmFjayAtIHJlcGxhY2VzIG1vbmtleS1wYXRjaC5cbiAgLy8gSW5zdGVhZCBvZiBtb2RpZnlpbmcgdGhlIHByb3RvdHlwZSBkaXJlY3RseSwgd2UgY3JlYXRlIGEgd3JhcHBlclxuICAvLyB0aGF0IGNhbGxzIHRoZSBvcmlnaW5hbCBjYWxsYmFjayArIGF1dG8tYmluZHMgU1NSIHByb3BzLlxuICAvLyBUaGlzIGlzIHNhZmVyIHRoYW4gbW9ua2V5LXBhdGNoaW5nIGJlY2F1c2UgaXQgZG9lc24ndCBpbnRlcmZlcmVcbiAgLy8gd2l0aCBMaXQncyBvd24gY29ubmVjdGVkQ2FsbGJhY2sgY2hhaW4uXG4gIC8vXG4gIC8vIHYwLjE0LjM6IEFkZGVkIF9fc3NyUHJvcHNCb3VuZCBpZGVtcG90ZW5jeSBndWFyZCB0byBwcmV2ZW50XG4gIC8vIGRvdWJsZSBiaW5kU3NyUHJvcHMoKSBjYWxscyB3aGVuIGEgc3ViY2xhc3MgaXNsYW5kIGluaGVyaXRzIGZyb20gYVxuICAvLyBwYXJlbnQgaXNsYW5kIChib3RoIHJlZ2lzdGVyZWQgdmlhIGRlZmluZUlzbGFuZCgpKS4gV2l0aG91dCB0aGlzIGd1YXJkLFxuICAvLyB0aGUgcGFyZW50J3Mgd3JhcHBlZCBjb25uZWN0ZWRDYWxsYmFjayBhbmQgdGhlIHN1YmNsYXNzJ3MgYm90aFxuICAvLyBjYWxsIGJpbmRTc3JQcm9wcyBvbiB0aGUgc2FtZSBlbGVtZW50LlxuICBjb25zdCBvcmlnQ29ubmVjdGVkID0gY29tcG9uZW50Q2xhc3MucHJvdG90eXBlLmNvbm5lY3RlZENhbGxiYWNrO1xuICBpZiAoIWNvbXBvbmVudENsYXNzLnByb3RvdHlwZS5fX29wZW5Jc2xhbmRXcmFwcGVkKSB7XG4gICAgY29tcG9uZW50Q2xhc3MucHJvdG90eXBlLl9fb3BlbklzbGFuZFdyYXBwZWQgPSB0cnVlO1xuICAgIGNvbXBvbmVudENsYXNzLnByb3RvdHlwZS5jb25uZWN0ZWRDYWxsYmFjayA9IGZ1bmN0aW9uICh0aGlzOiBIVE1MRWxlbWVudCkge1xuICAgICAgLy8gQ2FsbCBvcmlnaW5hbCBjb25uZWN0ZWRDYWxsYmFjayBmaXJzdCAoc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2spXG4gICAgICBpZiAodHlwZW9mIG9yaWdDb25uZWN0ZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb3JpZ0Nvbm5lY3RlZC5jYWxsKHRoaXMpO1xuICAgICAgfVxuICAgICAgLy8gQXV0by1iaW5kIFNTUiBwcm9wcyBvbiB1cGdyYWRlIChpZGVtcG90ZW50IC0gb25seSBvbmNlIHBlciBlbGVtZW50KVxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmhhc0F0dHJpYnV0ZSgnZGF0YS1zc3ItcHJvcHMnKSAmJlxuICAgICAgICAhc3NyUHJvcHNCb3VuZFNldC5oYXModGhpcylcbiAgICAgICkge1xuICAgICAgICBzc3JQcm9wc0JvdW5kU2V0LmFkZCh0aGlzKTtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiBiaW5kU3NyUHJvcHModGhpcykpO1xuICAgICAgfVxuICAgIH0gYXMgdW5rbm93biBhcyB0eXBlb2YgY29tcG9uZW50Q2xhc3MucHJvdG90eXBlLmNvbm5lY3RlZENhbGxiYWNrO1xuICB9XG5cbiAgLy8gRGVmaW5lIGEgcmVnaXN0cmF0aW9uIGZ1bmN0aW9uIHRoYXQncyBpZGVtcG90ZW50XG4gIGNvbnN0IHJlZ2lzdGVyID0gKCkgPT4ge1xuICAgIGNvbnN0IHJlZ2lzdHJ5ID0gZ2xvYmFsVGhpcy5jdXN0b21FbGVtZW50cztcbiAgICBpZiAoIXJlZ2lzdHJ5KSByZXR1cm47XG4gICAgaWYgKCFyZWdpc3RyeS5nZXQodGFnTmFtZSkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlZ2lzdHJ5LmRlZmluZSh0YWdOYW1lLCBjb21wb25lbnRDbGFzcyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIEFscmVhZHkgZGVmaW5lZCAtIHNhZmUgdG8gaWdub3JlIGluIFNTUiBjb250ZXh0c1xuICAgICAgICBsb2cuZGVidWcoXG4gICAgICAgICAgYGN1c3RvbUVsZW1lbnRzLmRlZmluZShcIiR7dGFnTmFtZX1cIikgc2tpcHBlZDogJHtmb3JtYXRFcnJvcihlKX1gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvLyBTU1IgZ3VhcmQ6IGJyb3dzZXItc3BlY2lmaWMgc3RyYXRlZ3kgc2NoZWR1bGluZyBpcyBhIG5vLW9wIGR1cmluZyBTU1IuXG4gIC8vIEludGVyc2VjdGlvbk9ic2VydmVyLCBNdXRhdGlvbk9ic2VydmVyIGV0Yy4gYXJlIGJyb3dzZXItb25seSBBUElzLlxuICAvLyBEdXJpbmcgU1NSIHdlIGp1c3QgZGVmaW5lIHRoZSBjdXN0b20gZWxlbWVudCBhbmQgbGV0IHRoZSBnZW5lcmF0ZWRcbiAgLy8gY2xpZW50IGVudHJ5IGhhbmRsZSBzdHJhdGVneSBkaXNwYXRjaCBpbiB0aGUgYnJvd3Nlci5cbiAgY29uc3QgaXNCcm93c2VyID0gdHlwZW9mIEludGVyc2VjdGlvbk9ic2VydmVyICE9PSAndW5kZWZpbmVkJztcblxuICBpZiAoaXNCcm93c2VyKSB7XG4gICAgc3dpdGNoIChzdHJhdGVneSkge1xuICAgICAgY2FzZSAnbG9hZCc6IC8vIHBvbnl0YWlsOiBmYWxsdGhyb3VnaCwgYm90aCAnbG9hZCcgYW5kICdvbmx5JyBjYWxsIHJlZ2lzdGVyKClcbiAgICAgIGNhc2UgJ29ubHknOlxuICAgICAgICByZWdpc3RlcigpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2lkbGUnOlxuICAgICAgICBjcmVhdGVJZGxlU3RyYXRlZ3kocmVnaXN0ZXIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3Zpc2libGUnOlxuICAgICAgICBjcmVhdGVWaXNpYmxlU3RyYXRlZ3kodGFnTmFtZSwgcmVnaXN0ZXIpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gU1NSIHBhdGg6IGRlZmluZSB0aGUgZWxlbWVudCBpZGVtcG90ZW50bHksIHN0cmF0ZWd5IHJ1bnMgb24gY2xpZW50LlxuICAgIHJlZ2lzdGVyKCk7XG4gIH1cblxuICByZXR1cm4gY29tcG9uZW50Q2xhc3M7XG59XG5cbi8qKlxuICogRXhwb3J0cyB0aGUgYGlzbGFuZGAgZnVuY3Rpb24gYXMgZGVmYXVsdCBmb3IgY29udmVuaWVuY2UgaW1wb3J0cy5cbiAqIFRyZWUtc2hha2FibGU6IGJ1bmRsZXJzIGNhbiBlbGltaW5hdGUgdW51c2VkIG5hbWVkIGV4cG9ydHMgZnJvbSB0aGUgc2FtZSBtb2R1bGUuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGRlZmluZUlzbGFuZDtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFTLFlBQVksUUFBUSxhQUFhO0FBQzFDLFNBQVMsV0FBVyxRQUFRLGNBQWM7QUFDMUM7Ozs7Ozs7Ozs7Ozs7OztDQWVDLEdBRUQsU0FBUyxZQUFZLFFBQVEsY0FBYztBQUszQyxrRkFBa0YsR0FDbEYsTUFBTSxtQkFBbUIsSUFBSTtBQUM3QixNQUFNLE1BQU0sYUFBYTtBQUV6Qjs7O0NBR0MsR0FDRCxPQUFPLFNBQVMsb0JBQ2QsR0FBVyxFQUNYLElBQThCO0VBRTlCLElBQUksT0FBTyxXQUFXLGNBQWMsS0FBSyxhQUFhO0VBQ3RELElBQUksQ0FBQyxXQUFXLGNBQWMsQ0FBQyxHQUFHLENBQUMsTUFBTTtJQUN2QyxXQUFXLGNBQWMsQ0FBQyxNQUFNLENBQUMsS0FBSztFQUN4QztBQUNGO0FBRUEsTUFBTSxtQkFBbUIsSUFBSSxJQUF1QjtFQUFDO0VBQVE7RUFBUTtFQUFXO0NBQU87QUFFdkYsZ0VBQWdFO0FBQ2hFLHVFQUF1RTtBQUN2RSwwQkFBMEI7QUFDMUIsTUFBTSxzQkFBc0IsSUFBSTtBQUVoQyxNQUFNLGNBQWMsSUFBSTtBQUV4QixPQUFPLFNBQVMsY0FBYyxJQUE4QjtFQUMxRCxPQUFPLFlBQVksR0FBRyxDQUFDO0FBQ3pCO0FBRUEsc0VBQXNFLEdBQ3RFLE9BQU8sU0FBUztFQUNkLEtBQUssTUFBTSxNQUFNLG9CQUFxQjtJQUNwQyxhQUFhO0VBQ2Y7RUFDQSxvQkFB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
@@ -1,5 +1,5 @@
1
1
  import type { Signal } from '@openelement/protocol/signal';
2
- import type { BindingDescriptor, BindingLifecycle } from "./binding-descriptor.js";
2
+ import type { BindingDescriptor, BindingLifecycle, BindingRenderer } from "./binding-descriptor.js";
3
3
  /**
4
4
  * Collect BindingDescriptor objects from a JSX props object.
5
5
  *
@@ -10,7 +10,7 @@ import type { BindingDescriptor, BindingLifecycle } from "./binding-descriptor.j
10
10
  */ export declare function collectPropBindings(el: Element, props: Record<string, unknown>, signalRegistry?: Map<string, Signal<unknown>>): BindingDescriptor[];
11
11
  /**
12
12
  * Apply a props object to a real DOM element.
13
- */ export declare function applyProps(el: Element, props: Record<string, unknown>, lifecycle?: BindingLifecycle, signalRegistry?: Map<string, Signal<unknown>>): void;
13
+ */ export declare function applyProps(el: Element, props: Record<string, unknown>, lifecycle?: BindingLifecycle, signalRegistry?: Map<string, Signal<unknown>>, renderer?: BindingRenderer): void;
14
14
  /**
15
15
  * Render a VNode tree to a real DOM node.
16
16
  *
@@ -2,8 +2,10 @@
2
2
  * Converts a VNode tree to real DOM nodes for client-side rendering and hydration.
3
3
  *
4
4
  * Design (ADR-0057 / ADR-0109 Phase 2):
5
- * - Props are translated into BindingDescriptor objects
6
- * - Binding descriptors are applied via applyBindingDescriptor()
5
+ * - Props are translated into BindingDescriptor objects.
6
+ * - Special tags emit binding descriptors instead of creating effects directly.
7
+ * - Binding descriptors are committed via commitBindings() after the DOM tree is
8
+ * created so anchors are already in the document before reactive effects run.
7
9
  * - Signal names are resolved through an optional signalRegistry and emitted as
8
10
  * data-signal markers for DSD hydration consistency.
9
11
  *
@@ -11,12 +13,12 @@
11
13
  */ import { isComponentCtor, isComponentFn, isVNode } from './vnode.js';
12
14
  import { FOR_TAG, Fragment, HTML_TAG, SHOW_TAG } from './jsx-runtime.js';
13
15
  import { isSignalLike, unwrapSignalLike } from '@openelement/signal';
14
- import { eventTypeFromProp } from './event-hydration.js';
16
+ import { eventTypeFromProp } from './event-marker.js';
15
17
  import { trustRenderHtml } from './security.js';
16
- import { effect } from '@openelement/signal';
17
18
  import { createLogger } from './logger.js';
18
19
  import { formatError } from './errors.js';
19
- import { applyBindingDescriptor } from './binding-activation.js';
20
+ import { commitBindings } from './binding-activation.js';
21
+ import { bindAttr, bindConditional, bindEvent, bindHtml, bindList, bindRef, bindStaticAttr, bindStaticBoolean, bindStaticProp, bindStaticStyle, bindText } from './binding-descriptor.js';
20
22
  import { DATA_SIGNAL } from '@openelement/protocol/hydration-markers';
21
23
  const SVG_NS = 'http://www.w3.org/2000/svg';
22
24
  /**
@@ -105,35 +107,21 @@ function createElementForTag(tag) {
105
107
  if (key === 'children' || key === 'key' || key === 'trustedHtml') continue;
106
108
  // ref callback
107
109
  if (key === 'ref' && typeof value === 'function') {
108
- descriptors.push({
109
- kind: 'ref',
110
- el,
111
- callback: value
112
- });
110
+ descriptors.push(bindRef(el, value));
113
111
  continue;
114
112
  }
115
113
  // Event handlers
116
114
  if (key.startsWith('on') && typeof value === 'function') {
117
115
  const eventType = eventTypeFromProp(key);
118
116
  if (!eventType) continue;
119
- descriptors.push({
120
- kind: 'event',
121
- el,
122
- type: eventType,
123
- handler: value
124
- });
117
+ descriptors.push(bindEvent(el, eventType, value));
125
118
  continue;
126
119
  }
127
120
  if (value == null) continue;
128
121
  // innerHTML maps to signal-html / static text injection.
129
122
  if (key === 'innerHTML') {
130
123
  if (isSignalLike(value)) {
131
- descriptors.push({
132
- kind: 'signal-html',
133
- el,
134
- signal: value,
135
- trusted: trustedHtml
136
- });
124
+ descriptors.push(bindHtml(el, value, trustedHtml));
137
125
  } else {
138
126
  const resolved = String(unwrapSignalLike(value));
139
127
  if (trustedHtml) {
@@ -152,28 +140,11 @@ function createElementForTag(tag) {
152
140
  if (name) {
153
141
  el.setAttribute(DATA_SIGNAL, name);
154
142
  }
155
- if (key === 'className' || key === 'class') {
156
- // ponytail: CSR signal-class only supports a single toggle class today;
157
- // the string-prop branch below is unreachable because this block is gated
158
- // by isSignalLike. Use explicit data-signal-class markers for arbitrary
159
- // class names; revisit when signal-class accepts a class-name accessor.
160
- const className = attrName === 'class' ? '' : attrName;
161
- descriptors.push({
162
- kind: 'signal-class',
163
- el,
164
- className,
165
- signal: sig
166
- });
167
- } else {
168
- descriptors.push({
169
- kind: 'signal-attr',
170
- el,
171
- attrNames: [
172
- attrName
173
- ],
174
- signal: sig
175
- });
176
- }
143
+ // Use signal-attr for all signal-driven props; signal-class toggling
144
+ // (single class) is reserved for explicit data-signal-class markers.
145
+ descriptors.push(bindAttr(el, [
146
+ attrName
147
+ ], sig));
177
148
  continue;
178
149
  }
179
150
  const resolved = unwrapSignalLike(value);
@@ -182,50 +153,28 @@ function createElementForTag(tag) {
182
153
  for (const [sk, sv] of Object.entries(resolved)){
183
154
  styleObj[sk] = unwrapSignalLike(sv);
184
155
  }
185
- descriptors.push({
186
- kind: 'static-style',
187
- el,
188
- value: styleObj
189
- });
156
+ descriptors.push(bindStaticStyle(el, styleObj));
190
157
  continue;
191
158
  }
192
159
  // DOM properties that are NOT HTML attributes
193
160
  if (key === 'textContent') {
194
- descriptors.push({
195
- kind: 'static-prop',
196
- el,
197
- propName: 'textContent',
198
- value: resolved
199
- });
161
+ descriptors.push(bindStaticProp(el, 'textContent', resolved));
200
162
  continue;
201
163
  }
202
164
  const attrName = key === 'className' ? 'class' : key === 'htmlFor' ? 'for' : key;
203
165
  if (typeof resolved === 'boolean') {
204
- descriptors.push({
205
- kind: 'static-boolean',
206
- el,
207
- attrName,
208
- value: resolved
209
- });
166
+ descriptors.push(bindStaticBoolean(el, attrName, resolved));
210
167
  continue;
211
168
  }
212
- descriptors.push({
213
- kind: 'static-attr',
214
- el,
215
- key,
216
- attrName,
217
- value: resolved
218
- });
169
+ descriptors.push(bindStaticAttr(el, attrName, resolved));
219
170
  }
220
171
  return descriptors;
221
172
  }
222
173
  /**
223
174
  * Apply a props object to a real DOM element.
224
- */ export function applyProps(el, props, lifecycle, signalRegistry) {
175
+ */ export function applyProps(el, props, lifecycle, signalRegistry, renderer) {
225
176
  const descriptors = collectPropBindings(el, props, signalRegistry);
226
- for (const desc of descriptors){
227
- applyBindingDescriptor(desc, lifecycle ?? {});
228
- }
177
+ commitBindings(descriptors, lifecycle ?? {}, renderer);
229
178
  }
230
179
  /**
231
180
  * Render a VNode tree to a real DOM node.
@@ -242,6 +191,15 @@ function createElementForTag(tag) {
242
191
  if (disposers && !lifecycle?.disposers) {
243
192
  fullLifecycle.disposers = disposers;
244
193
  }
194
+ const renderer = {
195
+ render: (child, childLifecycle)=>renderToDom(child, childLifecycle, undefined, signalRegistry)
196
+ };
197
+ const descriptors = [];
198
+ const root = renderNode(node, fullLifecycle, signalRegistry, descriptors);
199
+ commitBindings(descriptors, fullLifecycle, renderer);
200
+ return root;
201
+ }
202
+ function renderNode(node, lifecycle, signalRegistry, descriptors) {
245
203
  if (node == null || node === false) {
246
204
  return document.createTextNode('');
247
205
  }
@@ -255,11 +213,7 @@ function createElementForTag(tag) {
255
213
  if (isSignalLike(node)) {
256
214
  const sig = node;
257
215
  const textNode = document.createTextNode(String(sig.value ?? ''));
258
- applyBindingDescriptor({
259
- kind: 'signal-text',
260
- el: textNode,
261
- signal: sig
262
- }, fullLifecycle);
216
+ descriptors.push(bindText(textNode, sig));
263
217
  return textNode;
264
218
  }
265
219
  if (!isVNode(node)) {
@@ -269,7 +223,7 @@ function createElementForTag(tag) {
269
223
  if (tag === Fragment || typeof tag === 'symbol' && String(tag) === 'Symbol(openelement.fragment)') {
270
224
  const frag = document.createDocumentFragment();
271
225
  for (const child of children){
272
- frag.appendChild(renderToDom(child, fullLifecycle, undefined, signalRegistry));
226
+ frag.appendChild(renderNode(child, lifecycle, signalRegistry, descriptors));
273
227
  }
274
228
  return frag;
275
229
  }
@@ -290,55 +244,14 @@ function createElementForTag(tag) {
290
244
  const truthy = ch[0];
291
245
  const falsy = ch[1];
292
246
  const marker = document.createComment('show');
293
- let anchor = null;
294
- const swap = ()=>{
295
- const show = Boolean(isSignalLike(whenSig) ? whenSig.value : whenSig);
296
- const target = show ? truthy : falsy;
297
- if (anchor) anchor.remove();
298
- if (target != null) {
299
- anchor = renderToDom(target, fullLifecycle, undefined, signalRegistry);
300
- marker.parentNode?.insertBefore(anchor, marker.nextSibling);
301
- } else {
302
- anchor = null;
303
- }
304
- };
305
- const dispose = effect(()=>swap());
306
- if (fullLifecycle.signal) {
307
- fullLifecycle.signal.addEventListener('abort', dispose, {
308
- once: true
309
- });
310
- }
311
- fullLifecycle.disposers?.add(dispose);
312
- swap();
247
+ descriptors.push(bindConditional(marker, whenSig, ()=>truthy, ()=>falsy));
313
248
  return marker;
314
249
  }
315
250
  if (tag === FOR_TAG || tag === 'fore') {
316
251
  const eachSig = props?.each;
317
252
  const renderFn = children[0] ?? (()=>document.createTextNode(''));
318
253
  const marker = document.createComment('for');
319
- let anchors = [];
320
- const reconcile = ()=>{
321
- const items = isSignalLike(eachSig) ? eachSig.value : eachSig;
322
- if (!Array.isArray(items)) return;
323
- // Remove old
324
- for (const a of anchors)a.remove();
325
- anchors = [];
326
- // Render new
327
- for(let i = 0; i < items.length; i++){
328
- const vn = renderFn(items[i], i);
329
- const dom = renderToDom(vn, fullLifecycle, undefined, signalRegistry);
330
- marker.parentNode?.insertBefore(dom, marker.nextSibling);
331
- anchors.push(dom);
332
- }
333
- };
334
- const dispose = effect(()=>reconcile());
335
- if (fullLifecycle.signal) {
336
- fullLifecycle.signal.addEventListener('abort', dispose, {
337
- once: true
338
- });
339
- }
340
- fullLifecycle.disposers?.add(dispose);
341
- reconcile();
254
+ descriptors.push(bindList(marker, eachSig, renderFn));
342
255
  return marker;
343
256
  }
344
257
  if (isComponentCtor(tag)) {
@@ -348,7 +261,7 @@ function createElementForTag(tag) {
348
261
  instance[k] = v;
349
262
  }
350
263
  const result = instance.render();
351
- return renderToDom(result, fullLifecycle, undefined, signalRegistry);
264
+ return renderNode(result, lifecycle, signalRegistry, descriptors);
352
265
  } catch (err) {
353
266
  createLogger('dom-render').error(`renderToDom() failed for <${String(tag)}>: ${formatError(err)}`);
354
267
  return document.createTextNode('');
@@ -360,17 +273,18 @@ function createElementForTag(tag) {
360
273
  ...props,
361
274
  children
362
275
  });
363
- return renderToDom(result, fullLifecycle, undefined, signalRegistry);
276
+ return renderNode(result, lifecycle, signalRegistry, descriptors);
364
277
  } catch (err) {
365
278
  createLogger('dom-render').error(`renderToDom() failed for <${String(tag)}>: ${formatError(err)}`);
366
279
  return document.createTextNode('');
367
280
  }
368
281
  }
369
282
  const el = createElementForTag(tag);
370
- applyProps(el, props, fullLifecycle, signalRegistry);
283
+ const propDescriptors = collectPropBindings(el, props, signalRegistry);
284
+ descriptors.push(...propDescriptors);
371
285
  for (const child of children){
372
- el.appendChild(renderToDom(child, fullLifecycle, undefined, signalRegistry));
286
+ el.appendChild(renderNode(child, lifecycle, signalRegistry, descriptors));
373
287
  }
374
288
  return el;
375
289
  }
376
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9vcGVuZWxlbWVudC9vcGVuZWxlbWVudC9wYWNrYWdlcy9jb3JlL3NyYy9qc3gtcmVuZGVyLWRvbS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbnZlcnRzIGEgVk5vZGUgdHJlZSB0byByZWFsIERPTSBub2RlcyBmb3IgY2xpZW50LXNpZGUgcmVuZGVyaW5nIGFuZCBoeWRyYXRpb24uXG4gKlxuICogRGVzaWduIChBRFItMDA1NyAvIEFEUi0wMTA5IFBoYXNlIDIpOlxuICogLSBQcm9wcyBhcmUgdHJhbnNsYXRlZCBpbnRvIEJpbmRpbmdEZXNjcmlwdG9yIG9iamVjdHNcbiAqIC0gQmluZGluZyBkZXNjcmlwdG9ycyBhcmUgYXBwbGllZCB2aWEgYXBwbHlCaW5kaW5nRGVzY3JpcHRvcigpXG4gKiAtIFNpZ25hbCBuYW1lcyBhcmUgcmVzb2x2ZWQgdGhyb3VnaCBhbiBvcHRpb25hbCBzaWduYWxSZWdpc3RyeSBhbmQgZW1pdHRlZCBhc1xuICogICBkYXRhLXNpZ25hbCBtYXJrZXJzIGZvciBEU0QgaHlkcmF0aW9uIGNvbnNpc3RlbmN5LlxuICpcbiAqIEBtb2R1bGUgQG9wZW5lbGVtZW50L2NvcmUvanN4LXJlbmRlci1kb21cbiAqL1xuXG5pbXBvcnQgeyBpc0NvbXBvbmVudEN0b3IsIGlzQ29tcG9uZW50Rm4sIGlzVk5vZGUgfSBmcm9tICcuL3Zub2RlLmpzJztcbmltcG9ydCB0eXBlIHsgUmVuZGVyRm4sIFZOb2RlIH0gZnJvbSAnQG9wZW5lbGVtZW50L3Byb3RvY29sL3Zub2RlJztcbmltcG9ydCB0eXBlIHsgU2lnbmFsIH0gZnJvbSAnQG9wZW5lbGVtZW50L3Byb3RvY29sL3NpZ25hbCc7XG5pbXBvcnQgeyBGT1JfVEFHLCBGcmFnbWVudCwgSFRNTF9UQUcsIFNIT1dfVEFHIH0gZnJvbSAnLi9qc3gtcnVudGltZS5qcyc7XG5pbXBvcnQgeyBpc1NpZ25hbExpa2UsIHVud3JhcFNpZ25hbExpa2UgfSBmcm9tICdAb3BlbmVsZW1lbnQvc2lnbmFsJztcbmltcG9ydCB7IGV2ZW50VHlwZUZyb21Qcm9wIH0gZnJvbSAnLi9ldmVudC1oeWRyYXRpb24uanMnO1xuaW1wb3J0IHsgdHJ1c3RSZW5kZXJIdG1sIH0gZnJvbSAnLi9zZWN1cml0eS5qcyc7XG5pbXBvcnQgeyBlZmZlY3QgfSBmcm9tICdAb3BlbmVsZW1lbnQvc2lnbmFsJztcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyLmpzJztcbmltcG9ydCB7IGZvcm1hdEVycm9yIH0gZnJvbSAnLi9lcnJvcnMuanMnO1xuaW1wb3J0IHsgYXBwbHlCaW5kaW5nRGVzY3JpcHRvciB9IGZyb20gJy4vYmluZGluZy1hY3RpdmF0aW9uLmpzJztcbmltcG9ydCB0eXBlIHsgQmluZGluZ0Rlc2NyaXB0b3IsIEJpbmRpbmdMaWZlY3ljbGUgfSBmcm9tICcuL2JpbmRpbmctZGVzY3JpcHRvci5qcyc7XG5pbXBvcnQgeyBEQVRBX1NJR05BTCB9IGZyb20gJ0BvcGVuZWxlbWVudC9wcm90b2NvbC9oeWRyYXRpb24tbWFya2Vycyc7XG5cbmNvbnN0IFNWR19OUyA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc7XG5cbi8qKlxuICogRWxlbWVudHMgdGhhdCBNVVNUIGJlIGNyZWF0ZWQgd2l0aCBjcmVhdGVFbGVtZW50TlMoU1ZHX05TLCB0YWcpIHRvIHJlbmRlclxuICogY29ycmVjdGx5LiBVc2luZyBjcmVhdGVFbGVtZW50KCkgcHV0cyB0aGVtIGluIHRoZSBIVE1MIG5hbWVzcGFjZSB3aGVyZVxuICogYnJvd3NlcnMgd29uJ3QgcmVuZGVyIHRoZW0gYXMgU1ZHIHNoYXBlcy5cbiAqL1xuY29uc3QgU1ZHX1RBR1MgPSBuZXcgU2V0KFtcbiAgJ3N2ZycsXG4gICdjaXJjbGUnLFxuICAnZWxsaXBzZScsXG4gICdsaW5lJyxcbiAgJ3BhdGgnLFxuICAncG9seWdvbicsXG4gICdwb2x5bGluZScsXG4gICdyZWN0JyxcbiAgJ2cnLFxuICAnZGVmcycsXG4gICdjbGlwUGF0aCcsXG4gICdtYXNrJyxcbiAgJ3BhdHRlcm4nLFxuICAndXNlJyxcbiAgJ3N5bWJvbCcsXG4gICdpbWFnZScsXG4gICd0ZXh0JyxcbiAgJ3RzcGFuJyxcbiAgJ3RleHRQYXRoJyxcbiAgJ2xpbmVhckdyYWRpZW50JyxcbiAgJ3JhZGlhbEdyYWRpZW50JyxcbiAgJ3N0b3AnLFxuICAnYW5pbWF0ZScsXG4gICdhbmltYXRlVHJhbnNmb3JtJyxcbiAgJ2FuaW1hdGVNb3Rpb24nLFxuICAnZm9yZWlnbk9iamVjdCcsXG4gICd0aXRsZScsXG4gICdkZXNjJyxcbiAgJ2ZlQmxlbmQnLFxuICAnZmVDb2xvck1hdHJpeCcsXG4gICdmZUNvbXBvbmVudFRyYW5zZmVyJyxcbiAgJ2ZlQ29tcG9zaXRlJyxcbiAgJ2ZlQ29udm9sdmVNYXRyaXgnLFxuICAnZmVEaWZmdXNlTGlnaHRpbmcnLFxuICAnZmVEaXNwbGFjZW1lbnRNYXAnLFxuICAnZmVEaXN0YW50TGlnaHQnLFxuICAnZmVEcm9wU2hhZG93JyxcbiAgJ2ZlRmxvb2QnLFxuICAnZmVGdW5jQScsXG4gICdmZUZ1bmNCJyxcbiAgJ2ZlRnVuY0cnLFxuICAnZmVGdW5jUicsXG4gICdmZUdhdXNzaWFuQmx1cicsXG4gICdmZUltYWdlJyxcbiAgJ2ZlTWVyZ2UnLFxuICAnZmVNZXJnZU5vZGUnLFxuICAnZmVNb3JwaG9sb2d5JyxcbiAgJ2ZlT2Zmc2V0JyxcbiAgJ2ZlUG9pbnRMaWdodCcsXG4gICdmZVNwZWN1bGFyTGlnaHRpbmcnLFxuICAnZmVTcG90TGlnaHQnLFxuICAnZmVUaWxlJyxcbiAgJ2ZlVHVyYnVsZW5jZScsXG5dKTtcblxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudEZvclRhZyh0YWc6IHN0cmluZyk6IEVsZW1lbnQge1xuICBpZiAoU1ZHX1RBR1MuaGFzKHRhZykpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgdGFnKTtcbiAgfVxuICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpO1xufVxuXG4vKiogUmVzb2x2ZSBhIHNpZ25hbCBvYmplY3QgdG8gaXRzIHJlZ2lzdGVyZWQgbmFtZSwgaWYgYW55LiAqL1xuZnVuY3Rpb24gc2lnbmFsTmFtZUZvcihcbiAgdmFsdWU6IHVua25vd24sXG4gIHNpZ25hbFJlZ2lzdHJ5PzogTWFwPHN0cmluZywgU2lnbmFsPHVua25vd24+Pixcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghc2lnbmFsUmVnaXN0cnkgfHwgIWlzU2lnbmFsTGlrZSh2YWx1ZSkpIHJldHVybiB1bmRlZmluZWQ7XG4gIGZvciAoY29uc3QgW25hbWUsIHNpZ10gb2Ygc2lnbmFsUmVnaXN0cnkuZW50cmllcygpKSB7XG4gICAgaWYgKHNpZyA9PT0gdmFsdWUpIHJldHVybiBuYW1lO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ29sbGVjdCBCaW5kaW5nRGVzY3JpcHRvciBvYmplY3RzIGZyb20gYSBKU1ggcHJvcHMgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBlbCAtIFRhcmdldCBlbGVtZW50IHRoZSBkZXNjcmlwdG9ycyB3aWxsIGFwcGx5IHRvLlxuICogQHBhcmFtIHByb3BzIC0gVk5vZGUgcHJvcHMuXG4gKiBAcGFyYW0gc2lnbmFsUmVnaXN0cnkgLSBPcHRpb25hbCByZWdpc3RyeSB1c2VkIHRvIG5hbWUgc2lnbmFscyBmb3IgaHlkcmF0aW9uIG1hcmtlcnMuXG4gKiBAcmV0dXJucyBBcnJheSBvZiBiaW5kaW5nIGRlc2NyaXB0b3JzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdFByb3BCaW5kaW5ncyhcbiAgZWw6IEVsZW1lbnQsXG4gIHByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgc2lnbmFsUmVnaXN0cnk/OiBNYXA8c3RyaW5nLCBTaWduYWw8dW5rbm93bj4+LFxuKTogQmluZGluZ0Rlc2NyaXB0b3JbXSB7XG4gIGNvbnN0IGRlc2NyaXB0b3JzOiBCaW5kaW5nRGVzY3JpcHRvcltdID0gW107XG4gIGNvbnN0IHRydXN0ZWRIdG1sID0gcHJvcHMudHJ1c3RlZEh0bWwgPT09IHRydWU7XG5cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocHJvcHMpKSB7XG4gICAgaWYgKGtleSA9PT0gJ2NoaWxkcmVuJyB8fCBrZXkgPT09ICdrZXknIHx8IGtleSA9PT0gJ3RydXN0ZWRIdG1sJykgY29udGludWU7XG5cbiAgICAvLyByZWYgY2FsbGJhY2tcbiAgICBpZiAoa2V5ID09PSAncmVmJyAmJiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGRlc2NyaXB0b3JzLnB1c2goeyBraW5kOiAncmVmJywgZWwsIGNhbGxiYWNrOiB2YWx1ZSBhcyAoZWw6IEVsZW1lbnQpID0+IHZvaWQgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBFdmVudCBoYW5kbGVyc1xuICAgIGlmIChrZXkuc3RhcnRzV2l0aCgnb24nKSAmJiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IGV2ZW50VHlwZSA9IGV2ZW50VHlwZUZyb21Qcm9wKGtleSk7XG4gICAgICBpZiAoIWV2ZW50VHlwZSkgY29udGludWU7XG4gICAgICBkZXNjcmlwdG9ycy5wdXNoKHsga2luZDogJ2V2ZW50JywgZWwsIHR5cGU6IGV2ZW50VHlwZSwgaGFuZGxlcjogdmFsdWUgYXMgRXZlbnRMaXN0ZW5lciB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSA9PSBudWxsKSBjb250aW51ZTtcblxuICAgIC8vIGlubmVySFRNTCBtYXBzIHRvIHNpZ25hbC1odG1sIC8gc3RhdGljIHRleHQgaW5qZWN0aW9uLlxuICAgIGlmIChrZXkgPT09ICdpbm5lckhUTUwnKSB7XG4gICAgICBpZiAoaXNTaWduYWxMaWtlKHZhbHVlKSkge1xuICAgICAgICBkZXNjcmlwdG9ycy5wdXNoKHtcbiAgICAgICAgICBraW5kOiAnc2lnbmFsLWh0bWwnLFxuICAgICAgICAgIGVsLFxuICAgICAgICAgIHNpZ25hbDogdmFsdWUgYXMgU2lnbmFsPHVua25vd24+LFxuICAgICAgICAgIHRydXN0ZWQ6IHRydXN0ZWRIdG1sLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkID0gU3RyaW5nKHVud3JhcFNpZ25hbExpa2UodmFsdWUpKTtcbiAgICAgICAgaWYgKHRydXN0ZWRIdG1sKSB7XG4gICAgICAgICAgKGVsIGFzIEhUTUxFbGVtZW50KS5pbm5lckhUTUwgPSB0cnVzdFJlbmRlckh0bWwocmVzb2x2ZWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIChlbCBhcyBIVE1MRWxlbWVudCkudGV4dENvbnRlbnQgPSByZXNvbHZlZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gU2lnbmFsIGJpbmRpbmcg4oCUIGVtaXQgZGF0YS1zaWduYWwgbWFya2VyIHdoZW4gd2UgY2FuIHJlc29sdmUgYSBuYW1lLlxuICAgIGlmIChpc1NpZ25hbExpa2UodmFsdWUpKSB7XG4gICAgICBjb25zdCBzaWcgPSB2YWx1ZSBhcyBTaWduYWw8dW5rbm93bj47XG4gICAgICBjb25zdCBuYW1lID0gc2lnbmFsTmFtZUZvcihzaWcsIHNpZ25hbFJlZ2lzdHJ5KTtcbiAgICAgIGNvbnN0IGF0dHJOYW1lID0ga2V5ID09PSAnY2xhc3NOYW1lJyA/ICdjbGFzcycgOiBrZXkgPT09ICdodG1sRm9yJyA/ICdmb3InIDoga2V5O1xuXG4gICAgICBpZiAobmFtZSkge1xuICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoREFUQV9TSUdOQUwsIG5hbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoa2V5ID09PSAnY2xhc3NOYW1lJyB8fCBrZXkgPT09ICdjbGFzcycpIHtcbiAgICAgICAgLy8gcG9ueXRhaWw6IENTUiBzaWduYWwtY2xhc3Mgb25seSBzdXBwb3J0cyBhIHNpbmdsZSB0b2dnbGUgY2xhc3MgdG9kYXk7XG4gICAgICAgIC8vIHRoZSBzdHJpbmctcHJvcCBicmFuY2ggYmVsb3cgaXMgdW5yZWFjaGFibGUgYmVjYXVzZSB0aGlzIGJsb2NrIGlzIGdhdGVkXG4gICAgICAgIC8vIGJ5IGlzU2lnbmFsTGlrZS4gVXNlIGV4cGxpY2l0IGRhdGEtc2lnbmFsLWNsYXNzIG1hcmtlcnMgZm9yIGFyYml0cmFyeVxuICAgICAgICAvLyBjbGFzcyBuYW1lczsgcmV2aXNpdCB3aGVuIHNpZ25hbC1jbGFzcyBhY2NlcHRzIGEgY2xhc3MtbmFtZSBhY2Nlc3Nvci5cbiAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gYXR0ck5hbWUgPT09ICdjbGFzcycgPyAnJyA6IGF0dHJOYW1lO1xuICAgICAgICBkZXNjcmlwdG9ycy5wdXNoKHtcbiAgICAgICAgICBraW5kOiAnc2lnbmFsLWNsYXNzJyxcbiAgICAgICAgICBlbCxcbiAgICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgICAgc2lnbmFsOiBzaWcsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVzY3JpcHRvcnMucHVzaCh7IGtpbmQ6ICdzaWduYWwtYXR0cicsIGVsLCBhdHRyTmFtZXM6IFthdHRyTmFtZV0sIHNpZ25hbDogc2lnIH0pO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzb2x2ZWQgPSB1bndyYXBTaWduYWxMaWtlKHZhbHVlKTtcblxuICAgIGlmIChrZXkgPT09ICdzdHlsZScgJiYgdHlwZW9mIHJlc29sdmVkID09PSAnb2JqZWN0JyAmJiByZXNvbHZlZCAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3R5bGVPYmo6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj4gPSB7fTtcbiAgICAgIGZvciAoY29uc3QgW3NrLCBzdl0gb2YgT2JqZWN0LmVudHJpZXMocmVzb2x2ZWQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pKSB7XG4gICAgICAgIHN0eWxlT2JqW3NrXSA9IHVud3JhcFNpZ25hbExpa2Uoc3YpIGFzIHN0cmluZyB8IG51bWJlcjtcbiAgICAgIH1cbiAgICAgIGRlc2NyaXB0b3JzLnB1c2goeyBraW5kOiAnc3RhdGljLXN0eWxlJywgZWwsIHZhbHVlOiBzdHlsZU9iaiB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIERPTSBwcm9wZXJ0aWVzIHRoYXQgYXJlIE5PVCBIVE1MIGF0dHJpYnV0ZXNcbiAgICBpZiAoa2V5ID09PSAndGV4dENvbnRlbnQnKSB7XG4gICAgICBkZXNjcmlwdG9ycy5wdXNoKHsga2luZDogJ3N0YXRpYy1wcm9wJywgZWwsIHByb3BOYW1lOiAndGV4dENvbnRlbnQnLCB2YWx1ZTogcmVzb2x2ZWQgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBhdHRyTmFtZSA9IGtleSA9PT0gJ2NsYXNzTmFtZScgPyAnY2xhc3MnIDoga2V5ID09PSAnaHRtbEZvcicgPyAnZm9yJyA6IGtleTtcblxuICAgIGlmICh0eXBlb2YgcmVzb2x2ZWQgPT09ICdib29sZWFuJykge1xuICAgICAgZGVzY3JpcHRvcnMucHVzaCh7IGtpbmQ6ICdzdGF0aWMtYm9vbGVhbicsIGVsLCBhdHRyTmFtZSwgdmFsdWU6IHJlc29sdmVkIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgZGVzY3JpcHRvcnMucHVzaCh7IGtpbmQ6ICdzdGF0aWMtYXR0cicsIGVsLCBrZXksIGF0dHJOYW1lLCB2YWx1ZTogcmVzb2x2ZWQgfSk7XG4gIH1cblxuICByZXR1cm4gZGVzY3JpcHRvcnM7XG59XG5cbi8qKlxuICogQXBwbHkgYSBwcm9wcyBvYmplY3QgdG8gYSByZWFsIERPTSBlbGVtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlQcm9wcyhcbiAgZWw6IEVsZW1lbnQsXG4gIHByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgbGlmZWN5Y2xlPzogQmluZGluZ0xpZmVjeWNsZSxcbiAgc2lnbmFsUmVnaXN0cnk/OiBNYXA8c3RyaW5nLCBTaWduYWw8dW5rbm93bj4+LFxuKTogdm9pZCB7XG4gIGNvbnN0IGRlc2NyaXB0b3JzID0gY29sbGVjdFByb3BCaW5kaW5ncyhlbCwgcHJvcHMsIHNpZ25hbFJlZ2lzdHJ5KTtcbiAgZm9yIChjb25zdCBkZXNjIG9mIGRlc2NyaXB0b3JzKSB7XG4gICAgYXBwbHlCaW5kaW5nRGVzY3JpcHRvcihkZXNjLCBsaWZlY3ljbGUgPz8ge30pO1xuICB9XG59XG5cbi8qKlxuICogUmVuZGVyIGEgVk5vZGUgdHJlZSB0byBhIHJlYWwgRE9NIG5vZGUuXG4gKlxuICogQHBhcmFtIG5vZGUgLSBWTm9kZSwgc3RyaW5nLCBudW1iZXIsIG9yIG51bGwvdW5kZWZpbmVkXG4gKiBAcGFyYW0gbGlmZWN5Y2xlIC0gT3B0aW9uYWwgQmluZGluZ0xpZmVjeWNsZSBmb3IgYXV0b21hdGljIGNsZWFudXBcbiAqIEBwYXJhbSBkaXNwb3NlcnMgLSBPcHRpb25hbCBTZXQgdG8gY29sbGVjdCBlZmZlY3QgZGlzcG9zZSBmbnMgKGJhY2t3YXJkIGNvbXBhdClcbiAqIEBwYXJhbSBzaWduYWxSZWdpc3RyeSAtIE9wdGlvbmFsIHJlZ2lzdHJ5IHVzZWQgdG8gcmVzb2x2ZSBzaWduYWwgbmFtZXMgZm9yIG1hcmtlcnNcbiAqIEByZXR1cm5zIERPTSBOb2RlIChFbGVtZW50LCBUZXh0LCBvciBEb2N1bWVudEZyYWdtZW50KVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyVG9Eb20oXG4gIG5vZGU6IHVua25vd24sXG4gIGxpZmVjeWNsZT86IEJpbmRpbmdMaWZlY3ljbGUsXG4gIGRpc3Bvc2Vycz86IFNldDwoKSA9PiB2b2lkPixcbiAgc2lnbmFsUmVnaXN0cnk/OiBNYXA8c3RyaW5nLCBTaWduYWw8dW5rbm93bj4+LFxuKTogTm9kZSB7XG4gIGNvbnN0IGZ1bGxMaWZlY3ljbGU6IEJpbmRpbmdMaWZlY3ljbGUgPSBsaWZlY3ljbGUgPz8gKGRpc3Bvc2VycyA/IHsgZGlzcG9zZXJzIH0gOiB7fSk7XG4gIGlmIChkaXNwb3NlcnMgJiYgIWxpZmVjeWNsZT8uZGlzcG9zZXJzKSB7XG4gICAgZnVsbExpZmVjeWNsZS5kaXNwb3NlcnMgPSBkaXNwb3NlcnM7XG4gIH1cblxuICBpZiAobm9kZSA9PSBudWxsIHx8IG5vZGUgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgfVxuICBpZiAodHlwZW9mIG5vZGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG5vZGUpO1xuICB9XG4gIGlmICh0eXBlb2Ygbm9kZSA9PT0gJ251bWJlcicgfHwgdHlwZW9mIG5vZGUgPT09ICdib29sZWFuJykge1xuICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShTdHJpbmcobm9kZSkpO1xuICB9XG5cbiAgLy8gU2lnbmFsLXRvLVRleHROb2RlIHJlYWN0aXZlIGJpbmRpbmcgKEFEUi0wMDU4LzAwNTkpLlxuICBpZiAoaXNTaWduYWxMaWtlKG5vZGUpKSB7XG4gICAgY29uc3Qgc2lnID0gbm9kZSBhcyBTaWduYWw8dW5rbm93bj47XG4gICAgY29uc3QgdGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShTdHJpbmcoc2lnLnZhbHVlID8/ICcnKSk7XG4gICAgYXBwbHlCaW5kaW5nRGVzY3JpcHRvcih7IGtpbmQ6ICdzaWduYWwtdGV4dCcsIGVsOiB0ZXh0Tm9kZSwgc2lnbmFsOiBzaWcgfSwgZnVsbExpZmVjeWNsZSk7XG4gICAgcmV0dXJuIHRleHROb2RlO1xuICB9XG5cbiAgaWYgKCFpc1ZOb2RlKG5vZGUpKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFN0cmluZyhub2RlKSk7XG4gIH1cblxuICBjb25zdCB7IHRhZywgcHJvcHMsIGNoaWxkcmVuIH0gPSBub2RlIGFzIFZOb2RlO1xuXG4gIGlmIChcbiAgICB0YWcgPT09IEZyYWdtZW50IHx8ICh0eXBlb2YgdGFnID09PSAnc3ltYm9sJyAmJiBTdHJpbmcodGFnKSA9PT0gJ1N5bWJvbChvcGVuZWxlbWVudC5mcmFnbWVudCknKVxuICApIHtcbiAgICBjb25zdCBmcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgIGZyYWcuYXBwZW5kQ2hpbGQocmVuZGVyVG9Eb20oY2hpbGQsIGZ1bGxMaWZlY3ljbGUsIHVuZGVmaW5lZCwgc2lnbmFsUmVnaXN0cnkpKTtcbiAgICB9XG4gICAgcmV0dXJuIGZyYWc7XG4gIH1cblxuICAvLyBUcnVzdGVkIEhUTUwg4oCUIHBhcnNlIHJhdyBIVE1MIHN0cmluZyBpbnRvIHJlYWwgRE9NIG5vZGVzXG4gIGlmICh0YWcgPT09IEhUTUxfVEFHKSB7XG4gICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgY29uc3QgaHRtbCA9IHByb3BzPy5odG1sID8/ICcnO1xuICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSB0cnVzdFJlbmRlckh0bWwoU3RyaW5nKGh0bWwpKTtcbiAgICBjb25zdCBmcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgIHdoaWxlIChjb250YWluZXIuZmlyc3RDaGlsZCkge1xuICAgICAgZnJhZy5hcHBlbmRDaGlsZChjb250YWluZXIuZmlyc3RDaGlsZCk7XG4gICAgfVxuICAgIHJldHVybiBmcmFnO1xuICB9XG5cbiAgaWYgKHRhZyA9PT0gU0hPV19UQUcgfHwgdGFnID09PSAnc2hvdycpIHtcbiAgICBjb25zdCB3aGVuU2lnID0gcHJvcHM/LndoZW47XG4gICAgY29uc3QgY2ggPSBjaGlsZHJlbiBhcyBWTm9kZVtdO1xuICAgIGNvbnN0IHRydXRoeTogdW5rbm93biA9IGNoWzBdO1xuICAgIGNvbnN0IGZhbHN5OiB1bmtub3duID0gY2hbMV07XG4gICAgY29uc3QgbWFya2VyID0gZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgnc2hvdycpO1xuXG4gICAgbGV0IGFuY2hvcjogQ2hpbGROb2RlIHwgbnVsbCA9IG51bGw7XG4gICAgY29uc3Qgc3dhcCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHNob3cgPSBCb29sZWFuKFxuICAgICAgICBpc1NpZ25hbExpa2Uod2hlblNpZykgPyAod2hlblNpZyBhcyB7IHZhbHVlOiB1bmtub3duIH0pLnZhbHVlIDogd2hlblNpZyxcbiAgICAgICk7XG4gICAgICBjb25zdCB0YXJnZXQgPSBzaG93ID8gdHJ1dGh5IDogZmFsc3k7XG4gICAgICBpZiAoYW5jaG9yKSBhbmNob3IucmVtb3ZlKCk7XG4gICAgICBpZiAodGFyZ2V0ICE9IG51bGwpIHtcbiAgICAgICAgYW5jaG9yID0gcmVuZGVyVG9Eb20odGFyZ2V0LCBmdWxsTGlmZWN5Y2xlLCB1bmRlZmluZWQsIHNpZ25hbFJlZ2lzdHJ5KSBhcyBDaGlsZE5vZGU7XG4gICAgICAgIG1hcmtlci5wYXJlbnROb2RlPy5pbnNlcnRCZWZvcmUoYW5jaG9yLCBtYXJrZXIubmV4dFNpYmxpbmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYW5jaG9yID0gbnVsbDtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGRpc3Bvc2UgPSBlZmZlY3QoKCkgPT4gc3dhcCgpKTtcbiAgICBpZiAoZnVsbExpZmVjeWNsZS5zaWduYWwpIHtcbiAgICAgIGZ1bGxMaWZlY3ljbGUuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgZGlzcG9zZSwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIH1cbiAgICBmdWxsTGlmZWN5Y2xlLmRpc3Bvc2Vycz8uYWRkKGRpc3Bvc2UpO1xuICAgIHN3YXAoKTtcbiAgICByZXR1cm4gbWFya2VyO1xuICB9XG5cbiAgaWYgKHRhZyA9PT0gRk9SX1RBRyB8fCB0YWcgPT09ICdmb3JlJykge1xuICAgIGNvbnN0IGVhY2hTaWcgPSBwcm9wcz8uZWFjaDtcbiAgICBjb25zdCByZW5kZXJGbiA9IChjaGlsZHJlblswXSBhcyBSZW5kZXJGbikgPz9cbiAgICAgICgoKCkgPT4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpIGFzIHVua25vd24pIGFzIFJlbmRlckZuKTtcblxuICAgIGNvbnN0IG1hcmtlciA9IGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoJ2ZvcicpO1xuICAgIGxldCBhbmNob3JzOiBDaGlsZE5vZGVbXSA9IFtdO1xuXG4gICAgY29uc3QgcmVjb25jaWxlID0gKCkgPT4ge1xuICAgICAgY29uc3QgaXRlbXMgPVxuICAgICAgICAoaXNTaWduYWxMaWtlKGVhY2hTaWcpID8gKGVhY2hTaWcgYXMgeyB2YWx1ZTogdW5rbm93biB9KS52YWx1ZSA6IGVhY2hTaWcpIGFzIHVua25vd25bXTtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShpdGVtcykpIHJldHVybjtcblxuICAgICAgLy8gUmVtb3ZlIG9sZFxuICAgICAgZm9yIChjb25zdCBhIG9mIGFuY2hvcnMpIGEucmVtb3ZlKCk7XG4gICAgICBhbmNob3JzID0gW107XG5cbiAgICAgIC8vIFJlbmRlciBuZXdcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgdm4gPSByZW5kZXJGbihpdGVtc1tpXSwgaSk7XG4gICAgICAgIGNvbnN0IGRvbSA9IHJlbmRlclRvRG9tKHZuLCBmdWxsTGlmZWN5Y2xlLCB1bmRlZmluZWQsIHNpZ25hbFJlZ2lzdHJ5KSBhcyBDaGlsZE5vZGU7XG4gICAgICAgIG1hcmtlci5wYXJlbnROb2RlPy5pbnNlcnRCZWZvcmUoZG9tLCBtYXJrZXIubmV4dFNpYmxpbmcpO1xuICAgICAgICBhbmNob3JzLnB1c2goZG9tKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGRpc3Bvc2UgPSBlZmZlY3QoKCkgPT4gcmVjb25jaWxlKCkpO1xuICAgIGlmIChmdWxsTGlmZWN5Y2xlLnNpZ25hbCkge1xuICAgICAgZnVsbExpZmVjeWNsZS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBkaXNwb3NlLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgfVxuICAgIGZ1bGxMaWZlY3ljbGUuZGlzcG9zZXJzPy5hZGQoZGlzcG9zZSk7XG4gICAgcmVjb25jaWxlKCk7XG4gICAgcmV0dXJuIG1hcmtlcjtcbiAgfVxuXG4gIGlmIChpc0NvbXBvbmVudEN0b3IodGFnKSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyB0YWcoKTtcbiAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHByb3BzKSkge1xuICAgICAgICAoaW5zdGFuY2UgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tdID0gdjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGluc3RhbmNlLnJlbmRlcigpO1xuICAgICAgcmV0dXJuIHJlbmRlclRvRG9tKHJlc3VsdCwgZnVsbExpZmVjeWNsZSwgdW5kZWZpbmVkLCBzaWduYWxSZWdpc3RyeSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjcmVhdGVMb2dnZXIoJ2RvbS1yZW5kZXInKS5lcnJvcihcbiAgICAgICAgYHJlbmRlclRvRG9tKCkgZmFpbGVkIGZvciA8JHtTdHJpbmcodGFnKX0+OiAke2Zvcm1hdEVycm9yKGVycil9YCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xuICAgIH1cbiAgfVxuICBpZiAoaXNDb21wb25lbnRGbih0YWcpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRhZyh7IC4uLnByb3BzLCBjaGlsZHJlbiB9KTtcbiAgICAgIHJldHVybiByZW5kZXJUb0RvbShyZXN1bHQsIGZ1bGxMaWZlY3ljbGUsIHVuZGVmaW5lZCwgc2lnbmFsUmVnaXN0cnkpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY3JlYXRlTG9nZ2VyKCdkb20tcmVuZGVyJykuZXJyb3IoXG4gICAgICAgIGByZW5kZXJUb0RvbSgpIGZhaWxlZCBmb3IgPCR7U3RyaW5nKHRhZyl9PjogJHtmb3JtYXRFcnJvcihlcnIpfWAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBlbCA9IGNyZWF0ZUVsZW1lbnRGb3JUYWcodGFnIGFzIHN0cmluZyk7XG4gIGFwcGx5UHJvcHMoZWwsIHByb3BzLCBmdWxsTGlmZWN5Y2xlLCBzaWduYWxSZWdpc3RyeSk7XG4gIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICBlbC5hcHBlbmRDaGlsZChyZW5kZXJUb0RvbShjaGlsZCwgZnVsbExpZmVjeWNsZSwgdW5kZWZpbmVkLCBzaWduYWxSZWdpc3RyeSkpO1xuICB9XG5cbiAgcmV0dXJuIGVsO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0NBVUMsR0FFRCxTQUFTLGVBQWUsRUFBRSxhQUFhLEVBQUUsT0FBTyxRQUFRLGFBQWE7QUFHckUsU0FBUyxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLFFBQVEsbUJBQW1CO0FBQ3pFLFNBQVMsWUFBWSxFQUFFLGdCQUFnQixRQUFRLHNCQUFzQjtBQUNyRSxTQUFTLGlCQUFpQixRQUFRLHVCQUF1QjtBQUN6RCxTQUFTLGVBQWUsUUFBUSxnQkFBZ0I7QUFDaEQsU0FBUyxNQUFNLFFBQVEsc0JBQXNCO0FBQzdDLFNBQVMsWUFBWSxRQUFRLGNBQWM7QUFDM0MsU0FBUyxXQUFXLFFBQVEsY0FBYztBQUMxQyxTQUFTLHNCQUFzQixRQUFRLDBCQUEwQjtBQUVqRSxTQUFTLFdBQVcsUUFBUSwwQ0FBMEM7QUFFdEUsTUFBTSxTQUFTO0FBRWY7Ozs7Q0FJQyxHQUNELE1BQU0sV0FBVyxJQUFJLElBQUk7RUFDdkI7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7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
290
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9vcGVuZWxlbWVudC9vcGVuZWxlbWVudC9wYWNrYWdlcy9jb3JlL3NyYy9qc3gtcmVuZGVyLWRvbS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbnZlcnRzIGEgVk5vZGUgdHJlZSB0byByZWFsIERPTSBub2RlcyBmb3IgY2xpZW50LXNpZGUgcmVuZGVyaW5nIGFuZCBoeWRyYXRpb24uXG4gKlxuICogRGVzaWduIChBRFItMDA1NyAvIEFEUi0wMTA5IFBoYXNlIDIpOlxuICogLSBQcm9wcyBhcmUgdHJhbnNsYXRlZCBpbnRvIEJpbmRpbmdEZXNjcmlwdG9yIG9iamVjdHMuXG4gKiAtIFNwZWNpYWwgdGFncyBlbWl0IGJpbmRpbmcgZGVzY3JpcHRvcnMgaW5zdGVhZCBvZiBjcmVhdGluZyBlZmZlY3RzIGRpcmVjdGx5LlxuICogLSBCaW5kaW5nIGRlc2NyaXB0b3JzIGFyZSBjb21taXR0ZWQgdmlhIGNvbW1pdEJpbmRpbmdzKCkgYWZ0ZXIgdGhlIERPTSB0cmVlIGlzXG4gKiAgIGNyZWF0ZWQgc28gYW5jaG9ycyBhcmUgYWxyZWFkeSBpbiB0aGUgZG9jdW1lbnQgYmVmb3JlIHJlYWN0aXZlIGVmZmVjdHMgcnVuLlxuICogLSBTaWduYWwgbmFtZXMgYXJlIHJlc29sdmVkIHRocm91Z2ggYW4gb3B0aW9uYWwgc2lnbmFsUmVnaXN0cnkgYW5kIGVtaXR0ZWQgYXNcbiAqICAgZGF0YS1zaWduYWwgbWFya2VycyBmb3IgRFNEIGh5ZHJhdGlvbiBjb25zaXN0ZW5jeS5cbiAqXG4gKiBAbW9kdWxlIEBvcGVuZWxlbWVudC9jb3JlL2pzeC1yZW5kZXItZG9tXG4gKi9cblxuaW1wb3J0IHsgaXNDb21wb25lbnRDdG9yLCBpc0NvbXBvbmVudEZuLCBpc1ZOb2RlIH0gZnJvbSAnLi92bm9kZS5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlbmRlckZuLCBWTm9kZSB9IGZyb20gJ0BvcGVuZWxlbWVudC9wcm90b2NvbC92bm9kZSc7XG5pbXBvcnQgdHlwZSB7IFNpZ25hbCB9IGZyb20gJ0BvcGVuZWxlbWVudC9wcm90b2NvbC9zaWduYWwnO1xuaW1wb3J0IHsgRk9SX1RBRywgRnJhZ21lbnQsIEhUTUxfVEFHLCBTSE9XX1RBRyB9IGZyb20gJy4vanN4LXJ1bnRpbWUuanMnO1xuaW1wb3J0IHsgaXNTaWduYWxMaWtlLCB1bndyYXBTaWduYWxMaWtlIH0gZnJvbSAnQG9wZW5lbGVtZW50L3NpZ25hbCc7XG5pbXBvcnQgeyBldmVudFR5cGVGcm9tUHJvcCB9IGZyb20gJy4vZXZlbnQtbWFya2VyLmpzJztcbmltcG9ydCB7IHRydXN0UmVuZGVySHRtbCB9IGZyb20gJy4vc2VjdXJpdHkuanMnO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXIuanMnO1xuaW1wb3J0IHsgZm9ybWF0RXJyb3IgfSBmcm9tICcuL2Vycm9ycy5qcyc7XG5pbXBvcnQgeyBjb21taXRCaW5kaW5ncyB9IGZyb20gJy4vYmluZGluZy1hY3RpdmF0aW9uLmpzJztcbmltcG9ydCB7XG4gIGJpbmRBdHRyLFxuICBiaW5kQ29uZGl0aW9uYWwsXG4gIGJpbmRFdmVudCxcbiAgYmluZEh0bWwsXG4gIGJpbmRMaXN0LFxuICBiaW5kUmVmLFxuICBiaW5kU3RhdGljQXR0cixcbiAgYmluZFN0YXRpY0Jvb2xlYW4sXG4gIGJpbmRTdGF0aWNQcm9wLFxuICBiaW5kU3RhdGljU3R5bGUsXG4gIGJpbmRUZXh0LFxufSBmcm9tICcuL2JpbmRpbmctZGVzY3JpcHRvci5qcyc7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdEZXNjcmlwdG9yLCBCaW5kaW5nTGlmZWN5Y2xlLCBCaW5kaW5nUmVuZGVyZXIgfSBmcm9tICcuL2JpbmRpbmctZGVzY3JpcHRvci5qcyc7XG5pbXBvcnQgeyBEQVRBX1NJR05BTCB9IGZyb20gJ0BvcGVuZWxlbWVudC9wcm90b2NvbC9oeWRyYXRpb24tbWFya2Vycyc7XG5cbmNvbnN0IFNWR19OUyA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc7XG5cbi8qKlxuICogRWxlbWVudHMgdGhhdCBNVVNUIGJlIGNyZWF0ZWQgd2l0aCBjcmVhdGVFbGVtZW50TlMoU1ZHX05TLCB0YWcpIHRvIHJlbmRlclxuICogY29ycmVjdGx5LiBVc2luZyBjcmVhdGVFbGVtZW50KCkgcHV0cyB0aGVtIGluIHRoZSBIVE1MIG5hbWVzcGFjZSB3aGVyZVxuICogYnJvd3NlcnMgd29uJ3QgcmVuZGVyIHRoZW0gYXMgU1ZHIHNoYXBlcy5cbiAqL1xuY29uc3QgU1ZHX1RBR1MgPSBuZXcgU2V0KFtcbiAgJ3N2ZycsXG4gICdjaXJjbGUnLFxuICAnZWxsaXBzZScsXG4gICdsaW5lJyxcbiAgJ3BhdGgnLFxuICAncG9seWdvbicsXG4gICdwb2x5bGluZScsXG4gICdyZWN0JyxcbiAgJ2cnLFxuICAnZGVmcycsXG4gICdjbGlwUGF0aCcsXG4gICdtYXNrJyxcbiAgJ3BhdHRlcm4nLFxuICAndXNlJyxcbiAgJ3N5bWJvbCcsXG4gICdpbWFnZScsXG4gICd0ZXh0JyxcbiAgJ3RzcGFuJyxcbiAgJ3RleHRQYXRoJyxcbiAgJ2xpbmVhckdyYWRpZW50JyxcbiAgJ3JhZGlhbEdyYWRpZW50JyxcbiAgJ3N0b3AnLFxuICAnYW5pbWF0ZScsXG4gICdhbmltYXRlVHJhbnNmb3JtJyxcbiAgJ2FuaW1hdGVNb3Rpb24nLFxuICAnZm9yZWlnbk9iamVjdCcsXG4gICd0aXRsZScsXG4gICdkZXNjJyxcbiAgJ2ZlQmxlbmQnLFxuICAnZmVDb2xvck1hdHJpeCcsXG4gICdmZUNvbXBvbmVudFRyYW5zZmVyJyxcbiAgJ2ZlQ29tcG9zaXRlJyxcbiAgJ2ZlQ29udm9sdmVNYXRyaXgnLFxuICAnZmVEaWZmdXNlTGlnaHRpbmcnLFxuICAnZmVEaXNwbGFjZW1lbnRNYXAnLFxuICAnZmVEaXN0YW50TGlnaHQnLFxuICAnZmVEcm9wU2hhZG93JyxcbiAgJ2ZlRmxvb2QnLFxuICAnZmVGdW5jQScsXG4gICdmZUZ1bmNCJyxcbiAgJ2ZlRnVuY0cnLFxuICAnZmVGdW5jUicsXG4gICdmZUdhdXNzaWFuQmx1cicsXG4gICdmZUltYWdlJyxcbiAgJ2ZlTWVyZ2UnLFxuICAnZmVNZXJnZU5vZGUnLFxuICAnZmVNb3JwaG9sb2d5JyxcbiAgJ2ZlT2Zmc2V0JyxcbiAgJ2ZlUG9pbnRMaWdodCcsXG4gICdmZVNwZWN1bGFyTGlnaHRpbmcnLFxuICAnZmVTcG90TGlnaHQnLFxuICAnZmVUaWxlJyxcbiAgJ2ZlVHVyYnVsZW5jZScsXG5dKTtcblxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudEZvclRhZyh0YWc6IHN0cmluZyk6IEVsZW1lbnQge1xuICBpZiAoU1ZHX1RBR1MuaGFzKHRhZykpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgdGFnKTtcbiAgfVxuICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpO1xufVxuXG4vKiogUmVzb2x2ZSBhIHNpZ25hbCBvYmplY3QgdG8gaXRzIHJlZ2lzdGVyZWQgbmFtZSwgaWYgYW55LiAqL1xuZnVuY3Rpb24gc2lnbmFsTmFtZUZvcihcbiAgdmFsdWU6IHVua25vd24sXG4gIHNpZ25hbFJlZ2lzdHJ5PzogTWFwPHN0cmluZywgU2lnbmFsPHVua25vd24+Pixcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghc2lnbmFsUmVnaXN0cnkgfHwgIWlzU2lnbmFsTGlrZSh2YWx1ZSkpIHJldHVybiB1bmRlZmluZWQ7XG4gIGZvciAoY29uc3QgW25hbWUsIHNpZ10gb2Ygc2lnbmFsUmVnaXN0cnkuZW50cmllcygpKSB7XG4gICAgaWYgKHNpZyA9PT0gdmFsdWUpIHJldHVybiBuYW1lO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ29sbGVjdCBCaW5kaW5nRGVzY3JpcHRvciBvYmplY3RzIGZyb20gYSBKU1ggcHJvcHMgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBlbCAtIFRhcmdldCBlbGVtZW50IHRoZSBkZXNjcmlwdG9ycyB3aWxsIGFwcGx5IHRvLlxuICogQHBhcmFtIHByb3BzIC0gVk5vZGUgcHJvcHMuXG4gKiBAcGFyYW0gc2lnbmFsUmVnaXN0cnkgLSBPcHRpb25hbCByZWdpc3RyeSB1c2VkIHRvIG5hbWUgc2lnbmFscyBmb3IgaHlkcmF0aW9uIG1hcmtlcnMuXG4gKiBAcmV0dXJucyBBcnJheSBvZiBiaW5kaW5nIGRlc2NyaXB0b3JzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdFByb3BCaW5kaW5ncyhcbiAgZWw6IEVsZW1lbnQsXG4gIHByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgc2lnbmFsUmVnaXN0cnk/OiBNYXA8c3RyaW5nLCBTaWduYWw8dW5rbm93bj4+LFxuKTogQmluZGluZ0Rlc2NyaXB0b3JbXSB7XG4gIGNvbnN0IGRlc2NyaXB0b3JzOiBCaW5kaW5nRGVzY3JpcHRvcltdID0gW107XG4gIGNvbnN0IHRydXN0ZWRIdG1sID0gcHJvcHMudHJ1c3RlZEh0bWwgPT09IHRydWU7XG5cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocHJvcHMpKSB7XG4gICAgaWYgKGtleSA9PT0gJ2NoaWxkcmVuJyB8fCBrZXkgPT09ICdrZXknIHx8IGtleSA9PT0gJ3RydXN0ZWRIdG1sJykgY29udGludWU7XG5cbiAgICAvLyByZWYgY2FsbGJhY2tcbiAgICBpZiAoa2V5ID09PSAncmVmJyAmJiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGRlc2NyaXB0b3JzLnB1c2goYmluZFJlZihlbCwgdmFsdWUgYXMgKGVsOiBFbGVtZW50KSA9PiB2b2lkKSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBFdmVudCBoYW5kbGVyc1xuICAgIGlmIChrZXkuc3RhcnRzV2l0aCgnb24nKSAmJiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IGV2ZW50VHlwZSA9IGV2ZW50VHlwZUZyb21Qcm9wKGtleSk7XG4gICAgICBpZiAoIWV2ZW50VHlwZSkgY29udGludWU7XG4gICAgICBkZXNjcmlwdG9ycy5wdXNoKGJpbmRFdmVudChlbCwgZXZlbnRUeXBlLCB2YWx1ZSBhcyBFdmVudExpc3RlbmVyKSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgPT0gbnVsbCkgY29udGludWU7XG5cbiAgICAvLyBpbm5lckhUTUwgbWFwcyB0byBzaWduYWwtaHRtbCAvIHN0YXRpYyB0ZXh0IGluamVjdGlvbi5cbiAgICBpZiAoa2V5ID09PSAnaW5uZXJIVE1MJykge1xuICAgICAgaWYgKGlzU2lnbmFsTGlrZSh2YWx1ZSkpIHtcbiAgICAgICAgZGVzY3JpcHRvcnMucHVzaChiaW5kSHRtbChlbCwgdmFsdWUgYXMgU2lnbmFsPHVua25vd24+LCB0cnVzdGVkSHRtbCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSBTdHJpbmcodW53cmFwU2lnbmFsTGlrZSh2YWx1ZSkpO1xuICAgICAgICBpZiAodHJ1c3RlZEh0bWwpIHtcbiAgICAgICAgICAoZWwgYXMgSFRNTEVsZW1lbnQpLmlubmVySFRNTCA9IHRydXN0UmVuZGVySHRtbChyZXNvbHZlZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgKGVsIGFzIEhUTUxFbGVtZW50KS50ZXh0Q29udGVudCA9IHJlc29sdmVkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBTaWduYWwgYmluZGluZyDigJQgZW1pdCBkYXRhLXNpZ25hbCBtYXJrZXIgd2hlbiB3ZSBjYW4gcmVzb2x2ZSBhIG5hbWUuXG4gICAgaWYgKGlzU2lnbmFsTGlrZSh2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IHNpZyA9IHZhbHVlIGFzIFNpZ25hbDx1bmtub3duPjtcbiAgICAgIGNvbnN0IG5hbWUgPSBzaWduYWxOYW1lRm9yKHNpZywgc2lnbmFsUmVnaXN0cnkpO1xuICAgICAgY29uc3QgYXR0ck5hbWUgPSBrZXkgPT09ICdjbGFzc05hbWUnID8gJ2NsYXNzJyA6IGtleSA9PT0gJ2h0bWxGb3InID8gJ2ZvcicgOiBrZXk7XG5cbiAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgIGVsLnNldEF0dHJpYnV0ZShEQVRBX1NJR05BTCwgbmFtZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFVzZSBzaWduYWwtYXR0ciBmb3IgYWxsIHNpZ25hbC1kcml2ZW4gcHJvcHM7IHNpZ25hbC1jbGFzcyB0b2dnbGluZ1xuICAgICAgLy8gKHNpbmdsZSBjbGFzcykgaXMgcmVzZXJ2ZWQgZm9yIGV4cGxpY2l0IGRhdGEtc2lnbmFsLWNsYXNzIG1hcmtlcnMuXG4gICAgICBkZXNjcmlwdG9ycy5wdXNoKGJpbmRBdHRyKGVsLCBbYXR0ck5hbWVdLCBzaWcpKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc29sdmVkID0gdW53cmFwU2lnbmFsTGlrZSh2YWx1ZSk7XG5cbiAgICBpZiAoa2V5ID09PSAnc3R5bGUnICYmIHR5cGVvZiByZXNvbHZlZCA9PT0gJ29iamVjdCcgJiYgcmVzb2x2ZWQgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN0eWxlT2JqOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+ID0ge307XG4gICAgICBmb3IgKGNvbnN0IFtzaywgc3ZdIG9mIE9iamVjdC5lbnRyaWVzKHJlc29sdmVkIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSkge1xuICAgICAgICBzdHlsZU9ialtza10gPSB1bndyYXBTaWduYWxMaWtlKHN2KSBhcyBzdHJpbmcgfCBudW1iZXI7XG4gICAgICB9XG4gICAgICBkZXNjcmlwdG9ycy5wdXNoKGJpbmRTdGF0aWNTdHlsZShlbCwgc3R5bGVPYmopKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIERPTSBwcm9wZXJ0aWVzIHRoYXQgYXJlIE5PVCBIVE1MIGF0dHJpYnV0ZXNcbiAgICBpZiAoa2V5ID09PSAndGV4dENvbnRlbnQnKSB7XG4gICAgICBkZXNjcmlwdG9ycy5wdXNoKGJpbmRTdGF0aWNQcm9wKGVsLCAndGV4dENvbnRlbnQnLCByZXNvbHZlZCkpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgYXR0ck5hbWUgPSBrZXkgPT09ICdjbGFzc05hbWUnID8gJ2NsYXNzJyA6IGtleSA9PT0gJ2h0bWxGb3InID8gJ2ZvcicgOiBrZXk7XG5cbiAgICBpZiAodHlwZW9mIHJlc29sdmVkID09PSAnYm9vbGVhbicpIHtcbiAgICAgIGRlc2NyaXB0b3JzLnB1c2goYmluZFN0YXRpY0Jvb2xlYW4oZWwsIGF0dHJOYW1lLCByZXNvbHZlZCkpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgZGVzY3JpcHRvcnMucHVzaChiaW5kU3RhdGljQXR0cihlbCwgYXR0ck5hbWUsIHJlc29sdmVkKSk7XG4gIH1cblxuICByZXR1cm4gZGVzY3JpcHRvcnM7XG59XG5cbi8qKlxuICogQXBwbHkgYSBwcm9wcyBvYmplY3QgdG8gYSByZWFsIERPTSBlbGVtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlQcm9wcyhcbiAgZWw6IEVsZW1lbnQsXG4gIHByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgbGlmZWN5Y2xlPzogQmluZGluZ0xpZmVjeWNsZSxcbiAgc2lnbmFsUmVnaXN0cnk/OiBNYXA8c3RyaW5nLCBTaWduYWw8dW5rbm93bj4+LFxuICByZW5kZXJlcj86IEJpbmRpbmdSZW5kZXJlcixcbik6IHZvaWQge1xuICBjb25zdCBkZXNjcmlwdG9ycyA9IGNvbGxlY3RQcm9wQmluZGluZ3MoZWwsIHByb3BzLCBzaWduYWxSZWdpc3RyeSk7XG4gIGNvbW1pdEJpbmRpbmdzKGRlc2NyaXB0b3JzLCBsaWZlY3ljbGUgPz8ge30sIHJlbmRlcmVyKTtcbn1cblxuLyoqXG4gKiBSZW5kZXIgYSBWTm9kZSB0cmVlIHRvIGEgcmVhbCBET00gbm9kZS5cbiAqXG4gKiBAcGFyYW0gbm9kZSAtIFZOb2RlLCBzdHJpbmcsIG51bWJlciwgb3IgbnVsbC91bmRlZmluZWRcbiAqIEBwYXJhbSBsaWZlY3ljbGUgLSBPcHRpb25hbCBCaW5kaW5nTGlmZWN5Y2xlIGZvciBhdXRvbWF0aWMgY2xlYW51cFxuICogQHBhcmFtIGRpc3Bvc2VycyAtIE9wdGlvbmFsIFNldCB0byBjb2xsZWN0IGVmZmVjdCBkaXNwb3NlIGZucyAoYmFja3dhcmQgY29tcGF0KVxuICogQHBhcmFtIHNpZ25hbFJlZ2lzdHJ5IC0gT3B0aW9uYWwgcmVnaXN0cnkgdXNlZCB0byByZXNvbHZlIHNpZ25hbCBuYW1lcyBmb3IgbWFya2Vyc1xuICogQHJldHVybnMgRE9NIE5vZGUgKEVsZW1lbnQsIFRleHQsIG9yIERvY3VtZW50RnJhZ21lbnQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJUb0RvbShcbiAgbm9kZTogdW5rbm93bixcbiAgbGlmZWN5Y2xlPzogQmluZGluZ0xpZmVjeWNsZSxcbiAgZGlzcG9zZXJzPzogU2V0PCgpID0+IHZvaWQ+LFxuICBzaWduYWxSZWdpc3RyeT86IE1hcDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4sXG4pOiBOb2RlIHtcbiAgY29uc3QgZnVsbExpZmVjeWNsZTogQmluZGluZ0xpZmVjeWNsZSA9IGxpZmVjeWNsZSA/PyAoZGlzcG9zZXJzID8geyBkaXNwb3NlcnMgfSA6IHt9KTtcbiAgaWYgKGRpc3Bvc2VycyAmJiAhbGlmZWN5Y2xlPy5kaXNwb3NlcnMpIHtcbiAgICBmdWxsTGlmZWN5Y2xlLmRpc3Bvc2VycyA9IGRpc3Bvc2VycztcbiAgfVxuXG4gIGNvbnN0IHJlbmRlcmVyOiBCaW5kaW5nUmVuZGVyZXIgPSB7XG4gICAgcmVuZGVyOiAoY2hpbGQsIGNoaWxkTGlmZWN5Y2xlKSA9PlxuICAgICAgcmVuZGVyVG9Eb20oY2hpbGQsIGNoaWxkTGlmZWN5Y2xlLCB1bmRlZmluZWQsIHNpZ25hbFJlZ2lzdHJ5KSxcbiAgfTtcblxuICBjb25zdCBkZXNjcmlwdG9yczogQmluZGluZ0Rlc2NyaXB0b3JbXSA9IFtdO1xuICBjb25zdCByb290ID0gcmVuZGVyTm9kZShub2RlLCBmdWxsTGlmZWN5Y2xlLCBzaWduYWxSZWdpc3RyeSwgZGVzY3JpcHRvcnMpO1xuICBjb21taXRCaW5kaW5ncyhkZXNjcmlwdG9ycywgZnVsbExpZmVjeWNsZSwgcmVuZGVyZXIpO1xuICByZXR1cm4gcm9vdDtcbn1cblxuZnVuY3Rpb24gcmVuZGVyTm9kZShcbiAgbm9kZTogdW5rbm93bixcbiAgbGlmZWN5Y2xlOiBCaW5kaW5nTGlmZWN5Y2xlLFxuICBzaWduYWxSZWdpc3RyeTogTWFwPHN0cmluZywgU2lnbmFsPHVua25vd24+PiB8IHVuZGVmaW5lZCxcbiAgZGVzY3JpcHRvcnM6IEJpbmRpbmdEZXNjcmlwdG9yW10sXG4pOiBOb2RlIHtcbiAgaWYgKG5vZGUgPT0gbnVsbCB8fCBub2RlID09PSBmYWxzZSkge1xuICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gIH1cbiAgaWYgKHR5cGVvZiBub2RlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShub2RlKTtcbiAgfVxuICBpZiAodHlwZW9mIG5vZGUgPT09ICdudW1iZXInIHx8IHR5cGVvZiBub2RlID09PSAnYm9vbGVhbicpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoU3RyaW5nKG5vZGUpKTtcbiAgfVxuXG4gIC8vIFNpZ25hbC10by1UZXh0Tm9kZSByZWFjdGl2ZSBiaW5kaW5nIChBRFItMDA1OC8wMDU5KS5cbiAgaWYgKGlzU2lnbmFsTGlrZShub2RlKSkge1xuICAgIGNvbnN0IHNpZyA9IG5vZGUgYXMgU2lnbmFsPHVua25vd24+O1xuICAgIGNvbnN0IHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoU3RyaW5nKHNpZy52YWx1ZSA/PyAnJykpO1xuICAgIGRlc2NyaXB0b3JzLnB1c2goYmluZFRleHQodGV4dE5vZGUsIHNpZykpO1xuICAgIHJldHVybiB0ZXh0Tm9kZTtcbiAgfVxuXG4gIGlmICghaXNWTm9kZShub2RlKSkge1xuICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShTdHJpbmcobm9kZSkpO1xuICB9XG5cbiAgY29uc3QgeyB0YWcsIHByb3BzLCBjaGlsZHJlbiB9ID0gbm9kZSBhcyBWTm9kZTtcblxuICBpZiAoXG4gICAgdGFnID09PSBGcmFnbWVudCB8fCAodHlwZW9mIHRhZyA9PT0gJ3N5bWJvbCcgJiYgU3RyaW5nKHRhZykgPT09ICdTeW1ib2wob3BlbmVsZW1lbnQuZnJhZ21lbnQpJylcbiAgKSB7XG4gICAgY29uc3QgZnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgICBmcmFnLmFwcGVuZENoaWxkKHJlbmRlck5vZGUoY2hpbGQsIGxpZmVjeWNsZSwgc2lnbmFsUmVnaXN0cnksIGRlc2NyaXB0b3JzKSk7XG4gICAgfVxuICAgIHJldHVybiBmcmFnO1xuICB9XG5cbiAgLy8gVHJ1c3RlZCBIVE1MIOKAlCBwYXJzZSByYXcgSFRNTCBzdHJpbmcgaW50byByZWFsIERPTSBub2Rlc1xuICBpZiAodGFnID09PSBIVE1MX1RBRykge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGNvbnN0IGh0bWwgPSBwcm9wcz8uaHRtbCA/PyAnJztcbiAgICBjb250YWluZXIuaW5uZXJIVE1MID0gdHJ1c3RSZW5kZXJIdG1sKFN0cmluZyhodG1sKSk7XG4gICAgY29uc3QgZnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICB3aGlsZSAoY29udGFpbmVyLmZpcnN0Q2hpbGQpIHtcbiAgICAgIGZyYWcuYXBwZW5kQ2hpbGQoY29udGFpbmVyLmZpcnN0Q2hpbGQpO1xuICAgIH1cbiAgICByZXR1cm4gZnJhZztcbiAgfVxuXG4gIGlmICh0YWcgPT09IFNIT1dfVEFHIHx8IHRhZyA9PT0gJ3Nob3cnKSB7XG4gICAgY29uc3Qgd2hlblNpZyA9IHByb3BzPy53aGVuO1xuICAgIGNvbnN0IGNoID0gY2hpbGRyZW4gYXMgVk5vZGVbXTtcbiAgICBjb25zdCB0cnV0aHk6IHVua25vd24gPSBjaFswXTtcbiAgICBjb25zdCBmYWxzeTogdW5rbm93biA9IGNoWzFdO1xuICAgIGNvbnN0IG1hcmtlciA9IGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoJ3Nob3cnKTtcbiAgICBkZXNjcmlwdG9ycy5wdXNoKGJpbmRDb25kaXRpb25hbChcbiAgICAgIG1hcmtlciBhcyBDaGlsZE5vZGUsXG4gICAgICB3aGVuU2lnLFxuICAgICAgKCkgPT4gdHJ1dGh5LFxuICAgICAgKCkgPT4gZmFsc3ksXG4gICAgKSk7XG4gICAgcmV0dXJuIG1hcmtlcjtcbiAgfVxuXG4gIGlmICh0YWcgPT09IEZPUl9UQUcgfHwgdGFnID09PSAnZm9yZScpIHtcbiAgICBjb25zdCBlYWNoU2lnID0gcHJvcHM/LmVhY2g7XG4gICAgY29uc3QgcmVuZGVyRm4gPSAoY2hpbGRyZW5bMF0gYXMgUmVuZGVyRm4pID8/XG4gICAgICAoKCgpID0+IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKSBhcyB1bmtub3duKSBhcyBSZW5kZXJGbik7XG5cbiAgICBjb25zdCBtYXJrZXIgPSBkb2N1bWVudC5jcmVhdGVDb21tZW50KCdmb3InKTtcbiAgICBkZXNjcmlwdG9ycy5wdXNoKFxuICAgICAgYmluZExpc3QobWFya2VyIGFzIENoaWxkTm9kZSwgZWFjaFNpZywgcmVuZGVyRm4pLFxuICAgICk7XG4gICAgcmV0dXJuIG1hcmtlcjtcbiAgfVxuXG4gIGlmIChpc0NvbXBvbmVudEN0b3IodGFnKSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyB0YWcoKTtcbiAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHByb3BzKSkge1xuICAgICAgICAoaW5zdGFuY2UgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tdID0gdjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGluc3RhbmNlLnJlbmRlcigpO1xuICAgICAgcmV0dXJuIHJlbmRlck5vZGUocmVzdWx0LCBsaWZlY3ljbGUsIHNpZ25hbFJlZ2lzdHJ5LCBkZXNjcmlwdG9ycyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjcmVhdGVMb2dnZXIoJ2RvbS1yZW5kZXInKS5lcnJvcihcbiAgICAgICAgYHJlbmRlclRvRG9tKCkgZmFpbGVkIGZvciA8JHtTdHJpbmcodGFnKX0+OiAke2Zvcm1hdEVycm9yKGVycil9YCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xuICAgIH1cbiAgfVxuICBpZiAoaXNDb21wb25lbnRGbih0YWcpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRhZyh7IC4uLnByb3BzLCBjaGlsZHJlbiB9KTtcbiAgICAgIHJldHVybiByZW5kZXJOb2RlKHJlc3VsdCwgbGlmZWN5Y2xlLCBzaWduYWxSZWdpc3RyeSwgZGVzY3JpcHRvcnMpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY3JlYXRlTG9nZ2VyKCdkb20tcmVuZGVyJykuZXJyb3IoXG4gICAgICAgIGByZW5kZXJUb0RvbSgpIGZhaWxlZCBmb3IgPCR7U3RyaW5nKHRhZyl9PjogJHtmb3JtYXRFcnJvcihlcnIpfWAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBlbCA9IGNyZWF0ZUVsZW1lbnRGb3JUYWcodGFnIGFzIHN0cmluZyk7XG4gIGNvbnN0IHByb3BEZXNjcmlwdG9ycyA9IGNvbGxlY3RQcm9wQmluZGluZ3MoZWwsIHByb3BzLCBzaWduYWxSZWdpc3RyeSk7XG4gIGRlc2NyaXB0b3JzLnB1c2goLi4ucHJvcERlc2NyaXB0b3JzKTtcbiAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgIGVsLmFwcGVuZENoaWxkKHJlbmRlck5vZGUoY2hpbGQsIGxpZmVjeWNsZSwgc2lnbmFsUmVnaXN0cnksIGRlc2NyaXB0b3JzKSk7XG4gIH1cblxuICByZXR1cm4gZWw7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7OztDQVlDLEdBRUQsU0FBUyxlQUFlLEVBQUUsYUFBYSxFQUFFLE9BQU8sUUFBUSxhQUFhO0FBR3JFLFNBQVMsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxRQUFRLG1CQUFtQjtBQUN6RSxTQUFTLFlBQVksRUFBRSxnQkFBZ0IsUUFBUSxzQkFBc0I7QUFDckUsU0FBUyxpQkFBaUIsUUFBUSxvQkFBb0I7QUFDdEQsU0FBUyxlQUFlLFFBQVEsZ0JBQWdCO0FBQ2hELFNBQVMsWUFBWSxRQUFRLGNBQWM7QUFDM0MsU0FBUyxXQUFXLFFBQVEsY0FBYztBQUMxQyxTQUFTLGNBQWMsUUFBUSwwQkFBMEI7QUFDekQsU0FDRSxRQUFRLEVBQ1IsZUFBZSxFQUNmLFNBQVMsRUFDVCxRQUFRLEVBQ1IsUUFBUSxFQUNSLE9BQU8sRUFDUCxjQUFjLEVBQ2QsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZCxlQUFlLEVBQ2YsUUFBUSxRQUNILDBCQUEwQjtBQUVqQyxTQUFTLFdBQVcsUUFBUSwwQ0FBMEM7QUFFdEUsTUFBTSxTQUFTO0FBRWY7Ozs7Q0FJQyxHQUNELE1BQU0sV0FBVyxJQUFJLElBQUk7RUFDdkI7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7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
package/src/static.d.ts CHANGED
@@ -16,7 +16,7 @@ export type { RenderDsdStreamChunk, RenderDsdStreamComponent, RenderDsdStreamMet
16
16
  export type { RenderDsdOptions } from "./render-dsd.js";
17
17
  export { escapeAttr, escapeAttrValue, escapeHtml, renderSsrError, wrapInDocument } from "./html-escape.js";
18
18
  export type { SafeHtml, UnsafeHtml } from '@openelement/protocol/framework';
19
- export { DANGEROUS_KEYS } from "./security.js";
19
+ /** @internal — use @openelement/core/security subpath */ export { DANGEROUS_KEYS } from "./security.js";
20
20
  export { ERROR_PREFIX, ErrorCode, formatError, OpenElementError, PropValidationError, RenderError, reportError, setErrorTelemetryHook, SsrRenderError } from "./errors.js";
21
21
  export type { ErrorPhase, ErrorSeverity, ErrorTelemetryHook } from '@openelement/protocol/errors';
22
22
  export { createLogger } from "./logger.js";
package/src/static.js CHANGED
@@ -16,7 +16,7 @@ export { createRenderDsdStreamMetrics, renderDsdStream } from './render-dsd-stre
16
16
  // HTML escaping / document wrapping
17
17
  export { escapeAttr, escapeAttrValue, escapeHtml, renderSsrError, wrapInDocument } from './html-escape.js';
18
18
  // Security / errors / logging
19
- export { DANGEROUS_KEYS } from './security.js';
19
+ /** @internal — use @openelement/core/security subpath */ export { DANGEROUS_KEYS } from './security.js';
20
20
  export { ERROR_PREFIX, ErrorCode, formatError, OpenElementError, PropValidationError, RenderError, reportError, setErrorTelemetryHook, SsrRenderError } from './errors.js';
21
21
  export { createLogger } from './logger.js';
22
22
  // Static props runtime
@@ -31,4 +31,4 @@ export { isValidTagName } from './tag-utils.js';
31
31
  export { StyleSheet } from './style-sheet.js';
32
32
  // Event marker serialization (used by SSR; hydration lives in hydrate.ts)
33
33
  export { createEventMarkerContext, eventMarkerId, eventTypeFromProp, serializeEventMarkers } from './event-marker.js';
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9vcGVuZWxlbWVudC9vcGVuZWxlbWVudC9wYWNrYWdlcy9jb3JlL3NyYy9zdGF0aWMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAb3BlbmVsZW1lbnQvY29yZS9zdGF0aWMgLSBTU1IvU1NHIHJ1bnRpbWUgc3VyZmFjZS5cbiAqXG4gKiBQdXJlIHN0YXRpYyByZW5kZXJpbmcgZW50cnkgcG9pbnQuIENvbnRhaW5zIGV2ZXJ5dGhpbmcgbmVlZGVkIHRvIGNyZWF0ZVxuICogVk5vZGVzIGFuZCByZW5kZXIgdGhlbSB0byBEU0QvSFRNTCBzdHJpbmdzLCB3aXRob3V0IHB1bGxpbmcgaW4gYW55IERPTVxuICogYmluZGluZywgZWZmZWN0LCBvciBoeWRyYXRpb24gY29kZS5cbiAqXG4gKiBBRFItMDEwOSBQaGFzZSAxOiBzcGxpdCBAb3BlbmVsZW1lbnQvY29yZSBpbnRvIHN0YXRpYywgaHlkcmF0ZSwgYW5kIGNzci5cbiAqL1xuXG4vLyBWTm9kZSAvIEpTWCBydW50aW1lXG5leHBvcnQgdHlwZSB7IFZOb2RlIH0gZnJvbSAnQG9wZW5lbGVtZW50L3Byb3RvY29sL3Zub2RlJztcbmV4cG9ydCB7IGlzVk5vZGUgfSBmcm9tICcuL3Zub2RlLmpzJztcbmV4cG9ydCB7IEZvciwgRnJhZ21lbnQsIGpzeCwganN4REVWLCBqc3hzLCBTaG93LCB0cnVzdGVkSHRtbCB9IGZyb20gJy4vanN4LXJ1bnRpbWUuanMnO1xuXG4vLyBTdGF0aWMgcmVuZGVyaW5nIChJUiArIERTRClcbmV4cG9ydCB7IGNhbWVsVG9LZWJhYiwgcmVuZGVyRHNkVHJlZSwgc2VyaWFsaXplQXR0cnMgfSBmcm9tICcuL3JlbmRlci1pci5qcyc7XG5leHBvcnQgeyByZW5kZXJEc2QgfSBmcm9tICcuL3JlbmRlci1kc2QuanMnO1xuZXhwb3J0IHsgY3JlYXRlUmVuZGVyRHNkU3RyZWFtTWV0cmljcywgcmVuZGVyRHNkU3RyZWFtIH0gZnJvbSAnLi9yZW5kZXItZHNkLXN0cmVhbS5qcyc7XG5leHBvcnQgdHlwZSB7XG4gIFJlbmRlckRzZFN0cmVhbUNodW5rLFxuICBSZW5kZXJEc2RTdHJlYW1Db21wb25lbnQsXG4gIFJlbmRlckRzZFN0cmVhbU1ldHJpY3MsXG4gIFJlbmRlckRzZFN0cmVhbU9wdGlvbnMsXG59IGZyb20gJy4vcmVuZGVyLWRzZC1zdHJlYW0uanMnO1xuZXhwb3J0IHR5cGUgeyBSZW5kZXJEc2RPcHRpb25zIH0gZnJvbSAnLi9yZW5kZXItZHNkLmpzJztcblxuLy8gSFRNTCBlc2NhcGluZyAvIGRvY3VtZW50IHdyYXBwaW5nXG5leHBvcnQge1xuICBlc2NhcGVBdHRyLFxuICBlc2NhcGVBdHRyVmFsdWUsXG4gIGVzY2FwZUh0bWwsXG4gIHJlbmRlclNzckVycm9yLFxuICB3cmFwSW5Eb2N1bWVudCxcbn0gZnJvbSAnLi9odG1sLWVzY2FwZS5qcyc7XG5leHBvcnQgdHlwZSB7IFNhZmVIdG1sLCBVbnNhZmVIdG1sIH0gZnJvbSAnQG9wZW5lbGVtZW50L3Byb3RvY29sL2ZyYW1ld29yayc7XG5cbi8vIFNlY3VyaXR5IC8gZXJyb3JzIC8gbG9nZ2luZ1xuZXhwb3J0IHsgREFOR0VST1VTX0tFWVMgfSBmcm9tICcuL3NlY3VyaXR5LmpzJztcbmV4cG9ydCB7XG4gIEVSUk9SX1BSRUZJWCxcbiAgRXJyb3JDb2RlLFxuICBmb3JtYXRFcnJvcixcbiAgT3BlbkVsZW1lbnRFcnJvcixcbiAgUHJvcFZhbGlkYXRpb25FcnJvcixcbiAgUmVuZGVyRXJyb3IsXG4gIHJlcG9ydEVycm9yLFxuICBzZXRFcnJvclRlbGVtZXRyeUhvb2ssXG4gIFNzclJlbmRlckVycm9yLFxufSBmcm9tICcuL2Vycm9ycy5qcyc7XG5leHBvcnQgdHlwZSB7IEVycm9yUGhhc2UsIEVycm9yU2V2ZXJpdHksIEVycm9yVGVsZW1ldHJ5SG9vayB9IGZyb20gJ0BvcGVuZWxlbWVudC9wcm90b2NvbC9lcnJvcnMnO1xuZXhwb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXIuanMnO1xuXG4vLyBTdGF0aWMgcHJvcHMgcnVudGltZVxuZXhwb3J0IHtcbiAgZGlzcG9zZVN0YXRpY1Byb3BzLFxuICBoYW5kbGVTdGF0aWNQcm9wQXR0cmlidXRlQ2hhbmdlLFxuICBpbml0aWFsaXplU3RhdGljUHJvcHMsXG4gIG5vcm1hbGl6ZVByb3BEZWNsLFxuICByZWdpc3RlclN0YXRpY09ic2VydmVkQXR0cmlidXRlcyxcbiAgc3luY1N0YXRpY1Byb3BzRnJvbUF0dHJpYnV0ZXMsXG4gIHVud3JhcCxcbn0gZnJvbSAnLi9wcm9wLmpzJztcbmV4cG9ydCB0eXBlIHtcbiAgTm9ybWFsaXplZFByb3BEZWNsLFxuICBQcm9wRGVjbCxcbiAgUHJvcERlY2xGdWxsLFxuICBQcm9wRGVjbFNob3J0aGFuZCxcbiAgUHJvcHNGcm9tLFxuICBQcm9wVHlwZSxcbn0gZnJvbSAnQG9wZW5lbGVtZW50L3Byb3RvY29sL3Byb3AnO1xuXG4vLyBTaWduYWwgdXRpbGl0aWVzIChuZXV0cmFsLCBubyBET00pXG5leHBvcnQgeyBpc1NpZ25hbExpa2UsIHVud3JhcFNpZ25hbExpa2UgfSBmcm9tICdAb3BlbmVsZW1lbnQvc2lnbmFsJztcbmV4cG9ydCB0eXBlIHsgU2lnbmFsTGlrZSwgVW5zdWJzY3JpYmUgfSBmcm9tICdAb3BlbmVsZW1lbnQvcHJvdG9jb2wvc2lnbmFsJztcblxuLy8gQ29udGV4dCAvIHJlcXVlc3QgaGVscGVyc1xuZXhwb3J0IHsgY3JlYXRlU3NyQ29udGV4dCwgZXh0cmFjdFBhcmFtcywgcGFyc2VRdWVyeSB9IGZyb20gJy4vY29udGV4dC5qcyc7XG5leHBvcnQgdHlwZSB7IElzbGFuZERlc2NyaXB0b3IsIFNzckNvbnRleHQgfSBmcm9tICdAb3BlbmVsZW1lbnQvcHJvdG9jb2wvY29udGV4dCc7XG5leHBvcnQgeyBjb25zdW1lQ29udGV4dCwgY3JlYXRlQ29udGV4dCwgcHJvdmlkZUNvbnRleHQgfSBmcm9tICcuL3NpZ25hbC1jb250ZXh0LmpzJztcbmV4cG9ydCB0eXBlIHsgQ29udGV4dCB9IGZyb20gJy4vc2lnbmFsLWNvbnRleHQuanMnO1xuXG4vLyBNaXNjIHN0YXRpYyB1dGlsaXRpZXNcbmV4cG9ydCB7IGlzVmFsaWRUYWdOYW1lIH0gZnJvbSAnLi90YWctdXRpbHMuanMnO1xuZXhwb3J0IHsgU3R5bGVTaGVldCB9IGZyb20gJy4vc3R5bGUtc2hlZXQuanMnO1xuZXhwb3J0IHR5cGUgeyBTdHlsZVNoZWV0TGlrZSwgU3R5bGVTaGVldFJ1bGUgfSBmcm9tICdAb3BlbmVsZW1lbnQvcHJvdG9jb2wvc3R5bGUtc2hlZXQnO1xuXG4vLyBFdmVudCBtYXJrZXIgc2VyaWFsaXphdGlvbiAodXNlZCBieSBTU1I7IGh5ZHJhdGlvbiBsaXZlcyBpbiBoeWRyYXRlLnRzKVxuZXhwb3J0IHtcbiAgY3JlYXRlRXZlbnRNYXJrZXJDb250ZXh0LFxuICBldmVudE1hcmtlcklkLFxuICBldmVudFR5cGVGcm9tUHJvcCxcbiAgc2VyaWFsaXplRXZlbnRNYXJrZXJzLFxufSBmcm9tICcuL2V2ZW50LW1hcmtlci5qcyc7XG5leHBvcnQgdHlwZSB7IEV2ZW50TWFya2VyQ29udGV4dCB9IGZyb20gJy4vZXZlbnQtbWFya2VyLmpzJztcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Q0FRQyxHQUVELHNCQUFzQjtBQUV0QixTQUFTLE9BQU8sUUFBUSxhQUFhO0FBQ3JDLFNBQVMsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsV0FBVyxRQUFRLG1CQUFtQjtBQUV2Riw4QkFBOEI7QUFDOUIsU0FBUyxZQUFZLEVBQUUsYUFBYSxFQUFFLGNBQWMsUUFBUSxpQkFBaUI7QUFDN0UsU0FBUyxTQUFTLFFBQVEsa0JBQWtCO0FBQzVDLFNBQVMsNEJBQTRCLEVBQUUsZUFBZSxRQUFRLHlCQUF5QjtBQVN2RixvQ0FBb0M7QUFDcEMsU0FDRSxVQUFVLEVBQ1YsZUFBZSxFQUNmLFVBQVUsRUFDVixjQUFjLEVBQ2QsY0FBYyxRQUNULG1CQUFtQjtBQUcxQiw4QkFBOEI7QUFDOUIsU0FBUyxjQUFjLFFBQVEsZ0JBQWdCO0FBQy9DLFNBQ0UsWUFBWSxFQUNaLFNBQVMsRUFDVCxXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixXQUFXLEVBQ1gsV0FBVyxFQUNYLHFCQUFxQixFQUNyQixjQUFjLFFBQ1QsY0FBYztBQUVyQixTQUFTLFlBQVksUUFBUSxjQUFjO0FBRTNDLHVCQUF1QjtBQUN2QixTQUNFLGtCQUFrQixFQUNsQiwrQkFBK0IsRUFDL0IscUJBQXFCLEVBQ3JCLGlCQUFpQixFQUNqQixnQ0FBZ0MsRUFDaEMsNkJBQTZCLEVBQzdCLE1BQU0sUUFDRCxZQUFZO0FBVW5CLHFDQUFxQztBQUNyQyxTQUFTLFlBQVksRUFBRSxnQkFBZ0IsUUFBUSxzQkFBc0I7QUFHckUsNEJBQTRCO0FBQzVCLFNBQVMsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLFVBQVUsUUFBUSxlQUFlO0FBRTNFLFNBQVMsY0FBYyxFQUFFLGFBQWEsRUFBRSxjQUFjLFFBQVEsc0JBQXNCO0FBR3BGLHdCQUF3QjtBQUN4QixTQUFTLGNBQWMsUUFBUSxpQkFBaUI7QUFDaEQsU0FBUyxVQUFVLFFBQVEsbUJBQW1CO0FBRzlDLDBFQUEwRTtBQUMxRSxTQUNFLHdCQUF3QixFQUN4QixhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLHFCQUFxQixRQUNoQixvQkFBb0IifQ==
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9vcGVuZWxlbWVudC9vcGVuZWxlbWVudC9wYWNrYWdlcy9jb3JlL3NyYy9zdGF0aWMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAb3BlbmVsZW1lbnQvY29yZS9zdGF0aWMgLSBTU1IvU1NHIHJ1bnRpbWUgc3VyZmFjZS5cbiAqXG4gKiBQdXJlIHN0YXRpYyByZW5kZXJpbmcgZW50cnkgcG9pbnQuIENvbnRhaW5zIGV2ZXJ5dGhpbmcgbmVlZGVkIHRvIGNyZWF0ZVxuICogVk5vZGVzIGFuZCByZW5kZXIgdGhlbSB0byBEU0QvSFRNTCBzdHJpbmdzLCB3aXRob3V0IHB1bGxpbmcgaW4gYW55IERPTVxuICogYmluZGluZywgZWZmZWN0LCBvciBoeWRyYXRpb24gY29kZS5cbiAqXG4gKiBBRFItMDEwOSBQaGFzZSAxOiBzcGxpdCBAb3BlbmVsZW1lbnQvY29yZSBpbnRvIHN0YXRpYywgaHlkcmF0ZSwgYW5kIGNzci5cbiAqL1xuXG4vLyBWTm9kZSAvIEpTWCBydW50aW1lXG5leHBvcnQgdHlwZSB7IFZOb2RlIH0gZnJvbSAnQG9wZW5lbGVtZW50L3Byb3RvY29sL3Zub2RlJztcbmV4cG9ydCB7IGlzVk5vZGUgfSBmcm9tICcuL3Zub2RlLmpzJztcbmV4cG9ydCB7IEZvciwgRnJhZ21lbnQsIGpzeCwganN4REVWLCBqc3hzLCBTaG93LCB0cnVzdGVkSHRtbCB9IGZyb20gJy4vanN4LXJ1bnRpbWUuanMnO1xuXG4vLyBTdGF0aWMgcmVuZGVyaW5nIChJUiArIERTRClcbmV4cG9ydCB7IGNhbWVsVG9LZWJhYiwgcmVuZGVyRHNkVHJlZSwgc2VyaWFsaXplQXR0cnMgfSBmcm9tICcuL3JlbmRlci1pci5qcyc7XG5leHBvcnQgeyByZW5kZXJEc2QgfSBmcm9tICcuL3JlbmRlci1kc2QuanMnO1xuZXhwb3J0IHsgY3JlYXRlUmVuZGVyRHNkU3RyZWFtTWV0cmljcywgcmVuZGVyRHNkU3RyZWFtIH0gZnJvbSAnLi9yZW5kZXItZHNkLXN0cmVhbS5qcyc7XG5leHBvcnQgdHlwZSB7XG4gIFJlbmRlckRzZFN0cmVhbUNodW5rLFxuICBSZW5kZXJEc2RTdHJlYW1Db21wb25lbnQsXG4gIFJlbmRlckRzZFN0cmVhbU1ldHJpY3MsXG4gIFJlbmRlckRzZFN0cmVhbU9wdGlvbnMsXG59IGZyb20gJy4vcmVuZGVyLWRzZC1zdHJlYW0uanMnO1xuZXhwb3J0IHR5cGUgeyBSZW5kZXJEc2RPcHRpb25zIH0gZnJvbSAnLi9yZW5kZXItZHNkLmpzJztcblxuLy8gSFRNTCBlc2NhcGluZyAvIGRvY3VtZW50IHdyYXBwaW5nXG5leHBvcnQge1xuICBlc2NhcGVBdHRyLFxuICBlc2NhcGVBdHRyVmFsdWUsXG4gIGVzY2FwZUh0bWwsXG4gIHJlbmRlclNzckVycm9yLFxuICB3cmFwSW5Eb2N1bWVudCxcbn0gZnJvbSAnLi9odG1sLWVzY2FwZS5qcyc7XG5leHBvcnQgdHlwZSB7IFNhZmVIdG1sLCBVbnNhZmVIdG1sIH0gZnJvbSAnQG9wZW5lbGVtZW50L3Byb3RvY29sL2ZyYW1ld29yayc7XG5cbi8vIFNlY3VyaXR5IC8gZXJyb3JzIC8gbG9nZ2luZ1xuLyoqIEBpbnRlcm5hbCDigJQgdXNlIEBvcGVuZWxlbWVudC9jb3JlL3NlY3VyaXR5IHN1YnBhdGggKi9cbmV4cG9ydCB7IERBTkdFUk9VU19LRVlTIH0gZnJvbSAnLi9zZWN1cml0eS5qcyc7XG5leHBvcnQge1xuICBFUlJPUl9QUkVGSVgsXG4gIEVycm9yQ29kZSxcbiAgZm9ybWF0RXJyb3IsXG4gIE9wZW5FbGVtZW50RXJyb3IsXG4gIFByb3BWYWxpZGF0aW9uRXJyb3IsXG4gIFJlbmRlckVycm9yLFxuICByZXBvcnRFcnJvcixcbiAgc2V0RXJyb3JUZWxlbWV0cnlIb29rLFxuICBTc3JSZW5kZXJFcnJvcixcbn0gZnJvbSAnLi9lcnJvcnMuanMnO1xuZXhwb3J0IHR5cGUgeyBFcnJvclBoYXNlLCBFcnJvclNldmVyaXR5LCBFcnJvclRlbGVtZXRyeUhvb2sgfSBmcm9tICdAb3BlbmVsZW1lbnQvcHJvdG9jb2wvZXJyb3JzJztcbmV4cG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyLmpzJztcblxuLy8gU3RhdGljIHByb3BzIHJ1bnRpbWVcbmV4cG9ydCB7XG4gIGRpc3Bvc2VTdGF0aWNQcm9wcyxcbiAgaGFuZGxlU3RhdGljUHJvcEF0dHJpYnV0ZUNoYW5nZSxcbiAgaW5pdGlhbGl6ZVN0YXRpY1Byb3BzLFxuICBub3JtYWxpemVQcm9wRGVjbCxcbiAgcmVnaXN0ZXJTdGF0aWNPYnNlcnZlZEF0dHJpYnV0ZXMsXG4gIHN5bmNTdGF0aWNQcm9wc0Zyb21BdHRyaWJ1dGVzLFxuICB1bndyYXAsXG59IGZyb20gJy4vcHJvcC5qcyc7XG5leHBvcnQgdHlwZSB7XG4gIE5vcm1hbGl6ZWRQcm9wRGVjbCxcbiAgUHJvcERlY2wsXG4gIFByb3BEZWNsRnVsbCxcbiAgUHJvcERlY2xTaG9ydGhhbmQsXG4gIFByb3BzRnJvbSxcbiAgUHJvcFR5cGUsXG59IGZyb20gJ0BvcGVuZWxlbWVudC9wcm90b2NvbC9wcm9wJztcblxuLy8gU2lnbmFsIHV0aWxpdGllcyAobmV1dHJhbCwgbm8gRE9NKVxuZXhwb3J0IHsgaXNTaWduYWxMaWtlLCB1bndyYXBTaWduYWxMaWtlIH0gZnJvbSAnQG9wZW5lbGVtZW50L3NpZ25hbCc7XG5leHBvcnQgdHlwZSB7IFNpZ25hbExpa2UsIFVuc3Vic2NyaWJlIH0gZnJvbSAnQG9wZW5lbGVtZW50L3Byb3RvY29sL3NpZ25hbCc7XG5cbi8vIENvbnRleHQgLyByZXF1ZXN0IGhlbHBlcnNcbmV4cG9ydCB7IGNyZWF0ZVNzckNvbnRleHQsIGV4dHJhY3RQYXJhbXMsIHBhcnNlUXVlcnkgfSBmcm9tICcuL2NvbnRleHQuanMnO1xuZXhwb3J0IHR5cGUgeyBJc2xhbmREZXNjcmlwdG9yLCBTc3JDb250ZXh0IH0gZnJvbSAnQG9wZW5lbGVtZW50L3Byb3RvY29sL2NvbnRleHQnO1xuZXhwb3J0IHsgY29uc3VtZUNvbnRleHQsIGNyZWF0ZUNvbnRleHQsIHByb3ZpZGVDb250ZXh0IH0gZnJvbSAnLi9zaWduYWwtY29udGV4dC5qcyc7XG5leHBvcnQgdHlwZSB7IENvbnRleHQgfSBmcm9tICcuL3NpZ25hbC1jb250ZXh0LmpzJztcblxuLy8gTWlzYyBzdGF0aWMgdXRpbGl0aWVzXG5leHBvcnQgeyBpc1ZhbGlkVGFnTmFtZSB9IGZyb20gJy4vdGFnLXV0aWxzLmpzJztcbmV4cG9ydCB7IFN0eWxlU2hlZXQgfSBmcm9tICcuL3N0eWxlLXNoZWV0LmpzJztcbmV4cG9ydCB0eXBlIHsgU3R5bGVTaGVldExpa2UsIFN0eWxlU2hlZXRSdWxlIH0gZnJvbSAnQG9wZW5lbGVtZW50L3Byb3RvY29sL3N0eWxlLXNoZWV0JztcblxuLy8gRXZlbnQgbWFya2VyIHNlcmlhbGl6YXRpb24gKHVzZWQgYnkgU1NSOyBoeWRyYXRpb24gbGl2ZXMgaW4gaHlkcmF0ZS50cylcbmV4cG9ydCB7XG4gIGNyZWF0ZUV2ZW50TWFya2VyQ29udGV4dCxcbiAgZXZlbnRNYXJrZXJJZCxcbiAgZXZlbnRUeXBlRnJvbVByb3AsXG4gIHNlcmlhbGl6ZUV2ZW50TWFya2Vycyxcbn0gZnJvbSAnLi9ldmVudC1tYXJrZXIuanMnO1xuZXhwb3J0IHR5cGUgeyBFdmVudE1hcmtlckNvbnRleHQgfSBmcm9tICcuL2V2ZW50LW1hcmtlci5qcyc7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0NBUUMsR0FFRCxzQkFBc0I7QUFFdEIsU0FBUyxPQUFPLFFBQVEsYUFBYTtBQUNyQyxTQUFTLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFdBQVcsUUFBUSxtQkFBbUI7QUFFdkYsOEJBQThCO0FBQzlCLFNBQVMsWUFBWSxFQUFFLGFBQWEsRUFBRSxjQUFjLFFBQVEsaUJBQWlCO0FBQzdFLFNBQVMsU0FBUyxRQUFRLGtCQUFrQjtBQUM1QyxTQUFTLDRCQUE0QixFQUFFLGVBQWUsUUFBUSx5QkFBeUI7QUFTdkYsb0NBQW9DO0FBQ3BDLFNBQ0UsVUFBVSxFQUNWLGVBQWUsRUFDZixVQUFVLEVBQ1YsY0FBYyxFQUNkLGNBQWMsUUFDVCxtQkFBbUI7QUFHMUIsOEJBQThCO0FBQzlCLHVEQUF1RCxHQUN2RCxTQUFTLGNBQWMsUUFBUSxnQkFBZ0I7QUFDL0MsU0FDRSxZQUFZLEVBQ1osU0FBUyxFQUNULFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsbUJBQW1CLEVBQ25CLFdBQVcsRUFDWCxXQUFXLEVBQ1gscUJBQXFCLEVBQ3JCLGNBQWMsUUFDVCxjQUFjO0FBRXJCLFNBQVMsWUFBWSxRQUFRLGNBQWM7QUFFM0MsdUJBQXVCO0FBQ3ZCLFNBQ0Usa0JBQWtCLEVBQ2xCLCtCQUErQixFQUMvQixxQkFBcUIsRUFDckIsaUJBQWlCLEVBQ2pCLGdDQUFnQyxFQUNoQyw2QkFBNkIsRUFDN0IsTUFBTSxRQUNELFlBQVk7QUFVbkIscUNBQXFDO0FBQ3JDLFNBQVMsWUFBWSxFQUFFLGdCQUFnQixRQUFRLHNCQUFzQjtBQUdyRSw0QkFBNEI7QUFDNUIsU0FBUyxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsVUFBVSxRQUFRLGVBQWU7QUFFM0UsU0FBUyxjQUFjLEVBQUUsYUFBYSxFQUFFLGNBQWMsUUFBUSxzQkFBc0I7QUFHcEYsd0JBQXdCO0FBQ3hCLFNBQVMsY0FBYyxRQUFRLGlCQUFpQjtBQUNoRCxTQUFTLFVBQVUsUUFBUSxtQkFBbUI7QUFHOUMsMEVBQTBFO0FBQzFFLFNBQ0Usd0JBQXdCLEVBQ3hCLGFBQWEsRUFDYixpQkFBaUIsRUFDakIscUJBQXFCLFFBQ2hCLG9CQUFvQiJ9