@glandais/vcyclist-engine 6.0.0 → 6.0.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.
@@ -30,123 +30,125 @@
30
30
  var imul = Math.imul;
31
31
  var hypot = Math.hypot;
32
32
  var sign = Math.sign;
33
- var protoOf = kotlin_kotlin.$_$.j7;
34
- var initMetadataForCompanion = kotlin_kotlin.$_$.v6;
33
+ var protoOf = kotlin_kotlin.$_$.o7;
34
+ var initMetadataForCompanion = kotlin_kotlin.$_$.a7;
35
35
  var VOID = kotlin_kotlin.$_$.a;
36
- var getNumberHashCode = kotlin_kotlin.$_$.q6;
37
- var equals = kotlin_kotlin.$_$.n6;
38
- var initMetadataForClass = kotlin_kotlin.$_$.u6;
39
- var toString = kotlin_kotlin.$_$.m7;
40
- var hashCode = kotlin_kotlin.$_$.t6;
36
+ var getNumberHashCode = kotlin_kotlin.$_$.v6;
37
+ var equals = kotlin_kotlin.$_$.s6;
38
+ var initMetadataForClass = kotlin_kotlin.$_$.z6;
39
+ var toString = kotlin_kotlin.$_$.r7;
40
+ var hashCode = kotlin_kotlin.$_$.y6;
41
41
  var ElevationGainPreset_DEM_getInstance = kotlin_io_github_glandais_gpx.$_$.c;
42
- var initMetadataForObject = kotlin_kotlin.$_$.a7;
43
- var getBooleanHashCode = kotlin_kotlin.$_$.p6;
44
- var isFinite = kotlin_kotlin.$_$.ma;
45
- var IllegalArgumentException_init_$Create$ = kotlin_kotlin.$_$.a2;
46
- var Unit_instance = kotlin_kotlin.$_$.g1;
42
+ var initMetadataForObject = kotlin_kotlin.$_$.f7;
43
+ var getBooleanHashCode = kotlin_kotlin.$_$.u6;
44
+ var isFinite = kotlin_kotlin.$_$.ab;
45
+ var IllegalArgumentException_init_$Create$ = kotlin_kotlin.$_$.b2;
46
+ var Unit_instance = kotlin_kotlin.$_$.h1;
47
47
  var ElevationGainOptions = kotlin_io_github_glandais_gpx.$_$.y;
48
- var CoroutineImpl = kotlin_kotlin.$_$.d5;
48
+ var CoroutineImpl = kotlin_kotlin.$_$.h5;
49
49
  var PointPerDistance_instance = kotlin_io_github_glandais_gpx.$_$.o;
50
50
  var ElevationStep_instance = kotlin_io_github_glandais_gpx.$_$.l;
51
- var get_COROUTINE_SUSPENDED = kotlin_kotlin.$_$.o4;
51
+ var get_COROUTINE_SUSPENDED = kotlin_kotlin.$_$.s4;
52
52
  var PointPerSecond_instance = kotlin_io_github_glandais_gpx.$_$.p;
53
53
  var PathSimplifier_instance = kotlin_io_github_glandais_gpx.$_$.m;
54
54
  var ElevationGain_instance = kotlin_io_github_glandais_gpx.$_$.k;
55
- var initMetadataForCoroutine = kotlin_kotlin.$_$.w6;
56
- var Companion_instance = kotlin_kotlin.$_$.e1;
57
- var collectionSizeOrDefault = kotlin_kotlin.$_$.x2;
58
- var ArrayList_init_$Create$ = kotlin_kotlin.$_$.i1;
59
- var enumEntries = kotlin_kotlin.$_$.f5;
60
- var Enum = kotlin_kotlin.$_$.t9;
61
- var noWhenBranchMatchedException = kotlin_kotlin.$_$.qa;
62
- var last = kotlin_kotlin.$_$.q3;
63
- var toIntArray = kotlin_kotlin.$_$.f4;
64
- var sortedWith = kotlin_kotlin.$_$.b4;
65
- var toMutableList = kotlin_kotlin.$_$.j4;
66
- var ArrayList_init_$Create$_0 = kotlin_kotlin.$_$.j1;
67
- var first = kotlin_kotlin.$_$.j3;
68
- var removeAll = kotlin_kotlin.$_$.w3;
69
- var numberRangeToNumber = kotlin_kotlin.$_$.f7;
55
+ var initMetadataForCoroutine = kotlin_kotlin.$_$.b7;
56
+ var Companion_instance = kotlin_kotlin.$_$.f1;
57
+ var collectionSizeOrDefault = kotlin_kotlin.$_$.y2;
58
+ var ArrayList_init_$Create$ = kotlin_kotlin.$_$.j1;
59
+ var enumEntries = kotlin_kotlin.$_$.j5;
60
+ var Enum = kotlin_kotlin.$_$.ha;
61
+ var noWhenBranchMatchedException = kotlin_kotlin.$_$.eb;
62
+ var last = kotlin_kotlin.$_$.s3;
63
+ var toIntArray = kotlin_kotlin.$_$.j4;
64
+ var sortedWith = kotlin_kotlin.$_$.f4;
65
+ var toMutableList = kotlin_kotlin.$_$.n4;
66
+ var ArrayList_init_$Create$_0 = kotlin_kotlin.$_$.k1;
67
+ var first = kotlin_kotlin.$_$.l3;
68
+ var removeAll = kotlin_kotlin.$_$.a4;
69
+ var numberRangeToNumber = kotlin_kotlin.$_$.k7;
70
70
  var Vector3D = kotlin_io_github_glandais_elevation.$_$.h;
71
- var emptyList = kotlin_kotlin.$_$.g3;
72
- var coerceIn = kotlin_kotlin.$_$.u7;
71
+ var emptyList = kotlin_kotlin.$_$.h3;
72
+ var coerceIn = kotlin_kotlin.$_$.z7;
73
73
  var DouglasPeucker_instance = kotlin_io_github_glandais_elevation.$_$.b;
