@window-splitter/state 0.4.0 → 0.4.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.
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">0.86% </span>
26
+ <span class="strong">99.38% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>4/463</span>
28
+ <span class='fraction'>484/487</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">0% </span>
33
+ <span class="strong">97.78% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>0/377</span>
35
+ <span class='fraction'>397/406</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">0% </span>
40
+ <span class="strong">100% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>0/97</span>
42
+ <span class='fraction'>101/101</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">0.88% </span>
47
+ <span class="strong">99.57% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>4/452</span>
49
+ <span class='fraction'>473/475</span>
50
50
  </div>
51
51
 
52
52
 
@@ -61,7 +61,7 @@
61
61
  </div>
62
62
  </template>
63
63
  </div>
64
- <div class='status-line low'></div>
64
+ <div class='status-line high'></div>
65
65
  <pre><table class="coverage">
66
66
  <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
67
  <a name='L2'></a><a href='#L2'>2</a>
@@ -1974,7 +1974,103 @@
1974
1974
  <a name='L1909'></a><a href='#L1909'>1909</a>
1975
1975
  <a name='L1910'></a><a href='#L1910'>1910</a>
1976
1976
  <a name='L1911'></a><a href='#L1911'>1911</a>
1977
- <a name='L1912'></a><a href='#L1912'>1912</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
1977
+ <a name='L1912'></a><a href='#L1912'>1912</a>
1978
+ <a name='L1913'></a><a href='#L1913'>1913</a>
1979
+ <a name='L1914'></a><a href='#L1914'>1914</a>
1980
+ <a name='L1915'></a><a href='#L1915'>1915</a>
1981
+ <a name='L1916'></a><a href='#L1916'>1916</a>
1982
+ <a name='L1917'></a><a href='#L1917'>1917</a>
1983
+ <a name='L1918'></a><a href='#L1918'>1918</a>
1984
+ <a name='L1919'></a><a href='#L1919'>1919</a>
1985
+ <a name='L1920'></a><a href='#L1920'>1920</a>
1986
+ <a name='L1921'></a><a href='#L1921'>1921</a>
1987
+ <a name='L1922'></a><a href='#L1922'>1922</a>
1988
+ <a name='L1923'></a><a href='#L1923'>1923</a>
1989
+ <a name='L1924'></a><a href='#L1924'>1924</a>
1990
+ <a name='L1925'></a><a href='#L1925'>1925</a>
1991
+ <a name='L1926'></a><a href='#L1926'>1926</a>
1992
+ <a name='L1927'></a><a href='#L1927'>1927</a>
1993
+ <a name='L1928'></a><a href='#L1928'>1928</a>
1994
+ <a name='L1929'></a><a href='#L1929'>1929</a>
1995
+ <a name='L1930'></a><a href='#L1930'>1930</a>
1996
+ <a name='L1931'></a><a href='#L1931'>1931</a>
1997
+ <a name='L1932'></a><a href='#L1932'>1932</a>
1998
+ <a name='L1933'></a><a href='#L1933'>1933</a>
1999
+ <a name='L1934'></a><a href='#L1934'>1934</a>
2000
+ <a name='L1935'></a><a href='#L1935'>1935</a>
2001
+ <a name='L1936'></a><a href='#L1936'>1936</a>
2002
+ <a name='L1937'></a><a href='#L1937'>1937</a>
2003
+ <a name='L1938'></a><a href='#L1938'>1938</a>
2004
+ <a name='L1939'></a><a href='#L1939'>1939</a>
2005
+ <a name='L1940'></a><a href='#L1940'>1940</a>
2006
+ <a name='L1941'></a><a href='#L1941'>1941</a>
2007
+ <a name='L1942'></a><a href='#L1942'>1942</a>
2008
+ <a name='L1943'></a><a href='#L1943'>1943</a>
2009
+ <a name='L1944'></a><a href='#L1944'>1944</a>
2010
+ <a name='L1945'></a><a href='#L1945'>1945</a>
2011
+ <a name='L1946'></a><a href='#L1946'>1946</a>
2012
+ <a name='L1947'></a><a href='#L1947'>1947</a>
2013
+ <a name='L1948'></a><a href='#L1948'>1948</a>
2014
+ <a name='L1949'></a><a href='#L1949'>1949</a>
2015
+ <a name='L1950'></a><a href='#L1950'>1950</a>
2016
+ <a name='L1951'></a><a href='#L1951'>1951</a>
2017
+ <a name='L1952'></a><a href='#L1952'>1952</a>
2018
+ <a name='L1953'></a><a href='#L1953'>1953</a>
2019
+ <a name='L1954'></a><a href='#L1954'>1954</a>
2020
+ <a name='L1955'></a><a href='#L1955'>1955</a>
2021
+ <a name='L1956'></a><a href='#L1956'>1956</a>
2022
+ <a name='L1957'></a><a href='#L1957'>1957</a>
2023
+ <a name='L1958'></a><a href='#L1958'>1958</a>
2024
+ <a name='L1959'></a><a href='#L1959'>1959</a>
2025
+ <a name='L1960'></a><a href='#L1960'>1960</a>
2026
+ <a name='L1961'></a><a href='#L1961'>1961</a>
2027
+ <a name='L1962'></a><a href='#L1962'>1962</a>
2028
+ <a name='L1963'></a><a href='#L1963'>1963</a>
2029
+ <a name='L1964'></a><a href='#L1964'>1964</a>
2030
+ <a name='L1965'></a><a href='#L1965'>1965</a>
2031
+ <a name='L1966'></a><a href='#L1966'>1966</a>
2032
+ <a name='L1967'></a><a href='#L1967'>1967</a>
2033
+ <a name='L1968'></a><a href='#L1968'>1968</a>
2034
+ <a name='L1969'></a><a href='#L1969'>1969</a>
2035
+ <a name='L1970'></a><a href='#L1970'>1970</a>
2036
+ <a name='L1971'></a><a href='#L1971'>1971</a>
2037
+ <a name='L1972'></a><a href='#L1972'>1972</a>
2038
+ <a name='L1973'></a><a href='#L1973'>1973</a>
2039
+ <a name='L1974'></a><a href='#L1974'>1974</a>
2040
+ <a name='L1975'></a><a href='#L1975'>1975</a>
2041
+ <a name='L1976'></a><a href='#L1976'>1976</a>
2042
+ <a name='L1977'></a><a href='#L1977'>1977</a>
2043
+ <a name='L1978'></a><a href='#L1978'>1978</a>
2044
+ <a name='L1979'></a><a href='#L1979'>1979</a>
2045
+ <a name='L1980'></a><a href='#L1980'>1980</a>
2046
+ <a name='L1981'></a><a href='#L1981'>1981</a>
2047
+ <a name='L1982'></a><a href='#L1982'>1982</a>
2048
+ <a name='L1983'></a><a href='#L1983'>1983</a>
2049
+ <a name='L1984'></a><a href='#L1984'>1984</a>
2050
+ <a name='L1985'></a><a href='#L1985'>1985</a>
2051
+ <a name='L1986'></a><a href='#L1986'>1986</a>
2052
+ <a name='L1987'></a><a href='#L1987'>1987</a>
2053
+ <a name='L1988'></a><a href='#L1988'>1988</a>
2054
+ <a name='L1989'></a><a href='#L1989'>1989</a>
2055
+ <a name='L1990'></a><a href='#L1990'>1990</a>
2056
+ <a name='L1991'></a><a href='#L1991'>1991</a>
2057
+ <a name='L1992'></a><a href='#L1992'>1992</a>
2058
+ <a name='L1993'></a><a href='#L1993'>1993</a>
2059
+ <a name='L1994'></a><a href='#L1994'>1994</a>
2060
+ <a name='L1995'></a><a href='#L1995'>1995</a>
2061
+ <a name='L1996'></a><a href='#L1996'>1996</a>
2062
+ <a name='L1997'></a><a href='#L1997'>1997</a>
2063
+ <a name='L1998'></a><a href='#L1998'>1998</a>
2064
+ <a name='L1999'></a><a href='#L1999'>1999</a>
2065
+ <a name='L2000'></a><a href='#L2000'>2000</a>
2066
+ <a name='L2001'></a><a href='#L2001'>2001</a>
2067
+ <a name='L2002'></a><a href='#L2002'>2002</a>
2068
+ <a name='L2003'></a><a href='#L2003'>2003</a>
2069
+ <a name='L2004'></a><a href='#L2004'>2004</a>
2070
+ <a name='L2005'></a><a href='#L2005'>2005</a>
2071
+ <a name='L2006'></a><a href='#L2006'>2006</a>
2072
+ <a name='L2007'></a><a href='#L2007'>2007</a>
2073
+ <a name='L2008'></a><a href='#L2008'>2008</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
1978
2074
  <span class="cline-any cline-neutral">&nbsp;</span>
1979
2075
  <span class="cline-any cline-neutral">&nbsp;</span>
1980
2076
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1988,8 +2084,8 @@
1988
2084
  <span class="cline-any cline-neutral">&nbsp;</span>
1989
2085
  <span class="cline-any cline-neutral">&nbsp;</span>
1990
2086
  <span class="cline-any cline-neutral">&nbsp;</span>
1991
- <span class="cline-any cline-yes">1x</span>
1992
2087
  <span class="cline-any cline-neutral">&nbsp;</span>
2088
+ <span class="cline-any cline-yes">2x</span>
1993
2089
  <span class="cline-any cline-neutral">&nbsp;</span>
1994
2090
  <span class="cline-any cline-neutral">&nbsp;</span>
1995
2091
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2012,12 +2108,12 @@
2012
2108
  <span class="cline-any cline-neutral">&nbsp;</span>
2013
2109
  <span class="cline-any cline-neutral">&nbsp;</span>
2014
2110
  <span class="cline-any cline-neutral">&nbsp;</span>
2015
- <span class="cline-any cline-no">&nbsp;</span>
2016
2111
  <span class="cline-any cline-neutral">&nbsp;</span>
2112
+ <span class="cline-any cline-yes">21157x</span>
2017
2113
  <span class="cline-any cline-neutral">&nbsp;</span>
2018
2114
  <span class="cline-any cline-neutral">&nbsp;</span>
2019
- <span class="cline-any cline-no">&nbsp;</span>
2020
2115
  <span class="cline-any cline-neutral">&nbsp;</span>
2116
+ <span class="cline-any cline-yes">14941x</span>
2021
2117
  <span class="cline-any cline-neutral">&nbsp;</span>
2022
2118
  <span class="cline-any cline-neutral">&nbsp;</span>
2023
2119
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2087,48 +2183,48 @@
2087
2183
  <span class="cline-any cline-neutral">&nbsp;</span>
2088
2184
  <span class="cline-any cline-neutral">&nbsp;</span>
2089
2185
  <span class="cline-any cline-neutral">&nbsp;</span>
2090
- <span class="cline-any cline-no">&nbsp;</span>
2091
- <span class="cline-any cline-no">&nbsp;</span>
2092
2186
  <span class="cline-any cline-neutral">&nbsp;</span>
2093
- <span class="cline-any cline-no">&nbsp;</span>
2094
- <span class="cline-any cline-no">&nbsp;</span>
2095
- <span class="cline-any cline-no">&nbsp;</span>
2096
2187
  <span class="cline-any cline-neutral">&nbsp;</span>
2097
- <span class="cline-any cline-no">&nbsp;</span>
2098
- <span class="cline-any cline-no">&nbsp;</span>
2099
2188
  <span class="cline-any cline-neutral">&nbsp;</span>
2100
2189
  <span class="cline-any cline-neutral">&nbsp;</span>
2101
2190
  <span class="cline-any cline-neutral">&nbsp;</span>
2102
2191
  <span class="cline-any cline-neutral">&nbsp;</span>
2103
2192
  <span class="cline-any cline-neutral">&nbsp;</span>
2104
2193
  <span class="cline-any cline-neutral">&nbsp;</span>
2105
- <span class="cline-any cline-no">&nbsp;</span>
2106
2194
  <span class="cline-any cline-neutral">&nbsp;</span>
2195
+ <span class="cline-any cline-yes">14x</span>
2196
+ <span class="cline-any cline-yes">14x</span>
2107
2197
  <span class="cline-any cline-neutral">&nbsp;</span>
2198
+ <span class="cline-any cline-yes">14x</span>
2199
+ <span class="cline-any cline-yes">4x</span>
2200
+ <span class="cline-any cline-yes">2x</span>
2108
2201
  <span class="cline-any cline-neutral">&nbsp;</span>
2109
- <span class="cline-any cline-yes">1x</span>
2202
+ <span class="cline-any cline-yes">2x</span>
2203
+ <span class="cline-any cline-yes">2x</span>
2110
2204
  <span class="cline-any cline-neutral">&nbsp;</span>
2111
- <span class="cline-any cline-no">&nbsp;</span>
2112
2205
  <span class="cline-any cline-neutral">&nbsp;</span>
2113
2206
  <span class="cline-any cline-neutral">&nbsp;</span>
2114
- <span class="cline-any cline-no">&nbsp;</span>
2115
- <span class="cline-any cline-no">&nbsp;</span>
2116
2207
  <span class="cline-any cline-neutral">&nbsp;</span>
2117
2208
  <span class="cline-any cline-neutral">&nbsp;</span>
2118
2209
  <span class="cline-any cline-neutral">&nbsp;</span>
2210
+ <span class="cline-any cline-yes">14x</span>
2119
2211
  <span class="cline-any cline-neutral">&nbsp;</span>
2120
2212
  <span class="cline-any cline-neutral">&nbsp;</span>
2121
2213
  <span class="cline-any cline-neutral">&nbsp;</span>
2122
- <span class="cline-any cline-no">&nbsp;</span>
2214
+ <span class="cline-any cline-yes">2x</span>
2123
2215
  <span class="cline-any cline-neutral">&nbsp;</span>
2216
+ <span class="cline-any cline-yes">18x</span>
2124
2217
  <span class="cline-any cline-neutral">&nbsp;</span>
2125
2218
  <span class="cline-any cline-neutral">&nbsp;</span>
2219
+ <span class="cline-any cline-yes">18x</span>
2220
+ <span class="cline-any cline-yes">18x</span>
2126
2221
  <span class="cline-any cline-neutral">&nbsp;</span>
2127
2222
  <span class="cline-any cline-neutral">&nbsp;</span>
2128
2223
  <span class="cline-any cline-neutral">&nbsp;</span>
2129
2224
  <span class="cline-any cline-neutral">&nbsp;</span>
2130
2225
  <span class="cline-any cline-neutral">&nbsp;</span>
2131
2226
  <span class="cline-any cline-neutral">&nbsp;</span>
2227
+ <span class="cline-any cline-yes">30x</span>
2132
2228
  <span class="cline-any cline-neutral">&nbsp;</span>
2133
2229
  <span class="cline-any cline-neutral">&nbsp;</span>
2134
2230
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2302,65 +2398,63 @@
2302
2398
  <span class="cline-any cline-neutral">&nbsp;</span>
2303
2399
  <span class="cline-any cline-neutral">&nbsp;</span>
2304
2400
  <span class="cline-any cline-neutral">&nbsp;</span>
2305
- <span class="cline-any cline-no">&nbsp;</span>
2306
- <span class="cline-any cline-no">&nbsp;</span>
2307
- <span class="cline-any cline-no">&nbsp;</span>
2308
- <span class="cline-any cline-no">&nbsp;</span>
2309
- <span class="cline-any cline-no">&nbsp;</span>
2310
2401
  <span class="cline-any cline-neutral">&nbsp;</span>
2311
- <span class="cline-any cline-no">&nbsp;</span>
2312
2402
  <span class="cline-any cline-neutral">&nbsp;</span>
2313
2403
  <span class="cline-any cline-neutral">&nbsp;</span>
2314
- <span class="cline-any cline-no">&nbsp;</span>
2315
- <span class="cline-any cline-no">&nbsp;</span>
2316
- <span class="cline-any cline-no">&nbsp;</span>
2317
- <span class="cline-any cline-no">&nbsp;</span>
2318
2404
  <span class="cline-any cline-neutral">&nbsp;</span>
2319
- <span class="cline-any cline-no">&nbsp;</span>
2320
2405
  <span class="cline-any cline-neutral">&nbsp;</span>
2321
2406
  <span class="cline-any cline-neutral">&nbsp;</span>
2322
2407
  <span class="cline-any cline-neutral">&nbsp;</span>
2323
2408
  <span class="cline-any cline-neutral">&nbsp;</span>
2324
2409
  <span class="cline-any cline-neutral">&nbsp;</span>
2325
2410
  <span class="cline-any cline-neutral">&nbsp;</span>
2326
- <span class="cline-any cline-no">&nbsp;</span>
2327
2411
  <span class="cline-any cline-neutral">&nbsp;</span>
2328
2412
  <span class="cline-any cline-neutral">&nbsp;</span>
2329
- <span class="cline-any cline-no">&nbsp;</span>
2330
2413
  <span class="cline-any cline-neutral">&nbsp;</span>
2331
- <span class="cline-any cline-no">&nbsp;</span>
2332
- <span class="cline-any cline-no">&nbsp;</span>
2333
- <span class="cline-any cline-no">&nbsp;</span>
2334
- <span class="cline-any cline-no">&nbsp;</span>
2335
- <span class="cline-any cline-no">&nbsp;</span>
2336
2414
  <span class="cline-any cline-neutral">&nbsp;</span>
2337
- <span class="cline-any cline-no">&nbsp;</span>
2338
- <span class="cline-any cline-no">&nbsp;</span>
2339
2415
  <span class="cline-any cline-neutral">&nbsp;</span>
2340
2416
  <span class="cline-any cline-neutral">&nbsp;</span>
2341
- <span class="cline-any cline-no">&nbsp;</span>
2342
2417
  <span class="cline-any cline-neutral">&nbsp;</span>
2343
2418
  <span class="cline-any cline-neutral">&nbsp;</span>
2419
+ <span class="cline-any cline-yes">6x</span>
2420
+ <span class="cline-any cline-yes">3x</span>
2421
+ <span class="cline-any cline-yes">1x</span>
2422
+ <span class="cline-any cline-yes">2x</span>
2423
+ <span class="cline-any cline-yes">1x</span>
2344
2424
  <span class="cline-any cline-neutral">&nbsp;</span>
2345
- <span class="cline-any cline-no">&nbsp;</span>
2425
+ <span class="cline-any cline-yes">1x</span>
2346
2426
  <span class="cline-any cline-neutral">&nbsp;</span>
2347
2427
  <span class="cline-any cline-neutral">&nbsp;</span>
2428
+ <span class="cline-any cline-yes">3x</span>
2429
+ <span class="cline-any cline-yes">1x</span>
2430
+ <span class="cline-any cline-yes">2x</span>
2431
+ <span class="cline-any cline-yes">1x</span>
2348
2432
  <span class="cline-any cline-neutral">&nbsp;</span>
2433
+ <span class="cline-any cline-yes">1x</span>
2349
2434
  <span class="cline-any cline-neutral">&nbsp;</span>
2350
2435
  <span class="cline-any cline-neutral">&nbsp;</span>
2351
2436
  <span class="cline-any cline-neutral">&nbsp;</span>
2352
2437
  <span class="cline-any cline-neutral">&nbsp;</span>
2353
- <span class="cline-any cline-no">&nbsp;</span>
2354
2438
  <span class="cline-any cline-neutral">&nbsp;</span>
2439
+ <span class="cline-any cline-yes">4x</span>
2355
2440
  <span class="cline-any cline-neutral">&nbsp;</span>
2441
+ <span class="cline-any cline-yes">4x</span>
2356
2442
  <span class="cline-any cline-neutral">&nbsp;</span>
2443
+ <span class="cline-any cline-yes">4x</span>
2444
+ <span class="cline-any cline-yes">16x</span>
2445
+ <span class="cline-any cline-yes">10x</span>
2446
+ <span class="cline-any cline-yes">10x</span>
2447
+ <span class="cline-any cline-yes">10x</span>
2357
2448
  <span class="cline-any cline-neutral">&nbsp;</span>
2449
+ <span class="cline-any cline-yes">10x</span>
2450
+ <span class="cline-any cline-yes">4x</span>
2358
2451
  <span class="cline-any cline-neutral">&nbsp;</span>
2359
2452
  <span class="cline-any cline-neutral">&nbsp;</span>
2453
+ <span class="cline-any cline-yes">6x</span>
2360
2454
  <span class="cline-any cline-neutral">&nbsp;</span>
2361
- <span class="cline-any cline-no">&nbsp;</span>
2362
2455
  <span class="cline-any cline-neutral">&nbsp;</span>
2363
2456
  <span class="cline-any cline-neutral">&nbsp;</span>
2457
+ <span class="cline-any cline-yes">4x</span>
2364
2458
  <span class="cline-any cline-neutral">&nbsp;</span>
2365
2459
  <span class="cline-any cline-neutral">&nbsp;</span>
2366
2460
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2368,7 +2462,7 @@
2368
2462
  <span class="cline-any cline-neutral">&nbsp;</span>
2369
2463
  <span class="cline-any cline-neutral">&nbsp;</span>
2370
2464
  <span class="cline-any cline-neutral">&nbsp;</span>
2371
- <span class="cline-any cline-no">&nbsp;</span>
2465
+ <span class="cline-any cline-yes">5226x</span>
2372
2466
  <span class="cline-any cline-neutral">&nbsp;</span>
2373
2467
  <span class="cline-any cline-neutral">&nbsp;</span>
2374
2468
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2376,6 +2470,7 @@
2376
2470
  <span class="cline-any cline-neutral">&nbsp;</span>
2377
2471
  <span class="cline-any cline-neutral">&nbsp;</span>
2378
2472
  <span class="cline-any cline-neutral">&nbsp;</span>
2473
+ <span class="cline-any cline-yes">45223x</span>
2379
2474
  <span class="cline-any cline-neutral">&nbsp;</span>
2380
2475
  <span class="cline-any cline-neutral">&nbsp;</span>
2381
2476
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2385,6 +2480,7 @@
2385
2480
  <span class="cline-any cline-neutral">&nbsp;</span>
2386
2481
  <span class="cline-any cline-neutral">&nbsp;</span>
2387
2482
  <span class="cline-any cline-neutral">&nbsp;</span>
2483
+ <span class="cline-any cline-yes">9206x</span>
2388
2484
  <span class="cline-any cline-neutral">&nbsp;</span>
2389
2485
  <span class="cline-any cline-neutral">&nbsp;</span>
2390
2486
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2410,51 +2506,49 @@
2410
2506
  <span class="cline-any cline-neutral">&nbsp;</span>
2411
2507
  <span class="cline-any cline-neutral">&nbsp;</span>
2412
2508
  <span class="cline-any cline-neutral">&nbsp;</span>
2413
- <span class="cline-any cline-no">&nbsp;</span>
2414
- <span class="cline-any cline-no">&nbsp;</span>
2415
2509
  <span class="cline-any cline-neutral">&nbsp;</span>
2416
2510
  <span class="cline-any cline-neutral">&nbsp;</span>
2417
- <span class="cline-any cline-no">&nbsp;</span>
2418
- <span class="cline-any cline-no">&nbsp;</span>
2419
2511
  <span class="cline-any cline-neutral">&nbsp;</span>
2420
2512
  <span class="cline-any cline-neutral">&nbsp;</span>
2421
2513
  <span class="cline-any cline-neutral">&nbsp;</span>
2422
2514
  <span class="cline-any cline-neutral">&nbsp;</span>
2423
- <span class="cline-any cline-no">&nbsp;</span>
2424
- <span class="cline-any cline-no">&nbsp;</span>
2425
2515
  <span class="cline-any cline-neutral">&nbsp;</span>
2426
2516
  <span class="cline-any cline-neutral">&nbsp;</span>
2427
- <span class="cline-any cline-no">&nbsp;</span>
2428
- <span class="cline-any cline-no">&nbsp;</span>
2429
2517
  <span class="cline-any cline-neutral">&nbsp;</span>
2430
2518
  <span class="cline-any cline-neutral">&nbsp;</span>
2431
2519
  <span class="cline-any cline-neutral">&nbsp;</span>
2432
- <span class="cline-any cline-no">&nbsp;</span>
2433
2520
  <span class="cline-any cline-neutral">&nbsp;</span>
2434
2521
  <span class="cline-any cline-neutral">&nbsp;</span>
2435
2522
  <span class="cline-any cline-neutral">&nbsp;</span>
2436
2523
  <span class="cline-any cline-neutral">&nbsp;</span>
2437
2524
  <span class="cline-any cline-neutral">&nbsp;</span>
2438
2525
  <span class="cline-any cline-neutral">&nbsp;</span>
2526
+ <span class="cline-any cline-yes">118x</span>
2527
+ <span class="cline-any cline-yes">117x</span>
2439
2528
  <span class="cline-any cline-neutral">&nbsp;</span>
2440
2529
  <span class="cline-any cline-neutral">&nbsp;</span>
2530
+ <span class="cline-any cline-yes">117x</span>
2531
+ <span class="cline-any cline-yes">10371x</span>
2441
2532
  <span class="cline-any cline-neutral">&nbsp;</span>
2442
2533
  <span class="cline-any cline-neutral">&nbsp;</span>
2443
2534
  <span class="cline-any cline-neutral">&nbsp;</span>
2444
2535
  <span class="cline-any cline-neutral">&nbsp;</span>
2536
+ <span class="cline-any cline-yes">6125x</span>
2537
+ <span class="cline-any cline-yes">6125x</span>
2445
2538
  <span class="cline-any cline-neutral">&nbsp;</span>
2446
2539
  <span class="cline-any cline-neutral">&nbsp;</span>
2540
+ <span class="cline-any cline-yes">4246x</span>
2541
+ <span class="cline-any cline-yes">4246x</span>
2447
2542
  <span class="cline-any cline-neutral">&nbsp;</span>
2448
2543
  <span class="cline-any cline-neutral">&nbsp;</span>
2449
2544
  <span class="cline-any cline-neutral">&nbsp;</span>
2450
- <span class="cline-any cline-no">&nbsp;</span>
2545
+ <span class="cline-any cline-yes">118x</span>
2451
2546
  <span class="cline-any cline-neutral">&nbsp;</span>
2452
2547
  <span class="cline-any cline-neutral">&nbsp;</span>
2453
2548
  <span class="cline-any cline-neutral">&nbsp;</span>
2454
2549
  <span class="cline-any cline-neutral">&nbsp;</span>
2455
2550
  <span class="cline-any cline-neutral">&nbsp;</span>
2456
2551
  <span class="cline-any cline-neutral">&nbsp;</span>
2457
- <span class="cline-any cline-no">&nbsp;</span>
2458
2552
  <span class="cline-any cline-neutral">&nbsp;</span>
2459
2553
  <span class="cline-any cline-neutral">&nbsp;</span>
2460
2554
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2466,117 +2560,109 @@
2466
2560
  <span class="cline-any cline-neutral">&nbsp;</span>
2467
2561
  <span class="cline-any cline-neutral">&nbsp;</span>
2468
2562
  <span class="cline-any cline-neutral">&nbsp;</span>
2469
- <span class="cline-any cline-no">&nbsp;</span>
2470
- <span class="cline-any cline-no">&nbsp;</span>
2471
2563
  <span class="cline-any cline-neutral">&nbsp;</span>
2564
+ <span class="cline-any cline-yes">117x</span>
2472
2565
  <span class="cline-any cline-neutral">&nbsp;</span>
2473
- <span class="cline-any cline-no">&nbsp;</span>
2474
- <span class="cline-any cline-no">&nbsp;</span>
2475
2566
  <span class="cline-any cline-neutral">&nbsp;</span>
2476
2567
  <span class="cline-any cline-neutral">&nbsp;</span>
2477
- <span class="cline-any cline-no">&nbsp;</span>
2478
- <span class="cline-any cline-no">&nbsp;</span>
2479
2568
  <span class="cline-any cline-neutral">&nbsp;</span>
2480
2569
  <span class="cline-any cline-neutral">&nbsp;</span>
2481
- <span class="cline-any cline-no">&nbsp;</span>
2482
2570
  <span class="cline-any cline-neutral">&nbsp;</span>
2571
+ <span class="cline-any cline-yes">20x</span>
2483
2572
  <span class="cline-any cline-neutral">&nbsp;</span>
2484
2573
  <span class="cline-any cline-neutral">&nbsp;</span>
2485
2574
  <span class="cline-any cline-neutral">&nbsp;</span>
2486
- <span class="cline-any cline-no">&nbsp;</span>
2487
- <span class="cline-any cline-no">&nbsp;</span>
2488
2575
  <span class="cline-any cline-neutral">&nbsp;</span>
2489
2576
  <span class="cline-any cline-neutral">&nbsp;</span>
2490
- <span class="cline-any cline-no">&nbsp;</span>
2491
2577
  <span class="cline-any cline-neutral">&nbsp;</span>
2492
2578
  <span class="cline-any cline-neutral">&nbsp;</span>
2493
2579
  <span class="cline-any cline-neutral">&nbsp;</span>
2494
- <span class="cline-any cline-no">&nbsp;</span>
2495
2580
  <span class="cline-any cline-neutral">&nbsp;</span>
2496
2581
  <span class="cline-any cline-neutral">&nbsp;</span>
2497
2582
  <span class="cline-any cline-neutral">&nbsp;</span>
2583
+ <span class="cline-any cline-yes">21471x</span>
2584
+ <span class="cline-any cline-yes">21150x</span>
2498
2585
  <span class="cline-any cline-neutral">&nbsp;</span>
2499
2586
  <span class="cline-any cline-neutral">&nbsp;</span>
2587
+ <span class="cline-any cline-yes">21471x</span>
2588
+ <span class="cline-any cline-yes">313x</span>
2500
2589
  <span class="cline-any cline-neutral">&nbsp;</span>
2501
2590
  <span class="cline-any cline-neutral">&nbsp;</span>
2591
+ <span class="cline-any cline-yes">21158x</span>
2592
+ <span class="cline-any cline-yes">21157x</span>
2502
2593
  <span class="cline-any cline-neutral">&nbsp;</span>
2503
2594
  <span class="cline-any cline-neutral">&nbsp;</span>
2504
- <span class="cline-any cline-no">&nbsp;</span>
2505
- <span class="cline-any cline-no">&nbsp;</span>
2595
+ <span class="cline-any cline-yes">1x</span>
2506
2596
  <span class="cline-any cline-neutral">&nbsp;</span>
2507
2597
  <span class="cline-any cline-neutral">&nbsp;</span>
2508
2598
  <span class="cline-any cline-neutral">&nbsp;</span>
2509
2599
  <span class="cline-any cline-neutral">&nbsp;</span>
2600
+ <span class="cline-any cline-yes">9x</span>
2601
+ <span class="cline-any cline-yes">5x</span>
2510
2602
  <span class="cline-any cline-neutral">&nbsp;</span>
2511
2603
  <span class="cline-any cline-neutral">&nbsp;</span>
2604
+ <span class="cline-any cline-yes">4x</span>
2512
2605
  <span class="cline-any cline-neutral">&nbsp;</span>
2513
2606
  <span class="cline-any cline-neutral">&nbsp;</span>
2514
2607
  <span class="cline-any cline-neutral">&nbsp;</span>
2608
+ <span class="cline-any cline-yes">47568x</span>
2515
2609
  <span class="cline-any cline-neutral">&nbsp;</span>
2516
- <span class="cline-any cline-no">&nbsp;</span>
2517
- <span class="cline-any cline-no">&nbsp;</span>
2518
2610
  <span class="cline-any cline-neutral">&nbsp;</span>
2519
- <span class="cline-any cline-no">&nbsp;</span>
2520
- <span class="cline-any cline-no">&nbsp;</span>
2521
2611
  <span class="cline-any cline-neutral">&nbsp;</span>
2522
2612
  <span class="cline-any cline-neutral">&nbsp;</span>
2523
- <span class="cline-any cline-no">&nbsp;</span>
2524
2613
  <span class="cline-any cline-neutral">&nbsp;</span>
2525
2614
  <span class="cline-any cline-neutral">&nbsp;</span>
2526
2615
  <span class="cline-any cline-neutral">&nbsp;</span>
2527
2616
  <span class="cline-any cline-neutral">&nbsp;</span>
2528
2617
  <span class="cline-any cline-neutral">&nbsp;</span>
2618
+ <span class="cline-any cline-yes">67268x</span>
2619
+ <span class="cline-any cline-yes">67268x</span>
2529
2620
  <span class="cline-any cline-neutral">&nbsp;</span>
2530
2621
  <span class="cline-any cline-neutral">&nbsp;</span>
2531
- <span class="cline-any cline-no">&nbsp;</span>
2532
2622
  <span class="cline-any cline-neutral">&nbsp;</span>
2533
- <span class="cline-any cline-no">&nbsp;</span>
2534
- <span class="cline-any cline-no">&nbsp;</span>
2535
2623
  <span class="cline-any cline-neutral">&nbsp;</span>
2536
2624
  <span class="cline-any cline-neutral">&nbsp;</span>
2537
- <span class="cline-any cline-no">&nbsp;</span>
2538
2625
  <span class="cline-any cline-neutral">&nbsp;</span>
2539
2626
  <span class="cline-any cline-neutral">&nbsp;</span>
2540
2627
  <span class="cline-any cline-neutral">&nbsp;</span>
2541
2628
  <span class="cline-any cline-neutral">&nbsp;</span>
2542
2629
  <span class="cline-any cline-neutral">&nbsp;</span>
2630
+ <span class="cline-any cline-yes">17251x</span>
2631
+ <span class="cline-any cline-yes">17251x</span>
2543
2632
  <span class="cline-any cline-neutral">&nbsp;</span>
2633
+ <span class="cline-any cline-yes">17251x</span>
2634
+ <span class="cline-any cline-yes">14926x</span>
2544
2635
  <span class="cline-any cline-neutral">&nbsp;</span>
2545
- <span class="cline-any cline-no">&nbsp;</span>
2546
2636
  <span class="cline-any cline-neutral">&nbsp;</span>
2547
- <span class="cline-any cline-no">&nbsp;</span>
2548
- <span class="cline-any cline-no">&nbsp;</span>
2637
+ <span class="cline-any cline-yes">2325x</span>
2549
2638
  <span class="cline-any cline-neutral">&nbsp;</span>
2550
2639
  <span class="cline-any cline-neutral">&nbsp;</span>
2551
- <span class="cline-any cline-no">&nbsp;</span>
2552
2640
  <span class="cline-any cline-neutral">&nbsp;</span>
2553
2641
  <span class="cline-any cline-neutral">&nbsp;</span>
2554
2642
  <span class="cline-any cline-neutral">&nbsp;</span>
2555
2643
  <span class="cline-any cline-neutral">&nbsp;</span>
2556
2644
  <span class="cline-any cline-neutral">&nbsp;</span>
2645
+ <span class="cline-any cline-yes">215x</span>
2557
2646
  <span class="cline-any cline-neutral">&nbsp;</span>
2647
+ <span class="cline-any cline-yes">75x</span>
2648
+ <span class="cline-any cline-yes">74x</span>
2558
2649
  <span class="cline-any cline-neutral">&nbsp;</span>
2559
2650
  <span class="cline-any cline-neutral">&nbsp;</span>
2651
+ <span class="cline-any cline-yes">1x</span>
2560
2652
  <span class="cline-any cline-neutral">&nbsp;</span>
2561
2653
  <span class="cline-any cline-neutral">&nbsp;</span>
