angular-three-cannon 2.0.0-beta.5 → 2.0.0-beta.6
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/esm2022/debug/debug.mjs +3 -3
- package/esm2022/physics.mjs +6 -6
- package/esm2022/services/body.mjs +21 -18
- package/fesm2022/angular-three-cannon-debug.mjs +3 -3
- package/fesm2022/angular-three-cannon-services.mjs +20 -17
- package/fesm2022/angular-three-cannon-services.mjs.map +1 -1
- package/fesm2022/angular-three-cannon.mjs +5 -5
- package/fesm2022/angular-three-cannon.mjs.map +1 -1
- package/package.json +1 -1
- package/plugin/package.json +1 -1
package/esm2022/debug/debug.mjs
CHANGED
|
@@ -67,14 +67,14 @@ class NgtcDebug {
|
|
|
67
67
|
scale: this.scale,
|
|
68
68
|
});
|
|
69
69
|
}
|
|
70
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.
|
|
71
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.
|
|
70
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: NgtcDebug, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
71
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.3", type: NgtcDebug, isStandalone: true, selector: "ngtc-debug", inputs: { color: "color", scale: "scale", impl: "impl", disabled: "disabled" }, providers: [{ provide: NGTC_DEBUG_API, useFactory: (debug) => debug.api, deps: [NgtcDebug] }], ngImport: i0, template: `
|
|
72
72
|
<ngt-primitive *args="[scene]" />
|
|
73
73
|
<ng-content />
|
|
74
74
|
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "[args]", inputs: ["args"] }] }); }
|
|
75
75
|
}
|
|
76
76
|
export { NgtcDebug };
|
|
77
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.
|
|
77
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: NgtcDebug, decorators: [{
|
|
78
78
|
type: Component,
|
|
79
79
|
args: [{
|
|
80
80
|
selector: 'ngtc-debug',
|
package/esm2022/physics.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Component, InjectionToken, Input, computed, effect, inject, untracked } from '@angular/core';
|
|
2
2
|
import { CannonWorkerAPI, } from '@pmndrs/cannon-worker-api';
|
|
3
|
-
import { NgtSignalStore, NgtStore, injectBeforeRender,
|
|
3
|
+
import { NgtSignalStore, NgtStore, injectBeforeRender, requestAnimationFrameInInjectionContext, } from 'angular-three';
|
|
4
4
|
import * as THREE from 'three';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
const v = new THREE.Vector3();
|
|
@@ -137,7 +137,7 @@ class NgtcPhysics extends NgtSignalStore {
|
|
|
137
137
|
subscriptions: this.#subscriptions,
|
|
138
138
|
worker: this.worker,
|
|
139
139
|
}));
|
|
140
|
-
|
|
140
|
+
requestAnimationFrameInInjectionContext(() => {
|
|
141
141
|
this.#connectWorker();
|
|
142
142
|
this.#updateWorkerProp('axisIndex');
|
|
143
143
|
this.#updateWorkerProp('broadphase');
|
|
@@ -246,11 +246,11 @@ class NgtcPhysics extends NgtSignalStore {
|
|
|
246
246
|
if (cb)
|
|
247
247
|
cb({ body: body ? this.#refs[body] : null, ray: { uuid, ...rayRest }, ...rest });
|
|
248
248
|
}
|
|
249
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.
|
|
250
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.
|
|
249
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: NgtcPhysics, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
250
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.3", type: NgtcPhysics, isStandalone: true, selector: "ngtc-physics", inputs: { isPaused: "isPaused", maxSubSteps: "maxSubSteps", shouldInvalidate: "shouldInvalidate", stepSize: "stepSize", size: "size", allowSleep: "allowSleep", axisIndex: "axisIndex", broadphase: "broadphase", defaultContactMaterial: "defaultContactMaterial", frictionGravity: "frictionGravity", gravity: "gravity", iterations: "iterations", quatNormalizeFast: "quatNormalizeFast", quatNormalizeSkip: "quatNormalizeSkip", solver: "solver", tolerance: "tolerance" }, providers: [{ provide: NGTC_PHYSICS_API, useFactory: (physics) => physics.api, deps: [NgtcPhysics] }], usesInheritance: true, ngImport: i0, template: `<ng-content />`, isInline: true }); }
|
|
251
251
|
}
|
|
252
252
|
export { NgtcPhysics };
|
|
253
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.
|
|
253
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: NgtcPhysics, decorators: [{
|
|
254
254
|
type: Component,
|
|
255
255
|
args: [{
|
|
256
256
|
selector: 'ngtc-physics',
|
|
@@ -291,4 +291,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImpor
|
|
|
291
291
|
}], tolerance: [{
|
|
292
292
|
type: Input
|
|
293
293
|
}] } });
|
|
294
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGh5c2ljcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvY2Fubm9uL3NyYy9waHlzaWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQWUsTUFBTSxlQUFlLENBQUM7QUFDbkgsT0FBTyxFQUNILGVBQWUsR0FpQmxCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUNILGNBQWMsRUFDZCxRQUFRLEVBQ1Isa0JBQWtCLEVBQ2xCLGtDQUFrQyxHQUVyQyxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQzs7QUFFL0IsTUFBTSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDOUIsTUFBTSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDckMsTUFBTSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDakMsTUFBTSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7QUFFOUIsU0FBUyxLQUFLLENBQUMsS0FBYSxFQUFFLFNBQXVCLEVBQUUsV0FBeUIsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLE1BQXVCO0lBQ2hILElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRTtRQUNyQixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDekYsSUFBSSxNQUFNLEVBQUU7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QyxPQUFvQixFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsaURBRHhHLGdCQUFnQjs7U0FHakIsV0FBVzsyRkFBWCxXQUFXO2tCQU52QixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxjQUFjO29CQUN4QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLENBQUMsT0FBb0IsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLENBQUM7aUJBQ3JIOzBFQUVnQixRQUFRO3NCQUFwQixLQUFLO2dCQUlPLFdBQVc7c0JBQXZCLEtBQUs7Z0JBSU8sZ0JBQWdCO3NCQUE1QixLQUFLO2dCQUlPLFFBQVE7c0JBQXBCLEtBQUs7Z0JBSU8sSUFBSTtzQkFBaEIsS0FBSztnQkFJTyxVQUFVO3NCQUF0QixLQUFLO2dCQUlPLFNBQVM7c0JBQXJCLEtBQUs7Z0JBSU8sVUFBVTtzQkFBdEIsS0FBSztnQkFJTyxzQkFBc0I7c0JBQWxDLEtBQUs7Z0JBSU8sZUFBZTtzQkFBM0IsS0FBSztnQkFJTyxPQUFPO3NCQUFuQixLQUFLO2dCQUlPLFVBQVU7c0JBQXRCLEtBQUs7Z0JBSU8saUJBQWlCO3NCQUE3QixLQUFLO2dCQUlPLGlCQUFpQjtzQkFBN0IsS0FBSztnQkFJTyxNQUFNO3NCQUFsQixLQUFLO2dCQUlPLFNBQVM7c0JBQXJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdGlvblRva2VuLCBJbnB1dCwgY29tcHV0ZWQsIGVmZmVjdCwgaW5qZWN0LCB1bnRyYWNrZWQsIHR5cGUgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIENhbm5vbldvcmtlckFQSSxcbiAgICB0eXBlIEJyb2FkcGhhc2UsXG4gICAgdHlwZSBDYW5ub25Xb3JrZXJQcm9wcyxcbiAgICB0eXBlIENvbGxpZGVCZWdpbkV2ZW50LFxuICAgIHR5cGUgQ29sbGlkZUVuZEV2ZW50LFxuICAgIHR5cGUgQ29sbGlkZUV2ZW50LFxuICAgIHR5cGUgQ29udGFjdE1hdGVyaWFsT3B0aW9ucyxcbiAgICB0eXBlIFJheWhpdEV2ZW50LFxuICAgIHR5cGUgUmVmcyxcbiAgICB0eXBlIFNvbHZlcixcbiAgICB0eXBlIFN1YnNjcmlwdGlvbnMsXG4gICAgdHlwZSBUcmlwbGV0LFxuICAgIHR5cGUgV29ya2VyQ29sbGlkZUJlZ2luRXZlbnQsXG4gICAgdHlwZSBXb3JrZXJDb2xsaWRlRW5kRXZlbnQsXG4gICAgdHlwZSBXb3JrZXJDb2xsaWRlRXZlbnQsXG4gICAgdHlwZSBXb3JrZXJGcmFtZU1lc3NhZ2UsXG4gICAgdHlwZSBXb3JrZXJSYXloaXRFdmVudCxcbn0gZnJvbSAnQHBtbmRycy9jYW5ub24td29ya2VyLWFwaSc7XG5pbXBvcnQge1xuICAgIE5ndFNpZ25hbFN0b3JlLFxuICAgIE5ndFN0b3JlLFxuICAgIGluamVjdEJlZm9yZVJlbmRlcixcbiAgICByZXF1ZXN0QW5pbWF0aW9uSW5JbmplY3Rpb25Db250ZXh0LFxuICAgIHR5cGUgTmd0UmVuZGVyU3RhdGUsXG59IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuXG5jb25zdCB2ID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcbmNvbnN0IHMgPSBuZXcgVEhSRUUuVmVjdG9yMygxLCAxLCAxKTtcbmNvbnN0IHEgPSBuZXcgVEhSRUUuUXVhdGVybmlvbigpO1xuY29uc3QgbSA9IG5ldyBUSFJFRS5NYXRyaXg0KCk7XG5cbmZ1bmN0aW9uIGFwcGx5KGluZGV4OiBudW1iZXIsIHBvc2l0aW9uczogRmxvYXQzMkFycmF5LCBxdWF0ZXJuaW9uczogRmxvYXQzMkFycmF5LCBzY2FsZSA9IHMsIG9iamVjdD86IFRIUkVFLk9iamVjdDNEKSB7XG4gICAgaWYgKGluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbS5jb21wb3NlKHYuZnJvbUFycmF5KHBvc2l0aW9ucywgaW5kZXggKiAzKSwgcS5mcm9tQXJyYXkocXVhdGVybmlvbnMsIGluZGV4ICogNCksIHNjYWxlKTtcbiAgICAgICAgaWYgKG9iamVjdCkge1xuICAgICAgICAgICAgb2JqZWN0Lm1hdHJpeEF1dG9VcGRhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIG9iamVjdC5tYXRyaXguY29weShtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG4gICAgcmV0dXJuIG0uaWRlbnRpdHkoKTtcbn1cblxuZXhwb3J0IHR5cGUgTmd0Y1BoeXNpY3NTdGF0ZSA9IENhbm5vbldvcmtlclByb3BzICYge1xuICAgIGlzUGF1c2VkPzogYm9vbGVhbjtcbiAgICBtYXhTdWJTdGVwcz86IG51bWJlcjtcbiAgICBzaG91bGRJbnZhbGlkYXRlPzogYm9vbGVhbjtcbiAgICBzdGVwU2l6ZT86IG51bWJlcjtcbn07XG5cbnR5cGUgTmd0Y0Nhbm5vbkV2ZW50ID0gQ29sbGlkZUJlZ2luRXZlbnQgfCBDb2xsaWRlRW5kRXZlbnQgfCBDb2xsaWRlRXZlbnQgfCBSYXloaXRFdmVudDtcbnR5cGUgTmd0Y0NhbGxiYWNrQnlUeXBlPFQgZXh0ZW5kcyB7IHR5cGU6IHN0cmluZyB9PiA9IHtcbiAgICBbSyBpbiBUWyd0eXBlJ11dPzogVCBleHRlbmRzIHsgdHlwZTogSyB9ID8gKGU6IFQpID0+IHZvaWQgOiBuZXZlcjtcbn07XG5cbmV4cG9ydCB0eXBlIE5ndGNDYW5ub25FdmVudHMgPSB7IFt1dWlkOiBzdHJpbmddOiBQYXJ0aWFsPE5ndGNDYWxsYmFja0J5VHlwZTxOZ3RjQ2Fubm9uRXZlbnQ+PiB9O1xuXG5leHBvcnQgdHlwZSBTY2FsZU92ZXJyaWRlcyA9IHsgW3V1aWQ6IHN0cmluZ106IFRIUkVFLlZlY3RvcjMgfTtcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RjUGh5c2ljc0FwaSB7XG4gICAgYm9kaWVzOiB7IFt1dWlkOiBzdHJpbmddOiBudW1iZXIgfTtcbiAgICBldmVudHM6IE5ndGNDYW5ub25FdmVudHM7XG4gICAgcmVmczogUmVmcztcbiAgICBzY2FsZU92ZXJyaWRlczogU2NhbGVPdmVycmlkZXM7XG4gICAgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9ucztcbiAgICB3b3JrZXI6IFNpZ25hbDxDYW5ub25Xb3JrZXJBUEk+O1xufVxuXG5leHBvcnQgY29uc3QgTkdUQ19QSFlTSUNTX0FQSSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxTaWduYWw8Tmd0Y1BoeXNpY3NBcGk+PignTmd0Y1BoeXNpY3MgQVBJJyk7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0Yy1waHlzaWNzJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlOiBgPG5nLWNvbnRlbnQgLz5gLFxuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTkdUQ19QSFlTSUNTX0FQSSwgdXNlRmFjdG9yeTogKHBoeXNpY3M6IE5ndGNQaHlzaWNzKSA9PiBwaHlzaWNzLmFwaSwgZGVwczogW05ndGNQaHlzaWNzXSB9XSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0Y1BoeXNpY3MgZXh0ZW5kcyBOZ3RTaWduYWxTdG9yZTxOZ3RjUGh5c2ljc1N0YXRlPiB7XG4gICAgQElucHV0KCkgc2V0IGlzUGF1c2VkKGlzUGF1c2VkOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgaXNQYXVzZWQgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IG1heFN1YlN0ZXBzKG1heFN1YlN0ZXBzOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBtYXhTdWJTdGVwcyB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgc2hvdWxkSW52YWxpZGF0ZShzaG91bGRJbnZhbGlkYXRlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgc2hvdWxkSW52YWxpZGF0ZSB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgc3RlcFNpemUoc3RlcFNpemU6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IHN0ZXBTaXplIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBzaXplKHNpemU6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IHNpemUgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGFsbG93U2xlZXAoYWxsb3dTbGVlcDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnNldCh7IGFsbG93U2xlZXAgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGF4aXNJbmRleChheGlzSW5kZXg6IDAgfCAxIHwgMikge1xuICAgICAgICB0aGlzLnNldCh7IGF4aXNJbmRleCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgYnJvYWRwaGFzZShicm9hZHBoYXNlOiBCcm9hZHBoYXNlKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgYnJvYWRwaGFzZSB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgZGVmYXVsdENvbnRhY3RNYXRlcmlhbChkZWZhdWx0Q29udGFjdE1hdGVyaWFsOiBDb250YWN0TWF0ZXJpYWxPcHRpb25zKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgZGVmYXVsdENvbnRhY3RNYXRlcmlhbCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgZnJpY3Rpb25HcmF2aXR5KGZyaWN0aW9uR3Jhdml0eTogVHJpcGxldCB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBmcmljdGlvbkdyYXZpdHkgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGdyYXZpdHkoZ3Jhdml0eTogVHJpcGxldCkge1xuICAgICAgICB0aGlzLnNldCh7IGdyYXZpdHkgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGl0ZXJhdGlvbnMoaXRlcmF0aW9uczogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgaXRlcmF0aW9ucyB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgcXVhdE5vcm1hbGl6ZUZhc3QocXVhdE5vcm1hbGl6ZUZhc3Q6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBxdWF0Tm9ybWFsaXplRmFzdCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgcXVhdE5vcm1hbGl6ZVNraXAocXVhdE5vcm1hbGl6ZVNraXA6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IHF1YXROb3JtYWxpemVTa2lwIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBzb2x2ZXIoc29sdmVyOiBTb2x2ZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBzb2x2ZXIgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHRvbGVyYW5jZSh0b2xlcmFuY2U6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IHRvbGVyYW5jZSB9KTtcbiAgICB9XG5cbiAgICByZWFkb25seSAjc3RvcmUgPSBpbmplY3QoTmd0U3RvcmUpO1xuXG4gICAgcmVhZG9ubHkgI2JvZGllczogeyBbdXVpZDogc3RyaW5nXTogbnVtYmVyIH0gPSB7fTtcbiAgICByZWFkb25seSAjZXZlbnRzOiBOZ3RjQ2Fubm9uRXZlbnRzID0ge307XG4gICAgcmVhZG9ubHkgI3JlZnM6IFJlZnMgPSB7fTtcbiAgICByZWFkb25seSAjc2NhbGVPdmVycmlkZXM6IFNjYWxlT3ZlcnJpZGVzID0ge307XG4gICAgcmVhZG9ubHkgI3N1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbnMgPSB7fTtcblxuICAgIHJlYWRvbmx5ICNhbGxvd1NsZWVwID0gdGhpcy5zZWxlY3QoJ2FsbG93U2xlZXAnKTtcbiAgICByZWFkb25seSAjZGVmYXVsdENvbnRhY3RNYXRlcmlhbCA9IHRoaXMuc2VsZWN0KCdkZWZhdWx0Q29udGFjdE1hdGVyaWFsJyk7XG4gICAgcmVhZG9ubHkgI2ZyaWN0aW9uR3Jhdml0eSA9IHRoaXMuc2VsZWN0KCdmcmljdGlvbkdyYXZpdHknKTtcbiAgICByZWFkb25seSAjcXVhdE5vcm1hbGl6ZUZhc3QgPSB0aGlzLnNlbGVjdCgncXVhdE5vcm1hbGl6ZUZhc3QnKTtcbiAgICByZWFkb25seSAjcXVhdE5vcm1hbGl6ZVNraXAgPSB0aGlzLnNlbGVjdCgncXVhdE5vcm1hbGl6ZVNraXAnKTtcbiAgICByZWFkb25seSAjc2l6ZSA9IHRoaXMuc2VsZWN0KCdzaXplJyk7XG4gICAgcmVhZG9ubHkgI3NvbHZlciA9IHRoaXMuc2VsZWN0KCdzb2x2ZXInKTtcblxuICAgIHJlYWRvbmx5ICN3b3JrZXJQcm9wcyA9IGNvbXB1dGVkKCgpID0+ICh7XG4gICAgICAgIGFsbG93U2xlZXA6IHRoaXMuI2FsbG93U2xlZXAoKSxcbiAgICAgICAgYXhpc0luZGV4OiB0aGlzLmdldCgnYXhpc0luZGV4JyksXG4gICAgICAgIGJyb2FkcGhhc2U6IHRoaXMuZ2V0KCdicm9hZHBoYXNlJyksXG4gICAgICAgIGRlZmF1bHRDb250YWN0TWF0ZXJpYWw6IHRoaXMuI2RlZmF1bHRDb250YWN0TWF0ZXJpYWwoKSxcbiAgICAgICAgZnJpY3Rpb25HcmF2aXR5OiB0aGlzLiNmcmljdGlvbkdyYXZpdHkoKSxcbiAgICAgICAgZ3Jhdml0eTogdGhpcy5nZXQoJ2dyYXZpdHknKSxcbiAgICAgICAgaXRlcmF0aW9uczogdGhpcy5nZXQoJ2l0ZXJhdGlvbnMnKSxcbiAgICAgICAgcXVhdE5vcm1hbGl6ZUZhc3Q6IHRoaXMuI3F1YXROb3JtYWxpemVGYXN0KCksXG4gICAgICAgIHF1YXROb3JtYWxpemVTa2lwOiB0aGlzLiNxdWF0Tm9ybWFsaXplU2tpcCgpLFxuICAgICAgICBzaXplOiB0aGlzLiNzaXplKCksXG4gICAgICAgIHNvbHZlcjogdGhpcy4jc29sdmVyKCksXG4gICAgICAgIHRvbGVyYW5jZTogdGhpcy5nZXQoJ3RvbGVyYW5jZScpLFxuICAgIH0pKTtcblxuICAgIHJlYWRvbmx5IHdvcmtlciA9IGNvbXB1dGVkKCgpID0+IG5ldyBDYW5ub25Xb3JrZXJBUEkodGhpcy4jd29ya2VyUHJvcHMoKSkpO1xuXG4gICAgcmVhZG9ubHkgYXBpID0gY29tcHV0ZWQoKCkgPT4gKHtcbiAgICAgICAgYm9kaWVzOiB0aGlzLiNib2RpZXMsXG4gICAgICAgIGV2ZW50czogdGhpcy4jZXZlbnRzLFxuICAgICAgICByZWZzOiB0aGlzLiNyZWZzLFxuICAgICAgICBzY2FsZU92ZXJyaWRlczogdGhpcy4jc2NhbGVPdmVycmlkZXMsXG4gICAgICAgIHN1YnNjcmlwdGlvbnM6IHRoaXMuI3N1YnNjcmlwdGlvbnMsXG4gICAgICAgIHdvcmtlcjogdGhpcy53b3JrZXIsXG4gICAgfSkpO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIGFsbG93U2xlZXA6IGZhbHNlLFxuICAgICAgICAgICAgYXhpc0luZGV4OiAwLFxuICAgICAgICAgICAgYnJvYWRwaGFzZTogJ05haXZlJyxcbiAgICAgICAgICAgIGRlZmF1bHRDb250YWN0TWF0ZXJpYWw6IHsgY29udGFjdEVxdWF0aW9uU3RpZmZuZXNzOiAxZTYgfSxcbiAgICAgICAgICAgIGZyaWN0aW9uR3Jhdml0eTogbnVsbCxcbiAgICAgICAgICAgIGdyYXZpdHk6IFswLCAtOS44MSwgMF0sXG4gICAgICAgICAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBpdGVyYXRpb25zOiA1LFxuICAgICAgICAgICAgbWF4U3ViU3RlcHM6IDEwLFxuICAgICAgICAgICAgcXVhdE5vcm1hbGl6ZUZhc3Q6IGZhbHNlLFxuICAgICAgICAgICAgcXVhdE5vcm1hbGl6ZVNraXA6IDAsXG4gICAgICAgICAgICBzaG91bGRJbnZhbGlkYXRlOiB0cnVlLFxuICAgICAgICAgICAgc2l6ZTogMTAwMCxcbiAgICAgICAgICAgIHNvbHZlcjogJ0dTJyxcbiAgICAgICAgICAgIHN0ZXBTaXplOiAxIC8gNjAsXG4gICAgICAgICAgICB0b2xlcmFuY2U6IDAuMDAxLFxuICAgICAgICB9KTtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkluSW5qZWN0aW9uQ29udGV4dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLiNjb25uZWN0V29ya2VyKCk7XG4gICAgICAgICAgICB0aGlzLiN1cGRhdGVXb3JrZXJQcm9wKCdheGlzSW5kZXgnKTtcbiAgICAgICAgICAgIHRoaXMuI3VwZGF0ZVdvcmtlclByb3AoJ2Jyb2FkcGhhc2UnKTtcbiAgICAgICAgICAgIHRoaXMuI3VwZGF0ZVdvcmtlclByb3AoJ2dyYXZpdHknKTtcbiAgICAgICAgICAgIHRoaXMuI3VwZGF0ZVdvcmtlclByb3AoJ2l0ZXJhdGlvbnMnKTtcbiAgICAgICAgICAgIHRoaXMuI3VwZGF0ZVdvcmtlclByb3AoJ3RvbGVyYW5jZScpO1xuICAgICAgICAgICAgaW5qZWN0QmVmb3JlUmVuZGVyKHRoaXMuI29uQmVmb3JlUmVuZGVyLmJpbmQodGhpcywgMCkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAjdXBkYXRlV29ya2VyUHJvcChrZXk6IGtleW9mIE5ndGNQaHlzaWNzU3RhdGUpIHtcbiAgICAgICAgY29uc3QgY29tcHV0ZSA9IHRoaXMuc2VsZWN0KGtleSk7XG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB3b3JrZXIgPSB1bnRyYWNrZWQodGhpcy53b3JrZXIpO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjb21wdXRlKCk7XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICB3b3JrZXJba2V5XSA9IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAjY29ubmVjdFdvcmtlcigpIHtcbiAgICAgICAgZWZmZWN0KChvbkNsZWFudXApID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHdvcmtlciA9IHRoaXMud29ya2VyKCk7XG5cbiAgICAgICAgICAgIHdvcmtlci5jb25uZWN0KCk7XG4gICAgICAgICAgICB3b3JrZXIuaW5pdCgpO1xuXG4gICAgICAgICAgICAod29ya2VyIGFzIGFueSkub24oJ2NvbGxpZGUnLCB0aGlzLiNjb2xsaWRlSGFuZGxlci5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgICh3b3JrZXIgYXMgYW55KS5vbignY29sbGlkZUJlZ2luJywgdGhpcy4jY29sbGlkZUJlZ2luSGFuZGxlci5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgICh3b3JrZXIgYXMgYW55KS5vbignY29sbGlkZUVuZCcsIHRoaXMuI2NvbGxpZGVFbmRIYW5kbGVyLmJpbmQodGhpcykpO1xuICAgICAgICAgICAgKHdvcmtlciBhcyBhbnkpLm9uKCdmcmFtZScsIHRoaXMuI2ZyYW1lSGFuZGxlci5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgICh3b3JrZXIgYXMgYW55KS5vbigncmF5aGl0JywgdGhpcy4jcmF5aGl0SGFuZGxlci5iaW5kKHRoaXMpKTtcblxuICAgICAgICAgICAgb25DbGVhbnVwKCgpID0+IHtcbiAgICAgICAgICAgICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICAgICAgICAgICAgKHdvcmtlciBhcyBhbnkpLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgICNvbkJlZm9yZVJlbmRlcih0aW1lU2luY2VMYXN0Q2FsbGVkOiBudW1iZXIsIHsgZGVsdGEgfTogTmd0UmVuZGVyU3RhdGUpIHtcbiAgICAgICAgY29uc3QgeyBpc1BhdXNlZCwgbWF4U3ViU3RlcHMsIHN0ZXBTaXplIH0gPSB0aGlzLmdldCgpO1xuICAgICAgICBjb25zdCB3b3JrZXIgPSB0aGlzLndvcmtlcigpO1xuICAgICAgICBpZiAoaXNQYXVzZWQpIHJldHVybjtcbiAgICAgICAgdGltZVNpbmNlTGFzdENhbGxlZCArPSBkZWx0YTtcbiAgICAgICAgd29ya2VyLnN0ZXAoeyBtYXhTdWJTdGVwcywgc3RlcFNpemU6IHN0ZXBTaXplISwgdGltZVNpbmNlTGFzdENhbGxlZCB9KTtcbiAgICAgICAgdGltZVNpbmNlTGFzdENhbGxlZCA9IDA7XG4gICAgfVxuXG4gICAgI2NvbGxpZGVIYW5kbGVyKHsgYm9keSwgY29udGFjdDogeyBiaSwgYmosIC4uLmNvbnRhY3RSZXN0IH0sIHRhcmdldCwgLi4ucmVzdCB9OiBXb3JrZXJDb2xsaWRlRXZlbnRbJ2RhdGEnXSkge1xuICAgICAgICBjb25zdCBjYiA9IHRoaXMuI2V2ZW50c1t0YXJnZXRdPy5jb2xsaWRlO1xuXG4gICAgICAgIGlmIChjYikge1xuICAgICAgICAgICAgY2Ioe1xuICAgICAgICAgICAgICAgIGJvZHk6IHRoaXMuI3JlZnNbYm9keV0sXG4gICAgICAgICAgICAgICAgY29udGFjdDogeyBiaTogdGhpcy4jcmVmc1tiaV0sIGJqOiB0aGlzLiNyZWZzW2JqXSwgLi4uY29udGFjdFJlc3QgfSxcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHRoaXMuI3JlZnNbdGFyZ2V0XSxcbiAgICAgICAgICAgICAgICAuLi5yZXN0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAjY29sbGlkZUJlZ2luSGFuZGxlcih7IGJvZHlBLCBib2R5QiB9OiBXb3JrZXJDb2xsaWRlQmVnaW5FdmVudFsnZGF0YSddKSB7XG4gICAgICAgIGNvbnN0IGNiQSA9IHRoaXMuI2V2ZW50c1tib2R5QV0/LmNvbGxpZGVCZWdpbjtcbiAgICAgICAgaWYgKGNiQSkgY2JBKHsgYm9keTogdGhpcy4jcmVmc1tib2R5Ql0sIG9wOiAnZXZlbnQnLCB0YXJnZXQ6IHRoaXMuI3JlZnNbYm9keUFdLCB0eXBlOiAnY29sbGlkZUJlZ2luJyB9KTtcbiAgICAgICAgY29uc3QgY2JCID0gdGhpcy4jZXZlbnRzW2JvZHlCXT8uY29sbGlkZUJlZ2luO1xuICAgICAgICBpZiAoY2JCKSBjYkIoeyBib2R5OiB0aGlzLiNyZWZzW2JvZHlBXSwgb3A6ICdldmVudCcsIHRhcmdldDogdGhpcy4jcmVmc1tib2R5Ql0sIHR5cGU6ICdjb2xsaWRlQmVnaW4nIH0pO1xuICAgIH1cblxuICAgICNjb2xsaWRlRW5kSGFuZGxlcih7IGJvZHlBLCBib2R5QiB9OiBXb3JrZXJDb2xsaWRlRW5kRXZlbnRbJ2RhdGEnXSkge1xuICAgICAgICBjb25zdCBjYkEgPSB0aGlzLiNldmVudHNbYm9keUFdPy5jb2xsaWRlRW5kO1xuICAgICAgICBpZiAoY2JBKSBjYkEoeyBib2R5OiB0aGlzLiNyZWZzW2JvZHlCXSwgb3A6ICdldmVudCcsIHRhcmdldDogdGhpcy4jcmVmc1tib2R5QV0sIHR5cGU6ICdjb2xsaWRlRW5kJyB9KTtcbiAgICAgICAgY29uc3QgY2JCID0gdGhpcy4jZXZlbnRzW2JvZHlCXT8uY29sbGlkZUVuZDtcbiAgICAgICAgaWYgKGNiQikgY2JCKHsgYm9keTogdGhpcy4jcmVmc1tib2R5QV0sIG9wOiAnZXZlbnQnLCB0YXJnZXQ6IHRoaXMuI3JlZnNbYm9keUJdLCB0eXBlOiAnY29sbGlkZUVuZCcgfSk7XG4gICAgfVxuXG4gICAgI2ZyYW1lSGFuZGxlcih7IGFjdGl2ZSwgYm9kaWVzOiB1dWlkcyA9IFtdLCBvYnNlcnZhdGlvbnMsIHBvc2l0aW9ucywgcXVhdGVybmlvbnMgfTogV29ya2VyRnJhbWVNZXNzYWdlWydkYXRhJ10pIHtcbiAgICAgICAgY29uc3QgaW52YWxpZGF0ZSA9IHRoaXMuI3N0b3JlLmdldCgnaW52YWxpZGF0ZScpO1xuICAgICAgICBjb25zdCBzaG91bGRJbnZhbGlkYXRlID0gdGhpcy5nZXQoJ3Nob3VsZEludmFsaWRhdGUnKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHV1aWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLiNib2RpZXNbdXVpZHNbaV1dID0gaTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9ic2VydmF0aW9ucy5mb3JFYWNoKChbaWQsIHZhbHVlLCB0eXBlXSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy4jc3Vic2NyaXB0aW9uc1tpZF0gfHwge307XG4gICAgICAgICAgICBjb25zdCBjYiA9IHN1YnNjcmlwdGlvblt0eXBlXTtcbiAgICAgICAgICAgIC8vIEhFTFA6IFdlIGNsZWFybHkga25vdyB0aGUgdHlwZSBvZiB0aGUgY2FsbGJhY2ssIGJ1dCB0eXBlc2NyaXB0IGNhbid0IGRlYWwgd2l0aCBpdFxuICAgICAgICAgICAgY2IgJiYgY2IodmFsdWUgYXMgbmV2ZXIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoYWN0aXZlKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlZiBvZiBPYmplY3QudmFsdWVzKHRoaXMuI3JlZnMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlZiBpbnN0YW5jZW9mIFRIUkVFLkluc3RhbmNlZE1lc2gpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWYuY291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXVpZCA9IGAke3JlZi51dWlkfS8ke2l9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy4jYm9kaWVzW3V1aWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWYuc2V0TWF0cml4QXQoaSwgYXBwbHkoaW5kZXgsIHBvc2l0aW9ucywgcXVhdGVybmlvbnMsIHRoaXMuI3NjYWxlT3ZlcnJpZGVzW3V1aWRdKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmLmluc3RhbmNlTWF0cml4Lm5lZWRzVXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjYWxlID0gdGhpcy4jc2NhbGVPdmVycmlkZXNbcmVmLnV1aWRdIHx8IHJlZi5zY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgYXBwbHkodGhpcy4jYm9kaWVzW3JlZi51dWlkXSwgcG9zaXRpb25zLCBxdWF0ZXJuaW9ucywgc2NhbGUsIHJlZik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNob3VsZEludmFsaWRhdGUpIGludmFsaWRhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICNyYXloaXRIYW5kbGVyKHsgYm9keSwgcmF5OiB7IHV1aWQsIC4uLnJheVJlc3QgfSwgLi4ucmVzdCB9OiBXb3JrZXJSYXloaXRFdmVudFsnZGF0YSddKSB7XG4gICAgICAgIGNvbnN0IGNiID0gdGhpcy4jZXZlbnRzW3V1aWRdPy5yYXloaXQ7XG4gICAgICAgIGlmIChjYikgY2IoeyBib2R5OiBib2R5ID8gdGhpcy4jcmVmc1tib2R5XSA6IG51bGwsIHJheTogeyB1dWlkLCAuLi5yYXlSZXN0IH0sIC4uLnJlc3QgfSk7XG4gICAgfVxufVxuIl19
|
|
294
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGh5c2ljcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvY2Fubm9uL3NyYy9waHlzaWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQWUsTUFBTSxlQUFlLENBQUM7QUFDbkgsT0FBTyxFQUNILGVBQWUsR0FpQmxCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUNILGNBQWMsRUFDZCxRQUFRLEVBQ1Isa0JBQWtCLEVBQ2xCLHVDQUF1QyxHQUUxQyxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQzs7QUFFL0IsTUFBTSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDOUIsTUFBTSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDckMsTUFBTSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDakMsTUFBTSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7QUFFOUIsU0FBUyxLQUFLLENBQUMsS0FBYSxFQUFFLFNBQXVCLEVBQUUsV0FBeUIsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLE1BQXVCO0lBQ2hILElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRTtRQUNyQixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDekYsSUFBSSxNQUFNLEVBQUU7WUFDUixNQUFNLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1lBQ2hDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3pCO1FBQ0QsT0FBTyxDQUFDLENBQUM7S0FDWjtJQUNELE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3hCLENBQUM7QUEyQkQsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxjQUFjLENBQXlCLGlCQUFpQixDQUFDLENBQUM7QUFFOUYsTUFNYSxXQUFZLFNBQVEsY0FBZ0M7SUFDN0QsSUFBYSxRQUFRLENBQUMsUUFBaUI7UUFDbkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQWEsV0FBVyxDQUFDLFdBQW1CO1FBQ3hDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFhLGdCQUFnQixDQUFDLGdCQUF5QjtRQUNuRCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxJQUFhLFFBQVEsQ0FBQyxRQUFnQjtRQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBYSxJQUFJLENBQUMsSUFBWTtRQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBYSxVQUFVLENBQUMsVUFBbUI7UUFDdkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQWEsU0FBUyxDQUFDLFNBQW9CO1FBQ3ZDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFhLFVBQVUsQ0FBQyxVQUFzQjtRQUMxQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBYSxzQkFBc0IsQ0FBQyxzQkFBOEM7UUFDOUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLHNCQUFzQixFQUFFLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsSUFBYSxlQUFlLENBQUMsZUFBK0I7UUFDeEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELElBQWEsT0FBTyxDQUFDLE9BQWdCO1FBQ2pDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFhLFVBQVUsQ0FBQyxVQUFrQjtRQUN0QyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBYSxpQkFBaUIsQ0FBQyxpQkFBMEI7UUFDckQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLGlCQUFpQixFQUFFLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBYSxpQkFBaUIsQ0FBQyxpQkFBeUI7UUFDcEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLGlCQUFpQixFQUFFLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBYSxNQUFNLENBQUMsTUFBYztRQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBYSxTQUFTLENBQUMsU0FBaUI7UUFDcEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVRLE1BQU0sQ0FBb0I7SUFFMUIsT0FBTyxDQUFrQztJQUN6QyxPQUFPLENBQXdCO0lBQy9CLEtBQUssQ0FBWTtJQUNqQixlQUFlLENBQXNCO0lBQ3JDLGNBQWMsQ0FBcUI7SUFFbkMsV0FBVyxDQUE2QjtJQUN4Qyx1QkFBdUIsQ0FBeUM7SUFDaEUsZ0JBQWdCLENBQWtDO0lBQ2xELGtCQUFrQixDQUFvQztJQUN0RCxrQkFBa0IsQ0FBb0M7SUFDdEQsS0FBSyxDQUF1QjtJQUM1QixPQUFPLENBQXlCO0lBRWhDLFlBQVksQ0FhakI7SUFhSjtRQUNJLEtBQUssQ0FBQztZQUNGLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFNBQVMsRUFBRSxDQUFDO1lBQ1osVUFBVSxFQUFFLE9BQU87WUFDbkIsc0JBQXNCLEVBQUUsRUFBRSx3QkFBd0IsRUFBRSxHQUFHLEVBQUU7WUFDekQsZUFBZSxFQUFFLElBQUk7WUFDckIsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUN0QixRQUFRLEVBQUUsS0FBSztZQUNmLFVBQVUsRUFBRSxDQUFDO1lBQ2IsV0FBVyxFQUFFLEVBQUU7WUFDZixpQkFBaUIsRUFBRSxLQUFLO1lBQ3hCLGlCQUFpQixFQUFFLENBQUM7WUFDcEIsZ0JBQWdCLEVBQUUsSUFBSTtZQUN0QixJQUFJLEVBQUUsSUFBSTtZQUNWLE1BQU0sRUFBRSxJQUFJO1lBQ1osUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFO1lBQ2hCLFNBQVMsRUFBRSxLQUFLO1NBQ25CLENBQUMsQ0FBQztRQTVERSxXQUFNLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTFCLFlBQU8sR0FBK0IsRUFBRSxDQUFDO1FBQ3pDLFlBQU8sR0FBcUIsRUFBRSxDQUFDO1FBQy9CLFVBQUssR0FBUyxFQUFFLENBQUM7UUFDakIsb0JBQWUsR0FBbUIsRUFBRSxDQUFDO1FBQ3JDLG1CQUFjLEdBQWtCLEVBQUUsQ0FBQztRQUVuQyxnQkFBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEMsNEJBQXVCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ2hFLHFCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNsRCx1QkFBa0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDdEQsdUJBQWtCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3RELFVBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVCLFlBQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRWhDLGlCQUFZLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDcEMsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDOUIsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDO1lBQ2hDLFVBQVUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQztZQUNsQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsdUJBQXVCLEVBQUU7WUFDdEQsZUFBZSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN4QyxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUM7WUFDNUIsVUFBVSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDO1lBQ2xDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUM1QyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDNUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDbEIsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDdEIsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDO1NBQ25DLENBQUMsQ0FBQyxDQUFDO1FBRUssV0FBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRWxFLFFBQUcsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUMzQixNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDcEIsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3BCLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSztZQUNoQixjQUFjLEVBQUUsSUFBSSxDQUFDLGVBQWU7WUFDcEMsYUFBYSxFQUFFLElBQUksQ0FBQyxjQUFjO1lBQ2xDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtTQUN0QixDQUFDLENBQUMsQ0FBQztRQXFCQSx1Q0FBdUMsQ0FBQyxHQUFHLEVBQUU7WUFDekMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDcEMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0QsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsR0FBMkI7UUFDekMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1IsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN0QyxNQUFNLEtBQUssR0FBRyxPQUFPLEVBQUUsQ0FBQztZQUN4QixtQkFBbUI7WUFDbkIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxjQUFjO1FBQ1YsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDakIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBRTdCLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7WUFFYixNQUFjLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzlELE1BQWMsQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUN4RSxNQUFjLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDcEUsTUFBYyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUMxRCxNQUFjLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBRTdELFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ1gsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNsQixNQUFjLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUN6QyxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGVBQWUsQ0FBQyxtQkFBMkIsRUFBRSxFQUFFLEtBQUssRUFBa0I7UUFDbEUsTUFBTSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3ZELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM3QixJQUFJLFFBQVE7WUFBRSxPQUFPO1FBQ3JCLG1CQUFtQixJQUFJLEtBQUssQ0FBQztRQUM3QixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFTLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZFLG1CQUFtQixHQUFHLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsZUFBZSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLEVBQThCO1FBQ3RHLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxDQUFDO1FBRXpDLElBQUksRUFBRSxFQUFFO1lBQ0osRUFBRSxDQUFDO2dCQUNDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDdEIsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxXQUFXLEVBQUU7Z0JBQ25FLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztnQkFDMUIsR0FBRyxJQUFJO2FBQ1YsQ0FBQyxDQUFDO1NBQ047SUFDTCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFtQztRQUNsRSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLFlBQVksQ0FBQztRQUM5QyxJQUFJLEdBQUc7WUFBRSxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBQ3hHLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsWUFBWSxDQUFDO1FBQzlDLElBQUksR0FBRztZQUFFLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFDNUcsQ0FBQztJQUVELGtCQUFrQixDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBaUM7UUFDOUQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxVQUFVLENBQUM7UUFDNUMsSUFBSSxHQUFHO1lBQUUsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUN0RyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLFVBQVUsQ0FBQztRQUM1QyxJQUFJLEdBQUc7WUFBRSxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO0lBQzFHLENBQUM7SUFFRCxhQUFhLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssR0FBRyxFQUFFLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQThCO1FBQzFHLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2pELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBRXRELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ25DLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzlCO1FBRUQsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFO1lBQ3ZDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ25ELE1BQU0sRUFBRSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM5QixvRkFBb0Y7WUFDcEYsRUFBRSxJQUFJLEVBQUUsQ0FBQyxLQUFjLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksTUFBTSxFQUFFO1lBQ1IsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDekMsSUFBSSxHQUFHLFlBQVksS0FBSyxDQUFDLGFBQWEsRUFBRTtvQkFDcEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7d0JBQ2hDLE1BQU0sSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQzt3QkFDaEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDakMsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFOzRCQUNyQixHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ3JGLEdBQUcsQ0FBQyxjQUFjLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQzt5QkFDekM7cUJBQ0o7aUJBQ0o7cUJBQU07b0JBQ0gsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQztvQkFDMUQsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2lCQUNyRTthQUNKO1lBQ0QsSUFBSSxnQkFBZ0I7Z0JBQUUsVUFBVSxFQUFFLENBQUM7U0FDdEM7SUFDTCxDQUFDO0lBRUQsY0FBYyxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLE9BQU8sRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUE2QjtRQUNsRixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sQ0FBQztRQUN0QyxJQUFJLEVBQUU7WUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsT0FBTyxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzdGLENBQUM7OEdBalBRLFdBQVc7a0dBQVgsV0FBVyw2Z0JBRlQsQ0FBQyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsQ0FBQyxPQUFvQixFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsaURBRHhHLGdCQUFnQjs7U0FHakIsV0FBVzsyRkFBWCxXQUFXO2tCQU52QixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxjQUFjO29CQUN4QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLENBQUMsT0FBb0IsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLENBQUM7aUJBQ3JIOzBFQUVnQixRQUFRO3NCQUFwQixLQUFLO2dCQUlPLFdBQVc7c0JBQXZCLEtBQUs7Z0JBSU8sZ0JBQWdCO3NCQUE1QixLQUFLO2dCQUlPLFFBQVE7c0JBQXBCLEtBQUs7Z0JBSU8sSUFBSTtzQkFBaEIsS0FBSztnQkFJTyxVQUFVO3NCQUF0QixLQUFLO2dCQUlPLFNBQVM7c0JBQXJCLEtBQUs7Z0JBSU8sVUFBVTtzQkFBdEIsS0FBSztnQkFJTyxzQkFBc0I7c0JBQWxDLEtBQUs7Z0JBSU8sZUFBZTtzQkFBM0IsS0FBSztnQkFJTyxPQUFPO3NCQUFuQixLQUFLO2dCQUlPLFVBQVU7c0JBQXRCLEtBQUs7Z0JBSU8saUJBQWlCO3NCQUE3QixLQUFLO2dCQUlPLGlCQUFpQjtzQkFBN0IsS0FBSztnQkFJTyxNQUFNO3NCQUFsQixLQUFLO2dCQUlPLFNBQVM7c0JBQXJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdGlvblRva2VuLCBJbnB1dCwgY29tcHV0ZWQsIGVmZmVjdCwgaW5qZWN0LCB1bnRyYWNrZWQsIHR5cGUgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIENhbm5vbldvcmtlckFQSSxcbiAgICB0eXBlIEJyb2FkcGhhc2UsXG4gICAgdHlwZSBDYW5ub25Xb3JrZXJQcm9wcyxcbiAgICB0eXBlIENvbGxpZGVCZWdpbkV2ZW50LFxuICAgIHR5cGUgQ29sbGlkZUVuZEV2ZW50LFxuICAgIHR5cGUgQ29sbGlkZUV2ZW50LFxuICAgIHR5cGUgQ29udGFjdE1hdGVyaWFsT3B0aW9ucyxcbiAgICB0eXBlIFJheWhpdEV2ZW50LFxuICAgIHR5cGUgUmVmcyxcbiAgICB0eXBlIFNvbHZlcixcbiAgICB0eXBlIFN1YnNjcmlwdGlvbnMsXG4gICAgdHlwZSBUcmlwbGV0LFxuICAgIHR5cGUgV29ya2VyQ29sbGlkZUJlZ2luRXZlbnQsXG4gICAgdHlwZSBXb3JrZXJDb2xsaWRlRW5kRXZlbnQsXG4gICAgdHlwZSBXb3JrZXJDb2xsaWRlRXZlbnQsXG4gICAgdHlwZSBXb3JrZXJGcmFtZU1lc3NhZ2UsXG4gICAgdHlwZSBXb3JrZXJSYXloaXRFdmVudCxcbn0gZnJvbSAnQHBtbmRycy9jYW5ub24td29ya2VyLWFwaSc7XG5pbXBvcnQge1xuICAgIE5ndFNpZ25hbFN0b3JlLFxuICAgIE5ndFN0b3JlLFxuICAgIGluamVjdEJlZm9yZVJlbmRlcixcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWVJbkluamVjdGlvbkNvbnRleHQsXG4gICAgdHlwZSBOZ3RSZW5kZXJTdGF0ZSxcbn0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5cbmNvbnN0IHYgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xuY29uc3QgcyA9IG5ldyBUSFJFRS5WZWN0b3IzKDEsIDEsIDEpO1xuY29uc3QgcSA9IG5ldyBUSFJFRS5RdWF0ZXJuaW9uKCk7XG5jb25zdCBtID0gbmV3IFRIUkVFLk1hdHJpeDQoKTtcblxuZnVuY3Rpb24gYXBwbHkoaW5kZXg6IG51bWJlciwgcG9zaXRpb25zOiBGbG9hdDMyQXJyYXksIHF1YXRlcm5pb25zOiBGbG9hdDMyQXJyYXksIHNjYWxlID0gcywgb2JqZWN0PzogVEhSRUUuT2JqZWN0M0QpIHtcbiAgICBpZiAoaW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBtLmNvbXBvc2Uodi5mcm9tQXJyYXkocG9zaXRpb25zLCBpbmRleCAqIDMpLCBxLmZyb21BcnJheShxdWF0ZXJuaW9ucywgaW5kZXggKiA0KSwgc2NhbGUpO1xuICAgICAgICBpZiAob2JqZWN0KSB7XG4gICAgICAgICAgICBvYmplY3QubWF0cml4QXV0b1VwZGF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgb2JqZWN0Lm1hdHJpeC5jb3B5KG0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cbiAgICByZXR1cm4gbS5pZGVudGl0eSgpO1xufVxuXG5leHBvcnQgdHlwZSBOZ3RjUGh5c2ljc1N0YXRlID0gQ2Fubm9uV29ya2VyUHJvcHMgJiB7XG4gICAgaXNQYXVzZWQ/OiBib29sZWFuO1xuICAgIG1heFN1YlN0ZXBzPzogbnVtYmVyO1xuICAgIHNob3VsZEludmFsaWRhdGU/OiBib29sZWFuO1xuICAgIHN0ZXBTaXplPzogbnVtYmVyO1xufTtcblxudHlwZSBOZ3RjQ2Fubm9uRXZlbnQgPSBDb2xsaWRlQmVnaW5FdmVudCB8IENvbGxpZGVFbmRFdmVudCB8IENvbGxpZGVFdmVudCB8IFJheWhpdEV2ZW50O1xudHlwZSBOZ3RjQ2FsbGJhY2tCeVR5cGU8VCBleHRlbmRzIHsgdHlwZTogc3RyaW5nIH0+ID0ge1xuICAgIFtLIGluIFRbJ3R5cGUnXV0/OiBUIGV4dGVuZHMgeyB0eXBlOiBLIH0gPyAoZTogVCkgPT4gdm9pZCA6IG5ldmVyO1xufTtcblxuZXhwb3J0IHR5cGUgTmd0Y0Nhbm5vbkV2ZW50cyA9IHsgW3V1aWQ6IHN0cmluZ106IFBhcnRpYWw8Tmd0Y0NhbGxiYWNrQnlUeXBlPE5ndGNDYW5ub25FdmVudD4+IH07XG5cbmV4cG9ydCB0eXBlIFNjYWxlT3ZlcnJpZGVzID0geyBbdXVpZDogc3RyaW5nXTogVEhSRUUuVmVjdG9yMyB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndGNQaHlzaWNzQXBpIHtcbiAgICBib2RpZXM6IHsgW3V1aWQ6IHN0cmluZ106IG51bWJlciB9O1xuICAgIGV2ZW50czogTmd0Y0Nhbm5vbkV2ZW50cztcbiAgICByZWZzOiBSZWZzO1xuICAgIHNjYWxlT3ZlcnJpZGVzOiBTY2FsZU92ZXJyaWRlcztcbiAgICBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25zO1xuICAgIHdvcmtlcjogU2lnbmFsPENhbm5vbldvcmtlckFQST47XG59XG5cbmV4cG9ydCBjb25zdCBOR1RDX1BIWVNJQ1NfQVBJID0gbmV3IEluamVjdGlvblRva2VuPFNpZ25hbDxOZ3RjUGh5c2ljc0FwaT4+KCdOZ3RjUGh5c2ljcyBBUEknKTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3RjLXBoeXNpY3MnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgdGVtcGxhdGU6IGA8bmctY29udGVudCAvPmAsXG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBOR1RDX1BIWVNJQ1NfQVBJLCB1c2VGYWN0b3J5OiAocGh5c2ljczogTmd0Y1BoeXNpY3MpID0+IHBoeXNpY3MuYXBpLCBkZXBzOiBbTmd0Y1BoeXNpY3NdIH1dLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RjUGh5c2ljcyBleHRlbmRzIE5ndFNpZ25hbFN0b3JlPE5ndGNQaHlzaWNzU3RhdGU+IHtcbiAgICBASW5wdXQoKSBzZXQgaXNQYXVzZWQoaXNQYXVzZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBpc1BhdXNlZCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgbWF4U3ViU3RlcHMobWF4U3ViU3RlcHM6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IG1heFN1YlN0ZXBzIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBzaG91bGRJbnZhbGlkYXRlKHNob3VsZEludmFsaWRhdGU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBzaG91bGRJbnZhbGlkYXRlIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBzdGVwU2l6ZShzdGVwU2l6ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgc3RlcFNpemUgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHNpemUoc2l6ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgc2l6ZSB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgYWxsb3dTbGVlcChhbGxvd1NsZWVwOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgYWxsb3dTbGVlcCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgYXhpc0luZGV4KGF4aXNJbmRleDogMCB8IDEgfCAyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgYXhpc0luZGV4IH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBicm9hZHBoYXNlKGJyb2FkcGhhc2U6IEJyb2FkcGhhc2UpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBicm9hZHBoYXNlIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBkZWZhdWx0Q29udGFjdE1hdGVyaWFsKGRlZmF1bHRDb250YWN0TWF0ZXJpYWw6IENvbnRhY3RNYXRlcmlhbE9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBkZWZhdWx0Q29udGFjdE1hdGVyaWFsIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBmcmljdGlvbkdyYXZpdHkoZnJpY3Rpb25HcmF2aXR5OiBUcmlwbGV0IHwgbnVsbCkge1xuICAgICAgICB0aGlzLnNldCh7IGZyaWN0aW9uR3Jhdml0eSB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgZ3Jhdml0eShncmF2aXR5OiBUcmlwbGV0KSB7XG4gICAgICAgIHRoaXMuc2V0KHsgZ3Jhdml0eSB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgaXRlcmF0aW9ucyhpdGVyYXRpb25zOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBpdGVyYXRpb25zIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBxdWF0Tm9ybWFsaXplRmFzdChxdWF0Tm9ybWFsaXplRmFzdDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnNldCh7IHF1YXROb3JtYWxpemVGYXN0IH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBxdWF0Tm9ybWFsaXplU2tpcChxdWF0Tm9ybWFsaXplU2tpcDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgcXVhdE5vcm1hbGl6ZVNraXAgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHNvbHZlcihzb2x2ZXI6IFNvbHZlcikge1xuICAgICAgICB0aGlzLnNldCh7IHNvbHZlciB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgdG9sZXJhbmNlKHRvbGVyYW5jZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgdG9sZXJhbmNlIH0pO1xuICAgIH1cblxuICAgIHJlYWRvbmx5ICNzdG9yZSA9IGluamVjdChOZ3RTdG9yZSk7XG5cbiAgICByZWFkb25seSAjYm9kaWVzOiB7IFt1dWlkOiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xuICAgIHJlYWRvbmx5ICNldmVudHM6IE5ndGNDYW5ub25FdmVudHMgPSB7fTtcbiAgICByZWFkb25seSAjcmVmczogUmVmcyA9IHt9O1xuICAgIHJlYWRvbmx5ICNzY2FsZU92ZXJyaWRlczogU2NhbGVPdmVycmlkZXMgPSB7fTtcbiAgICByZWFkb25seSAjc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9ucyA9IHt9O1xuXG4gICAgcmVhZG9ubHkgI2FsbG93U2xlZXAgPSB0aGlzLnNlbGVjdCgnYWxsb3dTbGVlcCcpO1xuICAgIHJlYWRvbmx5ICNkZWZhdWx0Q29udGFjdE1hdGVyaWFsID0gdGhpcy5zZWxlY3QoJ2RlZmF1bHRDb250YWN0TWF0ZXJpYWwnKTtcbiAgICByZWFkb25seSAjZnJpY3Rpb25HcmF2aXR5ID0gdGhpcy5zZWxlY3QoJ2ZyaWN0aW9uR3Jhdml0eScpO1xuICAgIHJlYWRvbmx5ICNxdWF0Tm9ybWFsaXplRmFzdCA9IHRoaXMuc2VsZWN0KCdxdWF0Tm9ybWFsaXplRmFzdCcpO1xuICAgIHJlYWRvbmx5ICNxdWF0Tm9ybWFsaXplU2tpcCA9IHRoaXMuc2VsZWN0KCdxdWF0Tm9ybWFsaXplU2tpcCcpO1xuICAgIHJlYWRvbmx5ICNzaXplID0gdGhpcy5zZWxlY3QoJ3NpemUnKTtcbiAgICByZWFkb25seSAjc29sdmVyID0gdGhpcy5zZWxlY3QoJ3NvbHZlcicpO1xuXG4gICAgcmVhZG9ubHkgI3dvcmtlclByb3BzID0gY29tcHV0ZWQoKCkgPT4gKHtcbiAgICAgICAgYWxsb3dTbGVlcDogdGhpcy4jYWxsb3dTbGVlcCgpLFxuICAgICAgICBheGlzSW5kZXg6IHRoaXMuZ2V0KCdheGlzSW5kZXgnKSxcbiAgICAgICAgYnJvYWRwaGFzZTogdGhpcy5nZXQoJ2Jyb2FkcGhhc2UnKSxcbiAgICAgICAgZGVmYXVsdENvbnRhY3RNYXRlcmlhbDogdGhpcy4jZGVmYXVsdENvbnRhY3RNYXRlcmlhbCgpLFxuICAgICAgICBmcmljdGlvbkdyYXZpdHk6IHRoaXMuI2ZyaWN0aW9uR3Jhdml0eSgpLFxuICAgICAgICBncmF2aXR5OiB0aGlzLmdldCgnZ3Jhdml0eScpLFxuICAgICAgICBpdGVyYXRpb25zOiB0aGlzLmdldCgnaXRlcmF0aW9ucycpLFxuICAgICAgICBxdWF0Tm9ybWFsaXplRmFzdDogdGhpcy4jcXVhdE5vcm1hbGl6ZUZhc3QoKSxcbiAgICAgICAgcXVhdE5vcm1hbGl6ZVNraXA6IHRoaXMuI3F1YXROb3JtYWxpemVTa2lwKCksXG4gICAgICAgIHNpemU6IHRoaXMuI3NpemUoKSxcbiAgICAgICAgc29sdmVyOiB0aGlzLiNzb2x2ZXIoKSxcbiAgICAgICAgdG9sZXJhbmNlOiB0aGlzLmdldCgndG9sZXJhbmNlJyksXG4gICAgfSkpO1xuXG4gICAgcmVhZG9ubHkgd29ya2VyID0gY29tcHV0ZWQoKCkgPT4gbmV3IENhbm5vbldvcmtlckFQSSh0aGlzLiN3b3JrZXJQcm9wcygpKSk7XG5cbiAgICByZWFkb25seSBhcGkgPSBjb21wdXRlZCgoKSA9PiAoe1xuICAgICAgICBib2RpZXM6IHRoaXMuI2JvZGllcyxcbiAgICAgICAgZXZlbnRzOiB0aGlzLiNldmVudHMsXG4gICAgICAgIHJlZnM6IHRoaXMuI3JlZnMsXG4gICAgICAgIHNjYWxlT3ZlcnJpZGVzOiB0aGlzLiNzY2FsZU92ZXJyaWRlcyxcbiAgICAgICAgc3Vic2NyaXB0aW9uczogdGhpcy4jc3Vic2NyaXB0aW9ucyxcbiAgICAgICAgd29ya2VyOiB0aGlzLndvcmtlcixcbiAgICB9KSk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgYWxsb3dTbGVlcDogZmFsc2UsXG4gICAgICAgICAgICBheGlzSW5kZXg6IDAsXG4gICAgICAgICAgICBicm9hZHBoYXNlOiAnTmFpdmUnLFxuICAgICAgICAgICAgZGVmYXVsdENvbnRhY3RNYXRlcmlhbDogeyBjb250YWN0RXF1YXRpb25TdGlmZm5lc3M6IDFlNiB9LFxuICAgICAgICAgICAgZnJpY3Rpb25HcmF2aXR5OiBudWxsLFxuICAgICAgICAgICAgZ3Jhdml0eTogWzAsIC05LjgxLCAwXSxcbiAgICAgICAgICAgIGlzUGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICAgIGl0ZXJhdGlvbnM6IDUsXG4gICAgICAgICAgICBtYXhTdWJTdGVwczogMTAsXG4gICAgICAgICAgICBxdWF0Tm9ybWFsaXplRmFzdDogZmFsc2UsXG4gICAgICAgICAgICBxdWF0Tm9ybWFsaXplU2tpcDogMCxcbiAgICAgICAgICAgIHNob3VsZEludmFsaWRhdGU6IHRydWUsXG4gICAgICAgICAgICBzaXplOiAxMDAwLFxuICAgICAgICAgICAgc29sdmVyOiAnR1MnLFxuICAgICAgICAgICAgc3RlcFNpemU6IDEgLyA2MCxcbiAgICAgICAgICAgIHRvbGVyYW5jZTogMC4wMDEsXG4gICAgICAgIH0pO1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWVJbkluamVjdGlvbkNvbnRleHQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy4jY29ubmVjdFdvcmtlcigpO1xuICAgICAgICAgICAgdGhpcy4jdXBkYXRlV29ya2VyUHJvcCgnYXhpc0luZGV4Jyk7XG4gICAgICAgICAgICB0aGlzLiN1cGRhdGVXb3JrZXJQcm9wKCdicm9hZHBoYXNlJyk7XG4gICAgICAgICAgICB0aGlzLiN1cGRhdGVXb3JrZXJQcm9wKCdncmF2aXR5Jyk7XG4gICAgICAgICAgICB0aGlzLiN1cGRhdGVXb3JrZXJQcm9wKCdpdGVyYXRpb25zJyk7XG4gICAgICAgICAgICB0aGlzLiN1cGRhdGVXb3JrZXJQcm9wKCd0b2xlcmFuY2UnKTtcbiAgICAgICAgICAgIGluamVjdEJlZm9yZVJlbmRlcih0aGlzLiNvbkJlZm9yZVJlbmRlci5iaW5kKHRoaXMsIDApKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgI3VwZGF0ZVdvcmtlclByb3Aoa2V5OiBrZXlvZiBOZ3RjUGh5c2ljc1N0YXRlKSB7XG4gICAgICAgIGNvbnN0IGNvbXB1dGUgPSB0aGlzLnNlbGVjdChrZXkpO1xuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgd29ya2VyID0gdW50cmFja2VkKHRoaXMud29ya2VyKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY29tcHV0ZSgpO1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgICAgd29ya2VyW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgI2Nvbm5lY3RXb3JrZXIoKSB7XG4gICAgICAgIGVmZmVjdCgob25DbGVhbnVwKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB3b3JrZXIgPSB0aGlzLndvcmtlcigpO1xuXG4gICAgICAgICAgICB3b3JrZXIuY29ubmVjdCgpO1xuICAgICAgICAgICAgd29ya2VyLmluaXQoKTtcblxuICAgICAgICAgICAgKHdvcmtlciBhcyBhbnkpLm9uKCdjb2xsaWRlJywgdGhpcy4jY29sbGlkZUhhbmRsZXIuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICAod29ya2VyIGFzIGFueSkub24oJ2NvbGxpZGVCZWdpbicsIHRoaXMuI2NvbGxpZGVCZWdpbkhhbmRsZXIuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICAod29ya2VyIGFzIGFueSkub24oJ2NvbGxpZGVFbmQnLCB0aGlzLiNjb2xsaWRlRW5kSGFuZGxlci5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgICh3b3JrZXIgYXMgYW55KS5vbignZnJhbWUnLCB0aGlzLiNmcmFtZUhhbmRsZXIuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICAod29ya2VyIGFzIGFueSkub24oJ3JheWhpdCcsIHRoaXMuI3JheWhpdEhhbmRsZXIuYmluZCh0aGlzKSk7XG5cbiAgICAgICAgICAgIG9uQ2xlYW51cCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgICAgICAgICAgICh3b3JrZXIgYXMgYW55KS5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAjb25CZWZvcmVSZW5kZXIodGltZVNpbmNlTGFzdENhbGxlZDogbnVtYmVyLCB7IGRlbHRhIH06IE5ndFJlbmRlclN0YXRlKSB7XG4gICAgICAgIGNvbnN0IHsgaXNQYXVzZWQsIG1heFN1YlN0ZXBzLCBzdGVwU2l6ZSB9ID0gdGhpcy5nZXQoKTtcbiAgICAgICAgY29uc3Qgd29ya2VyID0gdGhpcy53b3JrZXIoKTtcbiAgICAgICAgaWYgKGlzUGF1c2VkKSByZXR1cm47XG4gICAgICAgIHRpbWVTaW5jZUxhc3RDYWxsZWQgKz0gZGVsdGE7XG4gICAgICAgIHdvcmtlci5zdGVwKHsgbWF4U3ViU3RlcHMsIHN0ZXBTaXplOiBzdGVwU2l6ZSEsIHRpbWVTaW5jZUxhc3RDYWxsZWQgfSk7XG4gICAgICAgIHRpbWVTaW5jZUxhc3RDYWxsZWQgPSAwO1xuICAgIH1cblxuICAgICNjb2xsaWRlSGFuZGxlcih7IGJvZHksIGNvbnRhY3Q6IHsgYmksIGJqLCAuLi5jb250YWN0UmVzdCB9LCB0YXJnZXQsIC4uLnJlc3QgfTogV29ya2VyQ29sbGlkZUV2ZW50WydkYXRhJ10pIHtcbiAgICAgICAgY29uc3QgY2IgPSB0aGlzLiNldmVudHNbdGFyZ2V0XT8uY29sbGlkZTtcblxuICAgICAgICBpZiAoY2IpIHtcbiAgICAgICAgICAgIGNiKHtcbiAgICAgICAgICAgICAgICBib2R5OiB0aGlzLiNyZWZzW2JvZHldLFxuICAgICAgICAgICAgICAgIGNvbnRhY3Q6IHsgYmk6IHRoaXMuI3JlZnNbYmldLCBiajogdGhpcy4jcmVmc1tial0sIC4uLmNvbnRhY3RSZXN0IH0sXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiB0aGlzLiNyZWZzW3RhcmdldF0sXG4gICAgICAgICAgICAgICAgLi4ucmVzdCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgI2NvbGxpZGVCZWdpbkhhbmRsZXIoeyBib2R5QSwgYm9keUIgfTogV29ya2VyQ29sbGlkZUJlZ2luRXZlbnRbJ2RhdGEnXSkge1xuICAgICAgICBjb25zdCBjYkEgPSB0aGlzLiNldmVudHNbYm9keUFdPy5jb2xsaWRlQmVnaW47XG4gICAgICAgIGlmIChjYkEpIGNiQSh7IGJvZHk6IHRoaXMuI3JlZnNbYm9keUJdLCBvcDogJ2V2ZW50JywgdGFyZ2V0OiB0aGlzLiNyZWZzW2JvZHlBXSwgdHlwZTogJ2NvbGxpZGVCZWdpbicgfSk7XG4gICAgICAgIGNvbnN0IGNiQiA9IHRoaXMuI2V2ZW50c1tib2R5Ql0/LmNvbGxpZGVCZWdpbjtcbiAgICAgICAgaWYgKGNiQikgY2JCKHsgYm9keTogdGhpcy4jcmVmc1tib2R5QV0sIG9wOiAnZXZlbnQnLCB0YXJnZXQ6IHRoaXMuI3JlZnNbYm9keUJdLCB0eXBlOiAnY29sbGlkZUJlZ2luJyB9KTtcbiAgICB9XG5cbiAgICAjY29sbGlkZUVuZEhhbmRsZXIoeyBib2R5QSwgYm9keUIgfTogV29ya2VyQ29sbGlkZUVuZEV2ZW50WydkYXRhJ10pIHtcbiAgICAgICAgY29uc3QgY2JBID0gdGhpcy4jZXZlbnRzW2JvZHlBXT8uY29sbGlkZUVuZDtcbiAgICAgICAgaWYgKGNiQSkgY2JBKHsgYm9keTogdGhpcy4jcmVmc1tib2R5Ql0sIG9wOiAnZXZlbnQnLCB0YXJnZXQ6IHRoaXMuI3JlZnNbYm9keUFdLCB0eXBlOiAnY29sbGlkZUVuZCcgfSk7XG4gICAgICAgIGNvbnN0IGNiQiA9IHRoaXMuI2V2ZW50c1tib2R5Ql0/LmNvbGxpZGVFbmQ7XG4gICAgICAgIGlmIChjYkIpIGNiQih7IGJvZHk6IHRoaXMuI3JlZnNbYm9keUFdLCBvcDogJ2V2ZW50JywgdGFyZ2V0OiB0aGlzLiNyZWZzW2JvZHlCXSwgdHlwZTogJ2NvbGxpZGVFbmQnIH0pO1xuICAgIH1cblxuICAgICNmcmFtZUhhbmRsZXIoeyBhY3RpdmUsIGJvZGllczogdXVpZHMgPSBbXSwgb2JzZXJ2YXRpb25zLCBwb3NpdGlvbnMsIHF1YXRlcm5pb25zIH06IFdvcmtlckZyYW1lTWVzc2FnZVsnZGF0YSddKSB7XG4gICAgICAgIGNvbnN0IGludmFsaWRhdGUgPSB0aGlzLiNzdG9yZS5nZXQoJ2ludmFsaWRhdGUnKTtcbiAgICAgICAgY29uc3Qgc2hvdWxkSW52YWxpZGF0ZSA9IHRoaXMuZ2V0KCdzaG91bGRJbnZhbGlkYXRlJyk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB1dWlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy4jYm9kaWVzW3V1aWRzW2ldXSA9IGk7XG4gICAgICAgIH1cblxuICAgICAgICBvYnNlcnZhdGlvbnMuZm9yRWFjaCgoW2lkLCB2YWx1ZSwgdHlwZV0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMuI3N1YnNjcmlwdGlvbnNbaWRdIHx8IHt9O1xuICAgICAgICAgICAgY29uc3QgY2IgPSBzdWJzY3JpcHRpb25bdHlwZV07XG4gICAgICAgICAgICAvLyBIRUxQOiBXZSBjbGVhcmx5IGtub3cgdGhlIHR5cGUgb2YgdGhlIGNhbGxiYWNrLCBidXQgdHlwZXNjcmlwdCBjYW4ndCBkZWFsIHdpdGggaXRcbiAgICAgICAgICAgIGNiICYmIGNiKHZhbHVlIGFzIG5ldmVyKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGFjdGl2ZSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCByZWYgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLiNyZWZzKSkge1xuICAgICAgICAgICAgICAgIGlmIChyZWYgaW5zdGFuY2VvZiBUSFJFRS5JbnN0YW5jZWRNZXNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVmLmNvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHV1aWQgPSBgJHtyZWYudXVpZH0vJHtpfWA7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuI2JvZGllc1t1dWlkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmLnNldE1hdHJpeEF0KGksIGFwcGx5KGluZGV4LCBwb3NpdGlvbnMsIHF1YXRlcm5pb25zLCB0aGlzLiNzY2FsZU92ZXJyaWRlc1t1dWlkXSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZi5pbnN0YW5jZU1hdHJpeC5uZWVkc1VwZGF0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzY2FsZSA9IHRoaXMuI3NjYWxlT3ZlcnJpZGVzW3JlZi51dWlkXSB8fCByZWYuc2NhbGU7XG4gICAgICAgICAgICAgICAgICAgIGFwcGx5KHRoaXMuI2JvZGllc1tyZWYudXVpZF0sIHBvc2l0aW9ucywgcXVhdGVybmlvbnMsIHNjYWxlLCByZWYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzaG91bGRJbnZhbGlkYXRlKSBpbnZhbGlkYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAjcmF5aGl0SGFuZGxlcih7IGJvZHksIHJheTogeyB1dWlkLCAuLi5yYXlSZXN0IH0sIC4uLnJlc3QgfTogV29ya2VyUmF5aGl0RXZlbnRbJ2RhdGEnXSkge1xuICAgICAgICBjb25zdCBjYiA9IHRoaXMuI2V2ZW50c1t1dWlkXT8ucmF5aGl0O1xuICAgICAgICBpZiAoY2IpIGNiKHsgYm9keTogYm9keSA/IHRoaXMuI3JlZnNbYm9keV0gOiBudWxsLCByYXk6IHsgdXVpZCwgLi4ucmF5UmVzdCB9LCAuLi5yZXN0IH0pO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { computed, effect, inject, runInInjectionContext } from '@angular/core';
|
|
2
|
-
import { assertInjectionContext, injectNgtRef,
|
|
2
|
+
import { assertInjectionContext, injectNgtRef, requestAnimationFrameInInjectionContext, } from 'angular-three';
|
|
3
3
|
import { NGTC_PHYSICS_API } from 'angular-three-cannon';
|
|
4
4
|
import { NGTC_DEBUG_API } from 'angular-three-cannon/debug';
|
|
5
5
|
import * as THREE from 'three';
|
|
@@ -94,13 +94,14 @@ function injectBody(type, getPropsFn, argsFn, { ref, injector, deps = () => ({})
|
|
|
94
94
|
const physicsApi = inject(NGTC_PHYSICS_API);
|
|
95
95
|
const debugApi = inject(NGTC_DEBUG_API, { optional: true });
|
|
96
96
|
const { add: debugAdd, remove: debugRemove } = debugApi?.() || {};
|
|
97
|
-
const { refs, worker, subscriptions, scaleOverrides, events } = physicsApi();
|
|
98
|
-
|
|
97
|
+
const { refs, worker, subscriptions, scaleOverrides, events, bodies } = physicsApi();
|
|
98
|
+
requestAnimationFrameInInjectionContext(() => {
|
|
99
99
|
effect((onCleanup) => {
|
|
100
100
|
// register deps
|
|
101
101
|
deps();
|
|
102
102
|
if (!bodyRef.nativeElement) {
|
|
103
103
|
bodyRef.nativeElement = new THREE.Object3D();
|
|
104
|
+
return;
|
|
104
105
|
}
|
|
105
106
|
const object = bodyRef.nativeElement;
|
|
106
107
|
const currentWorker = worker();
|
|
@@ -167,11 +168,11 @@ function injectBody(type, getPropsFn, argsFn, { ref, injector, deps = () => ({})
|
|
|
167
168
|
return {
|
|
168
169
|
copy: ({ w, x, y, z }) => {
|
|
169
170
|
const uuid = getUUID(bodyRef, index);
|
|
170
|
-
uuid && worker().setQuaternion({ props: [x, y, z, w], uuid });
|
|
171
|
+
uuid && bodies[uuid] != null && worker().setQuaternion({ props: [x, y, z, w], uuid });
|
|
171
172
|
},
|
|
172
173
|
set: (x, y, z, w) => {
|
|
173
174
|
const uuid = getUUID(bodyRef, index);
|
|
174
|
-
uuid && worker().setQuaternion({ props: [x, y, z, w], uuid });
|
|
175
|
+
uuid && bodies[uuid] != null && worker().setQuaternion({ props: [x, y, z, w], uuid });
|
|
175
176
|
},
|
|
176
177
|
subscribe: subscribe(bodyRef, worker(), subscriptions, type, index),
|
|
177
178
|
};
|
|
@@ -180,11 +181,11 @@ function injectBody(type, getPropsFn, argsFn, { ref, injector, deps = () => ({})
|
|
|
180
181
|
return {
|
|
181
182
|
copy: ({ x, y, z }) => {
|
|
182
183
|
const uuid = getUUID(bodyRef, index);
|
|
183
|
-
uuid && worker().setRotation({ props: [x, y, z], uuid });
|
|
184
|
+
uuid && bodies[uuid] != null && worker().setRotation({ props: [x, y, z], uuid });
|
|
184
185
|
},
|
|
185
186
|
set: (x, y, z) => {
|
|
186
187
|
const uuid = getUUID(bodyRef, index);
|
|
187
|
-
uuid && worker().setRotation({ props: [x, y, z], uuid });
|
|
188
|
+
uuid && bodies[uuid] != null && worker().setRotation({ props: [x, y, z], uuid });
|
|
188
189
|
},
|
|
189
190
|
subscribe: (callback) => {
|
|
190
191
|
const id = incrementingId++;
|
|
@@ -192,7 +193,7 @@ function injectBody(type, getPropsFn, argsFn, { ref, injector, deps = () => ({})
|
|
|
192
193
|
const type = 'quaternion';
|
|
193
194
|
const uuid = getUUID(bodyRef, index);
|
|
194
195
|
subscriptions[id] = { [type]: quaternionToRotation(callback) };
|
|
195
|
-
uuid && worker().subscribe({ props: { id, target, type }, uuid });
|
|
196
|
+
uuid && bodies[uuid] != null && worker().subscribe({ props: { id, target, type }, uuid });
|
|
196
197
|
return () => {
|
|
197
198
|
delete subscriptions[id];
|
|
198
199
|
worker().unsubscribe({ props: id });
|
|
@@ -205,11 +206,11 @@ function injectBody(type, getPropsFn, argsFn, { ref, injector, deps = () => ({})
|
|
|
205
206
|
return {
|
|
206
207
|
copy: ({ x, y, z }) => {
|
|
207
208
|
const uuid = getUUID(bodyRef, index);
|
|
208
|
-
uuid && worker()[op]({ props: [x, y, z], uuid });
|
|
209
|
+
uuid && bodies[uuid] != null && worker()[op]({ props: [x, y, z], uuid });
|
|
209
210
|
},
|
|
210
211
|
set: (x, y, z) => {
|
|
211
212
|
const uuid = getUUID(bodyRef, index);
|
|
212
|
-
uuid && worker()[op]({ props: [x, y, z], uuid });
|
|
213
|
+
uuid && bodies[uuid] != null && worker()[op]({ props: [x, y, z], uuid });
|
|
213
214
|
},
|
|
214
215
|
subscribe: subscribe(bodyRef, worker(), subscriptions, type, index),
|
|
215
216
|
};
|
|
@@ -229,23 +230,25 @@ function injectBody(type, getPropsFn, argsFn, { ref, injector, deps = () => ({})
|
|
|
229
230
|
angularVelocity: makeVec('angularVelocity', index),
|
|
230
231
|
applyForce(force, worldPoint) {
|
|
231
232
|
const uuid = getUUID(bodyRef, index);
|
|
232
|
-
uuid && worker().applyForce({ props: [force, worldPoint], uuid });
|
|
233
|
+
uuid && bodies[uuid] != null && worker().applyForce({ props: [force, worldPoint], uuid });
|
|
233
234
|
},
|
|
234
235
|
applyImpulse(impulse, worldPoint) {
|
|
235
236
|
const uuid = getUUID(bodyRef, index);
|
|
236
|
-
uuid && worker().applyImpulse({ props: [impulse, worldPoint], uuid });
|
|
237
|
+
uuid && bodies[uuid] != null && worker().applyImpulse({ props: [impulse, worldPoint], uuid });
|
|
237
238
|
},
|
|
238
239
|
applyLocalForce(force, localPoint) {
|
|
239
240
|
const uuid = getUUID(bodyRef, index);
|
|
240
|
-
uuid && worker().applyLocalForce({ props: [force, localPoint], uuid });
|
|
241
|
+
uuid && bodies[uuid] != null && worker().applyLocalForce({ props: [force, localPoint], uuid });
|
|
241
242
|
},
|
|
242
243
|
applyLocalImpulse(impulse, localPoint) {
|
|
243
244
|
const uuid = getUUID(bodyRef, index);
|
|
244
|
-
uuid &&
|
|
245
|
+
uuid &&
|
|
246
|
+
bodies[uuid] != null &&
|
|
247
|
+
worker().applyLocalImpulse({ props: [impulse, localPoint], uuid });
|
|
245
248
|
},
|
|
246
249
|
applyTorque(torque) {
|
|
247
250
|
const uuid = getUUID(bodyRef, index);
|
|
248
|
-
uuid && worker().applyTorque({ props: [torque], uuid });
|
|
251
|
+
uuid && bodies[uuid] != null && worker().applyTorque({ props: [torque], uuid });
|
|
249
252
|
},
|
|
250
253
|
collisionFilterGroup: makeAtomic('collisionFilterGroup', index),
|
|
251
254
|
collisionFilterMask: makeAtomic('collisionFilterMask', index),
|
|
@@ -266,7 +269,7 @@ function injectBody(type, getPropsFn, argsFn, { ref, injector, deps = () => ({})
|
|
|
266
269
|
},
|
|
267
270
|
sleep() {
|
|
268
271
|
const uuid = getUUID(bodyRef, index);
|
|
269
|
-
uuid && worker().sleep({ uuid });
|
|
272
|
+
uuid && bodies[uuid] != null && worker().sleep({ uuid });
|
|
270
273
|
},
|
|
271
274
|
sleepSpeedLimit: makeAtomic('sleepSpeedLimit', index),
|
|
272
275
|
sleepTimeLimit: makeAtomic('sleepTimeLimit', index),
|
|
@@ -275,7 +278,7 @@ function injectBody(type, getPropsFn, argsFn, { ref, injector, deps = () => ({})
|
|
|
275
278
|
remove: makeRemove(index),
|
|
276
279
|
wakeUp() {
|
|
277
280
|
const uuid = getUUID(bodyRef, index);
|
|
278
|
-
uuid && worker().wakeUp({ uuid });
|
|
281
|
+
uuid && bodies[uuid] != null && worker().wakeUp({ uuid });
|
|
279
282
|
},
|
|
280
283
|
};
|
|
281
284
|
}
|
|
@@ -288,4 +291,4 @@ function injectBody(type, getPropsFn, argsFn, { ref, injector, deps = () => ({})
|
|
|
288
291
|
return { ref: bodyRef, api };
|
|
289
292
|
});
|
|
290
293
|
}
|
|
291
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9keS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY2Fubm9uL3NlcnZpY2VzL3NyYy9ib2R5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0MsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUEyQjlHLE9BQU8sRUFHSCxzQkFBc0IsRUFDdEIsWUFBWSxFQUNaLGdDQUFnQyxHQUNuQyxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQW9CLE1BQU0sc0JBQXNCLENBQUM7QUFDMUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBaUQvQixNQUFNLElBQUksR0FBRyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUVsQyxTQUFTLFVBQVUsQ0FBbUIsR0FBTTtJQUN4QyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFrQixDQUFDO0FBQ3pFLENBQUM7QUFFRCxNQUFNLFVBQVUsT0FBTyxDQUFDLEdBQStCLEVBQUUsS0FBYztJQUNuRSxNQUFNLE1BQU0sR0FBRyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxFQUFFLENBQUM7SUFDdEQsSUFBSSxPQUFPLEdBQUcsS0FBSyxVQUFVO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDM0MsT0FBTyxHQUFHLElBQUksR0FBRyxDQUFDLGFBQWEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQzVFLENBQUM7QUFFRCxNQUFNLENBQUMsR0FBRyxJ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LEVBQUUsS0FBSyxDQUFDO29CQUNyRCxjQUFjLEVBQUUsVUFBVSxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQztvQkFDbkQsUUFBUSxFQUFFLFVBQVUsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDO29CQUN2QyxRQUFRLEVBQUUsT0FBTyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUM7b0JBQ3BDLE1BQU0sRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDO29CQUN6QixNQUFNO3dCQUNGLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7d0JBQ3JDLElBQUksSUFBSSxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUN0QyxDQUFDO2lCQUNKLENBQUM7WUFDTixDQUFDO1lBRUQsTUFBTSxLQUFLLEdBQXVDLEVBQUUsQ0FBQztZQUNyRCxPQUFPO2dCQUNILEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztnQkFDckIsRUFBRSxFQUFFLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3pFLENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pDLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVsZW1lbnRSZWYsIEluamVjdG9yLCBTaWduYWwsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCwgcnVuSW5JbmplY3Rpb25Db250ZXh0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7XG4gICAgQXRvbWljTmFtZSxcbiAgICBBdG9taWNQcm9wcyxcbiAgICBCb2R5UHJvcHMsXG4gICAgQm9keVNoYXBlVHlwZSxcbiAgICBCb3hQcm9wcyxcbiAgICBDYW5ub25Xb3JrZXJBUEksXG4gICAgQ29tcG91bmRCb2R5UHJvcHMsXG4gICAgQ29udmV4UG9seWhlZHJvbkFyZ3MsXG4gICAgQ29udmV4UG9seWhlZHJvblByb3BzLFxuICAgIEN5bGluZGVyUHJvcHMsXG4gICAgSGVpZ2h0ZmllbGRQcm9wcyxcbiAgICBQYXJ0aWNsZVByb3BzLFxuICAgIFBsYW5lUHJvcHMsXG4gICAgUHJvcFZhbHVlLFxuICAgIFF1YWQsXG4gICAgU2V0T3BOYW1lLFxuICAgIFNwaGVyZUFyZ3MsXG4gICAgU3BoZXJlUHJvcHMsXG4gICAgU3Vic2NyaXB0aW9uTmFtZSxcbiAgICBTdWJzY3JpcHRpb25UYXJnZXQsXG4gICAgU3Vic2NyaXB0aW9ucyxcbiAgICBUcmltZXNoUHJvcHMsXG4gICAgVHJpcGxldCxcbiAgICBWZWN0b3JOYW1lLFxufSBmcm9tICdAcG1uZHJzL2Nhbm5vbi13b3JrZXItYXBpJztcbmltcG9ydCB7XG4gICAgTmd0QW55UmVjb3JkLFxuICAgIE5ndEluamVjdGVkUmVmLFxuICAgIGFzc2VydEluamVjdGlvbkNvbnRleHQsXG4gICAgaW5qZWN0Tmd0UmVmLFxuICAgIHF1ZXVlTWljcm90YXNrSW5JbmplY3Rpb25Db250ZXh0LFxufSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IE5HVENfUEhZU0lDU19BUEksIE5ndGNDYW5ub25FdmVudHMgfSBmcm9tICdhbmd1bGFyLXRocmVlLWNhbm5vbic7XG5pbXBvcnQgeyBOR1RDX0RFQlVHX0FQSSB9IGZyb20gJ2FuZ3VsYXItdGhyZWUtY2Fubm9uL2RlYnVnJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcblxuZXhwb3J0IHR5cGUgTmd0Y0F0b21pY0FwaTxLIGV4dGVuZHMgQXRvbWljTmFtZT4gPSB7XG4gICAgc2V0OiAodmFsdWU6IEF0b21pY1Byb3BzW0tdKSA9PiB2b2lkO1xuICAgIHN1YnNjcmliZTogKGNhbGxiYWNrOiAodmFsdWU6IEF0b21pY1Byb3BzW0tdKSA9PiB2b2lkKSA9PiAoKSA9PiB2b2lkO1xufTtcblxuZXhwb3J0IHR5cGUgTmd0Y1F1YXRlcm5pb25BcGkgPSB7XG4gICAgY29weTogKHsgdywgeCwgeSwgeiB9OiBUSFJFRS5RdWF0ZXJuaW9uKSA9PiB2b2lkO1xuICAgIHNldDogKHg6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXIsIHc6IG51bWJlcikgPT4gdm9pZDtcbiAgICBzdWJzY3JpYmU6IChjYWxsYmFjazogKHZhbHVlOiBRdWFkKSA9PiB2b2lkKSA9PiAoKSA9PiB2b2lkO1xufTtcblxuZXhwb3J0IHR5cGUgTmd0Y1ZlY3RvckFwaSA9IHtcbiAgICBjb3B5OiAoeyB4LCB5LCB6IH06IFRIUkVFLlZlY3RvcjMgfCBUSFJFRS5FdWxlcikgPT4gdm9pZDtcbiAgICBzZXQ6ICh4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyKSA9PiB2b2lkO1xuICAgIHN1YnNjcmliZTogKGNhbGxiYWNrOiAodmFsdWU6IFRyaXBsZXQpID0+IHZvaWQpID0+ICgpID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgdHlwZSBOZ3RjV29ya2VyQXBpID0ge1xuICAgIFtLIGluIEF0b21pY05hbWVdOiBOZ3RjQXRvbWljQXBpPEs+O1xufSAmIHtcbiAgICBbSyBpbiBWZWN0b3JOYW1lXTogTmd0Y1ZlY3RvckFwaTtcbn0gJiB7XG4gICAgYXBwbHlGb3JjZTogKGZvcmNlOiBUcmlwbGV0LCB3b3JsZFBvaW50OiBUcmlwbGV0KSA9PiB2b2lkO1xuICAgIGFwcGx5SW1wdWxzZTogKGltcHVsc2U6IFRyaXBsZXQsIHdvcmxkUG9pbnQ6IFRyaXBsZXQpID0+IHZvaWQ7XG4gICAgYXBwbHlMb2NhbEZvcmNlOiAoZm9yY2U6IFRyaXBsZXQsIGxvY2FsUG9pbnQ6IFRyaXBsZXQpID0+IHZvaWQ7XG4gICAgYXBwbHlMb2NhbEltcHVsc2U6IChpbXB1bHNlOiBUcmlwbGV0LCBsb2NhbFBvaW50OiBUcmlwbGV0KSA9PiB2b2lkO1xuICAgIGFwcGx5VG9ycXVlOiAodG9ycXVlOiBUcmlwbGV0KSA9PiB2b2lkO1xuICAgIHF1YXRlcm5pb246IE5ndGNRdWF0ZXJuaW9uQXBpO1xuICAgIHJvdGF0aW9uOiBOZ3RjVmVjdG9yQXBpO1xuICAgIHNjYWxlT3ZlcnJpZGU6IChzY2FsZTogVHJpcGxldCkgPT4gdm9pZDtcbiAgICBzbGVlcDogKCkgPT4gdm9pZDtcbiAgICB3YWtlVXA6ICgpID0+IHZvaWQ7XG4gICAgcmVtb3ZlOiAoKSA9PiB2b2lkO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RjQm9keVB1YmxpY0FwaSBleHRlbmRzIE5ndGNXb3JrZXJBcGkge1xuICAgIGF0OiAoaW5kZXg6IG51bWJlcikgPT4gTmd0Y1dvcmtlckFwaTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZ3RjQm9keVJldHVybjxUT2JqZWN0IGV4dGVuZHMgVEhSRUUuT2JqZWN0M0Q+IHtcbiAgICByZWY6IE5ndEluamVjdGVkUmVmPFRPYmplY3Q+O1xuICAgIGFwaTogU2lnbmFsPE5ndGNCb2R5UHVibGljQXBpPjtcbn1cblxuZXhwb3J0IHR5cGUgTmd0Y0dldEJ5SW5kZXg8VCBleHRlbmRzIEJvZHlQcm9wcz4gPSAoaW5kZXg6IG51bWJlcikgPT4gVDtcbmV4cG9ydCB0eXBlIE5ndGNBcmdGbjxUPiA9IChhcmdzOiBUKSA9PiB1bmtub3duW107XG5cbmNvbnN0IHRlbXAgPSBuZXcgVEhSRUUuT2JqZWN0M0QoKTtcblxuZnVuY3Rpb24gY2FwaXRhbGl6ZTxUIGV4dGVuZHMgc3RyaW5nPihzdHI6IFQpOiBDYXBpdGFsaXplPFQ+IHtcbiAgICByZXR1cm4gKHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKSkgYXMgQ2FwaXRhbGl6ZTxUPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFVVSUQocmVmOiBFbGVtZW50UmVmPFRIUkVFLk9iamVjdDNEPiwgaW5kZXg/OiBudW1iZXIpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBzdWZmaXggPSBpbmRleCA9PT0gdW5kZWZpbmVkID8gJycgOiBgLyR7aW5kZXh9YDtcbiAgICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHJlZiAmJiByZWYubmF0aXZlRWxlbWVudCAmJiBgJHtyZWYubmF0aXZlRWxlbWVudC51dWlkfSR7c3VmZml4fWA7XG59XG5cbmNvbnN0IGUgPSBuZXcgVEhSRUUuRXVsZXIoKTtcbmNvbnN0IHEgPSBuZXcgVEhSRUUuUXVhdGVybmlvbigpO1xuXG5jb25zdCBxdWF0ZXJuaW9uVG9Sb3RhdGlvbiA9IChjYWxsYmFjazogKHY6IFRyaXBsZXQpID0+IHZvaWQpID0+IHtcbiAgICByZXR1cm4gKHY6IFF1YWQpID0+IGNhbGxiYWNrKGUuc2V0RnJvbVF1YXRlcm5pb24ocS5mcm9tQXJyYXkodikpLnRvQXJyYXkoKSBhcyBUcmlwbGV0KTtcbn07XG5cbmxldCBpbmNyZW1lbnRpbmdJZCA9IDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJzY3JpYmU8VCBleHRlbmRzIFN1YnNjcmlwdGlvbk5hbWU+KFxuICAgIHJlZjogRWxlbWVudFJlZjxUSFJFRS5PYmplY3QzRD4sXG4gICAgd29ya2VyOiBDYW5ub25Xb3JrZXJBUEksXG4gICAgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9ucyxcbiAgICB0eXBlOiBULFxuICAgIGluZGV4PzogbnVtYmVyLFxuICAgIHRhcmdldDogU3Vic2NyaXB0aW9uVGFyZ2V0ID0gJ2JvZGllcydcbikge1xuICAgIHJldHVybiAoY2FsbGJhY2s6ICh2YWx1ZTogUHJvcFZhbHVlPFQ+KSA9PiB2b2lkKSA9PiB7XG4gICAgICAgIGNvbnN0IGlkID0gaW5jcmVtZW50aW5nSWQrKztcbiAgICAgICAgc3Vic2NyaXB0aW9uc1tpZF0gPSB7IFt0eXBlXTogY2FsbGJhY2sgfTtcbiAgICAgICAgY29uc3QgdXVpZCA9IGdldFVVSUQocmVmLCBpbmRleCk7XG4gICAgICAgIHV1aWQgJiYgd29ya2VyLnN1YnNjcmliZSh7IHByb3BzOiB7IGlkLCB0YXJnZXQsIHR5cGUgfSwgdXVpZCB9KTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGRlbGV0ZSBzdWJzY3JpcHRpb25zW2lkXTtcbiAgICAgICAgICAgIHdvcmtlci51bnN1YnNjcmliZSh7IHByb3BzOiBpZCB9KTtcbiAgICAgICAgfTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlKG9iamVjdDogVEhSRUUuT2JqZWN0M0QsIHsgcG9zaXRpb24gPSBbMCwgMCwgMF0sIHJvdGF0aW9uID0gWzAsIDAsIDBdLCB1c2VyRGF0YSA9IHt9IH06IEJvZHlQcm9wcykge1xuICAgIG9iamVjdC51c2VyRGF0YSA9IHVzZXJEYXRhO1xuICAgIG9iamVjdC5wb3NpdGlvbi5zZXQoLi4ucG9zaXRpb24pO1xuICAgIG9iamVjdC5yb3RhdGlvbi5zZXQoLi4ucm90YXRpb24pO1xuICAgIG9iamVjdC51cGRhdGVNYXRyaXgoKTtcbn1cblxuZnVuY3Rpb24gc2V0dXBDb2xsaXNpb24oXG4gICAgZXZlbnRzOiBOZ3RjQ2Fubm9uRXZlbnRzLFxuICAgIHsgb25Db2xsaWRlLCBvbkNvbGxpZGVCZWdpbiwgb25Db2xsaWRlRW5kIH06IFBhcnRpYWw8Qm9keVByb3BzPixcbiAgICB1dWlkOiBzdHJpbmdcbikge1xuICAgIGV2ZW50c1t1dWlkXSA9IHtcbiAgICAgICAgY29sbGlkZTogb25Db2xsaWRlLFxuICAgICAgICBjb2xsaWRlQmVnaW46IG9uQ29sbGlkZUJlZ2luLFxuICAgICAgICBjb2xsaWRlRW5kOiBvbkNvbGxpZGVFbmQsXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gbWFrZVRyaXBsZXQodjogVEhSRUUuVmVjdG9yMyB8IFRyaXBsZXQpOiBUcmlwbGV0IHtcbiAgICByZXR1cm4gdiBpbnN0YW5jZW9mIFRIUkVFLlZlY3RvcjMgPyBbdi54LCB2LnksIHYuel0gOiB2O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ndGNCb2R5T3B0aW9uczxUT2JqZWN0IGV4dGVuZHMgVEhSRUUuT2JqZWN0M0Q+IHtcbiAgICByZWY/OiBOZ3RJbmplY3RlZFJlZjxUT2JqZWN0PjtcbiAgICBkZXBzPzogKCkgPT4gTmd0QW55UmVjb3JkO1xuICAgIGluamVjdG9yPzogSW5qZWN0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RQbGFuZTxUT2JqZWN0IGV4dGVuZHMgVEhSRUUuT2JqZWN0M0Q+KFxuICAgIGZuOiBOZ3RjR2V0QnlJbmRleDxQbGFuZVByb3BzPixcbiAgICBvcHRzPzogTmd0Y0JvZHlPcHRpb25zPFRPYmplY3Q+XG4pIHtcbiAgICByZXR1cm4gaW5qZWN0Qm9keSgnUGxhbmUnLCBmbiwgKCkgPT4gW10sIG9wdHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0Qm94PFRPYmplY3QgZXh0ZW5kcyBUSFJFRS5PYmplY3QzRD4oXG4gICAgZm46IE5ndGNHZXRCeUluZGV4PEJveFByb3BzPixcbiAgICBvcHRzPzogTmd0Y0JvZHlPcHRpb25zPFRPYmplY3Q+XG4pIHtcbiAgICBjb25zdCBkZWZhdWx0Qm94QXJnczogVHJpcGxldCA9IFsxLCAxLCAxXTtcbiAgICByZXR1cm4gaW5qZWN0Qm9keSgnQm94JywgZm4sIChhcmdzID0gZGVmYXVsdEJveEFyZ3MpOiBUcmlwbGV0ID0+IGFyZ3MsIG9wdHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0Q3lsaW5kZXI8VE9iamVjdCBleHRlbmRzIFRIUkVFLk9iamVjdDNEPihcbiAgICBmbjogTmd0Y0dldEJ5SW5kZXg8Q3lsaW5kZXJQcm9wcz4sXG4gICAgb3B0cz86IE5ndGNCb2R5T3B0aW9uczxUT2JqZWN0PlxuKSB7XG4gICAgcmV0dXJuIGluamVjdEJvZHkoJ0N5bGluZGVyJywgZm4sIChhcmdzID0gW10gYXMgW10pID0+IGFyZ3MsIG9wdHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0SGVpZ2h0ZmllbGQ8VE9iamVjdCBleHRlbmRzIFRIUkVFLk9iamVjdDNEPihcbiAgICBmbjogTmd0Y0dldEJ5SW5kZXg8SGVpZ2h0ZmllbGRQcm9wcz4sXG4gICAgb3B0cz86IE5ndGNCb2R5T3B0aW9uczxUT2JqZWN0PlxuKSB7XG4gICAgcmV0dXJuIGluamVjdEJvZHkoJ0hlaWdodGZpZWxkJywgZm4sIChhcmdzKSA9PiBhcmdzLCBvcHRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdFBhcnRpY2xlPFRPYmplY3QgZXh0ZW5kcyBUSFJFRS5PYmplY3QzRD4oXG4gICAgZm46IE5ndGNHZXRCeUluZGV4PFBhcnRpY2xlUHJvcHM+LFxuICAgIG9wdHM/OiBOZ3RjQm9keU9wdGlvbnM8VE9iamVjdD5cbikge1xuICAgIHJldHVybiBpbmplY3RCb2R5KCdQYXJ0aWNsZScsIGZuLCAoKSA9PiBbXSwgb3B0cyk7XG59XG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0U3BoZXJlPFRPYmplY3QgZXh0ZW5kcyBUSFJFRS5PYmplY3QzRD4oXG4gICAgZm46IE5ndGNHZXRCeUluZGV4PFNwaGVyZVByb3BzPixcbiAgICBvcHRzPzogTmd0Y0JvZHlPcHRpb25zPFRPYmplY3Q+XG4pIHtcbiAgICByZXR1cm4gaW5qZWN0Qm9keShcbiAgICAgICAgJ1NwaGVyZScsXG4gICAgICAgIGZuLFxuICAgICAgICAoYXJnczogU3BoZXJlQXJncyA9IFsxXSk6IFNwaGVyZUFyZ3MgPT4ge1xuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFyZ3MpKSB0aHJvdyBuZXcgRXJyb3IoJ3VzZVNwaGVyZSBhcmdzIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICAgICAgICAgIHJldHVybiBbYXJnc1swXV07XG4gICAgICAgIH0sXG4gICAgICAgIG9wdHNcbiAgICApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdFRyaW1lc2g8VE9iamVjdCBleHRlbmRzIFRIUkVFLk9iamVjdDNEPihcbiAgICBmbjogTmd0Y0dldEJ5SW5kZXg8VHJpbWVzaFByb3BzPixcbiAgICBvcHRzPzogTmd0Y0JvZHlPcHRpb25zPFRPYmplY3Q+XG4pIHtcbiAgICByZXR1cm4gaW5qZWN0Qm9keSgnVHJpbWVzaCcsIGZuLCAoYXJncykgPT4gYXJncywgb3B0cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RDb252ZXhQb2x5aGVkcm9uPFRPYmplY3QgZXh0ZW5kcyBUSFJFRS5PYmplY3QzRD4oXG4gICAgZm46IE5ndGNHZXRCeUluZGV4PENvbnZleFBvbHloZWRyb25Qcm9wcz4sXG4gICAgb3B0cz86IE5ndGNCb2R5T3B0aW9uczxUT2JqZWN0PlxuKSB7XG4gICAgcmV0dXJuIGluamVjdEJvZHkoXG4gICAgICAgICdDb252ZXhQb2x5aGVkcm9uJyxcbiAgICAgICAgZm4sXG4gICAgICAgIChbdmVydGljZXMsIGZhY2VzLCBub3JtYWxzLCBheGVzLCBib3VuZGluZ1NwaGVyZVJhZGl1c10gPSBbXSk6IENvbnZleFBvbHloZWRyb25BcmdzPFRyaXBsZXQ+ID0+IFtcbiAgICAgICAgICAgIHZlcnRpY2VzICYmIHZlcnRpY2VzLm1hcChtYWtlVHJpcGxldCksXG4gICAgICAgICAgICBmYWNlcyxcbiAgICAgICAgICAgIG5vcm1hbHMgJiYgbm9ybWFscy5tYXAobWFrZVRyaXBsZXQpLFxuICAgICAgICAgICAgYXhlcyAmJiBheGVzLm1hcChtYWtlVHJpcGxldCksXG4gICAgICAgICAgICBib3VuZGluZ1NwaGVyZVJhZGl1cyxcbiAgICAgICAgXSxcbiAgICAgICAgb3B0c1xuICAgICk7XG59XG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0Q29tcG91bmRCb2R5PFRPYmplY3QgZXh0ZW5kcyBUSFJFRS5PYmplY3QzRD4oXG4gICAgZm46IE5ndGNHZXRCeUluZGV4PENvbXBvdW5kQm9keVByb3BzPixcbiAgICBvcHRzPzogTmd0Y0JvZHlPcHRpb25zPFRPYmplY3Q+XG4pIHtcbiAgICByZXR1cm4gaW5qZWN0Qm9keSgnQ29tcG91bmQnLCBmbiwgKGFyZ3MpID0+IGFyZ3MgYXMgdW5rbm93bltdLCBvcHRzKTtcbn1cblxuZnVuY3Rpb24gaW5qZWN0Qm9keTxUQm9keVByb3BzIGV4dGVuZHMgQm9keVByb3BzLCBUT2JqZWN0IGV4dGVuZHMgVEhSRUUuT2JqZWN0M0Q+KFxuICAgIHR5cGU6IEJvZHlTaGFwZVR5cGUsXG4gICAgZ2V0UHJvcHNGbjogTmd0Y0dldEJ5SW5kZXg8VEJvZHlQcm9wcz4sXG4gICAgYXJnc0ZuOiBOZ3RjQXJnRm48VEJvZHlQcm9wc1snYXJncyddPixcbiAgICB7IHJlZiwgaW5qZWN0b3IsIGRlcHMgPSAoKSA9PiAoe30pIH06IE5ndGNCb2R5T3B0aW9uczxUT2JqZWN0PiA9IHt9XG4pOiBOZ3RjQm9keVJldHVybjxUT2JqZWN0PiB7XG4gICAgaW5qZWN0b3IgPSBhc3NlcnRJbmplY3Rpb25Db250ZXh0KGluamVjdEJvZHksIGluamVjdG9yKTtcbiAgICByZXR1cm4gcnVuSW5JbmplY3Rpb25Db250ZXh0KGluamVjdG9yLCAoKSA9PiB7XG4gICAgICAgIGxldCBib2R5UmVmID0gaW5qZWN0Tmd0UmVmPFRPYmplY3Q+KCk7XG5cbiAgICAgICAgaWYgKHJlZikgYm9keVJlZiA9IHJlZjtcblxuICAgICAgICBjb25zdCBwaHlzaWNzQXBpID0gaW5qZWN0KE5HVENfUEhZU0lDU19BUEkpO1xuICAgICAgICBjb25zdCBkZWJ1Z0FwaSA9IGluamVjdChOR1RDX0RFQlVHX0FQSSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAgICAgICBjb25zdCB7IGFkZDogZGVidWdBZGQsIHJlbW92ZTogZGVidWdSZW1vdmUgfSA9IGRlYnVnQXBpPy4oKSB8fCB7fTtcbiAgICAgICAgY29uc3QgeyByZWZzLCB3b3JrZXIsIHN1YnNjcmlwdGlvbnMsIHNjYWxlT3ZlcnJpZGVzLCBldmVudHMgfSA9IHBoeXNpY3NBcGkoKTtcblxuICAgICAgICBxdWV1ZU1pY3JvdGFza0luSW5qZWN0aW9uQ29udGV4dCgoKSA9PiB7XG4gICAgICAgICAgICBlZmZlY3QoXG4gICAgICAgICAgICAgICAgKG9uQ2xlYW51cCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciBkZXBzXG4gICAgICAgICAgICAgICAgICAgIGRlcHMoKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoIWJvZHlSZWYubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYm9keVJlZi5uYXRpdmVFbGVtZW50ID0gbmV3IFRIUkVFLk9iamVjdDNEKCkgYXMgVE9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9iamVjdCA9IGJvZHlSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFdvcmtlciA9IHdvcmtlcigpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9iamVjdENvdW50ID1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdCBpbnN0YW5jZW9mIFRIUkVFLkluc3RhbmNlZE1lc2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IChvYmplY3QuaW5zdGFuY2VNYXRyaXguc2V0VXNhZ2UoVEhSRUUuRHluYW1pY0RyYXdVc2FnZSksIG9iamVjdC5jb3VudClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDE7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXVpZCA9XG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QgaW5zdGFuY2VvZiBUSFJFRS5JbnN0YW5jZWRNZXNoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBuZXcgQXJyYXkob2JqZWN0Q291bnQpLmZpbGwoMCkubWFwKChfLCBpKSA9PiBgJHtvYmplY3QudXVpZH0vJHtpfWApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBbb2JqZWN0LnV1aWRdO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb3BzOiAoVEJvZHlQcm9wcyAmIHsgYXJnczogdW5rbm93biB9KVtdID1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdCBpbnN0YW5jZW9mIFRIUkVFLkluc3RhbmNlZE1lc2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHV1aWQubWFwKChpZCwgaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb3BzID0gZ2V0UHJvcHNGbihpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVwYXJlKHRlbXAsIHByb3BzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc2V0TWF0cml4QXQoaSwgdGVtcC5tYXRyaXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5pbnN0YW5jZU1hdHJpeC5uZWVkc1VwZGF0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmc1tpZF0gPSBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdBZGQ/LihpZCwgcHJvcHMsIHR5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldHVwQ29sbGlzaW9uKGV2ZW50cywgcHJvcHMsIGlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5wcm9wcywgYXJnczogYXJnc0ZuKHByb3BzLmFyZ3MpIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdXVpZC5tYXAoKGlkLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvcHMgPSBnZXRQcm9wc0ZuKGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXBhcmUob2JqZWN0LCBwcm9wcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmc1tpZF0gPSBvYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdBZGQ/LihpZCwgcHJvcHMsIHR5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldHVwQ29sbGlzaW9uKGV2ZW50cywgcHJvcHMsIGlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5wcm9wcywgYXJnczogYXJnc0ZuKHByb3BzLmFyZ3MpIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBSZWdpc3RlciBvbiBtb3VudCwgdW5yZWdpc3RlciBvbiB1bm1vdW50XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRXb3JrZXIuYWRkQm9kaWVzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzOiBwcm9wcy5tYXAoKHsgb25Db2xsaWRlLCBvbkNvbGxpZGVCZWdpbiwgb25Db2xsaWRlRW5kLCAuLi5zZXJpYWxpemFibGVQcm9wcyB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgb25Db2xsaWRlOiBCb29sZWFuKG9uQ29sbGlkZSksIC4uLnNlcmlhbGl6YWJsZVByb3BzIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB1dWlkLFxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBvbkNsZWFudXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXVpZC5mb3JFYWNoKChpZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZWZzW2lkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z1JlbW92ZT8uKGlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgZXZlbnRzW2lkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFdvcmtlci5yZW1vdmVCb2RpZXMoeyB1dWlkIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgYXBpID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWFrZUF0b21pYyA9IDxUIGV4dGVuZHMgQXRvbWljTmFtZT4odHlwZTogVCwgaW5kZXg/OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcDogU2V0T3BOYW1lPFQ+ID0gYHNldCR7Y2FwaXRhbGl6ZSh0eXBlKX1gO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0OiAodmFsdWU6IFByb3BWYWx1ZTxUPikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXVpZCA9IGdldFVVSUQoYm9keVJlZiwgaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdXVpZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcigpW29wXSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXVpZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGFzIG5ldmVyKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlOiBzdWJzY3JpYmUoYm9keVJlZiwgd29ya2VyKCksIHN1YnNjcmlwdGlvbnMsIHR5cGUsIGluZGV4KSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgbWFrZVF1YXRlcm5pb24gPSAoaW5kZXg/OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB0eXBlID0gJ3F1YXRlcm5pb24nO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGNvcHk6ICh7IHcsIHgsIHksIHogfTogVEhSRUUuUXVhdGVybmlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXVpZCA9IGdldFVVSUQoYm9keVJlZiwgaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdXVpZCAmJiB3b3JrZXIoKS5zZXRRdWF0ZXJuaW9uKHsgcHJvcHM6IFt4LCB5LCB6LCB3XSwgdXVpZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc2V0OiAoeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlciwgdzogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1dWlkID0gZ2V0VVVJRChib2R5UmVmLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB1dWlkICYmIHdvcmtlcigpLnNldFF1YXRlcm5pb24oeyBwcm9wczogW3gsIHksIHosIHddLCB1dWlkIH0pO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmU6IHN1YnNjcmliZShib2R5UmVmLCB3b3JrZXIoKSwgc3Vic2NyaXB0aW9ucywgdHlwZSwgaW5kZXgpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBtYWtlUm90YXRpb24gPSAoaW5kZXg/OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBjb3B5OiAoeyB4LCB5LCB6IH06IFRIUkVFLlZlY3RvcjMgfCBUSFJFRS5FdWxlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXVpZCA9IGdldFVVSUQoYm9keVJlZiwgaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdXVpZCAmJiB3b3JrZXIoKS5zZXRSb3RhdGlvbih7IHByb3BzOiBbeCwgeSwgel0sIHV1aWQgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHNldDogKHg6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHlSZWYsIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHV1aWQgJiYgd29ya2VyKCkuc2V0Um90YXRpb24oeyBwcm9wczogW3gsIHksIHpdLCB1dWlkIH0pO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmU6IChjYWxsYmFjazogKHZhbHVlOiBUcmlwbGV0KSA9PiB2b2lkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpZCA9IGluY3JlbWVudGluZ0lkKys7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSAnYm9kaWVzJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSAncXVhdGVybmlvbic7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1dWlkID0gZ2V0VVVJRChib2R5UmVmLCBpbmRleCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbnNbaWRdID0geyBbdHlwZV06IHF1YXRlcm5pb25Ub1JvdGF0aW9uKGNhbGxiYWNrKSB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdXVpZCAmJiB3b3JrZXIoKS5zdWJzY3JpYmUoeyBwcm9wczogeyBpZCwgdGFyZ2V0LCB0eXBlIH0sIHV1aWQgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzdWJzY3JpcHRpb25zW2lkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXIoKS51bnN1YnNjcmliZSh7IHByb3BzOiBpZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IG1ha2VWZWMgPSAodHlwZTogVmVjdG9yTmFtZSwgaW5kZXg/OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcDogU2V0T3BOYW1lPFZlY3Rvck5hbWU+ID0gYHNldCR7Y2FwaXRhbGl6ZSh0eXBlKX1gO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGNvcHk6ICh7IHgsIHksIHogfTogVEhSRUUuVmVjdG9yMyB8IFRIUkVFLkV1bGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1dWlkID0gZ2V0VVVJRChib2R5UmVmLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB1dWlkICYmIHdvcmtlcigpW29wXSh7IHByb3BzOiBbeCwgeSwgel0sIHV1aWQgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHNldDogKHg6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHlSZWYsIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHV1aWQgJiYgd29ya2VyKClbb3BdKHsgcHJvcHM6IFt4LCB5LCB6XSwgdXVpZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlOiBzdWJzY3JpYmUoYm9keVJlZiwgd29ya2VyKCksIHN1YnNjcmlwdGlvbnMsIHR5cGUsIGluZGV4KSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgbWFrZVJlbW92ZSA9IChpbmRleD86IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHlSZWYsIGluZGV4KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodXVpZCkgd29ya2VyKCkucmVtb3ZlQm9kaWVzKHsgdXVpZDogW3V1aWRdIH0pO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBmdW5jdGlvbiBtYWtlQXBpKGluZGV4PzogbnVtYmVyKTogTmd0Y1dvcmtlckFwaSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dTbGVlcDogbWFrZUF0b21pYygnYWxsb3dTbGVlcCcsIGluZGV4KSxcbiAgICAgICAgICAgICAgICAgICAgYW5ndWxhckRhbXBpbmc6IG1ha2VBdG9taWMoJ2FuZ3VsYXJEYW1waW5nJywgaW5kZXgpLFxuICAgICAgICAgICAgICAgICAgICBhbmd1bGFyRmFjdG9yOiBtYWtlVmVjKCdhbmd1bGFyRmFjdG9yJywgaW5kZXgpLFxuICAgICAgICAgICAgICAgICAgICBhbmd1bGFyVmVsb2NpdHk6IG1ha2VWZWMoJ2FuZ3VsYXJWZWxvY2l0eScsIGluZGV4KSxcbiAgICAgICAgICAgICAgICAgICAgYXBwbHlGb3JjZShmb3JjZTogVHJpcGxldCwgd29ybGRQb2ludDogVHJpcGxldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXVpZCA9IGdldFVVSUQoYm9keVJlZiwgaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdXVpZCAmJiB3b3JrZXIoKS5hcHBseUZvcmNlKHsgcHJvcHM6IFtmb3JjZSwgd29ybGRQb2ludF0sIHV1aWQgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGFwcGx5SW1wdWxzZShpbXB1bHNlOiBUcmlwbGV0LCB3b3JsZFBvaW50OiBUcmlwbGV0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1dWlkID0gZ2V0VVVJRChib2R5UmVmLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB1dWlkICYmIHdvcmtlcigpLmFwcGx5SW1wdWxzZSh7IHByb3BzOiBbaW1wdWxzZSwgd29ybGRQb2ludF0sIHV1aWQgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGFwcGx5TG9jYWxGb3JjZShmb3JjZTogVHJpcGxldCwgbG9jYWxQb2ludDogVHJpcGxldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXVpZCA9IGdldFVVSUQoYm9keVJlZiwgaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdXVpZCAmJiB3b3JrZXIoKS5hcHBseUxvY2FsRm9yY2UoeyBwcm9wczogW2ZvcmNlLCBsb2NhbFBvaW50XSwgdXVpZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgYXBwbHlMb2NhbEltcHVsc2UoaW1wdWxzZTogVHJpcGxldCwgbG9jYWxQb2ludDogVHJpcGxldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXVpZCA9IGdldFVVSUQoYm9keVJlZiwgaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdXVpZCAmJiB3b3JrZXIoKS5hcHBseUxvY2FsSW1wdWxzZSh7IHByb3BzOiBbaW1wdWxzZSwgbG9jYWxQb2ludF0sIHV1aWQgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGFwcGx5VG9ycXVlKHRvcnF1ZTogVHJpcGxldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXVpZCA9IGdldFVVSUQoYm9keVJlZiwgaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdXVpZCAmJiB3b3JrZXIoKS5hcHBseVRvcnF1ZSh7IHByb3BzOiBbdG9ycXVlXSwgdXVpZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgY29sbGlzaW9uRmlsdGVyR3JvdXA6IG1ha2VBdG9taWMoJ2NvbGxpc2lvbkZpbHRlckdyb3VwJywgaW5kZXgpLFxuICAgICAgICAgICAgICAgICAgICBjb2xsaXNpb25GaWx0ZXJNYXNrOiBtYWtlQXRvbWljKCdjb2xsaXNpb25GaWx0ZXJNYXNrJywgaW5kZXgpLFxuICAgICAgICAgICAgICAgICAgICBjb2xsaXNpb25SZXNwb25zZTogbWFrZUF0b21pYygnY29sbGlzaW9uUmVzcG9uc2UnLCBpbmRleCksXG4gICAgICAgICAgICAgICAgICAgIGZpeGVkUm90YXRpb246IG1ha2VBdG9taWMoJ2ZpeGVkUm90YXRpb24nLCBpbmRleCksXG4gICAgICAgICAgICAgICAgICAgIGlzVHJpZ2dlcjogbWFrZUF0b21pYygnaXNUcmlnZ2VyJywgaW5kZXgpLFxuICAgICAgICAgICAgICAgICAgICBsaW5lYXJEYW1waW5nOiBtYWtlQXRvbWljKCdsaW5lYXJEYW1waW5nJywgaW5kZXgpLFxuICAgICAgICAgICAgICAgICAgICBsaW5lYXJGYWN0b3I6IG1ha2VWZWMoJ2xpbmVhckZhY3RvcicsIGluZGV4KSxcbiAgICAgICAgICAgICAgICAgICAgbWFzczogbWFrZUF0b21pYygnbWFzcycsIGluZGV4KSxcbiAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWw6IG1ha2VBdG9taWMoJ21hdGVyaWFsJywgaW5kZXgpLFxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogbWFrZVZlYygncG9zaXRpb24nLCBpbmRleCksXG4gICAgICAgICAgICAgICAgICAgIHF1YXRlcm5pb246IG1ha2VRdWF0ZXJuaW9uKGluZGV4KSxcbiAgICAgICAgICAgICAgICAgICAgcm90YXRpb246IG1ha2VSb3RhdGlvbihpbmRleCksXG4gICAgICAgICAgICAgICAgICAgIHNjYWxlT3ZlcnJpZGUoc2NhbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHlSZWYsIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1dWlkKSBzY2FsZU92ZXJyaWRlc1t1dWlkXSA9IG5ldyBUSFJFRS5WZWN0b3IzKC4uLnNjYWxlKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc2xlZXAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1dWlkID0gZ2V0VVVJRChib2R5UmVmLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB1dWlkICYmIHdvcmtlcigpLnNsZWVwKHsgdXVpZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc2xlZXBTcGVlZExpbWl0OiBtYWtlQXRvbWljKCdzbGVlcFNwZWVkTGltaXQnLCBpbmRleCksXG4gICAgICAgICAgICAgICAgICAgIHNsZWVwVGltZUxpbWl0OiBtYWtlQXRvbWljKCdzbGVlcFRpbWVMaW1pdCcsIGluZGV4KSxcbiAgICAgICAgICAgICAgICAgICAgdXNlckRhdGE6IG1ha2VBdG9taWMoJ3VzZXJEYXRhJywgaW5kZXgpLFxuICAgICAgICAgICAgICAgICAgICB2ZWxvY2l0eTogbWFrZVZlYygndmVsb2NpdHknLCBpbmRleCksXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZTogbWFrZVJlbW92ZShpbmRleCksXG4gICAgICAgICAgICAgICAgICAgIHdha2VVcCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHlSZWYsIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHV1aWQgJiYgd29ya2VyKCkud2FrZVVwKHsgdXVpZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjYWNoZTogeyBbaW5kZXg6IG51bWJlcl06IE5ndGNXb3JrZXJBcGkgfSA9IHt9O1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5tYWtlQXBpKHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgYXQ6IChpbmRleDogbnVtYmVyKSA9PiBjYWNoZVtpbmRleF0gfHwgKGNhY2hlW2luZGV4XSA9IG1ha2VBcGkoaW5kZXgpKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB7IHJlZjogYm9keVJlZiwgYXBpIH07XG4gICAgfSk7XG59XG4iXX0=
|
|
294
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9keS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY2Fubm9uL3NlcnZpY2VzL3NyYy9ib2R5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0MsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUEyQjlHLE9BQU8sRUFHSCxzQkFBc0IsRUFDdEIsWUFBWSxFQUNaLHVDQUF1QyxHQUMxQyxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQW9CLE1BQU0sc0JBQXNCLENBQUM7QUFDMUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBaUQvQixNQUFNLElBQUksR0FBRyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUVsQyxTQUFTLFVBQVUsQ0FBbUIsR0FBTTtJQUN4QyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFrQixDQUFDO0FBQ3pFLENBQUM7QUFFRCxNQUFNLFVBQVUsT0FBTyxDQUFDLEdBQStCLEVBQUUsS0FBYztJQUNuRSxNQUFNLE1BQU0sR0FBRyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxFQUFFLENBQUM7SUFDdEQsSUFBSSxPQUFPLEdBQUcsS0FBSyxVQUFVO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDM0MsT0FBTyxHQUFHLElBQUksR0FBRyxDQUFDLGFBQWEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQzVFLENBQUM7QUFFRCxNQUFNLENBQUMsR0FBRyxJ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QUFFLENBQUM7WUFDckQsT0FBTztnQkFDSCxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7Z0JBQ3JCLEVBQUUsRUFBRSxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN6RSxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQyxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmLCBJbmplY3RvciwgU2lnbmFsLCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QsIHJ1bkluSW5qZWN0aW9uQ29udGV4dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUge1xuICAgIEF0b21pY05hbWUsXG4gICAgQXRvbWljUHJvcHMsXG4gICAgQm9keVByb3BzLFxuICAgIEJvZHlTaGFwZVR5cGUsXG4gICAgQm94UHJvcHMsXG4gICAgQ2Fubm9uV29ya2VyQVBJLFxuICAgIENvbXBvdW5kQm9keVByb3BzLFxuICAgIENvbnZleFBvbHloZWRyb25BcmdzLFxuICAgIENvbnZleFBvbHloZWRyb25Qcm9wcyxcbiAgICBDeWxpbmRlclByb3BzLFxuICAgIEhlaWdodGZpZWxkUHJvcHMsXG4gICAgUGFydGljbGVQcm9wcyxcbiAgICBQbGFuZVByb3BzLFxuICAgIFByb3BWYWx1ZSxcbiAgICBRdWFkLFxuICAgIFNldE9wTmFtZSxcbiAgICBTcGhlcmVBcmdzLFxuICAgIFNwaGVyZVByb3BzLFxuICAgIFN1YnNjcmlwdGlvbk5hbWUsXG4gICAgU3Vic2NyaXB0aW9uVGFyZ2V0LFxuICAgIFN1YnNjcmlwdGlvbnMsXG4gICAgVHJpbWVzaFByb3BzLFxuICAgIFRyaXBsZXQsXG4gICAgVmVjdG9yTmFtZSxcbn0gZnJvbSAnQHBtbmRycy9jYW5ub24td29ya2VyLWFwaSc7XG5pbXBvcnQge1xuICAgIE5ndEFueVJlY29yZCxcbiAgICBOZ3RJbmplY3RlZFJlZixcbiAgICBhc3NlcnRJbmplY3Rpb25Db250ZXh0LFxuICAgIGluamVjdE5ndFJlZixcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWVJbkluamVjdGlvbkNvbnRleHQsXG59IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgTkdUQ19QSFlTSUNTX0FQSSwgTmd0Y0Nhbm5vbkV2ZW50cyB9IGZyb20gJ2FuZ3VsYXItdGhyZWUtY2Fubm9uJztcbmltcG9ydCB7IE5HVENfREVCVUdfQVBJIH0gZnJvbSAnYW5ndWxhci10aHJlZS1jYW5ub24vZGVidWcnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuXG5leHBvcnQgdHlwZSBOZ3RjQXRvbWljQXBpPEsgZXh0ZW5kcyBBdG9taWNOYW1lPiA9IHtcbiAgICBzZXQ6ICh2YWx1ZTogQXRvbWljUHJvcHNbS10pID0+IHZvaWQ7XG4gICAgc3Vic2NyaWJlOiAoY2FsbGJhY2s6ICh2YWx1ZTogQXRvbWljUHJvcHNbS10pID0+IHZvaWQpID0+ICgpID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgdHlwZSBOZ3RjUXVhdGVybmlvbkFwaSA9IHtcbiAgICBjb3B5OiAoeyB3LCB4LCB5LCB6IH06IFRIUkVFLlF1YXRlcm5pb24pID0+IHZvaWQ7XG4gICAgc2V0OiAoeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlciwgdzogbnVtYmVyKSA9PiB2b2lkO1xuICAgIHN1YnNjcmliZTogKGNhbGxiYWNrOiAodmFsdWU6IFF1YWQpID0+IHZvaWQpID0+ICgpID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgdHlwZSBOZ3RjVmVjdG9yQXBpID0ge1xuICAgIGNvcHk6ICh7IHgsIHksIHogfTogVEhSRUUuVmVjdG9yMyB8IFRIUkVFLkV1bGVyKSA9PiB2b2lkO1xuICAgIHNldDogKHg6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXIpID0+IHZvaWQ7XG4gICAgc3Vic2NyaWJlOiAoY2FsbGJhY2s6ICh2YWx1ZTogVHJpcGxldCkgPT4gdm9pZCkgPT4gKCkgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCB0eXBlIE5ndGNXb3JrZXJBcGkgPSB7XG4gICAgW0sgaW4gQXRvbWljTmFtZV06IE5ndGNBdG9taWNBcGk8Sz47XG59ICYge1xuICAgIFtLIGluIFZlY3Rvck5hbWVdOiBOZ3RjVmVjdG9yQXBpO1xufSAmIHtcbiAgICBhcHBseUZvcmNlOiAoZm9yY2U6IFRyaXBsZXQsIHdvcmxkUG9pbnQ6IFRyaXBsZXQpID0+IHZvaWQ7XG4gICAgYXBwbHlJbXB1bHNlOiAoaW1wdWxzZTogVHJpcGxldCwgd29ybGRQb2ludDogVHJpcGxldCkgPT4gdm9pZDtcbiAgICBhcHBseUxvY2FsRm9yY2U6IChmb3JjZTogVHJpcGxldCwgbG9jYWxQb2ludDogVHJpcGxldCkgPT4gdm9pZDtcbiAgICBhcHBseUxvY2FsSW1wdWxzZTogKGltcHVsc2U6IFRyaXBsZXQsIGxvY2FsUG9pbnQ6IFRyaXBsZXQpID0+IHZvaWQ7XG4gICAgYXBwbHlUb3JxdWU6ICh0b3JxdWU6IFRyaXBsZXQpID0+IHZvaWQ7XG4gICAgcXVhdGVybmlvbjogTmd0Y1F1YXRlcm5pb25BcGk7XG4gICAgcm90YXRpb246IE5ndGNWZWN0b3JBcGk7XG4gICAgc2NhbGVPdmVycmlkZTogKHNjYWxlOiBUcmlwbGV0KSA9PiB2b2lkO1xuICAgIHNsZWVwOiAoKSA9PiB2b2lkO1xuICAgIHdha2VVcDogKCkgPT4gdm9pZDtcbiAgICByZW1vdmU6ICgpID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndGNCb2R5UHVibGljQXBpIGV4dGVuZHMgTmd0Y1dvcmtlckFwaSB7XG4gICAgYXQ6IChpbmRleDogbnVtYmVyKSA9PiBOZ3RjV29ya2VyQXBpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ndGNCb2R5UmV0dXJuPFRPYmplY3QgZXh0ZW5kcyBUSFJFRS5PYmplY3QzRD4ge1xuICAgIHJlZjogTmd0SW5qZWN0ZWRSZWY8VE9iamVjdD47XG4gICAgYXBpOiBTaWduYWw8Tmd0Y0JvZHlQdWJsaWNBcGk+O1xufVxuXG5leHBvcnQgdHlwZSBOZ3RjR2V0QnlJbmRleDxUIGV4dGVuZHMgQm9keVByb3BzPiA9IChpbmRleDogbnVtYmVyKSA9PiBUO1xuZXhwb3J0IHR5cGUgTmd0Y0FyZ0ZuPFQ+ID0gKGFyZ3M6IFQpID0+IHVua25vd25bXTtcblxuY29uc3QgdGVtcCA9IG5ldyBUSFJFRS5PYmplY3QzRCgpO1xuXG5mdW5jdGlvbiBjYXBpdGFsaXplPFQgZXh0ZW5kcyBzdHJpbmc+KHN0cjogVCk6IENhcGl0YWxpemU8VD4ge1xuICAgIHJldHVybiAoc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpKSBhcyBDYXBpdGFsaXplPFQ+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VVVJRChyZWY6IEVsZW1lbnRSZWY8VEhSRUUuT2JqZWN0M0Q+LCBpbmRleD86IG51bWJlcik6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IHN1ZmZpeCA9IGluZGV4ID09PSB1bmRlZmluZWQgPyAnJyA6IGAvJHtpbmRleH1gO1xuICAgIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gcmVmICYmIHJlZi5uYXRpdmVFbGVtZW50ICYmIGAke3JlZi5uYXRpdmVFbGVtZW50LnV1aWR9JHtzdWZmaXh9YDtcbn1cblxuY29uc3QgZSA9IG5ldyBUSFJFRS5FdWxlcigpO1xuY29uc3QgcSA9IG5ldyBUSFJFRS5RdWF0ZXJuaW9uKCk7XG5cbmNvbnN0IHF1YXRlcm5pb25Ub1JvdGF0aW9uID0gKGNhbGxiYWNrOiAodjogVHJpcGxldCkgPT4gdm9pZCkgPT4ge1xuICAgIHJldHVybiAodjogUXVhZCkgPT4gY2FsbGJhY2soZS5zZXRGcm9tUXVhdGVybmlvbihxLmZyb21BcnJheSh2KSkudG9BcnJheSgpIGFzIFRyaXBsZXQpO1xufTtcblxubGV0IGluY3JlbWVudGluZ0lkID0gMDtcblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnNjcmliZTxUIGV4dGVuZHMgU3Vic2NyaXB0aW9uTmFtZT4oXG4gICAgcmVmOiBFbGVtZW50UmVmPFRIUkVFLk9iamVjdDNEPixcbiAgICB3b3JrZXI6IENhbm5vbldvcmtlckFQSSxcbiAgICBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25zLFxuICAgIHR5cGU6IFQsXG4gICAgaW5kZXg/OiBudW1iZXIsXG4gICAgdGFyZ2V0OiBTdWJzY3JpcHRpb25UYXJnZXQgPSAnYm9kaWVzJ1xuKSB7XG4gICAgcmV0dXJuIChjYWxsYmFjazogKHZhbHVlOiBQcm9wVmFsdWU8VD4pID0+IHZvaWQpID0+IHtcbiAgICAgICAgY29uc3QgaWQgPSBpbmNyZW1lbnRpbmdJZCsrO1xuICAgICAgICBzdWJzY3JpcHRpb25zW2lkXSA9IHsgW3R5cGVdOiBjYWxsYmFjayB9O1xuICAgICAgICBjb25zdCB1dWlkID0gZ2V0VVVJRChyZWYsIGluZGV4KTtcbiAgICAgICAgdXVpZCAmJiB3b3JrZXIuc3Vic2NyaWJlKHsgcHJvcHM6IHsgaWQsIHRhcmdldCwgdHlwZSB9LCB1dWlkIH0pO1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgZGVsZXRlIHN1YnNjcmlwdGlvbnNbaWRdO1xuICAgICAgICAgICAgd29ya2VyLnVuc3Vic2NyaWJlKHsgcHJvcHM6IGlkIH0pO1xuICAgICAgICB9O1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIHByZXBhcmUob2JqZWN0OiBUSFJFRS5PYmplY3QzRCwgeyBwb3NpdGlvbiA9IFswLCAwLCAwXSwgcm90YXRpb24gPSBbMCwgMCwgMF0sIHVzZXJEYXRhID0ge30gfTogQm9keVByb3BzKSB7XG4gICAgb2JqZWN0LnVzZXJEYXRhID0gdXNlckRhdGE7XG4gICAgb2JqZWN0LnBvc2l0aW9uLnNldCguLi5wb3NpdGlvbik7XG4gICAgb2JqZWN0LnJvdGF0aW9uLnNldCguLi5yb3RhdGlvbik7XG4gICAgb2JqZWN0LnVwZGF0ZU1hdHJpeCgpO1xufVxuXG5mdW5jdGlvbiBzZXR1cENvbGxpc2lvbihcbiAgICBldmVudHM6IE5ndGNDYW5ub25FdmVudHMsXG4gICAgeyBvbkNvbGxpZGUsIG9uQ29sbGlkZUJlZ2luLCBvbkNvbGxpZGVFbmQgfTogUGFydGlhbDxCb2R5UHJvcHM+LFxuICAgIHV1aWQ6IHN0cmluZ1xuKSB7XG4gICAgZXZlbnRzW3V1aWRdID0ge1xuICAgICAgICBjb2xsaWRlOiBvbkNvbGxpZGUsXG4gICAgICAgIGNvbGxpZGVCZWdpbjogb25Db2xsaWRlQmVnaW4sXG4gICAgICAgIGNvbGxpZGVFbmQ6IG9uQ29sbGlkZUVuZCxcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBtYWtlVHJpcGxldCh2OiBUSFJFRS5WZWN0b3IzIHwgVHJpcGxldCk6IFRyaXBsZXQge1xuICAgIHJldHVybiB2IGluc3RhbmNlb2YgVEhSRUUuVmVjdG9yMyA/IFt2LngsIHYueSwgdi56XSA6IHY7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0Y0JvZHlPcHRpb25zPFRPYmplY3QgZXh0ZW5kcyBUSFJFRS5PYmplY3QzRD4ge1xuICAgIHJlZj86IE5ndEluamVjdGVkUmVmPFRPYmplY3Q+O1xuICAgIGRlcHM/OiAoKSA9PiBOZ3RBbnlSZWNvcmQ7XG4gICAgaW5qZWN0b3I/OiBJbmplY3Rvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdFBsYW5lPFRPYmplY3QgZXh0ZW5kcyBUSFJFRS5PYmplY3QzRD4oXG4gICAgZm46IE5ndGNHZXRCeUluZGV4PFBsYW5lUHJvcHM+LFxuICAgIG9wdHM/OiBOZ3RjQm9keU9wdGlvbnM8VE9iamVjdD5cbikge1xuICAgIHJldHVybiBpbmplY3RCb2R5KCdQbGFuZScsIGZuLCAoKSA9PiBbXSwgb3B0cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RCb3g8VE9iamVjdCBleHRlbmRzIFRIUkVFLk9iamVjdDNEPihcbiAgICBmbjogTmd0Y0dldEJ5SW5kZXg8Qm94UHJvcHM+LFxuICAgIG9wdHM/OiBOZ3RjQm9keU9wdGlvbnM8VE9iamVjdD5cbikge1xuICAgIGNvbnN0IGRlZmF1bHRCb3hBcmdzOiBUcmlwbGV0ID0gWzEsIDEsIDFdO1xuICAgIHJldHVybiBpbmplY3RCb2R5KCdCb3gnLCBmbiwgKGFyZ3MgPSBkZWZhdWx0Qm94QXJncyk6IFRyaXBsZXQgPT4gYXJncywgb3B0cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RDeWxpbmRlcjxUT2JqZWN0IGV4dGVuZHMgVEhSRUUuT2JqZWN0M0Q+KFxuICAgIGZuOiBOZ3RjR2V0QnlJbmRleDxDeWxpbmRlclByb3BzPixcbiAgICBvcHRzPzogTmd0Y0JvZHlPcHRpb25zPFRPYmplY3Q+XG4pIHtcbiAgICByZXR1cm4gaW5qZWN0Qm9keSgnQ3lsaW5kZXInLCBmbiwgKGFyZ3MgPSBbXSBhcyBbXSkgPT4gYXJncywgb3B0cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RIZWlnaHRmaWVsZDxUT2JqZWN0IGV4dGVuZHMgVEhSRUUuT2JqZWN0M0Q+KFxuICAgIGZuOiBOZ3RjR2V0QnlJbmRleDxIZWlnaHRmaWVsZFByb3BzPixcbiAgICBvcHRzPzogTmd0Y0JvZHlPcHRpb25zPFRPYmplY3Q+XG4pIHtcbiAgICByZXR1cm4gaW5qZWN0Qm9keSgnSGVpZ2h0ZmllbGQnLCBmbiwgKGFyZ3MpID0+IGFyZ3MsIG9wdHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0UGFydGljbGU8VE9iamVjdCBleHRlbmRzIFRIUkVFLk9iamVjdDNEPihcbiAgICBmbjogTmd0Y0dldEJ5SW5kZXg8UGFydGljbGVQcm9wcz4sXG4gICAgb3B0cz86IE5ndGNCb2R5T3B0aW9uczxUT2JqZWN0PlxuKSB7XG4gICAgcmV0dXJuIGluamVjdEJvZHkoJ1BhcnRpY2xlJywgZm4sICgpID0+IFtdLCBvcHRzKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RTcGhlcmU8VE9iamVjdCBleHRlbmRzIFRIUkVFLk9iamVjdDNEPihcbiAgICBmbjogTmd0Y0dldEJ5SW5kZXg8U3BoZXJlUHJvcHM+LFxuICAgIG9wdHM/OiBOZ3RjQm9keU9wdGlvbnM8VE9iamVjdD5cbikge1xuICAgIHJldHVybiBpbmplY3RCb2R5KFxuICAgICAgICAnU3BoZXJlJyxcbiAgICAgICAgZm4sXG4gICAgICAgIChhcmdzOiBTcGhlcmVBcmdzID0gWzFdKTogU3BoZXJlQXJncyA9PiB7XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJncykpIHRocm93IG5ldyBFcnJvcigndXNlU3BoZXJlIGFyZ3MgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgICAgICAgICAgcmV0dXJuIFthcmdzWzBdXTtcbiAgICAgICAgfSxcbiAgICAgICAgb3B0c1xuICAgICk7XG59XG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0VHJpbWVzaDxUT2JqZWN0IGV4dGVuZHMgVEhSRUUuT2JqZWN0M0Q+KFxuICAgIGZuOiBOZ3RjR2V0QnlJbmRleDxUcmltZXNoUHJvcHM+LFxuICAgIG9wdHM/OiBOZ3RjQm9keU9wdGlvbnM8VE9iamVjdD5cbikge1xuICAgIHJldHVybiBpbmplY3RCb2R5KCdUcmltZXNoJywgZm4sIChhcmdzKSA9PiBhcmdzLCBvcHRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdENvbnZleFBvbHloZWRyb248VE9iamVjdCBleHRlbmRzIFRIUkVFLk9iamVjdDNEPihcbiAgICBmbjogTmd0Y0dldEJ5SW5kZXg8Q29udmV4UG9seWhlZHJvblByb3BzPixcbiAgICBvcHRzPzogTmd0Y0JvZHlPcHRpb25zPFRPYmplY3Q+XG4pIHtcbiAgICByZXR1cm4gaW5qZWN0Qm9keShcbiAgICAgICAgJ0NvbnZleFBvbHloZWRyb24nLFxuICAgICAgICBmbixcbiAgICAgICAgKFt2ZXJ0aWNlcywgZmFjZXMsIG5vcm1hbHMsIGF4ZXMsIGJvdW5kaW5nU3BoZXJlUmFkaXVzXSA9IFtdKTogQ29udmV4UG9seWhlZHJvbkFyZ3M8VHJpcGxldD4gPT4gW1xuICAgICAgICAgICAgdmVydGljZXMgJiYgdmVydGljZXMubWFwKG1ha2VUcmlwbGV0KSxcbiAgICAgICAgICAgIGZhY2VzLFxuICAgICAgICAgICAgbm9ybWFscyAmJiBub3JtYWxzLm1hcChtYWtlVHJpcGxldCksXG4gICAgICAgICAgICBheGVzICYmIGF4ZXMubWFwKG1ha2VUcmlwbGV0KSxcbiAgICAgICAgICAgIGJvdW5kaW5nU3BoZXJlUmFkaXVzLFxuICAgICAgICBdLFxuICAgICAgICBvcHRzXG4gICAgKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RDb21wb3VuZEJvZHk8VE9iamVjdCBleHRlbmRzIFRIUkVFLk9iamVjdDNEPihcbiAgICBmbjogTmd0Y0dldEJ5SW5kZXg8Q29tcG91bmRCb2R5UHJvcHM+LFxuICAgIG9wdHM/OiBOZ3RjQm9keU9wdGlvbnM8VE9iamVjdD5cbikge1xuICAgIHJldHVybiBpbmplY3RCb2R5KCdDb21wb3VuZCcsIGZuLCAoYXJncykgPT4gYXJncyBhcyB1bmtub3duW10sIG9wdHMpO1xufVxuXG5mdW5jdGlvbiBpbmplY3RCb2R5PFRCb2R5UHJvcHMgZXh0ZW5kcyBCb2R5UHJvcHMsIFRPYmplY3QgZXh0ZW5kcyBUSFJFRS5PYmplY3QzRD4oXG4gICAgdHlwZTogQm9keVNoYXBlVHlwZSxcbiAgICBnZXRQcm9wc0ZuOiBOZ3RjR2V0QnlJbmRleDxUQm9keVByb3BzPixcbiAgICBhcmdzRm46IE5ndGNBcmdGbjxUQm9keVByb3BzWydhcmdzJ10+LFxuICAgIHsgcmVmLCBpbmplY3RvciwgZGVwcyA9ICgpID0+ICh7fSkgfTogTmd0Y0JvZHlPcHRpb25zPFRPYmplY3Q+ID0ge31cbik6IE5ndGNCb2R5UmV0dXJuPFRPYmplY3Q+IHtcbiAgICBpbmplY3RvciA9IGFzc2VydEluamVjdGlvbkNvbnRleHQoaW5qZWN0Qm9keSwgaW5qZWN0b3IpO1xuICAgIHJldHVybiBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+IHtcbiAgICAgICAgbGV0IGJvZHlSZWYgPSBpbmplY3ROZ3RSZWY8VE9iamVjdD4oKTtcblxuICAgICAgICBpZiAocmVmKSBib2R5UmVmID0gcmVmO1xuXG4gICAgICAgIGNvbnN0IHBoeXNpY3NBcGkgPSBpbmplY3QoTkdUQ19QSFlTSUNTX0FQSSk7XG4gICAgICAgIGNvbnN0IGRlYnVnQXBpID0gaW5qZWN0KE5HVENfREVCVUdfQVBJLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gICAgICAgIGNvbnN0IHsgYWRkOiBkZWJ1Z0FkZCwgcmVtb3ZlOiBkZWJ1Z1JlbW92ZSB9ID0gZGVidWdBcGk/LigpIHx8IHt9O1xuICAgICAgICBjb25zdCB7IHJlZnMsIHdvcmtlciwgc3Vic2NyaXB0aW9ucywgc2NhbGVPdmVycmlkZXMsIGV2ZW50cywgYm9kaWVzIH0gPSBwaHlzaWNzQXBpKCk7XG5cbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lSW5JbmplY3Rpb25Db250ZXh0KCgpID0+IHtcbiAgICAgICAgICAgIGVmZmVjdChcbiAgICAgICAgICAgICAgICAob25DbGVhbnVwKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIGRlcHNcbiAgICAgICAgICAgICAgICAgICAgZGVwcygpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghYm9keVJlZi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5UmVmLm5hdGl2ZUVsZW1lbnQgPSBuZXcgVEhSRUUuT2JqZWN0M0QoKSBhcyBUT2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JqZWN0ID0gYm9keVJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50V29ya2VyID0gd29ya2VyKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JqZWN0Q291bnQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0IGluc3RhbmNlb2YgVEhSRUUuSW5zdGFuY2VkTWVzaFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKG9iamVjdC5pbnN0YW5jZU1hdHJpeC5zZXRVc2FnZShUSFJFRS5EeW5hbWljRHJhd1VzYWdlKSwgb2JqZWN0LmNvdW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCB1dWlkID1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdCBpbnN0YW5jZW9mIFRIUkVFLkluc3RhbmNlZE1lc2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG5ldyBBcnJheShvYmplY3RDb3VudCkuZmlsbCgwKS5tYXAoKF8sIGkpID0+IGAke29iamVjdC51dWlkfS8ke2l9YClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFtvYmplY3QudXVpZF07XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvcHM6IChUQm9keVByb3BzICYgeyBhcmdzOiB1bmtub3duIH0pW10gPVxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0IGluc3RhbmNlb2YgVEhSRUUuSW5zdGFuY2VkTWVzaFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdXVpZC5tYXAoKGlkLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvcHMgPSBnZXRQcm9wc0ZuKGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXBhcmUodGVtcCwgcHJvcHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zZXRNYXRyaXhBdChpLCB0ZW1wLm1hdHJpeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Lmluc3RhbmNlTWF0cml4Lm5lZWRzVXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZzW2lkXSA9IG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z0FkZD8uKGlkLCBwcm9wcywgdHlwZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dXBDb2xsaXNpb24oZXZlbnRzLCBwcm9wcywgaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLnByb3BzLCBhcmdzOiBhcmdzRm4ocHJvcHMuYXJncykgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB1dWlkLm1hcCgoaWQsIGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9wcyA9IGdldFByb3BzRm4oaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlcGFyZShvYmplY3QsIHByb3BzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZzW2lkXSA9IG9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z0FkZD8uKGlkLCBwcm9wcywgdHlwZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dXBDb2xsaXNpb24oZXZlbnRzLCBwcm9wcywgaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLnByb3BzLCBhcmdzOiBhcmdzRm4ocHJvcHMuYXJncykgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIFJlZ2lzdGVyIG9uIG1vdW50LCB1bnJlZ2lzdGVyIG9uIHVubW91bnRcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFdvcmtlci5hZGRCb2RpZXMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHM6IHByb3BzLm1hcCgoeyBvbkNvbGxpZGUsIG9uQ29sbGlkZUJlZ2luLCBvbkNvbGxpZGVFbmQsIC4uLnNlcmlhbGl6YWJsZVByb3BzIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBvbkNvbGxpZGU6IEJvb2xlYW4ob25Db2xsaWRlKSwgLi4uc2VyaWFsaXphYmxlUHJvcHMgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHV1aWQsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xlYW51cCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1dWlkLmZvckVhY2goKGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJlZnNbaWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnUmVtb3ZlPy4oaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBldmVudHNbaWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50V29ya2VyLnJlbW92ZUJvZGllcyh7IHV1aWQgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBhcGkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtYWtlQXRvbWljID0gPFQgZXh0ZW5kcyBBdG9taWNOYW1lPih0eXBlOiBULCBpbmRleD86IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wOiBTZXRPcE5hbWU8VD4gPSBgc2V0JHtjYXBpdGFsaXplKHR5cGUpfWA7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBzZXQ6ICh2YWx1ZTogUHJvcFZhbHVlPFQ+KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1dWlkID0gZ2V0VVVJRChib2R5UmVmLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB1dWlkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyKClbb3BdKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHM6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dWlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gYXMgbmV2ZXIpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmU6IHN1YnNjcmliZShib2R5UmVmLCB3b3JrZXIoKSwgc3Vic2NyaXB0aW9ucywgdHlwZSwgaW5kZXgpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBtYWtlUXVhdGVybmlvbiA9IChpbmRleD86IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSAncXVhdGVybmlvbic7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgY29weTogKHsgdywgeCwgeSwgeiB9OiBUSFJFRS5RdWF0ZXJuaW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1dWlkID0gZ2V0VVVJRChib2R5UmVmLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB1dWlkICYmIGJvZGllc1t1dWlkXSAhPSBudWxsICYmIHdvcmtlcigpLnNldFF1YXRlcm5pb24oeyBwcm9wczogW3gsIHksIHosIHddLCB1dWlkIH0pO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzZXQ6ICh4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyLCB3OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHlSZWYsIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHV1aWQgJiYgYm9kaWVzW3V1aWRdICE9IG51bGwgJiYgd29ya2VyKCkuc2V0UXVhdGVybmlvbih7IHByb3BzOiBbeCwgeSwgeiwgd10sIHV1aWQgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZTogc3Vic2NyaWJlKGJvZHlSZWYsIHdvcmtlcigpLCBzdWJzY3JpcHRpb25zLCB0eXBlLCBpbmRleCksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IG1ha2VSb3RhdGlvbiA9IChpbmRleD86IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGNvcHk6ICh7IHgsIHksIHogfTogVEhSRUUuVmVjdG9yMyB8IFRIUkVFLkV1bGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1dWlkID0gZ2V0VVVJRChib2R5UmVmLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB1dWlkICYmIGJvZGllc1t1dWlkXSAhPSBudWxsICYmIHdvcmtlcigpLnNldFJvdGF0aW9uKHsgcHJvcHM6IFt4LCB5LCB6XSwgdXVpZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc2V0OiAoeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXVpZCA9IGdldFVVSUQoYm9keVJlZiwgaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdXVpZCAmJiBib2RpZXNbdXVpZF0gIT0gbnVsbCAmJiB3b3JrZXIoKS5zZXRSb3RhdGlvbih7IHByb3BzOiBbeCwgeSwgel0sIHV1aWQgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZTogKGNhbGxiYWNrOiAodmFsdWU6IFRyaXBsZXQpID0+IHZvaWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gaW5jcmVtZW50aW5nSWQrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9ICdib2RpZXMnO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHlwZSA9ICdxdWF0ZXJuaW9uJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHlSZWYsIGluZGV4KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uc1tpZF0gPSB7IFt0eXBlXTogcXVhdGVybmlvblRvUm90YXRpb24oY2FsbGJhY2spIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB1dWlkICYmIGJvZGllc1t1dWlkXSAhPSBudWxsICYmIHdvcmtlcigpLnN1YnNjcmliZSh7IHByb3BzOiB7IGlkLCB0YXJnZXQsIHR5cGUgfSwgdXVpZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHN1YnNjcmlwdGlvbnNbaWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcigpLnVuc3Vic2NyaWJlKHsgcHJvcHM6IGlkIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgbWFrZVZlYyA9ICh0eXBlOiBWZWN0b3JOYW1lLCBpbmRleD86IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wOiBTZXRPcE5hbWU8VmVjdG9yTmFtZT4gPSBgc2V0JHtjYXBpdGFsaXplKHR5cGUpfWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgY29weTogKHsgeCwgeSwgeiB9OiBUSFJFRS5WZWN0b3IzIHwgVEhSRUUuRXVsZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHlSZWYsIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHV1aWQgJiYgYm9kaWVzW3V1aWRdICE9IG51bGwgJiYgd29ya2VyKClbb3BdKHsgcHJvcHM6IFt4LCB5LCB6XSwgdXVpZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc2V0OiAoeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXVpZCA9IGdldFVVSUQoYm9keVJlZiwgaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdXVpZCAmJiBib2RpZXNbdXVpZF0gIT0gbnVsbCAmJiB3b3JrZXIoKVtvcF0oeyBwcm9wczogW3gsIHksIHpdLCB1dWlkIH0pO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmU6IHN1YnNjcmliZShib2R5UmVmLCB3b3JrZXIoKSwgc3Vic2NyaXB0aW9ucywgdHlwZSwgaW5kZXgpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBtYWtlUmVtb3ZlID0gKGluZGV4PzogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdXVpZCA9IGdldFVVSUQoYm9keVJlZiwgaW5kZXgpO1xuICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1dWlkKSB3b3JrZXIoKS5yZW1vdmVCb2RpZXMoeyB1dWlkOiBbdXVpZF0gfSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIG1ha2VBcGkoaW5kZXg/OiBudW1iZXIpOiBOZ3RjV29ya2VyQXBpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBhbGxvd1NsZWVwOiBtYWtlQXRvbWljKCdhbGxvd1NsZWVwJywgaW5kZXgpLFxuICAgICAgICAgICAgICAgICAgICBhbmd1bGFyRGFtcGluZzogbWFrZUF0b21pYygnYW5ndWxhckRhbXBpbmcnLCBpbmRleCksXG4gICAgICAgICAgICAgICAgICAgIGFuZ3VsYXJGYWN0b3I6IG1ha2VWZWMoJ2FuZ3VsYXJGYWN0b3InLCBpbmRleCksXG4gICAgICAgICAgICAgICAgICAgIGFuZ3VsYXJWZWxvY2l0eTogbWFrZVZlYygnYW5ndWxhclZlbG9jaXR5JywgaW5kZXgpLFxuICAgICAgICAgICAgICAgICAgICBhcHBseUZvcmNlKGZvcmNlOiBUcmlwbGV0LCB3b3JsZFBvaW50OiBUcmlwbGV0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1dWlkID0gZ2V0VVVJRChib2R5UmVmLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB1dWlkICYmIGJvZGllc1t1dWlkXSAhPSBudWxsICYmIHdvcmtlcigpLmFwcGx5Rm9yY2UoeyBwcm9wczogW2ZvcmNlLCB3b3JsZFBvaW50XSwgdXVpZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgYXBwbHlJbXB1bHNlKGltcHVsc2U6IFRyaXBsZXQsIHdvcmxkUG9pbnQ6IFRyaXBsZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHlSZWYsIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHV1aWQgJiYgYm9kaWVzW3V1aWRdICE9IG51bGwgJiYgd29ya2VyKCkuYXBwbHlJbXB1bHNlKHsgcHJvcHM6IFtpbXB1bHNlLCB3b3JsZFBvaW50XSwgdXVpZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgYXBwbHlMb2NhbEZvcmNlKGZvcmNlOiBUcmlwbGV0LCBsb2NhbFBvaW50OiBUcmlwbGV0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1dWlkID0gZ2V0VVVJRChib2R5UmVmLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB1dWlkICYmIGJvZGllc1t1dWlkXSAhPSBudWxsICYmIHdvcmtlcigpLmFwcGx5TG9jYWxGb3JjZSh7IHByb3BzOiBbZm9yY2UsIGxvY2FsUG9pbnRdLCB1dWlkIH0pO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBhcHBseUxvY2FsSW1wdWxzZShpbXB1bHNlOiBUcmlwbGV0LCBsb2NhbFBvaW50OiBUcmlwbGV0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1dWlkID0gZ2V0VVVJRChib2R5UmVmLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB1dWlkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9kaWVzW3V1aWRdICE9IG51bGwgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXIoKS5hcHBseUxvY2FsSW1wdWxzZSh7IHByb3BzOiBbaW1wdWxzZSwgbG9jYWxQb2ludF0sIHV1aWQgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGFwcGx5VG9ycXVlKHRvcnF1ZTogVHJpcGxldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXVpZCA9IGdldFVVSUQoYm9keVJlZiwgaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdXVpZCAmJiBib2RpZXNbdXVpZF0gIT0gbnVsbCAmJiB3b3JrZXIoKS5hcHBseVRvcnF1ZSh7IHByb3BzOiBbdG9ycXVlXSwgdXVpZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgY29sbGlzaW9uRmlsdGVyR3JvdXA6IG1ha2VBdG9taWMoJ2NvbGxpc2lvbkZpbHRlckdyb3VwJywgaW5kZXgpLFxuICAgICAgICAgICAgICAgICAgICBjb2xsaXNpb25GaWx0ZXJNYXNrOiBtYWtlQXRvbWljKCdjb2xsaXNpb25GaWx0ZXJNYXNrJywgaW5kZXgpLFxuICAgICAgICAgICAgICAgICAgICBjb2xsaXNpb25SZXNwb25zZTogbWFrZUF0b21pYygnY29sbGlzaW9uUmVzcG9uc2UnLCBpbmRleCksXG4gICAgICAgICAgICAgICAgICAgIGZpeGVkUm90YXRpb246IG1ha2VBdG9taWMoJ2ZpeGVkUm90YXRpb24nLCBpbmRleCksXG4gICAgICAgICAgICAgICAgICAgIGlzVHJpZ2dlcjogbWFrZUF0b21pYygnaXNUcmlnZ2VyJywgaW5kZXgpLFxuICAgICAgICAgICAgICAgICAgICBsaW5lYXJEYW1waW5nOiBtYWtlQXRvbWljKCdsaW5lYXJEYW1waW5nJywgaW5kZXgpLFxuICAgICAgICAgICAgICAgICAgICBsaW5lYXJGYWN0b3I6IG1ha2VWZWMoJ2xpbmVhckZhY3RvcicsIGluZGV4KSxcbiAgICAgICAgICAgICAgICAgICAgbWFzczogbWFrZUF0b21pYygnbWFzcycsIGluZGV4KSxcbiAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWw6IG1ha2VBdG9taWMoJ21hdGVyaWFsJywgaW5kZXgpLFxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogbWFrZVZlYygncG9zaXRpb24nLCBpbmRleCksXG4gICAgICAgICAgICAgICAgICAgIHF1YXRlcm5pb246IG1ha2VRdWF0ZXJuaW9uKGluZGV4KSxcbiAgICAgICAgICAgICAgICAgICAgcm90YXRpb246IG1ha2VSb3RhdGlvbihpbmRleCksXG4gICAgICAgICAgICAgICAgICAgIHNjYWxlT3ZlcnJpZGUoc2NhbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHlSZWYsIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1dWlkKSBzY2FsZU92ZXJyaWRlc1t1dWlkXSA9IG5ldyBUSFJFRS5WZWN0b3IzKC4uLnNjYWxlKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc2xlZXAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1dWlkID0gZ2V0VVVJRChib2R5UmVmLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB1dWlkICYmIGJvZGllc1t1dWlkXSAhPSBudWxsICYmIHdvcmtlcigpLnNsZWVwKHsgdXVpZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc2xlZXBTcGVlZExpbWl0OiBtYWtlQXRvbWljKCdzbGVlcFNwZWVkTGltaXQnLCBpbmRleCksXG4gICAgICAgICAgICAgICAgICAgIHNsZWVwVGltZUxpbWl0OiBtYWtlQXRvbWljKCdzbGVlcFRpbWVMaW1pdCcsIGluZGV4KSxcbiAgICAgICAgICAgICAgICAgICAgdXNlckRhdGE6IG1ha2VBdG9taWMoJ3VzZXJEYXRhJywgaW5kZXgpLFxuICAgICAgICAgICAgICAgICAgICB2ZWxvY2l0eTogbWFrZVZlYygndmVsb2NpdHknLCBpbmRleCksXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZTogbWFrZVJlbW92ZShpbmRleCksXG4gICAgICAgICAgICAgICAgICAgIHdha2VVcCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHlSZWYsIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHV1aWQgJiYgYm9kaWVzW3V1aWRdICE9IG51bGwgJiYgd29ya2VyKCkud2FrZVVwKHsgdXVpZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjYWNoZTogeyBbaW5kZXg6IG51bWJlcl06IE5ndGNXb3JrZXJBcGkgfSA9IHt9O1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5tYWtlQXBpKHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgYXQ6IChpbmRleDogbnVtYmVyKSA9PiBjYWNoZVtpbmRleF0gfHwgKGNhY2hlW2luZGV4XSA9IG1ha2VBcGkoaW5kZXgpKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB7IHJlZjogYm9keVJlZiwgYXBpIH07XG4gICAgfSk7XG59XG4iXX0=
|
|
@@ -68,13 +68,13 @@ class NgtcDebug {
|
|
|
68
68
|
scale: this.scale,
|
|
69
69
|
});
|
|
70
70
|
}
|
|
71
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.
|
|
72
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.
|
|
71
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: NgtcDebug, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
72
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.3", type: NgtcDebug, isStandalone: true, selector: "ngtc-debug", inputs: { color: "color", scale: "scale", impl: "impl", disabled: "disabled" }, providers: [{ provide: NGTC_DEBUG_API, useFactory: (debug) => debug.api, deps: [NgtcDebug] }], ngImport: i0, template: `
|
|
73
73
|
<ngt-primitive *args="[scene]" />
|
|
74
74
|
<ng-content />
|
|
75
75
|
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "[args]", inputs: ["args"] }] }); }
|
|
76
76
|
}
|
|
77
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.
|
|
77
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: NgtcDebug, decorators: [{
|
|
78
78
|
type: Component,
|
|
79
79
|
args: [{
|
|
80
80
|
selector: 'ngtc-debug',
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { runInInjectionContext, inject, effect, computed, untracked } from '@angular/core';
|
|
2
|
-
import { assertInjectionContext, injectNgtRef,
|
|
2
|
+
import { assertInjectionContext, injectNgtRef, requestAnimationFrameInInjectionContext, makeId, is } from 'angular-three';
|
|
3
3
|
import { NGTC_PHYSICS_API } from 'angular-three-cannon';
|
|
4
4
|
import { NGTC_DEBUG_API } from 'angular-three-cannon/debug';
|
|
5
5
|
import * as THREE from 'three';
|
|
@@ -95,13 +95,14 @@ function injectBody(type, getPropsFn, argsFn, { ref, injector, deps = () => ({})
|
|
|
95
95
|
const physicsApi = inject(NGTC_PHYSICS_API);
|
|
96
96
|
const debugApi = inject(NGTC_DEBUG_API, { optional: true });
|
|
97
97
|
const { add: debugAdd, remove: debugRemove } = debugApi?.() || {};
|
|
98
|
-
const { refs, worker, subscriptions, scaleOverrides, events } = physicsApi();
|
|
99
|
-
|
|
98
|
+
const { refs, worker, subscriptions, scaleOverrides, events, bodies } = physicsApi();
|
|
99
|
+
requestAnimationFrameInInjectionContext(() => {
|
|
100
100
|
effect((onCleanup) => {
|
|
101
101
|
// register deps
|
|
102
102
|
deps();
|
|
103
103
|
if (!bodyRef.nativeElement) {
|
|
104
104
|
bodyRef.nativeElement = new THREE.Object3D();
|
|
105
|
+
return;
|
|
105
106
|
}
|
|
106
107
|
const object = bodyRef.nativeElement;
|
|
107
108
|
const currentWorker = worker();
|
|
@@ -168,11 +169,11 @@ function injectBody(type, getPropsFn, argsFn, { ref, injector, deps = () => ({})
|
|
|
168
169
|
return {
|
|
169
170
|
copy: ({ w, x, y, z }) => {
|
|
170
171
|
const uuid = getUUID(bodyRef, index);
|
|
171
|
-
uuid && worker().setQuaternion({ props: [x, y, z, w], uuid });
|
|
172
|
+
uuid && bodies[uuid] != null && worker().setQuaternion({ props: [x, y, z, w], uuid });
|
|
172
173
|
},
|
|
173
174
|
set: (x, y, z, w) => {
|
|
174
175
|
const uuid = getUUID(bodyRef, index);
|
|
175
|
-
uuid && worker().setQuaternion({ props: [x, y, z, w], uuid });
|
|
176
|
+
uuid && bodies[uuid] != null && worker().setQuaternion({ props: [x, y, z, w], uuid });
|
|
176
177
|
},
|
|
177
178
|
subscribe: subscribe(bodyRef, worker(), subscriptions, type, index),
|
|
178
179
|
};
|
|
@@ -181,11 +182,11 @@ function injectBody(type, getPropsFn, argsFn, { ref, injector, deps = () => ({})
|
|
|
181
182
|
return {
|
|
182
183
|
copy: ({ x, y, z }) => {
|
|
183
184
|
const uuid = getUUID(bodyRef, index);
|
|
184
|
-
uuid && worker().setRotation({ props: [x, y, z], uuid });
|
|
185
|
+
uuid && bodies[uuid] != null && worker().setRotation({ props: [x, y, z], uuid });
|
|
185
186
|
},
|
|
186
187
|
set: (x, y, z) => {
|
|
187
188
|
const uuid = getUUID(bodyRef, index);
|
|
188
|
-
uuid && worker().setRotation({ props: [x, y, z], uuid });
|
|
189
|
+
uuid && bodies[uuid] != null && worker().setRotation({ props: [x, y, z], uuid });
|
|
189
190
|
},
|
|
190
191
|
subscribe: (callback) => {
|
|
191
192
|
const id = incrementingId++;
|
|
@@ -193,7 +194,7 @@ function injectBody(type, getPropsFn, argsFn, { ref, injector, deps = () => ({})
|
|
|
193
194
|
const type = 'quaternion';
|
|
194
195
|
const uuid = getUUID(bodyRef, index);
|
|
195
196
|
subscriptions[id] = { [type]: quaternionToRotation(callback) };
|
|
196
|
-
uuid && worker().subscribe({ props: { id, target, type }, uuid });
|
|
197
|
+
uuid && bodies[uuid] != null && worker().subscribe({ props: { id, target, type }, uuid });
|
|
197
198
|
return () => {
|
|
198
199
|
delete subscriptions[id];
|
|
199
200
|
worker().unsubscribe({ props: id });
|
|
@@ -206,11 +207,11 @@ function injectBody(type, getPropsFn, argsFn, { ref, injector, deps = () => ({})
|
|
|
206
207
|
return {
|
|
207
208
|
copy: ({ x, y, z }) => {
|
|
208
209
|
const uuid = getUUID(bodyRef, index);
|
|
209
|
-
uuid && worker()[op]({ props: [x, y, z], uuid });
|
|
210
|
+
uuid && bodies[uuid] != null && worker()[op]({ props: [x, y, z], uuid });
|
|
210
211
|
},
|
|
211
212
|
set: (x, y, z) => {
|
|
212
213
|
const uuid = getUUID(bodyRef, index);
|
|
213
|
-
uuid && worker()[op]({ props: [x, y, z], uuid });
|
|
214
|
+
uuid && bodies[uuid] != null && worker()[op]({ props: [x, y, z], uuid });
|
|
214
215
|
},
|
|
215
216
|
subscribe: subscribe(bodyRef, worker(), subscriptions, type, index),
|
|
216
217
|
};
|
|
@@ -230,23 +231,25 @@ function injectBody(type, getPropsFn, argsFn, { ref, injector, deps = () => ({})
|
|
|
230
231
|
angularVelocity: makeVec('angularVelocity', index),
|
|
231
232
|
applyForce(force, worldPoint) {
|
|
232
233
|
const uuid = getUUID(bodyRef, index);
|
|
233
|
-
uuid && worker().applyForce({ props: [force, worldPoint], uuid });
|
|
234
|
+
uuid && bodies[uuid] != null && worker().applyForce({ props: [force, worldPoint], uuid });
|
|
234
235
|
},
|
|
235
236
|
applyImpulse(impulse, worldPoint) {
|
|
236
237
|
const uuid = getUUID(bodyRef, index);
|
|
237
|
-
uuid && worker().applyImpulse({ props: [impulse, worldPoint], uuid });
|
|
238
|
+
uuid && bodies[uuid] != null && worker().applyImpulse({ props: [impulse, worldPoint], uuid });
|
|
238
239
|
},
|
|
239
240
|
applyLocalForce(force, localPoint) {
|
|
240
241
|
const uuid = getUUID(bodyRef, index);
|
|
241
|
-
uuid && worker().applyLocalForce({ props: [force, localPoint], uuid });
|
|
242
|
+
uuid && bodies[uuid] != null && worker().applyLocalForce({ props: [force, localPoint], uuid });
|
|
242
243
|
},
|
|
243
244
|
applyLocalImpulse(impulse, localPoint) {
|
|
244
245
|
const uuid = getUUID(bodyRef, index);
|
|
245
|
-
uuid &&
|
|
246
|
+
uuid &&
|
|
247
|
+
bodies[uuid] != null &&
|
|
248
|
+
worker().applyLocalImpulse({ props: [impulse, localPoint], uuid });
|
|
246
249
|
},
|
|
247
250
|
applyTorque(torque) {
|
|
248
251
|
const uuid = getUUID(bodyRef, index);
|
|
249
|
-
uuid && worker().applyTorque({ props: [torque], uuid });
|
|
252
|
+
uuid && bodies[uuid] != null && worker().applyTorque({ props: [torque], uuid });
|
|
250
253
|
},
|
|
251
254
|
collisionFilterGroup: makeAtomic('collisionFilterGroup', index),
|
|
252
255
|
collisionFilterMask: makeAtomic('collisionFilterMask', index),
|
|
@@ -267,7 +270,7 @@ function injectBody(type, getPropsFn, argsFn, { ref, injector, deps = () => ({})
|
|
|
267
270
|
},
|
|
268
271
|
sleep() {
|
|
269
272
|
const uuid = getUUID(bodyRef, index);
|
|
270
|
-
uuid && worker().sleep({ uuid });
|
|
273
|
+
uuid && bodies[uuid] != null && worker().sleep({ uuid });
|
|
271
274
|
},
|
|
272
275
|
sleepSpeedLimit: makeAtomic('sleepSpeedLimit', index),
|
|
273
276
|
sleepTimeLimit: makeAtomic('sleepTimeLimit', index),
|
|
@@ -276,7 +279,7 @@ function injectBody(type, getPropsFn, argsFn, { ref, injector, deps = () => ({})
|
|
|
276
279
|
remove: makeRemove(index),
|
|
277
280
|
wakeUp() {
|
|
278
281
|
const uuid = getUUID(bodyRef, index);
|
|
279
|
-
uuid && worker().wakeUp({ uuid });
|
|
282
|
+
uuid && bodies[uuid] != null && worker().wakeUp({ uuid });
|
|
280
283
|
},
|
|
281
284
|
};
|
|
282
285
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"angular-three-cannon-services.mjs","sources":["../../../../libs/cannon/services/src/body.ts","../../../../libs/cannon/services/src/constraint.ts","../../../../libs/cannon/services/src/contact-material.ts","../../../../libs/cannon/services/src/ray.ts","../../../../libs/cannon/services/src/raycast-vehicle.ts","../../../../libs/cannon/services/src/spring.ts","../../../../libs/cannon/services/src/angular-three-cannon-services.ts"],"sourcesContent":["import { ElementRef, Injector, Signal, computed, effect, inject, runInInjectionContext } from '@angular/core';\nimport type {\n AtomicName,\n AtomicProps,\n BodyProps,\n BodyShapeType,\n BoxProps,\n CannonWorkerAPI,\n CompoundBodyProps,\n ConvexPolyhedronArgs,\n ConvexPolyhedronProps,\n CylinderProps,\n HeightfieldProps,\n ParticleProps,\n PlaneProps,\n PropValue,\n Quad,\n SetOpName,\n SphereArgs,\n SphereProps,\n SubscriptionName,\n SubscriptionTarget,\n Subscriptions,\n TrimeshProps,\n Triplet,\n VectorName,\n} from '@pmndrs/cannon-worker-api';\nimport {\n NgtAnyRecord,\n NgtInjectedRef,\n assertInjectionContext,\n injectNgtRef,\n queueMicrotaskInInjectionContext,\n} from 'angular-three';\nimport { NGTC_PHYSICS_API, NgtcCannonEvents } from 'angular-three-cannon';\nimport { NGTC_DEBUG_API } from 'angular-three-cannon/debug';\nimport * as THREE from 'three';\n\nexport type NgtcAtomicApi<K extends AtomicName> = {\n set: (value: AtomicProps[K]) => void;\n subscribe: (callback: (value: AtomicProps[K]) => void) => () => void;\n};\n\nexport type NgtcQuaternionApi = {\n copy: ({ w, x, y, z }: THREE.Quaternion) => void;\n set: (x: number, y: number, z: number, w: number) => void;\n subscribe: (callback: (value: Quad) => void) => () => void;\n};\n\nexport type NgtcVectorApi = {\n copy: ({ x, y, z }: THREE.Vector3 | THREE.Euler) => void;\n set: (x: number, y: number, z: number) => void;\n subscribe: (callback: (value: Triplet) => void) => () => void;\n};\n\nexport type NgtcWorkerApi = {\n [K in AtomicName]: NgtcAtomicApi<K>;\n} & {\n [K in VectorName]: NgtcVectorApi;\n} & {\n applyForce: (force: Triplet, worldPoint: Triplet) => void;\n applyImpulse: (impulse: Triplet, worldPoint: Triplet) => void;\n applyLocalForce: (force: Triplet, localPoint: Triplet) => void;\n applyLocalImpulse: (impulse: Triplet, localPoint: Triplet) => void;\n applyTorque: (torque: Triplet) => void;\n quaternion: NgtcQuaternionApi;\n rotation: NgtcVectorApi;\n scaleOverride: (scale: Triplet) => void;\n sleep: () => void;\n wakeUp: () => void;\n remove: () => void;\n};\n\nexport interface NgtcBodyPublicApi extends NgtcWorkerApi {\n at: (index: number) => NgtcWorkerApi;\n}\n\nexport interface NgtcBodyReturn<TObject extends THREE.Object3D> {\n ref: NgtInjectedRef<TObject>;\n api: Signal<NgtcBodyPublicApi>;\n}\n\nexport type NgtcGetByIndex<T extends BodyProps> = (index: number) => T;\nexport type NgtcArgFn<T> = (args: T) => unknown[];\n\nconst temp = new THREE.Object3D();\n\nfunction capitalize<T extends string>(str: T): Capitalize<T> {\n return (str.charAt(0).toUpperCase() + str.slice(1)) as Capitalize<T>;\n}\n\nexport function getUUID(ref: ElementRef<THREE.Object3D>, index?: number): string | null {\n const suffix = index === undefined ? '' : `/${index}`;\n if (typeof ref === 'function') return null;\n return ref && ref.nativeElement && `${ref.nativeElement.uuid}${suffix}`;\n}\n\nconst e = new THREE.Euler();\nconst q = new THREE.Quaternion();\n\nconst quaternionToRotation = (callback: (v: Triplet) => void) => {\n return (v: Quad) => callback(e.setFromQuaternion(q.fromArray(v)).toArray() as Triplet);\n};\n\nlet incrementingId = 0;\n\nexport function subscribe<T extends SubscriptionName>(\n ref: ElementRef<THREE.Object3D>,\n worker: CannonWorkerAPI,\n subscriptions: Subscriptions,\n type: T,\n index?: number,\n target: SubscriptionTarget = 'bodies'\n) {\n return (callback: (value: PropValue<T>) => void) => {\n const id = incrementingId++;\n subscriptions[id] = { [type]: callback };\n const uuid = getUUID(ref, index);\n uuid && worker.subscribe({ props: { id, target, type }, uuid });\n return () => {\n delete subscriptions[id];\n worker.unsubscribe({ props: id });\n };\n };\n}\n\nfunction prepare(object: THREE.Object3D, { position = [0, 0, 0], rotation = [0, 0, 0], userData = {} }: BodyProps) {\n object.userData = userData;\n object.position.set(...position);\n object.rotation.set(...rotation);\n object.updateMatrix();\n}\n\nfunction setupCollision(\n events: NgtcCannonEvents,\n { onCollide, onCollideBegin, onCollideEnd }: Partial<BodyProps>,\n uuid: string\n) {\n events[uuid] = {\n collide: onCollide,\n collideBegin: onCollideBegin,\n collideEnd: onCollideEnd,\n };\n}\n\nfunction makeTriplet(v: THREE.Vector3 | Triplet): Triplet {\n return v instanceof THREE.Vector3 ? [v.x, v.y, v.z] : v;\n}\n\nexport interface NgtcBodyOptions<TObject extends THREE.Object3D> {\n ref?: NgtInjectedRef<TObject>;\n deps?: () => NgtAnyRecord;\n injector?: Injector;\n}\n\nexport function injectPlane<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<PlaneProps>,\n opts?: NgtcBodyOptions<TObject>\n) {\n return injectBody('Plane', fn, () => [], opts);\n}\n\nexport function injectBox<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<BoxProps>,\n opts?: NgtcBodyOptions<TObject>\n) {\n const defaultBoxArgs: Triplet = [1, 1, 1];\n return injectBody('Box', fn, (args = defaultBoxArgs): Triplet => args, opts);\n}\n\nexport function injectCylinder<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<CylinderProps>,\n opts?: NgtcBodyOptions<TObject>\n) {\n return injectBody('Cylinder', fn, (args = [] as []) => args, opts);\n}\n\nexport function injectHeightfield<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<HeightfieldProps>,\n opts?: NgtcBodyOptions<TObject>\n) {\n return injectBody('Heightfield', fn, (args) => args, opts);\n}\n\nexport function injectParticle<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<ParticleProps>,\n opts?: NgtcBodyOptions<TObject>\n) {\n return injectBody('Particle', fn, () => [], opts);\n}\nexport function injectSphere<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<SphereProps>,\n opts?: NgtcBodyOptions<TObject>\n) {\n return injectBody(\n 'Sphere',\n fn,\n (args: SphereArgs = [1]): SphereArgs => {\n if (!Array.isArray(args)) throw new Error('useSphere args must be an array');\n return [args[0]];\n },\n opts\n );\n}\nexport function injectTrimesh<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<TrimeshProps>,\n opts?: NgtcBodyOptions<TObject>\n) {\n return injectBody('Trimesh', fn, (args) => args, opts);\n}\n\nexport function injectConvexPolyhedron<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<ConvexPolyhedronProps>,\n opts?: NgtcBodyOptions<TObject>\n) {\n return injectBody(\n 'ConvexPolyhedron',\n fn,\n ([vertices, faces, normals, axes, boundingSphereRadius] = []): ConvexPolyhedronArgs<Triplet> => [\n vertices && vertices.map(makeTriplet),\n faces,\n normals && normals.map(makeTriplet),\n axes && axes.map(makeTriplet),\n boundingSphereRadius,\n ],\n opts\n );\n}\nexport function injectCompoundBody<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<CompoundBodyProps>,\n opts?: NgtcBodyOptions<TObject>\n) {\n return injectBody('Compound', fn, (args) => args as unknown[], opts);\n}\n\nfunction injectBody<TBodyProps extends BodyProps, TObject extends THREE.Object3D>(\n type: BodyShapeType,\n getPropsFn: NgtcGetByIndex<TBodyProps>,\n argsFn: NgtcArgFn<TBodyProps['args']>,\n { ref, injector, deps = () => ({}) }: NgtcBodyOptions<TObject> = {}\n): NgtcBodyReturn<TObject> {\n injector = assertInjectionContext(injectBody, injector);\n return runInInjectionContext(injector, () => {\n let bodyRef = injectNgtRef<TObject>();\n\n if (ref) bodyRef = ref;\n\n const physicsApi = inject(NGTC_PHYSICS_API);\n const debugApi = inject(NGTC_DEBUG_API, { optional: true });\n\n const { add: debugAdd, remove: debugRemove } = debugApi?.() || {};\n const { refs, worker, subscriptions, scaleOverrides, events } = physicsApi();\n\n queueMicrotaskInInjectionContext(() => {\n effect(\n (onCleanup) => {\n // register deps\n deps();\n\n if (!bodyRef.nativeElement) {\n bodyRef.nativeElement = new THREE.Object3D() as TObject;\n }\n\n const object = bodyRef.nativeElement;\n const currentWorker = worker();\n\n const objectCount =\n object instanceof THREE.InstancedMesh\n ? (object.instanceMatrix.setUsage(THREE.DynamicDrawUsage), object.count)\n : 1;\n\n const uuid =\n object instanceof THREE.InstancedMesh\n ? new Array(objectCount).fill(0).map((_, i) => `${object.uuid}/${i}`)\n : [object.uuid];\n\n const props: (TBodyProps & { args: unknown })[] =\n object instanceof THREE.InstancedMesh\n ? uuid.map((id, i) => {\n const props = getPropsFn(i);\n prepare(temp, props);\n object.setMatrixAt(i, temp.matrix);\n object.instanceMatrix.needsUpdate = true;\n refs[id] = object;\n debugAdd?.(id, props, type);\n setupCollision(events, props, id);\n return { ...props, args: argsFn(props.args) };\n })\n : uuid.map((id, i) => {\n const props = getPropsFn(i);\n prepare(object, props);\n refs[id] = object;\n debugAdd?.(id, props, type);\n setupCollision(events, props, id);\n return { ...props, args: argsFn(props.args) };\n });\n\n // Register on mount, unregister on unmount\n currentWorker.addBodies({\n props: props.map(({ onCollide, onCollideBegin, onCollideEnd, ...serializableProps }) => {\n return { onCollide: Boolean(onCollide), ...serializableProps };\n }),\n type,\n uuid,\n });\n\n onCleanup(() => {\n uuid.forEach((id) => {\n delete refs[id];\n debugRemove?.(id);\n delete events[id];\n });\n currentWorker.removeBodies({ uuid });\n });\n },\n { allowSignalWrites: true }\n );\n });\n\n const api = computed(() => {\n const makeAtomic = <T extends AtomicName>(type: T, index?: number) => {\n const op: SetOpName<T> = `set${capitalize(type)}`;\n\n return {\n set: (value: PropValue<T>) => {\n const uuid = getUUID(bodyRef, index);\n uuid &&\n worker()[op]({\n props: value,\n uuid,\n } as never);\n },\n subscribe: subscribe(bodyRef, worker(), subscriptions, type, index),\n };\n };\n\n const makeQuaternion = (index?: number) => {\n const type = 'quaternion';\n return {\n copy: ({ w, x, y, z }: THREE.Quaternion) => {\n const uuid = getUUID(bodyRef, index);\n uuid && worker().setQuaternion({ props: [x, y, z, w], uuid });\n },\n set: (x: number, y: number, z: number, w: number) => {\n const uuid = getUUID(bodyRef, index);\n uuid && worker().setQuaternion({ props: [x, y, z, w], uuid });\n },\n subscribe: subscribe(bodyRef, worker(), subscriptions, type, index),\n };\n };\n\n const makeRotation = (index?: number) => {\n return {\n copy: ({ x, y, z }: THREE.Vector3 | THREE.Euler) => {\n const uuid = getUUID(bodyRef, index);\n uuid && worker().setRotation({ props: [x, y, z], uuid });\n },\n set: (x: number, y: number, z: number) => {\n const uuid = getUUID(bodyRef, index);\n uuid && worker().setRotation({ props: [x, y, z], uuid });\n },\n subscribe: (callback: (value: Triplet) => void) => {\n const id = incrementingId++;\n const target = 'bodies';\n const type = 'quaternion';\n const uuid = getUUID(bodyRef, index);\n\n subscriptions[id] = { [type]: quaternionToRotation(callback) };\n uuid && worker().subscribe({ props: { id, target, type }, uuid });\n return () => {\n delete subscriptions[id];\n worker().unsubscribe({ props: id });\n };\n },\n };\n };\n\n const makeVec = (type: VectorName, index?: number) => {\n const op: SetOpName<VectorName> = `set${capitalize(type)}`;\n return {\n copy: ({ x, y, z }: THREE.Vector3 | THREE.Euler) => {\n const uuid = getUUID(bodyRef, index);\n uuid && worker()[op]({ props: [x, y, z], uuid });\n },\n set: (x: number, y: number, z: number) => {\n const uuid = getUUID(bodyRef, index);\n uuid && worker()[op]({ props: [x, y, z], uuid });\n },\n subscribe: subscribe(bodyRef, worker(), subscriptions, type, index),\n };\n };\n\n const makeRemove = (index?: number) => {\n const uuid = getUUID(bodyRef, index);\n return () => {\n if (uuid) worker().removeBodies({ uuid: [uuid] });\n };\n };\n\n function makeApi(index?: number): NgtcWorkerApi {\n return {\n allowSleep: makeAtomic('allowSleep', index),\n angularDamping: makeAtomic('angularDamping', index),\n angularFactor: makeVec('angularFactor', index),\n angularVelocity: makeVec('angularVelocity', index),\n applyForce(force: Triplet, worldPoint: Triplet) {\n const uuid = getUUID(bodyRef, index);\n uuid && worker().applyForce({ props: [force, worldPoint], uuid });\n },\n applyImpulse(impulse: Triplet, worldPoint: Triplet) {\n const uuid = getUUID(bodyRef, index);\n uuid && worker().applyImpulse({ props: [impulse, worldPoint], uuid });\n },\n applyLocalForce(force: Triplet, localPoint: Triplet) {\n const uuid = getUUID(bodyRef, index);\n uuid && worker().applyLocalForce({ props: [force, localPoint], uuid });\n },\n applyLocalImpulse(impulse: Triplet, localPoint: Triplet) {\n const uuid = getUUID(bodyRef, index);\n uuid && worker().applyLocalImpulse({ props: [impulse, localPoint], uuid });\n },\n applyTorque(torque: Triplet) {\n const uuid = getUUID(bodyRef, index);\n uuid && worker().applyTorque({ props: [torque], uuid });\n },\n collisionFilterGroup: makeAtomic('collisionFilterGroup', index),\n collisionFilterMask: makeAtomic('collisionFilterMask', index),\n collisionResponse: makeAtomic('collisionResponse', index),\n fixedRotation: makeAtomic('fixedRotation', index),\n isTrigger: makeAtomic('isTrigger', index),\n linearDamping: makeAtomic('linearDamping', index),\n linearFactor: makeVec('linearFactor', index),\n mass: makeAtomic('mass', index),\n material: makeAtomic('material', index),\n position: makeVec('position', index),\n quaternion: makeQuaternion(index),\n rotation: makeRotation(index),\n scaleOverride(scale) {\n const uuid = getUUID(bodyRef, index);\n if (uuid) scaleOverrides[uuid] = new THREE.Vector3(...scale);\n },\n sleep() {\n const uuid = getUUID(bodyRef, index);\n uuid && worker().sleep({ uuid });\n },\n sleepSpeedLimit: makeAtomic('sleepSpeedLimit', index),\n sleepTimeLimit: makeAtomic('sleepTimeLimit', index),\n userData: makeAtomic('userData', index),\n velocity: makeVec('velocity', index),\n remove: makeRemove(index),\n wakeUp() {\n const uuid = getUUID(bodyRef, index);\n uuid && worker().wakeUp({ uuid });\n },\n };\n }\n\n const cache: { [index: number]: NgtcWorkerApi } = {};\n return {\n ...makeApi(undefined),\n at: (index: number) => cache[index] || (cache[index] = makeApi(index)),\n };\n });\n\n return { ref: bodyRef, api };\n });\n}\n","import { Injector, Signal, computed, effect, inject, runInInjectionContext, untracked } from '@angular/core';\nimport {\n ConstraintOptns,\n ConstraintTypes,\n HingeConstraintOpts,\n PointToPointConstraintOpts,\n} from '@pmndrs/cannon-worker-api';\nimport { NgtAnyRecord, NgtInjectedRef, assertInjectionContext, injectNgtRef, is, makeId } from 'angular-three';\nimport { NGTC_PHYSICS_API } from 'angular-three-cannon';\nimport * as THREE from 'three';\n\nexport interface NgtcConstraintApi {\n disable: () => void;\n enable: () => void;\n remove: () => void;\n}\n\nexport interface NgtcHingeConstraintApi extends NgtcConstraintApi {\n disableMotor: () => void;\n enableMotor: () => void;\n setMotorMaxForce: (value: number) => void;\n setMotorSpeed: (value: number) => void;\n}\n\nexport type NgtcConstraintORHingeApi<T extends 'Hinge' | ConstraintTypes> = T extends ConstraintTypes\n ? NgtcConstraintApi\n : NgtcHingeConstraintApi;\n\nexport interface NgtcConstraintReturn<\n T extends 'Hinge' | ConstraintTypes,\n TObjectA extends THREE.Object3D = THREE.Object3D,\n TObjectB extends THREE.Object3D = THREE.Object3D\n> {\n bodyA: NgtInjectedRef<TObjectA>;\n bodyB: NgtInjectedRef<TObjectB>;\n api: Signal<NgtcConstraintORHingeApi<T>>;\n}\n\nexport interface NgtcConstraintOptions<\n TConstraintType extends 'Hinge' | ConstraintTypes,\n TOptions extends HingeConstraintOpts | ConstraintOptns = TConstraintType extends 'Hinge'\n ? HingeConstraintOpts\n : ConstraintOptns\n> {\n injector?: Injector;\n deps?: () => NgtAnyRecord;\n opts?: () => TOptions;\n}\n\nexport function usePointToPointConstraint<A extends THREE.Object3D, B extends THREE.Object3D>(\n bodyA: NgtInjectedRef<A> | A,\n bodyB: NgtInjectedRef<B> | B,\n opts?: NgtcConstraintOptions<'PointToPoint', PointToPointConstraintOpts>\n) {\n return injectConstraint('PointToPoint', bodyA, bodyB, opts);\n}\nexport function useConeTwistConstraint<A extends THREE.Object3D, B extends THREE.Object3D>(\n bodyA: NgtInjectedRef<A> | A,\n bodyB: NgtInjectedRef<B> | B,\n opts?: NgtcConstraintOptions<'ConeTwist', PointToPointConstraintOpts>\n) {\n return injectConstraint('ConeTwist', bodyA, bodyB, opts);\n}\nexport function useDistanceConstraint<A extends THREE.Object3D, B extends THREE.Object3D>(\n bodyA: NgtInjectedRef<A> | A,\n bodyB: NgtInjectedRef<B> | B,\n opts?: NgtcConstraintOptions<'Distance', PointToPointConstraintOpts>\n) {\n return injectConstraint('Distance', bodyA, bodyB, opts);\n}\nexport function useHingeConstraint<A extends THREE.Object3D, B extends THREE.Object3D>(\n bodyA: NgtInjectedRef<A> | A,\n bodyB: NgtInjectedRef<B> | B,\n opts?: NgtcConstraintOptions<'Hinge', PointToPointConstraintOpts>\n) {\n return injectConstraint('Hinge', bodyA, bodyB, opts);\n}\nexport function useLockConstraint<A extends THREE.Object3D, B extends THREE.Object3D>(\n bodyA: NgtInjectedRef<A> | A,\n bodyB: NgtInjectedRef<B> | B,\n opts?: NgtcConstraintOptions<'Lock', PointToPointConstraintOpts>\n) {\n return injectConstraint('Lock', bodyA, bodyB, opts);\n}\n\nfunction injectConstraint<\n TConstraintType extends 'Hinge' | ConstraintTypes,\n A extends THREE.Object3D,\n B extends THREE.Object3D,\n TOptions extends HingeConstraintOpts | ConstraintOptns = TConstraintType extends 'Hinge'\n ? HingeConstraintOpts\n : ConstraintOptns\n>(\n type: TConstraintType,\n bodyA: NgtInjectedRef<A> | A,\n bodyB: NgtInjectedRef<B> | B,\n {\n injector,\n deps = () => ({}),\n opts = () => ({} as TOptions),\n }: NgtcConstraintOptions<TConstraintType, TOptions> = {}\n): NgtcConstraintReturn<TConstraintType, A, B> {\n injector = assertInjectionContext(injectConstraint, injector);\n return runInInjectionContext(injector, () => {\n const physicsApi = inject(NGTC_PHYSICS_API);\n const { worker } = physicsApi();\n\n const uuid = makeId();\n\n const bodyARef = is.ref(bodyA) ? bodyA : injectNgtRef(bodyA);\n const bodyBRef = is.ref(bodyB) ? bodyB : injectNgtRef(bodyB);\n\n effect((onCleanup) => {\n deps();\n if (bodyARef.nativeElement && bodyBRef.nativeElement) {\n worker().addConstraint({\n props: [bodyARef.untracked.uuid, bodyBRef.untracked.uuid, untracked(opts)],\n type,\n uuid,\n });\n onCleanup(() => worker().removeConstraint({ uuid }));\n }\n });\n\n const api = computed(() => {\n deps();\n const enableDisable = {\n disable: () => worker().disableConstraint({ uuid }),\n enable: () => worker().enableConstraint({ uuid }),\n remove: () => worker().removeConstraint({ uuid }),\n };\n\n if (type === 'Hinge') {\n return {\n ...enableDisable,\n disableMotor: () => worker().disableConstraintMotor({ uuid }),\n enableMotor: () => worker().enableConstraintMotor({ uuid }),\n setMotorMaxForce: (value: number) => worker().setConstraintMotorMaxForce({ props: value, uuid }),\n setMotorSpeed: (value: number) => worker().setConstraintMotorSpeed({ props: value, uuid }),\n } as NgtcConstraintORHingeApi<TConstraintType>;\n }\n\n return enableDisable as NgtcConstraintORHingeApi<TConstraintType>;\n });\n\n return { bodyA: bodyARef, bodyB: bodyBRef, api };\n });\n}\n","import { Injector, effect, inject, runInInjectionContext, untracked } from '@angular/core';\nimport { ContactMaterialOptions, MaterialOptions } from '@pmndrs/cannon-worker-api';\nimport { NgtAnyRecord, assertInjectionContext, makeId } from 'angular-three';\nimport { NGTC_PHYSICS_API } from 'angular-three-cannon';\n\nexport function injectContactMaterial(\n materialB: MaterialOptions,\n materialA: MaterialOptions,\n {\n opts,\n deps = () => ({}),\n injector,\n }: { opts: () => ContactMaterialOptions; deps?: () => NgtAnyRecord; injector?: Injector }\n): void {\n injector = assertInjectionContext(injectContactMaterial, injector);\n return runInInjectionContext(injector, () => {\n const physicsApi = inject(NGTC_PHYSICS_API);\n const { worker } = physicsApi();\n const uuid = makeId();\n effect((onCleanup) => {\n deps();\n worker().addContactMaterial({\n props: [materialA, materialB, untracked(opts)],\n uuid,\n });\n onCleanup(() => worker().removeContactMaterial({ uuid }));\n });\n });\n}\n","import { Injector, effect, inject, runInInjectionContext, untracked } from '@angular/core';\nimport { RayMode, RayOptions, RayhitEvent } from '@pmndrs/cannon-worker-api';\nimport { NgtAnyRecord, assertInjectionContext, makeId } from 'angular-three';\nimport { NGTC_PHYSICS_API } from 'angular-three-cannon';\n\nexport interface NgtcRayOptions {\n options: () => RayOptions;\n callback: (e: RayhitEvent) => void;\n injector?: Injector;\n deps?: () => NgtAnyRecord;\n}\n\nexport function injectRaycastClosest(opts: NgtcRayOptions) {\n return injectRay('Closest', opts);\n}\n\nexport function injectRaycastAny(opts: NgtcRayOptions) {\n return injectRay('Any', opts);\n}\n\nexport function useRaycastAll(opts: NgtcRayOptions) {\n return injectRay('All', opts);\n}\n\nfunction injectRay(mode: RayMode, { options, callback, deps = () => ({}), injector }: NgtcRayOptions) {\n injector = assertInjectionContext(injectRay, injector);\n return runInInjectionContext(injector, () => {\n const physicsApi = inject(NGTC_PHYSICS_API);\n const { worker, events } = physicsApi();\n const uuid = makeId();\n\n effect((onCleanup) => {\n deps();\n events[uuid] = { rayhit: callback };\n worker().addRay({ props: { ...untracked(options), mode }, uuid });\n onCleanup(() => {\n worker().removeRay({ uuid });\n delete events[uuid];\n });\n });\n });\n}\n","import { Injector, Signal, computed, effect, inject, runInInjectionContext, untracked } from '@angular/core';\nimport { WheelInfoOptions } from '@pmndrs/cannon-worker-api';\nimport { NgtAnyRecord, NgtInjectedRef, assertInjectionContext, injectNgtRef } from 'angular-three';\nimport { NGTC_PHYSICS_API } from 'angular-three-cannon';\nimport * as THREE from 'three';\nimport { getUUID, subscribe } from './body';\n\nfunction isString(v: unknown): v is string {\n return typeof v === 'string';\n}\n\nexport interface NgtcRaycastVehicleProps {\n chassisBody: NgtInjectedRef<THREE.Object3D>;\n wheelInfos: WheelInfoOptions[];\n wheels: Array<NgtInjectedRef<THREE.Object3D>>;\n indexForwardAxis?: number;\n indexRightAxis?: number;\n indexUpAxis?: number;\n}\n\nexport interface NgtcRaycastVehiclePublicApi {\n applyEngineForce: (value: number, wheelIndex: number) => void;\n setBrake: (brake: number, wheelIndex: number) => void;\n setSteeringValue: (value: number, wheelIndex: number) => void;\n sliding: { subscribe: (callback: (sliding: boolean) => void) => void };\n remove: () => void;\n}\n\nexport interface NgtcRaycastVehicleReturn<TObject extends THREE.Object3D = THREE.Object3D> {\n ref: NgtInjectedRef<TObject>;\n api: Signal<NgtcRaycastVehiclePublicApi>;\n}\n\nexport function injectRaycastVehicle<TObject extends THREE.Object3D = THREE.Object3D>(\n fn: () => NgtcRaycastVehicleProps,\n {\n ref,\n injector,\n deps = () => ({}),\n }: { ref?: NgtInjectedRef<TObject>; injector?: Injector; deps?: () => NgtAnyRecord } = {}\n): NgtcRaycastVehicleReturn<TObject> {\n injector = assertInjectionContext(injectRaycastVehicle, injector);\n return runInInjectionContext(injector, () => {\n const physicsApi = inject(NGTC_PHYSICS_API);\n const { worker, subscriptions } = physicsApi();\n\n let instanceRef = injectNgtRef<TObject>();\n if (ref) instanceRef = ref;\n\n effect(\n (onCleanup) => {\n deps();\n if (!instanceRef.untracked) {\n instanceRef.nativeElement = new THREE.Object3D() as TObject;\n }\n\n const currentWorker = worker();\n const uuid: string = instanceRef.nativeElement.uuid;\n const {\n chassisBody,\n indexForwardAxis = 2,\n indexRightAxis = 0,\n indexUpAxis = 1,\n wheelInfos,\n wheels,\n } = untracked(fn);\n\n const chassisBodyUUID = getUUID(chassisBody);\n const wheelUUIDs = wheels.map((ref) => getUUID(ref));\n\n if (!chassisBodyUUID || !wheelUUIDs.every(isString)) return;\n\n currentWorker.addRaycastVehicle({\n props: [chassisBodyUUID, wheelUUIDs, wheelInfos, indexForwardAxis, indexRightAxis, indexUpAxis],\n uuid,\n });\n onCleanup(() => {\n currentWorker.removeRaycastVehicle({ uuid });\n });\n },\n { allowSignalWrites: true }\n );\n\n const api = computed<NgtcRaycastVehiclePublicApi>(() => {\n deps();\n return {\n applyEngineForce(value: number, wheelIndex: number) {\n const uuid = getUUID(instanceRef);\n uuid &&\n worker().applyRaycastVehicleEngineForce({\n props: [value, wheelIndex],\n uuid,\n });\n },\n setBrake(brake: number, wheelIndex: number) {\n const uuid = getUUID(instanceRef);\n uuid && worker().setRaycastVehicleBrake({ props: [brake, wheelIndex], uuid });\n },\n setSteeringValue(value: number, wheelIndex: number) {\n const uuid = getUUID(instanceRef);\n uuid &&\n worker().setRaycastVehicleSteeringValue({\n props: [value, wheelIndex],\n uuid,\n });\n },\n sliding: {\n subscribe: subscribe(instanceRef, worker(), subscriptions, 'sliding', undefined, 'vehicles'),\n },\n\n remove: () => {\n const uuid = getUUID(instanceRef);\n uuid && worker().removeRaycastVehicle({ uuid });\n },\n };\n });\n\n return { ref: instanceRef, api };\n });\n}\n","import { Injector, Signal, computed, effect, inject, runInInjectionContext, untracked } from '@angular/core';\nimport { SpringOptns } from '@pmndrs/cannon-worker-api';\nimport { NgtAnyRecord, NgtInjectedRef, assertInjectionContext, injectNgtRef, is, makeId } from 'angular-three';\nimport { NGTC_PHYSICS_API } from 'angular-three-cannon';\n\nexport interface NgtcSpringApi {\n setDamping: (value: number) => void;\n setRestLength: (value: number) => void;\n setStiffness: (value: number) => void;\n remove: () => void;\n}\n\nexport interface NgtcSpringReturn<\n TObjectA extends THREE.Object3D = THREE.Object3D,\n TObjectB extends THREE.Object3D = THREE.Object3D\n> {\n bodyA: NgtInjectedRef<TObjectA>;\n bodyB: NgtInjectedRef<TObjectB>;\n api: Signal<NgtcSpringApi>;\n}\n\nexport function injectSpring<A extends THREE.Object3D, B extends THREE.Object3D>(\n bodyA: NgtInjectedRef<A> | A,\n bodyB: NgtInjectedRef<B> | B,\n {\n injector,\n opts = () => ({}),\n deps = () => ({}),\n }: { injector?: Injector; deps?: () => NgtAnyRecord; opts?: () => SpringOptns } = {}\n): NgtcSpringReturn<A, B> {\n injector = assertInjectionContext(injectSpring, injector);\n return runInInjectionContext(injector, () => {\n const physicsApi = inject(NGTC_PHYSICS_API);\n const { worker } = physicsApi();\n\n const uuid = makeId();\n\n const bodyARef = is.ref(bodyA) ? bodyA : injectNgtRef(bodyA);\n const bodyBRef = is.ref(bodyB) ? bodyB : injectNgtRef(bodyB);\n\n effect((onCleanup) => {\n deps();\n if (bodyARef.nativeElement && bodyBRef.nativeElement) {\n worker().addSpring({\n props: [bodyARef.nativeElement.uuid, bodyBRef.nativeElement.uuid, untracked(opts)],\n uuid,\n });\n onCleanup(() => worker().removeSpring({ uuid }));\n }\n });\n\n const api = computed(() => {\n deps();\n return {\n setDamping: (value: number) => worker().setSpringDamping({ props: value, uuid }),\n setRestLength: (value: number) => worker().setSpringRestLength({ props: value, uuid }),\n setStiffness: (value: number) => worker().setSpringStiffness({ props: value, uuid }),\n remove: () => worker().removeSpring({ uuid }),\n };\n });\n\n return { bodyA: bodyARef, bodyB: bodyBRef, api };\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;AAqFA,MAAM,IAAI,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;AAElC,SAAS,UAAU,CAAmB,GAAM,EAAA;AACxC,IAAA,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAmB;AACzE,CAAC;AAEe,SAAA,OAAO,CAAC,GAA+B,EAAE,KAAc,EAAA;AACnE,IAAA,MAAM,MAAM,GAAG,KAAK,KAAK,SAAS,GAAG,EAAE,GAAG,CAAI,CAAA,EAAA,KAAK,EAAE,CAAC;IACtD,IAAI,OAAO,GAAG,KAAK,UAAU;AAAE,QAAA,OAAO,IAAI,CAAC;AAC3C,IAAA,OAAO,GAAG,IAAI,GAAG,CAAC,aAAa,IAAI,CAAA,EAAG,GAAG,CAAC,aAAa,CAAC,IAAI,CAAG,EAAA,MAAM,EAAE,CAAC;AAC5E,CAAC;AAED,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;AAC5B,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;AAEjC,MAAM,oBAAoB,GAAG,CAAC,QAA8B,KAAI;IAC5D,OAAO,CAAC,CAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAa,CAAC,CAAC;AAC3F,CAAC,CAAC;AAEF,IAAI,cAAc,GAAG,CAAC,CAAC;AAEP,SAAA,SAAS,CACrB,GAA+B,EAC/B,MAAuB,EACvB,aAA4B,EAC5B,IAAO,EACP,KAAc,EACd,SAA6B,QAAQ,EAAA;IAErC,OAAO,CAAC,QAAuC,KAAI;AAC/C,QAAA,MAAM,EAAE,GAAG,cAAc,EAAE,CAAC;QAC5B,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,GAAG,QAAQ,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACjC,QAAA,IAAI,IAAI,MAAM,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;AAChE,QAAA,OAAO,MAAK;AACR,YAAA,OAAO,aAAa,CAAC,EAAE,CAAC,CAAC;YACzB,MAAM,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;AACtC,SAAC,CAAC;AACN,KAAC,CAAC;AACN,CAAC;AAED,SAAS,OAAO,CAAC,MAAsB,EAAE,EAAE,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,GAAG,EAAE,EAAa,EAAA;AAC7G,IAAA,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;IACjC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;IACjC,MAAM,CAAC,YAAY,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,cAAc,CACnB,MAAwB,EACxB,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,EAAsB,EAC/D,IAAY,EAAA;IAEZ,MAAM,CAAC,IAAI,CAAC,GAAG;AACX,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,YAAY,EAAE,cAAc;AAC5B,QAAA,UAAU,EAAE,YAAY;KAC3B,CAAC;AACN,CAAC;AAED,SAAS,WAAW,CAAC,CAA0B,EAAA;IAC3C,OAAO,CAAC,YAAY,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC5D,CAAC;AAQe,SAAA,WAAW,CACvB,EAA8B,EAC9B,IAA+B,EAAA;AAE/B,IAAA,OAAO,UAAU,CAAC,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC;AACnD,CAAC;AAEe,SAAA,SAAS,CACrB,EAA4B,EAC5B,IAA+B,EAAA;IAE/B,MAAM,cAAc,GAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1C,IAAA,OAAO,UAAU,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,cAAc,KAAc,IAAI,EAAE,IAAI,CAAC,CAAC;AACjF,CAAC;AAEe,SAAA,cAAc,CAC1B,EAAiC,EACjC,IAA+B,EAAA;AAE/B,IAAA,OAAO,UAAU,CAAC,UAAU,EAAE,EAAE,EAAE,CAAC,IAAA,GAAO,EAAQ,KAAK,IAAI,EAAE,IAAI,CAAC,CAAC;AACvE,CAAC;AAEe,SAAA,iBAAiB,CAC7B,EAAoC,EACpC,IAA+B,EAAA;AAE/B,IAAA,OAAO,UAAU,CAAC,aAAa,EAAE,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,EAAE,IAAI,CAAC,CAAC;AAC/D,CAAC;AAEe,SAAA,cAAc,CAC1B,EAAiC,EACjC,IAA+B,EAAA;AAE/B,IAAA,OAAO,UAAU,CAAC,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC;AACtD,CAAC;AACe,SAAA,YAAY,CACxB,EAA+B,EAC/B,IAA+B,EAAA;AAE/B,IAAA,OAAO,UAAU,CACb,QAAQ,EACR,EAAE,EACF,CAAC,IAAA,GAAmB,CAAC,CAAC,CAAC,KAAgB;AACnC,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;AAC7E,QAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;KACpB,EACD,IAAI,CACP,CAAC;AACN,CAAC;AACe,SAAA,aAAa,CACzB,EAAgC,EAChC,IAA+B,EAAA;AAE/B,IAAA,OAAO,UAAU,CAAC,SAAS,EAAE,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,EAAE,IAAI,CAAC,CAAC;AAC3D,CAAC;AAEe,SAAA,sBAAsB,CAClC,EAAyC,EACzC,IAA+B,EAAA;IAE/B,OAAO,UAAU,CACb,kBAAkB,EAClB,EAAE,EACF,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,oBAAoB,CAAC,GAAG,EAAE,KAAoC;AAC5F,QAAA,QAAQ,IAAI,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC;QACrC,KAAK;AACL,QAAA,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;AACnC,QAAA,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;QAC7B,oBAAoB;KACvB,EACD,IAAI,CACP,CAAC;AACN,CAAC;AACe,SAAA,kBAAkB,CAC9B,EAAqC,EACrC,IAA+B,EAAA;AAE/B,IAAA,OAAO,UAAU,CAAC,UAAU,EAAE,EAAE,EAAE,CAAC,IAAI,KAAK,IAAiB,EAAE,IAAI,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,UAAU,CACf,IAAmB,EACnB,UAAsC,EACtC,MAAqC,EACrC,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,GAAG,OAAO,EAAE,CAAC,EAAA,GAA+B,EAAE,EAAA;AAEnE,IAAA,QAAQ,GAAG,sBAAsB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AACxD,IAAA,OAAO,qBAAqB,CAAC,QAAQ,EAAE,MAAK;AACxC,QAAA,IAAI,OAAO,GAAG,YAAY,EAAW,CAAC;AAEtC,QAAA,IAAI,GAAG;YAAE,OAAO,GAAG,GAAG,CAAC;AAEvB,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAC5C,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAE5D,QAAA,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,QAAQ,IAAI,IAAI,EAAE,CAAC;AAClE,QAAA,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;QAE7E,gCAAgC,CAAC,MAAK;AAClC,YAAA,MAAM,CACF,CAAC,SAAS,KAAI;;AAEV,gBAAA,IAAI,EAAE,CAAC;AAEP,gBAAA,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE;oBACxB,OAAO,CAAC,aAAa,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAa,CAAC;AAC3D,iBAAA;AAED,gBAAA,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;AACrC,gBAAA,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC;AAE/B,gBAAA,MAAM,WAAW,GACb,MAAM,YAAY,KAAK,CAAC,aAAa;AACjC,uBAAG,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC,KAAK;sBACrE,CAAC,CAAC;AAEZ,gBAAA,MAAM,IAAI,GACN,MAAM,YAAY,KAAK,CAAC,aAAa;AACjC,sBAAE,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAA,EAAG,MAAM,CAAC,IAAI,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,CAAC;AACrE,sBAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAExB,gBAAA,MAAM,KAAK,GACP,MAAM,YAAY,KAAK,CAAC,aAAa;sBAC/B,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,KAAI;AACf,wBAAA,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;AAC5B,wBAAA,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;wBACrB,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AACnC,wBAAA,MAAM,CAAC,cAAc,CAAC,WAAW,GAAG,IAAI,CAAC;AACzC,wBAAA,IAAI,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;wBAClB,QAAQ,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AAC5B,wBAAA,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;AAClC,wBAAA,OAAO,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;AAClD,qBAAC,CAAC;sBACF,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,KAAI;AACf,wBAAA,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;AAC5B,wBAAA,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACvB,wBAAA,IAAI,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;wBAClB,QAAQ,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AAC5B,wBAAA,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;AAClC,wBAAA,OAAO,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;AAClD,qBAAC,CAAC,CAAC;;gBAGb,aAAa,CAAC,SAAS,CAAC;AACpB,oBAAA,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,GAAG,iBAAiB,EAAE,KAAI;wBACnF,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,EAAE,GAAG,iBAAiB,EAAE,CAAC;AACnE,qBAAC,CAAC;oBACF,IAAI;oBACJ,IAAI;AACP,iBAAA,CAAC,CAAC;gBAEH,SAAS,CAAC,MAAK;AACX,oBAAA,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;AAChB,wBAAA,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC;AAChB,wBAAA,WAAW,GAAG,EAAE,CAAC,CAAC;AAClB,wBAAA,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC;AACtB,qBAAC,CAAC,CAAC;AACH,oBAAA,aAAa,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AACzC,iBAAC,CAAC,CAAC;AACP,aAAC,EACD,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAC9B,CAAC;AACN,SAAC,CAAC,CAAC;AAEH,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAK;AACtB,YAAA,MAAM,UAAU,GAAG,CAAuB,IAAO,EAAE,KAAc,KAAI;gBACjE,MAAM,EAAE,GAAiB,CAAM,GAAA,EAAA,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAElD,OAAO;AACH,oBAAA,GAAG,EAAE,CAAC,KAAmB,KAAI;wBACzB,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;wBACrC,IAAI;AACA,4BAAA,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;AACT,gCAAA,KAAK,EAAE,KAAK;gCACZ,IAAI;AACE,6BAAA,CAAC,CAAC;qBACnB;AACD,oBAAA,SAAS,EAAE,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,CAAC;iBACtE,CAAC;AACN,aAAC,CAAC;AAEF,YAAA,MAAM,cAAc,GAAG,CAAC,KAAc,KAAI;gBACtC,MAAM,IAAI,GAAG,YAAY,CAAC;gBAC1B,OAAO;AACH,oBAAA,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAoB,KAAI;wBACvC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;wBACrC,IAAI,IAAI,MAAM,EAAE,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;qBACjE;oBACD,GAAG,EAAE,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS,KAAI;wBAChD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;wBACrC,IAAI,IAAI,MAAM,EAAE,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;qBACjE;AACD,oBAAA,SAAS,EAAE,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,CAAC;iBACtE,CAAC;AACN,aAAC,CAAC;AAEF,YAAA,MAAM,YAAY,GAAG,CAAC,KAAc,KAAI;gBACpC,OAAO;oBACH,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAA+B,KAAI;wBAC/C,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;wBACrC,IAAI,IAAI,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;qBAC5D;oBACD,GAAG,EAAE,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,KAAI;wBACrC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;wBACrC,IAAI,IAAI,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;qBAC5D;AACD,oBAAA,SAAS,EAAE,CAAC,QAAkC,KAAI;AAC9C,wBAAA,MAAM,EAAE,GAAG,cAAc,EAAE,CAAC;wBAC5B,MAAM,MAAM,GAAG,QAAQ,CAAC;wBACxB,MAAM,IAAI,GAAG,YAAY,CAAC;wBAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAErC,wBAAA,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,GAAG,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC;wBAC/D,IAAI,IAAI,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;AAClE,wBAAA,OAAO,MAAK;AACR,4BAAA,OAAO,aAAa,CAAC,EAAE,CAAC,CAAC;4BACzB,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;AACxC,yBAAC,CAAC;qBACL;iBACJ,CAAC;AACN,aAAC,CAAC;AAEF,YAAA,MAAM,OAAO,GAAG,CAAC,IAAgB,EAAE,KAAc,KAAI;gBACjD,MAAM,EAAE,GAA0B,CAAM,GAAA,EAAA,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3D,OAAO;oBACH,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAA+B,KAAI;wBAC/C,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;wBACrC,IAAI,IAAI,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;qBACpD;oBACD,GAAG,EAAE,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,KAAI;wBACrC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;wBACrC,IAAI,IAAI,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;qBACpD;AACD,oBAAA,SAAS,EAAE,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,CAAC;iBACtE,CAAC;AACN,aAAC,CAAC;AAEF,YAAA,MAAM,UAAU,GAAG,CAAC,KAAc,KAAI;gBAClC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACrC,gBAAA,OAAO,MAAK;AACR,oBAAA,IAAI,IAAI;AAAE,wBAAA,MAAM,EAAE,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACtD,iBAAC,CAAC;AACN,aAAC,CAAC;YAEF,SAAS,OAAO,CAAC,KAAc,EAAA;gBAC3B,OAAO;AACH,oBAAA,UAAU,EAAE,UAAU,CAAC,YAAY,EAAE,KAAK,CAAC;AAC3C,oBAAA,cAAc,EAAE,UAAU,CAAC,gBAAgB,EAAE,KAAK,CAAC;AACnD,oBAAA,aAAa,EAAE,OAAO,CAAC,eAAe,EAAE,KAAK,CAAC;AAC9C,oBAAA,eAAe,EAAE,OAAO,CAAC,iBAAiB,EAAE,KAAK,CAAC;oBAClD,UAAU,CAAC,KAAc,EAAE,UAAmB,EAAA;wBAC1C,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACrC,wBAAA,IAAI,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;qBACrE;oBACD,YAAY,CAAC,OAAgB,EAAE,UAAmB,EAAA;wBAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACrC,wBAAA,IAAI,IAAI,MAAM,EAAE,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;qBACzE;oBACD,eAAe,CAAC,KAAc,EAAE,UAAmB,EAAA;wBAC/C,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACrC,wBAAA,IAAI,IAAI,MAAM,EAAE,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;qBAC1E;oBACD,iBAAiB,CAAC,OAAgB,EAAE,UAAmB,EAAA;wBACnD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACrC,wBAAA,IAAI,IAAI,MAAM,EAAE,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;qBAC9E;AACD,oBAAA,WAAW,CAAC,MAAe,EAAA;wBACvB,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACrC,wBAAA,IAAI,IAAI,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;qBAC3D;AACD,oBAAA,oBAAoB,EAAE,UAAU,CAAC,sBAAsB,EAAE,KAAK,CAAC;AAC/D,oBAAA,mBAAmB,EAAE,UAAU,CAAC,qBAAqB,EAAE,KAAK,CAAC;AAC7D,oBAAA,iBAAiB,EAAE,UAAU,CAAC,mBAAmB,EAAE,KAAK,CAAC;AACzD,oBAAA,aAAa,EAAE,UAAU,CAAC,eAAe,EAAE,KAAK,CAAC;AACjD,oBAAA,SAAS,EAAE,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC;AACzC,oBAAA,aAAa,EAAE,UAAU,CAAC,eAAe,EAAE,KAAK,CAAC;AACjD,oBAAA,YAAY,EAAE,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC;AAC5C,oBAAA,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC;AAC/B,oBAAA,QAAQ,EAAE,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC;AACvC,oBAAA,QAAQ,EAAE,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;AACpC,oBAAA,UAAU,EAAE,cAAc,CAAC,KAAK,CAAC;AACjC,oBAAA,QAAQ,EAAE,YAAY,CAAC,KAAK,CAAC;AAC7B,oBAAA,aAAa,CAAC,KAAK,EAAA;wBACf,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACrC,wBAAA,IAAI,IAAI;AAAE,4BAAA,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;qBAChE;oBACD,KAAK,GAAA;wBACD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;wBACrC,IAAI,IAAI,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;qBACpC;AACD,oBAAA,eAAe,EAAE,UAAU,CAAC,iBAAiB,EAAE,KAAK,CAAC;AACrD,oBAAA,cAAc,EAAE,UAAU,CAAC,gBAAgB,EAAE,KAAK,CAAC;AACnD,oBAAA,QAAQ,EAAE,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC;AACvC,oBAAA,QAAQ,EAAE,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;AACpC,oBAAA,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC;oBACzB,MAAM,GAAA;wBACF,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;wBACrC,IAAI,IAAI,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;qBACrC;iBACJ,CAAC;aACL;YAED,MAAM,KAAK,GAAuC,EAAE,CAAC;YACrD,OAAO;gBACH,GAAG,OAAO,CAAC,SAAS,CAAC;gBACrB,EAAE,EAAE,CAAC,KAAa,KAAK,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;aACzE,CAAC;AACN,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;AACjC,KAAC,CAAC,CAAC;AACP;;SCjagB,yBAAyB,CACrC,KAA4B,EAC5B,KAA4B,EAC5B,IAAwE,EAAA;IAExE,OAAO,gBAAgB,CAAC,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AAChE,CAAC;SACe,sBAAsB,CAClC,KAA4B,EAC5B,KAA4B,EAC5B,IAAqE,EAAA;IAErE,OAAO,gBAAgB,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AAC7D,CAAC;SACe,qBAAqB,CACjC,KAA4B,EAC5B,KAA4B,EAC5B,IAAoE,EAAA;IAEpE,OAAO,gBAAgB,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AAC5D,CAAC;SACe,kBAAkB,CAC9B,KAA4B,EAC5B,KAA4B,EAC5B,IAAiE,EAAA;IAEjE,OAAO,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AACzD,CAAC;SACe,iBAAiB,CAC7B,KAA4B,EAC5B,KAA4B,EAC5B,IAAgE,EAAA;IAEhE,OAAO,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,gBAAgB,CAQrB,IAAqB,EACrB,KAA4B,EAC5B,KAA4B,EAC5B,EACI,QAAQ,EACR,IAAI,GAAG,OAAO,EAAE,CAAC,EACjB,IAAI,GAAG,OAAO,EAAe,CAAA,MACqB,EAAE,EAAA;AAExD,IAAA,QAAQ,GAAG,sBAAsB,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;AAC9D,IAAA,OAAO,qBAAqB,CAAC,QAAQ,EAAE,MAAK;AACxC,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAC5C,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;AAEhC,QAAA,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC;AAEtB,QAAA,MAAM,QAAQ,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;AAC7D,QAAA,MAAM,QAAQ,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;AAE7D,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACjB,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,IAAI,QAAQ,CAAC,aAAa,IAAI,QAAQ,CAAC,aAAa,EAAE;gBAClD,MAAM,EAAE,CAAC,aAAa,CAAC;AACnB,oBAAA,KAAK,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;oBAC1E,IAAI;oBACJ,IAAI;AACP,iBAAA,CAAC,CAAC;AACH,gBAAA,SAAS,CAAC,MAAM,MAAM,EAAE,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACxD,aAAA;AACL,SAAC,CAAC,CAAC;AAEH,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAK;AACtB,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,MAAM,aAAa,GAAG;AAClB,gBAAA,OAAO,EAAE,MAAM,MAAM,EAAE,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,CAAC;AACnD,gBAAA,MAAM,EAAE,MAAM,MAAM,EAAE,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,CAAC;AACjD,gBAAA,MAAM,EAAE,MAAM,MAAM,EAAE,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,CAAC;aACpD,CAAC;YAEF,IAAI,IAAI,KAAK,OAAO,EAAE;gBAClB,OAAO;AACH,oBAAA,GAAG,aAAa;AAChB,oBAAA,YAAY,EAAE,MAAM,MAAM,EAAE,CAAC,sBAAsB,CAAC,EAAE,IAAI,EAAE,CAAC;AAC7D,oBAAA,WAAW,EAAE,MAAM,MAAM,EAAE,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,CAAC;AAC3D,oBAAA,gBAAgB,EAAE,CAAC,KAAa,KAAK,MAAM,EAAE,CAAC,0BAA0B,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAChG,oBAAA,aAAa,EAAE,CAAC,KAAa,KAAK,MAAM,EAAE,CAAC,uBAAuB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;iBAChD,CAAC;AAClD,aAAA;AAED,YAAA,OAAO,aAA0D,CAAC;AACtE,SAAC,CAAC,CAAC;QAEH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;AACrD,KAAC,CAAC,CAAC;AACP;;AC9IM,SAAU,qBAAqB,CACjC,SAA0B,EAC1B,SAA0B,EAC1B,EACI,IAAI,EACJ,IAAI,GAAG,OAAO,EAAE,CAAC,EACjB,QAAQ,GAC6E,EAAA;AAEzF,IAAA,QAAQ,GAAG,sBAAsB,CAAC,qBAAqB,EAAE,QAAQ,CAAC,CAAC;AACnE,IAAA,OAAO,qBAAqB,CAAC,QAAQ,EAAE,MAAK;AACxC,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAC5C,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;AAChC,QAAA,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC;AACtB,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACjB,YAAA,IAAI,EAAE,CAAC;YACP,MAAM,EAAE,CAAC,kBAAkB,CAAC;gBACxB,KAAK,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;gBAC9C,IAAI;AACP,aAAA,CAAC,CAAC;AACH,YAAA,SAAS,CAAC,MAAM,MAAM,EAAE,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC9D,SAAC,CAAC,CAAC;AACP,KAAC,CAAC,CAAC;AACP;;AChBM,SAAU,oBAAoB,CAAC,IAAoB,EAAA;AACrD,IAAA,OAAO,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AACtC,CAAC;AAEK,SAAU,gBAAgB,CAAC,IAAoB,EAAA;AACjD,IAAA,OAAO,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAClC,CAAC;AAEK,SAAU,aAAa,CAAC,IAAoB,EAAA;AAC9C,IAAA,OAAO,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,SAAS,CAAC,IAAa,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,GAAG,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAkB,EAAA;AAChG,IAAA,QAAQ,GAAG,sBAAsB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AACvD,IAAA,OAAO,qBAAqB,CAAC,QAAQ,EAAE,MAAK;AACxC,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAC5C,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;AACxC,QAAA,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC;AAEtB,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACjB,YAAA,IAAI,EAAE,CAAC;YACP,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;YACpC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YAClE,SAAS,CAAC,MAAK;gBACX,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7B,gBAAA,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;AACxB,aAAC,CAAC,CAAC;AACP,SAAC,CAAC,CAAC;AACP,KAAC,CAAC,CAAC;AACP;;AClCA,SAAS,QAAQ,CAAC,CAAU,EAAA;AACxB,IAAA,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC;AACjC,CAAC;SAwBe,oBAAoB,CAChC,EAAiC,EACjC,EACI,GAAG,EACH,QAAQ,EACR,IAAI,GAAG,OAAO,EAAE,CAAC,MACkE,EAAE,EAAA;AAEzF,IAAA,QAAQ,GAAG,sBAAsB,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC;AAClE,IAAA,OAAO,qBAAqB,CAAC,QAAQ,EAAE,MAAK;AACxC,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAC5C,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,UAAU,EAAE,CAAC;AAE/C,QAAA,IAAI,WAAW,GAAG,YAAY,EAAW,CAAC;AAC1C,QAAA,IAAI,GAAG;YAAE,WAAW,GAAG,GAAG,CAAC;AAE3B,QAAA,MAAM,CACF,CAAC,SAAS,KAAI;AACV,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE;gBACxB,WAAW,CAAC,aAAa,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAa,CAAC;AAC/D,aAAA;AAED,YAAA,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC;AAC/B,YAAA,MAAM,IAAI,GAAW,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC;YACpD,MAAM,EACF,WAAW,EACX,gBAAgB,GAAG,CAAC,EACpB,cAAc,GAAG,CAAC,EAClB,WAAW,GAAG,CAAC,EACf,UAAU,EACV,MAAM,GACT,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;AAElB,YAAA,MAAM,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AAC7C,YAAA,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;YAErD,IAAI,CAAC,eAAe,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC;gBAAE,OAAO;YAE5D,aAAa,CAAC,iBAAiB,CAAC;AAC5B,gBAAA,KAAK,EAAE,CAAC,eAAe,EAAE,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,cAAc,EAAE,WAAW,CAAC;gBAC/F,IAAI;AACP,aAAA,CAAC,CAAC;YACH,SAAS,CAAC,MAAK;AACX,gBAAA,aAAa,CAAC,oBAAoB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AACjD,aAAC,CAAC,CAAC;AACP,SAAC,EACD,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAC9B,CAAC;AAEF,QAAA,MAAM,GAAG,GAAG,QAAQ,CAA8B,MAAK;AACnD,YAAA,IAAI,EAAE,CAAC;YACP,OAAO;gBACH,gBAAgB,CAAC,KAAa,EAAE,UAAkB,EAAA;AAC9C,oBAAA,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;oBAClC,IAAI;wBACA,MAAM,EAAE,CAAC,8BAA8B,CAAC;AACpC,4BAAA,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC;4BAC1B,IAAI;AACP,yBAAA,CAAC,CAAC;iBACV;gBACD,QAAQ,CAAC,KAAa,EAAE,UAAkB,EAAA;AACtC,oBAAA,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AAClC,oBAAA,IAAI,IAAI,MAAM,EAAE,CAAC,sBAAsB,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;iBACjF;gBACD,gBAAgB,CAAC,KAAa,EAAE,UAAkB,EAAA;AAC9C,oBAAA,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;oBAClC,IAAI;wBACA,MAAM,EAAE,CAAC,8BAA8B,CAAC;AACpC,4BAAA,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC;4BAC1B,IAAI;AACP,yBAAA,CAAC,CAAC;iBACV;AACD,gBAAA,OAAO,EAAE;AACL,oBAAA,SAAS,EAAE,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC;AAC/F,iBAAA;gBAED,MAAM,EAAE,MAAK;AACT,oBAAA,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;oBAClC,IAAI,IAAI,MAAM,EAAE,CAAC,oBAAoB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;iBACnD;aACJ,CAAC;AACN,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC;AACrC,KAAC,CAAC,CAAC;AACP;;AClGgB,SAAA,YAAY,CACxB,KAA4B,EAC5B,KAA4B,EAC5B,EACI,QAAQ,EACR,IAAI,GAAG,OAAO,EAAE,CAAC,EACjB,IAAI,GAAG,OAAO,EAAE,CAAC,GAAA,GAC6D,EAAE,EAAA;AAEpF,IAAA,QAAQ,GAAG,sBAAsB,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;AAC1D,IAAA,OAAO,qBAAqB,CAAC,QAAQ,EAAE,MAAK;AACxC,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAC5C,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;AAEhC,QAAA,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC;AAEtB,QAAA,MAAM,QAAQ,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;AAC7D,QAAA,MAAM,QAAQ,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;AAE7D,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACjB,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,IAAI,QAAQ,CAAC,aAAa,IAAI,QAAQ,CAAC,aAAa,EAAE;gBAClD,MAAM,EAAE,CAAC,SAAS,CAAC;AACf,oBAAA,KAAK,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;oBAClF,IAAI;AACP,iBAAA,CAAC,CAAC;AACH,gBAAA,SAAS,CAAC,MAAM,MAAM,EAAE,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACpD,aAAA;AACL,SAAC,CAAC,CAAC;AAEH,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAK;AACtB,YAAA,IAAI,EAAE,CAAC;YACP,OAAO;AACH,gBAAA,UAAU,EAAE,CAAC,KAAa,KAAK,MAAM,EAAE,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAChF,gBAAA,aAAa,EAAE,CAAC,KAAa,KAAK,MAAM,EAAE,CAAC,mBAAmB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACtF,gBAAA,YAAY,EAAE,CAAC,KAAa,KAAK,MAAM,EAAE,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACpF,gBAAA,MAAM,EAAE,MAAM,MAAM,EAAE,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC;aAChD,CAAC;AACN,SAAC,CAAC,CAAC;QAEH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;AACrD,KAAC,CAAC,CAAC;AACP;;AC/DA;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"angular-three-cannon-services.mjs","sources":["../../../../libs/cannon/services/src/body.ts","../../../../libs/cannon/services/src/constraint.ts","../../../../libs/cannon/services/src/contact-material.ts","../../../../libs/cannon/services/src/ray.ts","../../../../libs/cannon/services/src/raycast-vehicle.ts","../../../../libs/cannon/services/src/spring.ts","../../../../libs/cannon/services/src/angular-three-cannon-services.ts"],"sourcesContent":["import { ElementRef, Injector, Signal, computed, effect, inject, runInInjectionContext } from '@angular/core';\nimport type {\n AtomicName,\n AtomicProps,\n BodyProps,\n BodyShapeType,\n BoxProps,\n CannonWorkerAPI,\n CompoundBodyProps,\n ConvexPolyhedronArgs,\n ConvexPolyhedronProps,\n CylinderProps,\n HeightfieldProps,\n ParticleProps,\n PlaneProps,\n PropValue,\n Quad,\n SetOpName,\n SphereArgs,\n SphereProps,\n SubscriptionName,\n SubscriptionTarget,\n Subscriptions,\n TrimeshProps,\n Triplet,\n VectorName,\n} from '@pmndrs/cannon-worker-api';\nimport {\n NgtAnyRecord,\n NgtInjectedRef,\n assertInjectionContext,\n injectNgtRef,\n requestAnimationFrameInInjectionContext,\n} from 'angular-three';\nimport { NGTC_PHYSICS_API, NgtcCannonEvents } from 'angular-three-cannon';\nimport { NGTC_DEBUG_API } from 'angular-three-cannon/debug';\nimport * as THREE from 'three';\n\nexport type NgtcAtomicApi<K extends AtomicName> = {\n set: (value: AtomicProps[K]) => void;\n subscribe: (callback: (value: AtomicProps[K]) => void) => () => void;\n};\n\nexport type NgtcQuaternionApi = {\n copy: ({ w, x, y, z }: THREE.Quaternion) => void;\n set: (x: number, y: number, z: number, w: number) => void;\n subscribe: (callback: (value: Quad) => void) => () => void;\n};\n\nexport type NgtcVectorApi = {\n copy: ({ x, y, z }: THREE.Vector3 | THREE.Euler) => void;\n set: (x: number, y: number, z: number) => void;\n subscribe: (callback: (value: Triplet) => void) => () => void;\n};\n\nexport type NgtcWorkerApi = {\n [K in AtomicName]: NgtcAtomicApi<K>;\n} & {\n [K in VectorName]: NgtcVectorApi;\n} & {\n applyForce: (force: Triplet, worldPoint: Triplet) => void;\n applyImpulse: (impulse: Triplet, worldPoint: Triplet) => void;\n applyLocalForce: (force: Triplet, localPoint: Triplet) => void;\n applyLocalImpulse: (impulse: Triplet, localPoint: Triplet) => void;\n applyTorque: (torque: Triplet) => void;\n quaternion: NgtcQuaternionApi;\n rotation: NgtcVectorApi;\n scaleOverride: (scale: Triplet) => void;\n sleep: () => void;\n wakeUp: () => void;\n remove: () => void;\n};\n\nexport interface NgtcBodyPublicApi extends NgtcWorkerApi {\n at: (index: number) => NgtcWorkerApi;\n}\n\nexport interface NgtcBodyReturn<TObject extends THREE.Object3D> {\n ref: NgtInjectedRef<TObject>;\n api: Signal<NgtcBodyPublicApi>;\n}\n\nexport type NgtcGetByIndex<T extends BodyProps> = (index: number) => T;\nexport type NgtcArgFn<T> = (args: T) => unknown[];\n\nconst temp = new THREE.Object3D();\n\nfunction capitalize<T extends string>(str: T): Capitalize<T> {\n return (str.charAt(0).toUpperCase() + str.slice(1)) as Capitalize<T>;\n}\n\nexport function getUUID(ref: ElementRef<THREE.Object3D>, index?: number): string | null {\n const suffix = index === undefined ? '' : `/${index}`;\n if (typeof ref === 'function') return null;\n return ref && ref.nativeElement && `${ref.nativeElement.uuid}${suffix}`;\n}\n\nconst e = new THREE.Euler();\nconst q = new THREE.Quaternion();\n\nconst quaternionToRotation = (callback: (v: Triplet) => void) => {\n return (v: Quad) => callback(e.setFromQuaternion(q.fromArray(v)).toArray() as Triplet);\n};\n\nlet incrementingId = 0;\n\nexport function subscribe<T extends SubscriptionName>(\n ref: ElementRef<THREE.Object3D>,\n worker: CannonWorkerAPI,\n subscriptions: Subscriptions,\n type: T,\n index?: number,\n target: SubscriptionTarget = 'bodies'\n) {\n return (callback: (value: PropValue<T>) => void) => {\n const id = incrementingId++;\n subscriptions[id] = { [type]: callback };\n const uuid = getUUID(ref, index);\n uuid && worker.subscribe({ props: { id, target, type }, uuid });\n return () => {\n delete subscriptions[id];\n worker.unsubscribe({ props: id });\n };\n };\n}\n\nfunction prepare(object: THREE.Object3D, { position = [0, 0, 0], rotation = [0, 0, 0], userData = {} }: BodyProps) {\n object.userData = userData;\n object.position.set(...position);\n object.rotation.set(...rotation);\n object.updateMatrix();\n}\n\nfunction setupCollision(\n events: NgtcCannonEvents,\n { onCollide, onCollideBegin, onCollideEnd }: Partial<BodyProps>,\n uuid: string\n) {\n events[uuid] = {\n collide: onCollide,\n collideBegin: onCollideBegin,\n collideEnd: onCollideEnd,\n };\n}\n\nfunction makeTriplet(v: THREE.Vector3 | Triplet): Triplet {\n return v instanceof THREE.Vector3 ? [v.x, v.y, v.z] : v;\n}\n\nexport interface NgtcBodyOptions<TObject extends THREE.Object3D> {\n ref?: NgtInjectedRef<TObject>;\n deps?: () => NgtAnyRecord;\n injector?: Injector;\n}\n\nexport function injectPlane<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<PlaneProps>,\n opts?: NgtcBodyOptions<TObject>\n) {\n return injectBody('Plane', fn, () => [], opts);\n}\n\nexport function injectBox<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<BoxProps>,\n opts?: NgtcBodyOptions<TObject>\n) {\n const defaultBoxArgs: Triplet = [1, 1, 1];\n return injectBody('Box', fn, (args = defaultBoxArgs): Triplet => args, opts);\n}\n\nexport function injectCylinder<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<CylinderProps>,\n opts?: NgtcBodyOptions<TObject>\n) {\n return injectBody('Cylinder', fn, (args = [] as []) => args, opts);\n}\n\nexport function injectHeightfield<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<HeightfieldProps>,\n opts?: NgtcBodyOptions<TObject>\n) {\n return injectBody('Heightfield', fn, (args) => args, opts);\n}\n\nexport function injectParticle<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<ParticleProps>,\n opts?: NgtcBodyOptions<TObject>\n) {\n return injectBody('Particle', fn, () => [], opts);\n}\nexport function injectSphere<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<SphereProps>,\n opts?: NgtcBodyOptions<TObject>\n) {\n return injectBody(\n 'Sphere',\n fn,\n (args: SphereArgs = [1]): SphereArgs => {\n if (!Array.isArray(args)) throw new Error('useSphere args must be an array');\n return [args[0]];\n },\n opts\n );\n}\nexport function injectTrimesh<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<TrimeshProps>,\n opts?: NgtcBodyOptions<TObject>\n) {\n return injectBody('Trimesh', fn, (args) => args, opts);\n}\n\nexport function injectConvexPolyhedron<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<ConvexPolyhedronProps>,\n opts?: NgtcBodyOptions<TObject>\n) {\n return injectBody(\n 'ConvexPolyhedron',\n fn,\n ([vertices, faces, normals, axes, boundingSphereRadius] = []): ConvexPolyhedronArgs<Triplet> => [\n vertices && vertices.map(makeTriplet),\n faces,\n normals && normals.map(makeTriplet),\n axes && axes.map(makeTriplet),\n boundingSphereRadius,\n ],\n opts\n );\n}\nexport function injectCompoundBody<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<CompoundBodyProps>,\n opts?: NgtcBodyOptions<TObject>\n) {\n return injectBody('Compound', fn, (args) => args as unknown[], opts);\n}\n\nfunction injectBody<TBodyProps extends BodyProps, TObject extends THREE.Object3D>(\n type: BodyShapeType,\n getPropsFn: NgtcGetByIndex<TBodyProps>,\n argsFn: NgtcArgFn<TBodyProps['args']>,\n { ref, injector, deps = () => ({}) }: NgtcBodyOptions<TObject> = {}\n): NgtcBodyReturn<TObject> {\n injector = assertInjectionContext(injectBody, injector);\n return runInInjectionContext(injector, () => {\n let bodyRef = injectNgtRef<TObject>();\n\n if (ref) bodyRef = ref;\n\n const physicsApi = inject(NGTC_PHYSICS_API);\n const debugApi = inject(NGTC_DEBUG_API, { optional: true });\n\n const { add: debugAdd, remove: debugRemove } = debugApi?.() || {};\n const { refs, worker, subscriptions, scaleOverrides, events, bodies } = physicsApi();\n\n requestAnimationFrameInInjectionContext(() => {\n effect(\n (onCleanup) => {\n // register deps\n deps();\n\n if (!bodyRef.nativeElement) {\n bodyRef.nativeElement = new THREE.Object3D() as TObject;\n return;\n }\n\n const object = bodyRef.nativeElement;\n const currentWorker = worker();\n\n const objectCount =\n object instanceof THREE.InstancedMesh\n ? (object.instanceMatrix.setUsage(THREE.DynamicDrawUsage), object.count)\n : 1;\n\n const uuid =\n object instanceof THREE.InstancedMesh\n ? new Array(objectCount).fill(0).map((_, i) => `${object.uuid}/${i}`)\n : [object.uuid];\n\n const props: (TBodyProps & { args: unknown })[] =\n object instanceof THREE.InstancedMesh\n ? uuid.map((id, i) => {\n const props = getPropsFn(i);\n prepare(temp, props);\n object.setMatrixAt(i, temp.matrix);\n object.instanceMatrix.needsUpdate = true;\n refs[id] = object;\n debugAdd?.(id, props, type);\n setupCollision(events, props, id);\n return { ...props, args: argsFn(props.args) };\n })\n : uuid.map((id, i) => {\n const props = getPropsFn(i);\n prepare(object, props);\n refs[id] = object;\n debugAdd?.(id, props, type);\n setupCollision(events, props, id);\n return { ...props, args: argsFn(props.args) };\n });\n\n // Register on mount, unregister on unmount\n currentWorker.addBodies({\n props: props.map(({ onCollide, onCollideBegin, onCollideEnd, ...serializableProps }) => {\n return { onCollide: Boolean(onCollide), ...serializableProps };\n }),\n type,\n uuid,\n });\n\n onCleanup(() => {\n uuid.forEach((id) => {\n delete refs[id];\n debugRemove?.(id);\n delete events[id];\n });\n currentWorker.removeBodies({ uuid });\n });\n },\n { allowSignalWrites: true }\n );\n });\n\n const api = computed(() => {\n const makeAtomic = <T extends AtomicName>(type: T, index?: number) => {\n const op: SetOpName<T> = `set${capitalize(type)}`;\n\n return {\n set: (value: PropValue<T>) => {\n const uuid = getUUID(bodyRef, index);\n uuid &&\n worker()[op]({\n props: value,\n uuid,\n } as never);\n },\n subscribe: subscribe(bodyRef, worker(), subscriptions, type, index),\n };\n };\n\n const makeQuaternion = (index?: number) => {\n const type = 'quaternion';\n return {\n copy: ({ w, x, y, z }: THREE.Quaternion) => {\n const uuid = getUUID(bodyRef, index);\n uuid && bodies[uuid] != null && worker().setQuaternion({ props: [x, y, z, w], uuid });\n },\n set: (x: number, y: number, z: number, w: number) => {\n const uuid = getUUID(bodyRef, index);\n uuid && bodies[uuid] != null && worker().setQuaternion({ props: [x, y, z, w], uuid });\n },\n subscribe: subscribe(bodyRef, worker(), subscriptions, type, index),\n };\n };\n\n const makeRotation = (index?: number) => {\n return {\n copy: ({ x, y, z }: THREE.Vector3 | THREE.Euler) => {\n const uuid = getUUID(bodyRef, index);\n uuid && bodies[uuid] != null && worker().setRotation({ props: [x, y, z], uuid });\n },\n set: (x: number, y: number, z: number) => {\n const uuid = getUUID(bodyRef, index);\n uuid && bodies[uuid] != null && worker().setRotation({ props: [x, y, z], uuid });\n },\n subscribe: (callback: (value: Triplet) => void) => {\n const id = incrementingId++;\n const target = 'bodies';\n const type = 'quaternion';\n const uuid = getUUID(bodyRef, index);\n\n subscriptions[id] = { [type]: quaternionToRotation(callback) };\n uuid && bodies[uuid] != null && worker().subscribe({ props: { id, target, type }, uuid });\n return () => {\n delete subscriptions[id];\n worker().unsubscribe({ props: id });\n };\n },\n };\n };\n\n const makeVec = (type: VectorName, index?: number) => {\n const op: SetOpName<VectorName> = `set${capitalize(type)}`;\n return {\n copy: ({ x, y, z }: THREE.Vector3 | THREE.Euler) => {\n const uuid = getUUID(bodyRef, index);\n uuid && bodies[uuid] != null && worker()[op]({ props: [x, y, z], uuid });\n },\n set: (x: number, y: number, z: number) => {\n const uuid = getUUID(bodyRef, index);\n uuid && bodies[uuid] != null && worker()[op]({ props: [x, y, z], uuid });\n },\n subscribe: subscribe(bodyRef, worker(), subscriptions, type, index),\n };\n };\n\n const makeRemove = (index?: number) => {\n const uuid = getUUID(bodyRef, index);\n return () => {\n if (uuid) worker().removeBodies({ uuid: [uuid] });\n };\n };\n\n function makeApi(index?: number): NgtcWorkerApi {\n return {\n allowSleep: makeAtomic('allowSleep', index),\n angularDamping: makeAtomic('angularDamping', index),\n angularFactor: makeVec('angularFactor', index),\n angularVelocity: makeVec('angularVelocity', index),\n applyForce(force: Triplet, worldPoint: Triplet) {\n const uuid = getUUID(bodyRef, index);\n uuid && bodies[uuid] != null && worker().applyForce({ props: [force, worldPoint], uuid });\n },\n applyImpulse(impulse: Triplet, worldPoint: Triplet) {\n const uuid = getUUID(bodyRef, index);\n uuid && bodies[uuid] != null && worker().applyImpulse({ props: [impulse, worldPoint], uuid });\n },\n applyLocalForce(force: Triplet, localPoint: Triplet) {\n const uuid = getUUID(bodyRef, index);\n uuid && bodies[uuid] != null && worker().applyLocalForce({ props: [force, localPoint], uuid });\n },\n applyLocalImpulse(impulse: Triplet, localPoint: Triplet) {\n const uuid = getUUID(bodyRef, index);\n uuid &&\n bodies[uuid] != null &&\n worker().applyLocalImpulse({ props: [impulse, localPoint], uuid });\n },\n applyTorque(torque: Triplet) {\n const uuid = getUUID(bodyRef, index);\n uuid && bodies[uuid] != null && worker().applyTorque({ props: [torque], uuid });\n },\n collisionFilterGroup: makeAtomic('collisionFilterGroup', index),\n collisionFilterMask: makeAtomic('collisionFilterMask', index),\n collisionResponse: makeAtomic('collisionResponse', index),\n fixedRotation: makeAtomic('fixedRotation', index),\n isTrigger: makeAtomic('isTrigger', index),\n linearDamping: makeAtomic('linearDamping', index),\n linearFactor: makeVec('linearFactor', index),\n mass: makeAtomic('mass', index),\n material: makeAtomic('material', index),\n position: makeVec('position', index),\n quaternion: makeQuaternion(index),\n rotation: makeRotation(index),\n scaleOverride(scale) {\n const uuid = getUUID(bodyRef, index);\n if (uuid) scaleOverrides[uuid] = new THREE.Vector3(...scale);\n },\n sleep() {\n const uuid = getUUID(bodyRef, index);\n uuid && bodies[uuid] != null && worker().sleep({ uuid });\n },\n sleepSpeedLimit: makeAtomic('sleepSpeedLimit', index),\n sleepTimeLimit: makeAtomic('sleepTimeLimit', index),\n userData: makeAtomic('userData', index),\n velocity: makeVec('velocity', index),\n remove: makeRemove(index),\n wakeUp() {\n const uuid = getUUID(bodyRef, index);\n uuid && bodies[uuid] != null && worker().wakeUp({ uuid });\n },\n };\n }\n\n const cache: { [index: number]: NgtcWorkerApi } = {};\n return {\n ...makeApi(undefined),\n at: (index: number) => cache[index] || (cache[index] = makeApi(index)),\n };\n });\n\n return { ref: bodyRef, api };\n });\n}\n","import { Injector, Signal, computed, effect, inject, runInInjectionContext, untracked } from '@angular/core';\nimport {\n ConstraintOptns,\n ConstraintTypes,\n HingeConstraintOpts,\n PointToPointConstraintOpts,\n} from '@pmndrs/cannon-worker-api';\nimport { NgtAnyRecord, NgtInjectedRef, assertInjectionContext, injectNgtRef, is, makeId } from 'angular-three';\nimport { NGTC_PHYSICS_API } from 'angular-three-cannon';\nimport * as THREE from 'three';\n\nexport interface NgtcConstraintApi {\n disable: () => void;\n enable: () => void;\n remove: () => void;\n}\n\nexport interface NgtcHingeConstraintApi extends NgtcConstraintApi {\n disableMotor: () => void;\n enableMotor: () => void;\n setMotorMaxForce: (value: number) => void;\n setMotorSpeed: (value: number) => void;\n}\n\nexport type NgtcConstraintORHingeApi<T extends 'Hinge' | ConstraintTypes> = T extends ConstraintTypes\n ? NgtcConstraintApi\n : NgtcHingeConstraintApi;\n\nexport interface NgtcConstraintReturn<\n T extends 'Hinge' | ConstraintTypes,\n TObjectA extends THREE.Object3D = THREE.Object3D,\n TObjectB extends THREE.Object3D = THREE.Object3D\n> {\n bodyA: NgtInjectedRef<TObjectA>;\n bodyB: NgtInjectedRef<TObjectB>;\n api: Signal<NgtcConstraintORHingeApi<T>>;\n}\n\nexport interface NgtcConstraintOptions<\n TConstraintType extends 'Hinge' | ConstraintTypes,\n TOptions extends HingeConstraintOpts | ConstraintOptns = TConstraintType extends 'Hinge'\n ? HingeConstraintOpts\n : ConstraintOptns\n> {\n injector?: Injector;\n deps?: () => NgtAnyRecord;\n opts?: () => TOptions;\n}\n\nexport function usePointToPointConstraint<A extends THREE.Object3D, B extends THREE.Object3D>(\n bodyA: NgtInjectedRef<A> | A,\n bodyB: NgtInjectedRef<B> | B,\n opts?: NgtcConstraintOptions<'PointToPoint', PointToPointConstraintOpts>\n) {\n return injectConstraint('PointToPoint', bodyA, bodyB, opts);\n}\nexport function useConeTwistConstraint<A extends THREE.Object3D, B extends THREE.Object3D>(\n bodyA: NgtInjectedRef<A> | A,\n bodyB: NgtInjectedRef<B> | B,\n opts?: NgtcConstraintOptions<'ConeTwist', PointToPointConstraintOpts>\n) {\n return injectConstraint('ConeTwist', bodyA, bodyB, opts);\n}\nexport function useDistanceConstraint<A extends THREE.Object3D, B extends THREE.Object3D>(\n bodyA: NgtInjectedRef<A> | A,\n bodyB: NgtInjectedRef<B> | B,\n opts?: NgtcConstraintOptions<'Distance', PointToPointConstraintOpts>\n) {\n return injectConstraint('Distance', bodyA, bodyB, opts);\n}\nexport function useHingeConstraint<A extends THREE.Object3D, B extends THREE.Object3D>(\n bodyA: NgtInjectedRef<A> | A,\n bodyB: NgtInjectedRef<B> | B,\n opts?: NgtcConstraintOptions<'Hinge', PointToPointConstraintOpts>\n) {\n return injectConstraint('Hinge', bodyA, bodyB, opts);\n}\nexport function useLockConstraint<A extends THREE.Object3D, B extends THREE.Object3D>(\n bodyA: NgtInjectedRef<A> | A,\n bodyB: NgtInjectedRef<B> | B,\n opts?: NgtcConstraintOptions<'Lock', PointToPointConstraintOpts>\n) {\n return injectConstraint('Lock', bodyA, bodyB, opts);\n}\n\nfunction injectConstraint<\n TConstraintType extends 'Hinge' | ConstraintTypes,\n A extends THREE.Object3D,\n B extends THREE.Object3D,\n TOptions extends HingeConstraintOpts | ConstraintOptns = TConstraintType extends 'Hinge'\n ? HingeConstraintOpts\n : ConstraintOptns\n>(\n type: TConstraintType,\n bodyA: NgtInjectedRef<A> | A,\n bodyB: NgtInjectedRef<B> | B,\n {\n injector,\n deps = () => ({}),\n opts = () => ({} as TOptions),\n }: NgtcConstraintOptions<TConstraintType, TOptions> = {}\n): NgtcConstraintReturn<TConstraintType, A, B> {\n injector = assertInjectionContext(injectConstraint, injector);\n return runInInjectionContext(injector, () => {\n const physicsApi = inject(NGTC_PHYSICS_API);\n const { worker } = physicsApi();\n\n const uuid = makeId();\n\n const bodyARef = is.ref(bodyA) ? bodyA : injectNgtRef(bodyA);\n const bodyBRef = is.ref(bodyB) ? bodyB : injectNgtRef(bodyB);\n\n effect((onCleanup) => {\n deps();\n if (bodyARef.nativeElement && bodyBRef.nativeElement) {\n worker().addConstraint({\n props: [bodyARef.untracked.uuid, bodyBRef.untracked.uuid, untracked(opts)],\n type,\n uuid,\n });\n onCleanup(() => worker().removeConstraint({ uuid }));\n }\n });\n\n const api = computed(() => {\n deps();\n const enableDisable = {\n disable: () => worker().disableConstraint({ uuid }),\n enable: () => worker().enableConstraint({ uuid }),\n remove: () => worker().removeConstraint({ uuid }),\n };\n\n if (type === 'Hinge') {\n return {\n ...enableDisable,\n disableMotor: () => worker().disableConstraintMotor({ uuid }),\n enableMotor: () => worker().enableConstraintMotor({ uuid }),\n setMotorMaxForce: (value: number) => worker().setConstraintMotorMaxForce({ props: value, uuid }),\n setMotorSpeed: (value: number) => worker().setConstraintMotorSpeed({ props: value, uuid }),\n } as NgtcConstraintORHingeApi<TConstraintType>;\n }\n\n return enableDisable as NgtcConstraintORHingeApi<TConstraintType>;\n });\n\n return { bodyA: bodyARef, bodyB: bodyBRef, api };\n });\n}\n","import { Injector, effect, inject, runInInjectionContext, untracked } from '@angular/core';\nimport { ContactMaterialOptions, MaterialOptions } from '@pmndrs/cannon-worker-api';\nimport { NgtAnyRecord, assertInjectionContext, makeId } from 'angular-three';\nimport { NGTC_PHYSICS_API } from 'angular-three-cannon';\n\nexport function injectContactMaterial(\n materialB: MaterialOptions,\n materialA: MaterialOptions,\n {\n opts,\n deps = () => ({}),\n injector,\n }: { opts: () => ContactMaterialOptions; deps?: () => NgtAnyRecord; injector?: Injector }\n): void {\n injector = assertInjectionContext(injectContactMaterial, injector);\n return runInInjectionContext(injector, () => {\n const physicsApi = inject(NGTC_PHYSICS_API);\n const { worker } = physicsApi();\n const uuid = makeId();\n effect((onCleanup) => {\n deps();\n worker().addContactMaterial({\n props: [materialA, materialB, untracked(opts)],\n uuid,\n });\n onCleanup(() => worker().removeContactMaterial({ uuid }));\n });\n });\n}\n","import { Injector, effect, inject, runInInjectionContext, untracked } from '@angular/core';\nimport { RayMode, RayOptions, RayhitEvent } from '@pmndrs/cannon-worker-api';\nimport { NgtAnyRecord, assertInjectionContext, makeId } from 'angular-three';\nimport { NGTC_PHYSICS_API } from 'angular-three-cannon';\n\nexport interface NgtcRayOptions {\n options: () => RayOptions;\n callback: (e: RayhitEvent) => void;\n injector?: Injector;\n deps?: () => NgtAnyRecord;\n}\n\nexport function injectRaycastClosest(opts: NgtcRayOptions) {\n return injectRay('Closest', opts);\n}\n\nexport function injectRaycastAny(opts: NgtcRayOptions) {\n return injectRay('Any', opts);\n}\n\nexport function useRaycastAll(opts: NgtcRayOptions) {\n return injectRay('All', opts);\n}\n\nfunction injectRay(mode: RayMode, { options, callback, deps = () => ({}), injector }: NgtcRayOptions) {\n injector = assertInjectionContext(injectRay, injector);\n return runInInjectionContext(injector, () => {\n const physicsApi = inject(NGTC_PHYSICS_API);\n const { worker, events } = physicsApi();\n const uuid = makeId();\n\n effect((onCleanup) => {\n deps();\n events[uuid] = { rayhit: callback };\n worker().addRay({ props: { ...untracked(options), mode }, uuid });\n onCleanup(() => {\n worker().removeRay({ uuid });\n delete events[uuid];\n });\n });\n });\n}\n","import { Injector, Signal, computed, effect, inject, runInInjectionContext, untracked } from '@angular/core';\nimport { WheelInfoOptions } from '@pmndrs/cannon-worker-api';\nimport { NgtAnyRecord, NgtInjectedRef, assertInjectionContext, injectNgtRef } from 'angular-three';\nimport { NGTC_PHYSICS_API } from 'angular-three-cannon';\nimport * as THREE from 'three';\nimport { getUUID, subscribe } from './body';\n\nfunction isString(v: unknown): v is string {\n return typeof v === 'string';\n}\n\nexport interface NgtcRaycastVehicleProps {\n chassisBody: NgtInjectedRef<THREE.Object3D>;\n wheelInfos: WheelInfoOptions[];\n wheels: Array<NgtInjectedRef<THREE.Object3D>>;\n indexForwardAxis?: number;\n indexRightAxis?: number;\n indexUpAxis?: number;\n}\n\nexport interface NgtcRaycastVehiclePublicApi {\n applyEngineForce: (value: number, wheelIndex: number) => void;\n setBrake: (brake: number, wheelIndex: number) => void;\n setSteeringValue: (value: number, wheelIndex: number) => void;\n sliding: { subscribe: (callback: (sliding: boolean) => void) => void };\n remove: () => void;\n}\n\nexport interface NgtcRaycastVehicleReturn<TObject extends THREE.Object3D = THREE.Object3D> {\n ref: NgtInjectedRef<TObject>;\n api: Signal<NgtcRaycastVehiclePublicApi>;\n}\n\nexport function injectRaycastVehicle<TObject extends THREE.Object3D = THREE.Object3D>(\n fn: () => NgtcRaycastVehicleProps,\n {\n ref,\n injector,\n deps = () => ({}),\n }: { ref?: NgtInjectedRef<TObject>; injector?: Injector; deps?: () => NgtAnyRecord } = {}\n): NgtcRaycastVehicleReturn<TObject> {\n injector = assertInjectionContext(injectRaycastVehicle, injector);\n return runInInjectionContext(injector, () => {\n const physicsApi = inject(NGTC_PHYSICS_API);\n const { worker, subscriptions } = physicsApi();\n\n let instanceRef = injectNgtRef<TObject>();\n if (ref) instanceRef = ref;\n\n effect(\n (onCleanup) => {\n deps();\n if (!instanceRef.untracked) {\n instanceRef.nativeElement = new THREE.Object3D() as TObject;\n }\n\n const currentWorker = worker();\n const uuid: string = instanceRef.nativeElement.uuid;\n const {\n chassisBody,\n indexForwardAxis = 2,\n indexRightAxis = 0,\n indexUpAxis = 1,\n wheelInfos,\n wheels,\n } = untracked(fn);\n\n const chassisBodyUUID = getUUID(chassisBody);\n const wheelUUIDs = wheels.map((ref) => getUUID(ref));\n\n if (!chassisBodyUUID || !wheelUUIDs.every(isString)) return;\n\n currentWorker.addRaycastVehicle({\n props: [chassisBodyUUID, wheelUUIDs, wheelInfos, indexForwardAxis, indexRightAxis, indexUpAxis],\n uuid,\n });\n onCleanup(() => {\n currentWorker.removeRaycastVehicle({ uuid });\n });\n },\n { allowSignalWrites: true }\n );\n\n const api = computed<NgtcRaycastVehiclePublicApi>(() => {\n deps();\n return {\n applyEngineForce(value: number, wheelIndex: number) {\n const uuid = getUUID(instanceRef);\n uuid &&\n worker().applyRaycastVehicleEngineForce({\n props: [value, wheelIndex],\n uuid,\n });\n },\n setBrake(brake: number, wheelIndex: number) {\n const uuid = getUUID(instanceRef);\n uuid && worker().setRaycastVehicleBrake({ props: [brake, wheelIndex], uuid });\n },\n setSteeringValue(value: number, wheelIndex: number) {\n const uuid = getUUID(instanceRef);\n uuid &&\n worker().setRaycastVehicleSteeringValue({\n props: [value, wheelIndex],\n uuid,\n });\n },\n sliding: {\n subscribe: subscribe(instanceRef, worker(), subscriptions, 'sliding', undefined, 'vehicles'),\n },\n\n remove: () => {\n const uuid = getUUID(instanceRef);\n uuid && worker().removeRaycastVehicle({ uuid });\n },\n };\n });\n\n return { ref: instanceRef, api };\n });\n}\n","import { Injector, Signal, computed, effect, inject, runInInjectionContext, untracked } from '@angular/core';\nimport { SpringOptns } from '@pmndrs/cannon-worker-api';\nimport { NgtAnyRecord, NgtInjectedRef, assertInjectionContext, injectNgtRef, is, makeId } from 'angular-three';\nimport { NGTC_PHYSICS_API } from 'angular-three-cannon';\n\nexport interface NgtcSpringApi {\n setDamping: (value: number) => void;\n setRestLength: (value: number) => void;\n setStiffness: (value: number) => void;\n remove: () => void;\n}\n\nexport interface NgtcSpringReturn<\n TObjectA extends THREE.Object3D = THREE.Object3D,\n TObjectB extends THREE.Object3D = THREE.Object3D\n> {\n bodyA: NgtInjectedRef<TObjectA>;\n bodyB: NgtInjectedRef<TObjectB>;\n api: Signal<NgtcSpringApi>;\n}\n\nexport function injectSpring<A extends THREE.Object3D, B extends THREE.Object3D>(\n bodyA: NgtInjectedRef<A> | A,\n bodyB: NgtInjectedRef<B> | B,\n {\n injector,\n opts = () => ({}),\n deps = () => ({}),\n }: { injector?: Injector; deps?: () => NgtAnyRecord; opts?: () => SpringOptns } = {}\n): NgtcSpringReturn<A, B> {\n injector = assertInjectionContext(injectSpring, injector);\n return runInInjectionContext(injector, () => {\n const physicsApi = inject(NGTC_PHYSICS_API);\n const { worker } = physicsApi();\n\n const uuid = makeId();\n\n const bodyARef = is.ref(bodyA) ? bodyA : injectNgtRef(bodyA);\n const bodyBRef = is.ref(bodyB) ? bodyB : injectNgtRef(bodyB);\n\n effect((onCleanup) => {\n deps();\n if (bodyARef.nativeElement && bodyBRef.nativeElement) {\n worker().addSpring({\n props: [bodyARef.nativeElement.uuid, bodyBRef.nativeElement.uuid, untracked(opts)],\n uuid,\n });\n onCleanup(() => worker().removeSpring({ uuid }));\n }\n });\n\n const api = computed(() => {\n deps();\n return {\n setDamping: (value: number) => worker().setSpringDamping({ props: value, uuid }),\n setRestLength: (value: number) => worker().setSpringRestLength({ props: value, uuid }),\n setStiffness: (value: number) => worker().setSpringStiffness({ props: value, uuid }),\n remove: () => worker().removeSpring({ uuid }),\n };\n });\n\n return { bodyA: bodyARef, bodyB: bodyBRef, api };\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { InjectionToken, inject, computed, effect, untracked, Component, Input } from '@angular/core';
|
|
3
3
|
import { CannonWorkerAPI } from '@pmndrs/cannon-worker-api';
|
|
4
|
-
import { NgtSignalStore, NgtStore,
|
|
4
|
+
import { NgtSignalStore, NgtStore, requestAnimationFrameInInjectionContext, injectBeforeRender } from 'angular-three';
|
|
5
5
|
import * as THREE from 'three';
|
|
6
6
|
|
|
7
7
|
const v = new THREE.Vector3();
|
|
@@ -138,7 +138,7 @@ class NgtcPhysics extends NgtSignalStore {
|
|
|
138
138
|
subscriptions: this.#subscriptions,
|
|
139
139
|
worker: this.worker,
|
|
140
140
|
}));
|
|
141
|
-
|
|
141
|
+
requestAnimationFrameInInjectionContext(() => {
|
|
142
142
|
this.#connectWorker();
|
|
143
143
|
this.#updateWorkerProp('axisIndex');
|
|
144
144
|
this.#updateWorkerProp('broadphase');
|
|
@@ -247,10 +247,10 @@ class NgtcPhysics extends NgtSignalStore {
|
|
|
247
247
|
if (cb)
|
|
248
248
|
cb({ body: body ? this.#refs[body] : null, ray: { uuid, ...rayRest }, ...rest });
|
|
249
249
|
}
|
|
250
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.
|
|
251
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.
|
|
250
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: NgtcPhysics, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
251
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.3", type: NgtcPhysics, isStandalone: true, selector: "ngtc-physics", inputs: { isPaused: "isPaused", maxSubSteps: "maxSubSteps", shouldInvalidate: "shouldInvalidate", stepSize: "stepSize", size: "size", allowSleep: "allowSleep", axisIndex: "axisIndex", broadphase: "broadphase", defaultContactMaterial: "defaultContactMaterial", frictionGravity: "frictionGravity", gravity: "gravity", iterations: "iterations", quatNormalizeFast: "quatNormalizeFast", quatNormalizeSkip: "quatNormalizeSkip", solver: "solver", tolerance: "tolerance" }, providers: [{ provide: NGTC_PHYSICS_API, useFactory: (physics) => physics.api, deps: [NgtcPhysics] }], usesInheritance: true, ngImport: i0, template: `<ng-content />`, isInline: true }); }
|
|
252
252
|
}
|
|
253
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.
|
|
253
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: NgtcPhysics, decorators: [{
|
|
254
254
|
type: Component,
|
|
255
255
|
args: [{
|
|
256
256
|
selector: 'ngtc-physics',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"angular-three-cannon.mjs","sources":["../../../../libs/cannon/src/physics.ts","../../../../libs/cannon/src/angular-three-cannon.ts"],"sourcesContent":["import { Component, InjectionToken, Input, computed, effect, inject, untracked, type Signal } from '@angular/core';\nimport {\n CannonWorkerAPI,\n type Broadphase,\n type CannonWorkerProps,\n type CollideBeginEvent,\n type CollideEndEvent,\n type CollideEvent,\n type ContactMaterialOptions,\n type RayhitEvent,\n type Refs,\n type Solver,\n type Subscriptions,\n type Triplet,\n type WorkerCollideBeginEvent,\n type WorkerCollideEndEvent,\n type WorkerCollideEvent,\n type WorkerFrameMessage,\n type WorkerRayhitEvent,\n} from '@pmndrs/cannon-worker-api';\nimport {\n NgtSignalStore,\n NgtStore,\n injectBeforeRender,\n requestAnimationInInjectionContext,\n type NgtRenderState,\n} from 'angular-three';\nimport * as THREE from 'three';\n\nconst v = new THREE.Vector3();\nconst s = new THREE.Vector3(1, 1, 1);\nconst q = new THREE.Quaternion();\nconst m = new THREE.Matrix4();\n\nfunction apply(index: number, positions: Float32Array, quaternions: Float32Array, scale = s, object?: THREE.Object3D) {\n if (index !== undefined) {\n m.compose(v.fromArray(positions, index * 3), q.fromArray(quaternions, index * 4), scale);\n if (object) {\n object.matrixAutoUpdate = false;\n object.matrix.copy(m);\n }\n return m;\n }\n return m.identity();\n}\n\nexport type NgtcPhysicsState = CannonWorkerProps & {\n isPaused?: boolean;\n maxSubSteps?: number;\n shouldInvalidate?: boolean;\n stepSize?: number;\n};\n\ntype NgtcCannonEvent = CollideBeginEvent | CollideEndEvent | CollideEvent | RayhitEvent;\ntype NgtcCallbackByType<T extends { type: string }> = {\n [K in T['type']]?: T extends { type: K } ? (e: T) => void : never;\n};\n\nexport type NgtcCannonEvents = { [uuid: string]: Partial<NgtcCallbackByType<NgtcCannonEvent>> };\n\nexport type ScaleOverrides = { [uuid: string]: THREE.Vector3 };\n\nexport interface NgtcPhysicsApi {\n bodies: { [uuid: string]: number };\n events: NgtcCannonEvents;\n refs: Refs;\n scaleOverrides: ScaleOverrides;\n subscriptions: Subscriptions;\n worker: Signal<CannonWorkerAPI>;\n}\n\nexport const NGTC_PHYSICS_API = new InjectionToken<Signal<NgtcPhysicsApi>>('NgtcPhysics API');\n\n@Component({\n selector: 'ngtc-physics',\n standalone: true,\n template: `<ng-content />`,\n providers: [{ provide: NGTC_PHYSICS_API, useFactory: (physics: NgtcPhysics) => physics.api, deps: [NgtcPhysics] }],\n})\nexport class NgtcPhysics extends NgtSignalStore<NgtcPhysicsState> {\n @Input() set isPaused(isPaused: boolean) {\n this.set({ isPaused });\n }\n\n @Input() set maxSubSteps(maxSubSteps: number) {\n this.set({ maxSubSteps });\n }\n\n @Input() set shouldInvalidate(shouldInvalidate: boolean) {\n this.set({ shouldInvalidate });\n }\n\n @Input() set stepSize(stepSize: number) {\n this.set({ stepSize });\n }\n\n @Input() set size(size: number) {\n this.set({ size });\n }\n\n @Input() set allowSleep(allowSleep: boolean) {\n this.set({ allowSleep });\n }\n\n @Input() set axisIndex(axisIndex: 0 | 1 | 2) {\n this.set({ axisIndex });\n }\n\n @Input() set broadphase(broadphase: Broadphase) {\n this.set({ broadphase });\n }\n\n @Input() set defaultContactMaterial(defaultContactMaterial: ContactMaterialOptions) {\n this.set({ defaultContactMaterial });\n }\n\n @Input() set frictionGravity(frictionGravity: Triplet | null) {\n this.set({ frictionGravity });\n }\n\n @Input() set gravity(gravity: Triplet) {\n this.set({ gravity });\n }\n\n @Input() set iterations(iterations: number) {\n this.set({ iterations });\n }\n\n @Input() set quatNormalizeFast(quatNormalizeFast: boolean) {\n this.set({ quatNormalizeFast });\n }\n\n @Input() set quatNormalizeSkip(quatNormalizeSkip: number) {\n this.set({ quatNormalizeSkip });\n }\n\n @Input() set solver(solver: Solver) {\n this.set({ solver });\n }\n\n @Input() set tolerance(tolerance: number) {\n this.set({ tolerance });\n }\n\n readonly #store = inject(NgtStore);\n\n readonly #bodies: { [uuid: string]: number } = {};\n readonly #events: NgtcCannonEvents = {};\n readonly #refs: Refs = {};\n readonly #scaleOverrides: ScaleOverrides = {};\n readonly #subscriptions: Subscriptions = {};\n\n readonly #allowSleep = this.select('allowSleep');\n readonly #defaultContactMaterial = this.select('defaultContactMaterial');\n readonly #frictionGravity = this.select('frictionGravity');\n readonly #quatNormalizeFast = this.select('quatNormalizeFast');\n readonly #quatNormalizeSkip = this.select('quatNormalizeSkip');\n readonly #size = this.select('size');\n readonly #solver = this.select('solver');\n\n readonly #workerProps = computed(() => ({\n allowSleep: this.#allowSleep(),\n axisIndex: this.get('axisIndex'),\n broadphase: this.get('broadphase'),\n defaultContactMaterial: this.#defaultContactMaterial(),\n frictionGravity: this.#frictionGravity(),\n gravity: this.get('gravity'),\n iterations: this.get('iterations'),\n quatNormalizeFast: this.#quatNormalizeFast(),\n quatNormalizeSkip: this.#quatNormalizeSkip(),\n size: this.#size(),\n solver: this.#solver(),\n tolerance: this.get('tolerance'),\n }));\n\n readonly worker = computed(() => new CannonWorkerAPI(this.#workerProps()));\n\n readonly api = computed(() => ({\n bodies: this.#bodies,\n events: this.#events,\n refs: this.#refs,\n scaleOverrides: this.#scaleOverrides,\n subscriptions: this.#subscriptions,\n worker: this.worker,\n }));\n\n constructor() {\n super({\n allowSleep: false,\n axisIndex: 0,\n broadphase: 'Naive',\n defaultContactMaterial: { contactEquationStiffness: 1e6 },\n frictionGravity: null,\n gravity: [0, -9.81, 0],\n isPaused: false,\n iterations: 5,\n maxSubSteps: 10,\n quatNormalizeFast: false,\n quatNormalizeSkip: 0,\n shouldInvalidate: true,\n size: 1000,\n solver: 'GS',\n stepSize: 1 / 60,\n tolerance: 0.001,\n });\n requestAnimationInInjectionContext(() => {\n this.#connectWorker();\n this.#updateWorkerProp('axisIndex');\n this.#updateWorkerProp('broadphase');\n this.#updateWorkerProp('gravity');\n this.#updateWorkerProp('iterations');\n this.#updateWorkerProp('tolerance');\n injectBeforeRender(this.#onBeforeRender.bind(this, 0));\n });\n }\n\n #updateWorkerProp(key: keyof NgtcPhysicsState) {\n const compute = this.select(key);\n effect(() => {\n const worker = untracked(this.worker);\n const value = compute();\n // @ts-expect-error\n worker[key] = value;\n });\n }\n\n #connectWorker() {\n effect((onCleanup) => {\n const worker = this.worker();\n\n worker.connect();\n worker.init();\n\n (worker as any).on('collide', this.#collideHandler.bind(this));\n (worker as any).on('collideBegin', this.#collideBeginHandler.bind(this));\n (worker as any).on('collideEnd', this.#collideEndHandler.bind(this));\n (worker as any).on('frame', this.#frameHandler.bind(this));\n (worker as any).on('rayhit', this.#rayhitHandler.bind(this));\n\n onCleanup(() => {\n worker.terminate();\n (worker as any).removeAllListeners();\n });\n });\n }\n\n #onBeforeRender(timeSinceLastCalled: number, { delta }: NgtRenderState) {\n const { isPaused, maxSubSteps, stepSize } = this.get();\n const worker = this.worker();\n if (isPaused) return;\n timeSinceLastCalled += delta;\n worker.step({ maxSubSteps, stepSize: stepSize!, timeSinceLastCalled });\n timeSinceLastCalled = 0;\n }\n\n #collideHandler({ body, contact: { bi, bj, ...contactRest }, target, ...rest }: WorkerCollideEvent['data']) {\n const cb = this.#events[target]?.collide;\n\n if (cb) {\n cb({\n body: this.#refs[body],\n contact: { bi: this.#refs[bi], bj: this.#refs[bj], ...contactRest },\n target: this.#refs[target],\n ...rest,\n });\n }\n }\n\n #collideBeginHandler({ bodyA, bodyB }: WorkerCollideBeginEvent['data']) {\n const cbA = this.#events[bodyA]?.collideBegin;\n if (cbA) cbA({ body: this.#refs[bodyB], op: 'event', target: this.#refs[bodyA], type: 'collideBegin' });\n const cbB = this.#events[bodyB]?.collideBegin;\n if (cbB) cbB({ body: this.#refs[bodyA], op: 'event', target: this.#refs[bodyB], type: 'collideBegin' });\n }\n\n #collideEndHandler({ bodyA, bodyB }: WorkerCollideEndEvent['data']) {\n const cbA = this.#events[bodyA]?.collideEnd;\n if (cbA) cbA({ body: this.#refs[bodyB], op: 'event', target: this.#refs[bodyA], type: 'collideEnd' });\n const cbB = this.#events[bodyB]?.collideEnd;\n if (cbB) cbB({ body: this.#refs[bodyA], op: 'event', target: this.#refs[bodyB], type: 'collideEnd' });\n }\n\n #frameHandler({ active, bodies: uuids = [], observations, positions, quaternions }: WorkerFrameMessage['data']) {\n const invalidate = this.#store.get('invalidate');\n const shouldInvalidate = this.get('shouldInvalidate');\n\n for (let i = 0; i < uuids.length; i++) {\n this.#bodies[uuids[i]] = i;\n }\n\n observations.forEach(([id, value, type]) => {\n const subscription = this.#subscriptions[id] || {};\n const cb = subscription[type];\n // HELP: We clearly know the type of the callback, but typescript can't deal with it\n cb && cb(value as never);\n });\n\n if (active) {\n for (const ref of Object.values(this.#refs)) {\n if (ref instanceof THREE.InstancedMesh) {\n for (let i = 0; i < ref.count; i++) {\n const uuid = `${ref.uuid}/${i}`;\n const index = this.#bodies[uuid];\n if (index !== undefined) {\n ref.setMatrixAt(i, apply(index, positions, quaternions, this.#scaleOverrides[uuid]));\n ref.instanceMatrix.needsUpdate = true;\n }\n }\n } else {\n const scale = this.#scaleOverrides[ref.uuid] || ref.scale;\n apply(this.#bodies[ref.uuid], positions, quaternions, scale, ref);\n }\n }\n if (shouldInvalidate) invalidate();\n }\n }\n\n #rayhitHandler({ body, ray: { uuid, ...rayRest }, ...rest }: WorkerRayhitEvent['data']) {\n const cb = this.#events[uuid]?.rayhit;\n if (cb) cb({ body: body ? this.#refs[body] : null, ray: { uuid, ...rayRest }, ...rest });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;AA6BA,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;AAC9B,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACrC,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;AACjC,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;AAE9B,SAAS,KAAK,CAAC,KAAa,EAAE,SAAuB,EAAE,WAAyB,EAAE,KAAK,GAAG,CAAC,EAAE,MAAuB,EAAA;IAChH,IAAI,KAAK,KAAK,SAAS,EAAE;QACrB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACzF,QAAA,IAAI,MAAM,EAAE;AACR,YAAA,MAAM,CAAC,gBAAgB,GAAG,KAAK,CAAC;AAChC,YAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACzB,SAAA;AACD,QAAA,OAAO,CAAC,CAAC;AACZ,KAAA;AACD,IAAA,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC;MA2BY,gBAAgB,GAAG,IAAI,cAAc,CAAyB,iBAAiB,EAAE;AAE9F,MAMa,WAAY,SAAQ,cAAgC,CAAA;IAC7D,IAAa,QAAQ,CAAC,QAAiB,EAAA;AACnC,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;KAC1B;IAED,IAAa,WAAW,CAAC,WAAmB,EAAA;AACxC,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;KAC7B;IAED,IAAa,gBAAgB,CAAC,gBAAyB,EAAA;AACnD,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC;KAClC;IAED,IAAa,QAAQ,CAAC,QAAgB,EAAA;AAClC,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;KAC1B;IAED,IAAa,IAAI,CAAC,IAAY,EAAA;AAC1B,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;KACtB;IAED,IAAa,UAAU,CAAC,UAAmB,EAAA;AACvC,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;KAC5B;IAED,IAAa,SAAS,CAAC,SAAoB,EAAA;AACvC,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;KAC3B;IAED,IAAa,UAAU,CAAC,UAAsB,EAAA;AAC1C,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;KAC5B;IAED,IAAa,sBAAsB,CAAC,sBAA8C,EAAA;AAC9E,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE,sBAAsB,EAAE,CAAC,CAAC;KACxC;IAED,IAAa,eAAe,CAAC,eAA+B,EAAA;AACxD,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC;KACjC;IAED,IAAa,OAAO,CAAC,OAAgB,EAAA;AACjC,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;KACzB;IAED,IAAa,UAAU,CAAC,UAAkB,EAAA;AACtC,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;KAC5B;IAED,IAAa,iBAAiB,CAAC,iBAA0B,EAAA;AACrD,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC;KACnC;IAED,IAAa,iBAAiB,CAAC,iBAAyB,EAAA;AACpD,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC;KACnC;IAED,IAAa,MAAM,CAAC,MAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;KACxB;IAED,IAAa,SAAS,CAAC,SAAiB,EAAA;AACpC,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;KAC3B;AAEQ,IAAA,MAAM,CAAoB;AAE1B,IAAA,OAAO,CAAkC;AACzC,IAAA,OAAO,CAAwB;AAC/B,IAAA,KAAK,CAAY;AACjB,IAAA,eAAe,CAAsB;AACrC,IAAA,cAAc,CAAqB;AAEnC,IAAA,WAAW,CAA6B;AACxC,IAAA,uBAAuB,CAAyC;AAChE,IAAA,gBAAgB,CAAkC;AAClD,IAAA,kBAAkB,CAAoC;AACtD,IAAA,kBAAkB,CAAoC;AACtD,IAAA,KAAK,CAAuB;AAC5B,IAAA,OAAO,CAAyB;AAEhC,IAAA,YAAY,CAajB;AAaJ,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,CAAC;AACF,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,SAAS,EAAE,CAAC;AACZ,YAAA,UAAU,EAAE,OAAO;AACnB,YAAA,sBAAsB,EAAE,EAAE,wBAAwB,EAAE,GAAG,EAAE;AACzD,YAAA,eAAe,EAAE,IAAI;YACrB,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AACtB,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,UAAU,EAAE,CAAC;AACb,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,iBAAiB,EAAE,KAAK;AACxB,YAAA,iBAAiB,EAAE,CAAC;AACpB,YAAA,gBAAgB,EAAE,IAAI;AACtB,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,CAAC,GAAG,EAAE;AAChB,YAAA,SAAS,EAAE,KAAK;AACnB,SAAA,CAAC,CAAC;AA5DE,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QAE1B,IAAO,CAAA,OAAA,GAA+B,EAAE,CAAC;QACzC,IAAO,CAAA,OAAA,GAAqB,EAAE,CAAC;QAC/B,IAAK,CAAA,KAAA,GAAS,EAAE,CAAC;QACjB,IAAe,CAAA,eAAA,GAAmB,EAAE,CAAC;QACrC,IAAc,CAAA,cAAA,GAAkB,EAAE,CAAC;AAEnC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AACxC,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;AAChE,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAClD,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;AACtD,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;AACtD,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC5B,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAEhC,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,OAAO;AACpC,YAAA,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE;AAC9B,YAAA,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;AAChC,YAAA,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;AAClC,YAAA,sBAAsB,EAAE,IAAI,CAAC,uBAAuB,EAAE;AACtD,YAAA,eAAe,EAAE,IAAI,CAAC,gBAAgB,EAAE;AACxC,YAAA,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;AAC5B,YAAA,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;AAClC,YAAA,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,EAAE;AAC5C,YAAA,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,EAAE;AAC5C,YAAA,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE;AAClB,YAAA,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE;AACtB,YAAA,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;AACnC,SAAA,CAAC,CAAC,CAAC;AAEK,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,eAAe,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;AAElE,QAAA,IAAA,CAAA,GAAG,GAAG,QAAQ,CAAC,OAAO;YAC3B,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,cAAc,EAAE,IAAI,CAAC,eAAe;YACpC,aAAa,EAAE,IAAI,CAAC,cAAc;YAClC,MAAM,EAAE,IAAI,CAAC,MAAM;AACtB,SAAA,CAAC,CAAC,CAAC;QAqBA,kCAAkC,CAAC,MAAK;YACpC,IAAI,CAAC,cAAc,EAAE,CAAC;AACtB,YAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;AACpC,YAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;AACrC,YAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;AAClC,YAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;AACrC,YAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;AACpC,YAAA,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3D,SAAC,CAAC,CAAC;KACN;AAED,IAAA,iBAAiB,CAAC,GAA2B,EAAA;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,CAAC,MAAK;YACR,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACtC,YAAA,MAAM,KAAK,GAAG,OAAO,EAAE,CAAC;;AAExB,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACxB,SAAC,CAAC,CAAC;KACN;IAED,cAAc,GAAA;AACV,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACjB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAE7B,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,EAAE,CAAC;AAEb,YAAA,MAAc,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9D,YAAA,MAAc,CAAC,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACxE,YAAA,MAAc,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACpE,YAAA,MAAc,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1D,YAAA,MAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAE7D,SAAS,CAAC,MAAK;gBACX,MAAM,CAAC,SAAS,EAAE,CAAC;gBAClB,MAAc,CAAC,kBAAkB,EAAE,CAAC;AACzC,aAAC,CAAC,CAAC;AACP,SAAC,CAAC,CAAC;KACN;AAED,IAAA,eAAe,CAAC,mBAA2B,EAAE,EAAE,KAAK,EAAkB,EAAA;AAClE,QAAA,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AACvD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AAC7B,QAAA,IAAI,QAAQ;YAAE,OAAO;QACrB,mBAAmB,IAAI,KAAK,CAAC;AAC7B,QAAA,MAAM,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAS,EAAE,mBAAmB,EAAE,CAAC,CAAC;QACvE,mBAAmB,GAAG,CAAC,CAAC;KAC3B;AAED,IAAA,eAAe,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,WAAW,EAAE,EAAE,MAAM,EAAE,GAAG,IAAI,EAA8B,EAAA;QACtG,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;AAEzC,QAAA,IAAI,EAAE,EAAE;AACJ,YAAA,EAAE,CAAC;AACC,gBAAA,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;gBACtB,OAAO,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,GAAG,WAAW,EAAE;AACnE,gBAAA,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AAC1B,gBAAA,GAAG,IAAI;AACV,aAAA,CAAC,CAAC;AACN,SAAA;KACJ;AAED,IAAA,oBAAoB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAmC,EAAA;QAClE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC;AAC9C,QAAA,IAAI,GAAG;AAAE,YAAA,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QACxG,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC;AAC9C,QAAA,IAAI,GAAG;AAAE,YAAA,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;KAC3G;AAED,IAAA,kBAAkB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAiC,EAAA;QAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;AAC5C,QAAA,IAAI,GAAG;AAAE,YAAA,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;QACtG,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;AAC5C,QAAA,IAAI,GAAG;AAAE,YAAA,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;KACzG;AAED,IAAA,aAAa,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,GAAG,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAA8B,EAAA;QAC1G,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACjD,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;AAEtD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACnC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC9B,SAAA;AAED,QAAA,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAI;YACvC,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;AACnD,YAAA,MAAM,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;;AAE9B,YAAA,EAAE,IAAI,EAAE,CAAC,KAAc,CAAC,CAAC;AAC7B,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,MAAM,EAAE;YACR,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AACzC,gBAAA,IAAI,GAAG,YAAY,KAAK,CAAC,aAAa,EAAE;AACpC,oBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;wBAChC,MAAM,IAAI,GAAG,CAAG,EAAA,GAAG,CAAC,IAAI,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,CAAC;wBAChC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;wBACjC,IAAI,KAAK,KAAK,SAAS,EAAE;4BACrB,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACrF,4BAAA,GAAG,CAAC,cAAc,CAAC,WAAW,GAAG,IAAI,CAAC;AACzC,yBAAA;AACJ,qBAAA;AACJ,iBAAA;AAAM,qBAAA;AACH,oBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC;AAC1D,oBAAA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;AACrE,iBAAA;AACJ,aAAA;AACD,YAAA,IAAI,gBAAgB;AAAE,gBAAA,UAAU,EAAE,CAAC;AACtC,SAAA;KACJ;AAED,IAAA,cAAc,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,EAAE,GAAG,IAAI,EAA6B,EAAA;QAClF,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;AACtC,QAAA,IAAI,EAAE;AAAE,YAAA,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;KAC5F;8GAjPQ,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAX,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,MAAA,EAAA,UAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,SAAA,EAFT,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,CAAC,OAAoB,KAAK,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EADxG,CAAgB,cAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;2FAGjB,WAAW,EAAA,UAAA,EAAA,CAAA;kBANvB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,CAAgB,cAAA,CAAA;oBAC1B,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,CAAC,OAAoB,KAAK,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,CAAa,WAAA,CAAA,EAAE,CAAC;AACrH,iBAAA,CAAA;0EAEgB,QAAQ,EAAA,CAAA;sBAApB,KAAK;gBAIO,WAAW,EAAA,CAAA;sBAAvB,KAAK;gBAIO,gBAAgB,EAAA,CAAA;sBAA5B,KAAK;gBAIO,QAAQ,EAAA,CAAA;sBAApB,KAAK;gBAIO,IAAI,EAAA,CAAA;sBAAhB,KAAK;gBAIO,UAAU,EAAA,CAAA;sBAAtB,KAAK;gBAIO,SAAS,EAAA,CAAA;sBAArB,KAAK;gBAIO,UAAU,EAAA,CAAA;sBAAtB,KAAK;gBAIO,sBAAsB,EAAA,CAAA;sBAAlC,KAAK;gBAIO,eAAe,EAAA,CAAA;sBAA3B,KAAK;gBAIO,OAAO,EAAA,CAAA;sBAAnB,KAAK;gBAIO,UAAU,EAAA,CAAA;sBAAtB,KAAK;gBAIO,iBAAiB,EAAA,CAAA;sBAA7B,KAAK;gBAIO,iBAAiB,EAAA,CAAA;sBAA7B,KAAK;gBAIO,MAAM,EAAA,CAAA;sBAAlB,KAAK;gBAIO,SAAS,EAAA,CAAA;sBAArB,KAAK;;;AC5IV;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"angular-three-cannon.mjs","sources":["../../../../libs/cannon/src/physics.ts","../../../../libs/cannon/src/angular-three-cannon.ts"],"sourcesContent":["import { Component, InjectionToken, Input, computed, effect, inject, untracked, type Signal } from '@angular/core';\nimport {\n CannonWorkerAPI,\n type Broadphase,\n type CannonWorkerProps,\n type CollideBeginEvent,\n type CollideEndEvent,\n type CollideEvent,\n type ContactMaterialOptions,\n type RayhitEvent,\n type Refs,\n type Solver,\n type Subscriptions,\n type Triplet,\n type WorkerCollideBeginEvent,\n type WorkerCollideEndEvent,\n type WorkerCollideEvent,\n type WorkerFrameMessage,\n type WorkerRayhitEvent,\n} from '@pmndrs/cannon-worker-api';\nimport {\n NgtSignalStore,\n NgtStore,\n injectBeforeRender,\n requestAnimationFrameInInjectionContext,\n type NgtRenderState,\n} from 'angular-three';\nimport * as THREE from 'three';\n\nconst v = new THREE.Vector3();\nconst s = new THREE.Vector3(1, 1, 1);\nconst q = new THREE.Quaternion();\nconst m = new THREE.Matrix4();\n\nfunction apply(index: number, positions: Float32Array, quaternions: Float32Array, scale = s, object?: THREE.Object3D) {\n if (index !== undefined) {\n m.compose(v.fromArray(positions, index * 3), q.fromArray(quaternions, index * 4), scale);\n if (object) {\n object.matrixAutoUpdate = false;\n object.matrix.copy(m);\n }\n return m;\n }\n return m.identity();\n}\n\nexport type NgtcPhysicsState = CannonWorkerProps & {\n isPaused?: boolean;\n maxSubSteps?: number;\n shouldInvalidate?: boolean;\n stepSize?: number;\n};\n\ntype NgtcCannonEvent = CollideBeginEvent | CollideEndEvent | CollideEvent | RayhitEvent;\ntype NgtcCallbackByType<T extends { type: string }> = {\n [K in T['type']]?: T extends { type: K } ? (e: T) => void : never;\n};\n\nexport type NgtcCannonEvents = { [uuid: string]: Partial<NgtcCallbackByType<NgtcCannonEvent>> };\n\nexport type ScaleOverrides = { [uuid: string]: THREE.Vector3 };\n\nexport interface NgtcPhysicsApi {\n bodies: { [uuid: string]: number };\n events: NgtcCannonEvents;\n refs: Refs;\n scaleOverrides: ScaleOverrides;\n subscriptions: Subscriptions;\n worker: Signal<CannonWorkerAPI>;\n}\n\nexport const NGTC_PHYSICS_API = new InjectionToken<Signal<NgtcPhysicsApi>>('NgtcPhysics API');\n\n@Component({\n selector: 'ngtc-physics',\n standalone: true,\n template: `<ng-content />`,\n providers: [{ provide: NGTC_PHYSICS_API, useFactory: (physics: NgtcPhysics) => physics.api, deps: [NgtcPhysics] }],\n})\nexport class NgtcPhysics extends NgtSignalStore<NgtcPhysicsState> {\n @Input() set isPaused(isPaused: boolean) {\n this.set({ isPaused });\n }\n\n @Input() set maxSubSteps(maxSubSteps: number) {\n this.set({ maxSubSteps });\n }\n\n @Input() set shouldInvalidate(shouldInvalidate: boolean) {\n this.set({ shouldInvalidate });\n }\n\n @Input() set stepSize(stepSize: number) {\n this.set({ stepSize });\n }\n\n @Input() set size(size: number) {\n this.set({ size });\n }\n\n @Input() set allowSleep(allowSleep: boolean) {\n this.set({ allowSleep });\n }\n\n @Input() set axisIndex(axisIndex: 0 | 1 | 2) {\n this.set({ axisIndex });\n }\n\n @Input() set broadphase(broadphase: Broadphase) {\n this.set({ broadphase });\n }\n\n @Input() set defaultContactMaterial(defaultContactMaterial: ContactMaterialOptions) {\n this.set({ defaultContactMaterial });\n }\n\n @Input() set frictionGravity(frictionGravity: Triplet | null) {\n this.set({ frictionGravity });\n }\n\n @Input() set gravity(gravity: Triplet) {\n this.set({ gravity });\n }\n\n @Input() set iterations(iterations: number) {\n this.set({ iterations });\n }\n\n @Input() set quatNormalizeFast(quatNormalizeFast: boolean) {\n this.set({ quatNormalizeFast });\n }\n\n @Input() set quatNormalizeSkip(quatNormalizeSkip: number) {\n this.set({ quatNormalizeSkip });\n }\n\n @Input() set solver(solver: Solver) {\n this.set({ solver });\n }\n\n @Input() set tolerance(tolerance: number) {\n this.set({ tolerance });\n }\n\n readonly #store = inject(NgtStore);\n\n readonly #bodies: { [uuid: string]: number } = {};\n readonly #events: NgtcCannonEvents = {};\n readonly #refs: Refs = {};\n readonly #scaleOverrides: ScaleOverrides = {};\n readonly #subscriptions: Subscriptions = {};\n\n readonly #allowSleep = this.select('allowSleep');\n readonly #defaultContactMaterial = this.select('defaultContactMaterial');\n readonly #frictionGravity = this.select('frictionGravity');\n readonly #quatNormalizeFast = this.select('quatNormalizeFast');\n readonly #quatNormalizeSkip = this.select('quatNormalizeSkip');\n readonly #size = this.select('size');\n readonly #solver = this.select('solver');\n\n readonly #workerProps = computed(() => ({\n allowSleep: this.#allowSleep(),\n axisIndex: this.get('axisIndex'),\n broadphase: this.get('broadphase'),\n defaultContactMaterial: this.#defaultContactMaterial(),\n frictionGravity: this.#frictionGravity(),\n gravity: this.get('gravity'),\n iterations: this.get('iterations'),\n quatNormalizeFast: this.#quatNormalizeFast(),\n quatNormalizeSkip: this.#quatNormalizeSkip(),\n size: this.#size(),\n solver: this.#solver(),\n tolerance: this.get('tolerance'),\n }));\n\n readonly worker = computed(() => new CannonWorkerAPI(this.#workerProps()));\n\n readonly api = computed(() => ({\n bodies: this.#bodies,\n events: this.#events,\n refs: this.#refs,\n scaleOverrides: this.#scaleOverrides,\n subscriptions: this.#subscriptions,\n worker: this.worker,\n }));\n\n constructor() {\n super({\n allowSleep: false,\n axisIndex: 0,\n broadphase: 'Naive',\n defaultContactMaterial: { contactEquationStiffness: 1e6 },\n frictionGravity: null,\n gravity: [0, -9.81, 0],\n isPaused: false,\n iterations: 5,\n maxSubSteps: 10,\n quatNormalizeFast: false,\n quatNormalizeSkip: 0,\n shouldInvalidate: true,\n size: 1000,\n solver: 'GS',\n stepSize: 1 / 60,\n tolerance: 0.001,\n });\n requestAnimationFrameInInjectionContext(() => {\n this.#connectWorker();\n this.#updateWorkerProp('axisIndex');\n this.#updateWorkerProp('broadphase');\n this.#updateWorkerProp('gravity');\n this.#updateWorkerProp('iterations');\n this.#updateWorkerProp('tolerance');\n injectBeforeRender(this.#onBeforeRender.bind(this, 0));\n });\n }\n\n #updateWorkerProp(key: keyof NgtcPhysicsState) {\n const compute = this.select(key);\n effect(() => {\n const worker = untracked(this.worker);\n const value = compute();\n // @ts-expect-error\n worker[key] = value;\n });\n }\n\n #connectWorker() {\n effect((onCleanup) => {\n const worker = this.worker();\n\n worker.connect();\n worker.init();\n\n (worker as any).on('collide', this.#collideHandler.bind(this));\n (worker as any).on('collideBegin', this.#collideBeginHandler.bind(this));\n (worker as any).on('collideEnd', this.#collideEndHandler.bind(this));\n (worker as any).on('frame', this.#frameHandler.bind(this));\n (worker as any).on('rayhit', this.#rayhitHandler.bind(this));\n\n onCleanup(() => {\n worker.terminate();\n (worker as any).removeAllListeners();\n });\n });\n }\n\n #onBeforeRender(timeSinceLastCalled: number, { delta }: NgtRenderState) {\n const { isPaused, maxSubSteps, stepSize } = this.get();\n const worker = this.worker();\n if (isPaused) return;\n timeSinceLastCalled += delta;\n worker.step({ maxSubSteps, stepSize: stepSize!, timeSinceLastCalled });\n timeSinceLastCalled = 0;\n }\n\n #collideHandler({ body, contact: { bi, bj, ...contactRest }, target, ...rest }: WorkerCollideEvent['data']) {\n const cb = this.#events[target]?.collide;\n\n if (cb) {\n cb({\n body: this.#refs[body],\n contact: { bi: this.#refs[bi], bj: this.#refs[bj], ...contactRest },\n target: this.#refs[target],\n ...rest,\n });\n }\n }\n\n #collideBeginHandler({ bodyA, bodyB }: WorkerCollideBeginEvent['data']) {\n const cbA = this.#events[bodyA]?.collideBegin;\n if (cbA) cbA({ body: this.#refs[bodyB], op: 'event', target: this.#refs[bodyA], type: 'collideBegin' });\n const cbB = this.#events[bodyB]?.collideBegin;\n if (cbB) cbB({ body: this.#refs[bodyA], op: 'event', target: this.#refs[bodyB], type: 'collideBegin' });\n }\n\n #collideEndHandler({ bodyA, bodyB }: WorkerCollideEndEvent['data']) {\n const cbA = this.#events[bodyA]?.collideEnd;\n if (cbA) cbA({ body: this.#refs[bodyB], op: 'event', target: this.#refs[bodyA], type: 'collideEnd' });\n const cbB = this.#events[bodyB]?.collideEnd;\n if (cbB) cbB({ body: this.#refs[bodyA], op: 'event', target: this.#refs[bodyB], type: 'collideEnd' });\n }\n\n #frameHandler({ active, bodies: uuids = [], observations, positions, quaternions }: WorkerFrameMessage['data']) {\n const invalidate = this.#store.get('invalidate');\n const shouldInvalidate = this.get('shouldInvalidate');\n\n for (let i = 0; i < uuids.length; i++) {\n this.#bodies[uuids[i]] = i;\n }\n\n observations.forEach(([id, value, type]) => {\n const subscription = this.#subscriptions[id] || {};\n const cb = subscription[type];\n // HELP: We clearly know the type of the callback, but typescript can't deal with it\n cb && cb(value as never);\n });\n\n if (active) {\n for (const ref of Object.values(this.#refs)) {\n if (ref instanceof THREE.InstancedMesh) {\n for (let i = 0; i < ref.count; i++) {\n const uuid = `${ref.uuid}/${i}`;\n const index = this.#bodies[uuid];\n if (index !== undefined) {\n ref.setMatrixAt(i, apply(index, positions, quaternions, this.#scaleOverrides[uuid]));\n ref.instanceMatrix.needsUpdate = true;\n }\n }\n } else {\n const scale = this.#scaleOverrides[ref.uuid] || ref.scale;\n apply(this.#bodies[ref.uuid], positions, quaternions, scale, ref);\n }\n }\n if (shouldInvalidate) invalidate();\n }\n }\n\n #rayhitHandler({ body, ray: { uuid, ...rayRest }, ...rest }: WorkerRayhitEvent['data']) {\n const cb = this.#events[uuid]?.rayhit;\n if (cb) cb({ body: body ? this.#refs[body] : null, ray: { uuid, ...rayRest }, ...rest });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/plugin/package.json
CHANGED