@esotericsoftware/spine-core 4.2.115 → 4.3.0

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.
Files changed (129) hide show
  1. package/dist/Animation.d.ts +426 -274
  2. package/dist/Animation.js +1174 -1210
  3. package/dist/AnimationState.d.ts +246 -201
  4. package/dist/AnimationState.js +508 -471
  5. package/dist/AnimationStateData.d.ts +12 -10
  6. package/dist/AnimationStateData.js +19 -20
  7. package/dist/AssetManagerBase.d.ts +29 -23
  8. package/dist/AssetManagerBase.js +67 -43
  9. package/dist/AtlasAttachmentLoader.d.ts +18 -12
  10. package/dist/AtlasAttachmentLoader.js +28 -39
  11. package/dist/Bone.d.ts +15 -109
  12. package/dist/Bone.js +22 -362
  13. package/dist/BoneData.d.ts +13 -28
  14. package/dist/BoneData.js +20 -29
  15. package/dist/BonePose.d.ts +130 -0
  16. package/dist/BonePose.js +426 -0
  17. package/dist/Constraint.d.ts +41 -0
  18. package/dist/Constraint.js +38 -0
  19. package/dist/ConstraintData.d.ts +7 -5
  20. package/dist/ConstraintData.js +5 -9
  21. package/dist/DrawOrder.d.ts +48 -0
  22. package/dist/DrawOrder.js +64 -0
  23. package/dist/Event.d.ts +11 -6
  24. package/dist/Event.js +10 -5
  25. package/dist/EventData.d.ts +10 -6
  26. package/dist/EventData.js +18 -7
  27. package/dist/IkConstraint.d.ts +22 -28
  28. package/dist/IkConstraint.js +115 -117
  29. package/dist/IkConstraintData.d.ts +23 -18
  30. package/dist/IkConstraintData.js +32 -22
  31. package/dist/IkConstraintPose.d.ts +49 -0
  32. package/dist/IkConstraintPose.js +55 -0
  33. package/dist/PathConstraint.d.ts +18 -22
  34. package/dist/PathConstraint.js +160 -136
  35. package/dist/PathConstraintData.d.ts +11 -14
  36. package/dist/PathConstraintData.js +14 -16
  37. package/dist/PathConstraintPose.d.ts +43 -0
  38. package/dist/PathConstraintPose.js +49 -0
  39. package/dist/Physics.d.ts +39 -0
  40. package/dist/Physics.js +41 -0
  41. package/dist/PhysicsConstraint.d.ts +26 -30
  42. package/dist/PhysicsConstraint.js +102 -94
  43. package/dist/PhysicsConstraintData.d.ts +22 -12
  44. package/dist/PhysicsConstraintData.js +23 -12
  45. package/dist/PhysicsConstraintPose.d.ts +47 -0
  46. package/dist/PhysicsConstraintPose.js +55 -0
  47. package/dist/Pose.d.ts +33 -0
  48. package/dist/Pose.js +30 -0
  49. package/dist/Posed.d.ts +58 -0
  50. package/dist/Posed.js +78 -0
  51. package/dist/PosedActive.d.ts +41 -0
  52. package/dist/{attachments/HasTextureRegion.js → PosedActive.js} +17 -2
  53. package/dist/PosedData.d.ts +40 -0
  54. package/dist/PosedData.js +45 -0
  55. package/dist/Skeleton.d.ts +110 -99
  56. package/dist/Skeleton.js +271 -449
  57. package/dist/SkeletonBinary.d.ts +2 -2
  58. package/dist/SkeletonBinary.js +644 -466
  59. package/dist/SkeletonBounds.d.ts +4 -4
  60. package/dist/SkeletonBounds.js +45 -46
  61. package/dist/SkeletonClipping.d.ts +26 -22
  62. package/dist/SkeletonClipping.js +654 -340
  63. package/dist/SkeletonData.d.ts +18 -35
  64. package/dist/SkeletonData.js +57 -97
  65. package/dist/SkeletonJson.d.ts +8 -6
  66. package/dist/SkeletonJson.js +892 -641
  67. package/dist/SkeletonRendererCore.d.ts +58 -0
  68. package/dist/SkeletonRendererCore.js +310 -0
  69. package/dist/Skin.d.ts +20 -16
  70. package/dist/Skin.js +58 -53
  71. package/dist/Slider.d.ts +46 -0
  72. package/dist/Slider.js +115 -0
  73. package/dist/SliderData.d.ts +58 -0
  74. package/dist/SliderData.js +59 -0
  75. package/dist/SliderPose.d.ts +37 -0
  76. package/dist/SliderPose.js +40 -0
  77. package/dist/Slot.d.ts +16 -38
  78. package/dist/Slot.js +37 -60
  79. package/dist/SlotData.d.ts +5 -12
  80. package/dist/SlotData.js +7 -15
  81. package/dist/SlotPose.d.ts +59 -0
  82. package/dist/SlotPose.js +81 -0
  83. package/dist/Texture.d.ts +1 -0
  84. package/dist/Texture.js +2 -1
  85. package/dist/TextureAtlas.d.ts +3 -3
  86. package/dist/TextureAtlas.js +49 -49
  87. package/dist/TransformConstraint.d.ts +16 -28
  88. package/dist/TransformConstraint.js +72 -209
  89. package/dist/TransformConstraintData.d.ts +108 -20
  90. package/dist/TransformConstraintData.js +274 -24
  91. package/dist/TransformConstraintPose.d.ts +45 -0
  92. package/dist/TransformConstraintPose.js +52 -0
  93. package/dist/Triangulator.d.ts +1 -1
  94. package/dist/Triangulator.js +91 -107
  95. package/dist/{Updatable.d.ts → Update.d.ts} +5 -12
  96. package/dist/Update.js +30 -0
  97. package/dist/Utils.d.ts +13 -4
  98. package/dist/Utils.js +78 -37
  99. package/dist/attachments/Attachment.d.ts +27 -19
  100. package/dist/attachments/Attachment.js +59 -35
  101. package/dist/attachments/AttachmentLoader.d.ts +14 -14
  102. package/dist/attachments/AttachmentLoader.js +1 -1
  103. package/dist/attachments/BoundingBoxAttachment.d.ts +1 -1
  104. package/dist/attachments/BoundingBoxAttachment.js +2 -2
  105. package/dist/attachments/ClippingAttachment.d.ts +10 -3
  106. package/dist/attachments/ClippingAttachment.js +12 -3
  107. package/dist/attachments/{HasTextureRegion.d.ts → HasSequence.d.ts} +11 -14
  108. package/dist/attachments/HasSequence.js +30 -0
  109. package/dist/attachments/MeshAttachment.d.ts +28 -35
  110. package/dist/attachments/MeshAttachment.js +85 -97
  111. package/dist/attachments/PathAttachment.d.ts +3 -3
  112. package/dist/attachments/PathAttachment.js +6 -6
  113. package/dist/attachments/PointAttachment.d.ts +11 -6
  114. package/dist/attachments/PointAttachment.js +8 -3
  115. package/dist/attachments/RegionAttachment.d.ts +25 -27
  116. package/dist/attachments/RegionAttachment.js +101 -113
  117. package/dist/attachments/Sequence.d.ts +31 -6
  118. package/dist/attachments/Sequence.js +79 -13
  119. package/dist/esm/spine-core.min.mjs +2 -2
  120. package/dist/esm/spine-core.mjs +7651 -6090
  121. package/dist/esm/spine-core.mjs.map +4 -4
  122. package/dist/iife/spine-core.js +7651 -6090
  123. package/dist/iife/spine-core.js.map +4 -4
  124. package/dist/iife/spine-core.min.js +2 -2
  125. package/dist/index.d.ts +32 -11
  126. package/dist/index.js +33 -12
  127. package/dist/polyfills.js +4 -5
  128. package/package.json +1 -1
  129. package/dist/Updatable.js +0 -30