2562
- <span class="cline-any cline-no">&nbsp;</span>
2563
- <span class="cline-any cline-no">&nbsp;</span>
2564
2654
  <span class="cline-any cline-neutral">&nbsp;</span>
2565
2655
  <span class="cline-any cline-neutral">&nbsp;</span>
2566
- <span class="cline-any cline-no">&nbsp;</span>
2567
- <span class="cline-any cline-no">&nbsp;</span>
2568
- <span class="cline-any cline-no">&nbsp;</span>
2569
2656
  <span class="cline-any cline-neutral">&nbsp;</span>
2570
- <span class="cline-any cline-no">&nbsp;</span>
2571
- <span class="cline-any cline-no">&nbsp;</span>
2572
2657
  <span class="cline-any cline-neutral">&nbsp;</span>
2573
2658
  <span class="cline-any cline-neutral">&nbsp;</span>
2574
- <span class="cline-any cline-no">&nbsp;</span>
2575
- <span class="cline-any cline-no">&nbsp;</span>
2659
+ <span class="cline-any cline-yes">14937x</span>
2576
2660
  <span class="cline-any cline-neutral">&nbsp;</span>
2661
+ <span class="cline-any cline-yes">7469x</span>
2662
+ <span class="cline-any cline-yes">7468x</span>
2577
2663
  <span class="cline-any cline-neutral">&nbsp;</span>
2578
- <span class="cline-any cline-no">&nbsp;</span>
2579
2664
  <span class="cline-any cline-neutral">&nbsp;</span>
2665
+ <span class="cline-any cline-yes">1x</span>
2580
2666
  <span class="cline-any cline-neutral">&nbsp;</span>
2581
2667
  <span class="cline-any cline-neutral">&nbsp;</span>
2582
2668
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2586,84 +2672,88 @@
2586
2672
  <span class="cline-any cline-neutral">&nbsp;</span>
2587
2673
  <span class="cline-any cline-neutral">&nbsp;</span>
2588
2674
  <span class="cline-any cline-neutral">&nbsp;</span>
2589
- <span class="cline-any cline-no">&nbsp;</span>
2590
2675
  <span class="cline-any cline-neutral">&nbsp;</span>
2591
- <span class="cline-any cline-no">&nbsp;</span>
2676
+ <span class="cline-any cline-yes">4x</span>
2677
+ <span class="cline-any cline-yes">1x</span>
2592
2678
  <span class="cline-any cline-neutral">&nbsp;</span>
2593
- <span class="cline-any cline-no">&nbsp;</span>
2594
2679
  <span class="cline-any cline-neutral">&nbsp;</span>
2595
- <span class="cline-any cline-no">&nbsp;</span>
2596
- <span class="cline-any cline-no">&nbsp;</span>
2680
+ <span class="cline-any cline-yes">3x</span>
2681
+ <span class="cline-any cline-yes">3x</span>
2682
+ <span class="cline-any cline-yes">3x</span>
2597
2683
  <span class="cline-any cline-neutral">&nbsp;</span>
2684
+ <span class="cline-any cline-yes">3x</span>
2685
+ <span class="cline-any cline-yes">1x</span>
2598
2686
  <span class="cline-any cline-neutral">&nbsp;</span>
2599
- <span class="cline-any cline-no">&nbsp;</span>
2600
2687
  <span class="cline-any cline-neutral">&nbsp;</span>
2601
- <span class="cline-any cline-no">&nbsp;</span>
2602
- <span class="cline-any cline-no">&nbsp;</span>
2688
+ <span class="cline-any cline-yes">2x</span>
2689
+ <span class="cline-any cline-yes">1x</span>
2603
2690
  <span class="cline-any cline-neutral">&nbsp;</span>
2604
2691
  <span class="cline-any cline-neutral">&nbsp;</span>
2605
- <span class="cline-any cline-no">&nbsp;</span>
2692
+ <span class="cline-any cline-yes">1x</span>
2606
2693
  <span class="cline-any cline-neutral">&nbsp;</span>
2607
2694
  <span class="cline-any cline-neutral">&nbsp;</span>
2608
2695
  <span class="cline-any cline-neutral">&nbsp;</span>
2609
2696
  <span class="cline-any cline-neutral">&nbsp;</span>
2610
- <span class="cline-any cline-no">&nbsp;</span>
2611
- <span class="cline-any cline-no">&nbsp;</span>
2612
- <span class="cline-any cline-no">&nbsp;</span>
2613
- <span class="cline-any cline-no">&nbsp;</span>
2614
2697
  <span class="cline-any cline-neutral">&nbsp;</span>
2615
- <span class="cline-any cline-no">&nbsp;</span>
2616
2698
  <span class="cline-any cline-neutral">&nbsp;</span>
2617
2699
  <span class="cline-any cline-neutral">&nbsp;</span>
2618
- <span class="cline-any cline-no">&nbsp;</span>
2619
- <span class="cline-any cline-no">&nbsp;</span>
2620
- <span class="cline-any cline-no">&nbsp;</span>
2621
2700
  <span class="cline-any cline-neutral">&nbsp;</span>
2622
2701
  <span class="cline-any cline-neutral">&nbsp;</span>
2623
2702
  <span class="cline-any cline-neutral">&nbsp;</span>
2624
- <span class="cline-any cline-no">&nbsp;</span>
2703
+ <span class="cline-any cline-yes">84x</span>
2625
2704
  <span class="cline-any cline-neutral">&nbsp;</span>
2705
+ <span class="cline-any cline-yes">30x</span>
2626
2706
  <span class="cline-any cline-neutral">&nbsp;</span>
2627
- <span class="cline-any cline-no">&nbsp;</span>
2707
+ <span class="cline-any cline-yes">30x</span>
2628
2708
  <span class="cline-any cline-neutral">&nbsp;</span>
2709
+ <span class="cline-any cline-yes">30x</span>
2710
+ <span class="cline-any cline-yes">2x</span>
2629
2711
  <span class="cline-any cline-neutral">&nbsp;</span>
2630
2712
  <span class="cline-any cline-neutral">&nbsp;</span>
2631
- <span class="cline-any cline-no">&nbsp;</span>
2632
- <span class="cline-any cline-no">&nbsp;</span>
2633
- <span class="cline-any cline-no">&nbsp;</span>
2634
- <span class="cline-any cline-no">&nbsp;</span>
2713
+ <span class="cline-any cline-yes">28x</span>
2635
2714
  <span class="cline-any cline-neutral">&nbsp;</span>
2636
- <span class="cline-any cline-no">&nbsp;</span>
2715
+ <span class="cline-any cline-yes">28x</span>
2716
+ <span class="cline-any cline-yes">27x</span>
2637
2717
  <span class="cline-any cline-neutral">&nbsp;</span>
2638
- <span class="cline-any cline-no">&nbsp;</span>
2639
2718
  <span class="cline-any cline-neutral">&nbsp;</span>
2719
+ <span class="cline-any cline-yes">1x</span>
2640
2720
  <span class="cline-any cline-neutral">&nbsp;</span>
2641
- <span class="cline-any cline-no">&nbsp;</span>
2642
2721
  <span class="cline-any cline-neutral">&nbsp;</span>
2643
2722
  <span class="cline-any cline-neutral">&nbsp;</span>
2644
2723
  <span class="cline-any cline-neutral">&nbsp;</span>
2724
+ <span class="cline-any cline-yes">121x</span>
2725
+ <span class="cline-any cline-yes">121x</span>
2726
+ <span class="cline-any cline-yes">264x</span>
2727
+ <span class="cline-any cline-yes">264x</span>
2645
2728
  <span class="cline-any cline-neutral">&nbsp;</span>
2729
+ <span class="cline-any cline-yes">121x</span>
2646
2730
  <span class="cline-any cline-neutral">&nbsp;</span>
2647
2731
  <span class="cline-any cline-neutral">&nbsp;</span>
2732
+ <span class="cline-any cline-yes">121x</span>
2733
+ <span class="cline-any cline-yes">264x</span>
2734
+ <span class="cline-any cline-yes">261x</span>
2648
2735
  <span class="cline-any cline-neutral">&nbsp;</span>
2649
2736
  <span class="cline-any cline-neutral">&nbsp;</span>
2650
- <span class="cline-any cline-no">&nbsp;</span>
2651
2737
  <span class="cline-any cline-neutral">&nbsp;</span>
2738
+ <span class="cline-any cline-yes">143x</span>
2652
2739
  <span class="cline-any cline-neutral">&nbsp;</span>
2653
2740
  <span class="cline-any cline-neutral">&nbsp;</span>
2741
+ <span class="cline-any cline-yes">261x</span>
2654
2742
  <span class="cline-any cline-neutral">&nbsp;</span>
2655
- <span class="cline-any cline-no">&nbsp;</span>
2656
- <span class="cline-any cline-no">&nbsp;</span>
2657
2743
  <span class="cline-any cline-neutral">&nbsp;</span>
2658
2744
  <span class="cline-any cline-neutral">&nbsp;</span>
2659
- <span class="cline-any cline-no">&nbsp;</span>
2660
- <span class="cline-any cline-no">&nbsp;</span>
2745
+ <span class="cline-any cline-yes">264x</span>
2746
+ <span class="cline-any cline-yes">121x</span>
2747
+ <span class="cline-any cline-yes">264x</span>
2748
+ <span class="cline-any cline-yes">1x</span>
2661
2749
  <span class="cline-any cline-neutral">&nbsp;</span>
2750
+ <span class="cline-any cline-yes">121x</span>
2662
2751
  <span class="cline-any cline-neutral">&nbsp;</span>
2752
+ <span class="cline-any cline-yes">3x</span>
2663
2753
  <span class="cline-any cline-neutral">&nbsp;</span>
2664
2754
  <span class="cline-any cline-neutral">&nbsp;</span>
2755
+ <span class="cline-any cline-yes">121x</span>
2665
2756
  <span class="cline-any cline-neutral">&nbsp;</span>
2666
- <span class="cline-any cline-no">&nbsp;</span>
2667
2757
  <span class="cline-any cline-neutral">&nbsp;</span>
2668
2758
  <span class="cline-any cline-neutral">&nbsp;</span>
2669
2759
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2671,190 +2761,205 @@
2671
2761
  <span class="cline-any cline-neutral">&nbsp;</span>
2672
2762
  <span class="cline-any cline-neutral">&nbsp;</span>
2673
2763
  <span class="cline-any cline-neutral">&nbsp;</span>
2764
+ <span class="cline-any cline-yes">7548x</span>
2674
2765
  <span class="cline-any cline-neutral">&nbsp;</span>
2675
2766
  <span class="cline-any cline-neutral">&nbsp;</span>
2676
2767
  <span class="cline-any cline-neutral">&nbsp;</span>
2677
2768
  <span class="cline-any cline-neutral">&nbsp;</span>
2769
+ <span class="cline-any cline-yes">7548x</span>
2770
+ <span class="cline-any cline-yes">1845x</span>
2678
2771
  <span class="cline-any cline-neutral">&nbsp;</span>
2679
- <span class="cline-any cline-no">&nbsp;</span>
2680
2772
  <span class="cline-any cline-neutral">&nbsp;</span>
2681
- <span class="cline-any cline-no">&nbsp;</span>
2682
- <span class="cline-any cline-no">&nbsp;</span>
2683
- <span class="cline-any cline-no">&nbsp;</span>
2773
+ <span class="cline-any cline-yes">5703x</span>
2774
+ <span class="cline-any cline-yes">16x</span>
2684
2775
  <span class="cline-any cline-neutral">&nbsp;</span>
2685
2776
  <span class="cline-any cline-neutral">&nbsp;</span>
2686
- <span class="cline-any cline-no">&nbsp;</span>
2687
2777
  <span class="cline-any cline-neutral">&nbsp;</span>
2688
2778
  <span class="cline-any cline-neutral">&nbsp;</span>
2689
2779
  <span class="cline-any cline-neutral">&nbsp;</span>
2690
- <span class="cline-any cline-no">&nbsp;</span>
2691
- <span class="cline-any cline-no">&nbsp;</span>
2780
+ <span class="cline-any cline-yes">5687x</span>
2692
2781
  <span class="cline-any cline-neutral">&nbsp;</span>
2693
2782
  <span class="cline-any cline-neutral">&nbsp;</span>
2694
2783
  <span class="cline-any cline-neutral">&nbsp;</span>
2695
2784
  <span class="cline-any cline-neutral">&nbsp;</span>
2696
2785
  <span class="cline-any cline-neutral">&nbsp;</span>
2697
2786
  <span class="cline-any cline-neutral">&nbsp;</span>
2698
- <span class="cline-any cline-no">&nbsp;</span>
2699
2787
  <span class="cline-any cline-neutral">&nbsp;</span>
2700
- <span class="cline-any cline-no">&nbsp;</span>
2701
- <span class="cline-any cline-no">&nbsp;</span>
2702
- <span class="cline-any cline-no">&nbsp;</span>
2703
- <span class="cline-any cline-no">&nbsp;</span>
2704
2788
  <span class="cline-any cline-neutral">&nbsp;</span>
2705
2789
  <span class="cline-any cline-neutral">&nbsp;</span>
2706
2790
  <span class="cline-any cline-neutral">&nbsp;</span>
2707
2791
  <span class="cline-any cline-neutral">&nbsp;</span>
2708
- <span class="cline-any cline-no">&nbsp;</span>
2709
2792
  <span class="cline-any cline-neutral">&nbsp;</span>
2793
+ <span class="cline-any cline-yes">7497x</span>
2710
2794
  <span class="cline-any cline-neutral">&nbsp;</span>
2795
+ <span class="cline-any cline-yes">7497x</span>
2796
+ <span class="cline-any cline-yes">7621x</span>
2797
+ <span class="cline-any cline-yes">73x</span>
2711
2798
  <span class="cline-any cline-neutral">&nbsp;</span>
2712
- <span class="cline-any cline-no">&nbsp;</span>
2713
2799
  <span class="cline-any cline-neutral">&nbsp;</span>
2800
+ <span class="cline-any cline-yes">7548x</span>
2714
2801
  <span class="cline-any cline-neutral">&nbsp;</span>
2715
2802
  <span class="cline-any cline-neutral">&nbsp;</span>
2716
- <span class="cline-any cline-no">&nbsp;</span>
2717
- <span class="cline-any cline-no">&nbsp;</span>
2718
2803
  <span class="cline-any cline-neutral">&nbsp;</span>
2804
+ <span class="cline-any cline-yes">7548x</span>
2805
+ <span class="cline-any cline-yes">6008x</span>
2719
2806
  <span class="cline-any cline-neutral">&nbsp;</span>
2720
- <span class="cline-any cline-no">&nbsp;</span>
2721
2807
  <span class="cline-any cline-neutral">&nbsp;</span>
2722
2808
  <span class="cline-any cline-neutral">&nbsp;</span>
2723
2809
  <span class="cline-any cline-neutral">&nbsp;</span>
2724
- <span class="cline-any cline-no">&nbsp;</span>
2725
- <span class="cline-any cline-no">&nbsp;</span>
2726
2810
  <span class="cline-any cline-neutral">&nbsp;</span>
2727
2811
  <span class="cline-any cline-neutral">&nbsp;</span>
2812
+ <span class="cline-any cline-yes">463x</span>
2728
2813
  <span class="cline-any cline-neutral">&nbsp;</span>
2814
+ <span class="cline-any cline-yes">463x</span>
2815
+ <span class="cline-any cline-yes">1525x</span>
2816
+ <span class="cline-any cline-yes">528x</span>
2817
+ <span class="cline-any cline-yes">997x</span>
2818
+ <span class="cline-any cline-yes">125x</span>
2819
+ <span class="cline-any cline-yes">872x</span>
2820
+ <span class="cline-any cline-yes">13x</span>
2729
2821
  <span class="cline-any cline-neutral">&nbsp;</span>
2730
2822
  <span class="cline-any cline-neutral">&nbsp;</span>
2731
2823
  <span class="cline-any cline-neutral">&nbsp;</span>
2824
+ <span class="cline-any cline-yes">463x</span>
2732
2825
  <span class="cline-any cline-neutral">&nbsp;</span>
2733
2826
  <span class="cline-any cline-neutral">&nbsp;</span>
2734
2827
  <span class="cline-any cline-neutral">&nbsp;</span>
2735
- <span class="cline-any cline-no">&nbsp;</span>
2828
+ <span class="cline-any cline-yes">996x</span>
2829
+ <span class="cline-any cline-yes">979x</span>
2736
2830
  <span class="cline-any cline-neutral">&nbsp;</span>
2737
2831
  <span class="cline-any cline-neutral">&nbsp;</span>
2832
+ <span class="cline-any cline-yes">17x</span>
2738
2833
  <span class="cline-any cline-neutral">&nbsp;</span>
2739
2834
  <span class="cline-any cline-neutral">&nbsp;</span>
2740
- <span class="cline-any cline-no">&nbsp;</span>
2741
2835
  <span class="cline-any cline-neutral">&nbsp;</span>
2836
+ <span class="cline-any cline-yes">1x</span>
2837
+ <span class="cline-any cline-yes">3x</span>
2742
2838
  <span class="cline-any cline-neutral">&nbsp;</span>
2743
2839
  <span class="cline-any cline-neutral">&nbsp;</span>
2744
2840
  <span class="cline-any cline-neutral">&nbsp;</span>
2745
2841
  <span class="cline-any cline-neutral">&nbsp;</span>
2746
- <span class="cline-any cline-no">&nbsp;</span>
2747
2842
  <span class="cline-any cline-neutral">&nbsp;</span>
2748
2843
  <span class="cline-any cline-neutral">&nbsp;</span>
2749
2844
  <span class="cline-any cline-neutral">&nbsp;</span>
2750
2845
  <span class="cline-any cline-neutral">&nbsp;</span>
2751
- <span class="cline-any cline-no">&nbsp;</span>
2752
- <span class="cline-any cline-no">&nbsp;</span>
2753
- <span class="cline-any cline-no">&nbsp;</span>
2754
2846
  <span class="cline-any cline-neutral">&nbsp;</span>
2847
+ <span class="cline-any cline-yes">1x</span>
2755
2848
  <span class="cline-any cline-neutral">&nbsp;</span>
2756
- <span class="cline-any cline-no">&nbsp;</span>
2757
2849
  <span class="cline-any cline-neutral">&nbsp;</span>
2758
2850
  <span class="cline-any cline-neutral">&nbsp;</span>
2759
2851
  <span class="cline-any cline-neutral">&nbsp;</span>
2852
+ <span class="cline-any cline-yes">1x</span>
2760
2853
  <span class="cline-any cline-neutral">&nbsp;</span>
2761
2854
  <span class="cline-any cline-neutral">&nbsp;</span>
2762
2855
  <span class="cline-any cline-neutral">&nbsp;</span>
2763
2856
  <span class="cline-any cline-neutral">&nbsp;</span>
2764
- <span class="cline-any cline-no">&nbsp;</span>
2765
- <span class="cline-any cline-no">&nbsp;</span>
2766
- <span class="cline-any cline-no">&nbsp;</span>
2767
2857
  <span class="cline-any cline-neutral">&nbsp;</span>
2858
+ <span class="cline-any cline-yes">1x</span>
2768
2859
  <span class="cline-any cline-neutral">&nbsp;</span>
2769
2860
  <span class="cline-any cline-neutral">&nbsp;</span>
2770
2861
  <span class="cline-any cline-neutral">&nbsp;</span>
2771
- <span class="cline-any cline-no">&nbsp;</span>
2772
2862
  <span class="cline-any cline-neutral">&nbsp;</span>
2773
- <span class="cline-any cline-no">&nbsp;</span>
2863
+ <span class="cline-any cline-yes">1x</span>
2864
+ <span class="cline-any cline-yes">3x</span>
2865
+ <span class="cline-any cline-yes">1x</span>
2774
2866
  <span class="cline-any cline-neutral">&nbsp;</span>
2775
- <span class="cline-any cline-no">&nbsp;</span>
2776
- <span class="cline-any cline-no">&nbsp;</span>
2777
2867
  <span class="cline-any cline-neutral">&nbsp;</span>
2778
- <span class="cline-any cline-no">&nbsp;</span>
2868
+ <span class="cline-any cline-yes">2x</span>
2779
2869
  <span class="cline-any cline-neutral">&nbsp;</span>
2780
2870
  <span class="cline-any cline-neutral">&nbsp;</span>
2781
2871
  <span class="cline-any cline-neutral">&nbsp;</span>
2782
- <span class="cline-any cline-no">&nbsp;</span>
2783
- <span class="cline-any cline-no">&nbsp;</span>
2784
- <span class="cline-any cline-no">&nbsp;</span>
2785
- <span class="cline-any cline-no">&nbsp;</span>
2786
- <span class="cline-any cline-no">&nbsp;</span>
2787
- <span class="cline-any cline-no">&nbsp;</span>
2788
- <span class="cline-any cline-no">&nbsp;</span>
2789
- <span class="cline-any cline-no">&nbsp;</span>
2790
2872
  <span class="cline-any cline-neutral">&nbsp;</span>
2791
- <span class="cline-any cline-no">&nbsp;</span>
2792
2873
  <span class="cline-any cline-neutral">&nbsp;</span>
2793
2874
  <span class="cline-any cline-neutral">&nbsp;</span>
2794
2875
  <span class="cline-any cline-neutral">&nbsp;</span>
2876
+ <span class="cline-any cline-yes">1x</span>
2877
+ <span class="cline-any cline-yes">1x</span>
2878
+ <span class="cline-any cline-yes">1x</span>
2795
2879
  <span class="cline-any cline-neutral">&nbsp;</span>
2796
2880
  <span class="cline-any cline-neutral">&nbsp;</span>
2797
2881
  <span class="cline-any cline-neutral">&nbsp;</span>
2798
2882
  <span class="cline-any cline-neutral">&nbsp;</span>
2883
+ <span class="cline-any cline-yes">216x</span>
2884
+ <span class="cline-any cline-yes">216x</span>
2799
2885
  <span class="cline-any cline-neutral">&nbsp;</span>
2800
- <span class="cline-any cline-no">&nbsp;</span>
2801
- <span class="cline-any cline-no">&nbsp;</span>
2886
+ <span class="cline-any cline-yes">216x</span>
2802
2887
  <span class="cline-any cline-neutral">&nbsp;</span>
2888
+ <span class="cline-any cline-yes">690x</span>
2889
+ <span class="cline-any cline-yes">453x</span>
2803
2890
  <span class="cline-any cline-neutral">&nbsp;</span>
2891
+ <span class="cline-any cline-yes">453x</span>
2804
2892
  <span class="cline-any cline-neutral">&nbsp;</span>
2805
- <span class="cline-any cline-no">&nbsp;</span>
2806
- <span class="cline-any cline-no">&nbsp;</span>
2807
2893
  <span class="cline-any cline-neutral">&nbsp;</span>
2808
- <span class="cline-any cline-no">&nbsp;</span>
2809
- <span class="cline-any cline-no">&nbsp;</span>
2810
2894
  <span class="cline-any cline-neutral">&nbsp;</span>
2895
+ <span class="cline-any cline-yes">264x</span>
2896
+ <span class="cline-any cline-yes">3x</span>
2897
+ <span class="cline-any cline-yes">3x</span>
2811
2898
  <span class="cline-any cline-neutral">&nbsp;</span>
2812
2899
  <span class="cline-any cline-neutral">&nbsp;</span>
2813
- <span class="cline-any cline-no">&nbsp;</span>
2900
+ <span class="cline-any cline-yes">261x</span>
2901
+ <span class="cline-any cline-yes">189x</span>
2902
+ <span class="cline-any cline-yes">30x</span>
2814
2903
  <span class="cline-any cline-neutral">&nbsp;</span>
2815
2904
  <span class="cline-any cline-neutral">&nbsp;</span>
2816
2905
  <span class="cline-any cline-neutral">&nbsp;</span>
2817
2906
  <span class="cline-any cline-neutral">&nbsp;</span>
2907
+ <span class="cline-any cline-yes">20x</span>
2908
+ <span class="cline-any cline-yes">20x</span>
2818
2909
  <span class="cline-any cline-neutral">&nbsp;</span>
2819
- <span class="cline-any cline-no">&nbsp;</span>
2820
2910
  <span class="cline-any cline-neutral">&nbsp;</span>
2821
- <span class="cline-any cline-no">&nbsp;</span>
2911
+ <span class="cline-any cline-yes">10x</span>
2912
+ <span class="cline-any cline-yes">10x</span>
2913
+ <span class="cline-any cline-yes">159x</span>
2914
+ <span class="cline-any cline-yes">6x</span>
2915
+ <span class="cline-any cline-yes">153x</span>
2916
+ <span class="cline-any cline-yes">15x</span>
2822
2917
  <span class="cline-any cline-neutral">&nbsp;</span>
2918
+ <span class="cline-any cline-yes">37x</span>
2823
2919
  <span class="cline-any cline-neutral">&nbsp;</span>
2824
2920
  <span class="cline-any cline-neutral">&nbsp;</span>
2825
- <span class="cline-any cline-no">&nbsp;</span>
2826
2921
  <span class="cline-any cline-neutral">&nbsp;</span>
2827
- <span class="cline-any cline-no">&nbsp;</span>
2828
- <span class="cline-any cline-no">&nbsp;</span>
2829
2922
  <span class="cline-any cline-neutral">&nbsp;</span>
2830
2923
  <span class="cline-any cline-neutral">&nbsp;</span>
2831
- <span class="cline-any cline-no">&nbsp;</span>
2832
2924
  <span class="cline-any cline-neutral">&nbsp;</span>
2833
2925
  <span class="cline-any cline-neutral">&nbsp;</span>
2834
2926
  <span class="cline-any cline-neutral">&nbsp;</span>
2835
- <span class="cline-any cline-no">&nbsp;</span>
2927
+ <span class="cline-any cline-yes">15x</span>
2928
+ <span class="cline-any cline-yes">11x</span>
2836
2929
  <span class="cline-any cline-neutral">&nbsp;</span>
2837
2930
  <span class="cline-any cline-neutral">&nbsp;</span>
2838
2931
  <span class="cline-any cline-neutral">&nbsp;</span>
2932
+ <span class="cline-any cline-yes">4x</span>
2933
+ <span class="cline-any cline-yes">4x</span>
2839
2934
  <span class="cline-any cline-neutral">&nbsp;</span>
2935
+ <span class="cline-any cline-yes">138x</span>
2936
+ <span class="cline-any cline-yes">138x</span>
2840
2937
  <span class="cline-any cline-neutral">&nbsp;</span>
2841
2938
  <span class="cline-any cline-neutral">&nbsp;</span>
2842
2939
  <span class="cline-any cline-neutral">&nbsp;</span>
2940
+ <span class="cline-any cline-yes">237x</span>
2843
2941
  <span class="cline-any cline-neutral">&nbsp;</span>
2844
2942
  <span class="cline-any cline-neutral">&nbsp;</span>
2845
2943
  <span class="cline-any cline-neutral">&nbsp;</span>
2846
2944
  <span class="cline-any cline-neutral">&nbsp;</span>
2847
2945
  <span class="cline-any cline-neutral">&nbsp;</span>
2946
+ <span class="cline-any cline-yes">121x</span>
2848
2947
  <span class="cline-any cline-neutral">&nbsp;</span>
2948
+ <span class="cline-any cline-yes">144x</span>
2849
2949
  <span class="cline-any cline-neutral">&nbsp;</span>
2850
2950
  <span class="cline-any cline-neutral">&nbsp;</span>
2851
2951
  <span class="cline-any cline-neutral">&nbsp;</span>
2952
+ <span class="cline-any cline-yes">121x</span>
2852
2953
  <span class="cline-any cline-neutral">&nbsp;</span>
2954
+ <span class="cline-any cline-yes">121x</span>
2955
+ <span class="cline-any cline-yes">1x</span>
2853
2956
  <span class="cline-any cline-neutral">&nbsp;</span>
2854
2957
  <span class="cline-any cline-neutral">&nbsp;</span>
2958
+ <span class="cline-any cline-yes">121x</span>
2855
2959
  <span class="cline-any cline-neutral">&nbsp;</span>
2856
2960
  <span class="cline-any cline-neutral">&nbsp;</span>
2857
2961
  <span class="cline-any cline-neutral">&nbsp;</span>
2962
+ <span class="cline-any cline-yes">7094x</span>
2858
2963
  <span class="cline-any cline-neutral">&nbsp;</span>
2859
2964
  <span class="cline-any cline-neutral">&nbsp;</span>
2860
2965
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2894,31 +2999,19 @@
2894
2999
  <span class="cline-any cline-neutral">&nbsp;</span>
2895
3000
  <span class="cline-any cline-neutral">&nbsp;</span>
2896
3001
  <span class="cline-any cline-neutral">&nbsp;</span>
2897
- <span class="cline-any cline-no">&nbsp;</span>
2898
- <span class="cline-any cline-no">&nbsp;</span>
2899
3002
  <span class="cline-any cline-neutral">&nbsp;</span>
2900
- <span class="cline-any cline-no">&nbsp;</span>
2901
- <span class="cline-any cline-no">&nbsp;</span>
2902
- <span class="cline-any cline-no">&nbsp;</span>
2903
- <span class="cline-any cline-no">&nbsp;</span>
2904
3003
  <span class="cline-any cline-neutral">&nbsp;</span>
2905
3004
  <span class="cline-any cline-neutral">&nbsp;</span>
2906
- <span class="cline-any cline-no">&nbsp;</span>
2907
- <span class="cline-any cline-no">&nbsp;</span>
2908
- <span class="cline-any cline-no">&nbsp;</span>
2909
3005
  <span class="cline-any cline-neutral">&nbsp;</span>
2910
3006
  <span class="cline-any cline-neutral">&nbsp;</span>
2911
- <span class="cline-any cline-no">&nbsp;</span>
2912
3007
  <span class="cline-any cline-neutral">&nbsp;</span>
2913
3008
  <span class="cline-any cline-neutral">&nbsp;</span>
2914
3009
  <span class="cline-any cline-neutral">&nbsp;</span>
2915
- <span class="cline-any cline-no">&nbsp;</span>
2916
3010
  <span class="cline-any cline-neutral">&nbsp;</span>
2917
3011
  <span class="cline-any cline-neutral">&nbsp;</span>
2918
3012
  <span class="cline-any cline-neutral">&nbsp;</span>
2919
3013
  <span class="cline-any cline-neutral">&nbsp;</span>
2920
3014
  <span class="cline-any cline-neutral">&nbsp;</span>
2921
- <span class="cline-any cline-no">&nbsp;</span>
2922
3015
  <span class="cline-any cline-neutral">&nbsp;</span>
2923
3016
  <span class="cline-any cline-neutral">&nbsp;</span>
2924
3017
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2928,36 +3021,42 @@
2928
3021
  <span class="cline-any cline-neutral">&nbsp;</span>
2929
3022
  <span class="cline-any cline-neutral">&nbsp;</span>
2930
3023
  <span class="cline-any cline-neutral">&nbsp;</span>
3024
+ <span class="cline-any cline-yes">130x</span>
3025
+ <span class="cline-any cline-yes">130x</span>
2931
3026
  <span class="cline-any cline-neutral">&nbsp;</span>
3027
+ <span class="cline-any cline-yes">130x</span>
3028
+ <span class="cline-any cline-yes">437x</span>
3029
+ <span class="cline-any cline-yes">153x</span>
3030
+ <span class="cline-any cline-yes">153x</span>
2932
3031
  <span class="cline-any cline-neutral">&nbsp;</span>
2933
3032
  <span class="cline-any cline-neutral">&nbsp;</span>
3033
+ <span class="cline-any cline-yes">284x</span>
3034
+ <span class="cline-any cline-yes">121x</span>
2934
3035
  <span class="cline-any cline-neutral">&nbsp;</span>
2935
3036
  <span class="cline-any cline-neutral">&nbsp;</span>
2936
3037
  <span class="cline-any cline-neutral">&nbsp;</span>
2937
3038
  <span class="cline-any cline-neutral">&nbsp;</span>
3039
+ <span class="cline-any cline-yes">121x</span>
3040
+ <span class="cline-any cline-yes">121x</span>
2938
3041
  <span class="cline-any cline-neutral">&nbsp;</span>
2939
3042
  <span class="cline-any cline-neutral">&nbsp;</span>
2940
- <span class="cline-any cline-no">&nbsp;</span>
2941
- <span class="cline-any cline-no">&nbsp;</span>
2942
- <span class="cline-any cline-no">&nbsp;</span>
3043
+ <span class="cline-any cline-yes">163x</span>
3044
+ <span class="cline-any cline-yes">41x</span>
3045
+ <span class="cline-any cline-yes">41x</span>
2943
3046
  <span class="cline-any cline-neutral">&nbsp;</span>
2944
3047
  <span class="cline-any cline-neutral">&nbsp;</span>
2945
- <span class="cline-any cline-no">&nbsp;</span>
3048
+ <span class="cline-any cline-yes">122x</span>
2946
3049
  <span class="cline-any cline-neutral">&nbsp;</span>
2947
3050
  <span class="cline-any cline-neutral">&nbsp;</span>
2948
3051
  <span class="cline-any cline-neutral">&nbsp;</span>
2949
- <span class="cline-any cline-no">&nbsp;</span>
2950
- <span class="cline-any cline-no">&nbsp;</span>
3052
+ <span class="cline-any cline-yes">122x</span>
2951
3053
  <span class="cline-any cline-neutral">&nbsp;</span>
2952
3054
  <span class="cline-any cline-neutral">&nbsp;</span>
2953
- <span class="cline-any cline-no">&nbsp;</span>
2954
- <span class="cline-any cline-no">&nbsp;</span>
2955
3055
  <span class="cline-any cline-neutral">&nbsp;</span>
2956
3056
  <span class="cline-any cline-neutral">&nbsp;</span>
2957
- <span class="cline-any cline-no">&nbsp;</span>
2958
3057
  <span class="cline-any cline-neutral">&nbsp;</span>
3058
+ <span class="cline-any cline-yes">130x</span>
2959
3059
  <span class="cline-any cline-neutral">&nbsp;</span>
2960
- <span class="cline-any cline-no">&nbsp;</span>
2961
3060
  <span class="cline-any cline-neutral">&nbsp;</span>
2962
3061
  <span class="cline-any cline-neutral">&nbsp;</span>
2963
3062
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2967,243 +3066,322 @@
2967
3066
  <span class="cline-any cline-neutral">&nbsp;</span>
2968
3067
  <span class="cline-any cline-neutral">&nbsp;</span>
2969
3068
  <span class="cline-any cline-neutral">&nbsp;</span>
2970
- <span class="cline-any cline-no">&nbsp;</span>
2971
- <span class="cline-any cline-no">&nbsp;</span>
2972
3069
  <span class="cline-any cline-neutral">&nbsp;</span>
2973
3070
  <span class="cline-any cline-neutral">&nbsp;</span>
2974
3071
  <span class="cline-any cline-neutral">&nbsp;</span>
2975
3072
  <span class="cline-any cline-neutral">&nbsp;</span>
2976
- <span class="cline-any cline-no">&nbsp;</span>
2977
3073
  <span class="cline-any cline-neutral">&nbsp;</span>
2978
- <span class="cline-any cline-no">&nbsp;</span>
2979
3074
  <span class="cline-any cline-neutral">&nbsp;</span>
2980
- <span class="cline-any cline-no">&nbsp;</span>
2981
3075
  <span class="cline-any cline-neutral">&nbsp;</span>
