@esotericsoftware/spine-core 4.2.117 → 4.3.1
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/dist/Animation.d.ts +426 -274
- package/dist/Animation.js +1174 -1210
- package/dist/AnimationState.d.ts +246 -201
- package/dist/AnimationState.js +508 -471
- package/dist/AnimationStateData.d.ts +12 -10
- package/dist/AnimationStateData.js +19 -20
- package/dist/AssetManagerBase.d.ts +27 -21
- package/dist/AssetManagerBase.js +67 -43
- package/dist/AtlasAttachmentLoader.d.ts +18 -12
- package/dist/AtlasAttachmentLoader.js +28 -39
- package/dist/Bone.d.ts +15 -109
- package/dist/Bone.js +22 -362
- package/dist/BoneData.d.ts +13 -28
- package/dist/BoneData.js +20 -29
- package/dist/BonePose.d.ts +132 -0
- package/dist/BonePose.js +456 -0
- package/dist/Constraint.d.ts +41 -0
- package/dist/Constraint.js +38 -0
- package/dist/ConstraintData.d.ts +16 -5
- package/dist/ConstraintData.js +15 -9
- package/dist/DrawOrder.d.ts +48 -0
- package/dist/DrawOrder.js +64 -0
- package/dist/Event.d.ts +11 -6
- package/dist/Event.js +10 -5
- package/dist/EventData.d.ts +10 -6
- package/dist/EventData.js +18 -7
- package/dist/IkConstraint.d.ts +23 -28
- package/dist/IkConstraint.js +122 -124
- package/dist/IkConstraintData.d.ts +14 -19
- package/dist/IkConstraintData.js +22 -23
- package/dist/IkConstraintPose.d.ts +49 -0
- package/dist/IkConstraintPose.js +55 -0
- package/dist/PathConstraint.d.ts +18 -23
- package/dist/PathConstraint.js +162 -139
- package/dist/PathConstraintData.d.ts +11 -14
- package/dist/PathConstraintData.js +14 -16
- package/dist/PathConstraintPose.d.ts +43 -0
- package/dist/PathConstraintPose.js +49 -0
- package/dist/Physics.d.ts +39 -0
- package/dist/Physics.js +41 -0
- package/dist/PhysicsConstraint.d.ts +26 -30
- package/dist/PhysicsConstraint.js +114 -94
- package/dist/PhysicsConstraintData.d.ts +28 -13
- package/dist/PhysicsConstraintData.js +35 -13
- package/dist/PhysicsConstraintPose.d.ts +47 -0
- package/dist/PhysicsConstraintPose.js +55 -0
- package/dist/Pose.d.ts +33 -0
- package/dist/Pose.js +30 -0
- package/dist/Posed.d.ts +58 -0
- package/dist/Posed.js +78 -0
- package/dist/PosedActive.d.ts +41 -0
- package/dist/{attachments/HasTextureRegion.js → PosedActive.js} +17 -2
- package/dist/PosedData.d.ts +40 -0
- package/dist/PosedData.js +45 -0
- package/dist/Skeleton.d.ts +110 -99
- package/dist/Skeleton.js +271 -449
- package/dist/SkeletonBinary.d.ts +1 -1
- package/dist/SkeletonBinary.js +655 -466
- package/dist/SkeletonBounds.d.ts +4 -4
- package/dist/SkeletonBounds.js +45 -46
- package/dist/SkeletonClipping.d.ts +26 -22
- package/dist/SkeletonClipping.js +654 -340
- package/dist/SkeletonData.d.ts +18 -35
- package/dist/SkeletonData.js +57 -97
- package/dist/SkeletonJson.d.ts +8 -6
- package/dist/SkeletonJson.js +895 -640
- package/dist/SkeletonRendererCore.d.ts +58 -0
- package/dist/SkeletonRendererCore.js +310 -0
- package/dist/Skin.d.ts +20 -16
- package/dist/Skin.js +58 -53
- package/dist/Slider.d.ts +46 -0
- package/dist/Slider.js +115 -0
- package/dist/SliderData.d.ts +58 -0
- package/dist/SliderData.js +59 -0
- package/dist/SliderPose.d.ts +37 -0
- package/dist/SliderPose.js +40 -0
- package/dist/Slot.d.ts +16 -38
- package/dist/Slot.js +37 -60
- package/dist/SlotData.d.ts +5 -12
- package/dist/SlotData.js +7 -15
- package/dist/SlotPose.d.ts +59 -0
- package/dist/SlotPose.js +81 -0
- package/dist/Texture.d.ts +1 -0
- package/dist/Texture.js +2 -1
- package/dist/TextureAtlas.d.ts +3 -3
- package/dist/TextureAtlas.js +49 -49
- package/dist/TransformConstraint.d.ts +16 -28
- package/dist/TransformConstraint.js +72 -209
- package/dist/TransformConstraintData.d.ts +108 -20
- package/dist/TransformConstraintData.js +274 -24
- package/dist/TransformConstraintPose.d.ts +45 -0
- package/dist/TransformConstraintPose.js +52 -0
- package/dist/Triangulator.d.ts +1 -1
- package/dist/Triangulator.js +91 -107
- package/dist/{Updatable.d.ts → Update.d.ts} +5 -12
- package/dist/Update.js +30 -0
- package/dist/Utils.d.ts +14 -3
- package/dist/Utils.js +80 -37
- package/dist/attachments/Attachment.d.ts +27 -19
- package/dist/attachments/Attachment.js +59 -35
- package/dist/attachments/AttachmentLoader.d.ts +14 -14
- package/dist/attachments/AttachmentLoader.js +1 -1
- package/dist/attachments/BoundingBoxAttachment.d.ts +1 -1
- package/dist/attachments/BoundingBoxAttachment.js +2 -2
- package/dist/attachments/ClippingAttachment.d.ts +10 -3
- package/dist/attachments/ClippingAttachment.js +12 -3
- package/dist/attachments/{HasTextureRegion.d.ts → HasSequence.d.ts} +11 -14
- package/dist/attachments/HasSequence.js +30 -0
- package/dist/attachments/MeshAttachment.d.ts +28 -35
- package/dist/attachments/MeshAttachment.js +85 -97
- package/dist/attachments/PathAttachment.d.ts +3 -3
- package/dist/attachments/PathAttachment.js +6 -6
- package/dist/attachments/PointAttachment.d.ts +11 -6
- package/dist/attachments/PointAttachment.js +8 -3
- package/dist/attachments/RegionAttachment.d.ts +25 -27
- package/dist/attachments/RegionAttachment.js +101 -113
- package/dist/attachments/Sequence.d.ts +31 -6
- package/dist/attachments/Sequence.js +79 -13
- package/dist/esm/spine-core.min.mjs +2 -2
- package/dist/esm/spine-core.mjs +7747 -6116
- package/dist/esm/spine-core.mjs.map +4 -4
- package/dist/iife/spine-core.js +7747 -6116
- package/dist/iife/spine-core.js.map +4 -4
- package/dist/iife/spine-core.min.js +2 -2
- package/dist/index.d.ts +32 -11
- package/dist/index.js +33 -12
- package/dist/polyfills.js +4 -5
- package/package.json +1 -1
- package/dist/Updatable.js +0 -30
package/dist/TextureAtlas.js
CHANGED
|
@@ -26,83 +26,83 @@
|
|
|
26
26
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
27
27
|
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
28
28
|
*****************************************************************************/
|
|
29
|
-
import { TextureFilter,
|
|
29
|
+
import { TextureFilter, TextureRegion, TextureWrap } from "./Texture.js";
|
|
30
30
|
import { Utils } from "./Utils.js";
|
|
31
31
|
export class TextureAtlas {
|
|
32
|
-
pages =
|
|
33
|
-
regions =
|
|
32
|
+
pages = [];
|
|
33
|
+
regions = [];
|
|
34
34
|
constructor(atlasText) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
pageFields
|
|
35
|
+
const reader = new TextureAtlasReader(atlasText);
|
|
36
|
+
const entry = new Array(4);
|
|
37
|
+
const pageFields = {};
|
|
38
|
+
pageFields.size = (page) => {
|
|
39
39
|
page.width = parseInt(entry[1]);
|
|
40
40
|
page.height = parseInt(entry[2]);
|
|
41
41
|
};
|
|
42
|
-
pageFields
|
|
42
|
+
pageFields.format = () => {
|
|
43
43
|
// page.format = Format[tuple[0]]; we don't need format in WebGL
|
|
44
44
|
};
|
|
45
|
-
pageFields
|
|
45
|
+
pageFields.filter = (page) => {
|
|
46
46
|
page.minFilter = Utils.enumValue(TextureFilter, entry[1]);
|
|
47
47
|
page.magFilter = Utils.enumValue(TextureFilter, entry[2]);
|
|
48
48
|
};
|
|
49
|
-
pageFields
|
|
50
|
-
if (entry[1].indexOf('x')
|
|
49
|
+
pageFields.repeat = (page) => {
|
|
50
|
+
if (entry[1].indexOf('x') !== -1)
|
|
51
51
|
page.uWrap = TextureWrap.Repeat;
|
|
52
|
-
if (entry[1].indexOf('y')
|
|
52
|
+
if (entry[1].indexOf('y') !== -1)
|
|
53
53
|
page.vWrap = TextureWrap.Repeat;
|
|
54
54
|
};
|
|
55
|
-
pageFields
|
|
56
|
-
page.pma = entry[1]
|
|
55
|
+
pageFields.pma = (page) => {
|
|
56
|
+
page.pma = entry[1] === "true";
|
|
57
57
|
};
|
|
58
58
|
var regionFields = {};
|
|
59
|
-
regionFields
|
|
59
|
+
regionFields.xy = (region) => {
|
|
60
60
|
region.x = parseInt(entry[1]);
|
|
61
61
|
region.y = parseInt(entry[2]);
|
|
62
62
|
};
|
|
63
|
-
regionFields
|
|
63
|
+
regionFields.size = (region) => {
|
|
64
64
|
region.width = parseInt(entry[1]);
|
|
65
65
|
region.height = parseInt(entry[2]);
|
|
66
66
|
};
|
|
67
|
-
regionFields
|
|
67
|
+
regionFields.bounds = (region) => {
|
|
68
68
|
region.x = parseInt(entry[1]);
|
|
69
69
|
region.y = parseInt(entry[2]);
|
|
70
70
|
region.width = parseInt(entry[3]);
|
|
71
71
|
region.height = parseInt(entry[4]);
|
|
72
72
|
};
|
|
73
|
-
regionFields
|
|
73
|
+
regionFields.offset = (region) => {
|
|
74
74
|
region.offsetX = parseInt(entry[1]);
|
|
75
75
|
region.offsetY = parseInt(entry[2]);
|
|
76
76
|
};
|
|
77
|
-
regionFields
|
|
77
|
+
regionFields.orig = (region) => {
|
|
78
78
|
region.originalWidth = parseInt(entry[1]);
|
|
79
79
|
region.originalHeight = parseInt(entry[2]);
|
|
80
80
|
};
|
|
81
|
-
regionFields
|
|
81
|
+
regionFields.offsets = (region) => {
|
|
82
82
|
region.offsetX = parseInt(entry[1]);
|
|
83
83
|
region.offsetY = parseInt(entry[2]);
|
|
84
84
|
region.originalWidth = parseInt(entry[3]);
|
|
85
85
|
region.originalHeight = parseInt(entry[4]);
|
|
86
86
|
};
|
|
87
|
-
regionFields
|
|
88
|
-
|
|
89
|
-
if (value
|
|
87
|
+
regionFields.rotate = (region) => {
|
|
88
|
+
const value = entry[1];
|
|
89
|
+
if (value === "true")
|
|
90
90
|
region.degrees = 90;
|
|
91
|
-
else if (value
|
|
91
|
+
else if (value !== "false")
|
|
92
92
|
region.degrees = parseInt(value);
|
|
93
93
|
};
|
|
94
|
-
regionFields
|
|
94
|
+
regionFields.index = (region) => {
|
|
95
95
|
region.index = parseInt(entry[1]);
|
|
96
96
|
};
|
|
97
97
|
let line = reader.readLine();
|
|
98
98
|
// Ignore empty lines before first entry.
|
|
99
|
-
while (line && line.trim().length
|
|
99
|
+
while (line && line.trim().length === 0)
|
|
100
100
|
line = reader.readLine();
|
|
101
101
|
// Header entries.
|
|
102
102
|
while (true) {
|
|
103
|
-
if (!line || line.trim().length
|
|
103
|
+
if (!line || line.trim().length === 0)
|
|
104
104
|
break;
|
|
105
|
-
if (reader.readEntry(entry, line)
|
|
105
|
+
if (reader.readEntry(entry, line) === 0)
|
|
106
106
|
break; // Silently ignore all header fields.
|
|
107
107
|
line = reader.readLine();
|
|
108
108
|
}
|
|
@@ -113,28 +113,28 @@ export class TextureAtlas {
|
|
|
113
113
|
while (true) {
|
|
114
114
|
if (line === null)
|
|
115
115
|
break;
|
|
116
|
-
if (line.trim().length
|
|
116
|
+
if (line.trim().length === 0) {
|
|
117
117
|
page = null;
|
|
118
118
|
line = reader.readLine();
|
|
119
119
|
}
|
|
120
120
|
else if (!page) {
|
|
121
121
|
page = new TextureAtlasPage(line.trim());
|
|
122
122
|
while (true) {
|
|
123
|
-
if (reader.readEntry(entry, line = reader.readLine())
|
|
123
|
+
if (reader.readEntry(entry, line = reader.readLine()) === 0)
|
|
124
124
|
break;
|
|
125
|
-
|
|
125
|
+
const field = pageFields[entry[0]];
|
|
126
126
|
if (field)
|
|
127
127
|
field(page);
|
|
128
128
|
}
|
|
129
129
|
this.pages.push(page);
|
|
130
130
|
}
|
|
131
131
|
else {
|
|
132
|
-
|
|
132
|
+
const region = new TextureAtlasRegion(page, line);
|
|
133
133
|
while (true) {
|
|
134
|
-
|
|
135
|
-
if (count
|
|
134
|
+
const count = reader.readEntry(entry, line = reader.readLine());
|
|
135
|
+
if (count === 0)
|
|
136
136
|
break;
|
|
137
|
-
|
|
137
|
+
const field = regionFields[entry[0]];
|
|
138
138
|
if (field)
|
|
139
139
|
field(region);
|
|
140
140
|
else {
|
|
@@ -143,13 +143,13 @@ export class TextureAtlas {
|
|
|
143
143
|
if (!values)
|
|
144
144
|
values = [];
|
|
145
145
|
names.push(entry[0]);
|
|
146
|
-
|
|
146
|
+
const entryValues = [];
|
|
147
147
|
for (let i = 0; i < count; i++)
|
|
148
148
|
entryValues.push(parseInt(entry[i + 1]));
|
|
149
149
|
values.push(entryValues);
|
|
150
150
|
}
|
|
151
151
|
}
|
|
152
|
-
if (region.originalWidth
|
|
152
|
+
if (region.originalWidth === 0 && region.originalHeight === 0) {
|
|
153
153
|
region.originalWidth = region.width;
|
|
154
154
|
region.originalHeight = region.height;
|
|
155
155
|
}
|
|
@@ -161,7 +161,7 @@ export class TextureAtlas {
|
|
|
161
161
|
}
|
|
162
162
|
region.u = region.x / page.width;
|
|
163
163
|
region.v = region.y / page.height;
|
|
164
|
-
if (region.degrees
|
|
164
|
+
if (region.degrees === 90) {
|
|
165
165
|
region.u2 = (region.x + region.height) / page.width;
|
|
166
166
|
region.v2 = (region.y + region.width) / page.height;
|
|
167
167
|
}
|
|
@@ -175,14 +175,14 @@ export class TextureAtlas {
|
|
|
175
175
|
}
|
|
176
176
|
findRegion(name) {
|
|
177
177
|
for (let i = 0; i < this.regions.length; i++) {
|
|
178
|
-
if (this.regions[i].name
|
|
178
|
+
if (this.regions[i].name === name) {
|
|
179
179
|
return this.regions[i];
|
|
180
180
|
}
|
|
181
181
|
}
|
|
182
182
|
return null;
|
|
183
183
|
}
|
|
184
184
|
setTextures(assetManager, pathPrefix = "") {
|
|
185
|
-
for (
|
|
185
|
+
for (const page of this.pages)
|
|
186
186
|
page.setTexture(assetManager.get(pathPrefix + page.name));
|
|
187
187
|
}
|
|
188
188
|
dispose() {
|
|
@@ -206,21 +206,21 @@ class TextureAtlasReader {
|
|
|
206
206
|
if (!line)
|
|
207
207
|
return 0;
|
|
208
208
|
line = line.trim();
|
|
209
|
-
if (line.length
|
|
209
|
+
if (line.length === 0)
|
|
210
210
|
return 0;
|
|
211
|
-
|
|
212
|
-
if (colon
|
|
211
|
+
const colon = line.indexOf(':');
|
|
212
|
+
if (colon === -1)
|
|
213
213
|
return 0;
|
|
214
214
|
entry[0] = line.substr(0, colon).trim();
|
|
215
215
|
for (let i = 1, lastMatch = colon + 1;; i++) {
|
|
216
|
-
|
|
217
|
-
if (comma
|
|
216
|
+
const comma = line.indexOf(',', lastMatch);
|
|
217
|
+
if (comma === -1) {
|
|
218
218
|
entry[i] = line.substr(lastMatch).trim();
|
|
219
219
|
return i;
|
|
220
220
|
}
|
|
221
221
|
entry[i] = line.substr(lastMatch, comma - lastMatch).trim();
|
|
222
222
|
lastMatch = comma + 1;
|
|
223
|
-
if (i
|
|
223
|
+
if (i === 4)
|
|
224
224
|
return 4;
|
|
225
225
|
}
|
|
226
226
|
}
|
|
@@ -235,7 +235,7 @@ export class TextureAtlasPage {
|
|
|
235
235
|
width = 0;
|
|
236
236
|
height = 0;
|
|
237
237
|
pma = false;
|
|
238
|
-
regions =
|
|
238
|
+
regions = [];
|
|
239
239
|
constructor(name) {
|
|
240
240
|
this.name = name;
|
|
241
241
|
}
|
|
@@ -243,7 +243,7 @@ export class TextureAtlasPage {
|
|
|
243
243
|
this.texture = texture;
|
|
244
244
|
texture.setFilters(this.minFilter, this.magFilter);
|
|
245
245
|
texture.setWraps(this.uWrap, this.vWrap);
|
|
246
|
-
for (
|
|
246
|
+
for (const region of this.regions)
|
|
247
247
|
region.texture = texture;
|
|
248
248
|
}
|
|
249
249
|
}
|
|
@@ -267,4 +267,4 @@ export class TextureAtlasRegion extends TextureRegion {
|
|
|
267
267
|
page.regions.push(this);
|
|
268
268
|
}
|
|
269
269
|
}
|
|
270
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGV4dHVyZUF0bGFzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1RleHR1cmVBdGxhcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFHL0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQVcsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2xGLE9BQU8sRUFBYyxLQUFLLEVBQWEsTUFBTSxZQUFZLENBQUM7QUFFMUQsTUFBTSxPQUFPLFlBQVk7SUFDeEIsS0FBSyxHQUFHLElBQUksS0FBSyxFQUFvQixDQUFDO0lBQ3RDLE9BQU8sR0FBRyxJQUFJLEtBQUssRUFBc0IsQ0FBQztJQUUxQyxZQUFhLFNBQWlCO1FBQzdCLElBQUksTUFBTSxHQUFHLElBQUksa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0MsSUFBSSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQVMsQ0FBQyxDQUFDLENBQUM7UUFFakMsSUFBSSxVQUFVLEdBQWdELEVBQUUsQ0FBQztRQUNqRSxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFzQixFQUFFLEVBQUU7WUFDL0MsSUFBSyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakMsSUFBSyxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDO1FBQ0YsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsRUFBRTtZQUMzQixnRUFBZ0U7UUFDakUsQ0FBQyxDQUFDO1FBQ0YsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBc0IsRUFBRSxFQUFFO1lBQ2pELElBQUssQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0QsSUFBSyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1RCxDQUFDLENBQUM7UUFDRixVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFzQixFQUFFLEVBQUU7WUFDakQsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFBRSxJQUFLLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUM7WUFDbEUsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFBRSxJQUFLLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUM7UUFDbkUsQ0FBQyxDQUFDO1FBQ0YsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBc0IsRUFBRSxFQUFFO1lBQzlDLElBQUssQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQztRQUNoQyxDQUFDLENBQUM7UUFFRixJQUFJLFlBQVksR0FBb0QsRUFBRSxDQUFDO1FBQ3ZFLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQTBCLEVBQUUsRUFBRTtZQUNuRCxNQUFNLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5QixNQUFNLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQUM7UUFDRixZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUEwQixFQUFFLEVBQUU7WUFDckQsTUFBTSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDO1FBQ0YsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBMEIsRUFBRSxFQUFFO1lBQ3ZELE1BQU0sQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQztRQUNGLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQTBCLEVBQUUsRUFBRTtZQUN2RCxNQUFNLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQyxNQUFNLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUM7UUFDRixZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUEwQixFQUFFLEVBQUU7WUFDckQsTUFBTSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUMsTUFBTSxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUMsQ0FBQyxDQUFDO1FBQ0YsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBMEIsRUFBRSxFQUFFO1lBQ3hELE1BQU0sQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFD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Q0FBQyxDQUFDO0lBQzFCLGNBQWMsR0FBVyxDQUFDLENBQUM7SUFDM0IsS0FBSyxHQUFXLENBQUMsQ0FBQztJQUNsQixPQUFPLEdBQVcsQ0FBQyxDQUFDO0lBQ3BCLEtBQUssR0FBb0IsSUFBSSxDQUFDO0lBQzlCLE1BQU0sR0FBc0IsSUFBSSxDQUFDO0lBRWpDLFlBQWEsSUFBc0IsRUFBRSxJQUFZO1FBQ2hELEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekIsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogU3BpbmUgUnVudGltZXMgTGljZW5zZSBBZ3JlZW1lbnRcbiAqIExhc3QgdXBkYXRlZCBBcHJpbCA1LCAyMDI1LiBSZXBsYWNlcyBhbGwgcHJpb3IgdmVyc2lvbnMuXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMjUsIEVzb3RlcmljIFNvZnR3YXJlIExMQ1xuICpcbiAqIEludGVncmF0aW9uIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlIG9yIG90aGVyd2lzZSBjcmVhdGluZ1xuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgaXMgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBhbmRcbiAqIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyIG9mIHRoZSBTcGluZSBFZGl0b3IgTGljZW5zZSBBZ3JlZW1lbnQ6XG4gKiBodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtZWRpdG9yLWxpY2Vuc2VcbiAqXG4gKiBPdGhlcndpc2UsIGl0IGlzIHBlcm1pdHRlZCB0byBpbnRlZ3JhdGUgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmVcbiAqIG9yIG90aGVyd2lzZSBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgKGNvbGxlY3RpdmVseSxcbiAqIFwiUHJvZHVjdHNcIiksIHByb3ZpZGVkIHRoYXQgZWFjaCB1c2VyIG9mIHRoZSBQcm9kdWN0cyBtdXN0IG9idGFpbiB0aGVpciBvd25cbiAqIFNwaW5lIEVkaXRvciBsaWNlbnNlIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZHVjdHMgaW4gYW55IGZvcm0gbXVzdFxuICogaW5jbHVkZSB0aGlzIGxpY2Vuc2UgYW5kIGNvcHlyaWdodCBub3RpY2UuXG4gKlxuICogVEhFIFNQSU5FIFJVTlRJTUVTIEFSRSBQUk9WSURFRCBCWSBFU09URVJJQyBTT0ZUV0FSRSBMTEMgXCJBUyBJU1wiIEFORCBBTllcbiAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEVTT1RFUklDIFNPRlRXQVJFIExMQyBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUyxcbiAqIEJVU0lORVNTIElOVEVSUlVQVElPTiwgT1IgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFMpIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhFIFNQSU5FIFJVTlRJTUVTLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5pbXBvcnQgeyBBc3NldE1hbmFnZXJCYXNlIH0gZnJvbSBcIi4vQXNzZXRNYW5hZ2VyQmFzZS5qc1wiO1xuaW1wb3J0IHsgVGV4dHVyZUZpbHRlciwgVGV4dHVyZVdyYXAsIFRleHR1cmUsIFRleHR1cmVSZWdpb24gfSBmcm9tIFwiLi9UZXh0dXJlLmpzXCI7XG5pbXBvcnQgeyBEaXNwb3NhYmxlLCBVdGlscywgU3RyaW5nTWFwIH0gZnJvbSBcIi4vVXRpbHMuanNcIjtcblxuZXhwb3J0IGNsYXNzIFRleHR1cmVBdGxhcyBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuXHRwYWdlcyA9IG5ldyBBcnJheTxUZXh0dXJlQXRsYXNQYWdlPigpO1xuXHRyZWdpb25zID0gbmV3IEFycmF5PFRleHR1cmVBdGxhc1JlZ2lvbj4oKTtcblxuXHRjb25zdHJ1Y3RvciAoYXRsYXNUZXh0OiBzdHJpbmcpIHtcblx0XHRsZXQgcmVhZGVyID0gbmV3IFRleHR1cmVBdGxhc1JlYWRlcihhdGxhc1RleHQpO1xuXHRcdGxldCBlbnRyeSA9IG5ldyBBcnJheTxzdHJpbmc+KDQpO1xuXG5cdFx0bGV0IHBhZ2VGaWVsZHM6IFN0cmluZ01hcDwocGFnZTogVGV4dHVyZUF0bGFzUGFnZSkgPT4gdm9pZD4gPSB7fTtcblx0XHRwYWdlRmllbGRzW1wic2l6ZVwiXSA9IChwYWdlOiBUZXh0dXJlQXRsYXNQYWdlKSA9PiB7XG5cdFx0XHRwYWdlIS53aWR0aCA9IHBhcnNlSW50KGVudHJ5WzFdKTtcblx0XHRcdHBhZ2UhLmhlaWdodCA9IHBhcnNlSW50KGVudHJ5WzJdKTtcblx0XHR9O1xuXHRcdHBhZ2VGaWVsZHNbXCJmb3JtYXRcIl0gPSAoKSA9PiB7XG5cdFx0XHQvLyBwYWdlLmZvcm1hdCA9IEZvcm1hdFt0dXBsZVswXV07IHdlIGRvbid0IG5lZWQgZm9ybWF0IGluIFdlYkdMXG5cdFx0fTtcblx0XHRwYWdlRmllbGRzW1wiZmlsdGVyXCJdID0gKHBhZ2U6IFRleHR1cmVBdGxhc1BhZ2UpID0+IHtcblx0XHRcdHBhZ2UhLm1pbkZpbHRlciA9IFV0aWxzLmVudW1WYWx1ZShUZXh0dXJlRmlsdGVyLCBlbnRyeVsxXSk7XG5cdFx0XHRwYWdlIS5tYWdGaWx0ZXIgPSBVdGlscy5lbnVtVmFsdWUoVGV4dHVyZUZpbHRlciwgZW50cnlbMl0pO1xuXHRcdH07XG5cdFx0cGFnZUZpZWxkc1tcInJlcGVhdFwiXSA9IChwYWdlOiBUZXh0dXJlQXRsYXNQYWdlKSA9PiB7XG5cdFx0XHRpZiAoZW50cnlbMV0uaW5kZXhPZigneCcpICE9IC0xKSBwYWdlIS51V3JhcCA9IFRleHR1cmVXcmFwLlJlcGVhdDtcblx0XHRcdGlmIChlbnRyeVsxXS5pbmRleE9mKCd5JykgIT0gLTEpIHBhZ2UhLnZXcmFwID0gVGV4dHVyZVdyYXAuUmVwZWF0O1xuXHRcdH07XG5cdFx0cGFnZUZpZWxkc1tcInBtYVwiXSA9IChwYWdlOiBUZXh0dXJlQXRsYXNQYWdlKSA9PiB7XG5cdFx0XHRwYWdlIS5wbWEgPSBlbnRyeVsxXSA9PSBcInRydWVcIjtcblx0XHR9O1xuXG5cdFx0dmFyIHJlZ2lvbkZpZWxkczogU3RyaW5nTWFwPChyZWdpb246IFRleHR1cmVBdGxhc1JlZ2lvbikgPT4gdm9pZD4gPSB7fTtcblx0XHRyZWdpb25GaWVsZHNbXCJ4eVwiXSA9IChyZWdpb246IFRleHR1cmVBdGxhc1JlZ2lvbikgPT4geyAvLyBEZXByZWNhdGVkLCB1c2UgYm91bmRzLlxuXHRcdFx0cmVnaW9uLnggPSBwYXJzZUludChlbnRyeVsxXSk7XG5cdFx0XHRyZWdpb24ueSA9IHBhcnNlSW50KGVudHJ5WzJdKTtcblx0XHR9O1xuXHRcdHJlZ2lvbkZpZWxkc1tcInNpemVcIl0gPSAocmVnaW9uOiBUZXh0dXJlQXRsYXNSZWdpb24pID0+IHsgLy8gRGVwcmVjYXRlZCwgdXNlIGJvdW5kcy5cblx0XHRcdHJlZ2lvbi53aWR0aCA9IHBhcnNlSW50KGVudHJ5WzFdKTtcblx0XHRcdHJlZ2lvbi5oZWlnaHQgPSBwYXJzZUludChlbnRyeVsyXSk7XG5cdFx0fTtcblx0XHRyZWdpb25GaWVsZHNbXCJib3VuZHNcIl0gPSAocmVnaW9uOiBUZXh0dXJlQXRsYXNSZWdpb24pID0+IHtcblx0XHRcdHJlZ2lvbi54ID0gcGFyc2VJbnQoZW50cnlbMV0pO1xuXHRcdFx0cmVnaW9uLnkgPSBwYXJzZUludChlbnRyeVsyXSk7XG5cdFx0XHRyZWdpb24ud2lkdGggPSBwYXJzZUludChlbnRyeVszXSk7XG5cdFx0XHRyZWdpb24uaGVpZ2h0ID0gcGFyc2VJbnQoZW50cnlbNF0pO1xuXHRcdH07XG5cdFx0cmVnaW9uRmllbGRzW1wib2Zmc2V0XCJdID0gKHJlZ2lvbjogVGV4dHVyZUF0bGFzUmVnaW9uKSA9PiB7IC8vIERlcHJlY2F0ZWQsIHVzZSBvZmZzZXRzLlxuXHRcdFx0cmVnaW9uLm9mZnNldFggPSBwYXJzZUludChlbnRyeVsxXSk7XG5cdFx0XHRyZWdpb24ub2Zmc2V0WSA9IHBhcnNlSW50KGVudHJ5WzJdKTtcblx0XHR9O1xuXHRcdHJlZ2lvbkZpZWxkc1tcIm9yaWdcIl0gPSAocmVnaW9uOiBUZXh0dXJlQXRsYXNSZWdpb24pID0+IHsgLy8gRGVwcmVjYXRlZCwgdXNlIG9mZnNldHMuXG5cdFx0XHRyZWdpb24ub3JpZ2luYWxXaWR0aCA9IHBhcnNlSW50KGVudHJ5WzFdKTtcblx0XHRcdHJlZ2lvbi5vcmlnaW5hbEhlaWdodCA9IHBhcnNlSW50KGVudHJ5WzJdKTtcblx0XHR9O1xuXHRcdHJlZ2lvbkZpZWxkc1tcIm9mZnNldHNcIl0gPSAocmVnaW9uOiBUZXh0dXJlQXRsYXNSZWdpb24pID0+IHtcblx0XHRcdHJlZ2lvbi5vZmZzZXRYID0gcGFyc2VJbnQoZW50cnlbMV0pO1xuXHRcdFx0cmVnaW9uLm9mZnNldFkgPSBwYXJzZUludChlbnRyeVsyXSk7XG5cdFx0XHRyZWdpb24ub3JpZ2luYWxXaWR0aCA9IHBhcnNlSW50KGVudHJ5WzNdKTtcblx0XHRcdHJlZ2lvbi5vcmlnaW5hbEhlaWdodCA9IHBhcnNlSW50KGVudHJ5WzRdKTtcblx0XHR9O1xuXHRcdHJlZ2lvbkZpZWxkc1tcInJvdGF0ZVwiXSA9IChyZWdpb246IFRleHR1cmVBdGxhc1JlZ2lvbikgPT4ge1xuXHRcdFx0bGV0IHZhbHVlID0gZW50cnlbMV07XG5cdFx0XHRpZiAodmFsdWUgPT0gXCJ0cnVlXCIpXG5cdFx0XHRcdHJlZ2lvbi5kZWdyZWVzID0gOTA7XG5cdFx0XHRlbHNlIGlmICh2YWx1ZSAhPSBcImZhbHNlXCIpXG5cdFx0XHRcdHJlZ2lvbi5kZWdyZWVzID0gcGFyc2VJbnQodmFsdWUpO1xuXHRcdH07XG5cdFx0cmVnaW9uRmllbGRzW1wiaW5kZXhcIl0gPSAocmVnaW9uOiBUZXh0dXJlQXRsYXNSZWdpb24pID0+IHtcblx0XHRcdHJlZ2lvbi5pbmRleCA9IHBhcnNlSW50KGVudHJ5WzFdKTtcblx0XHR9O1xuXG5cdFx0bGV0IGxpbmUgPSByZWFkZXIucmVhZExpbmUoKTtcblx0XHQvLyBJZ25vcmUgZW1wdHkgbGluZXMgYmVmb3JlIGZpcnN0IGVudHJ5LlxuXHRcdHdoaWxlIChsaW5lICYmIGxpbmUudHJpbSgpLmxlbmd0aCA9PSAwKVxuXHRcdFx0bGluZSA9IHJlYWRlci5yZWFkTGluZSgpO1xuXHRcdC8vIEhlYWRlciBlbnRyaWVzLlxuXHRcdHdoaWxlICh0cnVlKSB7XG5cdFx0XHRpZiAoIWxpbmUgfHwgbGluZS50cmltKCkubGVuZ3RoID09IDApIGJyZWFrO1xuXHRcdFx0aWYgKHJlYWRlci5yZWFkRW50cnkoZW50cnksIGxpbmUpID09IDApIGJyZWFrOyAvLyBTaWxlbnRseSBpZ25vcmUgYWxsIGhlYWRlciBmaWVsZHMuXG5cdFx0XHRsaW5lID0gcmVhZGVyLnJlYWRMaW5lKCk7XG5cdFx0fVxuXG5cdFx0Ly8gUGFnZSBhbmQgcmVnaW9uIGVudHJpZXMuXG5cdFx0bGV0IHBhZ2U6IFRleHR1cmVBdGxhc1BhZ2UgfCBudWxsID0gbnVsbDtcblx0XHRsZXQgbmFtZXM6IHN0cmluZ1tdIHwgbnVsbCA9IG51bGw7XG5cdFx0bGV0IHZhbHVlczogbnVtYmVyW11bXSB8IG51bGwgPSBudWxsO1xuXHRcdHdoaWxlICh0cnVlKSB7XG5cdFx0XHRpZiAobGluZSA9PT0gbnVsbCkgYnJlYWs7XG5cdFx0XHRpZiAobGluZS50cmltKCkubGVuZ3RoID09IDApIHtcblx0XHRcdFx0cGFnZSA9IG51bGw7XG5cdFx0XHRcdGxpbmUgPSByZWFkZXIucmVhZExpbmUoKTtcblx0XHRcdH0gZWxzZSBpZiAoIXBhZ2UpIHtcblx0XHRcdFx0cGFnZSA9IG5ldyBUZXh0dXJlQXRsYXNQYWdlKGxpbmUudHJpbSgpKTtcblx0XHRcdFx0d2hpbGUgKHRydWUpIHtcblx0XHRcdFx0XHRpZiAocmVhZGVyLnJlYWRFbnRyeShlbnRyeSwgbGluZSA9IHJlYWRlci5yZWFkTGluZSgpKSA9PSAwKSBicmVhaztcblx0XHRcdFx0XHRsZXQgZmllbGQgPSBwYWdlRmllbGRzW2VudHJ5WzBdXTtcblx0XHRcdFx0XHRpZiAoZmllbGQpIGZpZWxkKHBhZ2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMucGFnZXMucHVzaChwYWdlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGxldCByZWdpb24gPSBuZXcgVGV4dHVyZUF0bGFzUmVnaW9uKHBhZ2UsIGxpbmUpO1xuXG5cdFx0XHRcdHdoaWxlICh0cnVlKSB7XG5cdFx0XHRcdFx0bGV0IGNvdW50ID0gcmVhZGVyLnJlYWRFbnRyeShlbnRyeSwgbGluZSA9IHJlYWRlci5yZWFkTGluZSgpKTtcblx0XHRcdFx0XHRpZiAoY291bnQgPT0gMCkgYnJlYWs7XG5cdFx0XHRcdFx0bGV0IGZpZWxkID0gcmVnaW9uRmllbGRzW2VudHJ5WzBdXTtcblx0XHRcdFx0XHRpZiAoZmllbGQpXG5cdFx0XHRcdFx0XHRmaWVsZChyZWdpb24pO1xuXHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYgKCFuYW1lcykgbmFtZXMgPSBbXTtcblx0XHRcdFx0XHRcdGlmICghdmFsdWVzKSB2YWx1ZXMgPSBbXTtcblx0XHRcdFx0XHRcdG5hbWVzLnB1c2goZW50cnlbMF0pO1xuXHRcdFx0XHRcdFx0bGV0IGVudHJ5VmFsdWVzOiBudW1iZXJbXSA9IFtdO1xuXHRcdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKVxuXHRcdFx0XHRcdFx0XHRlbnRyeVZhbHVlcy5wdXNoKHBhcnNlSW50KGVudHJ5W2kgKyAxXSkpO1xuXHRcdFx0XHRcdFx0dmFsdWVzLnB1c2goZW50cnlWYWx1ZXMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAocmVnaW9uLm9yaWdpbmFsV2lkdGggPT0gMCAmJiByZWdpb24ub3JpZ2luYWxIZWlnaHQgPT0gMCkge1xuXHRcdFx0XHRcdHJlZ2lvbi5vcmlnaW5hbFdpZHRoID0gcmVnaW9uLndpZHRoO1xuXHRcdFx0XHRcdHJlZ2lvbi5vcmlnaW5hbEhlaWdodCA9IHJlZ2lvbi5oZWlnaHQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG5hbWVzICYmIG5hbWVzLmxlbmd0aCA+IDAgJiYgdmFsdWVzICYmIHZhbHVlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0cmVnaW9uLm5hbWVzID0gbmFtZXM7XG5cdFx0XHRcdFx0cmVnaW9uLnZhbHVlcyA9IHZhbHVlcztcblx0XHRcdFx0XHRuYW1lcyA9IG51bGw7XG5cdFx0XHRcdFx0dmFsdWVzID0gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZWdpb24udSA9IHJlZ2lvbi54IC8gcGFnZS53aWR0aDtcblx0XHRcdFx0cmVnaW9uLnYgPSByZWdpb24ueSAvIHBhZ2UuaGVpZ2h0O1xuXHRcdFx0XHRpZiAocmVnaW9uLmRlZ3JlZXMgPT0gOTApIHtcblx0XHRcdFx0XHRyZWdpb24udTIgPSAocmVnaW9uLnggKyByZWdpb24uaGVpZ2h0KSAvIHBhZ2Uud2lkdGg7XG5cdFx0XHRcdFx0cmVnaW9uLnYyID0gKHJlZ2lvbi55ICsgcmVnaW9uLndpZHRoKSAvIHBhZ2UuaGVpZ2h0O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJlZ2lvbi51MiA9IChyZWdpb24ueCArIHJlZ2lvbi53aWR0aCkgLyBwYWdlLndpZHRoO1xuXHRcdFx0XHRcdHJlZ2lvbi52MiA9IChyZWdpb24ueSArIHJlZ2lvbi5oZWlnaHQpIC8gcGFnZS5oZWlnaHQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5yZWdpb25zLnB1c2gocmVnaW9uKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRmaW5kUmVnaW9uIChuYW1lOiBzdHJpbmcpOiBUZXh0dXJlQXRsYXNSZWdpb24gfCBudWxsIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucmVnaW9ucy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKHRoaXMucmVnaW9uc1tpXS5uYW1lID09IG5hbWUpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMucmVnaW9uc1tpXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRzZXRUZXh0dXJlcyAoYXNzZXRNYW5hZ2VyOiBBc3NldE1hbmFnZXJCYXNlLCBwYXRoUHJlZml4OiBzdHJpbmcgPSBcIlwiKSB7XG5cdFx0Zm9yIChsZXQgcGFnZSBvZiB0aGlzLnBhZ2VzKVxuXHRcdFx0cGFnZS5zZXRUZXh0dXJlKGFzc2V0TWFuYWdlci5nZXQocGF0aFByZWZpeCArIHBhZ2UubmFtZSkpO1xuXHR9XG5cblx0ZGlzcG9zZSAoKSB7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR0aGlzLnBhZ2VzW2ldLnRleHR1cmU/LmRpc3Bvc2UoKTtcblx0XHR9XG5cdH1cbn1cblxuY2xhc3MgVGV4dHVyZUF0bGFzUmVhZGVyIHtcblx0bGluZXM6IEFycmF5PHN0cmluZz47XG5cdGluZGV4OiBudW1iZXIgPSAwO1xuXG5cdGNvbnN0cnVjdG9yICh0ZXh0OiBzdHJpbmcpIHtcblx0XHR0aGlzLmxpbmVzID0gdGV4dC5zcGxpdCgvXFxyXFxufFxccnxcXG4vKTtcblx0fVxuXG5cdHJlYWRMaW5lICgpOiBzdHJpbmcgfCBudWxsIHtcblx0XHRpZiAodGhpcy5pbmRleCA+PSB0aGlzLmxpbmVzLmxlbmd0aClcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdHJldHVybiB0aGlzLmxpbmVzW3RoaXMuaW5kZXgrK107XG5cdH1cblxuXHRyZWFkRW50cnkgKGVudHJ5OiBzdHJpbmdbXSwgbGluZTogc3RyaW5nIHwgbnVsbCk6IG51bWJlciB7XG5cdFx0aWYgKCFsaW5lKSByZXR1cm4gMDtcblx0XHRsaW5lID0gbGluZS50cmltKCk7XG5cdFx0aWYgKGxpbmUubGVuZ3RoID09IDApIHJldHVybiAwO1xuXG5cdFx0bGV0IGNvbG9uID0gbGluZS5pbmRleE9mKCc6Jyk7XG5cdFx0aWYgKGNvbG9uID09IC0xKSByZXR1cm4gMDtcblx0XHRlbnRyeVswXSA9IGxpbmUuc3Vic3RyKDAsIGNvbG9uKS50cmltKCk7XG5cdFx0Zm9yIChsZXQgaSA9IDEsIGxhc3RNYXRjaCA9IGNvbG9uICsgMTsgOyBpKyspIHtcblx0XHRcdGxldCBjb21tYSA9IGxpbmUuaW5kZXhPZignLCcsIGxhc3RNYXRjaCk7XG5cdFx0XHRpZiAoY29tbWEgPT0gLTEpIHtcblx0XHRcdFx0ZW50cnlbaV0gPSBsaW5lLnN1YnN0cihsYXN0TWF0Y2gpLnRyaW0oKTtcblx0XHRcdFx0cmV0dXJuIGk7XG5cdFx0XHR9XG5cdFx0XHRlbnRyeVtpXSA9IGxpbmUuc3Vic3RyKGxhc3RNYXRjaCwgY29tbWEgLSBsYXN0TWF0Y2gpLnRyaW0oKTtcblx0XHRcdGxhc3RNYXRjaCA9IGNvbW1hICsgMTtcblx0XHRcdGlmIChpID09IDQpIHJldHVybiA0O1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgY2xhc3MgVGV4dHVyZUF0bGFzUGFnZSB7XG5cdG5hbWU6IHN0cmluZztcblx0bWluRmlsdGVyOiBUZXh0dXJlRmlsdGVyID0gVGV4dHVyZUZpbHRlci5OZWFyZXN0O1xuXHRtYWdGaWx0ZXI6IFRleHR1cmVGaWx0ZXIgPSBUZXh0dXJlRmlsdGVyLk5lYXJlc3Q7XG5cdHVXcmFwOiBUZXh0dXJlV3JhcCA9IFRleHR1cmVXcmFwLkNsYW1wVG9FZGdlO1xuXHR2V3JhcDogVGV4dHVyZVdyYXAgPSBUZXh0dXJlV3JhcC5DbGFtcFRvRWRnZTtcblx0dGV4dHVyZTogVGV4dHVyZSB8IG51bGwgPSBudWxsO1xuXHR3aWR0aDogbnVtYmVyID0gMDtcblx0aGVpZ2h0OiBudW1iZXIgPSAwO1xuXHRwbWE6IGJvb2xlYW4gPSBmYWxzZTtcblx0cmVnaW9ucyA9IG5ldyBBcnJheTxUZXh0dXJlQXRsYXNSZWdpb24+KCk7XG5cblx0Y29uc3RydWN0b3IgKG5hbWU6IHN0cmluZykge1xuXHRcdHRoaXMubmFtZSA9IG5hbWU7XG5cdH1cblxuXHRzZXRUZXh0dXJlICh0ZXh0dXJlOiBUZXh0dXJlKSB7XG5cdFx0dGhpcy50ZXh0dXJlID0gdGV4dHVyZTtcblx0XHR0ZXh0dXJlLnNldEZpbHRlcnModGhpcy5taW5GaWx0ZXIsIHRoaXMubWFnRmlsdGVyKTtcblx0XHR0ZXh0dXJlLnNldFdyYXBzKHRoaXMudVdyYXAsIHRoaXMudldyYXApO1xuXHRcdGZvciAobGV0IHJlZ2lvbiBvZiB0aGlzLnJlZ2lvbnMpXG5cdFx0XHRyZWdpb24udGV4dHVyZSA9IHRleHR1cmU7XG5cdH1cbn1cblxuZXhwb3J0IGNsYXNzIFRleHR1cmVBdGxhc1JlZ2lvbiBleHRlbmRzIFRleHR1cmVSZWdpb24ge1xuXHRwYWdlOiBUZXh0dXJlQXRsYXNQYWdlO1xuXHRuYW1lOiBzdHJpbmc7XG5cdHg6IG51bWJlciA9IDA7XG5cdHk6IG51bWJlciA9IDA7XG5cdG9mZnNldFg6IG51bWJlciA9IDA7XG5cdG9mZnNldFk6IG51bWJlciA9IDA7XG5cdG9yaWdpbmFsV2lkdGg6IG51bWJlciA9IDA7XG5cdG9yaWdpbmFsSGVpZ2h0OiBudW1iZXIgPSAwO1xuXHRpbmRleDogbnVtYmVyID0gMDtcblx0ZGVncmVlczogbnVtYmVyID0gMDtcblx0bmFtZXM6IHN0cmluZ1tdIHwgbnVsbCA9IG51bGw7XG5cdHZhbHVlczogbnVtYmVyW11bXSB8IG51bGwgPSBudWxsO1xuXG5cdGNvbnN0cnVjdG9yIChwYWdlOiBUZXh0dXJlQXRsYXNQYWdlLCBuYW1lOiBzdHJpbmcpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMucGFnZSA9IHBhZ2U7XG5cdFx0dGhpcy5uYW1lID0gbmFtZTtcblx0XHRwYWdlLnJlZ2lvbnMucHVzaCh0aGlzKTtcblx0fVxufVxuIl19
|
|
270
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGV4dHVyZUF0bGFzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1RleHR1cmVBdGxhcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFHL0UsT0FBTyxFQUFnQixhQUFhLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN2RixPQUFPLEVBQW1DLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVwRSxNQUFNLE9BQU8sWUFBWTtJQUN4QixLQUFLLEdBQUcsRUFBd0IsQ0FBQztJQUNqQyxPQUFPLEdBQUcsRUFBMEIsQ0FBQztJQUVyQyxZQUFhLFNBQWlCO1FBQzdCLE1BQU0sTUFBTSxHQUFHLElBQUksa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDakQsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQVMsQ0FBQyxDQUFDLENBQUM7UUFFbkMsTUFBTSxVQUFVLEdBQWdELEVBQUUsQ0FBQztRQUNuRSxVQUFVLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBc0IsRUFBRSxFQUFFO1lBQzVDLElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQztRQUNGLFVBQVUsQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFO1lBQ3hCLGdFQUFnRTtRQUNqRSxDQUFDLENBQUM7UUFDRixVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBc0IsRUFBRSxFQUFFO1lBQzlDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUQsSUFBSSxDQUFDLFNBQVMsR0FB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LEtBQUssR0FBb0IsSUFBSSxDQUFDO0lBQzlCLE1BQU0sR0FBc0IsSUFBSSxDQUFDO0lBRWpDLFlBQWEsSUFBc0IsRUFBRSxJQUFZO1FBQ2hELEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekIsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogU3BpbmUgUnVudGltZXMgTGljZW5zZSBBZ3JlZW1lbnRcbiAqIExhc3QgdXBkYXRlZCBBcHJpbCA1LCAyMDI1LiBSZXBsYWNlcyBhbGwgcHJpb3IgdmVyc2lvbnMuXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMjUsIEVzb3RlcmljIFNvZnR3YXJlIExMQ1xuICpcbiAqIEludGVncmF0aW9uIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlIG9yIG90aGVyd2lzZSBjcmVhdGluZ1xuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgaXMgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBhbmRcbiAqIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyIG9mIHRoZSBTcGluZSBFZGl0b3IgTGljZW5zZSBBZ3JlZW1lbnQ6XG4gKiBodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtZWRpdG9yLWxpY2Vuc2VcbiAqXG4gKiBPdGhlcndpc2UsIGl0IGlzIHBlcm1pdHRlZCB0byBpbnRlZ3JhdGUgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmVcbiAqIG9yIG90aGVyd2lzZSBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgKGNvbGxlY3RpdmVseSxcbiAqIFwiUHJvZHVjdHNcIiksIHByb3ZpZGVkIHRoYXQgZWFjaCB1c2VyIG9mIHRoZSBQcm9kdWN0cyBtdXN0IG9idGFpbiB0aGVpciBvd25cbiAqIFNwaW5lIEVkaXRvciBsaWNlbnNlIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZHVjdHMgaW4gYW55IGZvcm0gbXVzdFxuICogaW5jbHVkZSB0aGlzIGxpY2Vuc2UgYW5kIGNvcHlyaWdodCBub3RpY2UuXG4gKlxuICogVEhFIFNQSU5FIFJVTlRJTUVTIEFSRSBQUk9WSURFRCBCWSBFU09URVJJQyBTT0ZUV0FSRSBMTEMgXCJBUyBJU1wiIEFORCBBTllcbiAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEVTT1RFUklDIFNPRlRXQVJFIExMQyBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUyxcbiAqIEJVU0lORVNTIElOVEVSUlVQVElPTiwgT1IgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFMpIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhFIFNQSU5FIFJVTlRJTUVTLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5pbXBvcnQgdHlwZSB7IEFzc2V0TWFuYWdlckJhc2UgfSBmcm9tIFwiLi9Bc3NldE1hbmFnZXJCYXNlLmpzXCI7XG5pbXBvcnQgeyB0eXBlIFRleHR1cmUsIFRleHR1cmVGaWx0ZXIsIFRleHR1cmVSZWdpb24sIFRleHR1cmVXcmFwIH0gZnJvbSBcIi4vVGV4dHVyZS5qc1wiO1xuaW1wb3J0IHsgdHlwZSBEaXNwb3NhYmxlLCB0eXBlIFN0cmluZ01hcCwgVXRpbHMgfSBmcm9tIFwiLi9VdGlscy5qc1wiO1xuXG5leHBvcnQgY2xhc3MgVGV4dHVyZUF0bGFzIGltcGxlbWVudHMgRGlzcG9zYWJsZSB7XG5cdHBhZ2VzID0gW10gYXMgVGV4dHVyZUF0bGFzUGFnZVtdO1xuXHRyZWdpb25zID0gW10gYXMgVGV4dHVyZUF0bGFzUmVnaW9uW107XG5cblx0Y29uc3RydWN0b3IgKGF0bGFzVGV4dDogc3RyaW5nKSB7XG5cdFx0Y29uc3QgcmVhZGVyID0gbmV3IFRleHR1cmVBdGxhc1JlYWRlcihhdGxhc1RleHQpO1xuXHRcdGNvbnN0IGVudHJ5ID0gbmV3IEFycmF5PHN0cmluZz4oNCk7XG5cblx0XHRjb25zdCBwYWdlRmllbGRzOiBTdHJpbmdNYXA8KHBhZ2U6IFRleHR1cmVBdGxhc1BhZ2UpID0+IHZvaWQ+ID0ge307XG5cdFx0cGFnZUZpZWxkcy5zaXplID0gKHBhZ2U6IFRleHR1cmVBdGxhc1BhZ2UpID0+IHtcblx0XHRcdHBhZ2Uud2lkdGggPSBwYXJzZUludChlbnRyeVsxXSk7XG5cdFx0XHRwYWdlLmhlaWdodCA9IHBhcnNlSW50KGVudHJ5WzJdKTtcblx0XHR9O1xuXHRcdHBhZ2VGaWVsZHMuZm9ybWF0ID0gKCkgPT4ge1xuXHRcdFx0Ly8gcGFnZS5mb3JtYXQgPSBGb3JtYXRbdHVwbGVbMF1dOyB3ZSBkb24ndCBuZWVkIGZvcm1hdCBpbiBXZWJHTFxuXHRcdH07XG5cdFx0cGFnZUZpZWxkcy5maWx0ZXIgPSAocGFnZTogVGV4dHVyZUF0bGFzUGFnZSkgPT4ge1xuXHRcdFx0cGFnZS5taW5GaWx0ZXIgPSBVdGlscy5lbnVtVmFsdWUoVGV4dHVyZUZpbHRlciwgZW50cnlbMV0pO1xuXHRcdFx0cGFnZS5tYWdGaWx0ZXIgPSBVdGlscy5lbnVtVmFsdWUoVGV4dHVyZUZpbHRlciwgZW50cnlbMl0pO1xuXHRcdH07XG5cdFx0cGFnZUZpZWxkcy5yZXBlYXQgPSAocGFnZTogVGV4dHVyZUF0bGFzUGFnZSkgPT4ge1xuXHRcdFx0aWYgKGVudHJ5WzFdLmluZGV4T2YoJ3gnKSAhPT0gLTEpIHBhZ2UudVdyYXAgPSBUZXh0dXJlV3JhcC5SZXBlYXQ7XG5cdFx0XHRpZiAoZW50cnlbMV0uaW5kZXhPZigneScpICE9PSAtMSkgcGFnZS52V3JhcCA9IFRleHR1cmVXcmFwLlJlcGVhdDtcblx0XHR9O1xuXHRcdHBhZ2VGaWVsZHMucG1hID0gKHBhZ2U6IFRleHR1cmVBdGxhc1BhZ2UpID0+IHtcblx0XHRcdHBhZ2UucG1hID0gZW50cnlbMV0gPT09IFwidHJ1ZVwiO1xuXHRcdH07XG5cblx0XHR2YXIgcmVnaW9uRmllbGRzOiBTdHJpbmdNYXA8KHJlZ2lvbjogVGV4dHVyZUF0bGFzUmVnaW9uKSA9PiB2b2lkPiA9IHt9O1xuXHRcdHJlZ2lvbkZpZWxkcy54eSA9IChyZWdpb246IFRleHR1cmVBdGxhc1JlZ2lvbikgPT4geyAvLyBEZXByZWNhdGVkLCB1c2UgYm91bmRzLlxuXHRcdFx0cmVnaW9uLnggPSBwYXJzZUludChlbnRyeVsxXSk7XG5cdFx0XHRyZWdpb24ueSA9IHBhcnNlSW50KGVudHJ5WzJdKTtcblx0XHR9O1xuXHRcdHJlZ2lvbkZpZWxkcy5zaXplID0gKHJlZ2lvbjogVGV4dHVyZUF0bGFzUmVnaW9uKSA9PiB7IC8vIERlcHJlY2F0ZWQsIHVzZSBib3VuZHMuXG5cdFx0XHRyZWdpb24ud2lkdGggPSBwYXJzZUludChlbnRyeVsxXSk7XG5cdFx0XHRyZWdpb24uaGVpZ2h0ID0gcGFyc2VJbnQoZW50cnlbMl0pO1xuXHRcdH07XG5cdFx0cmVnaW9uRmllbGRzLmJvdW5kcyA9IChyZWdpb246IFRleHR1cmVBdGxhc1JlZ2lvbikgPT4ge1xuXHRcdFx0cmVnaW9uLnggPSBwYXJzZUludChlbnRyeVsxXSk7XG5cdFx0XHRyZWdpb24ueSA9IHBhcnNlSW50KGVudHJ5WzJdKTtcblx0XHRcdHJlZ2lvbi53aWR0aCA9IHBhcnNlSW50KGVudHJ5WzNdKTtcblx0XHRcdHJlZ2lvbi5oZWlnaHQgPSBwYXJzZUludChlbnRyeVs0XSk7XG5cdFx0fTtcblx0XHRyZWdpb25GaWVsZHMub2Zmc2V0ID0gKHJlZ2lvbjogVGV4dHVyZUF0bGFzUmVnaW9uKSA9PiB7IC8vIERlcHJlY2F0ZWQsIHVzZSBvZmZzZXRzLlxuXHRcdFx0cmVnaW9uLm9mZnNldFggPSBwYXJzZUludChlbnRyeVsxXSk7XG5cdFx0XHRyZWdpb24ub2Zmc2V0WSA9IHBhcnNlSW50KGVudHJ5WzJdKTtcblx0XHR9O1xuXHRcdHJlZ2lvbkZpZWxkcy5vcmlnID0gKHJlZ2lvbjogVGV4dHVyZUF0bGFzUmVnaW9uKSA9PiB7IC8vIERlcHJlY2F0ZWQsIHVzZSBvZmZzZXRzLlxuXHRcdFx0cmVnaW9uLm9yaWdpbmFsV2lkdGggPSBwYXJzZUludChlbnRyeVsxXSk7XG5cdFx0XHRyZWdpb24ub3JpZ2luYWxIZWlnaHQgPSBwYXJzZUludChlbnRyeVsyXSk7XG5cdFx0fTtcblx0XHRyZWdpb25GaWVsZHMub2Zmc2V0cyA9IChyZWdpb246IFRleHR1cmVBdGxhc1JlZ2lvbikgPT4ge1xuXHRcdFx0cmVnaW9uLm9mZnNldFggPSBwYXJzZUludChlbnRyeVsxXSk7XG5cdFx0XHRyZWdpb24ub2Zmc2V0WSA9IHBhcnNlSW50KGVudHJ5WzJdKTtcblx0XHRcdHJlZ2lvbi5vcmlnaW5hbFdpZHRoID0gcGFyc2VJbnQoZW50cnlbM10pO1xuXHRcdFx0cmVnaW9uLm9yaWdpbmFsSGVpZ2h0ID0gcGFyc2VJbnQoZW50cnlbNF0pO1xuXHRcdH07XG5cdFx0cmVnaW9uRmllbGRzLnJvdGF0ZSA9IChyZWdpb246IFRleHR1cmVBdGxhc1JlZ2lvbikgPT4ge1xuXHRcdFx0Y29uc3QgdmFsdWUgPSBlbnRyeVsxXTtcblx0XHRcdGlmICh2YWx1ZSA9PT0gXCJ0cnVlXCIpXG5cdFx0XHRcdHJlZ2lvbi5kZWdyZWVzID0gOTA7XG5cdFx0XHRlbHNlIGlmICh2YWx1ZSAhPT0gXCJmYWxzZVwiKVxuXHRcdFx0XHRyZWdpb24uZGVncmVlcyA9IHBhcnNlSW50KHZhbHVlKTtcblx0XHR9O1xuXHRcdHJlZ2lvbkZpZWxkcy5pbmRleCA9IChyZWdpb246IFRleHR1cmVBdGxhc1JlZ2lvbikgPT4ge1xuXHRcdFx0cmVnaW9uLmluZGV4ID0gcGFyc2VJbnQoZW50cnlbMV0pO1xuXHRcdH07XG5cblx0XHRsZXQgbGluZSA9IHJlYWRlci5yZWFkTGluZSgpO1xuXHRcdC8vIElnbm9yZSBlbXB0eSBsaW5lcyBiZWZvcmUgZmlyc3QgZW50cnkuXG5cdFx0d2hpbGUgKGxpbmUgJiYgbGluZS50cmltKCkubGVuZ3RoID09PSAwKVxuXHRcdFx0bGluZSA9IHJlYWRlci5yZWFkTGluZSgpO1xuXHRcdC8vIEhlYWRlciBlbnRyaWVzLlxuXHRcdHdoaWxlICh0cnVlKSB7XG5cdFx0XHRpZiAoIWxpbmUgfHwgbGluZS50cmltKCkubGVuZ3RoID09PSAwKSBicmVhaztcblx0XHRcdGlmIChyZWFkZXIucmVhZEVudHJ5KGVudHJ5LCBsaW5lKSA9PT0gMCkgYnJlYWs7IC8vIFNpbGVudGx5IGlnbm9yZSBhbGwgaGVhZGVyIGZpZWxkcy5cblx0XHRcdGxpbmUgPSByZWFkZXIucmVhZExpbmUoKTtcblx0XHR9XG5cblx0XHQvLyBQYWdlIGFuZCByZWdpb24gZW50cmllcy5cblx0XHRsZXQgcGFnZTogVGV4dHVyZUF0bGFzUGFnZSB8IG51bGwgPSBudWxsO1xuXHRcdGxldCBuYW1lczogc3RyaW5nW10gfCBudWxsID0gbnVsbDtcblx0XHRsZXQgdmFsdWVzOiBudW1iZXJbXVtdIHwgbnVsbCA9IG51bGw7XG5cdFx0d2hpbGUgKHRydWUpIHtcblx0XHRcdGlmIChsaW5lID09PSBudWxsKSBicmVhaztcblx0XHRcdGlmIChsaW5lLnRyaW0oKS5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0cGFnZSA9IG51bGw7XG5cdFx0XHRcdGxpbmUgPSByZWFkZXIucmVhZExpbmUoKTtcblx0XHRcdH0gZWxzZSBpZiAoIXBhZ2UpIHtcblx0XHRcdFx0cGFnZSA9IG5ldyBUZXh0dXJlQXRsYXNQYWdlKGxpbmUudHJpbSgpKTtcblx0XHRcdFx0d2hpbGUgKHRydWUpIHtcblx0XHRcdFx0XHRpZiAocmVhZGVyLnJlYWRFbnRyeShlbnRyeSwgbGluZSA9IHJlYWRlci5yZWFkTGluZSgpKSA9PT0gMCkgYnJlYWs7XG5cdFx0XHRcdFx0Y29uc3QgZmllbGQgPSBwYWdlRmllbGRzW2VudHJ5WzBdXTtcblx0XHRcdFx0XHRpZiAoZmllbGQpIGZpZWxkKHBhZ2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMucGFnZXMucHVzaChwYWdlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHJlZ2lvbiA9IG5ldyBUZXh0dXJlQXRsYXNSZWdpb24ocGFnZSwgbGluZSk7XG5cblx0XHRcdFx0d2hpbGUgKHRydWUpIHtcblx0XHRcdFx0XHRjb25zdCBjb3VudCA9IHJlYWRlci5yZWFkRW50cnkoZW50cnksIGxpbmUgPSByZWFkZXIucmVhZExpbmUoKSk7XG5cdFx0XHRcdFx0aWYgKGNvdW50ID09PSAwKSBicmVhaztcblx0XHRcdFx0XHRjb25zdCBmaWVsZCA9IHJlZ2lvbkZpZWxkc1tlbnRyeVswXV07XG5cdFx0XHRcdFx0aWYgKGZpZWxkKVxuXHRcdFx0XHRcdFx0ZmllbGQocmVnaW9uKTtcblx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdGlmICghbmFtZXMpIG5hbWVzID0gW107XG5cdFx0XHRcdFx0XHRpZiAoIXZhbHVlcykgdmFsdWVzID0gW107XG5cdFx0XHRcdFx0XHRuYW1lcy5wdXNoKGVudHJ5WzBdKTtcblx0XHRcdFx0XHRcdGNvbnN0IGVudHJ5VmFsdWVzOiBudW1iZXJbXSA9IFtdO1xuXHRcdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKVxuXHRcdFx0XHRcdFx0XHRlbnRyeVZhbHVlcy5wdXNoKHBhcnNlSW50KGVudHJ5W2kgKyAxXSkpO1xuXHRcdFx0XHRcdFx0dmFsdWVzLnB1c2goZW50cnlWYWx1ZXMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAocmVnaW9uLm9yaWdpbmFsV2lkdGggPT09IDAgJiYgcmVnaW9uLm9yaWdpbmFsSGVpZ2h0ID09PSAwKSB7XG5cdFx0XHRcdFx0cmVnaW9uLm9yaWdpbmFsV2lkdGggPSByZWdpb24ud2lkdGg7XG5cdFx0XHRcdFx0cmVnaW9uLm9yaWdpbmFsSGVpZ2h0ID0gcmVnaW9uLmhlaWdodDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAobmFtZXMgJiYgbmFtZXMubGVuZ3RoID4gMCAmJiB2YWx1ZXMgJiYgdmFsdWVzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRyZWdpb24ubmFtZXMgPSBuYW1lcztcblx0XHRcdFx0XHRyZWdpb24udmFsdWVzID0gdmFsdWVzO1xuXHRcdFx0XHRcdG5hbWVzID0gbnVsbDtcblx0XHRcdFx0XHR2YWx1ZXMgPSBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJlZ2lvbi51ID0gcmVnaW9uLnggLyBwYWdlLndpZHRoO1xuXHRcdFx0XHRyZWdpb24udiA9IHJlZ2lvbi55IC8gcGFnZS5oZWlnaHQ7XG5cdFx0XHRcdGlmIChyZWdpb24uZGVncmVlcyA9PT0gOTApIHtcblx0XHRcdFx0XHRyZWdpb24udTIgPSAocmVnaW9uLnggKyByZWdpb24uaGVpZ2h0KSAvIHBhZ2Uud2lkdGg7XG5cdFx0XHRcdFx0cmVnaW9uLnYyID0gKHJlZ2lvbi55ICsgcmVnaW9uLndpZHRoKSAvIHBhZ2UuaGVpZ2h0O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJlZ2lvbi51MiA9IChyZWdpb24ueCArIHJlZ2lvbi53aWR0aCkgLyBwYWdlLndpZHRoO1xuXHRcdFx0XHRcdHJlZ2lvbi52MiA9IChyZWdpb24ueSArIHJlZ2lvbi5oZWlnaHQpIC8gcGFnZS5oZWlnaHQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5yZWdpb25zLnB1c2gocmVnaW9uKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRmaW5kUmVnaW9uIChuYW1lOiBzdHJpbmcpOiBUZXh0dXJlQXRsYXNSZWdpb24gfCBudWxsIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucmVnaW9ucy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKHRoaXMucmVnaW9uc1tpXS5uYW1lID09PSBuYW1lKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnJlZ2lvbnNbaV07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0c2V0VGV4dHVyZXMgKGFzc2V0TWFuYWdlcjogQXNzZXRNYW5hZ2VyQmFzZSwgcGF0aFByZWZpeDogc3RyaW5nID0gXCJcIikge1xuXHRcdGZvciAoY29uc3QgcGFnZSBvZiB0aGlzLnBhZ2VzKVxuXHRcdFx0cGFnZS5zZXRUZXh0dXJlKGFzc2V0TWFuYWdlci5nZXQocGF0aFByZWZpeCArIHBhZ2UubmFtZSkgYXMgVGV4dHVyZSk7XG5cdH1cblxuXHRkaXNwb3NlICgpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHRoaXMucGFnZXNbaV0udGV4dHVyZT8uZGlzcG9zZSgpO1xuXHRcdH1cblx0fVxufVxuXG5jbGFzcyBUZXh0dXJlQXRsYXNSZWFkZXIge1xuXHRsaW5lczogQXJyYXk8c3RyaW5nPjtcblx0aW5kZXg6IG51bWJlciA9IDA7XG5cblx0Y29uc3RydWN0b3IgKHRleHQ6IHN0cmluZykge1xuXHRcdHRoaXMubGluZXMgPSB0ZXh0LnNwbGl0KC9cXHJcXG58XFxyfFxcbi8pO1xuXHR9XG5cblx0cmVhZExpbmUgKCk6IHN0cmluZyB8IG51bGwge1xuXHRcdGlmICh0aGlzLmluZGV4ID49IHRoaXMubGluZXMubGVuZ3RoKVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0cmV0dXJuIHRoaXMubGluZXNbdGhpcy5pbmRleCsrXTtcblx0fVxuXG5cdHJlYWRFbnRyeSAoZW50cnk6IHN0cmluZ1tdLCBsaW5lOiBzdHJpbmcgfCBudWxsKTogbnVtYmVyIHtcblx0XHRpZiAoIWxpbmUpIHJldHVybiAwO1xuXHRcdGxpbmUgPSBsaW5lLnRyaW0oKTtcblx0XHRpZiAobGluZS5sZW5ndGggPT09IDApIHJldHVybiAwO1xuXG5cdFx0Y29uc3QgY29sb24gPSBsaW5lLmluZGV4T2YoJzonKTtcblx0XHRpZiAoY29sb24gPT09IC0xKSByZXR1cm4gMDtcblx0XHRlbnRyeVswXSA9IGxpbmUuc3Vic3RyKDAsIGNvbG9uKS50cmltKCk7XG5cdFx0Zm9yIChsZXQgaSA9IDEsIGxhc3RNYXRjaCA9IGNvbG9uICsgMTsgOyBpKyspIHtcblx0XHRcdGNvbnN0IGNvbW1hID0gbGluZS5pbmRleE9mKCcsJywgbGFzdE1hdGNoKTtcblx0XHRcdGlmIChjb21tYSA9PT0gLTEpIHtcblx0XHRcdFx0ZW50cnlbaV0gPSBsaW5lLnN1YnN0cihsYXN0TWF0Y2gpLnRyaW0oKTtcblx0XHRcdFx0cmV0dXJuIGk7XG5cdFx0XHR9XG5cdFx0XHRlbnRyeVtpXSA9IGxpbmUuc3Vic3RyKGxhc3RNYXRjaCwgY29tbWEgLSBsYXN0TWF0Y2gpLnRyaW0oKTtcblx0XHRcdGxhc3RNYXRjaCA9IGNvbW1hICsgMTtcblx0XHRcdGlmIChpID09PSA0KSByZXR1cm4gNDtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGNsYXNzIFRleHR1cmVBdGxhc1BhZ2Uge1xuXHRuYW1lOiBzdHJpbmc7XG5cdG1pbkZpbHRlcjogVGV4dHVyZUZpbHRlciA9IFRleHR1cmVGaWx0ZXIuTmVhcmVzdDtcblx0bWFnRmlsdGVyOiBUZXh0dXJlRmlsdGVyID0gVGV4dHVyZUZpbHRlci5OZWFyZXN0O1xuXHR1V3JhcDogVGV4dHVyZVdyYXAgPSBUZXh0dXJlV3JhcC5DbGFtcFRvRWRnZTtcblx0dldyYXA6IFRleHR1cmVXcmFwID0gVGV4dHVyZVdyYXAuQ2xhbXBUb0VkZ2U7XG5cdHRleHR1cmU6IFRleHR1cmUgfCBudWxsID0gbnVsbDtcblx0d2lkdGg6IG51bWJlciA9IDA7XG5cdGhlaWdodDogbnVtYmVyID0gMDtcblx0cG1hOiBib29sZWFuID0gZmFsc2U7XG5cdHJlZ2lvbnMgPSBbXSBhcyBUZXh0dXJlQXRsYXNSZWdpb25bXTtcblxuXHRjb25zdHJ1Y3RvciAobmFtZTogc3RyaW5nKSB7XG5cdFx0dGhpcy5uYW1lID0gbmFtZTtcblx0fVxuXG5cdHNldFRleHR1cmUgKHRleHR1cmU6IFRleHR1cmUpIHtcblx0XHR0aGlzLnRleHR1cmUgPSB0ZXh0dXJlO1xuXHRcdHRleHR1cmUuc2V0RmlsdGVycyh0aGlzLm1pbkZpbHRlciwgdGhpcy5tYWdGaWx0ZXIpO1xuXHRcdHRleHR1cmUuc2V0V3JhcHModGhpcy51V3JhcCwgdGhpcy52V3JhcCk7XG5cdFx0Zm9yIChjb25zdCByZWdpb24gb2YgdGhpcy5yZWdpb25zKVxuXHRcdFx0cmVnaW9uLnRleHR1cmUgPSB0ZXh0dXJlO1xuXHR9XG59XG5cbmV4cG9ydCBjbGFzcyBUZXh0dXJlQXRsYXNSZWdpb24gZXh0ZW5kcyBUZXh0dXJlUmVnaW9uIHtcblx0cGFnZTogVGV4dHVyZUF0bGFzUGFnZTtcblx0bmFtZTogc3RyaW5nO1xuXHR4OiBudW1iZXIgPSAwO1xuXHR5OiBudW1iZXIgPSAwO1xuXHRvZmZzZXRYOiBudW1iZXIgPSAwO1xuXHRvZmZzZXRZOiBudW1iZXIgPSAwO1xuXHRvcmlnaW5hbFdpZHRoOiBudW1iZXIgPSAwO1xuXHRvcmlnaW5hbEhlaWdodDogbnVtYmVyID0gMDtcblx0aW5kZXg6IG51bWJlciA9IDA7XG5cdGRlZ3JlZXM6IG51bWJlciA9IDA7XG5cdG5hbWVzOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsO1xuXHR2YWx1ZXM6IG51bWJlcltdW10gfCBudWxsID0gbnVsbDtcblxuXHRjb25zdHJ1Y3RvciAocGFnZTogVGV4dHVyZUF0bGFzUGFnZSwgbmFtZTogc3RyaW5nKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnBhZ2UgPSBwYWdlO1xuXHRcdHRoaXMubmFtZSA9IG5hbWU7XG5cdFx0cGFnZS5yZWdpb25zLnB1c2godGhpcyk7XG5cdH1cbn1cbiJdfQ==
|
|
@@ -26,36 +26,24 @@
|
|
|
26
26
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
27
27
|
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
28
28
|
*****************************************************************************/
|
|
29
|
-
import { Bone } from "./Bone.js";
|
|
30
|
-
import {
|
|
31
|
-
import {
|
|
32
|
-
import {
|
|
33
|
-
import {
|
|
34
|
-
|
|
35
|
-
|
|
29
|
+
import type { Bone } from "./Bone.js";
|
|
30
|
+
import type { BonePose } from "./BonePose.js";
|
|
31
|
+
import { Constraint } from "./Constraint.js";
|
|
32
|
+
import type { Physics } from "./Physics.js";
|
|
33
|
+
import type { Skeleton } from "./Skeleton.js";
|
|
34
|
+
import type { TransformConstraintData } from "./TransformConstraintData.js";
|
|
35
|
+
import { TransformConstraintPose } from "./TransformConstraintPose.js";
|
|
36
|
+
/** Adjusts the world transform of the constrained bones to match that of the source bone.
|
|
36
37
|
*
|
|
37
38
|
* See [Transform constraints](http://esotericsoftware.com/spine-transform-constraints) in the Spine User Guide. */
|
|
38
|
-
export declare class TransformConstraint
|
|
39
|
-
/** The transform constraint's setup pose data. */
|
|
40
|
-
data: TransformConstraintData;
|
|
39
|
+
export declare class TransformConstraint extends Constraint<TransformConstraint, TransformConstraintData, TransformConstraintPose> {
|
|
41
40
|
/** The bones that will be modified by this transform constraint. */
|
|
42
|
-
bones: Array<
|
|
43
|
-
/** The
|
|
44
|
-
|
|
45
|
-
mixRotate: number;
|
|
46
|
-
mixX: number;
|
|
47
|
-
mixY: number;
|
|
48
|
-
mixScaleX: number;
|
|
49
|
-
mixScaleY: number;
|
|
50
|
-
mixShearY: number;
|
|
51
|
-
temp: Vector2;
|
|
52
|
-
active: boolean;
|
|
41
|
+
bones: Array<BonePose>;
|
|
42
|
+
/** The bone whose world transform will be copied to the constrained bones. */
|
|
43
|
+
source: Bone;
|
|
53
44
|
constructor(data: TransformConstraintData, skeleton: Skeleton);
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
applyRelativeWorld(): void;
|
|
59
|
-
applyAbsoluteLocal(): void;
|
|
60
|
-
applyRelativeLocal(): void;
|
|
45
|
+
copy(skeleton: Skeleton): TransformConstraint;
|
|
46
|
+
update(skeleton: Skeleton, physics: Physics): void;
|
|
47
|
+
sort(skeleton: Skeleton): void;
|
|
48
|
+
isSourceActive(): boolean;
|
|
61
49
|
}
|