74
- var FunctionAdapter = kotlin_kotlin.$_$.b6;
75
- var isInterface = kotlin_kotlin.$_$.c7;
76
- var Comparator = kotlin_kotlin.$_$.s9;
77
- var compareValues = kotlin_kotlin.$_$.m4;
78
- var until = kotlin_kotlin.$_$.z7;
79
- var Pair = kotlin_kotlin.$_$.z9;
80
- var listOf = kotlin_kotlin.$_$.r3;
81
- var initMetadataForInterface = kotlin_kotlin.$_$.y6;
82
- var Default_getInstance = kotlin_kotlin.$_$.b1;
83
- var equals_0 = kotlin_kotlin.$_$.p8;
84
- var isNaN_0 = kotlin_kotlin.$_$.oa;
74
+ var FunctionAdapter = kotlin_kotlin.$_$.g6;
75
+ var isInterface = kotlin_kotlin.$_$.h7;
76
+ var Comparator = kotlin_kotlin.$_$.ga;
77
+ var compareValues = kotlin_kotlin.$_$.q4;
78
+ var until = kotlin_kotlin.$_$.e8;
79
+ var Pair = kotlin_kotlin.$_$.na;
80
+ var listOf = kotlin_kotlin.$_$.t3;
81
+ var initMetadataForInterface = kotlin_kotlin.$_$.d7;
82
+ var Default_getInstance = kotlin_kotlin.$_$.c1;
83
+ var equals_0 = kotlin_kotlin.$_$.v8;
84
+ var isNaN_0 = kotlin_kotlin.$_$.cb;
85
85
  var PointField_TEMPERATURE_getInstance = kotlin_io_github_glandais_gpx.$_$.d;
86
86
  var get_entries = kotlin_io_github_glandais_gpx.$_$.a1;
87
87
  var Path = kotlin_io_github_glandais_gpx.$_$.z;
88
- var arrayCopy = kotlin_kotlin.$_$.t2;
89
- var sort = kotlin_kotlin.$_$.d4;
90
- var numberToInt = kotlin_kotlin.$_$.h7;
91
- var coerceIn_0 = kotlin_kotlin.$_$.v7;
92
- var lastOrNull = kotlin_kotlin.$_$.p3;
93
- var HashMap_init_$Create$ = kotlin_kotlin.$_$.l1;
94
- var fromInt = kotlin_kotlin.$_$.s5;
95
- var add = kotlin_kotlin.$_$.i5;
96
- var numberToLong = kotlin_kotlin.$_$.v5;
97
- var shiftLeft = kotlin_kotlin.$_$.w5;
98
- var Long = kotlin_kotlin.$_$.x9;
99
- var bitwiseAnd = kotlin_kotlin.$_$.j5;
100
- var bitwiseXor = kotlin_kotlin.$_$.l5;
101
- var copyOf = kotlin_kotlin.$_$.c3;
102
- var coerceAtLeast = kotlin_kotlin.$_$.r7;
103
- var round = kotlin_kotlin.$_$.p7;
104
- var listOf_0 = kotlin_kotlin.$_$.s3;
105
- var Collection = kotlin_kotlin.$_$.n2;
106
- var zipWithNext = kotlin_kotlin.$_$.l4;
107
- var toDoubleArray = kotlin_kotlin.$_$.e4;
108
- var joinToString = kotlin_kotlin.$_$.m3;
88
+ var arrayCopy = kotlin_kotlin.$_$.u2;
89
+ var sort = kotlin_kotlin.$_$.h4;
90
+ var numberToInt = kotlin_kotlin.$_$.m7;
91
+ var coerceIn_0 = kotlin_kotlin.$_$.a8;
92
+ var lastOrNull = kotlin_kotlin.$_$.r3;
93
+ var HashMap_init_$Create$ = kotlin_kotlin.$_$.m1;
94
+ var fromInt = kotlin_kotlin.$_$.w5;
95
+ var add = kotlin_kotlin.$_$.m5;
96
+ var numberToLong = kotlin_kotlin.$_$.a6;
97
+ var shiftLeft = kotlin_kotlin.$_$.b6;
98
+ var Long = kotlin_kotlin.$_$.la;
99
+ var bitwiseAnd = kotlin_kotlin.$_$.n5;
100
+ var bitwiseXor = kotlin_kotlin.$_$.p5;
101
+ var copyOf = kotlin_kotlin.$_$.d3;
102
+ var coerceAtLeast = kotlin_kotlin.$_$.w7;
103
+ var fill = kotlin_kotlin.$_$.i3;
104
+ var round = kotlin_kotlin.$_$.u7;
105
+ var booleanArray = kotlin_kotlin.$_$.i6;
106
+ var listOf_0 = kotlin_kotlin.$_$.u3;
107
+ var Collection = kotlin_kotlin.$_$.o2;
108
+ var zipWithNext = kotlin_kotlin.$_$.p4;
109
+ var toDoubleArray = kotlin_kotlin.$_$.i4;
110
+ var joinToString = kotlin_kotlin.$_$.o3;
109
111
  var GpxParser_instance = kotlin_io_github_glandais_gpx.$_$.e;
110
- var copyToArray = kotlin_kotlin.$_$.f3;
112
+ var copyToArray = kotlin_kotlin.$_$.g3;
111
113
  var firstTrackAsPath = kotlin_io_github_glandais_gpx.$_$.r;
112
114
  var tracksAsPaths = kotlin_io_github_glandais_gpx.$_$.v;
113
115
  var segmentsAsPaths = kotlin_io_github_glandais_gpx.$_$.t;
114
116
  var GpxPathKind_TRACK_getInstance = kotlin_io_github_glandais_gpx.$_$.b;
115
- var setOf = kotlin_kotlin.$_$.z3;
117
+ var setOf = kotlin_kotlin.$_$.d4;
116
118
  var GpxPathKind_ROUTE_getInstance = kotlin_io_github_glandais_gpx.$_$.a;