2982
3076
  <span class="cline-any cline-neutral">&nbsp;</span>
3077
+ <span class="cline-any cline-yes">7466x</span>
3078
+ <span class="cline-any cline-yes">7465x</span>
3079
+ <span class="cline-any cline-yes">7465x</span>
2983
3080
  <span class="cline-any cline-neutral">&nbsp;</span>
2984
3081
  <span class="cline-any cline-neutral">&nbsp;</span>
2985
- <span class="cline-any cline-no">&nbsp;</span>
3082
+ <span class="cline-any cline-yes">7465x</span>
2986
3083
  <span class="cline-any cline-neutral">&nbsp;</span>
2987
3084
  <span class="cline-any cline-neutral">&nbsp;</span>
2988
- <span class="cline-any cline-no">&nbsp;</span>
2989
3085
  <span class="cline-any cline-neutral">&nbsp;</span>
3086
+ <span class="cline-any cline-yes">7465x</span>
3087
+ <span class="cline-any cline-yes">1x</span>
2990
3088
  <span class="cline-any cline-neutral">&nbsp;</span>
2991
3089
  <span class="cline-any cline-neutral">&nbsp;</span>
3090
+ <span class="cline-any cline-yes">7465x</span>
3091
+ <span class="cline-any cline-yes">1x</span>
2992
3092
  <span class="cline-any cline-neutral">&nbsp;</span>
2993
- <span class="cline-any cline-no">&nbsp;</span>
2994
3093
  <span class="cline-any cline-neutral">&nbsp;</span>
3094
+ <span class="cline-any cline-yes">7464x</span>
2995
3095
  <span class="cline-any cline-neutral">&nbsp;</span>
2996
- <span class="cline-any cline-no">&nbsp;</span>
2997
- <span class="cline-any cline-no">&nbsp;</span>
2998
- <span class="cline-any cline-no">&nbsp;</span>
2999
- <span class="cline-any cline-no">&nbsp;</span>
3000
- <span class="cline-any cline-no">&nbsp;</span>
3001
- <span class="cline-any cline-no">&nbsp;</span>
3002
3096
  <span class="cline-any cline-neutral">&nbsp;</span>
3097
+ <span class="cline-any cline-yes">7464x</span>
3003
3098
  <span class="cline-any cline-neutral">&nbsp;</span>
3004
- <span class="cline-any cline-no">&nbsp;</span>
3005
3099
  <span class="cline-any cline-neutral">&nbsp;</span>
3006
3100
  <span class="cline-any cline-neutral">&nbsp;</span>
3007
- <span class="cline-any cline-no">&nbsp;</span>
3008
3101
  <span class="cline-any cline-neutral">&nbsp;</span>
3009
3102
  <span class="cline-any cline-neutral">&nbsp;</span>
3010
3103
  <span class="cline-any cline-neutral">&nbsp;</span>
3011
3104
  <span class="cline-any cline-neutral">&nbsp;</span>
3012
- <span class="cline-any cline-no">&nbsp;</span>
3013
3105
  <span class="cline-any cline-neutral">&nbsp;</span>
3014
3106
  <span class="cline-any cline-neutral">&nbsp;</span>
3107
+ <span class="cline-any cline-yes">7464x</span>
3108
+ <span class="cline-any cline-yes">1475x</span>
3015
3109
  <span class="cline-any cline-neutral">&nbsp;</span>
3016
3110
  <span class="cline-any cline-neutral">&nbsp;</span>
3017
3111
  <span class="cline-any cline-neutral">&nbsp;</span>
3018
3112
  <span class="cline-any cline-neutral">&nbsp;</span>
3019
- <span class="cline-any cline-no">&nbsp;</span>
3113
+ <span class="cline-any cline-yes">5989x</span>
3020
3114
  <span class="cline-any cline-neutral">&nbsp;</span>
3115
+ <span class="cline-any cline-yes">5989x</span>
3021
3116
  <span class="cline-any cline-neutral">&nbsp;</span>
3117
+ <span class="cline-any cline-yes">5989x</span>
3022
3118
  <span class="cline-any cline-neutral">&nbsp;</span>
3023
3119
  <span class="cline-any cline-neutral">&nbsp;</span>
3024
- <span class="cline-any cline-no">&nbsp;</span>
3025
3120
  <span class="cline-any cline-neutral">&nbsp;</span>
3026
3121
  <span class="cline-any cline-neutral">&nbsp;</span>
3122
+ <span class="cline-any cline-yes">5989x</span>
3027
3123
  <span class="cline-any cline-neutral">&nbsp;</span>
3028
3124
  <span class="cline-any cline-neutral">&nbsp;</span>
3125
+ <span class="cline-any cline-yes">600x</span>
3029
3126
  <span class="cline-any cline-neutral">&nbsp;</span>
3030
3127
  <span class="cline-any cline-neutral">&nbsp;</span>
3031
- <span class="cline-any cline-no">&nbsp;</span>
3032
3128
  <span class="cline-any cline-neutral">&nbsp;</span>
3033
3129
  <span class="cline-any cline-neutral">&nbsp;</span>
3130
+ <span class="cline-any cline-yes">5389x</span>
3034
3131
  <span class="cline-any cline-neutral">&nbsp;</span>
3035
- <span class="cline-any cline-no">&nbsp;</span>
3036
3132
  <span class="cline-any cline-neutral">&nbsp;</span>
3133
+ <span class="cline-any cline-yes">5389x</span>
3134
+ <span class="cline-any cline-yes">5249x</span>
3135
+ <span class="cline-any cline-yes">5249x</span>
3136
+ <span class="cline-any cline-yes">5249x</span>
3137
+ <span class="cline-any cline-yes">5249x</span>
3138
+ <span class="cline-any cline-yes">5249x</span>
3037
3139
  <span class="cline-any cline-neutral">&nbsp;</span>
3038
3140
  <span class="cline-any cline-neutral">&nbsp;</span>
3141
+ <span class="cline-any cline-yes">5249x</span>
3039
3142
  <span class="cline-any cline-neutral">&nbsp;</span>
3040
3143
  <span class="cline-any cline-neutral">&nbsp;</span>
3041
- <span class="cline-any cline-no">&nbsp;</span>
3144
+ <span class="cline-any cline-yes">5249x</span>
3042
3145
  <span class="cline-any cline-neutral">&nbsp;</span>
3043
3146
  <span class="cline-any cline-neutral">&nbsp;</span>
3044
3147
  <span class="cline-any cline-neutral">&nbsp;</span>
3045
3148
  <span class="cline-any cline-neutral">&nbsp;</span>
3046
- <span class="cline-any cline-no">&nbsp;</span>
3047
- <span class="cline-any cline-no">&nbsp;</span>
3048
- <span class="cline-any cline-no">&nbsp;</span>
3049
3149
  <span class="cline-any cline-neutral">&nbsp;</span>
3050
3150
  <span class="cline-any cline-neutral">&nbsp;</span>
3051
- <span class="cline-any cline-no">&nbsp;</span>
3052
3151
  <span class="cline-any cline-neutral">&nbsp;</span>
3053
3152
  <span class="cline-any cline-neutral">&nbsp;</span>
3153
+ <span class="cline-any cline-yes">5249x</span>
3054
3154
  <span class="cline-any cline-neutral">&nbsp;</span>
3055
3155
  <span class="cline-any cline-neutral">&nbsp;</span>
3056
- <span class="cline-any cline-no">&nbsp;</span>
3057
- <span class="cline-any cline-no">&nbsp;</span>
3058
- <span class="cline-any cline-no">&nbsp;</span>
3059
- <span class="cline-any cline-no">&nbsp;</span>
3060
- <span class="cline-any cline-no">&nbsp;</span>
3061
3156
  <span class="cline-any cline-neutral">&nbsp;</span>
3062
3157
  <span class="cline-any cline-neutral">&nbsp;</span>
3063
3158
  <span class="cline-any cline-neutral">&nbsp;</span>
3064
- <span class="cline-any cline-no">&nbsp;</span>
3065
- <span class="cline-any cline-no">&nbsp;</span>
3066
- <span class="cline-any cline-no">&nbsp;</span>
3067
3159
  <span class="cline-any cline-neutral">&nbsp;</span>
3068
- <span class="cline-any cline-no">&nbsp;</span>
3160
+ <span class="cline-any cline-yes">1363x</span>
3069
3161
  <span class="cline-any cline-neutral">&nbsp;</span>
3070
3162
  <span class="cline-any cline-neutral">&nbsp;</span>
3071
3163
  <span class="cline-any cline-neutral">&nbsp;</span>
3072
3164
  <span class="cline-any cline-neutral">&nbsp;</span>
3073
- <span class="cline-any cline-no">&nbsp;</span>
3165
+ <span class="cline-any cline-yes">4026x</span>
3074
3166
  <span class="cline-any cline-neutral">&nbsp;</span>
3075
3167
  <span class="cline-any cline-neutral">&nbsp;</span>
3076
3168
  <span class="cline-any cline-neutral">&nbsp;</span>
3077
3169
  <span class="cline-any cline-neutral">&nbsp;</span>
3078
- <span class="cline-any cline-no">&nbsp;</span>
3079
- <span class="cline-any cline-no">&nbsp;</span>
3080
3170
  <span class="cline-any cline-neutral">&nbsp;</span>
3081
3171
  <span class="cline-any cline-neutral">&nbsp;</span>
3172
+ <span class="cline-any cline-yes">626x</span>
3082
3173
  <span class="cline-any cline-neutral">&nbsp;</span>
3083
3174
  <span class="cline-any cline-neutral">&nbsp;</span>
3084
3175
  <span class="cline-any cline-neutral">&nbsp;</span>
3085
- <span class="cline-any cline-no">&nbsp;</span>
3176
+ <span class="cline-any cline-yes">626x</span>
3086
3177
  <span class="cline-any cline-neutral">&nbsp;</span>
3087
3178
  <span class="cline-any cline-neutral">&nbsp;</span>
3088
3179
  <span class="cline-any cline-neutral">&nbsp;</span>
3089
3180
  <span class="cline-any cline-neutral">&nbsp;</span>
3090
3181
  <span class="cline-any cline-neutral">&nbsp;</span>
3182
+ <span class="cline-any cline-yes">549x</span>
3091
3183
  <span class="cline-any cline-neutral">&nbsp;</span>
3092
3184
  <span class="cline-any cline-neutral">&nbsp;</span>
3093
3185
  <span class="cline-any cline-neutral">&nbsp;</span>
3094
3186
  <span class="cline-any cline-neutral">&nbsp;</span>
3095
- <span class="cline-any cline-no">&nbsp;</span>
3096
- <span class="cline-any cline-no">&nbsp;</span>
3187
+ <span class="cline-any cline-yes">3477x</span>
3188
+ <span class="cline-any cline-yes">3477x</span>
3189
+ <span class="cline-any cline-yes">3477x</span>
3097
3190
  <span class="cline-any cline-neutral">&nbsp;</span>
3098
3191
  <span class="cline-any cline-neutral">&nbsp;</span>
3099
- <span class="cline-any cline-no">&nbsp;</span>
3192
+ <span class="cline-any cline-yes">3477x</span>
3100
3193
  <span class="cline-any cline-neutral">&nbsp;</span>
3101
3194
  <span class="cline-any cline-neutral">&nbsp;</span>
3102
3195
  <span class="cline-any cline-neutral">&nbsp;</span>
3103
3196
  <span class="cline-any cline-neutral">&nbsp;</span>
3197
+ <span class="cline-any cline-yes">3477x</span>
3198
+ <span class="cline-any cline-yes">3477x</span>
3199
+ <span class="cline-any cline-yes">3477x</span>
3200
+ <span class="cline-any cline-yes">3477x</span>
3201
+ <span class="cline-any cline-yes">3477x</span>
3104
3202
  <span class="cline-any cline-neutral">&nbsp;</span>
3105
3203
  <span class="cline-any cline-neutral">&nbsp;</span>
3106
3204
  <span class="cline-any cline-neutral">&nbsp;</span>
3205
+ <span class="cline-any cline-yes">3477x</span>
3206
+ <span class="cline-any cline-yes">140x</span>
3207
+ <span class="cline-any cline-yes">5x</span>
3107
3208
  <span class="cline-any cline-neutral">&nbsp;</span>
3108
- <span class="cline-any cline-no">&nbsp;</span>
3209
+ <span class="cline-any cline-yes">3337x</span>
3109
3210
  <span class="cline-any cline-neutral">&nbsp;</span>
3110
- <span class="cline-any cline-no">&nbsp;</span>
3111
3211
  <span class="cline-any cline-neutral">&nbsp;</span>
3112
3212
  <span class="cline-any cline-neutral">&nbsp;</span>
3113
- <span class="cline-any cline-no">&nbsp;</span>
3114
3213
  <span class="cline-any cline-neutral">&nbsp;</span>
3115
- <span class="cline-any cline-no">&nbsp;</span>
3214
+ <span class="cline-any cline-yes">453x</span>
3116
3215
  <span class="cline-any cline-neutral">&nbsp;</span>
3117
3216
  <span class="cline-any cline-neutral">&nbsp;</span>
3118
3217
  <span class="cline-any cline-neutral">&nbsp;</span>
3119
3218
  <span class="cline-any cline-neutral">&nbsp;</span>
3120
- <span class="cline-any cline-no">&nbsp;</span>
3219
+ <span class="cline-any cline-yes">277x</span>
3220
+ <span class="cline-any cline-yes">277x</span>
3121
3221
  <span class="cline-any cline-neutral">&nbsp;</span>
3122
3222
  <span class="cline-any cline-neutral">&nbsp;</span>
3123
3223
  <span class="cline-any cline-neutral">&nbsp;</span>
3124
- <span class="cline-any cline-no">&nbsp;</span>
3125
3224
  <span class="cline-any cline-neutral">&nbsp;</span>
3126
3225
  <span class="cline-any cline-neutral">&nbsp;</span>
3226
+ <span class="cline-any cline-yes">176x</span>
3127
3227
  <span class="cline-any cline-neutral">&nbsp;</span>
3128
3228
  <span class="cline-any cline-neutral">&nbsp;</span>
3129
- <span class="cline-any cline-no">&nbsp;</span>
3130
3229
  <span class="cline-any cline-neutral">&nbsp;</span>
3131
3230
  <span class="cline-any cline-neutral">&nbsp;</span>
3132
3231
  <span class="cline-any cline-neutral">&nbsp;</span>
3133
3232
  <span class="cline-any cline-neutral">&nbsp;</span>
3134
- <span class="cline-any cline-no">&nbsp;</span>
3135
3233
  <span class="cline-any cline-neutral">&nbsp;</span>
3136
3234
  <span class="cline-any cline-neutral">&nbsp;</span>
3137
3235
  <span class="cline-any cline-neutral">&nbsp;</span>
3236
+ <span class="cline-any cline-yes">176x</span>
3237
+ <span class="cline-any cline-yes">1x</span>
3138
3238
  <span class="cline-any cline-neutral">&nbsp;</span>
3139
- <span class="cline-any cline-no">&nbsp;</span>
3140
- <span class="cline-any cline-no">&nbsp;</span>
3141
3239
  <span class="cline-any cline-neutral">&nbsp;</span>
3240
+ <span class="cline-any cline-yes">176x</span>
3142
3241
  <span class="cline-any cline-neutral">&nbsp;</span>
3143
3242
  <span class="cline-any cline-neutral">&nbsp;</span>
3144
- <span class="cline-any cline-no">&nbsp;</span>
3145
- <span class="cline-any cline-no">&nbsp;</span>
3146
3243
  <span class="cline-any cline-neutral">&nbsp;</span>
3147
- <span class="cline-any cline-no">&nbsp;</span>
3148
3244
  <span class="cline-any cline-neutral">&nbsp;</span>
3149
3245
  <span class="cline-any cline-neutral">&nbsp;</span>
3150
3246
  <span class="cline-any cline-neutral">&nbsp;</span>
3151
- <span class="cline-any cline-no">&nbsp;</span>
3152
3247
  <span class="cline-any cline-neutral">&nbsp;</span>
3153
3248
  <span class="cline-any cline-neutral">&nbsp;</span>
3249
+ <span class="cline-any cline-yes">176x</span>
3154
3250
  <span class="cline-any cline-neutral">&nbsp;</span>
3251
+ <span class="cline-any cline-yes">162x</span>
3155
3252
  <span class="cline-any cline-neutral">&nbsp;</span>
3156
- <span class="cline-any cline-no">&nbsp;</span>
3157
3253
  <span class="cline-any cline-neutral">&nbsp;</span>
3254
+ <span class="cline-any cline-yes">14x</span>
3158
3255
  <span class="cline-any cline-neutral">&nbsp;</span>
3256
+ <span class="cline-any cline-yes">14x</span>
3159
3257
  <span class="cline-any cline-neutral">&nbsp;</span>
3160
- <span class="cline-any cline-no">&nbsp;</span>
3161
- <span class="cline-any cline-no">&nbsp;</span>
3162
3258
  <span class="cline-any cline-neutral">&nbsp;</span>
3163
- <span class="cline-any cline-no">&nbsp;</span>
3164
3259
  <span class="cline-any cline-neutral">&nbsp;</span>
3165
- <span class="cline-any cline-no">&nbsp;</span>
3166
3260
  <span class="cline-any cline-neutral">&nbsp;</span>
3261
+ <span class="cline-any cline-yes">1x</span>
3167
3262
  <span class="cline-any cline-neutral">&nbsp;</span>
3168
3263
  <span class="cline-any cline-neutral">&nbsp;</span>
3169
3264
  <span class="cline-any cline-neutral">&nbsp;</span>
3170
- <span class="cline-any cline-no">&nbsp;</span>
3171
- <span class="cline-any cline-no">&nbsp;</span>
3265
+ <span class="cline-any cline-yes">3038x</span>
3172
3266
  <span class="cline-any cline-neutral">&nbsp;</span>
3173
3267
  <span class="cline-any cline-neutral">&nbsp;</span>
3174
3268
  <span class="cline-any cline-neutral">&nbsp;</span>
3175
3269
  <span class="cline-any cline-neutral">&nbsp;</span>
3270
+ <span class="cline-any cline-yes">3038x</span>
3176
3271
  <span class="cline-any cline-neutral">&nbsp;</span>
3177
3272
  <span class="cline-any cline-neutral">&nbsp;</span>
3178
- <span class="cline-any cline-no">&nbsp;</span>
3179
3273
  <span class="cline-any cline-neutral">&nbsp;</span>
3180
3274
  <span class="cline-any cline-neutral">&nbsp;</span>
3275
+ <span class="cline-any cline-yes">77x</span>
3181
3276
  <span class="cline-any cline-neutral">&nbsp;</span>
3182
3277
  <span class="cline-any cline-neutral">&nbsp;</span>
3183
- <span class="cline-any cline-no">&nbsp;</span>
3184
3278
  <span class="cline-any cline-neutral">&nbsp;</span>
3185
3279
  <span class="cline-any cline-neutral">&nbsp;</span>
3186
- <span class="cline-any cline-no">&nbsp;</span>
3187
- <span class="cline-any cline-no">&nbsp;</span>
3188
- <span class="cline-any cline-no">&nbsp;</span>
3280
+ <span class="cline-any cline-yes">66x</span>
3281
+ <span class="cline-any cline-yes">66x</span>
3282
+ <span class="cline-any cline-neutral">&nbsp;</span>
3283
+ <span class="cline-any cline-neutral">&nbsp;</span>
3284
+ <span class="cline-any cline-neutral">&nbsp;</span>
3285
+ <span class="cline-any cline-yes">11x</span>
3286
+ <span class="cline-any cline-yes">11x</span>
3287
+ <span class="cline-any cline-neutral">&nbsp;</span>
3288
+ <span class="cline-any cline-yes">11x</span>
3289
+ <span class="cline-any cline-neutral">&nbsp;</span>
3290
+ <span class="cline-any cline-neutral">&nbsp;</span>
3291
+ <span class="cline-any cline-neutral">&nbsp;</span>
3292
+ <span class="cline-any cline-yes">11x</span>
3293
+ <span class="cline-any cline-neutral">&nbsp;</span>
3294
+ <span class="cline-any cline-neutral">&nbsp;</span>
3295
+ <span class="cline-any cline-neutral">&nbsp;</span>
3296
+ <span class="cline-any cline-neutral">&nbsp;</span>
3297
+ <span class="cline-any cline-yes">1x</span>
3298
+ <span class="cline-any cline-neutral">&nbsp;</span>
3299
+ <span class="cline-any cline-neutral">&nbsp;</span>
3300
+ <span class="cline-any cline-neutral">&nbsp;</span>
3301
+ <span class="cline-any cline-yes">2972x</span>
3302
+ <span class="cline-any cline-yes">2972x</span>
3303
+ <span class="cline-any cline-neutral">&nbsp;</span>
3304
+ <span class="cline-any cline-yes">2972x</span>
3305
+ <span class="cline-any cline-neutral">&nbsp;</span>
3306
+ <span class="cline-any cline-yes">9176x</span>
3307
+ <span class="cline-any cline-neutral">&nbsp;</span>
3308
+ <span class="cline-any cline-neutral">&nbsp;</span>
3309
+ <span class="cline-any cline-neutral">&nbsp;</span>
3310
+ <span class="cline-any cline-neutral">&nbsp;</span>
3311
+ <span class="cline-any cline-yes">2972x</span>
3312
+ <span class="cline-any cline-yes">1x</span>
3313
+ <span class="cline-any cline-neutral">&nbsp;</span>
3314
+ <span class="cline-any cline-neutral">&nbsp;</span>
3315
+ <span class="cline-any cline-neutral">&nbsp;</span>
3316
+ <span class="cline-any cline-neutral">&nbsp;</span>
3317
+ <span class="cline-any cline-neutral">&nbsp;</span>
3318
+ <span class="cline-any cline-neutral">&nbsp;</span>
3319
+ <span class="cline-any cline-yes">2972x</span>
3320
+ <span class="cline-any cline-neutral">&nbsp;</span>
3321
+ <span class="cline-any cline-neutral">&nbsp;</span>
3322
+ <span class="cline-any cline-neutral">&nbsp;</span>
3323
+ <span class="cline-any cline-neutral">&nbsp;</span>
3324
+ <span class="cline-any cline-yes">113x</span>
3325
+ <span class="cline-any cline-neutral">&nbsp;</span>
3326
+ <span class="cline-any cline-neutral">&nbsp;</span>
3327
+ <span class="cline-any cline-yes">113x</span>
3328
+ <span class="cline-any cline-yes">386x</span>
3329
+ <span class="cline-any cline-yes">134x</span>
3330
+ <span class="cline-any cline-neutral">&nbsp;</span>
3331
+ <span class="cline-any cline-neutral">&nbsp;</span>
3332
+ <span class="cline-any cline-yes">252x</span>
3333
+ <span class="cline-any cline-yes">34x</span>
3334
+ <span class="cline-any cline-neutral">&nbsp;</span>
3335
+ <span class="cline-any cline-neutral">&nbsp;</span>
3336
+ <span class="cline-any cline-neutral">&nbsp;</span>
3337
+ <span class="cline-any cline-neutral">&nbsp;</span>
3338
+ <span class="cline-any cline-neutral">&nbsp;</span>
3339
+ <span class="cline-any cline-neutral">&nbsp;</span>
3340
+ <span class="cline-any cline-yes">113x</span>
3341
+ <span class="cline-any cline-neutral">&nbsp;</span>
3342
+ <span class="cline-any cline-yes">113x</span>
3343
+ <span class="cline-any cline-yes">386x</span>
3344
+ <span class="cline-any cline-yes">171x</span>
3345
+ <span class="cline-any cline-neutral">&nbsp;</span>
3346
+ <span class="cline-any cline-neutral">&nbsp;</span>
3347
+ <span class="cline-any cline-yes">215x</span>
3348
+ <span class="cline-any cline-neutral">&nbsp;</span>
3349
+ <span class="cline-any cline-neutral">&nbsp;</span>
3350
+ <span class="cline-any cline-neutral">&nbsp;</span>
3351
+ <span class="cline-any cline-neutral">&nbsp;</span>
3352
+ <span class="cline-any cline-neutral">&nbsp;</span>
3353
+ <span class="cline-any cline-neutral">&nbsp;</span>
3354
+ <span class="cline-any cline-neutral">&nbsp;</span>
3355
+ <span class="cline-any cline-neutral">&nbsp;</span>
3356
+ <span class="cline-any cline-neutral">&nbsp;</span>
3357
+ <span class="cline-any cline-neutral">&nbsp;</span>
3358
+ <span class="cline-any cline-yes">113x</span>
3359
+ <span class="cline-any cline-neutral">&nbsp;</span>
3360
+ <span class="cline-any cline-neutral">&nbsp;</span>
3361
+ <span class="cline-any cline-neutral">&nbsp;</span>
3362
+ <span class="cline-any cline-neutral">&nbsp;</span>
3363
+ <span class="cline-any cline-neutral">&nbsp;</span>
3364
+ <span class="cline-any cline-neutral">&nbsp;</span>
3365
+ <span class="cline-any cline-neutral">&nbsp;</span>
3366
+ <span class="cline-any cline-neutral">&nbsp;</span>
3367
+ <span class="cline-any cline-neutral">&nbsp;</span>
3368
+ <span class="cline-any cline-neutral">&nbsp;</span>
3369
+ <span class="cline-any cline-neutral">&nbsp;</span>
3370
+ <span class="cline-any cline-yes">7466x</span>
3371
+ <span class="cline-any cline-neutral">&nbsp;</span>
3372
+ <span class="cline-any cline-neutral">&nbsp;</span>
3373
+ <span class="cline-any cline-neutral">&nbsp;</span>
3189
3374
  <span class="cline-any cline-neutral">&nbsp;</span>
3190
3375
  <span class="cline-any cline-neutral">&nbsp;</span>
3191
- <span class="cline-any cline-no">&nbsp;</span>
3192
- <span class="cline-any cline-no">&nbsp;</span>
3193
3376
  <span class="cline-any cline-neutral">&nbsp;</span>
3194
3377
  <span class="cline-any cline-neutral">&nbsp;</span>
3195
3378
  <span class="cline-any cline-neutral">&nbsp;</span>
3196
3379
  <span class="cline-any cline-neutral">&nbsp;</span>
3197
3380
  <span class="cline-any cline-neutral">&nbsp;</span>
3198
3381
  <span class="cline-any cline-neutral">&nbsp;</span>
3199
- <span class="cline-any cline-no">&nbsp;</span>
3200
3382
  <span class="cline-any cline-neutral">&nbsp;</span>
3201
- <span class="cline-any cline-no">&nbsp;</span>
3202
- <span class="cline-any cline-no">&nbsp;</span>
3203
- <span class="cline-any cline-no">&nbsp;</span>
3204
3383
  <span class="cline-any cline-neutral">&nbsp;</span>
3205
3384
  <span class="cline-any cline-neutral">&nbsp;</span>
3206
- <span class="cline-any cline-no">&nbsp;</span>
3207
3385
  <span class="cline-any cline-neutral">&nbsp;</span>
3208
3386
  <span class="cline-any cline-neutral">&nbsp;</span>
3209
3387
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -3214,11 +3392,13 @@
3214
3392
  <span class="cline-any cline-neutral">&nbsp;</span>
3215
3393
  <span class="cline-any cline-neutral">&nbsp;</span>
3216
3394
  <span class="cline-any cline-neutral">&nbsp;</span>
3217
- <span class="cline-any cline-no">&nbsp;</span>
3218
3395
  <span class="cline-any cline-neutral">&nbsp;</span>
3219
3396
  <span class="cline-any cline-neutral">&nbsp;</span>
3220
3397
  <span class="cline-any cline-neutral">&nbsp;</span>
3398
+ <span class="cline-any cline-yes">13x</span>
3221
3399
  <span class="cline-any cline-neutral">&nbsp;</span>
3400
+ <span class="cline-any cline-yes">13x</span>
3401
+ <span class="cline-any cline-yes">2505x</span>
3222
3402
  <span class="cline-any cline-neutral">&nbsp;</span>
3223
3403
  <span class="cline-any cline-neutral">&nbsp;</span>
3224
3404
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -3226,7 +3406,6 @@
3226
3406
  <span class="cline-any cline-neutral">&nbsp;</span>
3227
3407
  <span class="cline-any cline-neutral">&nbsp;</span>
3228
3408
  <span class="cline-any cline-neutral">&nbsp;</span>
3229
- <span class="cline-any cline-no">&nbsp;</span>
3230
3409
  <span class="cline-any cline-neutral">&nbsp;</span>
3231
3410
  <span class="cline-any cline-neutral">&nbsp;</span>
3232
3411
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -3237,6 +3416,7 @@
3237
3416
  <span class="cline-any cline-neutral">&nbsp;</span>
3238
3417
  <span class="cline-any cline-neutral">&nbsp;</span>
3239
3418
  <span class="cline-any cline-neutral">&nbsp;</span>
3419
+ <span class="cline-any cline-yes">13x</span>
3240
3420
  <span class="cline-any cline-neutral">&nbsp;</span>
3241
3421
  <span class="cline-any cline-neutral">&nbsp;</span>
3242
3422
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -3245,24 +3425,37 @@
3245
3425
  <span class="cline-any cline-neutral">&nbsp;</span>
3246
3426
  <span class="cline-any cline-neutral">&nbsp;</span>
3247
3427
  <span class="cline-any cline-neutral">&nbsp;</span>
3428
+ <span class="cline-any cline-yes">18x</span>
3429
+ <span class="cline-any cline-yes">18x</span>
3430
+ <span class="cline-any cline-yes">18x</span>
3248
3431
  <span class="cline-any cline-neutral">&nbsp;</span>
3249
3432
  <span class="cline-any cline-neutral">&nbsp;</span>
3250
3433
  <span class="cline-any cline-neutral">&nbsp;</span>
3434
+ <span class="cline-any cline-yes">18x</span>
3435
+ <span class="cline-any cline-yes">33x</span>
3251
3436
  <span class="cline-any cline-neutral">&nbsp;</span>
3252
3437
  <span class="cline-any cline-neutral">&nbsp;</span>
3253
3438
  <span class="cline-any cline-neutral">&nbsp;</span>
3254
3439
  <span class="cline-any cline-neutral">&nbsp;</span>
3255
3440
  <span class="cline-any cline-neutral">&nbsp;</span>
3256
3441
  <span class="cline-any cline-neutral">&nbsp;</span>
3257
- <span class="cline-any cline-no">&nbsp;</span>
3258
3442
  <span class="cline-any cline-neutral">&nbsp;</span>
3259
- <span class="cline-any cline-no">&nbsp;</span>
3260
- <span class="cline-any cline-no">&nbsp;</span>
3443
+ <span class="cline-any cline-yes">33x</span>
3444
+ <span class="cline-any cline-yes">14x</span>
3445
+ <span class="cline-any cline-yes">1x</span>
3261
3446
  <span class="cline-any cline-neutral">&nbsp;</span>
3447
+ <span class="cline-any cline-yes">13x</span>
3448
+ <span class="cline-any cline-yes">13x</span>
3449
+ <span class="cline-any cline-yes">13x</span>
3262
3450
  <span class="cline-any cline-neutral">&nbsp;</span>
3263
3451
  <span class="cline-any cline-neutral">&nbsp;</span>
3264
3452
  <span class="cline-any cline-neutral">&nbsp;</span>
3453
+ <span class="cline-any cline-yes">19x</span>
3454
+ <span class="cline-any cline-yes">19x</span>
3265
3455
  <span class="cline-any cline-neutral">&nbsp;</span>
3456
+ <span class="cline-any cline-yes">19x</span>
3457
+ <span class="cline-any cline-yes">19x</span>
3458
+ <span class="cline-any cline-yes">19x</span>
3266
3459
  <span class="cline-any cline-neutral">&nbsp;</span>
3267
3460
  <span class="cline-any cline-neutral">&nbsp;</span>
3268
3461
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -3274,47 +3467,53 @@
3274
3467
  <span class="cline-any cline-neutral">&nbsp;</span>
3275
3468
  <span class="cline-any cline-neutral">&nbsp;</span>
3276
3469
  <span class="cline-any cline-neutral">&nbsp;</span>
3470
+ <span class="cline-any cline-yes">4x</span>
3471
+ <span class="cline-any cline-yes">12x</span>
3277
3472
  <span class="cline-any cline-neutral">&nbsp;</span>
3278
3473
  <span class="cline-any cline-no">&nbsp;</span>
3279
3474
  <span class="cline-any cline-neutral">&nbsp;</span>
3280
3475
  <span class="cline-any cline-neutral">&nbsp;</span>
3476
+ <span class="cline-any cline-yes">4x</span>
3477
+ <span class="cline-any cline-yes">4x</span>
3478
+ <span class="cline-any cline-yes">4x</span>
3479
+ <span class="cline-any cline-yes">12x</span>
3480
+ <span class="cline-any cline-yes">8x</span>
3281
3481
  <span class="cline-any cline-neutral">&nbsp;</span>
3282
3482
  <span class="cline-any cline-neutral">&nbsp;</span>
3483
+ <span class="cline-any cline-yes">8x</span>
3283
3484
  <span class="cline-any cline-neutral">&nbsp;</span>
3284
3485
  <span class="cline-any cline-neutral">&nbsp;</span>
3486
+ <span class="cline-any cline-yes">8x</span>
3285
3487
  <span class="cline-any cline-neutral">&nbsp;</span>
3488
+ <span class="cline-any cline-yes">12x</span>
3489
+ <span class="cline-any cline-yes">4x</span>
3286
3490
  <span class="cline-any cline-neutral">&nbsp;</span>
3287
- <span class="cline-any cline-no">&nbsp;</span>
3288
- <span class="cline-any cline-no">&nbsp;</span>
3491
+ <span class="cline-any cline-yes">4x</span>
3289
3492
  <span class="cline-any cline-no">&nbsp;</span>
3290
3493
  <span class="cline-any cline-neutral">&nbsp;</span>
3291
3494
  <span class="cline-any cline-neutral">&nbsp;</span>
3495
+ <span class="cline-any cline-yes">4x</span>
3292
3496
  <span class="cline-any cline-neutral">&nbsp;</span>
3293
- <span class="cline-any cline-no">&nbsp;</span>
3294
- <span class="cline-any cline-no">&nbsp;</span>
3497
+ <span class="cline-any cline-yes">4x</span>
3498
+ <span class="cline-any cline-yes">12x</span>
3295
3499
  <span class="cline-any cline-neutral">&nbsp;</span>
3296
3500
  <span class="cline-any cline-neutral">&nbsp;</span>
3501
+ <span class="cline-any cline-yes">4x</span>
3502
+ <span class="cline-any cline-yes">4x</span>
3503
+ <span class="cline-any cline-yes">12x</span>
3297
3504
  <span class="cline-any cline-neutral">&nbsp;</span>
3505
+ <span class="cline-any cline-yes">4x</span>
3506
+ <span class="cline-any cline-yes">4x</span>
3298
3507
  <span class="cline-any cline-neutral">&nbsp;</span>
3299
3508
  <span class="cline-any cline-neutral">&nbsp;</span>
3300
3509
  <span class="cline-any cline-neutral">&nbsp;</span>
3301
3510
  <span class="cline-any cline-neutral">&nbsp;</span>