@@ -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, TextureWrap, TextureRegion } from "./Texture.js";
29
+ import { TextureFilter, TextureRegion, TextureWrap } from "./Texture.js";
30
30
  import { Utils } from "./Utils.js";
31
31
  export class TextureAtlas {
32
- pages = new Array();
33
- regions = new Array();
32
+ pages = [];
33
+ regions = [];
34
34
  constructor(atlasText) {
35
- let reader = new TextureAtlasReader(atlasText);
36
- let entry = new Array(4);
37
- let pageFields = {};
38
- pageFields["size"] = (page) => {
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["format"] = () => {
42
+ pageFields.format = () => {
43
43
  // page.format = Format[tuple[0]]; we don't need format in WebGL
44
44
  };
45
- pageFields["filter"] = (page) => {
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["repeat"] = (page) => {
50
- if (entry[1].indexOf('x') != -1)
49
+ pageFields.repeat = (page) => {
50
+ if (entry[1].indexOf('x') !== -1)
51
51
  page.uWrap = TextureWrap.Repeat;
52
- if (entry[1].indexOf('y') != -1)
52
+ if (entry[1].indexOf('y') !== -1)
53
53
  page.vWrap = TextureWrap.Repeat;
54
54
  };
55
- pageFields["pma"] = (page) => {
56
- page.pma = entry[1] == "true";
55
+ pageFields.pma = (page) => {
56
+ page.pma = entry[1] === "true";
57
57
  };
58
58
  var regionFields = {};
59
- regionFields["xy"] = (region) => {
59
+ regionFields.xy = (region) => {
60
60
  region.x = parseInt(entry[1]);
61
61
  region.y = parseInt(entry[2]);
62
62
  };
63
- regionFields["size"] = (region) => {
63
+ regionFields.size = (region) => {
64
64
  region.width = parseInt(entry[1]);
65
65
  region.height = parseInt(entry[2]);
66
66
  };
67
- regionFields["bounds"] = (region) => {
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["offset"] = (region) => {
73
+ regionFields.offset = (region) => {
74
74
  region.offsetX = parseInt(entry[1]);
75
75
  region.offsetY = parseInt(entry[2]);
76
76
  };
77
- regionFields["orig"] = (region) => {
77
+ regionFields.orig = (region) => {
78
78
  region.originalWidth = parseInt(entry[1]);
79
79
  region.originalHeight = parseInt(entry[2]);
80
80
  };
81
- regionFields["offsets"] = (region) => {
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["rotate"] = (region) => {
88
- let value = entry[1];
89
- if (value == "true")
87
+ regionFields.rotate = (region) => {
88
+ const value = entry[1];
89
+ if (value === "true")
90
90
  region.degrees = 90;
91
- else if (value != "false")
91
+ else if (value !== "false")
92
92
  region.degrees = parseInt(value);
93
93
  };
94
- regionFields["index"] = (region) => {
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 == 0)
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 == 0)
103
+ if (!line || line.trim().length === 0)
104
104
  break;
105
- if (reader.readEntry(entry, line) == 0)
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 == 0) {
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()) == 0)
123
+ if (reader.readEntry(entry, line = reader.readLine()) === 0)
124
124
  break;
125
- let field = pageFields[entry[0]];
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
- let region = new TextureAtlasRegion(page, line);
132
+ const region = new TextureAtlasRegion(page, line);
133
133
  while (true) {
134
- let count = reader.readEntry(entry, line = reader.readLine());
135
- if (count == 0)
134
+ const count = reader.readEntry(entry, line = reader.readLine());
135
+ if (count === 0)
136
136
  break;
137
- let field = regionFields[entry[0]];
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
- let entryValues = [];
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 == 0 && region.originalHeight == 0) {
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 == 90) {
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 == 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 (let page of this.pages)
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 == 0)
209
+ if (line.length === 0)
210
210
  return 0;
211
- let colon = line.indexOf(':');
212
- if (colon == -1)
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
- let comma = line.indexOf(',', lastMatch);
217
- if (comma == -1) {
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 == 4)
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 = new Array();
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 (let region of this.regions)
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 { Physics, Skeleton } from "./Skeleton.js";
31
- import { TransformConstraintData } from "./TransformConstraintData.js";
32
- import { Updatable } from "./Updatable.js";
33
- import { Vector2 } from "./Utils.js";
34
- /** Stores the current pose for a transform constraint. A transform constraint adjusts the world transform of the constrained
35
- * bones to match that of the target bone.
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 implements Updatable {
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<Bone>;
43
- /** The target bone whose world transform will be copied to the constrained bones. */
44
- target: Bone;
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
- isActive(): boolean;
55
- setToSetupPose(): void;
56
- update(physics: Physics): void;
57
- applyAbsoluteWorld(): void;
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
  }