117
119
  var GpxWriter_instance = kotlin_io_github_glandais_gpx.$_$.g;
118
- var toList = kotlin_kotlin.$_$.i4;
119
- var Companion_getInstance = kotlin_kotlin.$_$.d1;
120
+ var toList = kotlin_kotlin.$_$.m4;
121
+ var Companion_getInstance = kotlin_kotlin.$_$.e1;
120
122
  var pathsToGpxDocument = kotlin_io_github_glandais_gpx.$_$.s;
121
123
  var toGpxDocument = kotlin_io_github_glandais_gpx.$_$.u;
122
124
  var GlobalScope_instance = kotlin_org_jetbrains_kotlinx_kotlinx_coroutines_core.$_$.a;
123
125
  var promise = kotlin_org_jetbrains_kotlinx_kotlinx_coroutines_core.$_$.l;
124
126
  var Companion_getInstance_0 = kotlin_io_github_glandais_gpx.$_$.n;
125
- var IllegalStateException_init_$Create$ = kotlin_kotlin.$_$.c2;
127
+ var IllegalStateException_init_$Create$ = kotlin_kotlin.$_$.d2;
126
128
  var CsvOptions = kotlin_io_github_glandais_gpx.$_$.w;
127
129
  var CsvWriter_instance = kotlin_io_github_glandais_gpx.$_$.h;
128
- var firstOrNull = kotlin_kotlin.$_$.q8;
129
- var Char = kotlin_kotlin.$_$.r9;
130
- var charSequenceLength = kotlin_kotlin.$_$.i6;
130
+ var firstOrNull = kotlin_kotlin.$_$.w8;
131
+ var Char = kotlin_kotlin.$_$.fa;
132
+ var charSequenceLength = kotlin_kotlin.$_$.n6;
131
133
  var JsonOptions = kotlin_io_github_glandais_gpx.$_$.x;
132
134
  var JsonWriter_instance = kotlin_io_github_glandais_gpx.$_$.i;
133
135
  var toFitBytes = kotlin_io_github_glandais_fit.$_$.a;
134
- var Companion_getInstance_1 = kotlin_kotlin.$_$.c1;
135
- var DurationUnit_MILLISECONDS_getInstance = kotlin_kotlin.$_$.w;
136
- var toDuration = kotlin_kotlin.$_$.q9;
136
+ var Companion_getInstance_1 = kotlin_kotlin.$_$.d1;
137
+ var DurationUnit_MILLISECONDS_getInstance = kotlin_kotlin.$_$.x;
138
+ var toDuration = kotlin_kotlin.$_$.ea;
137
139
  var toFitBytes_0 = kotlin_io_github_glandais_fit.$_$.b;
138
- var toNumber = kotlin_kotlin.$_$.a6;
140
+ var toNumber = kotlin_kotlin.$_$.f6;
139
141
  var Companion_getInstance_2 = kotlin_io_github_glandais_gpx.$_$.f;
140
142
  var GpxWaypoint = kotlin_io_github_glandais_gpx.$_$.q;
141
143
  var Companion_instance_0 = kotlin_io_github_glandais_gpx.$_$.j;
142
144
  var ElevationProvider = kotlin_io_github_glandais_elevation.$_$.e;
143
145
  var ElevationProviderConfig = kotlin_io_github_glandais_elevation.$_$.d;
144
- var sorted = kotlin_kotlin.$_$.c4;
145
- var THROW_CCE = kotlin_kotlin.$_$.ca;
146
+ var sorted = kotlin_kotlin.$_$.g4;
147
+ var THROW_CCE = kotlin_kotlin.$_$.qa;
146
148
  var CoroutineScope = kotlin_org_jetbrains_kotlinx_kotlinx_coroutines_core.$_$.j;
147
- var initMetadataForLambda = kotlin_kotlin.$_$.z6;
148
- var constructCallableReference = kotlin_kotlin.$_$.k6;
149
- var setOf_0 = kotlin_kotlin.$_$.a4;
149
+ var initMetadataForLambda = kotlin_kotlin.$_$.e7;
150
+ var constructCallableReference = kotlin_kotlin.$_$.p6;
151
+ var setOf_0 = kotlin_kotlin.$_$.e4;
150
152
  //endregion
151
153
  //region block: pre-declaration
152
154
  initMetadataForCompanion(Companion);
@@ -1494,7 +1496,7 @@
1494
1496
  $l$loop: do {
1495
1497
  var i = inductionVariable;
1496
1498
  inductionVariable = inductionVariable + 1 | 0;
1497
- var dx = (_this__u8e3s4.longitude_a9xl_k$(i) - lon0) * cosLat0;
1499
+ var dx = LocalFrame_instance.unwrap_i6c8al_k$(_this__u8e3s4.longitude_a9xl_k$(i) - lon0) * cosLat0;
1498
1500
  var dy = _this__u8e3s4.latitude_gb4iok_k$(i) - lat0;
1499
1501
  // Inline function 'kotlin.math.hypot' call
1500
1502
  var length = hypot(dx, dy);
@@ -2322,6 +2324,7 @@
2322
2324
  this.lastIndex_1 = -1;
2323
2325
  this.lastElapsedS_1 = 0.0;
2324
2326
  this.lastPowerW_1 = 0.0;
2327
+ this.lastLimitedW_1 = 0.0;
2325
2328
  }
2326
2329
  protoOf(PowerProviderSlewLimited).powerAt_ejucaq_k$ = function (course, path, pointIndex) {
2327
2330
  var target = this.delegate_1.powerAt_ejucaq_k$(course, path, pointIndex);
@@ -2329,8 +2332,8 @@
2329
2332
  this.reset_5u6xz3_k$();
2330
2333
  }
2331
2334
  if (pointIndex === this.lastIndex_1) {
2332
- this.delegate_1.onDelivered_drn2rh_k$(pointIndex, this.lastPowerW_1);
2333
- return this.lastPowerW_1;
2335
+ this.delegate_1.onDelivered_drn2rh_k$(pointIndex, this.lastLimitedW_1);
2336
+ return this.lastLimitedW_1;
2334
2337
  }