3302
- <span class="cline-any cline-no">&nbsp;</span>
3303
- <span class="cline-any cline-no">&nbsp;</span>
3304
- <span class="cline-any cline-no">&nbsp;</span>
3511
+ <span class="cline-any cline-yes">4x</span>
3305
3512
  <span class="cline-any cline-neutral">&nbsp;</span>
3306
- <span class="cline-any cline-no">&nbsp;</span>
3307
- <span class="cline-any cline-no">&nbsp;</span>
3308
- <span class="cline-any cline-no">&nbsp;</span>
3309
3513
  <span class="cline-any cline-neutral">&nbsp;</span>
3310
3514
  <span class="cline-any cline-neutral">&nbsp;</span>
3311
3515
  <span class="cline-any cline-neutral">&nbsp;</span>
3312
- <span class="cline-any cline-no">&nbsp;</span>
3313
- <span class="cline-any cline-no">&nbsp;</span>
3314
3516
  <span class="cline-any cline-neutral">&nbsp;</span>
3315
- <span class="cline-any cline-no">&nbsp;</span>
3316
- <span class="cline-any cline-no">&nbsp;</span>
3317
- <span class="cline-any cline-no">&nbsp;</span>
3318
3517
  <span class="cline-any cline-neutral">&nbsp;</span>
3319
3518
  <span class="cline-any cline-neutral">&nbsp;</span>
3320
3519
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -3324,50 +3523,30 @@
3324
3523
  <span class="cline-any cline-neutral">&nbsp;</span>
3325
3524
  <span class="cline-any cline-neutral">&nbsp;</span>
3326
3525
  <span class="cline-any cline-neutral">&nbsp;</span>
3526
+ <span class="cline-any cline-yes">4x</span>
3327
3527
  <span class="cline-any cline-neutral">&nbsp;</span>
3328
3528
  <span class="cline-any cline-neutral">&nbsp;</span>
3329
- <span class="cline-any cline-no">&nbsp;</span>
3330
- <span class="cline-any cline-no">&nbsp;</span>
3331
3529
  <span class="cline-any cline-neutral">&nbsp;</span>
3332
- <span class="cline-any cline-no">&nbsp;</span>
3333
3530
  <span class="cline-any cline-neutral">&nbsp;</span>
3334
3531
  <span class="cline-any cline-neutral">&nbsp;</span>
3335
- <span class="cline-any cline-no">&nbsp;</span>
3336
- <span class="cline-any cline-no">&nbsp;</span>
3337
- <span class="cline-any cline-no">&nbsp;</span>
3338
- <span class="cline-any cline-no">&nbsp;</span>
3339
- <span class="cline-any cline-no">&nbsp;</span>
3340
3532
  <span class="cline-any cline-neutral">&nbsp;</span>
3341
3533
  <span class="cline-any cline-neutral">&nbsp;</span>
3342
- <span class="cline-any cline-no">&nbsp;</span>
3534
+ <span class="cline-any cline-yes">4x</span>
3343
3535
  <span class="cline-any cline-neutral">&nbsp;</span>
3344
3536
  <span class="cline-any cline-neutral">&nbsp;</span>
3345
- <span class="cline-any cline-no">&nbsp;</span>
3346
3537
  <span class="cline-any cline-neutral">&nbsp;</span>
3347
- <span class="cline-any cline-no">&nbsp;</span>
3348
- <span class="cline-any cline-no">&nbsp;</span>
3538
+ <span class="cline-any cline-yes">14989x</span>
3349
3539
  <span class="cline-any cline-neutral">&nbsp;</span>
3350
- <span class="cline-any cline-no">&nbsp;</span>
3351
- <span class="cline-any cline-no">&nbsp;</span>
3352
3540
  <span class="cline-any cline-neutral">&nbsp;</span>
3353
3541
  <span class="cline-any cline-neutral">&nbsp;</span>
3354
- <span class="cline-any cline-no">&nbsp;</span>
3355
3542
  <span class="cline-any cline-neutral">&nbsp;</span>
3356
- <span class="cline-any cline-no">&nbsp;</span>
3357
- <span class="cline-any cline-no">&nbsp;</span>
3358
3543
  <span class="cline-any cline-neutral">&nbsp;</span>
3359
3544
  <span class="cline-any cline-neutral">&nbsp;</span>
3360
- <span class="cline-any cline-no">&nbsp;</span>
3361
- <span class="cline-any cline-no">&nbsp;</span>
3362
- <span class="cline-any cline-no">&nbsp;</span>
3363
3545
  <span class="cline-any cline-neutral">&nbsp;</span>
3364
- <span class="cline-any cline-no">&nbsp;</span>
3365
- <span class="cline-any cline-no">&nbsp;</span>
3366
3546
  <span class="cline-any cline-neutral">&nbsp;</span>
3367
3547
  <span class="cline-any cline-neutral">&nbsp;</span>
3368
3548
  <span class="cline-any cline-neutral">&nbsp;</span>
3369
3549
  <span class="cline-any cline-neutral">&nbsp;</span>
3370
- <span class="cline-any cline-no">&nbsp;</span>
3371
3550
  <span class="cline-any cline-neutral">&nbsp;</span>
3372
3551
  <span class="cline-any cline-neutral">&nbsp;</span>
3373
3552
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -3378,33 +3557,55 @@
3378
3557
  <span class="cline-any cline-neutral">&nbsp;</span>
3379
3558
  <span class="cline-any cline-neutral">&nbsp;</span>
3380
3559
  <span class="cline-any cline-neutral">&nbsp;</span>
3560
+ <span class="cline-any cline-yes">21x</span>
3381
3561
  <span class="cline-any cline-neutral">&nbsp;</span>
3562
+ <span class="cline-any cline-yes">21x</span>
3563
+ <span class="cline-any cline-yes">12x</span>
3382
3564
  <span class="cline-any cline-neutral">&nbsp;</span>
3383
3565
  <span class="cline-any cline-neutral">&nbsp;</span>
3384
3566
  <span class="cline-any cline-neutral">&nbsp;</span>
3385
- <span class="cline-any cline-no">&nbsp;</span>
3386
3567
  <span class="cline-any cline-neutral">&nbsp;</span>
3568
+ <span class="cline-any cline-yes">9x</span>
3569
+ <span class="cline-any cline-yes">9x</span>
3387
3570
  <span class="cline-any cline-neutral">&nbsp;</span>
3388
3571
  <span class="cline-any cline-neutral">&nbsp;</span>
3572
+ <span class="cline-any cline-yes">2x</span>
3389
3573
  <span class="cline-any cline-neutral">&nbsp;</span>
3390
3574
  <span class="cline-any cline-neutral">&nbsp;</span>
3391
3575
  <span class="cline-any cline-neutral">&nbsp;</span>
3392
3576
  <span class="cline-any cline-neutral">&nbsp;</span>
3393
- <span class="cline-any cline-no">&nbsp;</span>
3577
+ <span class="cline-any cline-yes">15x</span>
3578
+ <span class="cline-any cline-yes">15x</span>
3579
+ <span class="cline-any cline-yes">15x</span>
3394
3580
  <span class="cline-any cline-neutral">&nbsp;</span>
3581
+ <span class="cline-any cline-yes">14x</span>
3582
+ <span class="cline-any cline-yes">14x</span>
3395
3583
  <span class="cline-any cline-neutral">&nbsp;</span>
3584
+ <span class="cline-any cline-yes">14x</span>
3585
+ <span class="cline-any cline-yes">9x</span>
3586
+ <span class="cline-any cline-yes">9x</span>
3396
3587
  <span class="cline-any cline-neutral">&nbsp;</span>
3397
3588
  <span class="cline-any cline-neutral">&nbsp;</span>
3589
+ <span class="cline-any cline-yes">14x</span>
3590
+ <span class="cline-any cline-yes">14x</span>
3591
+ <span class="cline-any cline-yes">14x</span>
3398
3592
  <span class="cline-any cline-neutral">&nbsp;</span>
3399
3593
  <span class="cline-any cline-neutral">&nbsp;</span>
3594
+ <span class="cline-any cline-yes">14x</span>
3595
+ <span class="cline-any cline-yes">14x</span>
3400
3596
  <span class="cline-any cline-neutral">&nbsp;</span>
3401
3597
  <span class="cline-any cline-neutral">&nbsp;</span>
3598
+ <span class="cline-any cline-yes">140x</span>
3599
+ <span class="cline-any cline-yes">140x</span>
3600
+ <span class="cline-any cline-yes">140x</span>
3402
3601
  <span class="cline-any cline-neutral">&nbsp;</span>
3602
+ <span class="cline-any cline-yes">140x</span>
3403
3603
  <span class="cline-any cline-neutral">&nbsp;</span>
3404
3604
  <span class="cline-any cline-neutral">&nbsp;</span>
3405
3605
  <span class="cline-any cline-neutral">&nbsp;</span>
3406
3606
  <span class="cline-any cline-neutral">&nbsp;</span>
3407
3607
  <span class="cline-any cline-neutral">&nbsp;</span>
3608
+ <span class="cline-any cline-yes">140x</span>
3408
3609
  <span class="cline-any cline-neutral">&nbsp;</span>
3409
3610
  <span class="cline-any cline-neutral">&nbsp;</span>
3410
3611
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -3412,55 +3613,39 @@
3412
3613
  <span class="cline-any cline-neutral">&nbsp;</span>
3413
3614
  <span class="cline-any cline-neutral">&nbsp;</span>
3414
3615
  <span class="cline-any cline-neutral">&nbsp;</span>
3415
- <span class="cline-any cline-no">&nbsp;</span>
3416
3616
  <span class="cline-any cline-neutral">&nbsp;</span>
3417
- <span class="cline-any cline-no">&nbsp;</span>
3418
- <span class="cline-any cline-no">&nbsp;</span>
3419
3617
  <span class="cline-any cline-neutral">&nbsp;</span>
3420
3618
  <span class="cline-any cline-neutral">&nbsp;</span>
3619
+ <span class="cline-any cline-yes">140x</span>
3620
+ <span class="cline-any cline-yes">14x</span>
3621
+ <span class="cline-any cline-yes">14x</span>
3622
+ <span class="cline-any cline-yes">14x</span>
3421
3623
  <span class="cline-any cline-neutral">&nbsp;</span>
3422
3624
  <span class="cline-any cline-neutral">&nbsp;</span>
3423
- <span class="cline-any cline-no">&nbsp;</span>
3424
- <span class="cline-any cline-no">&nbsp;</span>
3625
+ <span class="cline-any cline-yes">126x</span>
3425
3626
  <span class="cline-any cline-neutral">&nbsp;</span>
3426
3627
  <span class="cline-any cline-neutral">&nbsp;</span>
3427
- <span class="cline-any cline-yes">1x</span>
3628
+ <span class="cline-any cline-yes">14x</span>
3428
3629
  <span class="cline-any cline-neutral">&nbsp;</span>
3429
3630
  <span class="cline-any cline-neutral">&nbsp;</span>
3430
3631
  <span class="cline-any cline-neutral">&nbsp;</span>
3632
+ <span class="cline-any cline-yes">2x</span>
3431
3633
  <span class="cline-any cline-neutral">&nbsp;</span>
3432
- <span class="cline-any cline-no">&nbsp;</span>
3433
- <span class="cline-any cline-no">&nbsp;</span>
3434
- <span class="cline-any cline-no">&nbsp;</span>
3435
3634
  <span class="cline-any cline-neutral">&nbsp;</span>
3436
- <span class="cline-any cline-no">&nbsp;</span>
3437
- <span class="cline-any cline-no">&nbsp;</span>
3438
3635
  <span class="cline-any cline-neutral">&nbsp;</span>
3439
- <span class="cline-any cline-no">&nbsp;</span>
3440
- <span class="cline-any cline-no">&nbsp;</span>
3441
- <span class="cline-any cline-no">&nbsp;</span>
3442
3636
  <span class="cline-any cline-neutral">&nbsp;</span>
3443
3637
  <span class="cline-any cline-neutral">&nbsp;</span>
3444
- <span class="cline-any cline-no">&nbsp;</span>
3445
- <span class="cline-any cline-no">&nbsp;</span>
3446
- <span class="cline-any cline-no">&nbsp;</span>
3447
3638
  <span class="cline-any cline-neutral">&nbsp;</span>
3448
3639
  <span class="cline-any cline-neutral">&nbsp;</span>
3449
- <span class="cline-any cline-no">&nbsp;</span>
3450
- <span class="cline-any cline-no">&nbsp;</span>
3451
3640
  <span class="cline-any cline-neutral">&nbsp;</span>
3452
3641
  <span class="cline-any cline-neutral">&nbsp;</span>
3453
- <span class="cline-any cline-no">&nbsp;</span>
3454
- <span class="cline-any cline-no">&nbsp;</span>
3455
- <span class="cline-any cline-no">&nbsp;</span>
3456
3642
  <span class="cline-any cline-neutral">&nbsp;</span>
3457
- <span class="cline-any cline-no">&nbsp;</span>
3458
3643
  <span class="cline-any cline-neutral">&nbsp;</span>
3459
3644
  <span class="cline-any cline-neutral">&nbsp;</span>
3645
+ <span class="cline-any cline-yes">57x</span>
3460
3646
  <span class="cline-any cline-neutral">&nbsp;</span>
3461
3647
  <span class="cline-any cline-neutral">&nbsp;</span>
3462
3648
  <span class="cline-any cline-neutral">&nbsp;</span>
3463
- <span class="cline-any cline-no">&nbsp;</span>
3464
3649
  <span class="cline-any cline-neutral">&nbsp;</span>
3465
3650
  <span class="cline-any cline-neutral">&nbsp;</span>
3466
3651
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -3471,20 +3656,13 @@
3471
3656
  <span class="cline-any cline-neutral">&nbsp;</span>
3472
3657
  <span class="cline-any cline-neutral">&nbsp;</span>
3473
3658
  <span class="cline-any cline-neutral">&nbsp;</span>
3474
- <span class="cline-any cline-no">&nbsp;</span>
3475
- <span class="cline-any cline-no">&nbsp;</span>
3476
- <span class="cline-any cline-no">&nbsp;</span>
3477
- <span class="cline-any cline-no">&nbsp;</span>
3478
3659
  <span class="cline-any cline-neutral">&nbsp;</span>
3479
3660
  <span class="cline-any cline-neutral">&nbsp;</span>
3480
- <span class="cline-any cline-no">&nbsp;</span>
3481
3661
  <span class="cline-any cline-neutral">&nbsp;</span>
3482
3662
  <span class="cline-any cline-neutral">&nbsp;</span>
3483
- <span class="cline-any cline-no">&nbsp;</span>
3484
3663
  <span class="cline-any cline-neutral">&nbsp;</span>
3485
3664
  <span class="cline-any cline-neutral">&nbsp;</span>
3486
3665
  <span class="cline-any cline-neutral">&nbsp;</span>
3487
- <span class="cline-any cline-yes">1x</span>
3488
3666
  <span class="cline-any cline-neutral">&nbsp;</span>
3489
3667
  <span class="cline-any cline-neutral">&nbsp;</span>
3490
3668
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -3496,7 +3674,6 @@
3496
3674
  <span class="cline-any cline-neutral">&nbsp;</span>
3497
3675
  <span class="cline-any cline-neutral">&nbsp;</span>
3498
3676
  <span class="cline-any cline-neutral">&nbsp;</span>
3499
- <span class="cline-any cline-no">&nbsp;</span>
3500
3677
  <span class="cline-any cline-neutral">&nbsp;</span>
3501
3678
  <span class="cline-any cline-neutral">&nbsp;</span>
3502
3679
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -3528,6 +3705,7 @@
3528
3705
  <span class="cline-any cline-neutral">&nbsp;</span>
3529
3706
  <span class="cline-any cline-neutral">&nbsp;</span>
3530
3707
  <span class="cline-any cline-neutral">&nbsp;</span>
3708
+ <span class="cline-any cline-yes">15x</span>
3531
3709
  <span class="cline-any cline-neutral">&nbsp;</span>
3532
3710
  <span class="cline-any cline-neutral">&nbsp;</span>
3533
3711
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -3555,7 +3733,6 @@
3555
3733
  <span class="cline-any cline-neutral">&nbsp;</span>
3556
3734
  <span class="cline-any cline-neutral">&nbsp;</span>
3557
3735
  <span class="cline-any cline-neutral">&nbsp;</span>
3558
- <span class="cline-any cline-no">&nbsp;</span>
3559
3736
  <span class="cline-any cline-neutral">&nbsp;</span>
3560
3737
  <span class="cline-any cline-neutral">&nbsp;</span>
3561
3738
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -3582,142 +3759,151 @@
3582
3759
  <span class="cline-any cline-neutral">&nbsp;</span>
3583
3760
  <span class="cline-any cline-neutral">&nbsp;</span>
3584
3761
  <span class="cline-any cline-neutral">&nbsp;</span>
3762
+ <span class="cline-any cline-yes">16x</span>
3763
+ <span class="cline-any cline-yes">16x</span>
3764
+ <span class="cline-any cline-yes">16x</span>
3585
3765
  <span class="cline-any cline-neutral">&nbsp;</span>
3586
3766
  <span class="cline-any cline-neutral">&nbsp;</span>
3767
+ <span class="cline-any cline-yes">3x</span>
3768
+ <span class="cline-any cline-yes">3x</span>
3769
+ <span class="cline-any cline-yes">3x</span>
3587
3770
  <span class="cline-any cline-neutral">&nbsp;</span>
3588
3771
  <span class="cline-any cline-neutral">&nbsp;</span>
3772
+ <span class="cline-any cline-yes">7x</span>
3773
+ <span class="cline-any cline-yes">7x</span>
3774
+ <span class="cline-any cline-yes">7x</span>
3775
+ <span class="cline-any cline-yes">7x</span>
3589
3776
  <span class="cline-any cline-neutral">&nbsp;</span>
3777
+ <span class="cline-any cline-yes">7x</span>
3778
+ <span class="cline-any cline-yes">7x</span>
3590
3779
  <span class="cline-any cline-neutral">&nbsp;</span>
3591
3780
  <span class="cline-any cline-neutral">&nbsp;</span>
3592
3781
  <span class="cline-any cline-neutral">&nbsp;</span>
3593
3782
  <span class="cline-any cline-neutral">&nbsp;</span>
3594
- <span class="cline-any cline-no">&nbsp;</span>
3595
- <span class="cline-any cline-no">&nbsp;</span>
3596
- <span class="cline-any cline-no">&nbsp;</span>
3597
3783
  <span class="cline-any cline-neutral">&nbsp;</span>
3598
3784
  <span class="cline-any cline-neutral">&nbsp;</span>
3599
- <span class="cline-any cline-no">&nbsp;</span>
3600
- <span class="cline-any cline-no">&nbsp;</span>
3601
- <span class="cline-any cline-no">&nbsp;</span>
3602
3785
  <span class="cline-any cline-neutral">&nbsp;</span>
3603
3786
  <span class="cline-any cline-neutral">&nbsp;</span>
3604
- <span class="cline-any cline-no">&nbsp;</span>
3605
- <span class="cline-any cline-no">&nbsp;</span>
3606
- <span class="cline-any cline-no">&nbsp;</span>
3607
- <span class="cline-any cline-no">&nbsp;</span>
3608
3787
  <span class="cline-any cline-neutral">&nbsp;</span>
3609
- <span class="cline-any cline-no">&nbsp;</span>
3610
- <span class="cline-any cline-no">&nbsp;</span>
3788
+ <span class="cline-any cline-yes">7x</span>
3789
+ <span class="cline-any cline-yes">21x</span>
3611
3790
  <span class="cline-any cline-neutral">&nbsp;</span>
3791
+ <span class="cline-any cline-yes">7x</span>
3612
3792
  <span class="cline-any cline-neutral">&nbsp;</span>
3793
+ <span class="cline-any cline-yes">21x</span>
3613
3794
  <span class="cline-any cline-neutral">&nbsp;</span>
3614
3795
  <span class="cline-any cline-neutral">&nbsp;</span>
3615
3796
  <span class="cline-any cline-neutral">&nbsp;</span>
3797
+ <span class="cline-any cline-yes">7x</span>
3616
3798
  <span class="cline-any cline-neutral">&nbsp;</span>
3617
3799
  <span class="cline-any cline-neutral">&nbsp;</span>
3618
3800
  <span class="cline-any cline-neutral">&nbsp;</span>
3801
+ <span class="cline-any cline-yes">7x</span>
3619
3802
  <span class="cline-any cline-neutral">&nbsp;</span>
3620
- <span class="cline-any cline-no">&nbsp;</span>
3621
- <span class="cline-any cline-no">&nbsp;</span>
3622
3803
  <span class="cline-any cline-neutral">&nbsp;</span>
3623
- <span class="cline-any cline-no">&nbsp;</span>
3624
3804
  <span class="cline-any cline-neutral">&nbsp;</span>
3625
- <span class="cline-any cline-no">&nbsp;</span>
3626
3805
  <span class="cline-any cline-neutral">&nbsp;</span>
3627
3806
  <span class="cline-any cline-neutral">&nbsp;</span>
3628
3807
  <span class="cline-any cline-neutral">&nbsp;</span>
3629
- <span class="cline-any cline-no">&nbsp;</span>
3630
3808
  <span class="cline-any cline-neutral">&nbsp;</span>
3809
+ <span class="cline-any cline-yes">165x</span>
3810
+ <span class="cline-any cline-yes">161x</span>
3631
3811
  <span class="cline-any cline-neutral">&nbsp;</span>
3632
3812
  <span class="cline-any cline-neutral">&nbsp;</span>
3633
- <span class="cline-any cline-no">&nbsp;</span>
3813
+ <span class="cline-any cline-yes">4x</span>
3814
+ <span class="cline-any cline-yes">4x</span>
3815
+ <span class="cline-any cline-yes">4x</span>
3816
+ <span class="cline-any cline-yes">4x</span>
3634
3817
  <span class="cline-any cline-neutral">&nbsp;</span>
3818
+ <span class="cline-any cline-yes">4x</span>
3819
+ <span class="cline-any cline-yes">2x</span>
3635
3820
  <span class="cline-any cline-neutral">&nbsp;</span>
3636
3821
  <span class="cline-any cline-neutral">&nbsp;</span>
3822
+ <span class="cline-any cline-yes">2x</span>
3823
+ <span class="cline-any cline-yes">2x</span>
3637
3824
  <span class="cline-any cline-neutral">&nbsp;</span>
3825
+ <span class="cline-any cline-yes">2x</span>
3638
3826
  <span class="cline-any cline-neutral">&nbsp;</span>
3639
3827
  <span class="cline-any cline-neutral">&nbsp;</span>
3640
3828
  <span class="cline-any cline-neutral">&nbsp;</span>
3641
- <span class="cline-any cline-no">&nbsp;</span>
3642
- <span class="cline-any cline-no">&nbsp;</span>
3643
- <span class="cline-any cline-no">&nbsp;</span>
3829
+ <span class="cline-any cline-yes">1x</span>
3830
+ <span class="cline-any cline-yes">1x</span>
3831
+ <span class="cline-any cline-yes">1x</span>
3644
3832
  <span class="cline-any cline-neutral">&nbsp;</span>
3645
3833
  <span class="cline-any cline-neutral">&nbsp;</span>
3646
- <span class="cline-any cline-no">&nbsp;</span>
3834
+ <span class="cline-any cline-yes">2x</span>
3647
3835
  <span class="cline-any cline-neutral">&nbsp;</span>
3648
- <span class="cline-any cline-no">&nbsp;</span>
3836
+ <span class="cline-any cline-yes">2x</span>
3649
3837
  <span class="cline-any cline-neutral">&nbsp;</span>
3650
3838
  <span class="cline-any cline-neutral">&nbsp;</span>
3651
3839
  <span class="cline-any cline-neutral">&nbsp;</span>
3652
- <span class="cline-any cline-no">&nbsp;</span>
3840
+ <span class="cline-any cline-yes">2x</span>
3653
3841
  <span class="cline-any cline-neutral">&nbsp;</span>
3654
3842
  <span class="cline-any cline-neutral">&nbsp;</span>
3655
- <span class="cline-any cline-no">&nbsp;</span>
3843
+ <span class="cline-any cline-yes">2x</span>
3656
3844
  <span class="cline-any cline-neutral">&nbsp;</span>
3657
3845
  <span class="cline-any cline-neutral">&nbsp;</span>
3658
3846
  <span class="cline-any cline-neutral">&nbsp;</span>
3659
3847
  <span class="cline-any cline-neutral">&nbsp;</span>
3660
3848
  <span class="cline-any cline-neutral">&nbsp;</span>
3661
3849
  <span class="cline-any cline-neutral">&nbsp;</span>
3662
- <span class="cline-any cline-no">&nbsp;</span>
3850
+ <span class="cline-any cline-yes">2x</span>
3663
3851
  <span class="cline-any cline-neutral">&nbsp;</span>
3664
3852
  <span class="cline-any cline-neutral">&nbsp;</span>
3665
3853
  <span class="cline-any cline-neutral">&nbsp;</span>
3854
+ <span class="cline-any cline-yes">14x</span>
3855
+ <span class="cline-any cline-yes">14x</span>
3666
3856
  <span class="cline-any cline-neutral">&nbsp;</span>
3667
- <span class="cline-any cline-no">&nbsp;</span>
3668
- <span class="cline-any cline-no">&nbsp;</span>
3857
+ <span class="cline-any cline-yes">14x</span>
3858
+ <span class="cline-any cline-yes">14x</span>
3669
3859
  <span class="cline-any cline-neutral">&nbsp;</span>
3670
- <span class="cline-any cline-no">&nbsp;</span>
3671
- <span class="cline-any cline-no">&nbsp;</span>
3860
+ <span class="cline-any cline-yes">14x</span>
3861
+ <span class="cline-any cline-yes">9x</span>
3672
3862
  <span class="cline-any cline-neutral">&nbsp;</span>
3673
- <span class="cline-any cline-no">&nbsp;</span>
3674
- <span class="cline-any cline-no">&nbsp;</span>
3675
3863
  <span class="cline-any cline-neutral">&nbsp;</span>
3864
+ <span class="cline-any cline-yes">14x</span>
3676
3865
  <span class="cline-any cline-neutral">&nbsp;</span>
3677
- <span class="cline-any cline-no">&nbsp;</span>
3678
3866
  <span class="cline-any cline-neutral">&nbsp;</span>
3679
3867
  <span class="cline-any cline-neutral">&nbsp;</span>
3868
+ <span class="cline-any cline-yes">53x</span>
3680
3869
  <span class="cline-any cline-neutral">&nbsp;</span>
3681
- <span class="cline-any cline-no">&nbsp;</span>
3870
+ <span class="cline-any cline-yes">53x</span>
3871
+ <span class="cline-any cline-yes">4x</span>
3682
3872
  <span class="cline-any cline-neutral">&nbsp;</span>
3683
- <span class="cline-any cline-no">&nbsp;</span>
3684
- <span class="cline-any cline-no">&nbsp;</span>
3685
3873
  <span class="cline-any cline-neutral">&nbsp;</span>
3686
- <span class="cline-any cline-no">&nbsp;</span>
3687
3874
  <span class="cline-any cline-neutral">&nbsp;</span>
3688
3875
  <span class="cline-any cline-neutral">&nbsp;</span>
3689
3876
  <span class="cline-any cline-neutral">&nbsp;</span>
3690
3877
  <span class="cline-any cline-neutral">&nbsp;</span>
3691
- <span class="cline-any cline-no">&nbsp;</span>
3692
3878
  <span class="cline-any cline-neutral">&nbsp;</span>
3693
- <span class="cline-any cline-no">&nbsp;</span>
3879
+ <span class="cline-any cline-yes">49x</span>
3694
3880
  <span class="cline-any cline-neutral">&nbsp;</span>
3695
- <span class="cline-any cline-no">&nbsp;</span>
3696
- <span class="cline-any cline-no">&nbsp;</span>
3697
3881
  <span class="cline-any cline-neutral">&nbsp;</span>
3698
- <span class="cline-any cline-no">&nbsp;</span>
3699
- <span class="cline-any cline-no">&nbsp;</span>
3700
3882
  <span class="cline-any cline-neutral">&nbsp;</span>
3701
3883
  <span class="cline-any cline-neutral">&nbsp;</span>
3702
- <span class="cline-any cline-no">&nbsp;</span>
3884
+ <span class="cline-any cline-yes">48x</span>
3703
3885
  <span class="cline-any cline-neutral">&nbsp;</span>
3886
+ <span class="cline-any cline-yes">48x</span>
3887
+ <span class="cline-any cline-yes">156x</span>
3888
+ <span class="cline-any cline-yes">102x</span>
3889
+ <span class="cline-any cline-yes">102x</span>
3704
3890
  <span class="cline-any cline-neutral">&nbsp;</span>
3705
3891
  <span class="cline-any cline-neutral">&nbsp;</span>
3706
3892
  <span class="cline-any cline-neutral">&nbsp;</span>
3707
- <span class="cline-any cline-no">&nbsp;</span>
3708
3893
  <span class="cline-any cline-neutral">&nbsp;</span>
3709
3894
  <span class="cline-any cline-neutral">&nbsp;</span>
3895
+ <span class="cline-any cline-yes">1x</span>
3896
+ <span class="cline-any cline-yes">1x</span>
3710
3897
  <span class="cline-any cline-neutral">&nbsp;</span>
3711
3898
  <span class="cline-any cline-neutral">&nbsp;</span>
3712
- <span class="cline-any cline-no">&nbsp;</span>
3713
- <span class="cline-any cline-no">&nbsp;</span>
3714
3899
  <span class="cline-any cline-neutral">&nbsp;</span>
3900
+ <span class="cline-any cline-yes">4854x</span>
3715
3901
  <span class="cline-any cline-neutral">&nbsp;</span>
3716
3902
  <span class="cline-any cline-neutral">&nbsp;</span>
3717
3903
  <span class="cline-any cline-neutral">&nbsp;</span>
3718
- <span class="cline-any cline-no">&nbsp;</span>
3904
+ <span class="cline-any cline-yes">76x</span>
3719
3905
  <span class="cline-any cline-neutral">&nbsp;</span>
3720
- <span class="cline-any cline-no">&nbsp;</span>
3906
+ <span class="cline-any cline-yes">76x</span>
3721
3907
  <span class="cline-any cline-neutral">&nbsp;</span>
3722
3908
  <span class="cline-any cline-neutral">&nbsp;</span>
3723
3909
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -3726,61 +3912,61 @@
3726
3912
  <span class="cline-any cline-neutral">&nbsp;</span>
3727
3913
  <span class="cline-any cline-neutral">&nbsp;</span>
3728
3914
  <span class="cline-any cline-neutral">&nbsp;</span>
3729
- <span class="cline-any cline-no">&nbsp;</span>
3915
+ <span class="cline-any cline-yes">4x</span>
3730
3916
  <span class="cline-any cline-neutral">&nbsp;</span>
3731
- <span class="cline-any cline-no">&nbsp;</span>
3917
+ <span class="cline-any cline-yes">4x</span>
3732
3918
  <span class="cline-any cline-neutral">&nbsp;</span>
3733
- <span class="cline-any cline-no">&nbsp;</span>
3919
+ <span class="cline-any cline-yes">4x</span>
3734
3920
  <span class="cline-any cline-neutral">&nbsp;</span>
3735
3921
  <span class="cline-any cline-neutral">&nbsp;</span>
3736
3922
  <span class="cline-any cline-neutral">&nbsp;</span>
3737
3923
  <span class="cline-any cline-neutral">&nbsp;</span>
3738
- <span class="cline-any cline-no">&nbsp;</span>
3739
- <span class="cline-any cline-no">&nbsp;</span>
3740
- <span class="cline-any cline-no">&nbsp;</span>
3924
+ <span class="cline-any cline-yes">1x</span>
3925
+ <span class="cline-any cline-yes">3x</span>
3926
+ <span class="cline-any cline-yes">1x</span>
3741
3927
  <span class="cline-any cline-neutral">&nbsp;</span>
3742
- <span class="cline-any cline-no">&nbsp;</span>
3928
+ <span class="cline-any cline-yes">2x</span>
3743
3929
  <span class="cline-any cline-neutral">&nbsp;</span>
3744
3930
  <span class="cline-any cline-neutral">&nbsp;</span>
3745
- <span class="cline-any cline-no">&nbsp;</span>
3931
+ <span class="cline-any cline-yes">4x</span>
3746
3932
  <span class="cline-any cline-neutral">&nbsp;</span>
3747
3933
  <span class="cline-any cline-neutral">&nbsp;</span>
3748
3934
  <span class="cline-any cline-neutral">&nbsp;</span>
3749
3935
  <span class="cline-any cline-neutral">&nbsp;</span>
3750
- <span class="cline-any cline-no">&nbsp;</span>
3751
- <span class="cline-any cline-no">&nbsp;</span>
3936
+ <span class="cline-any cline-yes">4x</span>
3937
+ <span class="cline-any cline-yes">18x</span>
3752
3938
  <span class="cline-any cline-neutral">&nbsp;</span>
3753
- <span class="cline-any cline-no">&nbsp;</span>
3754
- <span class="cline-any cline-no">&nbsp;</span>
3939
+ <span class="cline-any cline-yes">4x</span>
3940
+ <span class="cline-any cline-yes">4x</span>
3755
3941
  <span class="cline-any cline-neutral">&nbsp;</span>
3756
- <span class="cline-any cline-no">&nbsp;</span>
3757
- <span class="cline-any cline-no">&nbsp;</span>
3942
+ <span class="cline-any cline-yes">16x</span>
3943
+ <span class="cline-any cline-yes">8x</span>
3758
3944
  <span class="cline-any cline-neutral">&nbsp;</span>
3759
3945
  <span class="cline-any cline-neutral">&nbsp;</span>
3760
- <span class="cline-any cline-no">&nbsp;</span>
3946
+ <span class="cline-any cline-yes">8x</span>
3761
3947
  <span class="cline-any cline-neutral">&nbsp;</span>
3762
3948
  <span class="cline-any cline-neutral">&nbsp;</span>
3763
3949
  <span class="cline-any cline-neutral">&nbsp;</span>
3764
- <span class="cline-any cline-no">&nbsp;</span>
3950
+ <span class="cline-any cline-yes">4x</span>
3765
3951
  <span class="cline-any cline-neutral">&nbsp;</span>
3766
3952
  <span class="cline-any cline-neutral">&nbsp;</span>
3767
3953
  <span class="cline-any cline-neutral">&nbsp;</span>
3768
3954
  <span class="cline-any cline-neutral">&nbsp;</span>
3769
3955
  <span class="cline-any cline-neutral">&nbsp;</span>
3770
3956
  <span class="cline-any cline-neutral">&nbsp;</span>
3771
- <span class="cline-any cline-no">&nbsp;</span>
3957
+ <span class="cline-any cline-yes">4x</span>
3772
3958
  <span class="cline-any cline-neutral">&nbsp;</span>
3773
3959
  <span class="cline-any cline-neutral">&nbsp;</span>
3774
3960
  <span class="cline-any cline-neutral">&nbsp;</span>
3775
3961
  <span class="cline-any cline-neutral">&nbsp;</span>
3776
- <span class="cline-any cline-no">&nbsp;</span>
3962
+ <span class="cline-any cline-yes">41x</span>
3777
3963
  <span class="cline-any cline-neutral">&nbsp;</span>
3778
3964
  <span class="cline-any cline-neutral">&nbsp;</span>
