angular-three 2.0.0-beta.28 → 2.0.0-beta.281
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/README.md +221 -4
- package/esm2022/index.mjs +10 -16
- package/esm2022/lib/canvas.mjs +132 -196
- package/esm2022/lib/directives/args.mjs +46 -20
- package/esm2022/lib/dom/events.mjs +2 -2
- package/esm2022/lib/events.mjs +33 -31
- package/esm2022/lib/html.mjs +39 -0
- package/esm2022/lib/instance.mjs +43 -36
- package/esm2022/lib/loader.mjs +60 -33
- package/esm2022/lib/loop.mjs +29 -26
- package/esm2022/lib/portal.mjs +173 -193
- package/esm2022/lib/renderer/catalogue.mjs +3 -3
- package/esm2022/lib/renderer/constants.mjs +5 -6
- package/esm2022/lib/renderer/index.mjs +357 -231
- package/esm2022/lib/renderer/state.mjs +49 -0
- package/esm2022/lib/renderer/utils.mjs +84 -87
- package/esm2022/lib/roots.mjs +99 -77
- package/esm2022/lib/routed-scene.mjs +6 -7
- package/esm2022/lib/store.mjs +170 -194
- package/esm2022/lib/three-types.mjs +2 -2
- package/esm2022/lib/types.mjs +1 -1
- package/esm2022/lib/utils/apply-props.mjs +24 -28
- package/esm2022/lib/utils/attach.mjs +13 -10
- package/esm2022/lib/utils/before-render.mjs +12 -0
- package/esm2022/lib/utils/is.mjs +6 -5
- package/esm2022/lib/utils/make.mjs +19 -17
- package/esm2022/lib/utils/object-events.mjs +29 -0
- package/esm2022/lib/utils/parameters.mjs +70 -0
- package/esm2022/lib/utils/resolve-ref.mjs +8 -0
- package/esm2022/lib/utils/signal-store.mjs +59 -60
- package/esm2022/lib/utils/update.mjs +6 -2
- package/esm2022/testing/angular-three-testing.mjs +5 -0
- package/esm2022/testing/index.mjs +3 -0
- package/esm2022/testing/lib/test-bed.mjs +130 -0
- package/esm2022/testing/lib/test-canvas.mjs +45 -0
- package/esm2022/testing/lib/utils/mock-canvas.mjs +36 -0
- package/esm2022/testing/lib/utils/web-gl-rendering-context.mjs +752 -0
- package/fesm2022/angular-three-testing.mjs +965 -0
- package/fesm2022/angular-three-testing.mjs.map +1 -0
- package/fesm2022/angular-three.mjs +2398 -2721
- package/fesm2022/angular-three.mjs.map +1 -1
- package/index.d.ts +11 -15
- package/lib/canvas.d.ts +368 -95
- package/lib/directives/args.d.ts +14 -7
- package/lib/dom/events.d.ts +2 -3
- package/lib/events.d.ts +4 -80
- package/lib/html.d.ts +17 -0
- package/lib/instance.d.ts +3 -35
- package/lib/loader.d.ts +19 -7
- package/lib/loop.d.ts +11 -59
- package/lib/portal.d.ts +54 -48
- package/lib/renderer/catalogue.d.ts +7 -3
- package/lib/renderer/constants.d.ts +4 -5
- package/lib/renderer/index.d.ts +64 -4
- package/lib/renderer/state.d.ts +24 -0
- package/lib/renderer/utils.d.ts +8 -26
- package/lib/roots.d.ts +9 -7
- package/lib/store.d.ts +13 -141
- package/lib/three-types.d.ts +499 -147
- package/lib/types.d.ts +290 -0
- package/lib/utils/apply-props.d.ts +1 -3
- package/lib/utils/attach.d.ts +4 -6
- package/lib/{before-render.d.ts → utils/before-render.d.ts} +1 -1
- package/lib/utils/is.d.ts +13 -14
- package/lib/utils/make.d.ts +7 -13
- package/lib/utils/object-events.d.ts +9 -0
- package/lib/utils/parameters.d.ts +20 -0
- package/lib/utils/resolve-ref.d.ts +2 -0
- package/lib/utils/signal-store.d.ts +13 -4
- package/lib/utils/update.d.ts +1 -1
- package/metadata.json +1 -1
- package/package.json +39 -13
- package/plugin/generators.json +0 -32
- package/plugin/src/generators/init/compat.d.ts +1 -3
- package/plugin/src/generators/init/files/experience/experience.component.ts__tmpl__ +18 -7
- package/plugin/src/generators/init/generator.d.ts +5 -5
- package/plugin/src/generators/init/generator.js +98 -105
- package/plugin/src/generators/init/generator.js.map +1 -1
- package/plugin/src/generators/init/schema.json +8 -11
- package/plugin/src/generators/utils.js +1 -2
- package/plugin/src/generators/utils.js.map +1 -1
- package/plugin/src/generators/version.d.ts +4 -0
- package/plugin/src/generators/version.js +8 -0
- package/plugin/src/generators/version.js.map +1 -0
- package/plugin/src/index.d.ts +0 -3
- package/plugin/src/index.js +0 -9
- package/plugin/src/index.js.map +1 -1
- package/testing/README.md +3 -0
- package/testing/index.d.ts +2 -0
- package/testing/lib/test-bed.d.ts +38 -0
- package/testing/lib/test-canvas.d.ts +11 -0
- package/testing/lib/utils/mock-canvas.d.ts +5 -0
- package/testing/lib/utils/web-gl-rendering-context.d.ts +16 -0
- package/web-types.json +1 -1
- package/esm2022/lib/before-render.mjs +0 -13
- package/esm2022/lib/directives/common.mjs +0 -41
- package/esm2022/lib/directives/key.mjs +0 -29
- package/esm2022/lib/directives/parent.mjs +0 -35
- package/esm2022/lib/directives/repeat.mjs +0 -17
- package/esm2022/lib/ref.mjs +0 -48
- package/esm2022/lib/renderer/store.mjs +0 -408
- package/esm2022/lib/utils/assert-injector.mjs +0 -6
- package/esm2022/lib/utils/create-injection-token.mjs +0 -47
- package/esm2022/lib/utils/safe-detect-changes.mjs +0 -17
- package/lib/directives/common.d.ts +0 -15
- package/lib/directives/key.d.ts +0 -10
- package/lib/directives/parent.d.ts +0 -11
- package/lib/directives/repeat.d.ts +0 -7
- package/lib/ref.d.ts +0 -8
- package/lib/renderer/store.d.ts +0 -67
- package/lib/utils/assert-injector.d.ts +0 -2
- package/lib/utils/create-injection-token.d.ts +0 -27
- package/lib/utils/safe-detect-changes.d.ts +0 -2
- package/plugin/package.json +0 -6
- package/plugin/src/generators/init/files/experience/experience.component.html__tmpl__ +0 -4
- package/plugin/src/generators/init-cannon/compat.d.ts +0 -2
- package/plugin/src/generators/init-cannon/compat.js +0 -6
- package/plugin/src/generators/init-cannon/compat.js.map +0 -1
- package/plugin/src/generators/init-cannon/generator.d.ts +0 -2
- package/plugin/src/generators/init-cannon/generator.js +0 -22
- package/plugin/src/generators/init-cannon/generator.js.map +0 -1
- package/plugin/src/generators/init-cannon/schema.json +0 -6
- package/plugin/src/generators/init-postprocessing/compat.d.ts +0 -2
- package/plugin/src/generators/init-postprocessing/compat.js +0 -6
- package/plugin/src/generators/init-postprocessing/compat.js.map +0 -1
- package/plugin/src/generators/init-postprocessing/generator.d.ts +0 -2
- package/plugin/src/generators/init-postprocessing/generator.js +0 -20
- package/plugin/src/generators/init-postprocessing/generator.js.map +0 -1
- package/plugin/src/generators/init-postprocessing/schema.json +0 -6
- package/plugin/src/generators/init-soba/compat.d.ts +0 -2
- package/plugin/src/generators/init-soba/compat.js +0 -6
- package/plugin/src/generators/init-soba/compat.js.map +0 -1
- package/plugin/src/generators/init-soba/generator.d.ts +0 -2
- package/plugin/src/generators/init-soba/generator.js +0 -26
- package/plugin/src/generators/init-soba/generator.js.map +0 -1
- package/plugin/src/generators/init-soba/schema.json +0 -6
- package/plugin/src/generators/versions.d.ts +0 -12
- package/plugin/src/generators/versions.js +0 -16
- package/plugin/src/generators/versions.js.map +0 -1
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { getDebugNode } from '@angular/core';
|
|
2
|
+
export function createNode(type, node, document) {
|
|
3
|
+
const state = [type, null, [], false, undefined, undefined, undefined];
|
|
4
|
+
const rendererNode = Object.assign(node, { __ngt_renderer__: state });
|
|
5
|
+
// NOTE: assign ownerDocument to node so we can use HostListener in Component
|
|
6
|
+
if (!rendererNode['ownerDocument'])
|
|
7
|
+
rendererNode['ownerDocument'] = document;
|
|
8
|
+
// NOTE: assign injectorFactory on non-three type since
|
|
9
|
+
// rendererNode is an instance of DOM Node
|
|
10
|
+
if (state[0 /* NgtRendererClassId.type */] !== 'three') {
|
|
11
|
+
state[6 /* NgtRendererClassId.injectorFactory */] = () => getDebugNode(rendererNode)?.injector;
|
|
12
|
+
}
|
|
13
|
+
return rendererNode;
|
|
14
|
+
}
|
|
15
|
+
export function isDOM(node) {
|
|
16
|
+
const rS = node['__ngt_renderer__'];
|
|
17
|
+
return !rS || node instanceof Element || node instanceof Document || node instanceof Window;
|
|
18
|
+
}
|
|
19
|
+
export function getClosestParentWithInstance(node) {
|
|
20
|
+
let parent = node.__ngt_renderer__[1 /* NgtRendererClassId.parent */];
|
|
21
|
+
if (parent &&
|
|
22
|
+
parent.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'portal' &&
|
|
23
|
+
parent.__ngt_renderer__[5 /* NgtRendererClassId.portalContainer */]?.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'three') {
|
|
24
|
+
return parent.__ngt_renderer__[5 /* NgtRendererClassId.portalContainer */];
|
|
25
|
+
}
|
|
26
|
+
while (parent && parent.__ngt_renderer__[0 /* NgtRendererClassId.type */] !== 'three') {
|
|
27
|
+
parent = parent.__ngt_renderer__[5 /* NgtRendererClassId.portalContainer */]
|
|
28
|
+
? parent.__ngt_renderer__[5 /* NgtRendererClassId.portalContainer */]
|
|
29
|
+
: parent.__ngt_renderer__[1 /* NgtRendererClassId.parent */];
|
|
30
|
+
}
|
|
31
|
+
return parent;
|
|
32
|
+
}
|
|
33
|
+
export function setParent(node, parent) {
|
|
34
|
+
if (!node.__ngt_renderer__[1 /* NgtRendererClassId.parent */]) {
|
|
35
|
+
node.__ngt_renderer__[1 /* NgtRendererClassId.parent */] = parent;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
export function addChild(node, child) {
|
|
39
|
+
if (!node.__ngt_renderer__[2 /* NgtRendererClassId.children */].includes(child)) {
|
|
40
|
+
node.__ngt_renderer__[2 /* NgtRendererClassId.children */].push(child);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
export function removeChild(node, child) {
|
|
44
|
+
const index = node.__ngt_renderer__?.[2 /* NgtRendererClassId.children */].findIndex((c) => child === c);
|
|
45
|
+
if (index >= 0) {
|
|
46
|
+
node.__ngt_renderer__[2 /* NgtRendererClassId.children */].splice(index, 1);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9yZW5kZXJlci9zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVksWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBbUJ2RCxNQUFNLFVBQVUsVUFBVSxDQUFDLElBQStDLEVBQUUsSUFBa0IsRUFBRSxRQUFrQjtJQUNqSCxNQUFNLEtBQUssR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFVLEVBQUUsU0FBVSxFQUFFLFNBQVUsQ0FBcUIsQ0FBQztJQUU5RixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFFdEUsNkVBQTZFO0lBQzdFLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDO1FBQUUsWUFBWSxDQUFDLGVBQWUsQ0FBQyxHQUFHLFFBQVEsQ0FBQztJQUU3RSx1REFBdUQ7SUFDdkQsMENBQTBDO0lBQzFDLElBQUksS0FBSyxpQ0FBeUIsS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUNoRCxLQUFLLDRDQUFvQyxHQUFHLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsRUFBRSxRQUFRLENBQUM7SUFDeEYsQ0FBQztJQUVELE9BQU8sWUFBWSxDQUFDO0FBQ3JCLENBQUM7QUFFRCxNQUFNLFVBQVUsS0FBSyxDQUFDLElBQWtCO0lBQ3ZDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3BDLE9BQU8sQ0FBQyxFQUFFLElBQUksSUFBSSxZQUFZLE9BQU8sSUFBSSxJQUFJLFlBQVksUUFBUSxJQUFJLElBQUksWUFBWSxNQUFNLENBQUM7QUFDN0YsQ0FBQztBQUVELE1BQU0sVUFBVSw0QkFBNEIsQ0FBQyxJQUFxQjtJQUNqRSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLG1DQUEyQixDQUFDO0lBRTlELElBQ0MsTUFBTTtRQUNOLE1BQU0sQ0FBQyxnQkFBZ0IsaUNBQXlCLEtBQUssUUFBUTtRQUM3RCxNQUFNLENBQUMsZ0JBQWdCLDRDQUFvQyxFQUFFLGdCQUFnQixpQ0FBeUIsS0FBSyxPQUFPLEVBQ2pILENBQUM7UUFDRixPQUFPLE1BQU0sQ0FBQyxnQkFBZ0IsNENBQW9DLENBQUM7SUFDcEUsQ0FBQztJQUVELE9BQU8sTUFBTSxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsaUNBQXlCLEtBQUssT0FBTyxFQUFFLENBQUM7UUFDL0UsTUFBTSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsNENBQW9DO1lBQ25FLENBQUMsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLDRDQUFvQztZQUM3RCxDQUFDLENBQUMsTUFBTSxDQUFDLGdCQUFnQixtQ0FBMkIsQ0FBQztJQUN2RCxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDZixDQUFDO0FBRUQsTUFBTSxVQUFVLFNBQVMsQ0FBQyxJQUFxQixFQUFFLE1BQXVCO0lBQ3ZFLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLG1DQUEyQixFQUFFLENBQUM7UUFDdkQsSUFBSSxDQUFDLGdCQUFnQixtQ0FBMkIsR0FBRyxNQUFNLENBQUM7SUFDM0QsQ0FBQztBQUNGLENBQUM7QUFFRCxNQUFNLFVBQVUsUUFBUSxDQUFDLElBQXFCLEVBQUUsS0FBc0I7SUFDckUsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IscUNBQTZCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDekUsSUFBSSxDQUFDLGdCQUFnQixxQ0FBNkIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEUsQ0FBQztBQUNGLENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUFDLElBQXFCLEVBQUUsS0FBc0I7SUFDeEUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLHFDQUE2QixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2pHLElBQUksS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxnQkFBZ0IscUNBQTZCLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0FBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdG9yLCBnZXREZWJ1Z05vZGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5ndEFueVJlY29yZCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IE5ndFJlbmRlcmVyQ2xhc3NJZCB9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgdHlwZSBOZ3RSZW5kZXJlclN0YXRlID0gW1xuXHR0eXBlOiAndGhyZWUnIHwgJ3BvcnRhbCcgfCAnY29tbWVudCcgfCAnZG9tJyxcblx0cGFyZW50OiBOZ3RSZW5kZXJlck5vZGUgfCBudWxsLFxuXHRjaGlsZHJlbjogTmd0UmVuZGVyZXJOb2RlW10sXG5cdGRlc3Ryb3llZDogYm9vbGVhbixcblx0cmF3VmFsdWU6IGFueSxcblx0cG9ydGFsQ29udGFpbmVyOiBOZ3RSZW5kZXJlck5vZGUsXG5cdGluamVjdG9yRmFjdG9yeTogKCkgPT4gSW5qZWN0b3IgfCB1bmRlZmluZWQsXG5dO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndFJlbmRlcmVyTm9kZSB7XG5cdF9fbmd0X3JlbmRlcmVyX186IE5ndFJlbmRlcmVyU3RhdGU7XG5cdF9fbmd0X2RvbV9wYXJlbnRfXz86IEhUTUxFbGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTm9kZSh0eXBlOiBOZ3RSZW5kZXJlclN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSwgbm9kZTogTmd0QW55UmVjb3JkLCBkb2N1bWVudDogRG9jdW1lbnQpIHtcblx0Y29uc3Qgc3RhdGUgPSBbdHlwZSwgbnVsbCwgW10sIGZhbHNlLCB1bmRlZmluZWQhLCB1bmRlZmluZWQhLCB1bmRlZmluZWQhXSBhcyBOZ3RSZW5kZXJlclN0YXRlO1xuXG5cdGNvbnN0IHJlbmRlcmVyTm9kZSA9IE9iamVjdC5hc3NpZ24obm9kZSwgeyBfX25ndF9yZW5kZXJlcl9fOiBzdGF0ZSB9KTtcblxuXHQvLyBOT1RFOiBhc3NpZ24gb3duZXJEb2N1bWVudCB0byBub2RlIHNvIHdlIGNhbiB1c2UgSG9zdExpc3RlbmVyIGluIENvbXBvbmVudFxuXHRpZiAoIXJlbmRlcmVyTm9kZVsnb3duZXJEb2N1bWVudCddKSByZW5kZXJlck5vZGVbJ293bmVyRG9jdW1lbnQnXSA9IGRvY3VtZW50O1xuXG5cdC8vIE5PVEU6IGFzc2lnbiBpbmplY3RvckZhY3Rvcnkgb24gbm9uLXRocmVlIHR5cGUgc2luY2Vcblx0Ly8gcmVuZGVyZXJOb2RlIGlzIGFuIGluc3RhbmNlIG9mIERPTSBOb2RlXG5cdGlmIChzdGF0ZVtOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gIT09ICd0aHJlZScpIHtcblx0XHRzdGF0ZVtOZ3RSZW5kZXJlckNsYXNzSWQuaW5qZWN0b3JGYWN0b3J5XSA9ICgpID0+IGdldERlYnVnTm9kZShyZW5kZXJlck5vZGUpPy5pbmplY3Rvcjtcblx0fVxuXG5cdHJldHVybiByZW5kZXJlck5vZGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RPTShub2RlOiBOZ3RBbnlSZWNvcmQpIHtcblx0Y29uc3QgclMgPSBub2RlWydfX25ndF9yZW5kZXJlcl9fJ107XG5cdHJldHVybiAhclMgfHwgbm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIERvY3VtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBXaW5kb3c7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbG9zZXN0UGFyZW50V2l0aEluc3RhbmNlKG5vZGU6IE5ndFJlbmRlcmVyTm9kZSk6IE5ndFJlbmRlcmVyTm9kZSB8IG51bGwge1xuXHRsZXQgcGFyZW50ID0gbm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdO1xuXG5cdGlmIChcblx0XHRwYXJlbnQgJiZcblx0XHRwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdwb3J0YWwnICYmXG5cdFx0cGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnBvcnRhbENvbnRhaW5lcl0/Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnXG5cdCkge1xuXHRcdHJldHVybiBwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXTtcblx0fVxuXG5cdHdoaWxlIChwYXJlbnQgJiYgcGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdICE9PSAndGhyZWUnKSB7XG5cdFx0cGFyZW50ID0gcGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnBvcnRhbENvbnRhaW5lcl1cblx0XHRcdD8gcGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnBvcnRhbENvbnRhaW5lcl1cblx0XHRcdDogcGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnBhcmVudF07XG5cdH1cblxuXHRyZXR1cm4gcGFyZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0UGFyZW50KG5vZGU6IE5ndFJlbmRlcmVyTm9kZSwgcGFyZW50OiBOZ3RSZW5kZXJlck5vZGUpIHtcblx0aWYgKCFub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnBhcmVudF0pIHtcblx0XHRub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnBhcmVudF0gPSBwYXJlbnQ7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZENoaWxkKG5vZGU6IE5ndFJlbmRlcmVyTm9kZSwgY2hpbGQ6IE5ndFJlbmRlcmVyTm9kZSkge1xuXHRpZiAoIW5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY2hpbGRyZW5dLmluY2x1ZGVzKGNoaWxkKSkge1xuXHRcdG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY2hpbGRyZW5dLnB1c2goY2hpbGQpO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVDaGlsZChub2RlOiBOZ3RSZW5kZXJlck5vZGUsIGNoaWxkOiBOZ3RSZW5kZXJlck5vZGUpIHtcblx0Y29uc3QgaW5kZXggPSBub2RlLl9fbmd0X3JlbmRlcmVyX18/LltOZ3RSZW5kZXJlckNsYXNzSWQuY2hpbGRyZW5dLmZpbmRJbmRleCgoYykgPT4gY2hpbGQgPT09IGMpO1xuXHRpZiAoaW5kZXggPj0gMCkge1xuXHRcdG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY2hpbGRyZW5dLnNwbGljZShpbmRleCwgMSk7XG5cdH1cbn1cbiJdfQ==
|
|
@@ -1,42 +1,25 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { untracked } from '@angular/core';
|
|
2
2
|
import { removeInteractivity } from '../events';
|
|
3
3
|
import { getLocalState, invalidateInstance } from '../instance';
|
|
4
4
|
import { attach, detach } from '../utils/attach';
|
|
5
5
|
import { is } from '../utils/is';
|
|
6
|
-
import { safeDetectChanges } from '../utils/safe-detect-changes';
|
|
7
6
|
import { SPECIAL_EVENTS } from './constants';
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
NgtRendererClassId[NgtRendererClassId["portalContainer"] = 13] = "portalContainer";
|
|
25
|
-
NgtRendererClassId[NgtRendererClassId["injectorFactory"] = 14] = "injectorFactory";
|
|
26
|
-
})(NgtRendererClassId || (NgtRendererClassId = {}));
|
|
27
|
-
// @internal
|
|
28
|
-
export var NgtCompoundClassId;
|
|
29
|
-
(function (NgtCompoundClassId) {
|
|
30
|
-
NgtCompoundClassId[NgtCompoundClassId["applyFirst"] = 0] = "applyFirst";
|
|
31
|
-
NgtCompoundClassId[NgtCompoundClassId["props"] = 1] = "props";
|
|
32
|
-
})(NgtCompoundClassId || (NgtCompoundClassId = {}));
|
|
33
|
-
// @internal
|
|
34
|
-
export var NgtQueueOpClassId;
|
|
35
|
-
(function (NgtQueueOpClassId) {
|
|
36
|
-
NgtQueueOpClassId[NgtQueueOpClassId["type"] = 0] = "type";
|
|
37
|
-
NgtQueueOpClassId[NgtQueueOpClassId["op"] = 1] = "op";
|
|
38
|
-
NgtQueueOpClassId[NgtQueueOpClassId["done"] = 2] = "done";
|
|
39
|
-
})(NgtQueueOpClassId || (NgtQueueOpClassId = {}));
|
|
7
|
+
export function kebabToPascal(str) {
|
|
8
|
+
if (!str)
|
|
9
|
+
return str; // Handle empty input
|
|
10
|
+
let pascalStr = '';
|
|
11
|
+
let capitalizeNext = true; // Flag to track capitalization
|
|
12
|
+
for (let i = 0; i < str.length; i++) {
|
|
13
|
+
const char = str[i];
|
|
14
|
+
if (char === '-') {
|
|
15
|
+
capitalizeNext = true;
|
|
16
|
+
continue;
|
|
17
|
+
}
|
|
18
|
+
pascalStr += capitalizeNext ? char.toUpperCase() : char;
|
|
19
|
+
capitalizeNext = false;
|
|
20
|
+
}
|
|
21
|
+
return pascalStr;
|
|
22
|
+
}
|
|
40
23
|
export function attachThreeChild(parent, child) {
|
|
41
24
|
const pLS = getLocalState(parent);
|
|
42
25
|
const cLS = getLocalState(child);
|
|
@@ -45,10 +28,22 @@ export function attachThreeChild(parent, child) {
|
|
|
45
28
|
}
|
|
46
29
|
// whether the child is added to the parent with parent.add()
|
|
47
30
|
let added = false;
|
|
31
|
+
let attached = false;
|
|
48
32
|
// assign store on child if not already exist
|
|
33
|
+
// or child store is not the same as parent store
|
|
49
34
|
// or child store is the parent of parent store
|
|
50
|
-
if (!cLS.store || cLS.store === pLS.store.get('previousRoot')) {
|
|
35
|
+
if (!cLS.store || cLS.store !== pLS.store || cLS.store === pLS.store.get('previousRoot')) {
|
|
51
36
|
cLS.store = pLS.store;
|
|
37
|
+
const grandchildren = [
|
|
38
|
+
...(cLS.objects ? untracked(cLS.objects) : []),
|
|
39
|
+
...(cLS.nonObjects ? untracked(cLS.nonObjects) : []),
|
|
40
|
+
];
|
|
41
|
+
for (const grandchild of grandchildren) {
|
|
42
|
+
const grandChildLS = getLocalState(grandchild);
|
|
43
|
+
if (!grandChildLS)
|
|
44
|
+
continue;
|
|
45
|
+
grandChildLS.store = cLS.store;
|
|
46
|
+
}
|
|
52
47
|
}
|
|
53
48
|
if (cLS.attach) {
|
|
54
49
|
const attachProp = cLS.attach;
|
|
@@ -73,15 +68,13 @@ export function attachThreeChild(parent, child) {
|
|
|
73
68
|
}
|
|
74
69
|
// attach
|
|
75
70
|
if (cLS.isRaw) {
|
|
76
|
-
if (cLS.
|
|
77
|
-
|
|
78
|
-
cLS.parent.set(parent);
|
|
79
|
-
});
|
|
71
|
+
if (cLS.instanceStore.get('parent') !== parent) {
|
|
72
|
+
cLS.setParent(parent);
|
|
80
73
|
}
|
|
81
74
|
// at this point we don't have rawValue yet, so we bail and wait until the Renderer recalls attach
|
|
82
|
-
if (child.__ngt_renderer__[NgtRendererClassId.rawValue] === undefined)
|
|
75
|
+
if (child.__ngt_renderer__[4 /* NgtRendererClassId.rawValue */] === undefined)
|
|
83
76
|
return;
|
|
84
|
-
attach(parent, child.__ngt_renderer__[NgtRendererClassId.rawValue], attachProp);
|
|
77
|
+
attach(parent, child.__ngt_renderer__[4 /* NgtRendererClassId.rawValue */], attachProp, true);
|
|
85
78
|
}
|
|
86
79
|
else {
|
|
87
80
|
attach(parent, child, attachProp);
|
|
@@ -95,13 +88,13 @@ export function attachThreeChild(parent, child) {
|
|
|
95
88
|
added = true;
|
|
96
89
|
}
|
|
97
90
|
pLS.add(child, added ? 'objects' : 'nonObjects');
|
|
98
|
-
if (cLS.parent && cLS.parent
|
|
99
|
-
|
|
100
|
-
cLS.parent.set(parent);
|
|
101
|
-
});
|
|
91
|
+
if (cLS.parent && untracked(cLS.parent) !== parent) {
|
|
92
|
+
cLS.setParent(parent);
|
|
102
93
|
}
|
|
103
|
-
|
|
104
|
-
|
|
94
|
+
// NOTE: this does not mean that the child is actually attached to the parent on the scenegraph.
|
|
95
|
+
// a child on the Angular template can also emit onAttach
|
|
96
|
+
if (cLS.onAttach)
|
|
97
|
+
cLS.onAttach({ parent, node: child });
|
|
105
98
|
invalidateInstance(child);
|
|
106
99
|
invalidateInstance(parent);
|
|
107
100
|
}
|
|
@@ -109,24 +102,22 @@ export function removeThreeChild(parent, child, dispose) {
|
|
|
109
102
|
const pLS = getLocalState(parent);
|
|
110
103
|
const cLS = getLocalState(child);
|
|
111
104
|
// clear parent ref
|
|
112
|
-
|
|
113
|
-
cLS.parent?.set(null);
|
|
114
|
-
});
|
|
105
|
+
cLS?.setParent(null);
|
|
115
106
|
// remove child from parent
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
if (
|
|
119
|
-
pLS.remove(child, 'nonObjects');
|
|
120
|
-
if (cLS.attach) {
|
|
107
|
+
pLS?.remove(child, 'objects');
|
|
108
|
+
pLS?.remove(child, 'nonObjects');
|
|
109
|
+
if (cLS?.attach) {
|
|
121
110
|
detach(parent, child, cLS.attach);
|
|
122
111
|
}
|
|
123
112
|
else if (is.object3D(parent) && is.object3D(child)) {
|
|
124
113
|
parent.remove(child);
|
|
125
|
-
|
|
114
|
+
const store = cLS?.store || pLS?.store;
|
|
115
|
+
if (store)
|
|
116
|
+
removeInteractivity(store, child);
|
|
126
117
|
}
|
|
127
|
-
const isPrimitive = cLS
|
|
118
|
+
const isPrimitive = cLS?.primitive;
|
|
128
119
|
if (!isPrimitive) {
|
|
129
|
-
removeThreeRecursive(cLS.
|
|
120
|
+
removeThreeRecursive(cLS?.instanceStore.get('objects') || [], child, !!dispose);
|
|
130
121
|
removeThreeRecursive(child.children, child, !!dispose);
|
|
131
122
|
}
|
|
132
123
|
// dispose
|
|
@@ -139,27 +130,31 @@ function removeThreeRecursive(array, parent, dispose) {
|
|
|
139
130
|
if (array)
|
|
140
131
|
[...array].forEach((child) => removeThreeChild(parent, child, dispose));
|
|
141
132
|
}
|
|
142
|
-
export function
|
|
143
|
-
// split the string at each hyphen
|
|
144
|
-
const parts = str.split('-');
|
|
145
|
-
// map over the parts, capitalizing the first letter of each part
|
|
146
|
-
const pascalParts = parts.map((part) => part.charAt(0).toUpperCase() + part.slice(1));
|
|
147
|
-
// join the parts together to create the final PascalCase string
|
|
148
|
-
return pascalParts.join('');
|
|
149
|
-
}
|
|
150
|
-
export function processThreeEvent(instance, priority, eventName, callback, zone, rootCdr, targetCdr) {
|
|
133
|
+
export function processThreeEvent(instance, priority, eventName, callback) {
|
|
151
134
|
const lS = getLocalState(instance);
|
|
135
|
+
if (!lS) {
|
|
136
|
+
console.warn('[NGT] instance has not been prepared yet.');
|
|
137
|
+
return () => { };
|
|
138
|
+
}
|
|
152
139
|
if (eventName === SPECIAL_EVENTS.BEFORE_RENDER) {
|
|
153
140
|
return lS.store
|
|
154
141
|
.get('internal')
|
|
155
142
|
.subscribe((state) => callback({ state, object: instance }), priority || lS.priority || 0);
|
|
156
143
|
}
|
|
157
|
-
if (eventName === SPECIAL_EVENTS.
|
|
158
|
-
|
|
159
|
-
if (
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
return
|
|
144
|
+
if (eventName === SPECIAL_EVENTS.ATTACHED) {
|
|
145
|
+
lS.onAttach = callback;
|
|
146
|
+
if (untracked(lS.parent)) {
|
|
147
|
+
lS.onAttach({ parent: untracked(lS.parent), node: instance });
|
|
148
|
+
}
|
|
149
|
+
return () => {
|
|
150
|
+
lS.onAttach = undefined;
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
if (eventName === SPECIAL_EVENTS.UPDATED) {
|
|
154
|
+
lS.onUpdate = callback;
|
|
155
|
+
return () => {
|
|
156
|
+
lS.onUpdate = undefined;
|
|
157
|
+
};
|
|
163
158
|
}
|
|
164
159
|
if (!lS.handlers)
|
|
165
160
|
lS.handlers = {};
|
|
@@ -169,29 +164,31 @@ export function processThreeEvent(instance, priority, eventName, callback, zone,
|
|
|
169
164
|
const updatedCallback = (event) => {
|
|
170
165
|
if (previousHandler)
|
|
171
166
|
previousHandler(event);
|
|
172
|
-
|
|
173
|
-
callback(event);
|
|
174
|
-
safeDetectChanges(targetCdr, rootCdr);
|
|
175
|
-
});
|
|
167
|
+
callback(event);
|
|
176
168
|
};
|
|
177
169
|
Object.assign(lS.handlers, { [eventName]: updatedCallback });
|
|
178
170
|
// increment the count everytime
|
|
179
171
|
lS.eventCount += 1;
|
|
180
172
|
// but only add the instance (target) to the interaction array (so that it is handled by the EventManager with Raycast)
|
|
181
173
|
// the first time eventCount is incremented
|
|
182
|
-
if (lS.eventCount === 1 && instance['raycast'])
|
|
183
|
-
lS.store
|
|
174
|
+
if (lS.eventCount === 1 && instance['raycast']) {
|
|
175
|
+
let root = lS.store;
|
|
176
|
+
while (root.get('previousRoot')) {
|
|
177
|
+
root = root.get('previousRoot');
|
|
178
|
+
}
|
|
179
|
+
const interactions = root.get('internal', 'interaction') || [];
|
|
180
|
+
interactions.push(instance);
|
|
181
|
+
}
|
|
184
182
|
// clean up the event listener by removing the target from the interaction array
|
|
185
183
|
return () => {
|
|
186
|
-
const
|
|
187
|
-
if (
|
|
188
|
-
|
|
189
|
-
const
|
|
190
|
-
|
|
191
|
-
.findIndex((obj) => obj.uuid === instance.uuid);
|
|
184
|
+
const lS = getLocalState(instance);
|
|
185
|
+
if (lS) {
|
|
186
|
+
lS.eventCount -= 1;
|
|
187
|
+
const interactions = lS.store.get('internal', 'interaction') || [];
|
|
188
|
+
const index = interactions.findIndex((obj) => obj.uuid === instance.uuid);
|
|
192
189
|
if (index >= 0)
|
|
193
|
-
|
|
190
|
+
interactions.splice(index, 1);
|
|
194
191
|
}
|
|
195
192
|
};
|
|
196
193
|
}
|
|
197
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9yZW5kZXJlci91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2hELE9BQU8sRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQXdCLE1BQU0sYUFBYSxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNqQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTdDLFlBQVk7QUFDWixNQUFNLENBQU4sSUFBa0Isa0JBZ0JqQjtBQWhCRCxXQUFrQixrQkFBa0I7SUFDbkMsMkRBQUksQ0FBQTtJQUNKLCtEQUFNLENBQUE7SUFDTiwrRUFBYyxDQUFBO0lBQ2QsbUVBQVEsQ0FBQTtJQUNSLHFFQUFTLENBQUE7SUFDVCxtRUFBUSxDQUFBO0lBQ1IsK0VBQWMsQ0FBQTtJQUNkLHVFQUFVLENBQUE7SUFDVixtRUFBUSxDQUFBO0lBQ1IsdUVBQVUsQ0FBQTtJQUNWLHdFQUFVLENBQUE7SUFDVixvRUFBUSxDQUFBO0lBQ1IsMERBQUcsQ0FBQTtJQUNILGtGQUFlLENBQUE7SUFDZixrRkFBZSxDQUFBO0FBQ2hCLENBQUMsRUFoQmlCLGtCQUFrQixLQUFsQixrQkFBa0IsUUFnQm5DO0FBRUQsWUFBWTtBQUNaLE1BQU0sQ0FBTixJQUFrQixrQkFHakI7QUFIRCxXQUFrQixrQkFBa0I7SUFDbkMsdUVBQVUsQ0FBQTtJQUNWLDZEQUFLLENBQUE7QUFDTixDQUFDLEVBSGlCLGtCQUFrQixLQUFsQixrQkFBa0IsUUFHbkM7QUFFRCxZQUFZO0FBQ1osTUFBTSxDQUFOLElBQWtCLGlCQUlqQjtBQUpELFdBQWtCLGlCQUFpQjtJQUNsQyx5REFBSSxDQUFBO0lBQ0oscURBQUUsQ0FBQTtJQUNGLHlEQUFJLENBQUE7QUFDTCxDQUFDLEVBSmlCLGlCQUFpQixLQUFqQixpQkFBaUIsUUFJbEM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsTUFBdUIsRUFBRSxLQUFzQjtJQUMvRSxNQUFNLEdBQUcsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEMsTUFBTSxHQUFHLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRWpDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyw2REFBNkQsQ0FBQyxDQUFDO0tBQy9FO0lBRUQsNkRBQTZEO0lBQzdELElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQztJQUVsQiw2Q0FBNkM7SUFDN0MsK0NBQStDO0lBQy9DLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUU7UUFDOUQsR0FBRyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO0tBQ3RCO0lBRUQsSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFO1FBQ2YsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUU5QixJQUFJLE9BQU8sVUFBVSxLQUFLLFVBQVUsRUFBRTtZQUNyQyxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0QsSUFBSSxhQUFhO2dCQUFFLEdBQUcsQ0FBQyxjQUFjLEdBQUcsYUFBYSxDQUFDO1NBQ3REO2FBQU07WUFDTix3Q0FBd0M7WUFDeEMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxFQUFFO2dCQUM3QixrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDMUIsT0FBTzthQUNQO1lBRUQsd0JBQXdCO1lBQ3hCLElBQ0MsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLFVBQVU7Z0JBQzVCLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2IsT0FBTyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUTtnQkFDekMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7Z0JBQ2xCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsRUFDakM7Z0JBQ0QsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQzthQUN4QjtZQUVELFNBQVM7WUFDVCxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUU7Z0JBQ2QsSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxNQUFNLEVBQUU7b0JBQzFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7d0JBQ2QsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3hCLENBQUMsQ0FBQyxDQUFDO2lCQUNIO2dCQUNELGtHQUFrRztnQkFDbEcsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLEtBQUssU0FBUztvQkFBRSxPQUFPO2dCQUM5RSxNQUFNLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQzthQUNoRjtpQkFBTTtnQkFDTixNQUFNLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQzthQUNsQztZQUNELGFBQWE7WUFDYixHQUFHLENBQUMsY0FBYyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDckY7S0FDRDtTQUFNLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ3JELE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEIsS0FBSyxHQUFHLElBQUksQ0FBQztLQUNiO0lBRUQsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRWpELElBQUksR0FBRyxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFLEtBQUssTUFBTSxFQUFFO1FBQzFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDZCxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztLQUNIO0lBRUQsSUFBSSxHQUFHLENBQUMsV0FBVztRQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBRW5FLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFCLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVCLENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsTUFBdUIsRUFBRSxLQUFzQixFQUFFLE9BQWlCO0lBQ2xHLE1BQU0sR0FBRyxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQyxNQUFNLEdBQUcsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFakMsbUJBQW1CO0lBQ25CLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDZCxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QixDQUFDLENBQUMsQ0FBQztJQUVILDJCQUEyQjtJQUMzQixJQUFJLEdBQUcsQ0FBQyxPQUFPLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7UUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN4RSxJQUFJLEdBQUcsQ0FBQyxVQUFVLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7UUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztJQUVqRixJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUU7UUFDZixNQUFNLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDbEM7U0FBTSxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNyRCxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztLQUNuRDtJQUVELE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUM7SUFDbEMsSUFBSSxDQUFDLFdBQVcsRUFBRTtRQUNqQixvQkFBb0IsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsRixvQkFBb0IsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDdkQ7SUFFRCxVQUFVO0lBQ1YsSUFBSSxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ3pELGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ3pDO0lBRUQsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUIsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQUMsS0FBd0IsRUFBRSxNQUF1QixFQUFFLE9BQWdCO0lBQ2hHLElBQUksS0FBSztRQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNwRixDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxHQUFXO0lBQ3hDLGtDQUFrQztJQUNsQyxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRTdCLGlFQUFpRTtJQUNqRSxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV0RixnRUFBZ0U7SUFDaEUsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLENBQUM7QUFFRCxNQUFNLFVBQVUsaUJBQWlCLENBQ2hDLFFBQXlCLEVBQ3pCLFFBQWdCLEVBQ2hCLFNBQWlCLEVBQ2pCLFFBQThCLEVBQzlCLElBQVksRUFDWixPQUEwQixFQUMxQixTQUFvQztJQUVwQyxNQUFNLEVBQUUsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbkMsSUFBSSxTQUFTLEtBQUssY0FBYyxDQUFDLGFBQWEsRUFBRTtRQUMvQyxPQUFPLEVBQUUsQ0FBQyxLQUFLO2FBQ2IsR0FBRyxDQUFDLFVBQVUsQ0FBQzthQUNmLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDO0tBQzVGO0lBRUQsSUFBSSxTQUFTLEtBQUssY0FBYyxDQUFDLFlBQVksSUFBSSxTQUFTLEtBQUssY0FBYyxDQUFDLFlBQVksRUFBRTtRQUMzRixJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDM0QsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4QyxPQUFPLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ2pDO0lBRUQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRO1FBQUUsRUFBRSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFFbkMsb0hBQW9IO0lBQ3BILE1BQU0sZUFBZSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBcUMsQ0FBQyxDQUFDO0lBQzNFLHdCQUF3QjtJQUN4QixNQUFNLGVBQWUsR0FBb0IsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUNsRCxJQUFJLGVBQWU7WUFBRSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDYixRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEIsaUJBQWlCLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxDQUFDO0lBRUYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDO0lBRTdELGdDQUFnQztJQUNoQyxFQUFFLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQztJQUNuQix1SEFBdUg7SUFDdkgsMkNBQTJDO0lBQzNDLElBQUksRUFBRSxDQUFDLFVBQVUsS0FBSyxDQUFDLElBQUksUUFBUSxDQUFDLFNBQVMsQ0FBQztRQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFdkcsZ0ZBQWdGO0lBQ2hGLE9BQU8sR0FBRyxFQUFFO1FBQ1gsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNDLElBQUksVUFBVSxJQUFJLFVBQVUsQ0FBQyxVQUFVLEVBQUU7WUFDeEMsVUFBVSxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUM7WUFDM0IsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUs7aUJBQzVCLEdBQUcsQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDO2lCQUM5QixTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pELElBQUksS0FBSyxJQUFJLENBQUM7Z0JBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDakY7SUFDRixDQUFDLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIEV2ZW50RW1pdHRlciwgTmdab25lLCB1bnRyYWNrZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHJlbW92ZUludGVyYWN0aXZpdHkgfSBmcm9tICcuLi9ldmVudHMnO1xuaW1wb3J0IHsgZ2V0TG9jYWxTdGF0ZSwgaW52YWxpZGF0ZUluc3RhbmNlLCB0eXBlIE5ndEluc3RhbmNlTm9kZSB9IGZyb20gJy4uL2luc3RhbmNlJztcbmltcG9ydCB7IGF0dGFjaCwgZGV0YWNoIH0gZnJvbSAnLi4vdXRpbHMvYXR0YWNoJztcbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vdXRpbHMvaXMnO1xuaW1wb3J0IHsgc2FmZURldGVjdENoYW5nZXMgfSBmcm9tICcuLi91dGlscy9zYWZlLWRldGVjdC1jaGFuZ2VzJztcbmltcG9ydCB7IFNQRUNJQUxfRVZFTlRTIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vLyBAaW50ZXJuYWxcbmV4cG9ydCBjb25zdCBlbnVtIE5ndFJlbmRlcmVyQ2xhc3NJZCB7XG5cdHR5cGUsXG5cdHBhcmVudCxcblx0aW5qZWN0ZWRQYXJlbnQsXG5cdGNoaWxkcmVuLFxuXHRkZXN0cm95ZWQsXG5cdGNvbXBvdW5kLFxuXHRjb21wb3VuZFBhcmVudCxcblx0Y29tcG91bmRlZCxcblx0cXVldWVPcHMsXG5cdGF0dHJpYnV0ZXMsXG5cdHByb3BlcnRpZXMsXG5cdHJhd1ZhbHVlLFxuXHRyZWYsXG5cdHBvcnRhbENvbnRhaW5lcixcblx0aW5qZWN0b3JGYWN0b3J5LFxufVxuXG4vLyBAaW50ZXJuYWxcbmV4cG9ydCBjb25zdCBlbnVtIE5ndENvbXBvdW5kQ2xhc3NJZCB7XG5cdGFwcGx5Rmlyc3QsXG5cdHByb3BzLFxufVxuXG4vLyBAaW50ZXJuYWxcbmV4cG9ydCBjb25zdCBlbnVtIE5ndFF1ZXVlT3BDbGFzc0lkIHtcblx0dHlwZSxcblx0b3AsXG5cdGRvbmUsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2hUaHJlZUNoaWxkKHBhcmVudDogTmd0SW5zdGFuY2VOb2RlLCBjaGlsZDogTmd0SW5zdGFuY2VOb2RlKSB7XG5cdGNvbnN0IHBMUyA9IGdldExvY2FsU3RhdGUocGFyZW50KTtcblx0Y29uc3QgY0xTID0gZ2V0TG9jYWxTdGF0ZShjaGlsZCk7XG5cblx0aWYgKCFwTFMgfHwgIWNMUykge1xuXHRcdHRocm93IG5ldyBFcnJvcihgW05HVF0gVEhSRUUgaW5zdGFuY2VzIG5lZWQgdG8gYmUgcHJlcGFyZWQgd2l0aCBsb2NhbCBzdGF0ZS5gKTtcblx0fVxuXG5cdC8vIHdoZXRoZXIgdGhlIGNoaWxkIGlzIGFkZGVkIHRvIHRoZSBwYXJlbnQgd2l0aCBwYXJlbnQuYWRkKClcblx0bGV0IGFkZGVkID0gZmFsc2U7XG5cblx0Ly8gYXNzaWduIHN0b3JlIG9uIGNoaWxkIGlmIG5vdCBhbHJlYWR5IGV4aXN0XG5cdC8vIG9yIGNoaWxkIHN0b3JlIGlzIHRoZSBwYXJlbnQgb2YgcGFyZW50IHN0b3JlXG5cdGlmICghY0xTLnN0b3JlIHx8IGNMUy5zdG9yZSA9PT0gcExTLnN0b3JlLmdldCgncHJldmlvdXNSb290JykpIHtcblx0XHRjTFMuc3RvcmUgPSBwTFMuc3RvcmU7XG5cdH1cblxuXHRpZiAoY0xTLmF0dGFjaCkge1xuXHRcdGNvbnN0IGF0dGFjaFByb3AgPSBjTFMuYXR0YWNoO1xuXG5cdFx0aWYgKHR5cGVvZiBhdHRhY2hQcm9wID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRjb25zdCBhdHRhY2hDbGVhblVwID0gYXR0YWNoUHJvcChwYXJlbnQsIGNoaWxkLCBjTFMuc3RvcmUpO1xuXHRcdFx0aWYgKGF0dGFjaENsZWFuVXApIGNMUy5wcmV2aW91c0F0dGFjaCA9IGF0dGFjaENsZWFuVXA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIHdlIHNraXAgYXR0YWNoIG5vbmUgaWYgc2V0IGV4cGxpY2l0bHlcblx0XHRcdGlmIChhdHRhY2hQcm9wWzBdID09PSAnbm9uZScpIHtcblx0XHRcdFx0aW52YWxpZGF0ZUluc3RhbmNlKGNoaWxkKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBoYW5kbGUgbWF0ZXJpYWwgYXJyYXlcblx0XHRcdGlmIChcblx0XHRcdFx0YXR0YWNoUHJvcFswXSA9PT0gJ21hdGVyaWFsJyAmJlxuXHRcdFx0XHRhdHRhY2hQcm9wWzFdICYmXG5cdFx0XHRcdHR5cGVvZiBOdW1iZXIoYXR0YWNoUHJvcFsxXSkgPT09ICdudW1iZXInICYmXG5cdFx0XHRcdGlzLm1hdGVyaWFsKGNoaWxkKSAmJlxuXHRcdFx0XHQhQXJyYXkuaXNBcnJheShwYXJlbnRbJ21hdGVyaWFsJ10pXG5cdFx0XHQpIHtcblx0XHRcdFx0cGFyZW50WydtYXRlcmlhbCddID0gW107XG5cdFx0XHR9XG5cblx0XHRcdC8vIGF0dGFjaFxuXHRcdFx0aWYgKGNMUy5pc1Jhdykge1xuXHRcdFx0XHRpZiAoY0xTLnBhcmVudCAmJiBjTFMucGFyZW50KCkgIT09IHBhcmVudCkge1xuXHRcdFx0XHRcdHVudHJhY2tlZCgoKSA9PiB7XG5cdFx0XHRcdFx0XHRjTFMucGFyZW50LnNldChwYXJlbnQpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIGF0IHRoaXMgcG9pbnQgd2UgZG9uJ3QgaGF2ZSByYXdWYWx1ZSB5ZXQsIHNvIHdlIGJhaWwgYW5kIHdhaXQgdW50aWwgdGhlIFJlbmRlcmVyIHJlY2FsbHMgYXR0YWNoXG5cdFx0XHRcdGlmIChjaGlsZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5yYXdWYWx1ZV0gPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuXHRcdFx0XHRhdHRhY2gocGFyZW50LCBjaGlsZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5yYXdWYWx1ZV0sIGF0dGFjaFByb3ApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YXR0YWNoKHBhcmVudCwgY2hpbGQsIGF0dGFjaFByb3ApO1xuXHRcdFx0fVxuXHRcdFx0Ly8gc2F2ZSB2YWx1ZVxuXHRcdFx0Y0xTLnByZXZpb3VzQXR0YWNoID0gYXR0YWNoUHJvcC5yZWR1Y2UoKHZhbHVlLCBwcm9wZXJ0eSkgPT4gdmFsdWVbcHJvcGVydHldLCBwYXJlbnQpO1xuXHRcdH1cblx0fSBlbHNlIGlmIChpcy5vYmplY3QzRChwYXJlbnQpICYmIGlzLm9iamVjdDNEKGNoaWxkKSkge1xuXHRcdHBhcmVudC5hZGQoY2hpbGQpO1xuXHRcdGFkZGVkID0gdHJ1ZTtcblx0fVxuXG5cdHBMUy5hZGQoY2hpbGQsIGFkZGVkID8gJ29iamVjdHMnIDogJ25vbk9iamVjdHMnKTtcblxuXHRpZiAoY0xTLnBhcmVudCAmJiBjTFMucGFyZW50KCkgIT09IHBhcmVudCkge1xuXHRcdHVudHJhY2tlZCgoKSA9PiB7XG5cdFx0XHRjTFMucGFyZW50LnNldChwYXJlbnQpO1xuXHRcdH0pO1xuXHR9XG5cblx0aWYgKGNMUy5hZnRlckF0dGFjaCkgY0xTLmFmdGVyQXR0YWNoLmVtaXQoeyBwYXJlbnQsIG5vZGU6IGNoaWxkIH0pO1xuXG5cdGludmFsaWRhdGVJbnN0YW5jZShjaGlsZCk7XG5cdGludmFsaWRhdGVJbnN0YW5jZShwYXJlbnQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlVGhyZWVDaGlsZChwYXJlbnQ6IE5ndEluc3RhbmNlTm9kZSwgY2hpbGQ6IE5ndEluc3RhbmNlTm9kZSwgZGlzcG9zZT86IGJvb2xlYW4pIHtcblx0Y29uc3QgcExTID0gZ2V0TG9jYWxTdGF0ZShwYXJlbnQpO1xuXHRjb25zdCBjTFMgPSBnZXRMb2NhbFN0YXRlKGNoaWxkKTtcblxuXHQvLyBjbGVhciBwYXJlbnQgcmVmXG5cdHVudHJhY2tlZCgoKSA9PiB7XG5cdFx0Y0xTLnBhcmVudD8uc2V0KG51bGwpO1xuXHR9KTtcblxuXHQvLyByZW1vdmUgY2hpbGQgZnJvbSBwYXJlbnRcblx0aWYgKHBMUy5vYmplY3RzICYmIHVudHJhY2tlZChwTFMub2JqZWN0cykpIHBMUy5yZW1vdmUoY2hpbGQsICdvYmplY3RzJyk7XG5cdGlmIChwTFMubm9uT2JqZWN0cyAmJiB1bnRyYWNrZWQocExTLm5vbk9iamVjdHMpKSBwTFMucmVtb3ZlKGNoaWxkLCAnbm9uT2JqZWN0cycpO1xuXG5cdGlmIChjTFMuYXR0YWNoKSB7XG5cdFx0ZGV0YWNoKHBhcmVudCwgY2hpbGQsIGNMUy5hdHRhY2gpO1xuXHR9IGVsc2UgaWYgKGlzLm9iamVjdDNEKHBhcmVudCkgJiYgaXMub2JqZWN0M0QoY2hpbGQpKSB7XG5cdFx0cGFyZW50LnJlbW92ZShjaGlsZCk7XG5cdFx0cmVtb3ZlSW50ZXJhY3Rpdml0eShjTFMuc3RvcmUgfHwgcExTLnN0b3JlLCBjaGlsZCk7XG5cdH1cblxuXHRjb25zdCBpc1ByaW1pdGl2ZSA9IGNMUy5wcmltaXRpdmU7XG5cdGlmICghaXNQcmltaXRpdmUpIHtcblx0XHRyZW1vdmVUaHJlZVJlY3Vyc2l2ZShjTFMub2JqZWN0cyA/IHVudHJhY2tlZChjTFMub2JqZWN0cykgOiBbXSwgY2hpbGQsICEhZGlzcG9zZSk7XG5cdFx0cmVtb3ZlVGhyZWVSZWN1cnNpdmUoY2hpbGQuY2hpbGRyZW4sIGNoaWxkLCAhIWRpc3Bvc2UpO1xuXHR9XG5cblx0Ly8gZGlzcG9zZVxuXHRpZiAoIWlzUHJpbWl0aXZlICYmIGNoaWxkWydkaXNwb3NlJ10gJiYgIWlzLnNjZW5lKGNoaWxkKSkge1xuXHRcdHF1ZXVlTWljcm90YXNrKCgpID0+IGNoaWxkWydkaXNwb3NlJ10oKSk7XG5cdH1cblxuXHRpbnZhbGlkYXRlSW5zdGFuY2UocGFyZW50KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlVGhyZWVSZWN1cnNpdmUoYXJyYXk6IE5ndEluc3RhbmNlTm9kZVtdLCBwYXJlbnQ6IE5ndEluc3RhbmNlTm9kZSwgZGlzcG9zZTogYm9vbGVhbikge1xuXHRpZiAoYXJyYXkpIFsuLi5hcnJheV0uZm9yRWFjaCgoY2hpbGQpID0+IHJlbW92ZVRocmVlQ2hpbGQocGFyZW50LCBjaGlsZCwgZGlzcG9zZSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24ga2ViYWJUb1Bhc2NhbChzdHI6IHN0cmluZyk6IHN0cmluZyB7XG5cdC8vIHNwbGl0IHRoZSBzdHJpbmcgYXQgZWFjaCBoeXBoZW5cblx0Y29uc3QgcGFydHMgPSBzdHIuc3BsaXQoJy0nKTtcblxuXHQvLyBtYXAgb3ZlciB0aGUgcGFydHMsIGNhcGl0YWxpemluZyB0aGUgZmlyc3QgbGV0dGVyIG9mIGVhY2ggcGFydFxuXHRjb25zdCBwYXNjYWxQYXJ0cyA9IHBhcnRzLm1hcCgocGFydCkgPT4gcGFydC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHBhcnQuc2xpY2UoMSkpO1xuXG5cdC8vIGpvaW4gdGhlIHBhcnRzIHRvZ2V0aGVyIHRvIGNyZWF0ZSB0aGUgZmluYWwgUGFzY2FsQ2FzZSBzdHJpbmdcblx0cmV0dXJuIHBhc2NhbFBhcnRzLmpvaW4oJycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1RocmVlRXZlbnQoXG5cdGluc3RhbmNlOiBOZ3RJbnN0YW5jZU5vZGUsXG5cdHByaW9yaXR5OiBudW1iZXIsXG5cdGV2ZW50TmFtZTogc3RyaW5nLFxuXHRjYWxsYmFjazogKGV2ZW50OiBhbnkpID0+IHZvaWQsXG5cdHpvbmU6IE5nWm9uZSxcblx0cm9vdENkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG5cdHRhcmdldENkcj86IENoYW5nZURldGVjdG9yUmVmIHwgbnVsbCxcbik6ICgpID0+IHZvaWQge1xuXHRjb25zdCBsUyA9IGdldExvY2FsU3RhdGUoaW5zdGFuY2UpO1xuXHRpZiAoZXZlbnROYW1lID09PSBTUEVDSUFMX0VWRU5UUy5CRUZPUkVfUkVOREVSKSB7XG5cdFx0cmV0dXJuIGxTLnN0b3JlXG5cdFx0XHQuZ2V0KCdpbnRlcm5hbCcpXG5cdFx0XHQuc3Vic2NyaWJlKChzdGF0ZSkgPT4gY2FsbGJhY2soeyBzdGF0ZSwgb2JqZWN0OiBpbnN0YW5jZSB9KSwgcHJpb3JpdHkgfHwgbFMucHJpb3JpdHkgfHwgMCk7XG5cdH1cblxuXHRpZiAoZXZlbnROYW1lID09PSBTUEVDSUFMX0VWRU5UUy5BRlRFUl9VUERBVEUgfHwgZXZlbnROYW1lID09PSBTUEVDSUFMX0VWRU5UUy5BRlRFUl9BVFRBQ0gpIHtcblx0XHRsZXQgZW1pdHRlciA9IGxTW2V2ZW50TmFtZV07XG5cdFx0aWYgKCFlbWl0dGVyKSBlbWl0dGVyID0gbFNbZXZlbnROYW1lXSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblx0XHRjb25zdCBzdWIgPSBlbWl0dGVyLnN1YnNjcmliZShjYWxsYmFjayk7XG5cdFx0cmV0dXJuIHN1Yi51bnN1YnNjcmliZS5iaW5kKHN1Yik7XG5cdH1cblxuXHRpZiAoIWxTLmhhbmRsZXJzKSBsUy5oYW5kbGVycyA9IHt9O1xuXG5cdC8vIHRyeSB0byBnZXQgdGhlIHByZXZpb3VzIGhhbmRsZXIuIGNvbXBvdW5kIG1pZ2h0IGhhdmUgb25lLCB0aGUgVEhSRUUgb2JqZWN0IG1pZ2h0IGFsc28gaGF2ZSBvbmUgd2l0aCB0aGUgc2FtZSBuYW1lXG5cdGNvbnN0IHByZXZpb3VzSGFuZGxlciA9IGxTLmhhbmRsZXJzW2V2ZW50TmFtZSBhcyBrZXlvZiB0eXBlb2YgbFMuaGFuZGxlcnNdO1xuXHQvLyByZWFkanVzdCB0aGUgY2FsbGJhY2tcblx0Y29uc3QgdXBkYXRlZENhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPSAoZXZlbnQpID0+IHtcblx0XHRpZiAocHJldmlvdXNIYW5kbGVyKSBwcmV2aW91c0hhbmRsZXIoZXZlbnQpO1xuXHRcdHpvbmUucnVuKCgpID0+IHtcblx0XHRcdGNhbGxiYWNrKGV2ZW50KTtcblx0XHRcdHNhZmVEZXRlY3RDaGFuZ2VzKHRhcmdldENkciwgcm9vdENkcik7XG5cdFx0fSk7XG5cdH07XG5cblx0T2JqZWN0LmFzc2lnbihsUy5oYW5kbGVycywgeyBbZXZlbnROYW1lXTogdXBkYXRlZENhbGxiYWNrIH0pO1xuXG5cdC8vIGluY3JlbWVudCB0aGUgY291bnQgZXZlcnl0aW1lXG5cdGxTLmV2ZW50Q291bnQgKz0gMTtcblx0Ly8gYnV0IG9ubHkgYWRkIHRoZSBpbnN0YW5jZSAodGFyZ2V0KSB0byB0aGUgaW50ZXJhY3Rpb24gYXJyYXkgKHNvIHRoYXQgaXQgaXMgaGFuZGxlZCBieSB0aGUgRXZlbnRNYW5hZ2VyIHdpdGggUmF5Y2FzdClcblx0Ly8gdGhlIGZpcnN0IHRpbWUgZXZlbnRDb3VudCBpcyBpbmNyZW1lbnRlZFxuXHRpZiAobFMuZXZlbnRDb3VudCA9PT0gMSAmJiBpbnN0YW5jZVsncmF5Y2FzdCddKSBsUy5zdG9yZS5nZXQoJ2ludGVybmFsJywgJ2ludGVyYWN0aW9uJykucHVzaChpbnN0YW5jZSk7XG5cblx0Ly8gY2xlYW4gdXAgdGhlIGV2ZW50IGxpc3RlbmVyIGJ5IHJlbW92aW5nIHRoZSB0YXJnZXQgZnJvbSB0aGUgaW50ZXJhY3Rpb24gYXJyYXlcblx0cmV0dXJuICgpID0+IHtcblx0XHRjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShpbnN0YW5jZSk7XG5cdFx0aWYgKGxvY2FsU3RhdGUgJiYgbG9jYWxTdGF0ZS5ldmVudENvdW50KSB7XG5cdFx0XHRsb2NhbFN0YXRlLmV2ZW50Q291bnQgLT0gMTtcblx0XHRcdGNvbnN0IGluZGV4ID0gbG9jYWxTdGF0ZS5zdG9yZVxuXHRcdFx0XHQuZ2V0KCdpbnRlcm5hbCcsICdpbnRlcmFjdGlvbicpXG5cdFx0XHRcdC5maW5kSW5kZXgoKG9iaikgPT4gb2JqLnV1aWQgPT09IGluc3RhbmNlLnV1aWQpO1xuXHRcdFx0aWYgKGluZGV4ID49IDApIGxvY2FsU3RhdGUuc3RvcmUuZ2V0KCdpbnRlcm5hbCcsICdpbnRlcmFjdGlvbicpLnNwbGljZShpbmRleCwgMSk7XG5cdFx0fVxuXHR9O1xufVxuIl19
|
|
194
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9yZW5kZXJlci91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNoRCxPQUFPLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWhFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNqQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBYTdDLE1BQU0sVUFBVSxhQUFhLENBQUMsR0FBVztJQUN4QyxJQUFJLENBQUMsR0FBRztRQUFFLE9BQU8sR0FBRyxDQUFDLENBQUMscUJBQXFCO0lBRTNDLElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUNuQixJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsQ0FBQywrQkFBK0I7SUFFMUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNyQyxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEIsSUFBSSxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDbEIsY0FBYyxHQUFHLElBQUksQ0FBQztZQUN0QixTQUFTO1FBQ1YsQ0FBQztRQUVELFNBQVMsSUFBSSxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3hELGNBQWMsR0FBRyxLQUFLLENBQUM7SUFDeEIsQ0FBQztJ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SSxDQUFDO2dCQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQy9DLENBQUM7SUFDRixDQUFDLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdW50cmFja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyByZW1vdmVJbnRlcmFjdGl2aXR5IH0gZnJvbSAnLi4vZXZlbnRzJztcbmltcG9ydCB7IGdldExvY2FsU3RhdGUsIGludmFsaWRhdGVJbnN0YW5jZSB9IGZyb20gJy4uL2luc3RhbmNlJztcbmltcG9ydCB7IE5ndEluc3RhbmNlTm9kZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGF0dGFjaCwgZGV0YWNoIH0gZnJvbSAnLi4vdXRpbHMvYXR0YWNoJztcbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vdXRpbHMvaXMnO1xuaW1wb3J0IHsgU1BFQ0lBTF9FVkVOVFMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbi8vIEBpbnRlcm5hbFxuZXhwb3J0IGNvbnN0IGVudW0gTmd0UmVuZGVyZXJDbGFzc0lkIHtcblx0dHlwZSxcblx0cGFyZW50LFxuXHRjaGlsZHJlbixcblx0ZGVzdHJveWVkLFxuXHRyYXdWYWx1ZSxcblx0cG9ydGFsQ29udGFpbmVyLFxuXHRpbmplY3RvckZhY3RvcnksXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBrZWJhYlRvUGFzY2FsKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcblx0aWYgKCFzdHIpIHJldHVybiBzdHI7IC8vIEhhbmRsZSBlbXB0eSBpbnB1dFxuXG5cdGxldCBwYXNjYWxTdHIgPSAnJztcblx0bGV0IGNhcGl0YWxpemVOZXh0ID0gdHJ1ZTsgLy8gRmxhZyB0byB0cmFjayBjYXBpdGFsaXphdGlvblxuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3QgY2hhciA9IHN0cltpXTtcblx0XHRpZiAoY2hhciA9PT0gJy0nKSB7XG5cdFx0XHRjYXBpdGFsaXplTmV4dCA9IHRydWU7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRwYXNjYWxTdHIgKz0gY2FwaXRhbGl6ZU5leHQgPyBjaGFyLnRvVXBwZXJDYXNlKCkgOiBjaGFyO1xuXHRcdGNhcGl0YWxpemVOZXh0ID0gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gcGFzY2FsU3RyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNoVGhyZWVDaGlsZChwYXJlbnQ6IE5ndEluc3RhbmNlTm9kZSwgY2hpbGQ6IE5ndEluc3RhbmNlTm9kZSkge1xuXHRjb25zdCBwTFMgPSBnZXRMb2NhbFN0YXRlKHBhcmVudCk7XG5cdGNvbnN0IGNMUyA9IGdldExvY2FsU3RhdGUoY2hpbGQpO1xuXG5cdGlmICghcExTIHx8ICFjTFMpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYFtOR1RdIFRIUkVFIGluc3RhbmNlcyBuZWVkIHRvIGJlIHByZXBhcmVkIHdpdGggbG9jYWwgc3RhdGUuYCk7XG5cdH1cblxuXHQvLyB3aGV0aGVyIHRoZSBjaGlsZCBpcyBhZGRlZCB0byB0aGUgcGFyZW50IHdpdGggcGFyZW50LmFkZCgpXG5cdGxldCBhZGRlZCA9IGZhbHNlO1xuXHRsZXQgYXR0YWNoZWQgPSBmYWxzZTtcblxuXHQvLyBhc3NpZ24gc3RvcmUgb24gY2hpbGQgaWYgbm90IGFscmVhZHkgZXhpc3Rcblx0Ly8gb3IgY2hpbGQgc3RvcmUgaXMgbm90IHRoZSBzYW1lIGFzIHBhcmVudCBzdG9yZVxuXHQvLyBvciBjaGlsZCBzdG9yZSBpcyB0aGUgcGFyZW50IG9mIHBhcmVudCBzdG9yZVxuXHRpZiAoIWNMUy5zdG9yZSB8fCBjTFMuc3RvcmUgIT09IHBMUy5zdG9yZSB8fCBjTFMuc3RvcmUgPT09IHBMUy5zdG9yZS5nZXQoJ3ByZXZpb3VzUm9vdCcpKSB7XG5cdFx0Y0xTLnN0b3JlID0gcExTLnN0b3JlO1xuXHRcdGNvbnN0IGdyYW5kY2hpbGRyZW4gPSBbXG5cdFx0XHQuLi4oY0xTLm9iamVjdHMgPyB1bnRyYWNrZWQoY0xTLm9iamVjdHMpIDogW10pLFxuXHRcdFx0Li4uKGNMUy5ub25PYmplY3RzID8gdW50cmFja2VkKGNMUy5ub25PYmplY3RzKSA6IFtdKSxcblx0XHRdO1xuXHRcdGZvciAoY29uc3QgZ3JhbmRjaGlsZCBvZiBncmFuZGNoaWxkcmVuKSB7XG5cdFx0XHRjb25zdCBncmFuZENoaWxkTFMgPSBnZXRMb2NhbFN0YXRlKGdyYW5kY2hpbGQpO1xuXHRcdFx0aWYgKCFncmFuZENoaWxkTFMpIGNvbnRpbnVlO1xuXHRcdFx0Z3JhbmRDaGlsZExTLnN0b3JlID0gY0xTLnN0b3JlO1xuXHRcdH1cblx0fVxuXG5cdGlmIChjTFMuYXR0YWNoKSB7XG5cdFx0Y29uc3QgYXR0YWNoUHJvcCA9IGNMUy5hdHRhY2g7XG5cblx0XHRpZiAodHlwZW9mIGF0dGFjaFByb3AgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGNvbnN0IGF0dGFjaENsZWFuVXAgPSBhdHRhY2hQcm9wKHBhcmVudCwgY2hpbGQsIGNMUy5zdG9yZSk7XG5cdFx0XHRpZiAoYXR0YWNoQ2xlYW5VcCkgY0xTLnByZXZpb3VzQXR0YWNoID0gYXR0YWNoQ2xlYW5VcDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gd2Ugc2tpcCBhdHRhY2ggbm9uZSBpZiBzZXQgZXhwbGljaXRseVxuXHRcdFx0aWYgKGF0dGFjaFByb3BbMF0gPT09ICdub25lJykge1xuXHRcdFx0XHRpbnZhbGlkYXRlSW5zdGFuY2UoY2hpbGQpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIGhhbmRsZSBtYXRlcmlhbCBhcnJheVxuXHRcdFx0aWYgKFxuXHRcdFx0XHRhdHRhY2hQcm9wWzBdID09PSAnbWF0ZXJpYWwnICYmXG5cdFx0XHRcdGF0dGFjaFByb3BbMV0gJiZcblx0XHRcdFx0dHlwZW9mIE51bWJlcihhdHRhY2hQcm9wWzFdKSA9PT0gJ251bWJlcicgJiZcblx0XHRcdFx0aXMubWF0ZXJpYWwoY2hpbGQpICYmXG5cdFx0XHRcdCFBcnJheS5pc0FycmF5KHBhcmVudFsnbWF0ZXJpYWwnXSlcblx0XHRcdCkge1xuXHRcdFx0XHRwYXJlbnRbJ21hdGVyaWFsJ10gPSBbXTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gYXR0YWNoXG5cdFx0XHRpZiAoY0xTLmlzUmF3KSB7XG5cdFx0XHRcdGlmIChjTFMuaW5zdGFuY2VTdG9yZS5nZXQoJ3BhcmVudCcpICE9PSBwYXJlbnQpIHtcblx0XHRcdFx0XHRjTFMuc2V0UGFyZW50KHBhcmVudCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gYXQgdGhpcyBwb2ludCB3ZSBkb24ndCBoYXZlIHJhd1ZhbHVlIHlldCwgc28gd2UgYmFpbCBhbmQgd2FpdCB1bnRpbCB0aGUgUmVuZGVyZXIgcmVjYWxscyBhdHRhY2hcblx0XHRcdFx0aWYgKGNoaWxkLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnJhd1ZhbHVlXSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG5cdFx0XHRcdGF0dGFjaChwYXJlbnQsIGNoaWxkLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnJhd1ZhbHVlXSwgYXR0YWNoUHJvcCwgdHJ1ZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhdHRhY2gocGFyZW50LCBjaGlsZCwgYXR0YWNoUHJvcCk7XG5cdFx0XHR9XG5cdFx0XHQvLyBzYXZlIHZhbHVlXG5cdFx0XHRjTFMucHJldmlvdXNBdHRhY2ggPSBhdHRhY2hQcm9wLnJlZHVjZSgodmFsdWUsIHByb3BlcnR5KSA9PiB2YWx1ZVtwcm9wZXJ0eV0sIHBhcmVudCk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGlzLm9iamVjdDNEKHBhcmVudCkgJiYgaXMub2JqZWN0M0QoY2hpbGQpKSB7XG5cdFx0cGFyZW50LmFkZChjaGlsZCk7XG5cdFx0YWRkZWQgPSB0cnVlO1xuXHR9XG5cblx0cExTLmFkZChjaGlsZCwgYWRkZWQgPyAnb2JqZWN0cycgOiAnbm9uT2JqZWN0cycpO1xuXG5cdGlmIChjTFMucGFyZW50ICYmIHVudHJhY2tlZChjTFMucGFyZW50KSAhPT0gcGFyZW50KSB7XG5cdFx0Y0xTLnNldFBhcmVudChwYXJlbnQpO1xuXHR9XG5cblx0Ly8gTk9URTogdGhpcyBkb2VzIG5vdCBtZWFuIHRoYXQgdGhlIGNoaWxkIGlzIGFjdHVhbGx5IGF0dGFjaGVkIHRvIHRoZSBwYXJlbnQgb24gdGhlIHNjZW5lZ3JhcGguXG5cdC8vICBhIGNoaWxkIG9uIHRoZSBBbmd1bGFyIHRlbXBsYXRlIGNhbiBhbHNvIGVtaXQgb25BdHRhY2hcblx0aWYgKGNMUy5vbkF0dGFjaCkgY0xTLm9uQXR0YWNoKHsgcGFyZW50LCBub2RlOiBjaGlsZCB9KTtcblxuXHRpbnZhbGlkYXRlSW5zdGFuY2UoY2hpbGQpO1xuXHRpbnZhbGlkYXRlSW5zdGFuY2UocGFyZW50KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVRocmVlQ2hpbGQocGFyZW50OiBOZ3RJbnN0YW5jZU5vZGUsIGNoaWxkOiBOZ3RJbnN0YW5jZU5vZGUsIGRpc3Bvc2U/OiBib29sZWFuKSB7XG5cdGNvbnN0IHBMUyA9IGdldExvY2FsU3RhdGUocGFyZW50KTtcblx0Y29uc3QgY0xTID0gZ2V0TG9jYWxTdGF0ZShjaGlsZCk7XG5cblx0Ly8gY2xlYXIgcGFyZW50IHJlZlxuXHRjTFM/LnNldFBhcmVudChudWxsKTtcblxuXHQvLyByZW1vdmUgY2hpbGQgZnJvbSBwYXJlbnRcblx0cExTPy5yZW1vdmUoY2hpbGQsICdvYmplY3RzJyk7XG5cdHBMUz8ucmVtb3ZlKGNoaWxkLCAnbm9uT2JqZWN0cycpO1xuXG5cdGlmIChjTFM/LmF0dGFjaCkge1xuXHRcdGRldGFjaChwYXJlbnQsIGNoaWxkLCBjTFMuYXR0YWNoKTtcblx0fSBlbHNlIGlmIChpcy5vYmplY3QzRChwYXJlbnQpICYmIGlzLm9iamVjdDNEKGNoaWxkKSkge1xuXHRcdHBhcmVudC5yZW1vdmUoY2hpbGQpO1xuXHRcdGNvbnN0IHN0b3JlID0gY0xTPy5zdG9yZSB8fCBwTFM/LnN0b3JlO1xuXHRcdGlmIChzdG9yZSkgcmVtb3ZlSW50ZXJhY3Rpdml0eShzdG9yZSwgY2hpbGQpO1xuXHR9XG5cblx0Y29uc3QgaXNQcmltaXRpdmUgPSBjTFM/LnByaW1pdGl2ZTtcblx0aWYgKCFpc1ByaW1pdGl2ZSkge1xuXHRcdHJlbW92ZVRocmVlUmVjdXJzaXZlKGNMUz8uaW5zdGFuY2VTdG9yZS5nZXQoJ29iamVjdHMnKSB8fCBbXSwgY2hpbGQsICEhZGlzcG9zZSk7XG5cdFx0cmVtb3ZlVGhyZWVSZWN1cnNpdmUoY2hpbGQuY2hpbGRyZW4sIGNoaWxkLCAhIWRpc3Bvc2UpO1xuXHR9XG5cblx0Ly8gZGlzcG9zZVxuXHRpZiAoIWlzUHJpbWl0aXZlICYmIGNoaWxkWydkaXNwb3NlJ10gJiYgIWlzLnNjZW5lKGNoaWxkKSkge1xuXHRcdHF1ZXVlTWljcm90YXNrKCgpID0+IGNoaWxkWydkaXNwb3NlJ10oKSk7XG5cdH1cblxuXHRpbnZhbGlkYXRlSW5zdGFuY2UocGFyZW50KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlVGhyZWVSZWN1cnNpdmUoYXJyYXk6IE5ndEluc3RhbmNlTm9kZVtdLCBwYXJlbnQ6IE5ndEluc3RhbmNlTm9kZSwgZGlzcG9zZTogYm9vbGVhbikge1xuXHRpZiAoYXJyYXkpIFsuLi5hcnJheV0uZm9yRWFjaCgoY2hpbGQpID0+IHJlbW92ZVRocmVlQ2hpbGQocGFyZW50LCBjaGlsZCwgZGlzcG9zZSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1RocmVlRXZlbnQoXG5cdGluc3RhbmNlOiBOZ3RJbnN0YW5jZU5vZGUsXG5cdHByaW9yaXR5OiBudW1iZXIsXG5cdGV2ZW50TmFtZTogc3RyaW5nLFxuXHRjYWxsYmFjazogKGV2ZW50OiBhbnkpID0+IHZvaWQsXG4pOiAoKSA9PiB2b2lkIHtcblx0Y29uc3QgbFMgPSBnZXRMb2NhbFN0YXRlKGluc3RhbmNlKTtcblx0aWYgKCFsUykge1xuXHRcdGNvbnNvbGUud2FybignW05HVF0gaW5zdGFuY2UgaGFzIG5vdCBiZWVuIHByZXBhcmVkIHlldC4nKTtcblx0XHRyZXR1cm4gKCkgPT4ge307XG5cdH1cblxuXHRpZiAoZXZlbnROYW1lID09PSBTUEVDSUFMX0VWRU5UUy5CRUZPUkVfUkVOREVSKSB7XG5cdFx0cmV0dXJuIGxTLnN0b3JlXG5cdFx0XHQuZ2V0KCdpbnRlcm5hbCcpXG5cdFx0XHQuc3Vic2NyaWJlKChzdGF0ZSkgPT4gY2FsbGJhY2soeyBzdGF0ZSwgb2JqZWN0OiBpbnN0YW5jZSB9KSwgcHJpb3JpdHkgfHwgbFMucHJpb3JpdHkgfHwgMCk7XG5cdH1cblxuXHRpZiAoZXZlbnROYW1lID09PSBTUEVDSUFMX0VWRU5UUy5BVFRBQ0hFRCkge1xuXHRcdGxTLm9uQXR0YWNoID0gY2FsbGJhY2s7XG5cdFx0aWYgKHVudHJhY2tlZChsUy5wYXJlbnQpKSB7XG5cdFx0XHRsUy5vbkF0dGFjaCh7IHBhcmVudDogdW50cmFja2VkKGxTLnBhcmVudCksIG5vZGU6IGluc3RhbmNlIH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRsUy5vbkF0dGFjaCA9IHVuZGVmaW5lZDtcblx0XHR9O1xuXHR9XG5cblx0aWYgKGV2ZW50TmFtZSA9PT0gU1BFQ0lBTF9FVkVOVFMuVVBEQVRFRCkge1xuXHRcdGxTLm9uVXBkYXRlID0gY2FsbGJhY2s7XG5cdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdGxTLm9uVXBkYXRlID0gdW5kZWZpbmVkO1xuXHRcdH07XG5cdH1cblxuXHRpZiAoIWxTLmhhbmRsZXJzKSBsUy5oYW5kbGVycyA9IHt9O1xuXG5cdC8vIHRyeSB0byBnZXQgdGhlIHByZXZpb3VzIGhhbmRsZXIuIGNvbXBvdW5kIG1pZ2h0IGhhdmUgb25lLCB0aGUgVEhSRUUgb2JqZWN0IG1pZ2h0IGFsc28gaGF2ZSBvbmUgd2l0aCB0aGUgc2FtZSBuYW1lXG5cdGNvbnN0IHByZXZpb3VzSGFuZGxlciA9IGxTLmhhbmRsZXJzW2V2ZW50TmFtZSBhcyBrZXlvZiB0eXBlb2YgbFMuaGFuZGxlcnNdO1xuXHQvLyByZWFkanVzdCB0aGUgY2FsbGJhY2tcblx0Y29uc3QgdXBkYXRlZENhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPSAoZXZlbnQpID0+IHtcblx0XHRpZiAocHJldmlvdXNIYW5kbGVyKSBwcmV2aW91c0hhbmRsZXIoZXZlbnQpO1xuXHRcdGNhbGxiYWNrKGV2ZW50KTtcblx0fTtcblxuXHRPYmplY3QuYXNzaWduKGxTLmhhbmRsZXJzLCB7IFtldmVudE5hbWVdOiB1cGRhdGVkQ2FsbGJhY2sgfSk7XG5cblx0Ly8gaW5jcmVtZW50IHRoZSBjb3VudCBldmVyeXRpbWVcblx0bFMuZXZlbnRDb3VudCArPSAxO1xuXHQvLyBidXQgb25seSBhZGQgdGhlIGluc3RhbmNlICh0YXJnZXQpIHRvIHRoZSBpbnRlcmFjdGlvbiBhcnJheSAoc28gdGhhdCBpdCBpcyBoYW5kbGVkIGJ5IHRoZSBFdmVudE1hbmFnZXIgd2l0aCBSYXljYXN0KVxuXHQvLyB0aGUgZmlyc3QgdGltZSBldmVudENvdW50IGlzIGluY3JlbWVudGVkXG5cdGlmIChsUy5ldmVudENvdW50ID09PSAxICYmIGluc3RhbmNlWydyYXljYXN0J10pIHtcblx0XHRsZXQgcm9vdCA9IGxTLnN0b3JlO1xuXHRcdHdoaWxlIChyb290LmdldCgncHJldmlvdXNSb290JykpIHtcblx0XHRcdHJvb3QgPSByb290LmdldCgncHJldmlvdXNSb290JykhO1xuXHRcdH1cblx0XHRjb25zdCBpbnRlcmFjdGlvbnMgPSByb290LmdldCgnaW50ZXJuYWwnLCAnaW50ZXJhY3Rpb24nKSB8fCBbXTtcblx0XHRpbnRlcmFjdGlvbnMucHVzaChpbnN0YW5jZSk7XG5cdH1cblxuXHQvLyBjbGVhbiB1cCB0aGUgZXZlbnQgbGlzdGVuZXIgYnkgcmVtb3ZpbmcgdGhlIHRhcmdldCBmcm9tIHRoZSBpbnRlcmFjdGlvbiBhcnJheVxuXHRyZXR1cm4gKCkgPT4ge1xuXHRcdGNvbnN0IGxTID0gZ2V0TG9jYWxTdGF0ZShpbnN0YW5jZSk7XG5cdFx0aWYgKGxTKSB7XG5cdFx0XHRsUy5ldmVudENvdW50IC09IDE7XG5cdFx0XHRjb25zdCBpbnRlcmFjdGlvbnMgPSBsUy5zdG9yZS5nZXQoJ2ludGVybmFsJywgJ2ludGVyYWN0aW9uJykgfHwgW107XG5cdFx0XHRjb25zdCBpbmRleCA9IGludGVyYWN0aW9ucy5maW5kSW5kZXgoKG9iaikgPT4gb2JqLnV1aWQgPT09IGluc3RhbmNlLnV1aWQpO1xuXHRcdFx0aWYgKGluZGV4ID49IDApIGludGVyYWN0aW9ucy5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdH1cblx0fTtcbn1cbiJdfQ==
|