2335
2338
  var elapsedS = path.elapsed_7307rw_k$(pointIndex);
2336
2339
  var dtS = elapsedS - this.lastElapsedS_1;
@@ -2354,16 +2357,20 @@
2354
2357
  this.lastElapsedS_1 = elapsedS;
2355
2358
  this.lastIndex_1 = pointIndex;
2356
2359
  this.lastPowerW_1 = limited;
2360
+ this.lastLimitedW_1 = limited;
2357
2361
  this.delegate_1.onDelivered_drn2rh_k$(pointIndex, limited);
2358
2362
  return limited;
2359
2363
  };
2360
2364
  protoOf(PowerProviderSlewLimited).onDelivered_drn2rh_k$ = function (pointIndex, powerW) {
2361
- return this.delegate_1.onDelivered_drn2rh_k$(pointIndex, powerW);
2365
+ if (pointIndex === this.lastIndex_1 && isFinite(powerW))
2366
+ this.lastPowerW_1 = powerW;
2367
+ this.delegate_1.onDelivered_drn2rh_k$(pointIndex, powerW);
2362
2368
  };
2363
2369
  protoOf(PowerProviderSlewLimited).reset_5u6xz3_k$ = function () {
2364
2370
  this.lastIndex_1 = -1;
2365
2371
  this.lastElapsedS_1 = 0.0;
2366
2372
  this.lastPowerW_1 = 0.0;
2373
+ this.lastLimitedW_1 = 0.0;
2367
2374
  };
2368
2375
  function Companion_10() {
2369
2376
  this.DEFAULT_GRADIENT_GAIN_1 = 3.0;
@@ -3426,31 +3433,38 @@
3426
3433
  var previous = NaN;
3427
3434
  var inductionVariable = 0;
3428
3435
  if (inductionVariable < n)
3429
- do {
3436
+ $l$loop: do {
3430
3437
  var i = inductionVariable;
3431
3438
  inductionVariable = inductionVariable + 1 | 0;
3432
3439
  var a = i > 0 ? i - 1 | 0 : 0;
3433
3440
  var b = i < (n - 1 | 0) ? i + 1 | 0 : n - 1 | 0;
3434
3441
  var dx = frame.x_1[b] - frame.x_1[a];
3435
3442
  var dy = frame.y_1[b] - frame.y_1[a];
3436
- var tmp;
3437
3443
  if (dx === 0.0 && dy === 0.0) {
3438
- tmp = isNaN_0(previous) ? 0.0 : previous;
3439
- } else {
3440
- // Inline function 'kotlin.math.atan2' call
3441
- tmp = Math.atan2(dy, dx);
3444
+ theta[i] = previous;
3445
+ continue $l$loop;
3442
3446
  }
3443
- var raw = tmp;
3444
- var tmp_0;
3445
- if (i === 0 || isNaN_0(previous)) {
3446
- tmp_0 = raw;
3447
+ // Inline function 'kotlin.math.atan2' call
3448
+ var raw = Math.atan2(dy, dx);
3449
+ if (isNaN_0(previous)) {
3450
+ theta[i] = raw;
3451
+ var inductionVariable_0 = 0;
3452
+ if (inductionVariable_0 < i)
3453
+ do {
3454
+ var j = inductionVariable_0;
3455
+ inductionVariable_0 = inductionVariable_0 + 1 | 0;
3456
+ theta[j] = raw;
3457
+ }
3458
+ while (inductionVariable_0 < i);
3447
3459
  } else {
3448
- tmp_0 = previous + LocalFrame_instance.unwrap_i6c8al_k$(raw - previous);
3460
+ theta[i] = previous + LocalFrame_instance.unwrap_i6c8al_k$(raw - previous);
3449
3461
  }
3450
- theta[i] = tmp_0;
3451
3462
  previous = theta[i];
3452
3463
  }
3453
3464
  while (inductionVariable < n);
3465
+ if (isNaN_0(previous)) {
3466
+ fill(theta, 0.0);
3467
+ }
3454
3468
  };
3455
3469
  protoOf(CurvatureEstimator).computeCurvature_emiphc_k$ = function (frame, windowsM, sigmaThetaRad, curvatureSmoothM) {
3456
3470
  var n = frame.get_size_woubt6_k$();
@@ -3505,15 +3519,7 @@
3505
3519
  }
3506
3520
  }
3507
3521
  while (0 <= inductionVariable_1);
3508
- var tmp;
3509
- if (!isNaN_0(chosen)) {
3510
- tmp = chosen;
3511
- } else if (!isNaN_0(widest)) {
3512
- tmp = widest;
3513
- } else {
3514
- tmp = 0.0;
3515
- }
3516
- raw[i] = tmp;
3522
+ raw[i] = !isNaN_0(chosen) ? chosen : widest;
3517
3523
  }
3518
3524
  while (inductionVariable < n);
3519
3525
  var smoothed = LocalFrame_instance.smooth_kce7pb_k$(raw, frame.s_1, curvatureSmoothM);
@@ -3521,10 +3527,10 @@
3521
3527
  var endIndex = smoothed.length;
3522
3528
  // Inline function 'kotlin.js.unsafeCast' call
3523
3529
  // Inline function 'kotlin.js.asDynamic' call
3524
- var tmp_0 = smoothed;
3530
+ var tmp = smoothed;
3525
3531
  // Inline function 'kotlin.js.unsafeCast' call
3526
3532
  // Inline function 'kotlin.js.asDynamic' call
3527
- arrayCopy(tmp_0, kappa, 0, 0, endIndex);
3533
+ arrayCopy(tmp, kappa, 0, 0, endIndex);
3528
3534
  };
3529
3535
  protoOf(CurvatureEstimator).radiusAt_umgvjz_k$ = function (kappa) {
3530
3536
  var tmp;
@@ -3587,7 +3593,7 @@
3587
3593
  };