3779
- <span class="cline-any cline-no">&nbsp;</span>
3965
+ <span class="cline-any cline-yes">41x</span>
3780
3966
  <span class="cline-any cline-neutral">&nbsp;</span>
3781
3967
  <span class="cline-any cline-neutral">&nbsp;</span>
3782
3968
  <span class="cline-any cline-neutral">&nbsp;</span>
3783
- <span class="cline-any cline-no">&nbsp;</span>
3969
+ <span class="cline-any cline-yes">41x</span>
3784
3970
  <span class="cline-any cline-neutral">&nbsp;</span>
3785
3971
  <span class="cline-any cline-neutral">&nbsp;</span>
3786
3972
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -3792,40 +3978,40 @@
3792
3978
  <span class="cline-any cline-neutral">&nbsp;</span>
3793
3979
  <span class="cline-any cline-neutral">&nbsp;</span>
3794
3980
  <span class="cline-any cline-neutral">&nbsp;</span>
3795
- <span class="cline-any cline-no">&nbsp;</span>
3796
- <span class="cline-any cline-no">&nbsp;</span>
3797
- <span class="cline-any cline-no">&nbsp;</span>
3981
+ <span class="cline-any cline-yes">12x</span>
3982
+ <span class="cline-any cline-yes">12x</span>
3983
+ <span class="cline-any cline-yes">42x</span>
3798
3984
  <span class="cline-any cline-neutral">&nbsp;</span>
3799
- <span class="cline-any cline-no">&nbsp;</span>
3985
+ <span class="cline-any cline-yes">12x</span>
3800
3986
  <span class="cline-any cline-neutral">&nbsp;</span>
3801
- <span class="cline-any cline-no">&nbsp;</span>
3802
- <span class="cline-any cline-no">&nbsp;</span>
3987
+ <span class="cline-any cline-yes">12x</span>
3988
+ <span class="cline-any cline-yes">2x</span>
3803
3989
  <span class="cline-any cline-neutral">&nbsp;</span>
3804
3990
  <span class="cline-any cline-neutral">&nbsp;</span>
3805
- <span class="cline-any cline-no">&nbsp;</span>
3806
- <span class="cline-any cline-no">&nbsp;</span>
3991
+ <span class="cline-any cline-yes">53x</span>
3992
+ <span class="cline-any cline-yes">10x</span>
3807
3993
  <span class="cline-any cline-neutral">&nbsp;</span>
3808
3994
  <span class="cline-any cline-neutral">&nbsp;</span>
3809
3995
  <span class="cline-any cline-neutral">&nbsp;</span>
3810
- <span class="cline-any cline-no">&nbsp;</span>
3996
+ <span class="cline-any cline-yes">10x</span>
3811
3997
  <span class="cline-any cline-neutral">&nbsp;</span>
3812
- <span class="cline-any cline-no">&nbsp;</span>
3998
+ <span class="cline-any cline-yes">10x</span>
3813
3999
  <span class="cline-any cline-neutral">&nbsp;</span>
3814
4000
  <span class="cline-any cline-neutral">&nbsp;</span>
3815
4001
  <span class="cline-any cline-neutral">&nbsp;</span>
3816
- <span class="cline-any cline-no">&nbsp;</span>
4002
+ <span class="cline-any cline-yes">111x</span>
3817
4003
  <span class="cline-any cline-neutral">&nbsp;</span>
3818
4004
  <span class="cline-any cline-neutral">&nbsp;</span>
3819
- <span class="cline-any cline-no">&nbsp;</span>
3820
- <span class="cline-any cline-no">&nbsp;</span>
4005
+ <span class="cline-any cline-yes">4819x</span>
4006
+ <span class="cline-any cline-yes">4819x</span>
3821
4007
  <span class="cline-any cline-neutral">&nbsp;</span>
3822
4008
  <span class="cline-any cline-neutral">&nbsp;</span>
3823
4009
  <span class="cline-any cline-neutral">&nbsp;</span>
3824
- <span class="cline-any cline-no">&nbsp;</span>
4010
+ <span class="cline-any cline-yes">108x</span>
3825
4011
  <span class="cline-any cline-neutral">&nbsp;</span>
3826
4012
  <span class="cline-any cline-neutral">&nbsp;</span>
3827
- <span class="cline-any cline-no">&nbsp;</span>
3828
- <span class="cline-any cline-no">&nbsp;</span>
4013
+ <span class="cline-any cline-yes">140x</span>
4014
+ <span class="cline-any cline-yes">140x</span>
3829
4015
  <span class="cline-any cline-neutral">&nbsp;</span>
3830
4016
  <span class="cline-any cline-neutral">&nbsp;</span>
3831
4017
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -3836,22 +4022,22 @@
3836
4022
  <span class="cline-any cline-neutral">&nbsp;</span>
3837
4023
  <span class="cline-any cline-neutral">&nbsp;</span>
3838
4024
  <span class="cline-any cline-neutral">&nbsp;</span>
3839
- <span class="cline-any cline-no">&nbsp;</span>
4025
+ <span class="cline-any cline-yes">3x</span>
3840
4026
  <span class="cline-any cline-neutral">&nbsp;</span>
3841
- <span class="cline-any cline-no">&nbsp;</span>
3842
- <span class="cline-any cline-no">&nbsp;</span>
3843
- <span class="cline-any cline-no">&nbsp;</span>
3844
- <span class="cline-any cline-no">&nbsp;</span>
4027
+ <span class="cline-any cline-yes">3x</span>
4028
+ <span class="cline-any cline-yes">2x</span>
4029
+ <span class="cline-any cline-yes">2x</span>
4030
+ <span class="cline-any cline-yes">2x</span>
3845
4031
  <span class="cline-any cline-neutral">&nbsp;</span>
3846
4032
  <span class="cline-any cline-neutral">&nbsp;</span>
3847
4033
  <span class="cline-any cline-neutral">&nbsp;</span>
3848
4034
  <span class="cline-any cline-neutral">&nbsp;</span>
3849
- <span class="cline-any cline-no">&nbsp;</span>
3850
- <span class="cline-any cline-no">&nbsp;</span>
4035
+ <span class="cline-any cline-yes">2x</span>
4036
+ <span class="cline-any cline-yes">2x</span>
3851
4037
  <span class="cline-any cline-neutral">&nbsp;</span>
3852
4038
  <span class="cline-any cline-neutral">&nbsp;</span>
3853
4039
  <span class="cline-any cline-neutral">&nbsp;</span>
3854
- <span class="cline-any cline-no">&nbsp;</span>
4040
+ <span class="cline-any cline-yes">2x</span>
3855
4041
  <span class="cline-any cline-neutral">&nbsp;</span>
3856
4042
  <span class="cline-any cline-neutral">&nbsp;</span>
3857
4043
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -3861,19 +4047,22 @@
3861
4047
  <span class="cline-any cline-neutral">&nbsp;</span>
3862
4048
  <span class="cline-any cline-neutral">&nbsp;</span>
3863
4049
  <span class="cline-any cline-neutral">&nbsp;</span>
3864
- <span class="cline-any cline-no">&nbsp;</span>
3865
- <span class="cline-any cline-no">&nbsp;</span>
3866
- <span class="cline-any cline-no">&nbsp;</span>
4050
+ <span class="cline-any cline-yes">5078x</span>
4051
+ <span class="cline-any cline-yes">15659x</span>
4052
+ <span class="cline-any cline-yes">10371x</span>
4053
+ <span class="cline-any cline-neutral">&nbsp;</span>
4054
+ <span class="cline-any cline-neutral">&nbsp;</span>
4055
+ <span class="cline-any cline-neutral">&nbsp;</span>
3867
4056
  <span class="cline-any cline-neutral">&nbsp;</span>
3868
4057
  <span class="cline-any cline-neutral">&nbsp;</span>
3869
4058
  <span class="cline-any cline-neutral">&nbsp;</span>
3870
4059
  <span class="cline-any cline-neutral">&nbsp;</span>
3871
- <span class="cline-any cline-no">&nbsp;</span>
3872
4060
  <span class="cline-any cline-neutral">&nbsp;</span>
3873
- <span class="cline-any cline-no">&nbsp;</span>
3874
4061
  <span class="cline-any cline-neutral">&nbsp;</span>
3875
4062
  <span class="cline-any cline-neutral">&nbsp;</span>
4063
+ <span class="cline-any cline-yes">10371x</span>
3876
4064
  <span class="cline-any cline-neutral">&nbsp;</span>
4065
+ <span class="cline-any cline-yes">10371x</span>
3877
4066
  <span class="cline-any cline-neutral">&nbsp;</span>
3878
4067
  <span class="cline-any cline-neutral">&nbsp;</span>
3879
4068
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -3885,7 +4074,11 @@
3885
4074
  <span class="cline-any cline-neutral">&nbsp;</span>
3886
4075
  <span class="cline-any cline-neutral">&nbsp;</span>
3887
4076
  <span class="cline-any cline-neutral">&nbsp;</span>
3888
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { raf } from "@react-spring/rafz";
4077
+ <span class="cline-any cline-neutral">&nbsp;</span>
4078
+ <span class="cline-any cline-neutral">&nbsp;</span>
4079
+ <span class="cline-any cline-neutral">&nbsp;</span>
4080
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import Cookies from "universal-cookie";
4081
+ import { raf } from "@react-spring/rafz";
3889
4082
  import {
3890
4083
  createMachine,
3891
4084
  assign,
@@ -3922,12 +4115,12 @@ export interface ParsedPixelUnit {
3922
4115
  &nbsp;
3923
4116
  type ParsedUnit = ParsedPercentUnit | ParsedPixelUnit;
3924
4117
  &nbsp;
3925
- export function <span class="fstat-no" title="function not covered" >makePercentUnit(v</span>alue: number): ParsedPercentUnit {
3926
- <span class="cstat-no" title="statement not covered" > return { type: "percent", value: new Big(value) };</span>
4118
+ export function makePercentUnit(value: number): ParsedPercentUnit {
4119
+ return { type: "percent", value: new Big(value) };
3927
4120
  }
3928
4121
  &nbsp;
3929
- export function <span class="fstat-no" title="function not covered" >makePixelUnit(v</span>alue: number): ParsedPixelUnit {
3930
- <span class="cstat-no" title="statement not covered" > return { type: "pixel", value: new Big(value) };</span>
4122
+ export function makePixelUnit(value: number): ParsedPixelUnit {
4123
+ return { type: "pixel", value: new Big(value) };
3931
4124
  }
3932
4125
  &nbsp;
3933
4126
  interface MoveMoveEvent {
@@ -3952,6 +4145,13 @@ export interface Constraints&lt;T extends ParsedUnit | Unit = ParsedUnit&gt; {
3952
4145
  defaultCollapsed?: boolean;
3953
4146
  /** The size of the panel once collapsed */
3954
4147
  collapsedSize?: T;
4148
+ /**
4149
+ * By default the layout will be stored in percentage values while at rest.
4150
+ * This makes scaling the layout easier when the container is resized.
4151
+ * However you might have a panel you want to stay at a static size when
4152
+ * the container is resized.
4153
+ */
4154
+ isStaticAtRest?: boolean;
3955
4155
  }
3956
4156
  &nbsp;
3957
4157
  interface Order {
@@ -3995,42 +4195,43 @@ export interface PanelData
3995
4195
  collapseAnimation?:
3996
4196
  | CollapseAnimation
3997
4197
  | { duration: number; easing: CollapseAnimation | ((t: number) =&gt; number) };
4198
+ lastKnownSize?: Rect;
3998
4199
  }
3999
4200
  &nbsp;
4000
- function <span class="fstat-no" title="function not covered" >getCollapseAnimation(p</span>anel: PanelData) {
4001
- let easeFn = <span class="cstat-no" title="statement not covered" >collapseAnimations.linear;</span>
4002
- let duration = <span class="cstat-no" title="statement not covered" >300;</span>
4201
+ function getCollapseAnimation(panel: PanelData) {
4202
+ let easeFn = collapseAnimations.linear;
4203
+ let duration = 300;
4003
4204
  &nbsp;
4004
- <span class="cstat-no" title="statement not covered" > if (panel.collapseAnimation) {</span>
4005
- <span class="cstat-no" title="statement not covered" > if (typeof panel.collapseAnimation === "string") {</span>
4006
- <span class="cstat-no" title="statement not covered" > easeFn = collapseAnimations[panel.collapseAnimation];</span>
4205
+ if (panel.collapseAnimation) {
4206
+ if (typeof panel.collapseAnimation === "string") {
4207
+ easeFn = collapseAnimations[panel.collapseAnimation];
4007
4208
  } else {
4008
- <span class="cstat-no" title="statement not covered" > duration = panel.collapseAnimation.duration;</span>
4009
- <span class="cstat-no" title="statement not covered" > easeFn =</span>
4209
+ duration = panel.collapseAnimation.duration;
4210
+ easeFn =
4010
4211
  typeof panel.collapseAnimation.easing === "function"
4011
4212
  ? panel.collapseAnimation.easing
4012
4213
  : collapseAnimations[panel.collapseAnimation.easing];
4013
4214
  }
4014
4215
  }
4015
4216
  &nbsp;
4016
- <span class="cstat-no" title="statement not covered" > return { ease: easeFn, duration };</span>
4217
+ return { ease: easeFn, duration };
4017
4218
  }
4018
4219
  &nbsp;
4019
4220
  /** Copied from https://github.com/d3/d3-ease */
4020
4221
  const collapseAnimations = {
4021
- "ease-in-out": function <span class="fstat-no" title="function not covered" >quadInOut(t</span>: number) {
4022
- <span class="cstat-no" title="statement not covered" > return ((t *= 2) &lt;= 1 ? t * t : --t * (2 - t) + 1) / 2;</span>
4222
+ "ease-in-out": function quadInOut(t: number) {
4223
+ return ((t *= 2) &lt;= 1 ? t * t : --t * (2 - t) + 1) / 2;
4023
4224
  },
4024
- bounce: function <span class="fstat-no" title="function not covered" >backInOut(t</span>: number) {
4025
- const s = <span class="cstat-no" title="statement not covered" >1.70158;</span>
4026
- <span class="cstat-no" title="statement not covered" > return (</span>
4225
+ bounce: function backInOut(t: number) {
4226
+ const s = 1.70158;
4227
+ return (
4027
4228
  ((t *= 2) &lt; 1
4028
4229
  ? t * t * ((s + 1) * t - s)
4029
4230
  : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2
4030
4231
  );
4031
4232
  },
4032
- linear: function <span class="fstat-no" title="function not covered" >linear(t</span>: number) {
4033
- <span class="cstat-no" title="statement not covered" > return +t;</span>
4233
+ linear: function linear(t: number) {
4234
+ return +t;
4034
4235
  },
4035
4236
  };
4036
4237
  &nbsp;
@@ -4182,8 +4383,17 @@ export interface GroupMachineContextValue {
4182
4383
  /** How much the drag has overshot the handle */
4183
4384
  dragOvershoot: Big.Big;
4184
4385
  groupId: string;
4386
+ /**
4387
+ * How to save the persisted state
4388
+ */
4389
+ autosaveStrategy?: "localStorage" | "cookie";
4185
4390
  }
4186
4391
  &nbsp;
4392
+ export type GroupMachineSnapshot = Snapshot&lt;unknown&gt; &amp; {
4393
+ context: GroupMachineContextValue;
4394
+ value: string;
4395
+ };
4396
+ &nbsp;
4187
4397
  export type GroupMachineEvent =
4188
4398
  | RegisterPanelEvent
4189
4399
  | RegisterDynamicPanelEvent
@@ -4210,66 +4420,64 @@ type EventForType&lt;T extends GroupMachineEvent["type"]&gt; = Extract&lt;
4210
4420
  &nbsp;
4211
4421
  // #region Helpers
4212
4422
  &nbsp;
4213
- export function <span class="fstat-no" title="function not covered" >getCursor(</span>
4423
+ export function getCursor(
4214
4424
  context: Pick&lt;GroupMachineContextValue, "dragOvershoot" | "orientation"&gt;
4215
4425
  ) {
4216
- <span class="cstat-no" title="statement not covered" > if (context.orientation === "horizontal") {</span>
4217
- <span class="cstat-no" title="statement not covered" > if (context.dragOvershoot.gt(0)) {</span>
4218
- <span class="cstat-no" title="statement not covered" > return "w-resize";</span>
4219
- <span class="cstat-no" title="statement not covered" > } else if (context.dragOvershoot.lt(0)) {</span>
4220
- <span class="cstat-no" title="statement not covered" > return "e-resize";</span>
4426
+ if (context.orientation === "horizontal") {
4427
+ if (context.dragOvershoot.gt(0)) {
4428
+ return "w-resize";
4429
+ } else if (context.dragOvershoot.lt(0)) {
4430
+ return "e-resize";
4221
4431
  } else {
4222
- <span class="cstat-no" title="statement not covered" > return "ew-resize";</span>
4432
+ return "ew-resize";
4223
4433
  }
4224
4434
  } else {
4225
- <span class="cstat-no" title="statement not covered" > if (context.dragOvershoot.gt(0)) {</span>
4226
- <span class="cstat-no" title="statement not covered" > return "n-resize";</span>
4227
- <span class="cstat-no" title="statement not covered" > } else if (context.dragOvershoot.lt(0)) {</span>
4228
- <span class="cstat-no" title="statement not covered" > return "s-resize";</span>
4435
+ if (context.dragOvershoot.gt(0)) {
4436
+ return "n-resize";
4437
+ } else if (context.dragOvershoot.lt(0)) {
4438
+ return "s-resize";
4229
4439
  } else {
4230
- <span class="cstat-no" title="statement not covered" > return "ns-resize";</span>
4440
+ return "ns-resize";
4231
4441
  }
4232
4442
  }
4233
4443
  }
4234
4444
  &nbsp;
4235
- export function <span class="fstat-no" title="function not covered" >prepareSnapshot(s</span>napshot: Snapshot&lt;unknown&gt;) {
4236
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
4237
- const snapshotContext = (<span class="cstat-no" title="statement not covered" >snapshot as any)</span>
4238
- .context as unknown as GroupMachineContextValue;
4445
+ export function prepareSnapshot(snapshot: GroupMachineSnapshot) {
4446
+ const snapshotContext = snapshot.context;
4239
4447
  &nbsp;
4240
- <span class="cstat-no" title="statement not covered" > snapshotContext.dragOvershoot = new Big(snapshotContext.dragOvershoot);</span>
4448
+ snapshotContext.dragOvershoot = new Big(snapshotContext.dragOvershoot);
4241
4449
  &nbsp;
4242
- <span class="cstat-no" title="statement not covered" > for (const item of snapshotContext.items) {</span>
4243
- <span class="cstat-no" title="statement not covered" > if (isPanelData(item)) {</span>
4244
- <span class="cstat-no" title="statement not covered" > item.currentValue.value = new Big(item.currentValue.value);</span>
4245
- <span class="cstat-no" title="statement not covered" > item.collapsedSize.value = new Big(item.collapsedSize.value);</span>
4246
- <span class="cstat-no" title="statement not covered" > item.min.value = new Big(item.min.value);</span>
4450
+ for (const item of snapshotContext.items) {
4451
+ if (isPanelData(item)) {
4452
+ item.currentValue.value = new Big(item.currentValue.value);
4453
+ item.collapsedSize.value = new Big(item.collapsedSize.value);
4454
+ item.min.value = new Big(item.min.value);
4247
4455
  &nbsp;
4248
- <span class="cstat-no" title="statement not covered" > if (item.max &amp;&amp; item.max !== "1fr") {</span>
4249
- <span class="cstat-no" title="statement not covered" > item.max.value = new Big(item.max.value);</span>
4456
+ if (item.max &amp;&amp; item.max !== "1fr") {
4457
+ item.max.value = new Big(item.max.value);
4250
4458
  }
4251
4459
  } else {
4252
- <span class="cstat-no" title="statement not covered" > item.size.value = new Big(item.size.value);</span>
4460
+ item.size.value = new Big(item.size.value);
4253
4461
  }
4254
4462
  }
4255
4463
  &nbsp;
4256
- <span class="cstat-no" title="statement not covered" > return snapshot;</span>
4464
+ return snapshot;
4257
4465
  }
4258
4466
  &nbsp;
4259
4467
  /** Assert that the provided event is one of the accepted types */
4260
- function <span class="fstat-no" title="function not covered" >isEvent&lt;T extends GroupMachineEvent["type"]&gt;(</span>
4468
+ function isEvent&lt;T extends GroupMachineEvent["type"]&gt;(
4261
4469
  event: GroupMachineEvent,
4262
4470
  eventType: T[]
4263
4471
  ): asserts event is EventForType&lt;T&gt; {
4264
- <span class="cstat-no" title="statement not covered" > invariant(</span>
4472
+ invariant(
4265
4473
  eventType.includes(event.type as T),
4266
4474
  `Invalid event type: ${eventType}. Expected: ${eventType.join(" | ")}`
4267
4475
  );
4268
4476
  }
4269
4477
  &nbsp;
4270
4478
  /** Determine if an item is a panel */
4271
- export function <span class="fstat-no" title="function not covered" >isPanelData(v</span>alue: unknown): value is PanelData {
4272
- <span class="cstat-no" title="statement not covered" > return Boolean(</span>
4479
+ export function isPanelData(value: unknown): value is PanelData {
4480
+ return Boolean(
4273
4481
  value &amp;&amp;
4274
4482
  typeof value === "object" &amp;&amp;
4275
4483
  "type" in value &amp;&amp;
@@ -4278,8 +4486,8 @@ export function <span class="fstat-no" title="function not covered" >isPanelData
4278
4486
  }
4279
4487
  &nbsp;
4280
4488
  /** Determine if an item is a panel handle */
4281
- export function <span class="fstat-no" title="function not covered" >isPanelHandle(v</span>alue: unknown): value is PanelHandleData {
4282
- <span class="cstat-no" title="statement not covered" > return Boolean(</span>
4489
+ export function isPanelHandle(value: unknown): value is PanelHandleData {
4490
+ return Boolean(
4283
4491
  value &amp;&amp;
4284
4492
  typeof value === "object" &amp;&amp;
4285
4493
  "type" in value &amp;&amp;
@@ -4294,23 +4502,24 @@ type OnResizeSize = {
4294
4502
  &nbsp;
4295
4503
  export type OnResizeCallback = (size: OnResizeSize) =&gt; void;
4296
4504
  &nbsp;
4297
- interface InitializePanelOptions {
4505
+ type InitializePanelOptions = {
4298
4506
  min?: Unit;
4299
4507
  max?: Unit;
4300
4508
  default?: Unit;
4301
- collapsible?: boolean;
4302
- collapsed?: boolean;
4303
4509
  collapsedSize?: Unit;
4304
- onCollapseChange?: {
4305
- current: ((isCollapsed: boolean) =&gt; void) | null | undefined;
4306
- };
4307
- onResize?: {
4308
- current: OnResizeCallback | null | undefined;
4309
- };
4310
- collapseAnimation?: PanelData["collapseAnimation"];
4311
- defaultCollapsed?: boolean;
4312
4510
  id?: string;
4313
- }
4511
+ } &amp; Partial&lt;
4512
+ Pick&lt;
4513
+ PanelData,
4514
+ | "isStaticAtRest"
4515
+ | "collapseAnimation"
4516
+ | "defaultCollapsed"
4517
+ | "onResize"
4518
+ | "collapsible"
4519
+ | "collapsed"
4520
+ | "onCollapseChange"
4521
+ &gt;
4522
+ &gt;;
4314
4523
  &nbsp;
4315
4524
  type InitializePanelOptionsWithId = InitializePanelOptions &amp; { id: string };
4316
4525
  &nbsp;
@@ -4318,29 +4527,29 @@ export function initializePanel(item: InitializePanelOptionsWithId): PanelData;
4318
4527
  export function initializePanel(
4319
4528
  item: InitializePanelOptions
4320
4529
  ): Omit&lt;PanelData, "id"&gt;;
4321
- export function <span class="fstat-no" title="function not covered" >initializePanel(</span>
4530
+ export function initializePanel(
4322
4531
  item: InitializePanelOptions | InitializePanelOptionsWithId
4323
4532
  ): PanelData | Omit&lt;PanelData, "id"&gt; {
4324
- const onResize = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >() =&gt; {</span></span>
4325
- let lastCall: OnResizeSize | null = <span class="cstat-no" title="statement not covered" >null;</span>
4533
+ const onResize = () =&gt; {
4534
+ let lastCall: OnResizeSize | null = null;
4326
4535
  &nbsp;
4327
4536
  // Memo-ize so we only call the callback once per size
4328
- <span class="cstat-no" title="statement not covered" > return (<span class="fstat-no" title="function not covered" >(s</span>ize) =&gt; {</span>
4329
- <span class="cstat-no" title="statement not covered" > if (</span>
4537
+ return ((size) =&gt; {
4538
+ if (
4330
4539
  !lastCall ||
4331
4540
  (lastCall.pixel === size.pixel &amp;&amp;
4332
4541
  lastCall.percentage === size.percentage)
4333
4542
  ) {
4334
- <span class="cstat-no" title="statement not covered" > lastCall = size;</span>
4335
- <span class="cstat-no" title="statement not covered" > return;</span>
4543
+ lastCall = size;
4544
+ return;
4336
4545
  }
4337
4546
  &nbsp;
4338
- <span class="cstat-no" title="statement not covered" > lastCall = size;</span>
4339
- <span class="cstat-no" title="statement not covered" > item.onResize?.current?.(size);</span>
4547
+ lastCall = size;
4548
+ item.onResize?.current?.(size);
4340
4549
  }) satisfies OnResizeCallback;
4341
4550
  };
4342
4551
  &nbsp;
4343
- const data = <span class="cstat-no" title="statement not covered" >{</span>
4552
+ const data = {
4344
4553
  type: "panel" as const,
4345
4554
  min: parseUnit(item.min || "0px"),
4346
4555
  max: item.max ? parseUnit(item.max) : "1fr",
@@ -4356,16 +4565,17 @@ export function <span class="fstat-no" title="function not covered" >initializeP
4356
4565
  id: item.id,
4357
4566
  collapseAnimation: item.collapseAnimation,
4358
4567
  default: item.default ? parseUnit(item.default) : undefined,
4568
+ isStaticAtRest: item.isStaticAtRest,
4359
4569
  } satisfies Omit&lt;PanelData, "id" | "currentValue"&gt; &amp; { id?: string };
4360
4570
  &nbsp;
4361
- <span class="cstat-no" title="statement not covered" > return { ...data, currentValue: makePixelUnit(-1) } satisfies Omit&lt;</span>
4571
+ return { ...data, currentValue: makePixelUnit(-1) } satisfies Omit&lt;
4362
4572
  PanelData,
4363
4573
  "id"
4364
4574
  &gt;;
4365
4575
  }
4366
4576
  &nbsp;
4367
- export function <span class="fstat-no" title="function not covered" >initializePanelHandleData(i</span>tem: InitializePanelHandleData) {
4368
- <span class="cstat-no" title="statement not covered" > return {</span>
4577
+ export function initializePanelHandleData(item: InitializePanelHandleData) {
4578
+ return {
4369
4579
  type: "handle" as const,
4370
4580
  ...item,
4371
4581
  size:
@@ -4376,209 +4586,209 @@ export function <span class="fstat-no" title="function not covered" >initializeP
4376
4586
  }
4377
4587
  &nbsp;
4378
4588
  /** Parse a `Unit` string or `clamp` value */
4379
- export function <span class="fstat-no" title="function not covered" >parseUnit(u</span>nit: Unit | "1fr"): ParsedUnit {
4380
- <span class="cstat-no" title="statement not covered" > if (unit === "1fr") {</span>
4381
- <span class="cstat-no" title="statement not covered" > unit = "100%";</span>
4589
+ export function parseUnit(unit: Unit | "1fr"): ParsedUnit {
4590
+ if (unit === "1fr") {
4591
+ unit = "100%";
4382
4592
  }
4383
4593
  &nbsp;
4384
- <span class="cstat-no" title="statement not covered" > if (unit.endsWith("px")) {</span>
4385
- <span class="cstat-no" title="statement not covered" > return makePixelUnit(parseFloat(unit));</span>
4594
+ if (unit.endsWith("px")) {
4595
+ return makePixelUnit(parseFloat(unit));
4386
4596
  }
4387
4597
  &nbsp;
4388
- <span class="cstat-no" title="statement not covered" > if (unit.endsWith("%")) {</span>
4389
- <span class="cstat-no" title="statement not covered" > return makePercentUnit(parseFloat(unit) / 100);</span>
4598
+ if (unit.endsWith("%")) {
4599
+ return makePercentUnit(parseFloat(unit) / 100);
4390
4600
  }
4391
4601
  &nbsp;
4392
- <span class="cstat-no" title="statement not covered" > throw new Error(`Invalid unit: ${unit}`);</span>
4602
+ throw new Error(`Invalid unit: ${unit}`);
4393
4603
  }
4394
4604
  &nbsp;
4395
4605
  /** Convert a `Unit` to a percentage of the group size */
4396
- export function <span class="fstat-no" title="function not covered" >getUnitPercentageValue(g</span>roupsSize: number, unit: ParsedUnit) {
4397
- <span class="cstat-no" title="statement not covered" > if (unit.type === "pixel") {</span>
4398
- <span class="cstat-no" title="statement not covered" > return groupsSize === 0 ? 0 : unit.value.div(groupsSize).toNumber();</span>
4606
+ export function getUnitPercentageValue(groupsSize: number, unit: ParsedUnit) {
4607
+ if (unit.type === "pixel") {
4608
+ return groupsSize === 0 ? 0 : unit.value.div(groupsSize).toNumber();
4399
4609
  }
4400
4610
  &nbsp;
4401
- <span class="cstat-no" title="statement not covered" > return unit.value.toNumber();</span>
4611
+ return unit.value.toNumber();
4402
4612
  }
4403
4613
  &nbsp;
4404
- export function <span class="fstat-no" title="function not covered" >getGroupSize(c</span>ontext: GroupMachineContextValue) {
4405
- <span class="cstat-no" title="statement not covered" > return context.orientation === "horizontal"</span>
4614
+ export function getGroupSize(context: GroupMachineContextValue) {
4615
+ return context.orientation === "horizontal"
4406
4616
  ? context.size.width
4407
4617
  : context.size.height;
4408
4618
  }
4409
4619
  &nbsp;
4410
4620
  /** Get the size of a panel in pixels */
4411
- function <span class="fstat-no" title="function not covered" >getUnitPixelValue(</span>
4621
+ function getUnitPixelValue(
4412
4622
  context: GroupMachineContextValue,
4413
4623
  unit: ParsedUnit | "1fr"
4414
4624
  ) {
4415
- const parsed = <span class="cstat-no" title="statement not covered" >unit === "1fr" ? parseUnit(unit) : unit;</span>
4416
- <span class="cstat-no" title="statement not covered" > return parsed.type === "pixel"</span>
4625
+ const parsed = unit === "1fr" ? parseUnit(unit) : unit;
4626
+ return parsed.type === "pixel"
4417
4627
  ? parsed.value
4418
4628
  : parsed.value.mul(getGroupSize(context));
4419
4629
  }
4420
4630
  &nbsp;
4421
4631
  /** Clamp a new `currentValue` given the panel's constraints. */
4422
- function <span class="fstat-no" title="function not covered" >clampUnit(</span>
4632
+ function clampUnit(
4423
4633
  context: GroupMachineContextValue,
4424
4634
  item: PanelData,
4425
4635
  value: Big.Big
4426
4636
  ) {
4427
- const min = <span class="cstat-no" title="statement not covered" >getUnitPixelValue(context, item.min);</span>
4428
- const max = <span class="cstat-no" title="statement not covered" >getUnitPixelValue(context, item.max);</span>
4637
+ const min = getUnitPixelValue(context, item.min);
4638
+ const max = getUnitPixelValue(context, item.max);
4429
4639
  &nbsp;
4430
- <span class="cstat-no" title="statement not covered" > if (value.gte(min) &amp;&amp; value.lte(max)) {</span>
4431
- <span class="cstat-no" title="statement not covered" > return value;</span>
4640
+ if (value.gte(min) &amp;&amp; value.lte(max)) {
4641
+ return value;
4432
4642
  }
4433
4643
  &nbsp;
4434
- <span class="cstat-no" title="statement not covered" > return value.lt(min) ? min : max;</span>
4644
+ return value.lt(min) ? min : max;
4435
4645
  }
4436
4646
  &nbsp;
4437
4647
  /** Get a panel with a particular ID. */
4438
- export function <span class="fstat-no" title="function not covered" >getPanelWithId(</span>
4648
+ export function getPanelWithId(
4439
4649
  context: GroupMachineContextValue,
4440
4650
  panelId: string
4441
4651
  ) {
4442
- const item = <span class="cstat-no" title="statement not covered" >context.items.find(<span class="fstat-no" title="function not covered" >(i</span>) =&gt; <span class="cstat-no" title="statement not covered" >i.id === panelId)</span>;</span>
4652
+ const item = context.items.find((i) =&gt; i.id === panelId);
4443
4653
  &nbsp;
4444
- <span class="cstat-no" title="statement not covered" > if (item &amp;&amp; isPanelData(item)) {</span>
4445
- <span class="cstat-no" title="statement not covered" > return item;</span>
4654
+ if (item &amp;&amp; isPanelData(item)) {
4655
+ return item;
4446
4656
  }
4447
4657
  &nbsp;
4448
- <span class="cstat-no" title="statement not covered" > throw new Error(`Expected panel with id: ${panelId}`);</span>
4658
+ throw new Error(`Expected panel with id: ${panelId}`);
4449
4659
  }
4450
4660
  &nbsp;
4451
4661
  /** Get a panel with a particular ID. */
4452
- function <span class="fstat-no" title="function not covered" >getPanelHandleIndex(</span>
4662
+ function getPanelHandleIndex(
4453
4663
  context: GroupMachineContextValue,
4454
4664
  handleId: string
4455
4665
  ) {
4456
- const item = <span class="cstat-no" title="statement not covered" >context.items.findIndex(<span class="fstat-no" title="function not covered" >(i</span>) =&gt; <span class="cstat-no" title="statement not covered" >i.id === handleId)</span>;</span>
4666
+ const item = context.items.findIndex((i) =&gt; i.id === handleId);
4457
4667
  &nbsp;
4458
- <span class="cstat-no" title="statement not covered" > if (item !== -1 &amp;&amp; isPanelHandle(context.items[item])) {</span>
4459
- <span class="cstat-no" title="statement not covered" > return item;</span>
4668
+ if (item !== -1 &amp;&amp; isPanelHandle(context.items[item])) {
4669
+ return item;
4460
4670
  }
4461
4671
  &nbsp;
4462
- <span class="cstat-no" title="statement not covered" > throw new Error(`Expected panel handle with id: ${handleId}`);</span>
4672
+ throw new Error(`Expected panel handle with id: ${handleId}`);
4463
4673
  }
4464
4674
  &nbsp;
4465
4675
  /**
4466
4676
  * Get the panel that's collapsible next to a resize handle.
4467
4677
  * Will first check the left panel then the right.
4468
4678
  */
4469
- export function <span class="fstat-no" title="function not covered" >getCollapsiblePanelForHandleId(</span>
4679
+ export function getCollapsiblePanelForHandleId(
4470
4680
  context: GroupMachineContextValue,
4471
4681
  handleId: string
4472
4682
  ) {
4473
- <span class="cstat-no" title="statement not covered" > if (!context.items.length) {</span>
4474
- <span class="cstat-no" title="statement not covered" > throw new Error("No items in group");</span>
4683
+ if (!context.items.length) {
4684
+ throw new Error("No items in group");
4475
4685
  }
4476
4686
  &nbsp;
4477
- const handleIndex = <span class="cstat-no" title="statement not covered" >getPanelHandleIndex(context, handleId);</span>
4478
- const panelBefore = <span class="cstat-no" title="statement not covered" >context.items[handleIndex - 1];</span>
4479
- const panelAfter = <span class="cstat-no" title="statement not covered" >context.items[handleIndex + 1];</span>
4687
+ const handleIndex = getPanelHandleIndex(context, handleId);
4688
+ const panelBefore = context.items[handleIndex - 1];
4689
+ const panelAfter = context.items[handleIndex + 1];
4480
4690
  &nbsp;
4481
- <span class="cstat-no" title="statement not covered" > if (panelBefore &amp;&amp; isPanelData(panelBefore) &amp;&amp; panelBefore.collapsible) {</span>
4482
- <span class="cstat-no" title="statement not covered" > return panelBefore;</span>
4691
+ if (panelBefore &amp;&amp; isPanelData(panelBefore) &amp;&amp; panelBefore.collapsible) {
4692
+ return panelBefore;
4483
4693
  }
4484
4694
  &nbsp;
4485
- <span class="cstat-no" title="statement not covered" > if (panelAfter &amp;&amp; isPanelData(panelAfter) &amp;&amp; panelAfter.collapsible) {</span>
4486
- <span class="cstat-no" title="statement not covered" > return panelAfter;</span>
4695
+ if (panelAfter &amp;&amp; isPanelData(panelAfter) &amp;&amp; panelAfter.collapsible) {
4696
+ return panelAfter;
4487
4697
  }
4488
4698
  &nbsp;
4489
- <span class="cstat-no" title="statement not covered" > throw new Error(`No collapsible panel found for handle: ${handleId}`);</span>
4699
+ throw new Error(`No collapsible panel found for handle: ${handleId}`);
4490
4700
  }
4491
4701
  &nbsp;
4492
4702
  /**
4493
4703
  * Get the handle closest to the target panel.
4494
4704
  * This is used to simulate collapse/expand
4495
4705
  */
4496
- function <span class="fstat-no" title="function not covered" >getHandleForPanelId(</span>
4706
+ function getHandleForPanelId(
4497
4707
  context: GroupMachineContextValue,
4498
4708
  panelId: string
4499
4709
  ) {
4500
- const panelIndex = <span class="cstat-no" title="statement not covered" >context.items.findIndex(<span class="fstat-no" title="function not covered" >(i</span>tem) =&gt; <span class="cstat-no" title="statement not covered" >item.id === panelId)</span>;</span>
4710
+ const panelIndex = context.items.findIndex((item) =&gt; item.id === panelId);
4501
4711
  &nbsp;
4502
- <span class="cstat-no" title="statement not covered" > invariant(panelIndex !== -1, `Expected panel before: ${panelId}`);</span>
4712
+ invariant(panelIndex !== -1, `Expected panel before: ${panelId}`);
4503
4713
  &nbsp;
4504
- let item = <span class="cstat-no" title="statement not covered" >context.items[panelIndex + 1];</span>
4714
+ let item = context.items[panelIndex + 1];
4505
4715
  &nbsp;
4506
- <span class="cstat-no" title="statement not covered" > if (item &amp;&amp; isPanelHandle(item)) {</span>
4507
- <span class="cstat-no" title="statement not covered" > return { item, direction: 1 as const };</span>
4716
+ if (item &amp;&amp; isPanelHandle(item)) {
4717
+ return { item, direction: 1 as const };
4508
4718
  }
4509
4719
  &nbsp;
4510
- <span class="cstat-no" title="statement not covered" > item = context.items[panelIndex - 1];</span>
4720
+ item = context.items[panelIndex - 1];
4511
4721
  &nbsp;
4512
- <span class="cstat-no" title="statement not covered" > if (item &amp;&amp; isPanelHandle(item)) {</span>
4513
- <span class="cstat-no" title="statement not covered" > return { item, direction: -1 as const };</span>
4722
+ if (item &amp;&amp; isPanelHandle(item)) {
4723
+ return { item, direction: -1 as const };
4514
4724
  }
4515
4725
  &nbsp;
4516
- <span class="cstat-no" title="statement not covered" > throw new Error(`Cant find handle for panel: ${panelId}`);</span>
4726
+ throw new Error(`Cant find handle for panel: ${panelId}`);
4517
4727
  }
4518
4728
  &nbsp;
4519
4729
  /** Given the specified order props and default order of the items, order the items */
4520
- function <span class="fstat-no" title="function not covered" >sortWithOrder(i</span>tems: Array&lt;Item&gt;) {
4521
- const defaultPlacement: Record&lt;string, number&gt; = <span class="cstat-no" title="statement not covered" >{};</span>
4522
- const takenPlacements = <span class="cstat-no" title="statement not covered" >items</span>
4523
- .map(<span class="fstat-no" title="function not covered" >(i</span>) =&gt; <span class="cstat-no" title="statement not covered" >i.order)</span>
4524
- .filter(<span class="fstat-no" title="function not covered" >(i</span>): i is number =&gt; <span class="cstat-no" title="statement not covered" >i !== undefined)</span>;
4730
+ function sortWithOrder(items: Array&lt;Item&gt;) {
4731
+ const defaultPlacement: Record&lt;string, number&gt; = {};
4732
+ const takenPlacements = items
4733
+ .map((i) =&gt; i.order)
4734
+ .filter((i): i is number =&gt; i !== undefined);
4525
4735
  &nbsp;
4526
- let defaultOrder = <span class="cstat-no" title="statement not covered" >0;</span>
4736
+ let defaultOrder = 0;
4527
4737
  &nbsp;
4528
4738
  // Generate default orders for items that don't have it
4529
- <span class="cstat-no" title="statement not covered" > for (const item of items) {</span>
4530
- <span class="cstat-no" title="statement not covered" > if (item.order === undefined) {</span>
4531
- <span class="cstat-no" title="statement not covered" > while (</span>
4739
+ for (const item of items) {
4740
+ if (item.order === undefined) {
4741
+ while (
4532
4742
  takenPlacements.includes(defaultOrder) ||
4533
4743
  Object.values(defaultPlacement).includes(defaultOrder)
4534
4744
  ) {
4535
- <span class="cstat-no" title="statement not covered" > defaultOrder++;</span>
4745
+ defaultOrder++;
4536
4746
  }
4537
4747
  &nbsp;
4538
- <span class="cstat-no" title="statement not covered" > defaultPlacement[item.id] = defaultOrder;</span>
4748
+ defaultPlacement[item.id] = defaultOrder;
4539
4749
  }
4540
4750
  }
4541
4751
  &nbsp;
4542
- const withoutOrder = <span class="cstat-no" title="statement not covered" >items.filter(<span class="fstat-no" title="function not covered" >(i</span>) =&gt; <span class="cstat-no" title="statement not covered" >i.order === undefined)</span>;</span>
4543
- const sortedWithOrder = <span class="cstat-no" title="statement not covered" >items</span>
4544
- .filter(<span class="fstat-no" title="function not covered" >(i</span>) =&gt; <span class="cstat-no" title="statement not covered" >i.order !== undefined)</span>
4545
- .sort(<span class="fstat-no" title="function not covered" >(a</span>, b) =&gt; <span class="cstat-no" title="statement not covered" >a.order! - b.order!)</span>;
4752
+ const withoutOrder = items.filter((i) =&gt; i.order === undefined);
4753
+ const sortedWithOrder = items
4754
+ .filter((i) =&gt; i.order !== undefined)
4755
+ .sort((a, b) =&gt; a.order! - b.order!);
4546
4756
  &nbsp;
4547
- <span class="cstat-no" title="statement not covered" > for (const item of sortedWithOrder) {</span>
4757
+ for (const item of sortedWithOrder) {
4548
4758
  // insert item at order index
4549
- <span class="cstat-no" title="statement not covered" > withoutOrder.splice(item.order!, 0, item);</span>
4759
+ withoutOrder.splice(item.order!, 0, item);
4550
4760
  }
4551
4761
  &nbsp;
4552
- <span class="cstat-no" title="statement not covered" > return withoutOrder;</span>
4762
+ return withoutOrder;
4553
4763
  }
4554
4764
  &nbsp;
4555
4765
  /** Check if the panel has space available to add to */
4556
- function <span class="fstat-no" title="function not covered" >panelHasSpace(</span>
4766
+ function panelHasSpace(
4557
4767
  context: GroupMachineContextValue,
4558
4768
  item: PanelData,
4559
4769
  adjustment: "add" | "subtract"
4560
4770
  ) {
4561
- <span class="cstat-no" title="statement not covered" > invariant(</span>
4771
+ invariant(
4562
4772
  item.currentValue.type === "pixel",
4563
4773
  `panelHasSpace only works with number values: ${item.id} ${item.currentValue}`
4564
4774
  );
4565
4775
  &nbsp;
4566
- <span class="cstat-no" title="statement not covered" > if (item.collapsible &amp;&amp; !item.collapsed) {</span>
4567
- <span class="cstat-no" title="statement not covered" > return true;</span>
4776
+ if (item.collapsible &amp;&amp; !item.collapsed) {
4777
+ return true;
4568
4778
  }
4569
4779
  &nbsp;
4570
- <span class="cstat-no" title="statement not covered" > if (adjustment === "add") {</span>
4571
- <span class="cstat-no" title="statement not covered" > return (</span>
4780
+ if (adjustment === "add") {
4781
+ return (
4572
4782
  item.currentValue.value.gte(getUnitPixelValue(context, item.min)) &amp;&amp;
4573
4783
  item.currentValue.value.lt(getUnitPixelValue(context, item.max))
4574
4784
  );
4575
4785
  }
4576
4786
  &nbsp;
4577
- <span class="cstat-no" title="statement not covered" > return item.currentValue.value.gt(getUnitPixelValue(context, item.min));</span>
4787
+ return item.currentValue.value.gt(getUnitPixelValue(context, item.min));
4578
4788
  }
4579
4789
  &nbsp;
4580
4790
  /** Search in a `direction` for a panel that still has space to expand. */
4581
- function <span class="fstat-no" title="function not covered" >findPanelWithSpace(</span>
4791
+ function findPanelWithSpace(
4582
4792
  context: GroupMachineContextValue,
4583
4793
  items: Array&lt;Item&gt;,
4584
4794
  start: number,
@@ -4587,119 +4797,132 @@ function <span class="fstat-no" title="function not covered" >findPanelWithSpace
4587
4797
  disregardCollapseBuffer?: boolean
4588
4798
  ) {
4589
4799
  const slice =
4590
- <span class="cstat-no" title="statement not covered" > direction === -1 ? items.slice(0, start + 1).reverse() : items.slice(start);</span>
4800
+ direction === -1 ? items.slice(0, start + 1).reverse() : items.slice(start);
4591
4801
  &nbsp;
4592
- <span class="cstat-no" title="statement not covered" > for (const panel of slice) {</span>
4593
- <span class="cstat-no" title="statement not covered" > if (!isPanelData(panel)) {</span>
4594
- <span class="cstat-no" title="statement not covered" > continue;</span>
4802
+ for (const panel of slice) {
4803
+ if (!isPanelData(panel)) {
4804
+ continue;
4595
4805
  }
4596
4806
  &nbsp;
4597
- const targetPanel = <span class="cstat-no" title="statement not covered" >disregardCollapseBuffer</span>
4807
+ const targetPanel = disregardCollapseBuffer
4598
4808
  ? createUnrestrainedPanel(context, panel)
4599
4809
  : panel;
4600
4810
  &nbsp;
4601
- <span class="cstat-no" title="statement not covered" > if (panelHasSpace(context, targetPanel, adjustment)) {</span>
4602
- <span class="cstat-no" title="statement not covered" > return panel;</span>
4811
+ if (panelHasSpace(context, targetPanel, adjustment)) {
4812
+ return panel;
4603
4813
  }
4604
4814
  }
4605
4815
  }
4606
4816
  &nbsp;
4607
4817
  /** Add up all the static values in the layout */
4608
- function <span class="fstat-no" title="function not covered" >getStaticWidth(c</span>ontext: GroupMachineContextValue) {
4609
- let width = <span class="cstat-no" title="statement not covered" >new Big(0);</span>
4610
- &nbsp;
4611
- <span class="cstat-no" title="statement not covered" > for (const item of context.items) {</span>
4612
- <span class="cstat-no" title="statement not covered" > if (isPanelHandle(item)) {</span>
4613
- <span class="cstat-no" title="statement not covered" > width = width.add(item.size.value);</span>
4614
- <span class="cstat-no" title="statement not covered" > } else if (</span>
4615
- isPanelData(item) &amp;&amp;
4616
- item.collapsed &amp;&amp;
4617
- item.currentValue.type === "pixel"
4618
- ) {
4619
- <span class="cstat-no" title="statement not covered" > width = width.add(item.currentValue.value);</span>
4818
+ function getStaticWidth(context: GroupMachineContextValue) {
4819
+ let width = new Big(0);
4820
+ &nbsp;
4821
+ for (const item of context.items) {
4822
+ if (isPanelHandle(item)) {
4823
+ width = width.add(item.size.value);
4824
+ } else if (item.collapsed &amp;&amp; item.currentValue.type === "pixel") {
4825
+ width = width.add(item.currentValue.value);
4826
+ } else if (item.isStaticAtRest) {
4827
+ width = width.add(item.currentValue.value);
4620
4828
  }
4621
4829
  }
4622
4830
  &nbsp;
4623
- <span class="cstat-no" title="statement not covered" > return width;</span>
4831
+ return width;
4624
4832
  }
4625
4833
  &nbsp;
4626
- function <span class="fstat-no" title="function not covered" >formatUnit(u</span>nit: ParsedUnit): Unit {
4627
- <span class="cstat-no" title="statement not covered" > if (unit.type === "pixel") {</span>
4628
- <span class="cstat-no" title="statement not covered" > return `${unit.value.toNumber()}px`;</span>
4834
+ function formatUnit(unit: ParsedUnit): Unit {
4835
+ if (unit.type === "pixel") {
4836
+ return `${unit.value.toNumber()}px`;
4629
4837
  }
4630
4838
  &nbsp;
4631
- <span class="cstat-no" title="statement not covered" > return `${unit.value.mul(100).toNumber()}%`;</span>
4839
+ return `${unit.value.mul(100).toNumber()}%`;
4632
4840
  }
4633
4841
  &nbsp;
4634
- export function <span class="fstat-no" title="function not covered" >getPanelGroupPixelSizes(c</span>ontext: GroupMachineContextValue) {
4635
- <span class="cstat-no" title="statement not covered" > return prepareItems(context).map(<span class="fstat-no" title="function not covered" >(i</span>) =&gt;</span>
4636
- <span class="cstat-no" title="statement not covered" > isPanelData(i)</span>
4842
+ export function getPanelGroupPixelSizes(context: GroupMachineContextValue) {
4843
+ return prepareItems(context).map((i) =&gt;
4844
+ isPanelData(i)
4637
4845
  ? i.currentValue.value.toNumber()
4638
4846
  : getUnitPixelValue(context, i.size).toNumber()
4639
4847
  );
4640
4848
  }
4641
4849
  &nbsp;
4642
- export function <span class="fstat-no" title="function not covered" >getPanelPixelSize(</span>
4850
+ export function getPanelPixelSize(
4643
4851
  context: GroupMachineContextValue,
4644
4852
  panelId: string
4645
4853
  ) {
4646
- const p = <span class="cstat-no" title="statement not covered" >getPanelWithId(</span>
4854
+ const p = getPanelWithId(
4647
4855
  { ...context, items: prepareItems(context) },
4648
4856
  panelId
4649
4857
  );
4650
4858
  &nbsp;
4651
- <span class="cstat-no" title="statement not covered" > return p.currentValue.value.toNumber();</span>
4859
+ return p.currentValue.value.toNumber();
4652
4860
  }
4653
4861
  &nbsp;
4654
- export function <span class="fstat-no" title="function not covered" >getPanelGroupPercentageSizes(</span>
4862
+ export function getPanelGroupPercentageSizes(
4655
4863
  context: GroupMachineContextValue
4656
4864
  ) {
4657
- const clamped = <span class="cstat-no" title="statement not covered" >commitLayout({</span>
4865
+ const clamped = commitLayout({
4658
4866
  ...context,
4659
4867
  items: prepareItems(context),
4660
4868
  });
4661
4869
  &nbsp;
4662
- <span class="cstat-no" title="statement not covered" > return clamped.map(<span class="fstat-no" title="function not covered" >(i</span>) =&gt; {</span>
4663
- <span class="cstat-no" title="statement not covered" > if (isPanelHandle(i)) {</span>
4664
- <span class="cstat-no" title="statement not covered" > return getUnitPercentageValue(getGroupSize(context), i.size);</span>
4870
+ return clamped.map((i) =&gt; {
4871
+ if (isPanelHandle(i)) {
4872
+ return getUnitPercentageValue(getGroupSize(context), i.size);
4665
4873
  }
4666
4874
  &nbsp;
4667
- <span class="cstat-no" title="statement not covered" > return getUnitPercentageValue(getGroupSize(context), i.currentValue);</span>
4875
+ return getUnitPercentageValue(getGroupSize(context), i.currentValue);
4668
4876
  });
4669
4877
  }
4670
4878
  &nbsp;
4671
- export function <span class="fstat-no" title="function not covered" >getPanelPercentageSize(</span>
4879
+ export function getPanelPercentageSize(
4672
4880
  context: GroupMachineContextValue,
4673
4881
  panelId: string
4674
4882
  ) {
4675
- const items = <span class="cstat-no" title="statement not covered" >prepareItems(context);</span>
4676
- const p = <span class="cstat-no" title="statement not covered" >getPanelWithId({ ...context, items }, panelId);</span>
4677
- <span class="cstat-no" title="statement not covered" > return getUnitPercentageValue(getGroupSize(context), p.currentValue);</span>
4883
+ const items = prepareItems(context);
4884
+ const p = getPanelWithId({ ...context, items }, panelId);
4885
+ return getUnitPercentageValue(getGroupSize(context), p.currentValue);
4678
4886
  }
4679
4887
  &nbsp;
4680
4888
  /** Build the grid template from the item values. */
4681
- export function <span class="fstat-no" title="function not covered" >buildTemplate(c</span>ontext: GroupMachineContextValue) {
4682
- const staticWidth = <span class="cstat-no" title="statement not covered" >getStaticWidth(context);</span>
4889
+ export function buildTemplate(context: GroupMachineContextValue) {
4890
+ const staticWidth = getStaticWidth(context);
4891
+ let hasSeenFillPanel = false;
4683
4892
  &nbsp;
4684
- <span class="cstat-no" title="statement not covered" > return context.items</span>
4685
- .map(<span class="fstat-no" title="function not covered" >(i</span>tem) =&gt; {
4686
- <span class="cstat-no" title="statement not covered" > if (item.type === "panel") {</span>
4687
- const min = <span class="cstat-no" title="statement not covered" >formatUnit(item.min);</span>
4893
+ return context.items
4894
+ .map((item) =&gt; {
4895
+ if (item.type === "panel") {
4896
+ const min = formatUnit(item.min);
4688
4897
  &nbsp;
4689
- <span class="cstat-no" title="statement not covered" > if (</span>
4898
+ if (
4690
4899
  item.currentValue.type === "pixel" &amp;&amp;
4691
4900
  item.currentValue.value.toNumber() !== -1
4692
4901
  ) {
4693
- <span class="cstat-no" title="statement not covered" > return formatUnit(item.currentValue);</span>
4694
- <span class="cstat-no" title="statement not covered" > } else if (item.currentValue.type === "percent") {</span>
4695
- const max = <span class="cstat-no" title="statement not covered" >item.max === "1fr" ? "100%" : formatUnit(item.max);</span>
4696
- <span class="cstat-no" title="statement not covered" > return `minmax(${min}, min(calc(${item.currentValue.value} * (100% - ${staticWidth}px)), ${max}))`;</span>
4697
- <span class="cstat-no" title="statement not covered" > } else if (item.collapsible &amp;&amp; item.collapsed) {</span>
4698
- <span class="cstat-no" title="statement not covered" > return formatUnit(item.collapsedSize);</span>
4699
- <span class="cstat-no" title="statement not covered" > } else if (item.default) {</span>
4700
- const siblingHasFill = <span class="cstat-no" title="statement not covered" >context.items.some(</span>
4701
- <span class="fstat-no" title="function not covered" > (i</span>) =&gt;
4702
- <span class="cstat-no" title="statement not covered" > isPanelData(i) &amp;&amp;</span>
4902
+ if (item.isStaticAtRest) {
4903
+ const max = item.max === "1fr" ? <span class="branch-0 cbranch-no" title="branch not covered" >"100%" : f</span>ormatUnit(item.max);
4904
+ return `clamp(${min}, ${formatUnit(item.currentValue)}, ${max})`;
4905
+ }
4906
+ &nbsp;
4907
+ return formatUnit(item.currentValue);
4908
+ } else if (item.currentValue.type === "percent") {
4909
+ if (
4910
+ !hasSeenFillPanel &amp;&amp;
4911
+ (item.max === "1fr" ||
4912
+ (item.max.type === "percent" &amp;&amp; item.max.value.eq(100)))
4913
+ ) {
4914
+ hasSeenFillPanel = true;
4915
+ return `minmax(${min}, 1fr)`;
4916
+ }
4917
+ &nbsp;
4918
+ const max = item.max === "1fr" ? "100%" : formatUnit(item.max);
4919
+ return `minmax(${min}, min(calc(${item.currentValue.value} * (100% - ${staticWidth}px)), ${max}))`;
4920
+ } else if (item.collapsible &amp;&amp; item.collapsed) {
4921
+ return formatUnit(item.collapsedSize);
4922
+ } else if (item.default) {
4923
+ const siblingHasFill = context.items.some(
4924
+ (i) =&gt;
4925
+ isPanelData(i) &amp;&amp;
4703
4926
  i.id !== item.id &amp;&amp;
4704
4927
  !i.collapsed &amp;&amp;
4705
4928
  (i.max === "1fr" ||
@@ -4708,42 +4931,42 @@ export function <span class="fstat-no" title="function not covered" >buildTempla
4708
4931
  &nbsp;
4709
4932
  // If a sibling has a fill, this item doesn't need to expand
4710
4933
  // So we can just use the default value
4711
- <span class="cstat-no" title="statement not covered" > if (siblingHasFill) {</span>
4712
- <span class="cstat-no" title="statement not covered" > return formatUnit(item.default);</span>
4934
+ if (siblingHasFill) {
4935
+ return formatUnit(item.default);
4713
4936
  }
4714
4937
  &nbsp;
4715
4938
  // Use 1fr so that panel fills ths space if needed
4716
- const max = <span class="cstat-no" title="statement not covered" >item.max === "1fr" ? "1fr" : formatUnit(item.max);</span>
4717
- <span class="cstat-no" title="statement not covered" > return `minmax(${formatUnit(item.default)}, ${max})`;</span>
4939
+ const max = item.max === "1fr" ? "1fr" : <span class="branch-1 cbranch-no" title="branch not covered" >formatUnit(item.max);</span>
4940
+ return `minmax(${formatUnit(item.default)}, ${max})`;
4718
4941
  } else {
4719
- const max = <span class="cstat-no" title="statement not covered" >item.max === "1fr" ? "1fr" : formatUnit(item.max);</span>
4720
- <span class="cstat-no" title="statement not covered" > return `minmax(${min}, ${max})`;</span>
4942
+ const max = item.max === "1fr" ? "1fr" : formatUnit(item.max);
4943
+ return `minmax(${min}, ${max})`;
4721
4944
  }
4722
4945
  }
4723
4946
  &nbsp;
4724
- <span class="cstat-no" title="statement not covered" > return formatUnit(item.size);</span>
4947
+ return formatUnit(item.size);
4725
4948
  })
4726
4949
  .join(" ");
4727
4950
  }
4728
4951
  &nbsp;
4729
- function <span class="fstat-no" title="function not covered" >addDeDuplicatedItems(i</span>tems: Array&lt;Item&gt;, newItem: Item) {
4730
- const currentItemIndex = <span class="cstat-no" title="statement not covered" >items.findIndex(</span>
4731
- <span class="fstat-no" title="function not covered" > (i</span>tem) =&gt;
4732
- <span class="cstat-no" title="statement not covered" > item.id === newItem.id ||</span>
4952
+ function addDeDuplicatedItems(items: Array&lt;Item&gt;, newItem: Item) {
4953
+ const currentItemIndex = items.findIndex(
4954
+ (item) =&gt;
4955
+ item.id === newItem.id ||
4733
4956
  (typeof item.order === "number" &amp;&amp; item.order === newItem.order)
4734
4957
  );
4735
4958
  &nbsp;
4736
- let restItems = <span class="cstat-no" title="statement not covered" >items;</span>
4959
+ let restItems = items;
4737
4960
  &nbsp;
4738
- <span class="cstat-no" title="statement not covered" > if (currentItemIndex !== -1) {</span>
4739
- <span class="cstat-no" title="statement not covered" > restItems = items.filter(<span class="fstat-no" title="function not covered" >(_</span>, index) =&gt; <span class="cstat-no" title="statement not covered" >index !== currentItemIndex)</span>;</span>
4961
+ if (currentItemIndex !== -1) {
4962
+ restItems = items.filter((_, index) =&gt; index !== currentItemIndex);
4740
4963
  }
4741
4964
  &nbsp;
4742
- <span class="cstat-no" title="statement not covered" > return sortWithOrder([...restItems, newItem]);</span>
4965
+ return sortWithOrder([...restItems, newItem]);
4743
4966
  }
4744
4967
  &nbsp;
4745
- function <span class="fstat-no" title="function not covered" >createUnrestrainedPanel(_</span>: GroupMachineContextValue, data: PanelData) {
4746
- <span class="cstat-no" title="statement not covered" > return {</span>
4968
+ function createUnrestrainedPanel(_: GroupMachineContextValue, data: PanelData) {
4969
+ return {
4747
4970
  ...data,
4748
4971
  min: makePixelUnit(-100000),
4749
4972
  max: makePixelUnit(100000),
@@ -4804,36 +5027,46 @@ function <span class="fstat-no" title="function not covered" >createUnrestrained
4804
5027
  */
4805
5028
  &nbsp;
4806
5029
  /** Converts the items to pixels */
4807
- export function <span class="fstat-no" title="function not covered" >prepareItems(c</span>ontext: GroupMachineContextValue): Item[] {
4808
- const staticWidth = <span class="cstat-no" title="statement not covered" >getStaticWidth(context);</span>
4809
- const newItems = <span class="cstat-no" title="statement not covered" >[];</span>
4810
- &nbsp;
4811
- <span class="cstat-no" title="statement not covered" > for (const item of context.items) {</span>
4812
- <span class="cstat-no" title="statement not covered" > if (!item || !isPanelData(item)) {</span>
4813
- <span class="cstat-no" title="statement not covered" > newItems.push({ ...item });</span>
4814
- <span class="cstat-no" title="statement not covered" > continue;</span>
5030
+ export function prepareItems(context: GroupMachineContextValue): Item[] {
5031
+ const staticWidth = getStaticWidth(context);
5032
+ const newItems = [];
5033
+ &nbsp;
5034
+ for (const item of context.items) {
5035
+ if (!item || !isPanelData(item)) {
5036
+ newItems.push({ ...item });
5037
+ continue;
4815
5038
  }
4816
5039
  &nbsp;
4817
- <span class="cstat-no" title="statement not covered" > if (item.currentValue.type === "pixel") {</span>
4818
- <span class="cstat-no" title="statement not covered" > newItems.push({ ...item });</span>
4819
- <span class="cstat-no" title="statement not covered" > continue;</span>
5040
+ if (item.lastKnownSize) {
5041
+ const lastSize = makePixelUnit(
5042
+ context.orientation === "horizontal"
5043
+ ? item.lastKnownSize.width
5044
+ : item.lastKnownSize.height
5045
+ );
5046
+ newItems.push({ ...item, currentValue: lastSize });
5047
+ continue;
5048
+ }
5049
+ &nbsp;
5050
+ if (item.currentValue.type === "pixel") {
5051
+ newItems.push({ ...item });
5052
+ continue;
4820
5053
  }
4821
5054
  &nbsp;
4822
- const pixel = <span class="cstat-no" title="statement not covered" >new Big(getGroupSize(context))</span>
5055
+ const pixel = new Big(getGroupSize(context))
4823
5056
  .minus(staticWidth)
4824
5057
  .mul(item.currentValue.value);
4825
5058
  &nbsp;
4826
- <span class="cstat-no" title="statement not covered" > newItems.push({</span>
5059
+ newItems.push({
4827
5060
  ...item,
4828
5061
  currentValue: makePixelUnit(pixel.toNumber()),
4829
5062
  });
4830
5063
  }
4831
5064
  &nbsp;
4832
- <span class="cstat-no" title="statement not covered" > return newItems;</span>
5065
+ return newItems;
4833
5066
  }
4834
5067
  &nbsp;
4835
5068
  /** On every mouse move we distribute the space added */
4836
- function <span class="fstat-no" title="function not covered" >updateLayout(</span>
5069
+ function updateLayout(
4837
5070
  context: GroupMachineContextValue,
4838
5071
  dragEvent:
4839
5072
  | (DragHandleEvent &amp; {
@@ -4848,27 +5081,27 @@ function <span class="fstat-no" title="function not covered" >updateLayout(</spa
4848
5081
  disregardCollapseBuffer?: boolean;
4849
5082
  }
4850
5083
  ): Partial&lt;GroupMachineContextValue&gt; {
4851
- const handleIndex = <span class="cstat-no" title="statement not covered" >getPanelHandleIndex(context, dragEvent.handleId);</span>
4852
- const handle = <span class="cstat-no" title="statement not covered" >context.items[handleIndex] as PanelHandleData;</span>
4853
- const newItems = <span class="cstat-no" title="statement not covered" >[...context.items];</span>
5084
+ const handleIndex = getPanelHandleIndex(context, dragEvent.handleId);
5085
+ const handle = context.items[handleIndex] as PanelHandleData;
5086
+ const newItems = [...context.items];
4854
5087
  &nbsp;
4855
5088
  let moveAmount =
4856
- <span class="cstat-no" title="statement not covered" > context.orientation === "horizontal"</span>
5089
+ context.orientation === "horizontal"
4857
5090
  ? dragEvent.value.deltaX
4858
5091
  : dragEvent.value.deltaY;
4859
5092
  &nbsp;
4860
- <span class="cstat-no" title="statement not covered" > if (dragEvent.value.shiftKey) {</span>
4861
- <span class="cstat-no" title="statement not covered" > moveAmount *= 15;</span>
5093
+ if (dragEvent.value.shiftKey) {
5094
+ moveAmount *= 15;
4862
5095
  }
4863
5096
  &nbsp;
4864
- <span class="cstat-no" title="statement not covered" > if (moveAmount === 0) {</span>
4865
- <span class="cstat-no" title="statement not covered" > return {};</span>
5097
+ if (moveAmount === 0) {
5098
+ return {};
4866
5099
  }
4867
5100
  &nbsp;
4868
- const moveDirection = <span class="cstat-no" title="statement not covered" >moveAmount / Math.abs(moveAmount);</span>
5101
+ const moveDirection = moveAmount / Math.abs(moveAmount);
4869
5102
  &nbsp;
4870
5103
  // Go forward into the shrinking panels to find a panel that still has space.
4871
- const panelBefore = <span class="cstat-no" title="statement not covered" >findPanelWithSpace(</span>
5104
+ const panelBefore = findPanelWithSpace(
4872
5105
  context,
4873
5106
  newItems,
4874
5107
  handleIndex + moveDirection,
@@ -4878,122 +5111,126 @@ function <span class="fstat-no" title="function not covered" >updateLayout(</spa
4878
5111
  );
4879
5112
  &nbsp;
4880
5113
  // No panel with space, just record the drag overshoot
4881
- <span class="cstat-no" title="statement not covered" > if (!panelBefore) {</span>
4882
- <span class="cstat-no" title="statement not covered" > return {</span>
5114
+ if (!panelBefore) {
5115
+ return {
4883
5116
  dragOvershoot: context.dragOvershoot.add(moveAmount),
4884
5117
  };
4885
5118
  }
4886
5119
  &nbsp;
4887
- <span class="cstat-no" title="statement not covered" > invariant(isPanelData(panelBefore), `Expected panel before: ${handle.id}`);</span>
5120
+ invariant(isPanelData(panelBefore), `Expected panel before: ${handle.id}`);
4888
5121
  &nbsp;
4889
- const panelAfter = <span class="cstat-no" title="statement not covered" >newItems[handleIndex - moveDirection];</span>
5122
+ const panelAfter = newItems[handleIndex - moveDirection];
4890
5123
  &nbsp;
4891
- <span class="cstat-no" title="statement not covered" > invariant(</span>
5124
+ invariant(
4892
5125
  panelAfter &amp;&amp; isPanelData(panelAfter),
4893
5126
  `Expected panel after: ${handle.id}`
4894
5127
  );
4895
5128
  &nbsp;
4896
- <span class="cstat-no" title="statement not covered" > if (</span>
5129
+ if (
4897
5130
  panelAfter.currentValue.value.eq(getUnitPixelValue(context, panelAfter.max))
4898
5131
  ) {
4899
- <span class="cstat-no" title="statement not covered" > return {</span>
5132
+ return {
4900
5133
  dragOvershoot: context.dragOvershoot.add(moveAmount),
4901
5134
  };
4902
5135
  }
4903
5136
  &nbsp;
4904
- const newDragOvershoot = <span class="cstat-no" title="statement not covered" >context.dragOvershoot.add(moveAmount);</span>
5137
+ const newDragOvershoot = context.dragOvershoot.add(moveAmount);
4905
5138
  &nbsp;
4906
5139
  // Don't let the panel expand until the threshold is reached
4907
- <span class="cstat-no" title="statement not covered" > if (!dragEvent.disregardCollapseBuffer) {</span>
4908
- const isInLeftBuffer = <span class="cstat-no" title="statement not covered" >newDragOvershoot.lt(0) &amp;&amp; moveDirection &gt; 0;</span>
4909
- const isInLeftOvershoot = <span class="cstat-no" title="statement not covered" >newDragOvershoot.gt(0) &amp;&amp; moveDirection &gt; 0;</span>
4910
- const isInRightBuffer = <span class="cstat-no" title="statement not covered" >newDragOvershoot.gt(0) &amp;&amp; moveDirection &lt; 0;</span>
4911
- const isInRightOvershoot = <span class="cstat-no" title="statement not covered" >newDragOvershoot.lt(0) &amp;&amp; moveDirection &lt; 0;</span>
4912
- const potentialNewValue = <span class="cstat-no" title="statement not covered" >panelAfter.currentValue.value.add(</span>
5140
+ if (!dragEvent.disregardCollapseBuffer) {
5141
+ const isInLeftBuffer = newDragOvershoot.lt(0) &amp;&amp; moveDirection &gt; 0;
5142
+ const isInLeftOvershoot = newDragOvershoot.gt(0) &amp;&amp; moveDirection &gt; 0;
5143
+ const isInRightBuffer = newDragOvershoot.gt(0) &amp;&amp; moveDirection &lt; 0;
5144
+ const isInRightOvershoot = newDragOvershoot.lt(0) &amp;&amp; moveDirection &lt; 0;
5145
+ const potentialNewValue = panelAfter.currentValue.value.add(
4913
5146
  new Big(newDragOvershoot).mul(isInRightBuffer ? moveDirection : 1)
4914
5147
  );
4915
- const min = <span class="cstat-no" title="statement not covered" >getUnitPixelValue(context, panelAfter.min);</span>
5148
+ const min = getUnitPixelValue(context, panelAfter.min);
4916
5149
  &nbsp;
4917
5150
  const isInDragBugger =
4918
- <span class="cstat-no" title="statement not covered" > newDragOvershoot.abs().lt(COLLAPSE_THRESHOLD) &amp;&amp;</span>
5151
+ newDragOvershoot.abs().lt(COLLAPSE_THRESHOLD) &amp;&amp;
5152
+ // Let the panel expand at it's min size
5153
+ !panelAfter.currentValue.value
5154
+ .add(newDragOvershoot.abs())
5155
+ .gte(panelAfter.min.value) &amp;&amp;
4919
5156
  panelAfter.collapsible &amp;&amp;
4920
5157
  panelAfter.collapsed &amp;&amp;
4921
5158
  (isInLeftOvershoot || isInRightOvershoot);
4922
5159
  &nbsp;
4923
- <span class="cstat-no" title="statement not covered" > if (</span>
5160
+ if (
4924
5161
  potentialNewValue.lte(min) &amp;&amp;
4925
5162
  (newDragOvershoot.eq(0) ||
4926
5163
  isInRightBuffer ||
4927
5164
  isInLeftBuffer ||
4928
5165
  isInDragBugger)
4929
5166
  ) {
4930
- <span class="cstat-no" title="statement not covered" > return { dragOvershoot: newDragOvershoot };</span>
5167
+ return { dragOvershoot: newDragOvershoot };
4931
5168
  }
4932
5169
  }
4933
5170
  &nbsp;
4934
5171
  // Don't let the panel collapse until the threshold is reached
4935
- <span class="cstat-no" title="statement not covered" > if (</span>
5172
+ if (
4936
5173
  !dragEvent.disregardCollapseBuffer &amp;&amp;
4937
5174
  panelBefore.collapsible &amp;&amp;
4938
5175
  panelBefore.currentValue.value.eq(
4939
5176
  getUnitPixelValue(context, panelBefore.min)
4940
5177
  )
4941
5178
  ) {
4942
- const potentialNewValue = <span class="cstat-no" title="statement not covered" >panelBefore.currentValue.value.sub(</span>
5179
+ const potentialNewValue = panelBefore.currentValue.value.sub(
4943
5180
  newDragOvershoot.abs()
4944
5181
  );
4945
5182
  &nbsp;
4946
- <span class="cstat-no" title="statement not covered" > if (</span>
5183
+ if (
4947
5184
  newDragOvershoot.abs().lt(COLLAPSE_THRESHOLD) &amp;&amp;
4948
5185
  potentialNewValue.gt(
4949
5186
  getUnitPixelValue(context, panelBefore.collapsedSize)
4950
5187
  )
4951
5188
  ) {
4952
- <span class="cstat-no" title="statement not covered" > return { dragOvershoot: newDragOvershoot };</span>
5189
+ return { dragOvershoot: newDragOvershoot };
4953
5190
  }
4954
5191
  }
4955
5192
  &nbsp;
4956
5193
  // Apply the move amount to the panel before the slider
4957
- const unrestrainedPanelBefore = <span class="cstat-no" title="statement not covered" >createUnrestrainedPanel(context, panelBefore);</span>
4958
- const panelBeforePreviousValue = <span class="cstat-no" title="statement not covered" >panelBefore.currentValue.value;</span>
4959
- const panelBeforeNewValueRaw = <span class="cstat-no" title="statement not covered" >panelBefore.currentValue.value.minus(</span>
5194
+ const unrestrainedPanelBefore = createUnrestrainedPanel(context, panelBefore);
5195
+ const panelBeforePreviousValue = panelBefore.currentValue.value;
5196
+ const panelBeforeNewValueRaw = panelBefore.currentValue.value.minus(
4960
5197
  new Big(moveAmount).mul(moveDirection)
4961
5198
  );
4962
- let panelBeforeNewValue = <span class="cstat-no" title="statement not covered" >dragEvent.disregardCollapseBuffer</span>
5199
+ let panelBeforeNewValue = dragEvent.disregardCollapseBuffer
4963
5200
  ? clampUnit(context, unrestrainedPanelBefore, panelBeforeNewValueRaw)
4964
5201
  : clampUnit(context, panelBefore, panelBeforeNewValueRaw);
4965
5202
  &nbsp;
4966
5203
  // Also apply the move amount the panel after the slider
4967
- const unrestrainedPanelAfter = <span class="cstat-no" title="statement not covered" >createUnrestrainedPanel(context, panelAfter);</span>
4968
- const panelAfterPreviousValue = <span class="cstat-no" title="statement not covered" >panelAfter.currentValue.value;</span>
4969
- const applied = <span class="cstat-no" title="statement not covered" >panelBeforePreviousValue.minus(panelBeforeNewValue);</span>
4970
- const panelAfterNewValueRaw = <span class="cstat-no" title="statement not covered" >panelAfter.currentValue.value.add(applied);</span>
4971
- let panelAfterNewValue = <span class="cstat-no" title="statement not covered" >dragEvent.disregardCollapseBuffer</span>
5204
+ const unrestrainedPanelAfter = createUnrestrainedPanel(context, panelAfter);
5205
+ const panelAfterPreviousValue = panelAfter.currentValue.value;
5206
+ const applied = panelBeforePreviousValue.minus(panelBeforeNewValue);
5207
+ const panelAfterNewValueRaw = panelAfter.currentValue.value.add(applied);
5208
+ let panelAfterNewValue = dragEvent.disregardCollapseBuffer
4972
5209
  ? clampUnit(context, unrestrainedPanelAfter, panelAfterNewValueRaw)
4973
5210
  : clampUnit(context, panelAfter, panelAfterNewValueRaw);
4974
5211
  &nbsp;
4975
- <span class="cstat-no" title="statement not covered" > if (dragEvent.disregardCollapseBuffer) {</span>
4976
- <span class="cstat-no" title="statement not covered" > if (panelAfter.collapsible &amp;&amp; panelAfter.collapsed) {</span>
4977
- <span class="cstat-no" title="statement not covered" > panelAfter.collapsed = false;</span>
5212
+ if (dragEvent.disregardCollapseBuffer) {
5213
+ if (panelAfter.collapsible &amp;&amp; panelAfter.collapsed) {
5214
+ panelAfter.collapsed = false;
4978
5215
  }
4979
- <span class="cstat-no" title="statement not covered" > }</span>
5216
+ }
4980
5217
  // If the panel was collapsed, expand it
4981
5218
  // We need to re-apply the move amount since the the expansion of the
4982
5219
  // collapsed panel disregards that.
4983
5220
  else if (panelAfter.collapsible &amp;&amp; panelAfter.collapsed) {
4984
- <span class="cstat-no" title="statement not covered" > if (</span>
5221
+ if (
4985
5222
  panelAfter.onCollapseChange?.current &amp;&amp;
4986
5223
  panelAfter.collapseIsControlled &amp;&amp;
4987
5224
  !dragEvent.controlled
4988
5225
  ) {
4989
- <span class="cstat-no" title="statement not covered" > panelAfter.onCollapseChange.current(false);</span>
4990
- <span class="cstat-no" title="statement not covered" > return { dragOvershoot: newDragOvershoot };</span>
5226
+ panelAfter.onCollapseChange.current(false);
5227
+ return { dragOvershoot: newDragOvershoot };
4991
5228
  }
4992
5229
  &nbsp;
4993
5230
  // Calculate the amount "extra" after the minSize the panel should grow
4994
5231
  const extra =
4995
5232
  // Take the size it was at
4996
- <span class="cstat-no" title="statement not covered" > getUnitPixelValue(context, panelAfter.collapsedSize)</span>
5233
+ getUnitPixelValue(context, panelAfter.collapsedSize)
4997
5234
  // Add in the full overshoot so the cursor is near the slider
4998
5235
  .add(context.dragOvershoot.abs())
4999
5236
  // Subtract the min size of the panel
@@ -5003,11 +5240,11 @@ function <span class="fstat-no" title="function not covered" >updateLayout(</spa
5003
5240
  .add(Math.abs(moveAmount))
5004
5241
  );
5005
5242
  &nbsp;
5006
- <span class="cstat-no" title="statement not covered" > if (extra.gt(0)) {</span>
5007
- <span class="cstat-no" title="statement not covered" > panelAfterNewValue = panelAfterNewValue.add(extra);</span>
5243
+ if (extra.gt(0)) {
5244
+ panelAfterNewValue = panelAfterNewValue.add(extra);
5008
5245
  }
5009
5246
  &nbsp;
5010
- <span class="cstat-no" title="statement not covered" > panelBeforeNewValue = panelBeforeNewValue</span>
5247
+ panelBeforeNewValue = panelBeforeNewValue
5011
5248
  // Subtract the delta of the after panel's size
5012
5249
  .minus(
5013
5250
  panelAfterNewValue
@@ -5016,105 +5253,105 @@ function <span class="fstat-no" title="function not covered" >updateLayout(</spa
5016
5253
  .minus(Math.abs(moveAmount))
5017
5254
  );
5018
5255
  &nbsp;
5019
- <span class="cstat-no" title="statement not covered" > if (panelBeforeNewValue.lt(panelBefore.min.value)) {</span>
5256
+ if (panelBeforeNewValue.lt(panelBefore.min.value)) {
5020
5257
  // TODO this should probably distribute the space between the panels?
5021
- <span class="cstat-no" title="statement not covered" > return { dragOvershoot: newDragOvershoot };</span>
5258
+ return { dragOvershoot: newDragOvershoot };
5022
5259
  }
5023
5260
  &nbsp;
5024
- <span class="cstat-no" title="statement not covered" > panelAfter.collapsed = false;</span>
5261
+ panelAfter.collapsed = false;
5025
5262
  &nbsp;
5026
- <span class="cstat-no" title="statement not covered" > if (</span>
5263
+ if (
5027
5264
  panelAfter.onCollapseChange?.current &amp;&amp;
5028
5265
  !panelAfter.collapseIsControlled &amp;&amp;
5029
5266
  !dragEvent.controlled
5030
5267
  ) {
5031
- <span class="cstat-no" title="statement not covered" > panelAfter.onCollapseChange.current(false);</span>
5268
+ panelAfter.onCollapseChange.current(false);
5032
5269
  }
5033
5270
  }
5034
5271
  &nbsp;
5035
- const panelBeforeIsAboutToCollapse = <span class="cstat-no" title="statement not covered" >panelBefore.currentValue.value.eq(</span>
5272
+ const panelBeforeIsAboutToCollapse = panelBefore.currentValue.value.eq(
5036
5273
  getUnitPixelValue(context, panelBefore.min)
5037
5274
  );
5038
5275
  &nbsp;
5039
5276
  // If the panel was expanded and now is at it's min size, collapse it
5040
- <span class="cstat-no" title="statement not covered" > if (</span>
5277
+ if (
5041
5278
  !dragEvent.disregardCollapseBuffer &amp;&amp;
5042
5279
  panelBefore.collapsible &amp;&amp;
5043
5280
  panelBeforeIsAboutToCollapse
5044
5281
  ) {
5045
- <span class="cstat-no" title="statement not covered" > if (</span>
5282
+ if (
5046
5283
  panelBefore.onCollapseChange?.current &amp;&amp;
5047
5284
  panelBefore.collapseIsControlled &amp;&amp;
5048
5285
  !dragEvent.controlled
5049
5286
  ) {
5050
- <span class="cstat-no" title="statement not covered" > panelBefore.onCollapseChange.current(true);</span>
5051
- <span class="cstat-no" title="statement not covered" > return { dragOvershoot: newDragOvershoot };</span>
5287
+ panelBefore.onCollapseChange.current(true);
5288
+ return { dragOvershoot: newDragOvershoot };
5052
5289
  }
5053
5290
  &nbsp;
5054
5291
  // Make it collapsed
5055
- <span class="cstat-no" title="statement not covered" > panelBefore.collapsed = true;</span>
5056
- <span class="cstat-no" title="statement not covered" > panelBeforeNewValue = getUnitPixelValue(context, panelBefore.collapsedSize);</span>
5292
+ panelBefore.collapsed = true;
5293
+ panelBeforeNewValue = getUnitPixelValue(context, panelBefore.collapsedSize);
5057
5294
  // Add the extra space created to the before panel
5058
- <span class="cstat-no" title="statement not covered" > panelAfterNewValue = panelAfterNewValue.add(</span>
5295
+ panelAfterNewValue = panelAfterNewValue.add(
5059
5296
  panelBeforePreviousValue.minus(panelBeforeNewValue)
5060
5297
  );
5061
5298
  &nbsp;
5062
- <span class="cstat-no" title="statement not covered" > if (</span>
5299
+ if (
5063
5300
  panelBefore.onCollapseChange?.current &amp;&amp;
5064
5301
  !panelBefore.collapseIsControlled &amp;&amp;
5065
5302
  !dragEvent.controlled
5066
5303
  ) {
5067
- <span class="cstat-no" title="statement not covered" > panelBefore.onCollapseChange.current(true);</span>
5304
+ panelBefore.onCollapseChange.current(true);
5068
5305
  }
5069
5306
  }
5070
5307
  &nbsp;
5071
- <span class="cstat-no" title="statement not covered" > panelBefore.currentValue = { type: "pixel", value: panelBeforeNewValue };</span>
5072
- <span class="cstat-no" title="statement not covered" > panelAfter.currentValue = { type: "pixel", value: panelAfterNewValue };</span>
5308
+ panelBefore.currentValue = { type: "pixel", value: panelBeforeNewValue };
5309
+ panelAfter.currentValue = { type: "pixel", value: panelAfterNewValue };
5073
5310
  &nbsp;
5074
- const leftoverSpace = <span class="cstat-no" title="statement not covered" >new Big(getGroupSize(context)).minus(</span>
5311
+ const leftoverSpace = new Big(getGroupSize(context)).minus(
5075
5312
  newItems.reduce(
5076
- <span class="fstat-no" title="function not covered" > (a</span>cc, b) =&gt; <span class="cstat-no" title="statement not covered" >acc.add(isPanelData(b) ? b.currentValue.value : b.size.value),</span>
5313
+ (acc, b) =&gt; acc.add(isPanelData(b) ? b.currentValue.value : b.size.value),
5077
5314
  new Big(0)
5078
5315
  )
5079
5316
  );
5080
5317
  &nbsp;
5081
- <span class="cstat-no" title="statement not covered" > if (!leftoverSpace.eq(0)) {</span>
5082
- <span class="cstat-no" title="statement not covered" > panelBefore.currentValue.value = clampUnit(</span>
5318
+ if (!leftoverSpace.eq(0)) {
5319
+ panelBefore.currentValue.value = clampUnit(
5083
5320
  context,
5084
5321
  panelBefore,
5085
5322
  panelBefore.currentValue.value.add(leftoverSpace)
5086
5323
  );
5087
5324
  }
5088
5325
  &nbsp;
5089
- <span class="cstat-no" title="statement not covered" > return { items: newItems };</span>
5326
+ return { items: newItems };
5090
5327
  }
5091
5328
  &nbsp;
5092
5329
  /** Converts the items to percentages */
5093
- function <span class="fstat-no" title="function not covered" >commitLayout(c</span>ontext: GroupMachineContextValue) {
5094
- const newItems = <span class="cstat-no" title="statement not covered" >[...context.items];</span>
5330
+ function commitLayout(context: GroupMachineContextValue) {
5331
+ const newItems = [...context.items];
5095
5332
  &nbsp;
5096
5333
  // First set all the static width
5097
- <span class="cstat-no" title="statement not covered" > newItems.forEach(<span class="fstat-no" title="function not covered" >(i</span>tem, index) =&gt; {</span>
5098
- <span class="cstat-no" title="statement not covered" > if (item.type !== "panel") {</span>
5099
- <span class="cstat-no" title="statement not covered" > return;</span>
5334
+ newItems.forEach((item, index) =&gt; {
5335
+ if (item.type !== "panel") {
5336
+ return;
5100
5337
  }
5101
5338
  &nbsp;
5102
- <span class="cstat-no" title="statement not covered" > if (item.collapsed) {</span>
5103
- <span class="cstat-no" title="statement not covered" > newItems[index] = {</span>
5339
+ if (item.collapsed) {
5340
+ newItems[index] = {
5104
5341
  ...item,
5105
5342
  currentValue: item.collapsedSize,
5106
5343
  };
5107
5344
  }
5108
5345
  });
5109
5346
  &nbsp;
5110
- const staticWidth = <span class="cstat-no" title="statement not covered" >getStaticWidth({ ...context, items: newItems });</span>
5347
+ const staticWidth = getStaticWidth({ ...context, items: newItems });
5111
5348
  &nbsp;
5112
- <span class="cstat-no" title="statement not covered" > newItems.forEach(<span class="fstat-no" title="function not covered" >(i</span>tem, index) =&gt; {</span>
5113
- <span class="cstat-no" title="statement not covered" > if (item.type !== "panel" || item.collapsed) {</span>
5114
- <span class="cstat-no" title="statement not covered" > return;</span>
5349
+ newItems.forEach((item, index) =&gt; {
5350
+ if (item.type !== "panel" || item.collapsed || item.isStaticAtRest) {
5351
+ return;
5115
5352
  }
5116
5353
  &nbsp;
5117
- <span class="cstat-no" title="statement not covered" > newItems[index] = {</span>
5354
+ newItems[index] = {
5118
5355
  ...item,
5119
5356
  currentValue: {
5120
5357
  type: "percent",
@@ -5125,19 +5362,19 @@ function <span class="fstat-no" title="function not covered" >commitLayout(c</sp
5125
5362
  };
5126
5363
  });
5127
5364
  &nbsp;
5128
- <span class="cstat-no" title="statement not covered" > return newItems;</span>
5365
+ return newItems;
5129
5366
  }
5130
5367
  &nbsp;
5131
- export function <span class="fstat-no" title="function not covered" >dragHandlePayload({</span>
5368
+ export function dragHandlePayload({
5132
5369
  delta,
5133
- orientation = <span class="branch-0 cbranch-no" title="branch not covered" >"horizontal",</span>
5134
- shiftKey = <span class="branch-0 cbranch-no" title="branch not covered" >false,</span>
5370
+ orientation = "horizontal",
5371
+ shiftKey = false,
5135
5372
  }: {
5136
5373
  delta: number;
5137
5374
  orientation?: Orientation;
5138
5375
  shiftKey?: boolean;
5139
5376
  }) {
5140
- <span class="cstat-no" title="statement not covered" > return {</span>
5377
+ return {
5141
5378
  type: "move",
5142
5379
  pointerType: "keyboard",
5143
5380
  shiftKey,
@@ -5150,7 +5387,7 @@ export function <span class="fstat-no" title="function not covered" >dragHandleP
5150
5387
  }
5151
5388
  &nbsp;
5152
5389
  /** Iteratively applies a large delta value simulating a user's drag */
5153
- function <span class="fstat-no" title="function not covered" >iterativelyUpdateLayout({</span>
5390
+ function iterativelyUpdateLayout({
5154
5391
  context,
5155
5392
  handleId,
5156
5393
  delta,
@@ -5165,10 +5402,10 @@ function <span class="fstat-no" title="function not covered" >iterativelyUpdateL
5165
5402
  controlled?: boolean;
5166
5403
  disregardCollapseBuffer?: boolean;
5167
5404
  }) {
5168
- let newContext: Partial&lt;GroupMachineContextValue&gt; = <span class="cstat-no" title="statement not covered" >context;</span>
5405
+ let newContext: Partial&lt;GroupMachineContextValue&gt; = context;
5169
5406
  &nbsp;
5170
- <span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >0; i</span> &lt; delta.abs().toNumber(); i++) {</span>
5171
- <span class="cstat-no" title="statement not covered" > newContext = updateLayout(</span>
5407
+ for (let i = 0; i &lt; delta.abs().toNumber(); i++) {
5408
+ newContext = updateLayout(
5172
5409
  {
5173
5410
  ...context,
5174
5411
  ...newContext,
@@ -5186,23 +5423,23 @@ function <span class="fstat-no" title="function not covered" >iterativelyUpdateL
5186
5423
  );
5187
5424
  }
5188
5425
  &nbsp;
5189
- <span class="cstat-no" title="statement not covered" > return newContext;</span>
5426
+ return newContext;
5190
5427
  }
5191
5428
  &nbsp;
5192
- function <span class="fstat-no" title="function not covered" >applyDeltaInBothDirections(</span>
5429
+ function applyDeltaInBothDirections(
5193
5430
  context: GroupMachineContextValue,
5194
5431
  newItems: Array&lt;Item&gt;,
5195
5432
  itemIndex: number,
5196
5433
  delta: Big.Big
5197
5434
  ) {
5198
- let hasTriedBothDirections = <span class="cstat-no" title="statement not covered" >false;</span>
5199
- let direction = <span class="cstat-no" title="statement not covered" >1;</span>
5200
- let deltaLeft = <span class="cstat-no" title="statement not covered" >new Big(delta);</span>
5435
+ let hasTriedBothDirections = false;
5436
+ let direction = 1;
5437
+ let deltaLeft = new Big(delta);
5201
5438
  &nbsp;
5202
5439
  // Starting from where the items was removed add space to the panels around it.
5203
5440
  // This is only needed for conditional rendering.
5204
- <span class="cstat-no" title="statement not covered" > while (deltaLeft.toNumber() !== 0) {</span>
5205
- const targetPanel = <span class="cstat-no" title="statement not covered" >findPanelWithSpace(</span>
5441
+ while (deltaLeft.toNumber() !== 0) {
5442
+ const targetPanel = findPanelWithSpace(
5206
5443
  context,
5207
5444
  newItems,
5208
5445
  itemIndex + direction,
@@ -5210,22 +5447,22 @@ function <span class="fstat-no" title="function not covered" >applyDeltaInBothDi
5210
5447
  delta.gt(0) ? "add" : "subtract"
5211
5448
  );
5212
5449
  &nbsp;
5213
- <span class="cstat-no" title="statement not covered" > if (!targetPanel) {</span>
5214
- <span class="cstat-no" title="statement not covered" > if (hasTriedBothDirections) {</span>
5215
- <span class="cstat-no" title="statement not covered" > break;</span>
5450
+ if (!targetPanel) {
5451
+ if (hasTriedBothDirections) {
5452
+ break;
5216
5453
  } else {
5217
- <span class="cstat-no" title="statement not covered" > direction = direction === 1 ? -1 : 1;</span>
5218
- <span class="cstat-no" title="statement not covered" > hasTriedBothDirections = true;</span>
5219
- <span class="cstat-no" title="statement not covered" > continue;</span>
5454
+ direction = direction === 1 ? -1 : 1;
5455
+ hasTriedBothDirections = true;
5456
+ continue;
5220
5457
  }
5221
5458
  }
5222
5459
  &nbsp;
5223
- const oldValue = <span class="cstat-no" title="statement not covered" >targetPanel.currentValue.value;</span>
5224
- const newValue = <span class="cstat-no" title="statement not covered" >clampUnit(context, targetPanel, oldValue.add(deltaLeft));</span>
5460
+ const oldValue = targetPanel.currentValue.value;
5461
+ const newValue = clampUnit(context, targetPanel, oldValue.add(deltaLeft));
5225
5462
  &nbsp;
5226
- <span class="cstat-no" title="statement not covered" > targetPanel.currentValue.value = newValue;</span>
5227
- <span class="cstat-no" title="statement not covered" > deltaLeft = deltaLeft.sub(newValue.sub(oldValue));</span>
5228
- <span class="cstat-no" title="statement not covered" > direction = direction === 1 ? -1 : 1;</span>
5463
+ targetPanel.currentValue.value = newValue;
5464
+ deltaLeft = deltaLeft.sub(newValue.sub(oldValue));
5465
+ direction = direction === 1 ? -1 : 1;
5229
5466
  }
5230
5467
  }
5231
5468
  &nbsp;
@@ -5235,50 +5472,50 @@ function <span class="fstat-no" title="function not covered" >applyDeltaInBothDi
5235
5472
  *
5236
5473
  * 1. It will try to collapse a panel if it can.
5237
5474
  */
5238
- function <span class="fstat-no" title="function not covered" >handleOverflow(c</span>ontext: GroupMachineContextValue) {
5475
+ function handleOverflow(context: GroupMachineContextValue) {
5239
5476
  // If we haven't measured yet we can't do anything
5240
- <span class="cstat-no" title="statement not covered" > if (</span>
5241
- context.items.some(<span class="fstat-no" title="function not covered" >(i</span>) =&gt; <span class="cstat-no" title="statement not covered" >isPanelData(i) &amp;&amp; i.currentValue.value.eq(-1))</span>
5477
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (
5478
+ context.items.some((i) =&gt; isPanelData(i) &amp;&amp; i.currentValue.value.eq(-1))
5242
5479
  ) {
5243
5480
  <span class="cstat-no" title="statement not covered" > return context;</span>
5244
5481
  }
5245
5482
  &nbsp;
5246
- const groupSize = <span class="cstat-no" title="statement not covered" >new Big(getGroupSize(context));</span>
5247
- const nonStaticWidth = <span class="cstat-no" title="statement not covered" >groupSize.sub(getStaticWidth(context).toNumber());</span>
5248
- const pixelItems = <span class="cstat-no" title="statement not covered" >context.items.map(<span class="fstat-no" title="function not covered" >(i</span>) =&gt; {</span>
5249
- <span class="cstat-no" title="statement not covered" > if (isPanelHandle(i)) <span class="cstat-no" title="statement not covered" >return i.size.value;</span></span>
5250
- <span class="cstat-no" title="statement not covered" > if (i.collapsed) <span class="cstat-no" title="statement not covered" >return getUnitPixelValue(context, i.currentValue);</span></span>
5483
+ const groupSize = new Big(getGroupSize(context));
5484
+ const nonStaticWidth = groupSize.sub(getStaticWidth(context).toNumber());
5485
+ const pixelItems = context.items.map((i) =&gt; {
5486
+ if (isPanelHandle(i)) return i.size.value;
5487
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (i.collapsed) <span class="cstat-no" title="statement not covered" >return getUnitPixelValue(context, i.currentValue);</span>
5251
5488
  &nbsp;
5252
5489
  const pixel =
5253
- (<span class="cstat-no" title="statement not covered" >i.currentValue.type === "pixel" &amp;&amp; i.currentValue.value) ||</span>
5254
- i.currentValue.value.mul(nonStaticWidth);
5490
+ (i.currentValue.type === "pixel" &amp;&amp; i.currentValue.value) ||
5491
+ <span class="branch-2 cbranch-no" title="branch not covered" > i.currentValue.value.mul(nonStaticWidth);</span>
5255
5492
  &nbsp;
5256
- <span class="cstat-no" title="statement not covered" > return clampUnit(context, i, pixel);</span>
5493
+ return clampUnit(context, i, pixel);
5257
5494
  });
5258
- const totalSize = <span class="cstat-no" title="statement not covered" >pixelItems.reduce(<span class="fstat-no" title="function not covered" >(a</span>cc, i) =&gt; <span class="cstat-no" title="statement not covered" >acc.add(i), n</span>ew Big(0));</span>
5259
- const overflow = <span class="cstat-no" title="statement not covered" >totalSize.abs().sub(groupSize);</span>
5495
+ const totalSize = pixelItems.reduce((acc, i) =&gt; acc.add(i), new Big(0));
5496
+ const overflow = totalSize.abs().sub(groupSize);
5260
5497
  &nbsp;
5261
- <span class="cstat-no" title="statement not covered" > if (overflow.eq(0) || groupSize.eq(0)) {</span>
5498
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (overflow.eq(0) || groupSize.eq(0)) {
5262
5499
  <span class="cstat-no" title="statement not covered" > return context;</span>
5263
5500
  }
5264
5501
  &nbsp;
5265
- let newContext = <span class="cstat-no" title="statement not covered" >{ ...context, items: prepareItems(context) };</span>
5502
+ let newContext = { ...context, items: prepareItems(context) };
5266
5503
  &nbsp;
5267
- const collapsiblePanel = <span class="cstat-no" title="statement not covered" >newContext.items.find(<span class="fstat-no" title="function not covered" >(i</span>): i is PanelData =&gt;</span>
5268
- <span class="cstat-no" title="statement not covered" > Boolean(isPanelData(i) &amp;&amp; i.collapsible)</span>
5504
+ const collapsiblePanel = newContext.items.find((i): i is PanelData =&gt;
5505
+ Boolean(isPanelData(i) &amp;&amp; i.collapsible)
5269
5506
  );
5270
5507
  &nbsp;
5271
- <span class="cstat-no" title="statement not covered" > if (collapsiblePanel) {</span>
5272
- const collapsiblePanelIndex = <span class="cstat-no" title="statement not covered" >newContext.items.findIndex(</span>
5273
- <span class="fstat-no" title="function not covered" > (i</span>) =&gt; <span class="cstat-no" title="statement not covered" >i.id === collapsiblePanel.id</span>
5508
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (collapsiblePanel) {
5509
+ const collapsiblePanelIndex = newContext.items.findIndex(
5510
+ (i) =&gt; i.id === collapsiblePanel.id
5274
5511
  );
5275
- const handleId = <span class="cstat-no" title="statement not covered" >getHandleForPanelId(newContext, collapsiblePanel.id);</span>
5276
- const sizeChange = <span class="cstat-no" title="statement not covered" >collapsiblePanel.currentValue.value.sub(</span>
5512
+ const handleId = getHandleForPanelId(newContext, collapsiblePanel.id);
5513
+ const sizeChange = collapsiblePanel.currentValue.value.sub(
5277
5514
  getUnitPixelValue(newContext, collapsiblePanel.collapsedSize)
5278
5515
  );
5279
5516
  &nbsp;
5280
5517
  // Try to collapse the panel
5281
- <span class="cstat-no" title="statement not covered" > newContext = {</span>
5518
+ newContext = {
5282
5519
  ...newContext,
5283
5520
  ...iterativelyUpdateLayout({
5284
5521
  handleId: handleId.item.id,
@@ -5293,7 +5530,7 @@ function <span class="fstat-no" title="function not covered" >handleOverflow(c</
5293
5530
  };
5294
5531
  &nbsp;
5295
5532
  // Then remove all the overflow
5296
- <span class="cstat-no" title="statement not covered" > applyDeltaInBothDirections(</span>
5533
+ applyDeltaInBothDirections(
5297
5534
  newContext,
5298
5535
  newContext.items,
5299
5536
  collapsiblePanelIndex,
@@ -5301,7 +5538,11 @@ function <span class="fstat-no" title="function not covered" >handleOverflow(c</
5301
5538
  );
5302
5539
  }
5303
5540
  &nbsp;
5304
- <span class="cstat-no" title="statement not covered" > return { ...newContext, items: commitLayout(newContext) };</span>
5541
+ return { ...newContext, items: commitLayout(newContext) };
5542
+ }
5543
+ &nbsp;
5544
+ function clearLastKnownSize(items: Item[]) {
5545
+ return items.map((i) =&gt; ({ ...i, lastKnownSize: undefined }));
5305
5546
  }
5306
5547
  &nbsp;
5307
5548
  // #endregion
@@ -5319,59 +5560,59 @@ interface AnimationActorOutput {
5319
5560
  action: "expand" | "collapse";
5320
5561
  }
5321
5562
  &nbsp;
5322
- function <span class="fstat-no" title="function not covered" >getDeltaForEvent(</span>
5563
+ function getDeltaForEvent(
5323
5564
  context: GroupMachineContextValue,
5324
5565
  event: CollapsePanelEvent | ExpandPanelEvent
5325
5566
  ) {
5326
- const panel = <span class="cstat-no" title="statement not covered" >getPanelWithId(context, event.panelId);</span>
5567
+ const panel = getPanelWithId(context, event.panelId);
5327
5568
  &nbsp;
5328
- <span class="cstat-no" title="statement not covered" > if (event.type === "expandPanel") {</span>
5329
- <span class="cstat-no" title="statement not covered" > return new Big(</span>
5569
+ if (event.type === "expandPanel") {
5570
+ return new Big(
5330
5571
  panel.sizeBeforeCollapse ?? getUnitPixelValue(context, panel.min)
5331
5572
  ).minus(panel.currentValue.value);
5332
5573
  }
5333
5574
  &nbsp;
5334
- const collapsedSize = <span class="cstat-no" title="statement not covered" >getUnitPixelValue(context, panel.collapsedSize);</span>
5335
- <span class="cstat-no" title="statement not covered" > return panel.currentValue.value.minus(collapsedSize);</span>
5575
+ const collapsedSize = getUnitPixelValue(context, panel.collapsedSize);
5576
+ return panel.currentValue.value.minus(collapsedSize);
5336
5577
  }
5337
5578
  &nbsp;
5338
5579
  const animationActor = fromPromise&lt;
5339
5580
  AnimationActorOutput | undefined,
5340
5581
  AnimationActorInput
5341
5582
  &gt;(
5342
- <span class="fstat-no" title="function not covered" > ({</span> input: { send, context, event } }) =&gt;
5343
- <span class="cstat-no" title="statement not covered" > new Promise&lt;AnimationActorOutput | undefined&gt;(<span class="fstat-no" title="function not covered" >(r</span>esolve) =&gt; {</span>
5344
- const panel = <span class="cstat-no" title="statement not covered" >getPanelWithId(context, event.panelId);</span>
5345
- const handle = <span class="cstat-no" title="statement not covered" >getHandleForPanelId(context, event.panelId);</span>
5583
+ ({ input: { send, context, event } }) =&gt;
5584
+ new Promise&lt;AnimationActorOutput | undefined&gt;((resolve) =&gt; {
5585
+ const panel = getPanelWithId(context, event.panelId);
5586
+ const handle = getHandleForPanelId(context, event.panelId);
5346
5587
  &nbsp;
5347
- let direction = <span class="cstat-no" title="statement not covered" >new Big(handle.direction);</span>
5348
- const fullDelta = <span class="cstat-no" title="statement not covered" >getDeltaForEvent(context, event);</span>
5588
+ let direction = new Big(handle.direction);
5589
+ const fullDelta = getDeltaForEvent(context, event);
5349
5590
  &nbsp;
5350
- <span class="cstat-no" title="statement not covered" > if (event.type === "collapsePanel") {</span>
5351
- <span class="cstat-no" title="statement not covered" > panel.sizeBeforeCollapse = panel.currentValue.value.toNumber();</span>
5352
- <span class="cstat-no" title="statement not covered" > direction = direction.mul(new Big(-1));</span>
5591
+ if (event.type === "collapsePanel") {
5592
+ panel.sizeBeforeCollapse = panel.currentValue.value.toNumber();
5593
+ direction = direction.mul(new Big(-1));
5353
5594
  }
5354
5595
  &nbsp;
5355
- const fps = <span class="cstat-no" title="statement not covered" >60;</span>
5356
- const { duration, ease } = <span class="cstat-no" title="statement not covered" >getCollapseAnimation(panel);</span>
5357
- const totalFrames = <span class="cstat-no" title="statement not covered" >Math.ceil(</span>
5596
+ const fps = 60;
5597
+ const { duration, ease } = getCollapseAnimation(panel);
5598
+ const totalFrames = Math.ceil(
5358
5599
  panel.collapseAnimation ? duration / (1000 / fps) : 1
5359
5600
  );
5360
- let frame = <span class="cstat-no" title="statement not covered" >0;</span>
5361
- let appliedDelta = <span class="cstat-no" title="statement not covered" >new Big(0);</span>
5601
+ let frame = 0;
5602
+ let appliedDelta = new Big(0);
5362
5603
  &nbsp;
5363
- function <span class="fstat-no" title="function not covered" >renderFrame() {</span>
5364
- const progress = <span class="cstat-no" title="statement not covered" >++frame / totalFrames;</span>
5365
- const e = <span class="cstat-no" title="statement not covered" >new Big(panel.collapseAnimation ? ease(progress) : 1);</span>
5366
- const delta = <span class="cstat-no" title="statement not covered" >e.mul(fullDelta).sub(appliedDelta).mul(direction);</span>
5604
+ function renderFrame() {
5605
+ const progress = ++frame / totalFrames;
5606
+ const e = new Big(panel.collapseAnimation ? ease(progress) : 1);
5607
+ const delta = e.mul(fullDelta).sub(appliedDelta).mul(direction);
5367
5608
  &nbsp;
5368
- <span class="cstat-no" title="statement not covered" > send({</span>
5609
+ send({
5369
5610
  type: "applyDelta",
5370
5611
  handleId: handle.item.id,
5371
5612
  delta: delta.toNumber(),
5372
5613
  });
5373
5614
  &nbsp;
5374
- <span class="cstat-no" title="statement not covered" > appliedDelta = appliedDelta.add(</span>
5615
+ appliedDelta = appliedDelta.add(
5375
5616
  delta
5376
5617
  .abs()
5377
5618
  .mul(
@@ -5382,16 +5623,16 @@ const animationActor = fromPromise&lt;
5382
5623
  )
5383
5624
  );
5384
5625
  &nbsp;
5385
- <span class="cstat-no" title="statement not covered" > if (e.eq(1)) {</span>
5386
- const action = <span class="cstat-no" title="statement not covered" >event.type === "expandPanel" ? "expand" : "collapse";</span>
5387
- <span class="cstat-no" title="statement not covered" > resolve({ panelId: panel.id, action });</span>
5388
- <span class="cstat-no" title="statement not covered" > return false;</span>
5626
+ if (e.eq(1)) {
5627
+ const action = event.type === "expandPanel" ? "expand" : "collapse";
5628
+ resolve({ panelId: panel.id, action });
5629
+ return false;
5389
5630
  }
5390
5631
  &nbsp;
5391
- <span class="cstat-no" title="statement not covered" > return true;</span>
5632
+ return true;
5392
5633
  }
5393
5634
  &nbsp;
5394
- <span class="cstat-no" title="statement not covered" > raf(renderFrame);</span>
5635
+ raf(renderFrame);
5395
5636
  })
5396
5637
  );
5397
5638
  &nbsp;
@@ -5405,23 +5646,26 @@ export const groupMachine = createMachine(
5405
5646
  orientation?: Orientation;
5406
5647
  groupId: string;
5407
5648
  initialItems?: Item[];
5649
+ autosaveStrategy?: "localStorage" | "cookie";
5408
5650
  },
5409
5651
  },
5410
- context: <span class="fstat-no" title="function not covered" >({</span> input }) =&gt; (<span class="cstat-no" title="statement not covered" >{</span>
5652
+ context: ({ input }) =&gt; ({
5411
5653
  size: { width: 0, height: 0 },
5412
5654
  items: input.initialItems || [],
5413
5655
  orientation: input.orientation || "horizontal",
5414
5656
  dragOvershoot: new Big(0),
5415
5657
  groupId: input.groupId,
5658
+ autosaveStrategy: input.autosaveStrategy,
5416
5659
  }),
5417
5660
  states: {
5418
5661
  idle: {
5662
+ entry: ["onAutosave"],
5419
5663
  on: {
5420
- setActualItemsSize: { actions: ["recordActualItemSize", "onResize"] },
5421
5664
  dragHandleStart: { target: "dragging" },
5422
5665
  setPanelPixelSize: {
5423
5666
  actions: [
5424
5667
  "prepare",
5668
+ "onClearLastKnownSize",
5425
5669
  "onSetPanelSize",
5426
5670
  "commit",
5427
5671
  "onResize",
@@ -5449,7 +5693,9 @@ export const groupMachine = createMachine(
5449
5693
  dragging: {
5450
5694
  entry: ["prepare"],
5451
5695
  on: {
5452
- dragHandle: { actions: ["onDragHandle", "onResize"] },
5696
+ dragHandle: {
5697
+ actions: ["onClearLastKnownSize", "onDragHandle", "onResize"],
5698
+ },
5453
5699
  dragHandleEnd: { target: "idle" },
5454
5700
  collapsePanel: {
5455
5701
  guard: "shouldCollapseToggle",
@@ -5460,16 +5706,16 @@ export const groupMachine = createMachine(
5460
5706
  actions: "runCollapseToggle",
5461
5707
  },
5462
5708
  },
5463
- exit: ["commit", "onAutosave"],
5709
+ exit: ["commit"],
5464
5710
  },
5465
5711
  togglingCollapse: {
5466
- entry: ["prepare"],
5712
+ entry: ["prepare", "onClearLastKnownSize"],
5467
5713
  invoke: {
5468
5714
  src: "animation",
5469
- input: <span class="fstat-no" title="function not covered" >(i</span>) =&gt; (<span class="cstat-no" title="statement not covered" >{ ...i, send: i.self.send }),</span>
5715
+ input: (i) =&gt; ({ ...i, send: i.self.send }),
5470
5716
  onDone: {
5471
5717
  target: "idle",
5472
- actions: ["onToggleCollapseComplete", "commit", "onAutosave"],
5718
+ actions: ["onToggleCollapseComplete", "commit"],
5473
5719
  },
5474
5720
  },
5475
5721
  on: {
@@ -5478,47 +5724,65 @@ export const groupMachine = createMachine(
5478
5724
  },
5479
5725
  },
5480
5726
  on: {
5727
+ setActualItemsSize: { actions: ["recordActualItemSize", "onResize"] },
5481
5728
  registerPanel: { actions: ["assignPanelData"] },
5482
5729
  registerDynamicPanel: {
5483
5730
  actions: [
5484
5731
  "prepare",
5485
5732
  "onRegisterDynamicPanel",
5733
+ "onClearLastKnownSize",
5486
5734
  "commit",
5487
5735
  "onResize",
5488
5736
  "onAutosave",
5489
5737
  ],
5490
5738
  },
5491
5739
  unregisterPanel: {
5492
- actions: ["prepare", "removeItem", "commit", "onResize", "onAutosave"],
5740
+ actions: [
5741
+ "prepare",
5742
+ "removeItem",
5743
+ "onClearLastKnownSize",
5744
+ "commit",
5745
+ "onResize",
5746
+ "onAutosave",
5747
+ ],
5493
5748
  },
5494
5749
  registerPanelHandle: { actions: ["assignPanelHandleData"] },
5495
5750
  unregisterPanelHandle: {
5496
- actions: ["prepare", "removeItem", "commit", "onResize", "onAutosave"],
5751
+ actions: [
5752
+ "prepare",
5753
+ "removeItem",
5754
+ "onClearLastKnownSize",
5755
+ "commit",
5756
+ "onResize",
5757
+ "onAutosave",
5758
+ ],
5497
5759
  },
5498
5760
  setSize: { actions: ["updateSize", "onResize"] },
5499
- setOrientation: { actions: ["updateOrientation", "onResize"] },
5761
+ setOrientation: {
5762
+ actions: ["updateOrientation", "onClearLastKnownSize", "onResize"],
5763
+ },
5500
5764
  },
5501
5765
  },
5502
5766
  {
5503
5767
  guards: {
5504
- shouldNotifyCollapseToggle: <span class="fstat-no" title="function not covered" >({</span> context, event }) =&gt; {
5505
- <span class="cstat-no" title="statement not covered" > isEvent(event, ["collapsePanel", "expandPanel"]);</span>
5506
- const panel = <span class="cstat-no" title="statement not covered" >getPanelWithId(context, event.panelId);</span>
5507
- <span class="cstat-no" title="statement not covered" > return !event.controlled &amp;&amp; panel.collapseIsControlled === true;</span>
5768
+ shouldNotifyCollapseToggle: ({ context, event }) =&gt; {
5769
+ isEvent(event, ["collapsePanel", "expandPanel"]);
5770
+ const panel = getPanelWithId(context, event.panelId);
5771
+ return !event.controlled &amp;&amp; panel.collapseIsControlled === true;
5508
5772
  },
5509
- shouldCollapseToggle: <span class="fstat-no" title="function not covered" >({</span> context, event }) =&gt; {
5510
- <span class="cstat-no" title="statement not covered" > isEvent(event, ["collapsePanel", "expandPanel"]);</span>
5511
- const panel = <span class="cstat-no" title="statement not covered" >getPanelWithId(context, event.panelId);</span>
5512
- <span class="cstat-no" title="statement not covered" > return panel.collapseIsControlled === true;</span>
5773
+ shouldCollapseToggle: ({ context, event }) =&gt; {
5774
+ isEvent(event, ["collapsePanel", "expandPanel"]);
5775
+ const panel = getPanelWithId(context, event.panelId);
5776
+ return panel.collapseIsControlled === true;
5513
5777
  },
5514
- cannotExpandPanel: <span class="fstat-no" title="function not covered" >({</span> context, event }) =&gt; {
5515
- <span class="cstat-no" title="statement not covered" > isEvent(event, ["expandPanel"]);</span>
5516
- const delta = <span class="cstat-no" title="statement not covered" >getDeltaForEvent(context, event);</span>
5517
- const handle = <span class="cstat-no" title="statement not covered" >getHandleForPanelId(context, event.panelId);</span>
5518
- const pixelItems = <span class="cstat-no" title="statement not covered" >prepareItems(context);</span>
5519
- &nbsp;
5520
- let interimContext = <span class="cstat-no" title="statement not covered" >{ ...context, items: pixelItems };</span>
5521
- <span class="cstat-no" title="statement not covered" > interimContext = {</span>
5778
+ cannotExpandPanel: ({ context, event }) =&gt; {
5779
+ isEvent(event, ["expandPanel"]);
5780
+ const delta = getDeltaForEvent(context, event);
5781
+ const handle = getHandleForPanelId(context, event.panelId);
5782
+ const pixelItems = prepareItems(context);
5783
+ &nbsp;
5784
+ let interimContext = { ...context, items: pixelItems };
5785
+ interimContext = {
5522
5786
  ...interimContext,
5523
5787
  ...iterativelyUpdateLayout({
5524
5788
  context: interimContext,
@@ -5528,107 +5792,125 @@ export const groupMachine = createMachine(
5528
5792
  direction: handle.direction,
5529
5793
  }),
5530
5794
  };
5531
- const updatedPanel = <span class="cstat-no" title="statement not covered" >interimContext.items.find(</span>
5532
- <span class="fstat-no" title="function not covered" > (i</span>) =&gt; <span class="cstat-no" title="statement not covered" >i.id === event.panelId</span>
5795
+ const updatedPanel = interimContext.items.find(
5796
+ (i) =&gt; i.id === event.panelId
5533
5797
  );
5534
- const totalSize = <span class="cstat-no" title="statement not covered" >interimContext.items.reduce(</span>
5535
- <span class="fstat-no" title="function not covered" > (a</span>cc, i) =&gt;
5536
- <span class="cstat-no" title="statement not covered" > acc.add(isPanelData(i) ? i.currentValue.value : i.size.value),</span>
5798
+ const totalSize = interimContext.items.reduce(
5799
+ (acc, i) =&gt;
5800
+ acc.add(isPanelData(i) ? i.currentValue.value : i.size.value),
5537
5801
  new Big(0)
5538
5802
  );
5539
5803
  const didExpand =
5540
- <span class="cstat-no" title="statement not covered" > updatedPanel &amp;&amp;</span>
5804
+ updatedPanel &amp;&amp;
5541
5805
  isPanelData(updatedPanel) &amp;&amp;
5542
5806
  !updatedPanel.currentValue.value.eq(updatedPanel.collapsedSize.value);
5543
5807
  &nbsp;
5544
- <span class="cstat-no" title="statement not covered" > return totalSize.gt(getGroupSize(context)) || !didExpand;</span>
5808
+ return totalSize.gt(getGroupSize(context)) || !didExpand;
5545
5809
  },
5546
5810
  },
5547
5811
  actors: {
5548
5812
  animation: animationActor,
5549
5813
  },
5550
5814
  actions: {
5551
- notifyCollapseToggle: <span class="fstat-no" title="function not covered" >({</span> context, event }) =&gt; {
5552
- <span class="cstat-no" title="statement not covered" > isEvent(event, ["collapsePanel", "expandPanel"]);</span>
5553
- const panel = <span class="cstat-no" title="statement not covered" >getPanelWithId(context, event.panelId);</span>
5554
- <span class="cstat-no" title="statement not covered" > panel.onCollapseChange?.current?.(!panel.collapsed);</span>
5815
+ onAutosave: ({ context, self }) =&gt; {
5816
+ if (!context.autosaveStrategy || typeof window === "undefined") {
5817
+ return;
5818
+ }
5819
+ &nbsp;
5820
+ const snapshot = self.getPersistedSnapshot() as GroupMachineSnapshot;
5821
+ snapshot.context.items = clearLastKnownSize(context.items);
5822
+ snapshot.value = "idle";
5823
+ const data = JSON.stringify(snapshot);
5824
+ &nbsp;
5825
+ if (context.autosaveStrategy === "localStorage") {
5826
+ localStorage.setItem(context.groupId, data);
5827
+ } else {
5828
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
5829
+ const ActualClass = (Cookies as any).default || Cookies;
5830
+ const cookies = new ActualClass(null, { path: "/" });
5831
+ &nbsp;
5832
+ cookies.set(context.groupId, data, { path: "/", maxAge: 31536000 });
5833
+ }
5834
+ },
5835
+ notifyCollapseToggle: ({ context, event }) =&gt; {
5836
+ isEvent(event, ["collapsePanel", "expandPanel"]);
5837
+ const panel = getPanelWithId(context, event.panelId);
5838
+ panel.onCollapseChange?.current?.(!panel.collapsed);
5555
5839
  },
5556
- runCollapseToggle: enqueueActions(<span class="fstat-no" title="function not covered" >({</span> context, event, enqueue }) =&gt; {
5557
- <span class="cstat-no" title="statement not covered" > isEvent(event, ["collapsePanel", "expandPanel"]);</span>
5840
+ runCollapseToggle: enqueueActions(({ context, event, enqueue }) =&gt; {
5841
+ isEvent(event, ["collapsePanel", "expandPanel"]);
5558
5842
  &nbsp;
5559
- const handle = <span class="cstat-no" title="statement not covered" >getHandleForPanelId(context, event.panelId);</span>
5843
+ const handle = getHandleForPanelId(context, event.panelId);
5560
5844
  // When collapsing a panel it will be in the opposite direction
5561
5845
  // that handle assumes
5562
5846
  const delta =
5563
- <span class="cstat-no" title="statement not covered" > event.type === "collapsePanel"</span>
5847
+ event.type === "collapsePanel"
5564
5848
  ? handle.direction * -1
5565
5849
  : handle.direction;
5566
- const newContext = <span class="cstat-no" title="statement not covered" >updateLayout(context, {</span>
5850
+ const newContext = updateLayout(context, {
5567
5851
  handleId: handle.item.id,
5568
5852
  type: "dragHandle",
5569
5853
  controlled: event.controlled,
5570
5854
  value: dragHandlePayload({ delta, orientation: context.orientation }),
5571
5855
  });
5572
5856
  &nbsp;
5573
- <span class="cstat-no" title="statement not covered" > enqueue.assign(newContext);</span>
5857
+ enqueue.assign(newContext);
5574
5858
  }),
5575
5859
  onToggleCollapseComplete: assign({
5576
- items: <span class="fstat-no" title="function not covered" >({</span> context, event: e }) =&gt; {
5577
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
5578
- const output = (<span class="cstat-no" title="statement not covered" >e as any).output as AnimationActorOutput;</span>
5579
- <span class="cstat-no" title="statement not covered" > invariant(output, "Expected output from animation actor");</span>
5860
+ items: ({ context, event: e }) =&gt; {
5861
+ const { output } = e as unknown as { output: AnimationActorOutput };
5862
+ invariant(output, "Expected output from animation actor");
5580
5863
  &nbsp;
5581
- const panel = <span class="cstat-no" title="statement not covered" >getPanelWithId(context, output.panelId);</span>
5582
- <span class="cstat-no" title="statement not covered" > panel.collapsed = output.action === "collapse";</span>
5864
+ const panel = getPanelWithId(context, output.panelId);
5865
+ panel.collapsed = output.action === "collapse";
5583
5866
  &nbsp;
5584
- <span class="cstat-no" title="statement not covered" > if (panel.collapsed) {</span>
5585
- <span class="cstat-no" title="statement not covered" > panel.currentValue = panel.collapsedSize;</span>
5867
+ if (panel.collapsed) {
5868
+ panel.currentValue = panel.collapsedSize;
5586
5869
  }
5587
5870
  &nbsp;
5588
- <span class="cstat-no" title="statement not covered" > return context.items;</span>
5871
+ return context.items;
5589
5872
  },
5590
5873
  }),
5591
- updateSize: enqueueActions(<span class="fstat-no" title="function not covered" >({</span> context, event, enqueue }) =&gt; {
5592
- <span class="cstat-no" title="statement not covered" > isEvent(event, ["setSize"]);</span>
5593
- &nbsp;
5594
- <span class="cstat-no" title="statement not covered" > if (event.handleOverflow) {</span>
5595
- <span class="cstat-no" title="statement not covered" > enqueue.assign(handleOverflow({ ...context, size: event.size }));</span>
5874
+ updateSize: enqueueActions(({ context, event, enqueue }) =&gt; {
5875
+ isEvent(event, ["setSize"]);
5876
+ &nbsp;
5877
+ if (event.handleOverflow) {
5878
+ enqueue.assign(
5879
+ handleOverflow({
5880
+ ...context,
5881
+ size: event.size,
5882
+ items: clearLastKnownSize(prepareItems(context)),
5883
+ })
5884
+ );
5596
5885
  } else {
5597
- <span class="cstat-no" title="statement not covered" > enqueue.assign({ size: event.size });</span>
5886
+ enqueue.assign({ size: event.size });
5598
5887
  }
5599
5888
  }),
5600
5889
  recordActualItemSize: assign({
5601
- items: <span class="fstat-no" title="function not covered" >({</span> context, event }) =&gt; {
5602
- <span class="cstat-no" title="statement not covered" > isEvent(event, ["setActualItemsSize"]);</span>
5603
- &nbsp;
5604
- const orientation = <span class="cstat-no" title="statement not covered" >context.orientation;</span>
5605
- &nbsp;
5606
- <span class="cstat-no" title="statement not covered" > for (const [id, size] of Object.entries(event.childrenSizes)) {</span>
5607
- const item = <span class="cstat-no" title="statement not covered" >context.items.find(<span class="fstat-no" title="function not covered" >(i</span>) =&gt; <span class="cstat-no" title="statement not covered" >i.id === id)</span>;</span>
5608
- &nbsp;
5609
- <span class="cstat-no" title="statement not covered" > if (!isPanelData(item)) {</span>
5610
- <span class="cstat-no" title="statement not covered" > continue;</span>
5611
- }
5890
+ items: ({ context, event }) =&gt; {
5891
+ isEvent(event, ["setActualItemsSize"]);
5612
5892
  &nbsp;
5613
- <span class="cstat-no" title="statement not covered" > item.currentValue = makePixelUnit(</span>
5614
- orientation === "horizontal" ? size.width : size.height
5615
- );
5616
- }
5617
- &nbsp;
5618
- <span class="cstat-no" title="statement not covered" > return commitLayout(context);</span>
5893
+ return context.items.map((i) =&gt; {
5894
+ if (!isPanelData(i)) return i;
5895
+ const lastKnownSize = event.childrenSizes[i.id] || <span class="branch-1 cbranch-no" title="branch not covered" >i.lastKnownSize;</span>
5896
+ return { ...i, lastKnownSize };
5897
+ });
5619
5898
  },
5620
5899
  }),
5621
5900
  updateOrientation: assign({
5622
- orientation: <span class="fstat-no" title="function not covered" >({</span> event }) =&gt; {
5623
- <span class="cstat-no" title="statement not covered" > isEvent(event, ["setOrientation"]);</span>
5624
- <span class="cstat-no" title="statement not covered" > return event.orientation;</span>
5901
+ orientation: ({ event }) =&gt; {
5902
+ isEvent(event, ["setOrientation"]);
5903
+ return event.orientation;
5625
5904
  },
5626
5905
  }),
5906
+ onClearLastKnownSize: assign({
5907
+ items: ({ context }) =&gt; clearLastKnownSize(context.items),
5908
+ }),
5627
5909
  assignPanelData: assign({
5628
- items: <span class="fstat-no" title="function not covered" >({</span> context, event }) =&gt; {
5629
- <span class="cstat-no" title="statement not covered" > isEvent(event, ["registerPanel"]);</span>
5910
+ items: ({ context, event }) =&gt; {
5911
+ isEvent(event, ["registerPanel"]);
5630
5912
  &nbsp;
5631
- <span class="cstat-no" title="statement not covered" > return addDeDuplicatedItems(context.items, {</span>
5913
+ return addDeDuplicatedItems(context.items, {
5632
5914
  type: "panel",
5633
5915
  currentValue: makePixelUnit(-1),
5634
5916
  ...event.data,
@@ -5636,62 +5918,62 @@ export const groupMachine = createMachine(
5636
5918
  },
5637
5919
  }),
5638
5920
  onRegisterDynamicPanel: assign({
5639
- items: <span class="fstat-no" title="function not covered" >({</span> context, event }) =&gt; {
5640
- <span class="cstat-no" title="statement not covered" > isEvent(event, ["registerDynamicPanel"]);</span>
5921
+ items: ({ context, event }) =&gt; {
5922
+ isEvent(event, ["registerDynamicPanel"]);
5641
5923
  &nbsp;
5642
- let currentValue: ParsedUnit = <span class="cstat-no" title="statement not covered" >makePixelUnit(0);</span>
5924
+ let currentValue: ParsedUnit = makePixelUnit(0);
5643
5925
  &nbsp;
5644
- <span class="cstat-no" title="statement not covered" > if (</span>
5926
+ if (
5645
5927
  event.data.collapsible &amp;&amp;
5646
5928
  event.data.collapsed &amp;&amp;
5647
5929
  event.data.collapsedSize
5648
5930
  ) {
5649
- <span class="cstat-no" title="statement not covered" > currentValue = event.data.collapsedSize;</span>
5650
- <span class="cstat-no" title="statement not covered" > } else if (event.data.default) {</span>
5651
- <span class="cstat-no" title="statement not covered" > currentValue = event.data.default;</span>
5931
+ currentValue = event.data.collapsedSize;
5932
+ } else if (event.data.default) {
5933
+ currentValue = event.data.default;
5652
5934
  } else {
5653
- <span class="cstat-no" title="statement not covered" > currentValue = event.data.min;</span>
5935
+ currentValue = event.data.min;
5654
5936
  }
5655
5937
  &nbsp;
5656
- const newItems = <span class="cstat-no" title="statement not covered" >addDeDuplicatedItems(context.items, {</span>
5938
+ const newItems = addDeDuplicatedItems(context.items, {
5657
5939
  type: "panel",
5658
5940
  ...event.data,
5659
5941
  currentValue,
5660
5942
  });
5661
- const itemIndex = <span class="cstat-no" title="statement not covered" >newItems.findIndex(</span>
5662
- <span class="fstat-no" title="function not covered" > (i</span>tem) =&gt; <span class="cstat-no" title="statement not covered" >item.id === event.data.id</span>
5943
+ const itemIndex = newItems.findIndex(
5944
+ (item) =&gt; item.id === event.data.id
5663
5945
  );
5664
- const newContext = <span class="cstat-no" title="statement not covered" >{ ...context, items: newItems };</span>
5665
- const overflowDueToHandles = <span class="cstat-no" title="statement not covered" >context.items</span>
5666
- .reduce(<span class="fstat-no" title="function not covered" >(a</span>cc, i) =&gt; {
5667
- <span class="cstat-no" title="statement not covered" > if (isPanelHandle(i)) {</span>
5668
- <span class="cstat-no" title="statement not covered" > return acc.add(getUnitPixelValue(context, i.size));</span>
5946
+ const newContext = { ...context, items: newItems };
5947
+ const overflowDueToHandles = context.items
5948
+ .reduce((acc, i) =&gt; {
5949
+ if (isPanelHandle(i)) {
5950
+ return acc.add(getUnitPixelValue(context, i.size));
5669
5951
  }
5670
5952
  &nbsp;
5671
- <span class="cstat-no" title="statement not covered" > return acc.add(i.currentValue.value);</span>
5953
+ return acc.add(i.currentValue.value);
5672
5954
  }, new Big(0))
5673
5955
  .minus(getGroupSize(context));
5674
5956
  &nbsp;
5675
- <span class="cstat-no" title="statement not covered" > applyDeltaInBothDirections(</span>
5957
+ applyDeltaInBothDirections(
5676
5958
  newContext,
5677
5959
  newItems,
5678
5960
  itemIndex,
5679
5961
  currentValue.value.add(overflowDueToHandles).neg()
5680
5962
  );
5681
5963
  &nbsp;
5682
- <span class="cstat-no" title="statement not covered" > return newItems;</span>
5964
+ return newItems;
5683
5965
  },
5684
5966
  }),
5685
5967
  assignPanelHandleData: assign({
5686
- items: <span class="fstat-no" title="function not covered" >({</span> context, event }) =&gt; {
5687
- <span class="cstat-no" title="statement not covered" > isEvent(event, ["registerPanelHandle"]);</span>
5968
+ items: ({ context, event }) =&gt; {
5969
+ isEvent(event, ["registerPanelHandle"]);
5688
5970
  &nbsp;
5689
5971
  const unit =
5690
- <span class="cstat-no" title="statement not covered" > typeof event.data.size === "string"</span>
5972
+ typeof event.data.size === "string"
5691
5973
  ? parseUnit(event.data.size)
5692
5974
  : event.data.size;
5693
5975
  &nbsp;
5694
- <span class="cstat-no" title="statement not covered" > return addDeDuplicatedItems(context.items, {</span>
5976
+ return addDeDuplicatedItems(context.items, {
5695
5977
  type: "handle",
5696
5978
  ...event.data,
5697
5979
  size: {
@@ -5702,41 +5984,41 @@ export const groupMachine = createMachine(
5702
5984
  },
5703
5985
  }),
5704
5986
  removeItem: assign({
5705
- items: <span class="fstat-no" title="function not covered" >({</span> context, event }) =&gt; {
5706
- <span class="cstat-no" title="statement not covered" > isEvent(event, ["unregisterPanel", "unregisterPanelHandle"]);</span>
5707
- const itemIndex = <span class="cstat-no" title="statement not covered" >context.items.findIndex(</span>
5708
- <span class="fstat-no" title="function not covered" > (i</span>tem) =&gt; <span class="cstat-no" title="statement not covered" >item.id === event.id</span>
5987
+ items: ({ context, event }) =&gt; {
5988
+ isEvent(event, ["unregisterPanel", "unregisterPanelHandle"]);
5989
+ const itemIndex = context.items.findIndex(
5990
+ (item) =&gt; item.id === event.id
5709
5991
  );
5710
- const item = <span class="cstat-no" title="statement not covered" >context.items[itemIndex];</span>
5992
+ const item = context.items[itemIndex];
5711
5993
  &nbsp;
5712
- <span class="cstat-no" title="statement not covered" > if (!item) {</span>
5713
- <span class="cstat-no" title="statement not covered" > return context.items;</span>
5994
+ if (!item) {
5995
+ return context.items;
5714
5996
  }
5715
5997
  &nbsp;
5716
- const newItems = <span class="cstat-no" title="statement not covered" >context.items.filter(<span class="fstat-no" title="function not covered" >(i</span>) =&gt; <span class="cstat-no" title="statement not covered" >i.id !== event.id)</span>;</span>
5717
- const removedSize = <span class="cstat-no" title="statement not covered" >isPanelData(item)</span>
5998
+ const newItems = context.items.filter((i) =&gt; i.id !== event.id);
5999
+ const removedSize = isPanelData(item)
5718
6000
  ? item.currentValue.value
5719
6001
  : item.size.value;
5720
6002
  &nbsp;
5721
- <span class="cstat-no" title="statement not covered" > applyDeltaInBothDirections(context, newItems, itemIndex, removedSize);</span>
6003
+ applyDeltaInBothDirections(context, newItems, itemIndex, removedSize);
5722
6004
  &nbsp;
5723
- <span class="cstat-no" title="statement not covered" > return newItems;</span>
6005
+ return newItems;
5724
6006
  },
5725
6007
  }),
5726
6008
  prepare: assign({
5727
- items: <span class="fstat-no" title="function not covered" >({</span> context }) =&gt; <span class="cstat-no" title="statement not covered" >prepareItems(context),</span>
6009
+ items: ({ context }) =&gt; prepareItems(context),
5728
6010
  }),
5729
- onDragHandle: enqueueActions(<span class="fstat-no" title="function not covered" >({</span> context, event, enqueue }) =&gt; {
5730
- <span class="cstat-no" title="statement not covered" > isEvent(event, ["dragHandle"]);</span>
5731
- <span class="cstat-no" title="statement not covered" > enqueue.assign(updateLayout(context, event));</span>
6011
+ onDragHandle: enqueueActions(({ context, event, enqueue }) =&gt; {
6012
+ isEvent(event, ["dragHandle"]);
6013
+ enqueue.assign(updateLayout(context, event));
5732
6014
  }),
5733
6015
  commit: assign({
5734
6016
  dragOvershoot: new Big(0),
5735
- items: <span class="fstat-no" title="function not covered" >({</span> context }) =&gt; <span class="cstat-no" title="statement not covered" >commitLayout(context),</span>
6017
+ items: ({ context }) =&gt; commitLayout(context),
5736
6018
  }),
5737
- onApplyDelta: assign(<span class="fstat-no" title="function not covered" >({</span> context, event }) =&gt; {
5738
- <span class="cstat-no" title="statement not covered" > isEvent(event, ["applyDelta"]);</span>
5739
- <span class="cstat-no" title="statement not covered" > return updateLayout(context, {</span>
6019
+ onApplyDelta: assign(({ context, event }) =&gt; {
6020
+ isEvent(event, ["applyDelta"]);
6021
+ return updateLayout(context, {
5740
6022
  handleId: event.handleId,
5741
6023
  type: "collapsePanel",
5742
6024
  disregardCollapseBuffer: true,
@@ -5746,23 +6028,23 @@ export const groupMachine = createMachine(
5746
6028
  }),
5747
6029
  });
5748
6030
  }),
5749
- onSetPanelSize: enqueueActions(<span class="fstat-no" title="function not covered" >({</span> context, event, enqueue }) =&gt; {
5750
- <span class="cstat-no" title="statement not covered" > isEvent(event, ["setPanelPixelSize"]);</span>
6031
+ onSetPanelSize: enqueueActions(({ context, event, enqueue }) =&gt; {
6032
+ isEvent(event, ["setPanelPixelSize"]);
5751
6033
  &nbsp;
5752
- const panel = <span class="cstat-no" title="statement not covered" >getPanelWithId(context, event.panelId);</span>
5753
- const handle = <span class="cstat-no" title="statement not covered" >getHandleForPanelId(context, event.panelId);</span>
5754
- const current = <span class="cstat-no" title="statement not covered" >panel.currentValue.value;</span>
5755
- const newSize = <span class="cstat-no" title="statement not covered" >clampUnit(</span>
6034
+ const panel = getPanelWithId(context, event.panelId);
6035
+ const handle = getHandleForPanelId(context, event.panelId);
6036
+ const current = panel.currentValue.value;
6037
+ const newSize = clampUnit(
5756
6038
  context,
5757
6039
  panel,
5758
6040
  getUnitPixelValue(context, parseUnit(event.size))
5759
6041
  );
5760
- const isBigger = <span class="cstat-no" title="statement not covered" >newSize &gt; current;</span>
5761
- const delta = <span class="cstat-no" title="statement not covered" >isBigger</span>
6042
+ const isBigger = newSize &gt; current;
6043
+ const delta = isBigger
5762
6044
  ? newSize.minus(current)
5763
6045
  : current.minus(newSize);
5764
6046
  &nbsp;
5765
- <span class="cstat-no" title="statement not covered" > enqueue.assign(</span>
6047
+ enqueue.assign(
5766
6048
  iterativelyUpdateLayout({
5767
6049
  context,
5768
6050
  direction: (handle.direction * (isBigger ? 1 : -1)) as -1 | 1,
@@ -5771,22 +6053,28 @@ export const groupMachine = createMachine(
5771
6053
  })
5772
6054
  );
5773
6055
  }),
5774
- onResize: <span class="fstat-no" title="function not covered" >({</span> context }) =&gt; {
5775
- <span class="cstat-no" title="statement not covered" > for (const item of context.items) {</span>
5776
- <span class="cstat-no" title="statement not covered" > if (isPanelData(item)) {</span>
5777
- const pixel = <span class="cstat-no" title="statement not covered" >clampUnit(</span>
5778
- context,
5779
- item,
5780
- getUnitPixelValue(context, item.currentValue)
5781
- );
5782
- const groupSize = <span class="cstat-no" title="statement not covered" >getGroupSize(context);</span>
5783
- &nbsp;
5784
- <span class="cstat-no" title="statement not covered" > item.onResize?.current?.({</span>
6056
+ onResize: ({ context }) =&gt; {
6057
+ for (const item of context.items) {
6058
+ if (isPanelData(item)) {
6059
+ const pixel = item.lastKnownSize
6060
+ ? new Big(
6061
+ context.orientation === "horizontal"
6062
+ ? item.lastKnownSize.width
6063
+ : item.lastKnownSize.height
6064
+ )
6065
+ : clampUnit(
6066
+ context,
6067
+ item,
6068
+ getUnitPixelValue(context, item.currentValue)
6069
+ );
6070
+ const groupSize = getGroupSize(context);
6071
+ &nbsp;
6072
+ item.onResize?.current?.({
5785
6073
  pixel: pixel.toNumber(),
5786
6074
  percentage:
5787
6075
  groupSize &gt; 0
5788
6076
  ? pixel.div(getGroupSize(context)).toNumber()
5789
- : -1,
6077
+ : <span class="branch-1 cbranch-no" title="branch not covered" >-1,</span>
5790
6078
  });
5791
6079
  }
5792
6080
  }
@@ -5803,7 +6091,7 @@ export const groupMachine = createMachine(
5803
6091
  <div class='footer quiet pad2 space-top1 center small'>
5804
6092
  Code coverage generated by
5805
6093
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
5806
- at 2024-08-23T00:52:02.778Z
6094
+ at 2024-08-24T07:50:07.371Z
5807
6095
  </div>
5808
6096
  <script src="prettify.js"></script>
5809
6097
  <script>