3588
3594
  protoOf(LocalFrame).unproject_ym27oh_k$ = function (frame, x, y) {
3589
3595
  var lat = frame.lat0__1 + y / 6371000.0;
3590
- var lon = frame.lon0__1 + x / (6371000.0 * frame.k_1);
3596
+ var lon = this.unwrap_i6c8al_k$(frame.lon0__1 + x / (6371000.0 * frame.k_1));
3591
3597
  // Inline function 'kotlin.doubleArrayOf' call
3592
3598
  return new Float64Array([lat, lon]);
3593
3599
  };
@@ -3609,7 +3615,8 @@
3609
3615
  while (inductionVariable < last);
3610
3616
  };
3611
3617
  protoOf(LocalFrame).unwrap_i6c8al_k$ = function (a) {
3612
- return a - 2.0 * 3.141592653589793 * round(a / (2.0 * 3.141592653589793));
3618
+ var r = a - 2.0 * 3.141592653589793 * round(a / (2.0 * 3.141592653589793));
3619
+ return r <= -3.141592653589793 ? r + 2.0 * 3.141592653589793 : r;
3613
3620
  };
3614
3621
  protoOf(LocalFrame).smooth_kce7pb_k$ = function (v, s, windowM) {
3615
3622
  var n = v.length;
@@ -3646,13 +3653,13 @@
3646
3653
  // Inline function 'kotlin.math.abs' call
3647
3654
  var x = s[j] - c;
3648
3655
  var w = 1.0 - Math.abs(x) / windowM;
3649
- if (w <= 0.0)
3656
+ if (w <= 0.0 || isNaN_0(v[j]))
3650
3657
  continue $l$loop;
3651
3658
  weightSum = weightSum + w;
3652
3659
  valueSum = valueSum + v[j] * w;
3653
3660
  }
3654
3661
  while (!(j === last));
3655
- out[i] = weightSum > 0.0 ? valueSum / weightSum : v[i];
3662
+ out[i] = isNaN_0(v[i]) || weightSum <= 0.0 ? v[i] : valueSum / weightSum;
3656
3663
  }
3657
3664
  while (inductionVariable < n);
3658
3665
  return out;
@@ -3663,15 +3670,16 @@
3663
3670
  }
3664
3671
  function Companion_12() {
3665
3672
  }
3666
- protoOf(Companion_12).assemble_miimn7_k$ = function (frame, center, rho, steeringLengthM, centeringLengthM) {
3673
+ protoOf(Companion_12).assemble_7bjwpt_k$ = function (frame, center, rho, steeringLengthM, centeringLengthM, fixed) {
3667
3674
  var n = frame.get_size_woubt6_k$();
3668
3675
  var h0 = new Float64Array(n);
3669
3676
  var h1 = new Float64Array(n);
3670
3677
  var h2 = new Float64Array(n);
3671
3678
  var linear = new Float64Array(n);
3672
- var constant = 0.0;
3673
3679
  var lambdaR = 1.0 / (steeringLengthM * steeringLengthM);
3674
3680
  var lambdaC = 1.0 / (centeringLengthM * centeringLengthM * centeringLengthM * centeringLengthM);
3681
+ var meanSpacing = n > 1 ? (frame.s_1[n - 1 | 0] - frame.s_1[0]) / (n - 1 | 0) : 0.0;
3682
+ var tie = meanSpacing > 0.0 ? lambdaR / meanSpacing : lambdaR;
3675
3683
  var a = new Float64Array(3);
3676
3684
  var b = new Float64Array(3);
3677
3685
  var inductionVariable = 0;
@@ -3684,7 +3692,13 @@
3684
3692
  var weight = 0.5 * (hMinus + hPlus);
3685
3693
  h0[i] = h0[i] + 2.0 * weight * lambdaC;
3686
3694
  linear[i] = linear[i] - 2.0 * weight * lambdaC * center[i];
3687
- constant = constant + weight * lambdaC * center[i] * center[i];
3695
+ if (weight <= 0.0 && i >= 1 && !fixed[i]) {
3696
+ h0[i] = h0[i] + 2.0 * tie;
3697
+ var _index_0__fvwizt = i - 1 | 0;
3698
+ h0[_index_0__fvwizt] = h0[_index_0__fvwizt] + 2.0 * tie;
3699
+ var _index_0__fvwizt_0 = i - 1 | 0;
3700
+ h1[_index_0__fvwizt_0] = h1[_index_0__fvwizt_0] - 2.0 * tie;
3701
+ }
3688
3702
  if (i < 1 || (i + 1 | 0) >= n)
3689
3703
  continue $l$loop_0;
3690
3704
  var denom = hPlus * hMinus * (hPlus + hMinus);
@@ -3728,37 +3742,44 @@
3728
3742
  while (inductionVariable_1 <= 2);
3729
3743
  }
3730
3744
  while (inductionVariable_0 <= 2);
3731
- constant = constant + wRho * kappaI * kappaI;
3732
3745
  }
3733
3746
  while (inductionVariable < n);
3734
- return new OffsetEnergy(h0, h1, h2, linear, constant);
3747
+ return new OffsetEnergy(h0, h1, h2, linear);
3735
3748
  };
3736
3749
  var Companion_instance_14;
3737
3750
  function Companion_getInstance_16() {
3738
3751
  return Companion_instance_14;
3739
3752
  }
3740
- function OffsetEnergy(h0, h1, h2, linear, constant) {
3753
+ function OffsetEnergy(h0, h1, h2, linear) {
3741
3754
  this.h0__1 = h0;
3742
3755
  this.h1__1 = h1;
3743
3756
  this.h2__1 = h2;
3744
3757
  this.linear_1 = linear;
3745
- this.constant_1 = constant;
3746
3758
  }
3747
3759
  protoOf(OffsetEnergy).get_size_woubt6_k$ = function () {
3748
3760
  return this.h0__1.length;
3749
3761
  };
3750
- protoOf(OffsetEnergy).value_6wg803_k$ = function (n, scratch) {
3751
- BandedLdl_instance.multiply_dwj15t_k$(this.h0__1, this.h1__1, this.h2__1, n, scratch);
3752
- var acc = this.constant_1;
3762
+ protoOf(OffsetEnergy).change_z3fx8j_k$ = function (from, to, gradient, delta, scratch) {
3753
3763
  var inductionVariable = 0;
3754
- var last = n.length - 1 | 0;
3764
+ var last = delta.length - 1 | 0;
3755
3765
  if (inductionVariable <= last)
3756
3766
  do {
3757
3767
  var i = inductionVariable;
3758
3768
  inductionVariable = inductionVariable + 1 | 0;
3759
- acc = acc + (0.5 * scratch[i] * n[i] + this.linear_1[i] * n[i]);
3769
+ delta[i] = to[i] - from[i];
3760
3770
  }
3761
3771
  while (inductionVariable <= last);
3772
+ BandedLdl_instance.multiply_dwj15t_k$(this.h0__1, this.h1__1, this.h2__1, delta, scratch);
3773
+ var acc = 0.0;
3774
+ var inductionVariable_0 = 0;
3775
+ var last_0 = delta.length - 1 | 0;
3776
+ if (inductionVariable_0 <= last_0)
3777
+ do {
3778
+ var i_0 = inductionVariable_0;
3779
+ inductionVariable_0 = inductionVariable_0 + 1 | 0;
3780
+ acc = acc + (gradient[i_0] + 0.5 * scratch[i_0]) * delta[i_0];
3781
+ }
3782
+ while (inductionVariable_0 <= last_0);
3762
3783
  return acc;
3763
3784
  };
3764
3785
  protoOf(OffsetEnergy).gradient_zecmby_k$ = function (n, out) {
@@ -3781,7 +3802,7 @@
3781
3802
  this.activeConstraints_1 = activeConstraints;
3782
3803
  }
3783
3804
  function isFree($this, x, lo, hi, g, epsilon) {
3784
- if (hi - lo <= 2.0 * epsilon)
3805
+ if ($this.isFixed_s6zw2k_k$(lo, hi, epsilon))
3785
3806
  return false;
3786
3807
  if (x <= lo + epsilon && g > 0.0)
3787
3808
  return false;
@@ -3863,7 +3884,10 @@
3863
3884
  var f1 = new Float64Array(n);
3864
3885
  var f2 = new Float64Array(n);
3865
3886
  var rhs = new Float64Array(n);
3866
- $l$loop_3: while (iterations < maxIterations) {
3887
+ var solveIndex = new Int32Array(n);
3888
+ var held = booleanArray(n);
3889
+ var delta = new Float64Array(n);
3890
+ $l$loop_5: while (iterations < maxIterations) {
3867
3891
  energy.gradient_zecmby_k$(x, g);
3868
3892
  var freeCount = 0;
3869
3893
  var residual = 0.0;
@@ -3889,81 +3913,124 @@
3889
3913
  relativeResidual = residual / referenceGradient;
3890
3914
  if (freeCount === 0 || relativeResidual <= gradientTolerance) {
3891
3915
  converged = true;
3892
- break $l$loop_3;
3893
- }
3894
- buildFreeSystem(this, energy, freeIndex, freeCount, f0, f1, f2);
3895
- var fa0 = copyOf(f0, freeCount);
3896
- var fa1 = copyOf(f1, freeCount);
3897
- var fa2 = copyOf(f2, freeCount);
3898
- if (!BandedLdl_instance.factor_n459o6_k$(fa0, fa1, fa2)) {
3899
- break $l$loop_3;
3916
+ break $l$loop_5;
3900
3917
  }
3901
3918
  var inductionVariable_1 = 0;
3902
- var last = freeCount;
3903
- if (inductionVariable_1 < last)
3919
+ if (inductionVariable_1 < n)
3904
3920
  do {
3905
- var p = inductionVariable_1;
3921
+ var i_1 = inductionVariable_1;
3906
3922
  inductionVariable_1 = inductionVariable_1 + 1 | 0;
3907
- rhs[p] = -g[freeIndex[p]];
3908
- }
3909
- while (inductionVariable_1 < last);
3910
- BandedLdl_instance.solveInPlace_jrw92v_k$(fa0, fa1, fa2, rhs);
3911
- var inductionVariable_2 = 0;
3912
- if (inductionVariable_2 < n)
3913
- do {
3914
- var i_1 = inductionVariable_2;
3915
- inductionVariable_2 = inductionVariable_2 + 1 | 0;
3916
- direction[i_1] = 0.0;
3917
- }
3918
- while (inductionVariable_2 < n);
3919
- var inductionVariable_3 = 0;
3920
- var last_0 = freeCount;
3921
- if (inductionVariable_3 < last_0)
3922
- do {
3923
- var p_0 = inductionVariable_3;
3924
- inductionVariable_3 = inductionVariable_3 + 1 | 0;
3925
- direction[freeIndex[p_0]] = rhs[p_0];
3926
- }
3927
- while (inductionVariable_3 < last_0);
3928
- var directionalDerivative = 0.0;
3929
- var inductionVariable_4 = 0;
3930
- var last_1 = freeCount;
3931
- if (inductionVariable_4 < last_1)
3932
- do {
3933
- var p_1 = inductionVariable_4;
3934
- inductionVariable_4 = inductionVariable_4 + 1 | 0;
3935
- var i_2 = freeIndex[p_1];
3936
- directionalDerivative = directionalDerivative + g[i_2] * direction[i_2];
3923
+ held[i_1] = false;
3937
3924
  }
3938
- while (inductionVariable_4 < last_1);
3939
- if (directionalDerivative >= 0.0)
3940
- break $l$loop_3;
3941
- var current = energy.value_6wg803_k$(x, scratch);
3942
- var step = 1.0;
3925
+ while (inductionVariable_1 < n);
3943
3926
  var accepted = false;
3944
- var inductionVariable_5 = 0;
3945
- if (inductionVariable_5 < 20)
3946
- $l$loop_2: do {
3947
- var attempt = inductionVariable_5;
3948
- inductionVariable_5 = inductionVariable_5 + 1 | 0;
3949
- var inductionVariable_6 = 0;
3950
- if (inductionVariable_6 < n)
3951
- do {
3952
- var i_3 = inductionVariable_6;
3953
- inductionVariable_6 = inductionVariable_6 + 1 | 0;
3954
- candidate[i_3] = coerceIn(x[i_3] + step * direction[i_3], lo[i_3], hi[i_3]);
3927
+ $l$loop_4: while (true) {
3928
+ var solveCount = 0;
3929
+ var inductionVariable_2 = 0;
3930
+ var last = freeCount;
3931
+ if (inductionVariable_2 < last)
3932
+ do {
3933
+ var p = inductionVariable_2;
3934
+ inductionVariable_2 = inductionVariable_2 + 1 | 0;
3935
+ if (!held[freeIndex[p]]) {
3936
+ var _unary__edvuaz_0 = solveCount;
3937
+ solveCount = _unary__edvuaz_0 + 1 | 0;
3938
+ solveIndex[_unary__edvuaz_0] = freeIndex[p];
3955
3939
  }
3956
- while (inductionVariable_6 < n);
3957
- var trial = energy.value_6wg803_k$(candidate, scratch);
3958
- if (trial <= current + 1.0E-4 * step * directionalDerivative) {
3959
- accepted = true;
3960
- break $l$loop_2;
3961
3940
  }
3962
- step = step / 2.0;
3941
+ while (inductionVariable_2 < last);
3942
+ buildFreeSystem(this, energy, solveIndex, solveCount, f0, f1, f2);
3943
+ var fa0 = copyOf(f0, solveCount);
3944
+ var fa1 = copyOf(f1, solveCount);
3945
+ var fa2 = copyOf(f2, solveCount);
3946
+ if (!BandedLdl_instance.factor_n459o6_k$(fa0, fa1, fa2)) {
3947
+ break $l$loop_4;
3963
3948
  }
3964
- while (inductionVariable_5 < 20);
3949
+ var inductionVariable_3 = 0;
3950
+ var last_0 = solveCount;
3951
+ if (inductionVariable_3 < last_0)
3952
+ do {
3953
+ var p_0 = inductionVariable_3;
3954
+ inductionVariable_3 = inductionVariable_3 + 1 | 0;
3955
+ rhs[p_0] = -g[solveIndex[p_0]];
3956
+ }
3957
+ while (inductionVariable_3 < last_0);
3958
+ BandedLdl_instance.solveInPlace_jrw92v_k$(fa0, fa1, fa2, rhs);
3959
+ var inductionVariable_4 = 0;
3960
+ if (inductionVariable_4 < n)
3961
+ do {
3962
+ var i_2 = inductionVariable_4;
3963
+ inductionVariable_4 = inductionVariable_4 + 1 | 0;
3964
+ direction[i_2] = 0.0;
3965
+ }
3966
+ while (inductionVariable_4 < n);
3967
+ var inductionVariable_5 = 0;
3968
+ var last_1 = solveCount;
3969
+ if (inductionVariable_5 < last_1)
3970
+ do {
3971
+ var p_1 = inductionVariable_5;
3972
+ inductionVariable_5 = inductionVariable_5 + 1 | 0;
3973
+ direction[solveIndex[p_1]] = rhs[p_1];
3974
+ }
3975
+ while (inductionVariable_5 < last_1);
3976
+ var directionalDerivative = 0.0;
3977
+ var inductionVariable_6 = 0;
3978
+ var last_2 = solveCount;
3979
+ if (inductionVariable_6 < last_2)
3980
+ do {
3981
+ var p_2 = inductionVariable_6;
3982
+ inductionVariable_6 = inductionVariable_6 + 1 | 0;
3983
+ var i_3 = solveIndex[p_2];
3984
+ directionalDerivative = directionalDerivative + g[i_3] * direction[i_3];
3985
+ }
3986
+ while (inductionVariable_6 < last_2);
3987
+ if (directionalDerivative >= 0.0)
3988
+ break $l$loop_4;
3989
+ var step = 1.0;
3990
+ var lastStep = step;
3991
+ var inductionVariable_7 = 0;
3992
+ if (inductionVariable_7 < 20)
3993
+ $l$loop_2: do {
3994
+ var attempt = inductionVariable_7;
3995
+ inductionVariable_7 = inductionVariable_7 + 1 | 0;
3996
+ var inductionVariable_8 = 0;
3997
+ if (inductionVariable_8 < n)
3998
+ do {
3999
+ var i_4 = inductionVariable_8;
4000
+ inductionVariable_8 = inductionVariable_8 + 1 | 0;
4001
+ candidate[i_4] = coerceIn(x[i_4] + step * direction[i_4], lo[i_4], hi[i_4]);
4002
+ }
4003
+ while (inductionVariable_8 < n);
4004
+ if (energy.change_z3fx8j_k$(x, candidate, g, delta, scratch) <= 1.0E-4 * step * directionalDerivative) {
4005
+ accepted = true;
4006
+ break $l$loop_2;
4007
+ }
4008
+ lastStep = step;
4009
+ step = step / 2.0;
4010
+ }
4011
+ while (inductionVariable_7 < 20);
4012
+ if (accepted)
4013
+ break $l$loop_4;
4014
+ var newlyHeld = 0;
4015
+ var inductionVariable_9 = 0;
4016
+ var last_3 = solveCount;
4017
+ if (inductionVariable_9 < last_3)
4018
+ do {
4019
+ var p_3 = inductionVariable_9;
4020
+ inductionVariable_9 = inductionVariable_9 + 1 | 0;
4021
+ var i_5 = solveIndex[p_3];
4022
+ var target = x[i_5] + lastStep * direction[i_5];
4023
+ if (target < lo[i_5] || target > hi[i_5]) {
4024
+ held[i_5] = true;
4025
+ newlyHeld = newlyHeld + 1 | 0;
4026
+ }
4027
+ }
4028
+ while (inductionVariable_9 < last_3);
4029
+ if (newlyHeld === 0)
4030
+ break $l$loop_4;
4031
+ }
3965
4032
  if (!accepted)
3966
- break $l$loop_3;
4033
+ break $l$loop_5;
3967
4034
  // Inline function 'kotlin.collections.copyInto' call
3968
4035
  var endIndex = candidate.length;
3969
4036
  // Inline function 'kotlin.js.unsafeCast' call
@@ -3975,18 +4042,21 @@
3975
4042
  iterations = iterations + 1 | 0;
3976
4043
  }
3977
4044
  var active = 0;
3978
- var inductionVariable_7 = 0;
3979
- if (inductionVariable_7 < n)
4045
+ var inductionVariable_10 = 0;
4046
+ if (inductionVariable_10 < n)
3980
4047
  do {
3981
- var i_4 = inductionVariable_7;
3982
- inductionVariable_7 = inductionVariable_7 + 1 | 0;
3983
- if (x[i_4] <= lo[i_4] + boundEpsilonM || x[i_4] >= hi[i_4] - boundEpsilonM) {
4048
+ var i_6 = inductionVariable_10;
4049
+ inductionVariable_10 = inductionVariable_10 + 1 | 0;
4050
+ if (x[i_6] <= lo[i_6] + boundEpsilonM || x[i_6] >= hi[i_6] - boundEpsilonM) {
3984
4051
  active = active + 1 | 0;
3985
4052
  }
3986
4053
  }
3987
- while (inductionVariable_7 < n);
4054
+ while (inductionVariable_10 < n);
3988
4055
  return new QpResult(x, iterations, relativeResidual, converged, active);
3989
4056
  };
4057
+ protoOf(OffsetQp).isFixed_s6zw2k_k$ = function (lo, hi, epsilon) {
4058
+ return hi - lo <= 2.0 * epsilon;
4059
+ };
3990
4060
  var OffsetQp_instance;
3991
4061
  function OffsetQp_getInstance() {
3992
4062
  return OffsetQp_instance;
@@ -4217,6 +4287,17 @@
4217
4287
  var frame = tmp;
4218
4288
  CurvatureEstimator_instance.computeHeadings_ev7p13_k$(frame);
4219
4289
  CurvatureEstimator_instance.computeCurvature_emiphc_k$(frame, toDoubleArray(options.curvature_1.curvatureWindowsM_1), options.curvature_1.headingNoiseRad_1, options.curvature_1.curvatureSmoothWindowM_1);
4290
+ var inductionVariable = 0;
4291
+ var last = frame.get_size_woubt6_k$();
4292
+ if (inductionVariable < last)
4293
+ do {
4294
+ var i = inductionVariable;
4295
+ inductionVariable = inductionVariable + 1 | 0;
4296
+ if (isNaN_0(frame.kappa_1[i])) {
4297
+ frame.kappa_1[i] = 0.0;
4298
+ }
4299
+ }
4300
+ while (inductionVariable < last);
4220
4301
  return frame;
4221
4302
  }
4222
4303
  function analyzeFrame($this, path, frame, options) {
@@ -4250,15 +4331,24 @@
4250
4331
  tmp_3 = tmp_3 + 1 | 0;
4251
4332
  }
4252
4333
  var rho = tmp_5;
4253
- var energy = Companion_instance_14.assemble_miimn7_k$(frame, center, rho, options.steeringLengthM_1, options.centeringLengthM_1);
4334
+ var tmp_8 = Companion_instance_14;
4335
+ var tmp_9 = 0;
4336
+ var tmp_10 = frame.get_size_woubt6_k$();
4337
+ var tmp_11 = booleanArray(tmp_10);
4338
+ while (tmp_9 < tmp_10) {
4339
+ var tmp_12 = tmp_9;
4340
+ tmp_11[tmp_12] = OffsetQp_instance.isFixed_s6zw2k_k$(bounds.lo_1[tmp_12], bounds.hi_1[tmp_12], options.boundEpsilonM_1);
4341
+ tmp_9 = tmp_9 + 1 | 0;
4342
+ }
4343
+ var energy = tmp_8.assemble_7bjwpt_k$(frame, center, rho, options.steeringLengthM_1, options.centeringLengthM_1, tmp_11);
4254
4344
  var seed = center;
4255
4345
  var solved = OffsetQp_instance.solve_j37bz7_k$(energy, bounds.lo_1, bounds.hi_1, seed, options.maxNewtonIterations_1, options.gradientTolerance_1, options.boundEpsilonM_1);
4256
4346
  var trajectoryCurvature = measureOffsetCurvature($this, frame, solved.offset_1, options);
4257
- var tmp_8 = frame.get_size_woubt6_k$();
4347
+ var tmp_13 = frame.get_size_woubt6_k$();
4258
4348
  // Inline function 'kotlin.collections.copyOf' call
4259
4349
  // Inline function 'kotlin.js.asDynamic' call
4260
- var tmp$ret$3 = frame.kappa_1.slice();
4261
- return new RacingLineReport(tmp_8, corners, tmp$ret$3, bounds.lo_1, bounds.hi_1, bounds.halfWidthM_1, solved.offset_1, trajectoryCurvature, solved.iterations_1, solved.gradientInfNorm_1, solved.converged_1, solved.activeConstraints_1);
4350
+ var tmp$ret$4 = frame.kappa_1.slice();
4351
+ return new RacingLineReport(tmp_13, corners, tmp$ret$4, bounds.lo_1, bounds.hi_1, bounds.halfWidthM_1, solved.offset_1, trajectoryCurvature, solved.iterations_1, solved.gradientInfNorm_1, solved.converged_1, solved.activeConstraints_1);
4262
4352
  }
4263
4353
  function measureOffsetCurvature($this, frame, offset, options) {
4264
4354
  var size = frame.get_size_woubt6_k$();