diff --git a/.gitignore b/.gitignore
index d6f307a..c792d83 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,7 +18,6 @@ dist/
downloads/
eggs/
.eggs/
-lib/
lib64/
parts/
sdist/
diff --git a/experiments/compare_course_allocation_algorithms.py b/experiments/compare_course_allocation_algorithms.py
index 0319b51..024df5a 100644
--- a/experiments/compare_course_allocation_algorithms.py
+++ b/experiments/compare_course_allocation_algorithms.py
@@ -18,6 +18,7 @@
TIME_LIMIT = 100
algorithms_to_check = [
+ crs.gale_shapley,
crs.utilitarian_matching,
crs.iterated_maximum_matching_unadjusted,
crs.iterated_maximum_matching_adjusted,
@@ -53,16 +54,16 @@ def course_allocation_with_random_instance_uniform(
value_noise_ratio:float,
algorithm:Callable,
random_seed: int,):
- agent_capacity_bounds = [6,6]
- item_capacity_bounds = [40,40]
+ agent_capacity_bounds = (6,6)
+ item_capacity_bounds = (40,40)
np.random.seed(random_seed)
instance = Instance.random_uniform(
num_of_agents=num_of_agents, num_of_items=num_of_items,
normalized_sum_of_values=normalized_sum_of_values,
- agent_capacity_bounds=agent_capacity_bounds,
- item_capacity_bounds=item_capacity_bounds,
- item_base_value_bounds=[1,max_value],
- item_subjective_ratio_bounds=[1-value_noise_ratio, 1+value_noise_ratio]
+ agent_capacity_bounds=agent_capacity_bounds,
+ item_capacity_bounds=item_capacity_bounds,
+ item_base_value_bounds=(1,max_value),
+ item_subjective_ratio_bounds=(1-value_noise_ratio, 1+value_noise_ratio)
)
return evaluate_algorithm_on_instance(algorithm, instance)
@@ -127,6 +128,7 @@ def run_szws_experiment():
import json
filename = "data/ariel_5783_input.json"
+# filename = "experiments/data/ariel_5783_input.json"
with open(filename, "r", encoding="utf-8") as file:
ariel_5783_input = json.load(file)
@@ -165,7 +167,7 @@ def run_ariel_experiment():
if __name__ == "__main__":
import logging, experiments_csv
experiments_csv.logger.setLevel(logging.INFO)
- run_uniform_experiment()
+ # run_uniform_experiment()
# run_szws_experiment()
# run_ariel_experiment()
diff --git a/experiments/plot_simulation_results.py b/experiments/plot_simulation_results.py
index 69016c0..6a1d42b 100644
--- a/experiments/plot_simulation_results.py
+++ b/experiments/plot_simulation_results.py
@@ -1,4 +1,4 @@
-from experiments_csv import single_plot_results, multi_plot_results
+from experiments_csv.plot_results import single_plot_results, multi_plot_results
from matplotlib import pyplot as plt
from pathlib import Path
import sys
diff --git a/experiments/results/course_allocation_szws.csv b/experiments/results/course_allocation_szws.csv
index 20796b4..2ee6df8 100644
--- a/experiments/results/course_allocation_szws.csv
+++ b/experiments/results/course_allocation_szws.csv
@@ -611,7 +611,7 @@ num_of_agents,num_of_items,agent_capacity,supply_ratio,num_of_popular_items,mean
100,25,5,1.5,6,3.85,"(50, 100)","(0, 50)",iterated_maximum_matching_adjusted,2,87.23331541126743,77.03703703703704,5.275779376498804,0.4210944488964777,0,0.0,100,100,100,0.2146076000062748
100,25,5,1.5,6,3.85,"(50, 100)","(0, 50)",iterated_maximum_matching_adjusted,3,87.16314624171262,77.47368421052632,4.347826086956516,0.2611163542740706,0,0.0,100,100,100,0.2161804999923333
100,25,5,1.5,6,3.85,"(50, 100)","(0, 50)",iterated_maximum_matching_adjusted,4,87.66739407907521,73.84615384615385,5.599999999999994,0.2110422707023697,0,0.0,100,100,100,0.2121457000030204
-100,25,5,1.5,6,3.85,"(50, 100)","(0, 50)",serial_dictatorship,0,79.92581810373112,44.534412955465584,55.06072874493927,18.183652343792154,0,0.0,45,47,47,0.027460399956908
+100,25,5,1.5,6,3.85,"(50, 100)","(0, 50)",serial_dictatorship,0,79.92581810373112,44.534412955465584,55.06072874493927,18.18365234379215,0,0.0,45,47,47,0.027460399956908
100,25,5,1.5,6,3.85,"(50, 100)","(0, 50)",serial_dictatorship,1,80.64277408816763,48.49699398797595,49.09819639278557,17.344076401247534,0,0.0,47,49,50,0.0277321999892592
100,25,5,1.5,6,3.85,"(50, 100)","(0, 50)",serial_dictatorship,2,79.01526838881641,50.50301810865191,46.55963302752294,18.99785806429092,0,0.0,44,44,45,0.0268275000271387
100,25,5,1.5,6,3.85,"(50, 100)","(0, 50)",serial_dictatorship,3,78.90221255399143,46.98544698544699,53.01455301455301,19.03925124586916,0,0.0,44,46,48,0.0276876999996602
@@ -749,12 +749,12 @@ num_of_agents,num_of_items,agent_capacity,supply_ratio,num_of_popular_items,mean
200,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",almost_egalitarian_without_donation,0,90.64582776035242,73.46491228070175,19.293478260869577,1.4420407001051323,0,0.0,175,185,193,8.440132599964272
200,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",almost_egalitarian_without_donation,1,90.24369067059376,75.054704595186,12.206572769953056,1.3667400676399994,0,0.0,182,187,198,8.396355000033509
200,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",almost_egalitarian_without_donation,2,89.79748226078272,75.92592592592592,11.851851851851862,1.0331168925759402,0,0.0,183,188,197,8.12680830003228
-200,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",almost_egalitarian_without_donation,3,90.04721638041038,75.16483516483517,19.137466307277634,1.4900341053752053,0,0.0,178,185,194,8.694806899991818
+200,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",almost_egalitarian_without_donation,3,90.04721638041038,75.16483516483517,19.13746630727763,1.4900341053752053,0,0.0,178,185,194,8.694806899991818
200,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",almost_egalitarian_without_donation,4,90.19910079261358,74.64454976303317,17.77251184834124,1.763108560326778,0,0.0,182,185,196,8.081291999958921
200,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",almost_egalitarian_with_donation,0,90.72573988206744,75.9656652360515,19.293478260869577,1.3423960850872674,0,0.0,178,187,196,8.40496549999807
200,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",almost_egalitarian_with_donation,1,90.26741503877278,75.054704595186,12.206572769953056,1.1042986967766912,0,0.0,186,192,200,8.061324000009336
200,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",almost_egalitarian_with_donation,2,89.69651767945632,75.92592592592592,12.619047619047606,1.4726684296522752,0,0.0,183,188,198,8.391139699961059
-200,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",almost_egalitarian_with_donation,3,90.1245346122803,75.16483516483517,19.137466307277634,1.2986605478008584,0,0.0,179,188,196,8.422776499995962
+200,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",almost_egalitarian_with_donation,3,90.1245346122803,75.16483516483517,19.13746630727763,1.2986605478008584,0,0.0,179,188,196,8.422776499995962
200,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",almost_egalitarian_with_donation,4,90.28858711379073,75.69060773480662,16.022099447513824,1.510042593673469,0,0.0,180,185,196,8.111415999999736
200,25,5,1.1,6,3.85,"(50, 100)","(0, 50)",utilitarian_matching,0,83.20345185590914,58.17307692307693,30.64935064935065,6.428372317874204,0,0.0,159,161,161,0.2817154000513255
200,25,5,1.1,6,3.85,"(50, 100)","(0, 50)",utilitarian_matching,1,82.76437925391814,60.31331592689296,31.55080213903743,7.012085267643042,0,0.0,160,163,163,0.2724572999868542
@@ -1259,7 +1259,7 @@ num_of_agents,num_of_items,agent_capacity,supply_ratio,num_of_popular_items,mean
300,25,5,1.1,6,3.85,"(50, 100)","(0, 50)",round_robin,0,81.35905406575732,60.23622047244095,14.024390243902443,3.273984147439857,0,0.0,300,300,300,0.1745009999722242
300,25,5,1.1,6,3.85,"(50, 100)","(0, 50)",round_robin,1,81.67317635835407,61.34969325153374,12.239583333333345,2.657560450673265,0,0.0,300,300,300,0.156711500021629
300,25,5,1.1,6,3.85,"(50, 100)","(0, 50)",round_robin,2,81.27020447022414,54.88454706927176,13.807531380753147,2.999016253584066,0,0.0,300,300,300,0.1544938999577425
-300,25,5,1.1,6,3.85,"(50, 100)","(0, 50)",round_robin,3,81.49755130397739,60.23166023166024,14.726840855106886,2.6883085827499054,0,0.0,300,300,300,0.1605463000014424
+300,25,5,1.1,6,3.85,"(50, 100)","(0, 50)",round_robin,3,81.49755130397739,60.23166023166024,14.726840855106886,2.688308582749906,0,0.0,300,300,300,0.1605463000014424
300,25,5,1.1,6,3.85,"(50, 100)","(0, 50)",round_robin,4,81.59937514999777,63.16872427983539,14.613778705636747,2.799636801825676,0,0.0,300,300,300,0.1634619000251405
300,25,5,1.1,6,3.85,"(50, 100)","(0, 50)",bidirectional_round_robin,0,81.44866571926562,60.526315789473685,13.483146067415731,2.7992817677178228,0,0.0,300,300,300,0.1725431000231765
300,25,5,1.1,6,3.85,"(50, 100)","(0, 50)",bidirectional_round_robin,1,81.48735041306327,62.903225806451616,15.324675324675312,2.949576467117935,0,0.0,300,300,300,0.1556535999989137
@@ -1320,7 +1320,7 @@ num_of_agents,num_of_items,agent_capacity,supply_ratio,num_of_popular_items,mean
300,25,5,1.1,9,3.85,"(50, 100)","(0, 50)",utilitarian_matching,1,88.80604695843394,68.66096866096866,23.34293948126802,3.020692392053071,0,0.0,284,285,285,0.4751030000043101
300,25,5,1.1,9,3.85,"(50, 100)","(0, 50)",utilitarian_matching,2,88.44354735144022,64.43298969072166,26.030927835051543,3.2998834601480755,0,0.0,285,286,286,0.4610299000050872
300,25,5,1.1,9,3.85,"(50, 100)","(0, 50)",utilitarian_matching,3,88.60071496242416,62.05962059620597,28.57142857142857,3.177566119801358,0,0.0,280,284,284,0.4527616999694146
-300,25,5,1.1,9,3.85,"(50, 100)","(0, 50)",utilitarian_matching,4,89.19108147813999,71.82044887780549,24.01215805471124,2.7363607123804154,0,0.0,290,291,291,0.4558134999824688
+300,25,5,1.1,9,3.85,"(50, 100)","(0, 50)",utilitarian_matching,4,89.19108147813999,71.82044887780549,24.01215805471124,2.736360712380415,0,0.0,290,291,291,0.4558134999824688
300,25,5,1.1,9,3.85,"(50, 100)","(0, 50)",iterated_maximum_matching_unadjusted,0,87.45616277995683,75.50607287449392,5.747126436781599,0.0354121278922374,0,0.0,300,300,300,0.8202729999902658
300,25,5,1.1,9,3.85,"(50, 100)","(0, 50)",iterated_maximum_matching_unadjusted,1,88.08104253988792,74.29193899782135,2.6627218934911383,0.020688507910166,0,0.0,300,300,300,0.8117884999956004
300,25,5,1.1,9,3.85,"(50, 100)","(0, 50)",iterated_maximum_matching_unadjusted,2,87.88223265040256,74.33808553971487,6.510416666666686,0.0463849659657937,0,0.0,300,300,300,0.8074428999680094
@@ -1415,7 +1415,7 @@ num_of_agents,num_of_items,agent_capacity,supply_ratio,num_of_popular_items,mean
300,25,5,1.25,6,3.85,"(50, 100)","(0, 50)",serial_dictatorship,1,77.56961004192186,44.57831325301205,55.42168674698795,21.31401764623935,0,0.0,114,117,120,0.1540481999982148
300,25,5,1.25,6,3.85,"(50, 100)","(0, 50)",serial_dictatorship,2,76.86052387010628,36.234458259325045,63.76554174067496,21.91793710725471,0,0.0,114,117,121,0.1586207000073045
300,25,5,1.25,6,3.85,"(50, 100)","(0, 50)",serial_dictatorship,3,76.90751740618062,43.43629343629344,55.01930501930502,21.89193705677892,0,0.0,112,117,119,0.1616813999717123
-300,25,5,1.25,6,3.85,"(50, 100)","(0, 50)",serial_dictatorship,4,77.18302113108365,45.601436265709154,52.96229802513466,21.817956185439414,0,0.0,111,115,117,0.1619396000169217
+300,25,5,1.25,6,3.85,"(50, 100)","(0, 50)",serial_dictatorship,4,77.18302113108365,45.601436265709154,52.96229802513466,21.817956185439417,0,0.0,111,115,117,0.1619396000169217
300,25,5,1.25,6,3.85,"(50, 100)","(0, 50)",round_robin,0,83.29878319142645,60.43307086614173,14.357682619647363,3.037376608813323,0,0.0,300,300,300,0.1561790000414475
300,25,5,1.25,6,3.85,"(50, 100)","(0, 50)",round_robin,1,83.71370709936522,61.34969325153374,12.100456621004568,2.635782802965322,0,0.0,300,300,300,0.1619039000361226
300,25,5,1.25,6,3.85,"(50, 100)","(0, 50)",round_robin,2,83.354070981459,54.88454706927176,13.854351687388984,2.7591734844615186,0,0.0,300,300,300,0.164955899992492
@@ -1555,7 +1555,7 @@ num_of_agents,num_of_items,agent_capacity,supply_ratio,num_of_popular_items,mean
300,25,5,1.5,6,3.85,"(50, 100)","(0, 50)",utilitarian_matching,0,88.14809321508368,70.1657458563536,25.138121546961315,5.306000990493448,0,0.0,281,281,281,0.4348004999919794
300,25,5,1.5,6,3.85,"(50, 100)","(0, 50)",utilitarian_matching,1,88.08821245989738,67.02702702702703,27.669902912621367,6.118149890402151,0,0.0,277,280,281,0.4211376999737695
300,25,5,1.5,6,3.85,"(50, 100)","(0, 50)",utilitarian_matching,2,87.84597830742086,70.40816326530613,24.48979591836735,6.158583687542496,0,0.0,282,282,282,0.4292453000089153
-300,25,5,1.5,6,3.85,"(50, 100)","(0, 50)",utilitarian_matching,3,87.97835977508856,66.66666666666666,28.645833333333314,5.115348650322014,0,0.0,284,287,287,0.4345547999837436
+300,25,5,1.5,6,3.85,"(50, 100)","(0, 50)",utilitarian_matching,3,87.97835977508856,66.66666666666666,28.64583333333331,5.115348650322014,0,0.0,284,287,287,0.4345547999837436
300,25,5,1.5,6,3.85,"(50, 100)","(0, 50)",utilitarian_matching,4,88.1938001637918,70.39999999999999,25.714285714285708,5.454859657719756,0,0.0,285,287,287,0.4555450999760069
300,25,5,1.5,6,3.85,"(50, 100)","(0, 50)",iterated_maximum_matching_unadjusted,0,87.79489925136302,74.80314960629921,7.008086253369271,0.3873185588128168,0,0.0,300,300,300,0.841491799976211
300,25,5,1.5,6,3.85,"(50, 100)","(0, 50)",iterated_maximum_matching_unadjusted,1,87.82368907274545,75.73529411764706,8.469945355191257,0.5776010094910686,0,0.0,300,300,300,0.8699599000392482
@@ -2170,12 +2170,12 @@ num_of_agents,num_of_items,agent_capacity,supply_ratio,num_of_popular_items,mean
200,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",almost_egalitarian_without_donation,0,90.64582776035242,73.46491228070175,19.293478260869577,1.4420407001051323,0,0.0,175,185,193,8.127196700021159
200,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",almost_egalitarian_without_donation,1,90.24369067059376,75.054704595186,12.206572769953056,1.3667400676399994,0,0.0,182,187,198,7.740226300025824
200,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",almost_egalitarian_without_donation,2,89.79748226078272,75.92592592592592,11.851851851851862,1.0331168925759402,0,0.0,183,188,197,7.922589100024197
-200,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",almost_egalitarian_without_donation,3,90.04721638041038,75.16483516483517,19.137466307277634,1.4900341053752053,0,0.0,178,185,194,7.85639930004254
+200,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",almost_egalitarian_without_donation,3,90.04721638041038,75.16483516483517,19.13746630727763,1.4900341053752053,0,0.0,178,185,194,7.85639930004254
200,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",almost_egalitarian_without_donation,4,90.19910079261358,74.64454976303317,17.77251184834124,1.763108560326778,0,0.0,182,185,196,7.861788699985482
200,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",almost_egalitarian_with_donation,0,90.72573988206744,75.9656652360515,19.293478260869577,1.3423960850872674,0,0.0,178,187,196,7.982699500047602
200,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",almost_egalitarian_with_donation,1,90.26741503877278,75.054704595186,12.206572769953056,1.1042986967766912,0,0.0,186,192,200,7.997166299959645
200,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",almost_egalitarian_with_donation,2,89.69651767945632,75.92592592592592,12.619047619047606,1.4726684296522752,0,0.0,183,188,198,8.033370300021488
-200,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",almost_egalitarian_with_donation,3,90.1245346122803,75.16483516483517,19.137466307277634,1.2986605478008584,0,0.0,179,188,196,7.979367499996442
+200,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",almost_egalitarian_with_donation,3,90.1245346122803,75.16483516483517,19.13746630727763,1.2986605478008584,0,0.0,179,188,196,7.979367499996442
200,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",almost_egalitarian_with_donation,4,90.28858711379073,75.69060773480662,16.022099447513824,1.510042593673469,0,0.0,180,185,196,7.938216399983503
200,25,5,1.1,6,3.85,"(50, 100)","(0, 50)",utilitarian_matching,0,83.20345185590914,58.17307692307693,30.64935064935065,6.428372317874204,0,0.0,159,161,161,0.2690136999590322
200,25,5,1.1,6,3.85,"(50, 100)","(0, 50)",utilitarian_matching,1,82.76437925391814,60.31331592689296,31.55080213903743,7.012085267643042,0,0.0,160,163,163,0.267133500019554
@@ -2199,7 +2199,7 @@ num_of_agents,num_of_items,agent_capacity,supply_ratio,num_of_popular_items,mean
200,25,5,1.1,6,3.85,"(50, 100)","(0, 50)",serial_dictatorship,4,75.49080112948269,42.85714285714285,55.77299412915851,22.738917677269704,0,0.0,66,67,68,0.080289100005757
200,25,5,1.1,6,3.85,"(50, 100)","(0, 50)",round_robin,0,81.62682300348021,63.73390557939914,14.024390243902443,2.474136882189849,0,0.0,200,200,200,0.0795854000025428
200,25,5,1.1,6,3.85,"(50, 100)","(0, 50)",round_robin,1,81.59822682702452,62.903225806451616,12.177985948477756,2.170413927707856,0,0.0,200,200,200,0.0777533999644219
-200,25,5,1.1,6,3.85,"(50, 100)","(0, 50)",round_robin,2,80.59034266308349,54.88454706927176,12.5,2.3435672279809934,0,0.0,200,200,200,0.0791170999873429
+200,25,5,1.1,6,3.85,"(50, 100)","(0, 50)",round_robin,2,80.59034266308349,54.88454706927176,12.5,2.343567227980994,0,0.0,200,200,200,0.0791170999873429
200,25,5,1.1,6,3.85,"(50, 100)","(0, 50)",round_robin,3,81.23036762475293,60.23166023166024,12.471655328798192,2.133904673590093,0,0.0,200,200,200,0.0783901999820955
200,25,5,1.1,6,3.85,"(50, 100)","(0, 50)",round_robin,4,81.6851109624728,61.839530332681015,11.645569620253156,2.323603285472848,0,0.0,200,200,200,0.0790565000497736
200,25,5,1.1,6,3.85,"(50, 100)","(0, 50)",bidirectional_round_robin,0,81.68856509430388,60.526315789473685,13.064133016627096,2.301991074117542,0,0.0,200,200,200,0.0792468999861739
@@ -2741,7 +2741,7 @@ num_of_agents,num_of_items,agent_capacity,supply_ratio,num_of_popular_items,mean
300,25,5,1.1,9,3.85,"(50, 100)","(0, 50)",utilitarian_matching,1,88.80604695843394,68.66096866096866,23.34293948126802,3.020692392053071,0,0.0,284,285,285,0.4740567000117153
300,25,5,1.1,9,3.85,"(50, 100)","(0, 50)",utilitarian_matching,2,88.44354735144022,64.43298969072166,26.030927835051543,3.2998834601480755,0,0.0,285,286,286,0.4650993999675847
300,25,5,1.1,9,3.85,"(50, 100)","(0, 50)",utilitarian_matching,3,88.60071496242416,62.05962059620597,28.57142857142857,3.177566119801358,0,0.0,280,284,284,0.4464365999447182
-300,25,5,1.1,9,3.85,"(50, 100)","(0, 50)",utilitarian_matching,4,89.19108147813999,71.82044887780549,24.01215805471124,2.7363607123804154,0,0.0,290,291,291,0.4519039000151679
+300,25,5,1.1,9,3.85,"(50, 100)","(0, 50)",utilitarian_matching,4,89.19108147813999,71.82044887780549,24.01215805471124,2.736360712380415,0,0.0,290,291,291,0.4519039000151679
300,25,5,1.1,9,3.85,"(50, 100)","(0, 50)",iterated_maximum_matching_unadjusted,0,87.45616277995683,75.50607287449392,5.747126436781599,0.0354121278922374,0,0.0,300,300,300,0.8181213999632746
300,25,5,1.1,9,3.85,"(50, 100)","(0, 50)",iterated_maximum_matching_unadjusted,1,88.08104253988792,74.29193899782135,2.6627218934911383,0.020688507910166,0,0.0,300,300,300,0.8008617000305094
300,25,5,1.1,9,3.85,"(50, 100)","(0, 50)",iterated_maximum_matching_unadjusted,2,87.88223265040256,74.33808553971487,6.510416666666686,0.0463849659657937,0,0.0,300,300,300,0.8147079999907874
@@ -2844,7 +2844,7 @@ num_of_agents,num_of_items,agent_capacity,supply_ratio,num_of_popular_items,mean
300,25,5,1.25,6,3.85,"(50, 100)","(0, 50)",round_robin,4,83.68173562358432,64.27289048473968,14.072494669509595,2.427767331988216,0,0.0,300,300,300,0.1663105000043288
300,25,5,1.25,6,3.85,"(50, 100)","(0, 50)",bidirectional_round_robin,0,83.4024304230496,60.526315789473685,13.738738738738732,2.513971801550541,0,0.0,300,300,300,0.1606157000060193
300,25,5,1.25,6,3.85,"(50, 100)","(0, 50)",bidirectional_round_robin,1,83.5197545870574,62.903225806451616,15.324675324675312,2.55950449556267,0,0.0,300,300,300,0.1595395000185817
-300,25,5,1.25,6,3.85,"(50, 100)","(0, 50)",bidirectional_round_robin,2,83.07904408143345,62.95503211991434,15.848214285714292,2.6396068995489754,0,0.0,300,300,300,0.1611472999793477
+300,25,5,1.25,6,3.85,"(50, 100)","(0, 50)",bidirectional_round_robin,2,83.07904408143345,62.95503211991434,15.848214285714292,2.639606899548975,0,0.0,300,300,300,0.1611472999793477
300,25,5,1.25,6,3.85,"(50, 100)","(0, 50)",bidirectional_round_robin,3,83.34660807917858,60.23166023166024,13.84615384615384,2.748267028670773,0,0.0,300,300,300,0.1623632000409998
300,25,5,1.25,6,3.85,"(50, 100)","(0, 50)",bidirectional_round_robin,4,83.53688883346652,61.839530332681015,14.988290398126452,2.6210589031490854,0,0.0,300,300,300,0.1640336000127717
300,25,5,1.25,6,3.85,"(50, 100)","(0, 50)",almost_egalitarian_without_donation,0,84.52230807691095,70.31630170316302,20.044543429844097,3.161737361691262,0,0.0,280,284,284,13.138180200010538
@@ -2980,7 +2980,7 @@ num_of_agents,num_of_items,agent_capacity,supply_ratio,num_of_popular_items,mean
300,25,5,1.5,6,3.85,"(50, 100)","(0, 50)",utilitarian_matching,0,88.14809321508368,70.1657458563536,25.138121546961315,5.306000990493448,0,0.0,281,281,281,0.4108474000240676
300,25,5,1.5,6,3.85,"(50, 100)","(0, 50)",utilitarian_matching,1,88.08821245989738,67.02702702702703,27.669902912621367,6.118149890402151,0,0.0,277,280,281,0.4076311999815516
300,25,5,1.5,6,3.85,"(50, 100)","(0, 50)",utilitarian_matching,2,87.84597830742086,70.40816326530613,24.48979591836735,6.158583687542496,0,0.0,282,282,282,0.4098905000137165
-300,25,5,1.5,6,3.85,"(50, 100)","(0, 50)",utilitarian_matching,3,87.97835977508856,66.66666666666666,28.645833333333314,5.115348650322014,0,0.0,284,287,287,0.4211993000353686
+300,25,5,1.5,6,3.85,"(50, 100)","(0, 50)",utilitarian_matching,3,87.97835977508856,66.66666666666666,28.64583333333331,5.115348650322014,0,0.0,284,287,287,0.4211993000353686
300,25,5,1.5,6,3.85,"(50, 100)","(0, 50)",utilitarian_matching,4,88.1938001637918,70.39999999999999,25.714285714285708,5.454859657719756,0,0.0,285,287,287,0.4110549999750219
300,25,5,1.5,6,3.85,"(50, 100)","(0, 50)",iterated_maximum_matching_unadjusted,0,87.79489925136302,74.80314960629921,7.008086253369271,0.3873185588128168,0,0.0,300,300,300,1.1339660999947228
300,25,5,1.5,6,3.85,"(50, 100)","(0, 50)",iterated_maximum_matching_unadjusted,1,87.82368907274545,75.73529411764706,8.469945355191257,0.5776010094910686,0,0.0,300,300,300,0.8110597000340931
@@ -3098,6 +3098,194 @@ num_of_agents,num_of_items,agent_capacity,supply_ratio,num_of_popular_items,mean
300,25,5,1.5,9,3.85,"(50, 100)","(0, 50)",almost_egalitarian_with_donation,3,94.4752559892894,83.48214285714286,9.050772626931575,0.9005964772161119,0,0.0,298,300,300,12.719845000014177
300,25,5,1.5,9,3.85,"(50, 100)","(0, 50)",almost_egalitarian_with_donation,4,94.76965154539184,86.4693446088795,11.200000000000005,0.7632502270457473,0,0.0,300,300,300,12.896742700017056
100,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",utilitarian_matching,0,91.01465052092666,75.58441558441558,19.61325966850829,1.6565634869489474,0,0.0,85,87,95,0.4999400000087917
+100,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",utilitarian_matching,1,90.46266823624111,72.77777777777777,13.63636363636364,1.5098292614546187,0,0.0,83,84,91,0.5025423000333831
+100,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",utilitarian_matching,2,90.6613935562088,74.71264367816092,15.34772182254197,1.1566266260879317,0,0.0,85,86,95,0.4105012000072747
+100,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",utilitarian_matching,3,90.54056073413524,73.48066298342542,23.180592991913755,1.534518839391132,0,0.0,88,88,93,0.421102299937047
+100,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",utilitarian_matching,4,90.90706955039724,77.92553191489363,17.72486772486772,1.2599697463498043,0,0.0,86,86,93,0.4198713999940082
+100,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",iterated_maximum_matching_unadjusted,0,90.6980094489252,73.91304347826086,4.926108374384242,0.2530781252975517,0,0.0,100,100,100,0.7979893999872729
+100,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",iterated_maximum_matching_unadjusted,1,90.05898169298018,75.75057736720554,7.653061224489789,0.2810958493639138,0,0.0,98,100,100,0.9945702999830246
+100,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",iterated_maximum_matching_unadjusted,2,90.31369025023268,76.63755458515283,4.092071611253203,0.2459238100682138,0,0.0,100,100,100,0.7193849000614136
+100,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",iterated_maximum_matching_unadjusted,3,90.17477726567944,76.06837606837607,6.43564356435644,0.2710227691975734,0,0.0,100,100,100,0.7424426999641582
+100,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",gale_shapley,0,90.72156673529481,73.2843137254902,20.994475138121558,1.7904914100499423,0,0.0,85,86,93,0.027799916999999397
+100,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",gale_shapley,1,89.98177319780805,58.69017632241813,24.181360201511332,2.6967552860879165,0,0.0,81,81,87,0.0279667090000002
+100,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",gale_shapley,2,90.43072191102038,68.84816753926701,13.694267515923556,1.422076398896337,0,0.0,85,87,95,0.0272316659999996
+100,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",gale_shapley,3,90.28253496588115,73.31536388140162,25.067385444743934,1.871637477119908,0,0.0,89,89,94,0.028051624999999802
+100,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",gale_shapley,4,90.64597455513785,64.32432432432432,18.037135278514597,1.9324308491571938,0,0.0,84,84,91,0.028688791000000435
+100,25,5,1.1,6,3.85,"(50, 100)","(0, 50)",gale_shapley,0,82.66585182306596,54.589371980676326,35.42713567839195,7.338053536260713,0,0.0,78,78,78,0.028161790999999603
+100,25,5,1.1,6,3.85,"(50, 100)","(0, 50)",gale_shapley,1,81.8167136025603,45.622119815668206,29.03225806451612,6.863768207701404,0,0.0,76,77,77,0.028188375000000043
+100,25,5,1.1,6,3.85,"(50, 100)","(0, 50)",gale_shapley,2,81.52926886482163,55.932203389830505,32.83208020050126,6.409261764404241,0,0.0,77,78,78,0.0278299999999998
+100,25,5,1.1,6,3.85,"(50, 100)","(0, 50)",gale_shapley,3,81.8340061109915,56.26477541371159,28.841607565011813,5.433459309929131,0,0.0,82,83,84,0.027699709000000183
+100,25,5,1.1,6,3.85,"(50, 100)","(0, 50)",gale_shapley,4,82.50055691757665,54.739336492891,32.3076923076923,6.857248922619488,0,0.0,76,77,77,0.027735957999999172
+100,25,5,1.1,9,2.6,"(50, 100)","(0, 50)",gale_shapley,0,94.63358305482339,77.95698924731182,11.282051282051285,0.6007524513122828,0,0.0,95,96,100,0.027702542000000108
+100,25,5,1.1,9,2.6,"(50, 100)","(0, 50)",gale_shapley,1,95.01308533505582,78.33827893175074,9.792284866468847,0.37948913520218325,0,0.0,98,98,99,0.02775008399999912
+100,25,5,1.1,9,2.6,"(50, 100)","(0, 50)",gale_shapley,2,95.45471580521,81.08108108108108,11.1111111111111,0.5392621979487123,0,0.0,97,98,99,0.027803583000000742
+100,25,5,1.1,9,2.6,"(50, 100)","(0, 50)",gale_shapley,3,94.90544740317542,72.40437158469946,9.401709401709397,0.5862377370281538,0,0.0,94,96,98,0.028400541999999973
+100,25,5,1.1,9,2.6,"(50, 100)","(0, 50)",gale_shapley,4,94.64530605608427,72.51908396946564,16.284987277353693,0.4448399590616637,0,0.0,96,98,98,0.02800124999999909
+100,25,5,1.1,9,3.85,"(50, 100)","(0, 50)",gale_shapley,0,87.96365067788916,61.42131979695431,26.142131979695435,2.7836341117531225,0,0.0,95,95,96,0.027539084000000713
+100,25,5,1.1,9,3.85,"(50, 100)","(0, 50)",gale_shapley,1,88.23221560804623,67.01570680628272,20.420420420420427,2.682273074815894,0,0.0,93,93,93,0.02937383300000107
+100,25,5,1.1,9,3.85,"(50, 100)","(0, 50)",gale_shapley,2,88.68691458569191,61.684782608695656,24.456521739130437,2.916455394929703,0,0.0,94,94,94,0.027651291999999827
+100,25,5,1.1,9,3.85,"(50, 100)","(0, 50)",gale_shapley,3,87.9830220111561,62.43523316062176,21.761658031088075,2.4117607038223126,0,0.0,93,94,94,0.027979250000001343
+100,25,5,1.1,9,3.85,"(50, 100)","(0, 50)",gale_shapley,4,88.07460561933624,57.97872340425532,34.308510638297875,2.6420142196522103,0,0.0,92,94,94,0.028213125000000616
+100,25,5,1.25,6,2.6,"(50, 100)","(0, 50)",gale_shapley,0,92.75048697198305,75.58441558441558,19.61325966850829,1.5711734549903644,0,0.0,89,90,96,0.02742966599999974
+100,25,5,1.25,6,2.6,"(50, 100)","(0, 50)",gale_shapley,1,92.31769726871872,72.77777777777777,14.619883040935662,1.3394122571723241,0,0.0,90,90,95,0.027753999999999834
+100,25,5,1.25,6,2.6,"(50, 100)","(0, 50)",gale_shapley,2,92.30344442631893,74.71264367816092,13.694267515923556,1.1782621379315714,0,0.0,89,91,97,0.027020874999999833
+100,25,5,1.25,6,2.6,"(50, 100)","(0, 50)",gale_shapley,3,92.28900125557318,74.05405405405405,19.729729729729726,1.5556942403663205,0,0.0,92,92,97,0.027323334000000088
+100,25,5,1.25,6,2.6,"(50, 100)","(0, 50)",gale_shapley,4,92.55107410782068,66.84350132625994,17.72486772486772,1.4176076897646503,0,0.0,88,88,92,0.028229957999998945
+100,25,5,1.25,6,3.85,"(50, 100)","(0, 50)",gale_shapley,0,85.03016167673759,63.661202185792355,26.502732240437147,5.688215245250344,0,0.0,84,87,87,0.027442082999998618
+100,25,5,1.25,6,3.85,"(50, 100)","(0, 50)",gale_shapley,1,84.144502816491,60.313315926892955,24.8041775456919,5.710896800252035,0,0.0,81,82,82,0.027330708000000925
+100,25,5,1.25,6,3.85,"(50, 100)","(0, 50)",gale_shapley,2,83.88611609725702,55.932203389830505,32.83208020050126,4.897499293215965,0,0.0,85,86,86,0.027644624999998868
+100,25,5,1.25,6,3.85,"(50, 100)","(0, 50)",gale_shapley,3,83.98801162215221,64.45012787723785,23.561643835616437,5.054415397961204,0,0.0,88,89,89,0.027115624999998644
+100,25,5,1.25,6,3.85,"(50, 100)","(0, 50)",gale_shapley,4,84.72878112571179,57.24815724815725,27.179487179487168,5.561693848391156,0,0.0,86,86,86,0.027476291999999347
+100,25,5,1.25,9,2.6,"(50, 100)","(0, 50)",gale_shapley,0,96.46432164774225,81.02564102564102,10.256410256410263,0.3102410683317578,0,0.0,97,100,100,0.027201375000000638
+100,25,5,1.25,9,2.6,"(50, 100)","(0, 50)",gale_shapley,1,96.84779569038933,81.23324396782841,5.524861878453052,0.18684537763072556,0,0.0,100,100,100,0.027491334000000478
+100,25,5,1.25,9,2.6,"(50, 100)","(0, 50)",gale_shapley,2,97.26819995703731,81.08108108108108,7.386363636363626,0.22145191692588825,0,0.0,99,99,99,0.027682916999999918
+100,25,5,1.25,9,2.6,"(50, 100)","(0, 50)",gale_shapley,3,96.84077751645361,82.03592814371258,11.077844311377234,0.24840203766242852,0,0.0,96,98,100,0.027544040999998742
+100,25,5,1.25,9,2.6,"(50, 100)","(0, 50)",gale_shapley,4,96.54003201584514,82.70440251572327,8.620689655172413,0.22039301381586895,0,0.0,98,99,99,0.027338874999999874
+100,25,5,1.25,9,3.85,"(50, 100)","(0, 50)",gale_shapley,0,90.45541253664837,72.13541666666666,22.65625,2.158770420247992,0,0.0,99,100,100,0.027812458000001428
+100,25,5,1.25,9,3.85,"(50, 100)","(0, 50)",gale_shapley,1,90.8862013247948,69.12568306010928,15.217391304347814,1.7602233823546256,0,0.0,95,96,96,0.02766708300000076
+100,25,5,1.25,9,3.85,"(50, 100)","(0, 50)",gale_shapley,2,91.16242269657297,71.2166172106825,21.66172106824925,2.7931485168784156,0,0.0,96,97,97,0.027872166999999948
+100,25,5,1.25,9,3.85,"(50, 100)","(0, 50)",gale_shapley,3,90.5831763695686,69.73684210526315,19.43661971830987,2.2099960500940883,0,0.0,96,97,97,0.028773708000001008
+100,25,5,1.25,9,3.85,"(50, 100)","(0, 50)",gale_shapley,4,90.64250536842434,60.1063829787234,32.18085106382979,1.9459646012636496,0,0.0,94,95,95,0.027745375000000294
+100,25,5,1.5,6,2.6,"(50, 100)","(0, 50)",gale_shapley,0,95.40181792095802,78.63013698630137,13.69863013698631,0.740813739203665,0,0.0,94,96,98,0.026979083000000514
+100,25,5,1.5,6,2.6,"(50, 100)","(0, 50)",gale_shapley,1,95.06887289921613,73.61111111111111,16.66666666666667,0.9222588663010808,0,0.0,97,97,99,0.027076416999999964
+100,25,5,1.5,6,2.6,"(50, 100)","(0, 50)",gale_shapley,2,94.92569509598312,75.78347578347578,19.65811965811966,0.9358372293150219,0,0.0,93,93,97,0.02718245800000041
+100,25,5,1.5,6,2.6,"(50, 100)","(0, 50)",gale_shapley,3,94.86261460768662,81.84281842818429,13.178294573643399,1.0617920271269197,0,0.0,97,97,99,0.027014624999999626
+100,25,5,1.5,6,2.6,"(50, 100)","(0, 50)",gale_shapley,4,95.21202013155579,81.86968838526913,8.547008547008545,0.5845767978247514,0,0.0,95,96,98,0.02752066699999922
+100,25,5,1.5,6,3.85,"(50, 100)","(0, 50)",gale_shapley,0,88.20574737002622,69.38775510204081,28.50122850122851,4.4293686580478635,0,0.0,90,90,90,0.027198084000000122
+100,25,5,1.5,6,3.85,"(50, 100)","(0, 50)",gale_shapley,1,87.37359861472372,60.313315926892955,29.144385026737964,5.773970876087837,0,0.0,86,86,86,0.027194291000000703
+100,25,5,1.5,6,3.85,"(50, 100)","(0, 50)",gale_shapley,2,87.17489152544341,64.84375,27.34375,3.1927549928430925,0,0.0,92,93,93,0.027526959000001128
+100,25,5,1.5,6,3.85,"(50, 100)","(0, 50)",gale_shapley,3,87.2872661799857,66.3265306122449,23.52941176470587,4.6424319638103135,0,0.0,92,93,93,0.027611959000001463
+100,25,5,1.5,6,3.85,"(50, 100)","(0, 50)",gale_shapley,4,87.87552548451107,57.24815724815725,29.2191435768262,4.530247758117406,0,0.0,91,91,91,0.027925375000000585
+100,25,5,1.5,9,2.6,"(50, 100)","(0, 50)",gale_shapley,0,98.56431171510249,87.24373576309794,2.564102564102569,0.03310371220818993,0,0.0,100,100,100,0.02715454099999981
+100,25,5,1.5,9,2.6,"(50, 100)","(0, 50)",gale_shapley,1,98.8223934817559,85.38681948424069,9.742120343839545,0.16361958497691376,0,0.0,100,100,100,0.027165666000000144
+100,25,5,1.5,9,2.6,"(50, 100)","(0, 50)",gale_shapley,2,98.99533699353738,85.47008547008546,1.4970059880239432,0.034933265926380984,0,0.0,100,100,100,0.027267500000000666
+100,25,5,1.5,9,2.6,"(50, 100)","(0, 50)",gale_shapley,3,98.91647151774734,93.86189258312021,4.347826086956516,0.07713210702341129,0,0.0,100,100,100,0.02845275000000136
+100,25,5,1.5,9,2.6,"(50, 100)","(0, 50)",gale_shapley,4,98.41057857681619,87.69633507853402,8.620689655172413,0.1787320196016708,0,0.0,99,100,100,0.027232999999998952
+100,25,5,1.5,9,3.85,"(50, 100)","(0, 50)",gale_shapley,0,93.9493671210059,78.4090909090909,13.903743315508024,0.9342229513360849,0,0.0,100,100,100,0.027483458000000738
+100,25,5,1.5,9,3.85,"(50, 100)","(0, 50)",gale_shapley,1,94.31077797775983,72.48520710059172,17.15976331360946,1.0930796526391888,0,0.0,98,98,98,0.027860875000000007
+100,25,5,1.5,9,3.85,"(50, 100)","(0, 50)",gale_shapley,2,94.39315412957842,71.2166172106825,21.66172106824925,1.3755501858495252,0,0.0,99,99,99,0.027979832999999843
+100,25,5,1.5,9,3.85,"(50, 100)","(0, 50)",gale_shapley,3,93.97726281685145,80.0,12.911392405063296,1.1226759950618304,0,0.0,97,99,99,0.02750450000000093
+100,25,5,1.5,9,3.85,"(50, 100)","(0, 50)",gale_shapley,4,94.17750110270138,75.98784194528876,24.012158054711236,1.388537526313172,0,0.0,98,98,98,0.0273211670000002
+200,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",gale_shapley,0,90.8390263005807,63.75661375661375,27.513227513227513,2.746730615271309,0,0.0,165,168,181,0.08140633300000033
+200,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",gale_shapley,1,90.32750899337465,61.942257217847775,30.708661417322823,3.4869578816047238,0,0.0,163,165,178,0.08445579199999997
+200,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",gale_shapley,2,89.96325246921678,68.26666666666667,22.383720930232556,2.712791261730178,0,0.0,167,167,182,0.08070325000000089
+200,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",gale_shapley,3,90.39351887151764,70.22332506203473,23.495702005730664,2.766277099187564,0,0.0,173,175,186,0.0811603329999997
+200,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",gale_shapley,4,90.52787163695672,65.67567567567568,23.342175066313004,2.822473191445715,0,0.0,170,170,183,0.08159112499999921
+200,25,5,1.1,6,3.85,"(50, 100)","(0, 50)",gale_shapley,0,82.77626419832188,55.47445255474452,34.0632603406326,8.38014094097915,0,0.0,152,153,153,0.08354450000000035
+200,25,5,1.1,6,3.85,"(50, 100)","(0, 50)",gale_shapley,1,82.34043032913237,57.180156657963444,36.06965174129355,8.910044637786207,0,0.0,154,156,156,0.08350641700000061
+200,25,5,1.1,6,3.85,"(50, 100)","(0, 50)",gale_shapley,2,81.32836096187677,52.300242130750604,44.55205811138015,10.517173859923725,0,0.0,150,152,152,0.08121558299999876
+200,25,5,1.1,6,3.85,"(50, 100)","(0, 50)",gale_shapley,3,82.17603542069283,56.26477541371159,32.336956521739125,6.78866182469445,0,0.0,166,166,167,0.08101583400000045
+200,25,5,1.1,6,3.85,"(50, 100)","(0, 50)",gale_shapley,4,82.66909327504814,57.24815724815725,39.27648578811369,7.8167392018349195,0,0.0,151,151,151,0.08100308400000067
+200,25,5,1.1,9,2.6,"(50, 100)","(0, 50)",gale_shapley,0,94.9303588123961,76.94704049844236,12.990196078431381,0.7191421294258634,0,0.0,194,195,198,0.08115237500000028
+200,25,5,1.1,9,2.6,"(50, 100)","(0, 50)",gale_shapley,1,95.20853122575662,75.0,15.294117647058826,0.7130014048256927,0,0.0,194,197,199,0.08150670800000093
+200,25,5,1.1,9,2.6,"(50, 100)","(0, 50)",gale_shapley,2,95.34742965184232,78.71148459383754,14.285714285714278,0.6152701497177295,0,0.0,195,195,196,0.08044508400000083
+200,25,5,1.1,9,2.6,"(50, 100)","(0, 50)",gale_shapley,3,94.95378332441847,69.45945945945947,19.729729729729726,1.0876623418671794,0,0.0,189,193,194,0.08068112499999991
+200,25,5,1.1,9,2.6,"(50, 100)","(0, 50)",gale_shapley,4,95.30451049212363,72.15568862275448,14.0625,0.734851271739029,0,0.0,194,195,196,0.08176691700000127
+200,25,5,1.1,9,3.85,"(50, 100)","(0, 50)",gale_shapley,0,88.07108769257566,59.375,26.142131979695435,4.001019856693276,0,0.0,192,192,192,0.08195608299999968
+200,25,5,1.1,9,3.85,"(50, 100)","(0, 50)",gale_shapley,1,88.32128088377978,67.35751295336787,19.786096256684502,3.2959414781144,0,0.0,188,188,188,0.08267829100000057
+200,25,5,1.1,9,3.85,"(50, 100)","(0, 50)",gale_shapley,2,88.5370710987103,61.684782608695656,26.956521739130423,3.454529463568198,0,0.0,189,189,189,0.08061012500000153
+200,25,5,1.1,9,3.85,"(50, 100)","(0, 50)",gale_shapley,3,87.95220685822332,63.69047619047619,28.27380952380952,3.975640290922594,0,0.0,186,188,189,0.08071537500000048
+200,25,5,1.1,9,3.85,"(50, 100)","(0, 50)",gale_shapley,4,89.03687792585659,64.91228070175438,24.012158054711236,2.740700496989423,0,0.0,190,191,191,0.08272908300000026
+200,25,5,1.25,6,2.6,"(50, 100)","(0, 50)",gale_shapley,0,92.76929087387373,64.81481481481481,26.455026455026456,1.7769815132385123,0,0.0,179,181,190,0.0836951250000002
+200,25,5,1.25,6,2.6,"(50, 100)","(0, 50)",gale_shapley,1,92.34448433273205,67.86632390745501,23.65038560411311,2.4690971829255606,0,0.0,175,178,190,0.08293841699999938
+200,25,5,1.25,6,2.6,"(50, 100)","(0, 50)",gale_shapley,2,91.97059801083203,74.71264367816092,22.383720930232556,2.236586469575546,0,0.0,176,178,190,0.08053762499999984
+200,25,5,1.25,6,2.6,"(50, 100)","(0, 50)",gale_shapley,3,92.32659972063844,73.48066298342542,19.729729729729726,1.9650903043707606,0,0.0,183,184,191,0.0799874169999999
+200,25,5,1.25,6,2.6,"(50, 100)","(0, 50)",gale_shapley,4,92.43631795183781,66.84350132625994,23.342175066313004,2.280586230743207,0,0.0,179,179,189,0.08333608300000073
+200,25,5,1.25,6,3.85,"(50, 100)","(0, 50)",gale_shapley,0,85.06305373245414,55.961070559610704,33.57664233576642,6.738744346776759,0,0.0,167,169,169,0.08127379099999921
+200,25,5,1.25,6,3.85,"(50, 100)","(0, 50)",gale_shapley,1,84.4313827893888,60.313315926892955,36.06965174129355,8.633280102979104,0,0.0,160,163,163,0.08112433299999999
+200,25,5,1.25,6,3.85,"(50, 100)","(0, 50)",gale_shapley,2,83.64763560342452,59.33503836317136,32.83208020050126,8.66104539109626,0,0.0,164,166,166,0.08010516699999926
+200,25,5,1.25,6,3.85,"(50, 100)","(0, 50)",gale_shapley,3,84.29692285939076,62.77173913043478,33.5195530726257,6.345514555625301,0,0.0,177,177,178,0.07985812499999945
+200,25,5,1.25,6,3.85,"(50, 100)","(0, 50)",gale_shapley,4,84.77517759685563,57.24815724815725,39.27648578811369,7.345778318816977,0,0.0,162,162,162,0.08135008299999846
+200,25,5,1.25,9,2.6,"(50, 100)","(0, 50)",gale_shapley,0,96.81577377398429,76.94704049844236,14.953271028037392,0.4333113028893472,0,0.0,199,199,200,0.08077962499999991
+200,25,5,1.25,9,2.6,"(50, 100)","(0, 50)",gale_shapley,1,96.8258650535444,79.94350282485875,12.13720316622691,0.4626044770568084,0,0.0,197,199,200,0.08094854199999979
+200,25,5,1.25,9,2.6,"(50, 100)","(0, 50)",gale_shapley,2,97.1150636249611,80.39702233250621,11.6279069767442,0.4371968153120116,0,0.0,197,197,198,0.08035395799999989
+200,25,5,1.25,9,2.6,"(50, 100)","(0, 50)",gale_shapley,3,96.87664055032961,79.94011976047905,17.664670658682624,0.47145038699342867,0,0.0,196,198,199,0.08107479099999892
+200,25,5,1.25,9,2.6,"(50, 100)","(0, 50)",gale_shapley,4,97.02072026844893,82.63473053892216,8.620689655172413,0.3335849275676764,0,0.0,198,199,199,0.08029858299999937
+200,25,5,1.25,9,3.85,"(50, 100)","(0, 50)",gale_shapley,0,90.65517397209514,69.67213114754098,21.823204419889507,3.0390619445391764,0,0.0,196,196,196,0.08131750000000082
+200,25,5,1.25,9,3.85,"(50, 100)","(0, 50)",gale_shapley,1,90.78234447507397,67.80104712041884,20.370370370370367,2.928417721511945,0,0.0,191,191,191,0.0808099999999996
+200,25,5,1.25,9,3.85,"(50, 100)","(0, 50)",gale_shapley,2,91.05842498882616,64.43298969072166,26.956521739130423,2.749743640661751,0,0.0,192,193,193,0.08096624999999946
+200,25,5,1.25,9,3.85,"(50, 100)","(0, 50)",gale_shapley,3,90.46864169197126,64.58333333333334,27.380952380952365,3.0037768944765064,0,0.0,192,194,194,0.08104970800000011
+200,25,5,1.25,9,3.85,"(50, 100)","(0, 50)",gale_shapley,4,91.33678968832199,71.62162162162163,24.012158054711236,2.0096026535454734,0,0.0,195,195,195,0.08277629200000014
+200,25,5,1.5,6,2.6,"(50, 100)","(0, 50)",gale_shapley,0,95.5129819835323,79.53216374269006,12.87128712871288,0.7663415223927488,0,0.0,191,195,198,0.08029179200000058
+200,25,5,1.5,6,2.6,"(50, 100)","(0, 50)",gale_shapley,1,95.15676419061687,73.61111111111111,16.717325227963514,1.0260536173131638,0,0.0,189,190,196,0.08025758299999985
+200,25,5,1.5,6,2.6,"(50, 100)","(0, 50)",gale_shapley,2,94.86458648100954,75.78347578347578,19.65811965811966,1.326608165208296,0,0.0,188,189,195,0.08057633299999978
+200,25,5,1.5,6,2.6,"(50, 100)","(0, 50)",gale_shapley,3,94.92459681658255,74.05405405405405,19.729729729729726,1.278829537799991,0,0.0,190,191,194,0.07996504099999946
+200,25,5,1.5,6,2.6,"(50, 100)","(0, 50)",gale_shapley,4,95.17605243042556,77.03488372093024,17.759562841530055,1.1575013707410355,0,0.0,187,187,195,0.0812066660000017
+200,25,5,1.5,6,3.85,"(50, 100)","(0, 50)",gale_shapley,0,88.32279597521723,60.73298429319372,33.50785340314136,5.3110565736806015,0,0.0,180,181,181,0.08053649999999912
+200,25,5,1.5,6,3.85,"(50, 100)","(0, 50)",gale_shapley,1,87.66128901492677,60.313315926892955,36.06965174129355,6.600389887382716,0,0.0,177,179,179,0.0817404169999989
+200,25,5,1.5,6,3.85,"(50, 100)","(0, 50)",gale_shapley,2,87.05234909570564,64.84375,28.79464285714286,6.571038320789221,0,0.0,183,183,183,0.08013062500000068
+200,25,5,1.5,6,3.85,"(50, 100)","(0, 50)",gale_shapley,3,87.55600492864927,62.77173913043478,33.5195530726257,5.668633978932357,0,0.0,189,189,189,0.0811440000000001
+200,25,5,1.5,6,3.85,"(50, 100)","(0, 50)",gale_shapley,4,87.94119121082973,57.36434108527132,39.27648578811369,6.422448133076156,0,0.0,181,181,182,0.0813166669999994
+200,25,5,1.5,9,2.6,"(50, 100)","(0, 50)",gale_shapley,0,98.82419344112306,89.87730061349694,5.384615384615387,0.0846270455828853,0,0.0,200,200,200,0.08161183400000027
+200,25,5,1.5,9,2.6,"(50, 100)","(0, 50)",gale_shapley,1,98.74667320413289,87.82608695652175,9.275362318840564,0.13830116348225865,0,0.0,200,200,200,0.08039154200000098
+200,25,5,1.5,9,2.6,"(50, 100)","(0, 50)",gale_shapley,2,99.08897378711941,92.02279202279202,3.225806451612897,0.03620652052792721,0,0.0,200,200,200,0.08038670799999892
+200,25,5,1.5,9,2.6,"(50, 100)","(0, 50)",gale_shapley,3,98.87727281181458,89.65517241379311,6.51558073654391,0.06718176483289064,0,0.0,200,200,200,0.08169795799999946
+200,25,5,1.5,9,2.6,"(50, 100)","(0, 50)",gale_shapley,4,98.89963275932615,90.70422535211267,8.620689655172413,0.11346038456970434,0,0.0,200,200,200,0.08089574999999982
+200,25,5,1.5,9,3.85,"(50, 100)","(0, 50)",gale_shapley,0,94.24862121125308,75.8530183727034,16.535433070866148,1.502960211714369,0,0.0,199,200,200,0.08092800000000011
+200,25,5,1.5,9,3.85,"(50, 100)","(0, 50)",gale_shapley,1,94.25620382106622,69.62750716332378,17.15976331360946,1.8466707115279137,0,0.0,196,196,196,0.08094304199999769
+200,25,5,1.5,9,3.85,"(50, 100)","(0, 50)",gale_shapley,2,94.4727848564491,74.71910112359551,17.69662921348315,1.4003942559256972,0,0.0,198,198,198,0.08234824999999901
+200,25,5,1.5,9,3.85,"(50, 100)","(0, 50)",gale_shapley,3,93.96593830468333,64.58333333333334,27.380952380952365,1.9685291517368144,0,0.0,195,196,196,0.08160258300000223
+200,25,5,1.5,9,3.85,"(50, 100)","(0, 50)",gale_shapley,4,94.61272964259673,73.47560975609755,21.34146341463415,1.6637261165952264,0,0.0,197,197,197,0.08122041700000082
+300,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",gale_shapley,0,90.44383782677377,64.81481481481481,26.71957671957672,3.195590713183483,0,0.0,250,252,273,0.16102200000000266
+300,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",gale_shapley,1,90.52410538393833,63.51706036745407,29.133858267716526,3.389494596954995,0,0.0,257,257,273,0.16072645900000282
+300,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",gale_shapley,2,90.44606495834758,65.4696132596685,25.414364640883974,3.254018940217646,0,0.0,253,254,275,0.16075183299999907
+300,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",gale_shapley,3,90.4483747318497,70.22332506203473,23.529411764705884,3.083340220547799,0,0.0,259,261,276,0.16204837500000124
+300,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",gale_shapley,4,90.41520510505673,65.67567567567568,23.342175066313004,3.407842189469743,0,0.0,251,252,275,0.1606474999999996
+300,25,5,1.1,6,3.85,"(50, 100)","(0, 50)",gale_shapley,0,82.44852657912396,55.961070559610704,37.437185929648244,9.270176305027803,0,0.0,233,233,233,0.16256199999999765
+300,25,5,1.1,6,3.85,"(50, 100)","(0, 50)",gale_shapley,1,82.47778997679353,57.291666666666664,31.64556962025317,9.324117119878089,0,0.0,236,239,240,0.20370179200000038
+300,25,5,1.1,6,3.85,"(50, 100)","(0, 50)",gale_shapley,2,82.05728544656536,52.05811138014528,44.794188861985475,10.097739068681724,0,0.0,235,236,236,0.1614036669999983
+300,25,5,1.1,6,3.85,"(50, 100)","(0, 50)",gale_shapley,3,82.37344755521146,54.54545454545454,33.492822966507184,7.374112738330614,0,0.0,248,248,249,0.16179870800000273
+300,25,5,1.1,6,3.85,"(50, 100)","(0, 50)",gale_shapley,4,82.66347617636784,55.582524271844655,39.27648578811369,8.996142179789377,0,0.0,231,231,231,0.16041033299999796
+300,25,5,1.1,9,2.6,"(50, 100)","(0, 50)",gale_shapley,0,94.91403796783541,75.49295774647888,18.181818181818187,0.9911430445491072,0,0.0,291,292,295,0.16378937500000035
+300,25,5,1.1,9,2.6,"(50, 100)","(0, 50)",gale_shapley,1,95.45167046189096,72.03389830508475,17.971014492753625,0.7976232869516525,0,0.0,294,295,296,0.16236766699999805
+300,25,5,1.1,9,2.6,"(50, 100)","(0, 50)",gale_shapley,2,95.26381529182099,68.18181818181817,21.590909090909093,0.9441127198228184,0,0.0,292,293,294,0.16246462499999836
+300,25,5,1.1,9,2.6,"(50, 100)","(0, 50)",gale_shapley,3,95.51230301617714,76.94524495677233,17.664670658682624,0.7942209768049835,0,0.0,288,295,297,0.1617934589999983
+300,25,5,1.1,9,2.6,"(50, 100)","(0, 50)",gale_shapley,4,95.25159726867464,72.15568862275448,19.46107784431139,0.8163094549597741,0,0.0,291,293,296,0.16354616600000327
+300,25,5,1.1,9,3.85,"(50, 100)","(0, 50)",gale_shapley,0,87.72619970875195,57.34870317002881,37.17579250720462,4.4827615817243975,0,0.0,284,286,286,0.16468570900000046
+300,25,5,1.1,9,3.85,"(50, 100)","(0, 50)",gale_shapley,1,88.52098204485767,62.33062330623306,29.268292682926834,3.8569741725294193,0,0.0,282,282,282,0.1629623339999995
+300,25,5,1.1,9,3.85,"(50, 100)","(0, 50)",gale_shapley,2,88.09868715337988,61.684782608695656,29.041916167664667,4.4946682667998,0,0.0,281,281,281,0.163033875
+300,25,5,1.1,9,3.85,"(50, 100)","(0, 50)",gale_shapley,3,88.34350893938175,62.05962059620597,28.57142857142857,4.38807430606958,0,0.0,279,281,282,0.1631934159999986
+300,25,5,1.1,9,3.85,"(50, 100)","(0, 50)",gale_shapley,4,88.95618487107225,60.099750623441395,29.639889196675895,3.338964430527342,0,0.0,287,287,287,0.1614157089999999
+300,25,5,1.25,6,2.6,"(50, 100)","(0, 50)",gale_shapley,0,92.43253074144991,64.81481481481481,26.71957671957672,2.340543437880036,0,0.0,270,271,284,0.16268541700000227
+300,25,5,1.25,6,2.6,"(50, 100)","(0, 50)",gale_shapley,1,92.48653436756564,71.23287671232876,22.1606648199446,2.3085307852201824,0,0.0,273,274,286,0.16184762500000005
+300,25,5,1.25,6,2.6,"(50, 100)","(0, 50)",gale_shapley,2,92.40698845250662,72.89156626506023,22.383720930232556,2.4000394204216953,0,0.0,266,268,283,0.16261733300000003
+300,25,5,1.25,6,2.6,"(50, 100)","(0, 50)",gale_shapley,3,92.29660347199452,72.06703910614524,20.949720670391073,2.2896360460165703,0,0.0,273,275,285,0.16068183399999825
+300,25,5,1.25,6,2.6,"(50, 100)","(0, 50)",gale_shapley,4,92.40835454873293,66.84350132625994,24.781341107871725,2.481944385390357,0,0.0,269,269,285,0.16019408400000046
+300,25,5,1.25,6,3.85,"(50, 100)","(0, 50)",gale_shapley,0,84.59978709655405,55.961070559610704,33.57664233576642,8.069841263818864,0,0.0,248,249,249,0.16025312500000055
+300,25,5,1.25,6,3.85,"(50, 100)","(0, 50)",gale_shapley,1,84.55360446823532,58.072916666666664,36.06965174129355,9.182313437725893,0,0.0,248,252,253,0.16428395799999862
+300,25,5,1.25,6,3.85,"(50, 100)","(0, 50)",gale_shapley,2,84.2662475413897,61.111111111111114,33.41968911917098,8.4114131225523,0,0.0,253,254,254,0.16305291699999813
+300,25,5,1.25,6,3.85,"(50, 100)","(0, 50)",gale_shapley,3,84.50118248786151,59.35960591133005,34.23913043478261,7.100772845647693,0,0.0,264,265,266,0.16378625000000113
+300,25,5,1.25,6,3.85,"(50, 100)","(0, 50)",gale_shapley,4,84.68685575243042,57.24815724815725,39.27648578811369,8.032190849727327,0,0.0,249,249,249,0.1612461670000016
+300,25,5,1.25,9,2.6,"(50, 100)","(0, 50)",gale_shapley,0,96.88917953082473,76.94704049844236,14.953271028037392,0.5426201695604249,0,0.0,294,296,297,0.16162941600000025
+300,25,5,1.25,9,2.6,"(50, 100)","(0, 50)",gale_shapley,1,97.2147876129128,83.89830508474576,7.317073170731703,0.33138667551725975,0,0.0,299,299,300,0.1760910000000031
+300,25,5,1.25,9,2.6,"(50, 100)","(0, 50)",gale_shapley,2,97.11853587692258,74.03846153846155,20.19230769230768,0.49966303600106243,0,0.0,296,297,298,0.16354033400000034
+300,25,5,1.25,9,2.6,"(50, 100)","(0, 50)",gale_shapley,3,97.28680970162445,79.94011976047905,17.664670658682624,0.4253110837983063,0,0.0,296,298,298,0.16299025
+300,25,5,1.25,9,2.6,"(50, 100)","(0, 50)",gale_shapley,4,96.98033040005713,72.15568862275448,19.46107784431139,0.47867882637949494,0,0.0,296,298,298,0.16049704099999929
+300,25,5,1.25,9,3.85,"(50, 100)","(0, 50)",gale_shapley,0,90.28714623205748,61.42131979695431,29.94923857868021,3.920422950276972,0,0.0,291,292,292,0.17779887500000058
+300,25,5,1.25,9,3.85,"(50, 100)","(0, 50)",gale_shapley,1,90.96172199812945,67.80104712041884,27.065527065527064,3.0369738609558823,0,0.0,285,285,285,0.16367654100000095
+300,25,5,1.25,9,3.85,"(50, 100)","(0, 50)",gale_shapley,2,90.65471648867259,66.26506024096386,28.020565552699225,3.6625025812539813,0,0.0,286,287,287,0.1620375420000002
+300,25,5,1.25,9,3.85,"(50, 100)","(0, 50)",gale_shapley,3,90.90471986294618,62.05962059620597,32.38341968911916,3.358793537579509,0,0.0,288,288,288,0.1624519169999985
+300,25,5,1.25,9,3.85,"(50, 100)","(0, 50)",gale_shapley,4,91.31824561154025,71.62162162162163,24.012158054711236,2.609185663605078,0,0.0,293,294,294,0.1616491670000002
+300,25,5,1.5,6,2.6,"(50, 100)","(0, 50)",gale_shapley,0,95.2139854186147,78.63013698630137,16.4179104477612,1.2961687618475615,0,0.0,287,290,296,0.16541291700000116
+300,25,5,1.5,6,2.6,"(50, 100)","(0, 50)",gale_shapley,1,95.10397228282979,79.93920972644378,16.717325227963514,1.4700018171678952,0,0.0,287,289,297,0.16145358300000012
+300,25,5,1.5,6,2.6,"(50, 100)","(0, 50)",gale_shapley,2,95.10870472627255,72.89156626506023,21.686746987951807,1.6175203537482188,0,0.0,280,282,289,0.16201112499999937
+300,25,5,1.5,6,2.6,"(50, 100)","(0, 50)",gale_shapley,3,94.93909835103311,74.85207100591717,16.949152542372886,1.5385485515626138,0,0.0,286,287,291,0.16116937500000006
+300,25,5,1.5,6,2.6,"(50, 100)","(0, 50)",gale_shapley,4,95.09499419468575,71.7201166180758,26.530612244897952,1.3906306154430097,0,0.0,282,282,293,0.16028204199999863
+300,25,5,1.5,6,3.85,"(50, 100)","(0, 50)",gale_shapley,0,87.90069425150539,59.480519480519476,38.02083333333332,6.513893472097042,0,0.0,272,272,272,0.16119837500000145
+300,25,5,1.5,6,3.85,"(50, 100)","(0, 50)",gale_shapley,1,87.84543358851109,60.313315926892955,36.06965174129355,7.0201492350802175,0,0.0,273,275,276,0.17168170900000135
+300,25,5,1.5,6,3.85,"(50, 100)","(0, 50)",gale_shapley,2,87.55363683972142,62.43523316062176,33.67875647668393,7.349628496774373,0,0.0,273,273,273,0.20828220900000005
+300,25,5,1.5,6,3.85,"(50, 100)","(0, 50)",gale_shapley,3,87.77004641726238,61.61879895561357,33.5195530726257,5.9728783159682814,0,0.0,284,285,285,0.22895349999999937
+300,25,5,1.5,6,3.85,"(50, 100)","(0, 50)",gale_shapley,4,87.85634005140113,57.24815724815725,39.31203931203931,7.255923918871748,0,0.0,275,276,276,0.17178516599999938
+300,25,5,1.5,9,2.6,"(50, 100)","(0, 50)",gale_shapley,0,98.92852384908214,90.38461538461539,6.997084548104951,0.08968962270290078,0,0.0,300,300,300,0.16837933300000074
+300,25,5,1.5,9,2.6,"(50, 100)","(0, 50)",gale_shapley,1,98.93790903952305,86.72086720867209,8.563535911602202,0.1668106007693046,0,0.0,300,300,300,0.21018583299999705
+300,25,5,1.5,9,2.6,"(50, 100)","(0, 50)",gale_shapley,2,99.0646902795822,92.02279202279202,4.3988269794721475,0.06475754798459121,0,0.0,300,300,300,0.16700037500000064
+300,25,5,1.5,9,2.6,"(50, 100)","(0, 50)",gale_shapley,3,99.05836562641296,93.06666666666666,3.6144578313252964,0.07248349819364279,0,0.0,300,300,300,0.16206649999999811
+300,25,5,1.5,9,2.6,"(50, 100)","(0, 50)",gale_shapley,4,98.89128860166431,87.25961538461539,7.042253521126767,0.15229296332505105,0,0.0,300,300,300,0.1950802920000001
+300,25,5,1.5,9,3.85,"(50, 100)","(0, 50)",gale_shapley,0,94.00395658087571,75.8530183727034,20.472440944881896,2.2091479186142124,0,0.0,298,299,299,0.18247233299999976
+300,25,5,1.5,9,3.85,"(50, 100)","(0, 50)",gale_shapley,1,94.45175145337782,72.48520710059172,26.851851851851848,1.9044658828285514,0,0.0,296,296,296,0.16143454199999852
+300,25,5,1.5,9,3.85,"(50, 100)","(0, 50)",gale_shapley,2,94.22928311594254,74.71910112359551,17.69662921348315,2.199458364420277,0,0.0,297,298,298,0.16202937499999948
+300,25,5,1.5,9,3.85,"(50, 100)","(0, 50)",gale_shapley,3,94.459835020266,64.58333333333334,30.95238095238095,2.072140162644666,0,0.0,295,296,296,0.16300058299999876
+300,25,5,1.5,9,3.85,"(50, 100)","(0, 50)",gale_shapley,4,94.6573449390455,73.71428571428571,21.42857142857143,1.7111197651192478,0,0.0,297,297,297,0.16252162500000011
100,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",utilitarian_matching,1,90.46266823624113,72.77777777777777,13.63636363636364,1.5098292614546187,0,0.0,83,84,91,0.5025423000333831
100,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",utilitarian_matching,2,90.66139355620881,74.71264367816092,15.34772182254197,1.1566266260879317,0,0.0,85,86,95,0.41050120000727475
100,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",utilitarian_matching,3,90.54056073413525,73.48066298342542,23.180592991913755,1.534518839391132,0,0.0,88,88,93,0.42110229993704706
@@ -3105,4 +3293,4 @@ num_of_agents,num_of_items,agent_capacity,supply_ratio,num_of_popular_items,mean
100,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",iterated_maximum_matching_unadjusted,0,90.69800944892519,73.91304347826086,4.926108374384242,0.2530781252975517,0,0.0,100,100,100,0.7979893999872729
100,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",iterated_maximum_matching_unadjusted,1,90.05898169298018,75.75057736720554,7.6530612244897895,0.28109584936391385,0,0.0,98,100,100,0.9945702999830246
100,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",iterated_maximum_matching_unadjusted,2,90.31369025023268,76.63755458515283,4.092071611253203,0.24592381006821384,0,0.0,100,100,100,0.7193849000614136
-100,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",iterated_maximum_matching_unadjusted,3,90.17477726567944,76.06837606837607,6.43564356435644,0.27102276919757345,0,0.0,100,100,100,0.7424426999641582
\ No newline at end of file
+100,25,5,1.1,6,2.6,"(50, 100)","(0, 50)",iterated_maximum_matching_unadjusted,3,90.17477726567944,76.06837606837607,6.43564356435644,0.27102276919757345,0,0.0,100,100,100,0.7424426999641582
diff --git a/experiments/results/course_allocation_szws_egalitarian_value.png b/experiments/results/course_allocation_szws_egalitarian_value.png
new file mode 100644
index 0000000..e54ddf2
Binary files /dev/null and b/experiments/results/course_allocation_szws_egalitarian_value.png differ
diff --git a/experiments/results/course_allocation_szws_max_deficit.png b/experiments/results/course_allocation_szws_max_deficit.png
new file mode 100644
index 0000000..794545e
Binary files /dev/null and b/experiments/results/course_allocation_szws_max_deficit.png differ
diff --git a/experiments/results/course_allocation_szws_max_envy.png b/experiments/results/course_allocation_szws_max_envy.png
new file mode 100644
index 0000000..9977dcf
Binary files /dev/null and b/experiments/results/course_allocation_szws_max_envy.png differ
diff --git a/experiments/results/course_allocation_szws_mean_deficit.png b/experiments/results/course_allocation_szws_mean_deficit.png
new file mode 100644
index 0000000..2561bc8
Binary files /dev/null and b/experiments/results/course_allocation_szws_mean_deficit.png differ
diff --git a/experiments/results/course_allocation_szws_mean_envy.png b/experiments/results/course_allocation_szws_mean_envy.png
new file mode 100644
index 0000000..6420fb8
Binary files /dev/null and b/experiments/results/course_allocation_szws_mean_envy.png differ
diff --git a/experiments/results/course_allocation_szws_num_with_top_1.png b/experiments/results/course_allocation_szws_num_with_top_1.png
new file mode 100644
index 0000000..e81c975
Binary files /dev/null and b/experiments/results/course_allocation_szws_num_with_top_1.png differ
diff --git a/experiments/results/course_allocation_szws_num_with_top_2.png b/experiments/results/course_allocation_szws_num_with_top_2.png
new file mode 100644
index 0000000..73c0035
Binary files /dev/null and b/experiments/results/course_allocation_szws_num_with_top_2.png differ
diff --git a/experiments/results/course_allocation_szws_num_with_top_3.png b/experiments/results/course_allocation_szws_num_with_top_3.png
new file mode 100644
index 0000000..6c08855
Binary files /dev/null and b/experiments/results/course_allocation_szws_num_with_top_3.png differ
diff --git a/experiments/results/course_allocation_szws_runtime.png b/experiments/results/course_allocation_szws_runtime.png
new file mode 100644
index 0000000..5758fba
Binary files /dev/null and b/experiments/results/course_allocation_szws_runtime.png differ
diff --git a/experiments/results/course_allocation_szws_utilitarian_value.png b/experiments/results/course_allocation_szws_utilitarian_value.png
new file mode 100644
index 0000000..1ef8abe
Binary files /dev/null and b/experiments/results/course_allocation_szws_utilitarian_value.png differ
diff --git a/experiments/results/course_allocation_uniform.csv b/experiments/results/course_allocation_uniform.csv
index 9aa38bc..f1d6daa 100644
--- a/experiments/results/course_allocation_uniform.csv
+++ b/experiments/results/course_allocation_uniform.csv
@@ -219,7 +219,7 @@ num_of_agents,num_of_items,value_noise_ratio,algorithm,random_seed,utilitarian_v
200,25,0.0,serial_dictatorship,2,49.80459487053312,0.0,100.0,49.61030898868015,6,1.0,50,55,58,0.0610566000104881
200,25,0.0,serial_dictatorship,3,50.82567280607203,0.0,100.0,47.85266090045614,6,1.0,62,65,72,0.0627732999855652
200,25,0.0,serial_dictatorship,4,42.09615523908028,0.0,100.0,57.82713575227776,6,1.0,42,45,48,0.0623118000221438
-200,25,0.0,round_robin,0,55.39513387311314,40.78947368421053,22.139303482587074,6.471775918547442,1,1.0,146,184,200,0.0594282000092789
+200,25,0.0,round_robin,0,55.39513387311314,40.78947368421053,22.13930348258707,6.471775918547442,1,1.0,146,184,200,0.0594282000092789
200,25,0.0,round_robin,1,64.14445217482276,48.87780548628429,16.75392670157069,5.466047682529152,1,1.0,179,200,200,0.0657957999501377
200,25,0.0,round_robin,2,55.419251505453325,37.389380530973455,20.27649769585253,6.468798852967918,1,1.0,167,194,200,0.0718458999763242
200,25,0.0,round_robin,3,55.89998984651763,42.45283018867924,20.72072072072072,7.080802732839159,1,1.0,187,200,200,0.0724450999987311
@@ -422,7 +422,7 @@ num_of_agents,num_of_items,value_noise_ratio,algorithm,random_seed,utilitarian_v
300,25,0.0,round_robin,0,37.08461789017242,25.657894736842103,24.65437788018433,9.84131244722116,3,2.6666666666666665,156,222,274,0.1130971999955363
300,25,0.0,round_robin,1,43.05496940216578,30.423280423280424,20.43010752688172,7.734616878328352,3,2.6666666666666665,212,277,293,0.106700100004673
300,25,0.0,round_robin,2,37.05673020977912,24.16107382550336,23.07692307692308,8.065436124484494,3,2.6666666666666665,191,248,273,0.1072726999991573
-300,25,0.0,round_robin,3,37.27241794578104,25.476190476190474,20.14925373134328,8.91370823373532,3,2.6666666666666665,217,272,298,0.1071146000176668
+300,25,0.0,round_robin,3,37.27241794578104,25.47619047619047,20.14925373134328,8.91370823373532,3,2.6666666666666665,217,272,298,0.1071146000176668
300,25,0.0,round_robin,4,31.688928775480537,16.83366733466934,23.719165085389,8.243968694128311,3,2.6666666666666665,149,195,224,0.1071738000027835
300,25,0.0,bidirectional_round_robin,0,36.90936951633008,30.205949656750576,15.4228855721393,4.299837875049376,3,2.6666666666666665,156,222,274,0.1064907999825663
300,25,0.0,bidirectional_round_robin,1,42.77118596637503,31.56626506024096,12.938005390835578,3.2420014002393747,3,2.6666666666666665,212,277,293,0.1076494000153616
@@ -526,12 +526,12 @@ num_of_agents,num_of_items,value_noise_ratio,algorithm,random_seed,utilitarian_v
300,25,0.8,utilitarian_matching,4,41.28647169243629,0.0,86.80297397769516,31.330537628016657,6,2.6666666666666665,181,205,214,0.4148380000260658
300,25,0.8,iterated_maximum_matching_unadjusted,0,43.81537134205374,28.07017543859649,20.26022304832714,4.444621158950279,3,2.6666666666666665,213,286,297,0.5917126999702305
300,25,0.8,iterated_maximum_matching_unadjusted,1,49.40426460808358,37.47412008281574,15.306122448979586,2.2139330258947623,3,2.6666666666666665,270,297,300,0.5900283000082709
-300,25,0.8,iterated_maximum_matching_unadjusted,2,44.75781574373595,30.134357005758154,15.873015873015872,3.2812052776091467,3,2.6666666666666665,244,292,298,0.5868470999994315
+300,25,0.8,iterated_maximum_matching_unadjusted,2,44.75781574373595,30.13435700575815,15.873015873015872,3.2812052776091467,3,2.6666666666666665,244,292,298,0.5868470999994315
300,25,0.8,iterated_maximum_matching_unadjusted,3,43.37469843858028,30.9021113243762,15.355086372360848,3.960136147502308,3,2.6666666666666665,273,300,300,0.5893803000217304
300,25,0.8,iterated_maximum_matching_unadjusted,4,39.896490599797005,23.711340206185564,16.7910447761194,3.4178658537790656,3,2.6666666666666665,205,260,284,0.5838887999998406
300,25,0.8,iterated_maximum_matching_adjusted,0,43.81537134205374,28.07017543859649,20.26022304832714,4.444621158950279,3,2.6666666666666665,213,286,297,0.7939149999874644
300,25,0.8,iterated_maximum_matching_adjusted,1,49.40426460808358,37.47412008281574,15.306122448979586,2.2139330258947623,3,2.6666666666666665,270,297,300,0.6236257000127807
-300,25,0.8,iterated_maximum_matching_adjusted,2,44.75781574373595,30.134357005758154,15.873015873015872,3.2812052776091467,3,2.6666666666666665,244,292,298,0.5960176999797113
+300,25,0.8,iterated_maximum_matching_adjusted,2,44.75781574373595,30.13435700575815,15.873015873015872,3.2812052776091467,3,2.6666666666666665,244,292,298,0.5960176999797113
300,25,0.8,iterated_maximum_matching_adjusted,3,43.37469843858028,30.9021113243762,15.355086372360848,3.960136147502308,3,2.6666666666666665,273,300,300,0.7446940999943763
300,25,0.8,iterated_maximum_matching_adjusted,4,39.896490599797005,23.711340206185564,16.7910447761194,3.4178658537790656,3,2.6666666666666665,205,260,284,0.5823194999829866
300,25,0.8,serial_dictatorship,0,35.01047824213169,0.0,100.0,60.38303253559529,6,2.6666666666666665,73,83,87,0.1140207999851554
@@ -551,7 +551,7 @@ num_of_agents,num_of_items,value_noise_ratio,algorithm,random_seed,utilitarian_v
300,25,0.8,bidirectional_round_robin,4,36.76792036304611,21.79700499168053,25.84070796460177,4.784362006249035,3,2.6666666666666665,203,242,272,0.1091929000103846
300,25,0.8,almost_egalitarian_without_donation,0,44.10040372015013,17.62376237623762,40.99009900990099,10.307241614842924,5,2.6666666666666665,191,255,280,12.588894300046377
300,25,0.8,almost_egalitarian_without_donation,1,49.91197796160656,29.87551867219917,29.19389978213508,8.361883520390224,4,2.6666666666666665,239,274,292,12.691720100003296
-300,25,0.8,almost_egalitarian_without_donation,2,45.24530896448655,25.547445255474454,35.44857768052516,10.133646745352488,5,2.6666666666666665,206,247,267,12.592786799999883
+300,25,0.8,almost_egalitarian_without_donation,2,45.24530896448655,25.547445255474457,35.44857768052516,10.133646745352488,5,2.6666666666666665,206,247,267,12.592786799999883
300,25,0.8,almost_egalitarian_without_donation,3,43.618547335427714,22.71880819366853,31.471135940409688,9.90584477468822,4,2.6666666666666665,239,277,285,12.51178030000301
300,25,0.8,almost_egalitarian_without_donation,4,40.27882010308413,18.62745098039216,36.8421052631579,11.21753699523339,5,2.6666666666666665,183,230,258,12.336475399963092
300,25,0.8,almost_egalitarian_with_donation,0,44.11471321003086,17.62376237623762,40.99009900990099,10.175386447866812,5,2.6666666666666665,191,256,281,12.320924900006505
@@ -585,7 +585,7 @@ num_of_agents,num_of_items,value_noise_ratio,algorithm,random_seed,utilitarian_v
300,25,1.0,round_robin,3,41.73108191761379,25.63636363636364,25.39432176656151,7.305544960997491,3,2.6666666666666665,276,295,300,0.1086184000014327
300,25,1.0,round_robin,4,38.173411859010166,19.290123456790123,28.45394736842105,8.789931662740132,3,2.6666666666666665,206,250,280,0.1089725000201724
300,25,1.0,bidirectional_round_robin,0,41.460841780013055,28.515625,24.34944237918216,4.32574494014441,3,2.6666666666666665,237,274,297,0.1080712000257335
-300,25,1.0,bidirectional_round_robin,1,47.656758321069695,29.72972972972973,18.599999999999994,2.814159820490278,3,2.6666666666666665,276,299,300,0.1100359000265598
+300,25,1.0,bidirectional_round_robin,1,47.656758321069695,29.72972972972973,18.59999999999999,2.814159820490278,3,2.6666666666666665,276,299,300,0.1100359000265598
300,25,1.0,bidirectional_round_robin,2,42.78573720151452,28.622540250447223,19.18604651162791,3.757206887598629,3,2.6666666666666665,243,280,296,0.1143395999679341
300,25,1.0,bidirectional_round_robin,3,41.50882060817325,32.065217391304344,15.299684542586752,3.3487311283086703,3,2.6666666666666665,276,295,300,0.1116150000016205
300,25,1.0,bidirectional_round_robin,4,37.626936259247934,21.382636655948552,26.809210526315788,4.790153502905161,3,2.6666666666666665,206,250,280,0.1111859999946318
@@ -659,6 +659,81 @@ num_of_agents,num_of_items,value_noise_ratio,algorithm,random_seed,utilitarian_v
8,4,0.2,bidirectional_round_robin,2,100.0,100.0,0.0,0.0,2,2.0,8,8,8,0.0006288000149652
8,4,0.2,bidirectional_round_robin,3,100.0,100.0,0.0,0.0,2,2.0,8,8,8,0.0006845999741926
8,4,0.2,bidirectional_round_robin,4,100.0,100.0,0.0,0.0,2,2.0,8,8,8,0.0009022000012919
+100,25,0.0,gale_shapley,0,92.49677069899921,72.38805970149254,24.875621890547265,4.067563396065733,0,0.0,95,97,98,0.025848250000000017
+100,25,0.0,gale_shapley,1,96.08843582349384,85.51912568306011,13.315217391304358,2.1259056285883178,0,0.0,100,100,100,0.025150208000000007
+100,25,0.0,gale_shapley,2,88.21796183234568,68.06526806526807,27.505827505827497,9.283999069670328,0,0.0,98,99,99,0.024753875000000036
+100,25,0.0,gale_shapley,3,94.22070273294658,79.70297029702971,16.089108910891085,2.9403457512502857,0,0.0,100,100,100,0.025196667000000006
+100,25,0.0,gale_shapley,4,84.5503554699656,57.35294117647059,42.64705882352941,13.04130609679076,0,0.0,95,98,100,0.025031625000000002
+100,25,0.2,gale_shapley,0,94.32817954692482,74.07407407407408,22.46913580246914,2.1920051939043064,0,0.0,98,98,100,0.024973500000000093
+100,25,0.2,gale_shapley,1,97.15046570325181,88.25065274151436,11.749347258485642,0.9658975780566895,0,0.0,100,100,100,0.024828708000000033
+100,25,0.2,gale_shapley,2,90.53361667693449,71.55963302752293,22.477064220183493,6.336751836773719,0,0.0,98,99,100,0.025020417000000017
+100,25,0.2,gale_shapley,3,95.54647827889028,81.88235294117648,14.549653579676658,1.7455699579406463,0,0.0,100,100,100,0.02473225000000001
+100,25,0.2,gale_shapley,4,87.77316400883326,62.421711899791234,36.116910229645086,8.650734589677876,0,0.0,100,100,100,0.025520540999999897
+100,25,0.5,gale_shapley,0,95.93081945685714,75.87719298245614,20.43795620437956,1.2229625020850359,0,0.0,99,99,100,0.02418070800000005
+100,25,0.5,gale_shapley,1,98.1244089445243,89.749430523918,9.876543209876544,0.347017229081018,0,0.0,100,100,100,0.024068584000000115
+100,25,0.5,gale_shapley,2,92.78783397864807,67.49435665914221,27.765237020316036,3.6196651870400394,0,0.0,100,100,100,0.024186625000000017
+100,25,0.5,gale_shapley,3,96.6944153403077,80.25751072961373,13.090128755364816,0.9290921938933687,0,0.0,100,100,100,0.0240263329999999
+100,25,0.5,gale_shapley,4,90.91221176422594,69.23076923076923,27.45490981963927,5.0828410002357804,0,0.0,100,100,100,0.02552412500000001
+100,25,0.8,gale_shapley,0,96.8495730423398,76.7590618336887,18.22541966426857,0.7677898316846451,0,0.0,99,100,100,0.02393258300000012
+100,25,0.8,gale_shapley,1,98.65849839370749,90.71925754060325,8.120649651972158,0.1311774897758309,0,0.0,100,100,100,0.023136041999999968
+100,25,0.8,gale_shapley,2,94.46074345828363,78.28947368421053,15.13157894736841,1.7122182680258413,0,0.0,100,100,100,0.025657708
+100,25,0.8,gale_shapley,3,97.52083842325196,85.04672897196261,5.454545454545453,0.38822490570414914,0,0.0,100,100,100,0.023986958000000058
+100,25,0.8,gale_shapley,4,92.94669540174702,72.5925925925926,25.454545454545453,3.135201253069527,0,0.0,100,100,100,0.024703417000000005
+100,25,1.0,gale_shapley,0,97.42687741815625,77.35849056603774,15.130023640661946,0.5728148059101931,0,0.0,99,100,100,0.023882166999999788
+100,25,1.0,gale_shapley,1,98.86432154573045,91.25560538116592,6.9506726457399,0.08948619689384245,0,0.0,100,100,100,0.023535749999999966
+100,25,1.0,gale_shapley,2,95.1793351324711,74.89451476793249,18.776371308016877,1.3225934257189487,0,0.0,100,100,100,0.023185624999999987
+100,25,1.0,gale_shapley,3,97.80491413980747,84.375,11.5234375,0.3680213672159715,0,0.0,100,100,100,0.023217708000000004
+100,25,1.0,gale_shapley,4,93.95755787465463,74.68581687612208,24.420677361853834,1.9830789037876384,0,0.0,100,100,100,0.023875917000000024
+200,25,0.0,gale_shapley,0,58.263144842915096,0.0,77.15617715617715,22.380890809228298,6,1.0,131,162,182,0.08139683300000011
+200,25,0.0,gale_shapley,1,66.83386265719817,0.0,92.1259842519685,25.15464313186476,6,1.0,156,179,187,0.08326779200000001
+200,25,0.0,gale_shapley,2,58.263339983546274,7.322654462242563,84.89702517162472,30.076088682136046,5,1.0,147,165,170,0.08156079199999988
+200,25,0.0,gale_shapley,3,58.58552423359339,0.0,90.93137254901961,26.421131127031114,6,1.0,172,181,186,0.08414754199999996
+200,25,0.0,gale_shapley,4,50.79621534648443,0.0,83.02658486707567,29.214193410945114,6,1.0,130,147,158,0.0802070410000002
+200,25,0.2,gale_shapley,0,60.32544134093094,0.0,82.53588516746412,21.15048293084276,6,1.0,146,173,182,0.08294666699999986
+200,25,0.2,gale_shapley,1,68.70322976038881,13.984168865435356,81.79419525065963,21.479410434852543,5,1.0,168,182,188,0.08506158300000033
+200,25,0.2,gale_shapley,2,60.886834130242384,0.0,82.07964601769912,24.389618618397794,6,1.0,153,167,173,0.08341133299999992
+200,25,0.2,gale_shapley,3,60.364907578366484,0.0,88.09523809523809,23.4415151288397,6,1.0,174,183,187,0.08498437499999989
+200,25,0.2,gale_shapley,4,53.61607244812601,0.9380863039399625,85.91836734693877,26.76747321587795,5,1.0,138,156,168,0.08167829199999987
+200,25,0.5,gale_shapley,0,62.556495883775106,0.0,82.56880733944955,17.06871662879491,6,1.0,156,179,186,0.08394812500000004
+200,25,0.5,gale_shapley,1,70.6453418035562,0.0,86.60287081339713,17.87335873221818,6,1.0,172,182,187,0.08496637500000004
+200,25,0.5,gale_shapley,2,63.76601422084884,0.0,90.5982905982906,21.488770179762827,6,1.0,164,176,178,0.08546416700000004
+200,25,0.5,gale_shapley,3,62.35612545610845,0.0,88.31460674157303,21.21505426493055,6,1.0,183,188,190,0.0861720840000002
+200,25,0.5,gale_shapley,4,56.5787493697321,0.0,91.51515151515152,22.263095216458552,6,1.0,148,165,171,0.08290299999999995
+200,25,0.8,gale_shapley,0,64.12798983950012,0.0,82.23684210526315,16.574064258122267,6,1.0,159,180,184,0.0840298340000003
+200,25,0.8,gale_shapley,1,72.0964800057888,0.0,88.46153846153845,16.15930451627772,6,1.0,173,182,187,0.08537183299999995
+200,25,0.8,gale_shapley,2,65.77671441648296,0.0,84.59770114942529,17.483265210818583,6,1.0,169,177,183,0.08560037500000028
+200,25,0.8,gale_shapley,3,63.842070626304974,0.0,86.87089715536105,19.52463082464706,6,1.0,181,185,187,0.08609974999999981
+200,25,0.8,gale_shapley,4,58.65267698308432,0.0,91.699604743083,20.511374949198398,6,1.0,154,170,173,0.08647812499999974
+200,25,1.0,gale_shapley,0,64.88187121405679,0.0,84.0670859538784,17.15216937979489,6,1.0,168,181,183,0.08537408400000013
+200,25,1.0,gale_shapley,1,72.82519613555968,0.0,83.88520971302428,15.141348521620671,6,1.0,173,184,188,0.08496466599999986
+200,25,1.0,gale_shapley,2,66.81234314374346,0.0,88.51351351351352,16.408762807481622,6,1.0,169,177,182,0.08586745900000015
+200,25,1.0,gale_shapley,3,64.63950232069287,0.0,87.44769874476988,18.868211500076185,6,1.0,180,186,187,0.08457058300000009
+200,25,1.0,gale_shapley,4,59.73421257954176,0.0,93.00970873786407,19.657956740849656,6,1.0,156,170,175,0.08348512500000016
+300,25,0.0,gale_shapley,0,39.72344163298327,0.0,79.22705314009661,34.197159800715745,6,2.6666666666666665,144,189,223,0.138603625
+300,25,0.0,gale_shapley,1,45.543775459111956,0.0,90.02624671916011,42.04269472445284,6,2.6666666666666665,189,229,243,0.13900720799999977
+300,25,0.0,gale_shapley,2,39.80912955641544,0.0,76.39902676399026,33.4149739529616,6,2.6666666666666665,173,212,221,0.13742549999999998
+300,25,0.0,gale_shapley,3,39.731387618722245,0.0,89.63855421686748,39.91718048949528,6,2.6666666666666665,203,223,236,0.13966020900000053
+300,25,0.0,gale_shapley,4,34.764396423420436,0.0,80.46218487394957,37.61611545132006,6,2.6666666666666665,145,175,193,0.13761470899999928
+300,25,0.2,gale_shapley,0,41.389778378150474,0.0,81.48148148148148,31.950484491754846,6,2.6666666666666665,170,205,227,0.13965020799999994
+300,25,0.2,gale_shapley,1,47.09379142592505,0.0,95.77836411609498,36.64741776560305,6,2.6666666666666665,209,237,250,0.14694608300000045
+300,25,0.2,gale_shapley,2,41.891588947516354,0.0,77.96610169491525,30.874100142192802,6,2.6666666666666665,183,214,224,0.14144341699999963
+300,25,0.2,gale_shapley,3,41.15348688582147,0.0,90.58823529411764,37.27655901638151,6,2.6666666666666665,211,229,237,0.14165154199999996
+300,25,0.2,gale_shapley,4,37.0381744996238,0.0,85.18518518518519,34.15139721030079,6,2.6666666666666665,162,189,204,0.13809908300000018
+300,25,0.5,gale_shapley,0,43.22654357599736,0.0,85.09615384615384,30.885889248844386,6,2.6666666666666665,184,214,228,0.14128541600000055
+300,25,0.5,gale_shapley,1,48.859070542189805,0.0,95.23809523809523,32.157446960743876,6,2.6666666666666665,213,241,250,0.14362604200000018
+300,25,0.5,gale_shapley,2,44.25105286805108,0.0,87.12121212121212,30.884090217082665,6,2.6666666666666665,189,215,224,0.14158820799999994
+300,25,0.5,gale_shapley,3,42.717715672280015,0.0,91.87358916478556,35.36412618569946,6,2.6666666666666665,216,230,238,0.14175091600000034
+300,25,0.5,gale_shapley,4,39.503134412251576,0.0,86.64047151277013,33.34223714751684,6,2.6666666666666665,173,198,212,0.14005058399999992
+300,25,0.8,gale_shapley,0,44.51731136486354,0.0,85.09719222462203,31.05803198763208,6,2.6666666666666665,187,221,234,0.1407141249999997
+300,25,0.8,gale_shapley,1,50.10000375034142,0.0,99.76190476190476,31.140721296707174,6,2.6666666666666665,219,242,250,0.14348554200000052
+300,25,0.8,gale_shapley,2,45.905278787541555,0.0,85.36585365853658,28.97847084031857,6,2.6666666666666665,195,219,230,0.14482879100000012
+300,25,0.8,gale_shapley,3,43.95067487503277,0.0,83.54166666666667,31.431237947447663,6,2.6666666666666665,216,229,235,0.14272062499999993
+300,25,0.8,gale_shapley,4,41.28874196110141,0.0,86.80297397769516,31.40130883890528,6,2.6666666666666665,181,203,211,0.1400226249999994
+300,25,1.0,gale_shapley,0,45.176379669808234,0.0,85.38622129436325,30.988869494011972,6,2.6666666666666665,198,224,232,0.1449911660000005
+300,25,1.0,gale_shapley,1,50.814892109480866,0.0,100.0,29.703960098267107,6,2.6666666666666665,223,244,251,0.16631670900000017
+300,25,1.0,gale_shapley,2,46.7731115672324,0.0,89.83050847457628,28.93582603025562,6,2.6666666666666665,195,221,233,0.14500670900000046
+300,25,1.0,gale_shapley,3,44.604923938062086,0.0,82.93172690763052,30.73943914471146,6,2.6666666666666665,217,227,234,0.1656443750000003
+300,25,1.0,gale_shapley,4,42.24904960484787,0.0,85.24271844660194,30.522548966312126,6,2.6666666666666665,184,205,219,0.1414625420000002
5,6,0.2,ACEEI_without_EFTB,0,100.0,100.0,0.0,0.0,0,0.0,5,5,5,0.1032566999783739
5,6,0.2,ACEEI_without_EFTB,1,100.0,100.0,0.0,0.0,0,0.0,5,5,5,0.0074490999104455
5,6,0.2,ACEEI_without_EFTB,2,100.0,100.0,0.0,0.0,0,0.0,5,5,5,0.0081060000229626
diff --git a/fairpyx/algorithms/Gale_Shapley_pareto_dominant_market_mechanism.py b/fairpyx/algorithms/Gale_Shapley_pareto_dominant_market_mechanism.py
new file mode 100644
index 0000000..10cac27
--- /dev/null
+++ b/fairpyx/algorithms/Gale_Shapley_pareto_dominant_market_mechanism.py
@@ -0,0 +1,244 @@
+"""
+"Course bidding at business schools", by Tayfun Sönmez and M. Utku Ünver (2010)
+https://doi.org/10.1111/j.1468-2354.2009.00572.x
+
+Allocate course seats using Gale-Shapley pareto-dominant market mechanism.
+
+Programmer: Zachi Ben Shitrit
+Since: 2024-05
+"""
+
+from fairpyx import AllocationBuilder
+import numpy as np
+from typing import Dict, List, Union
+
+import logging
+logger = logging.getLogger(__name__)
+
+
+def gale_shapley(alloc: AllocationBuilder, course_order_per_student: Union[Dict[str, List[str]], None] = None, tie_braking_lottery: Union[None, Dict[str, float]] = None):
+ """
+ Allocate the given items to the given agents using the Gale-Shapley protocol.
+
+ Parameters:
+ alloc (AllocationBuilder): An allocation builder which tracks agent capacities, item capacities, and valuations.
+ course_order_per_student (Dict[str, List[str]]): A dictionary that matches each agent to their course rankings indicating preferences.
+ tie_braking_lottery (Dict[str, float]): A dictionary that matches each agent to their tie-breaking additive points (sampled from a uniform distribution [0,1]).
+
+ Returns:
+ Dict[str, List[str]]: A dictionary representing the final allocation of courses to students.
+
+ Naive Example:
+ >>> from fairpyx import Instance, AllocationBuilder
+ >>> from fairpyx.adaptors import divide
+ >>> s1 = {"c1": 40, "c2": 60}
+ >>> s2 = {"c1": 70, "c2": 30}
+ >>> s3 = {"c1": 70, "c2": 30}
+ >>> s4 = {"c1": 40, "c2": 60}
+ >>> s5 = {"c1": 50, "c2": 50}
+ >>> agent_capacities = {"Alice": 1, "Bob": 1, "Chana": 1, "Dana": 1, "Dor": 1}
+ >>> course_capacities = {"c1": 3, "c2": 2}
+ >>> valuations = {"Alice": s1, "Bob": s2, "Chana": s3, "Dana": s4, "Dor": s5}
+ >>> course_order_per_student = {"Alice": ["c2", "c1"], "Bob": ["c1", "c2"], "Chana": ["c1", "c2"], "Dana": ["c2", "c1"], "Dor": ["c1", "c2"]}
+ >>> tie_braking_lottery = {"Alice": 0.9, "Bob": 0.1, "Chana": 0.2, "Dana": 0.6, "Dor": 0.4}
+ >>> instance = Instance(agent_capacities=agent_capacities, item_capacities=course_capacities, valuations=valuations)
+ >>> divide(gale_shapley, instance=instance, course_order_per_student=course_order_per_student, tie_braking_lottery=tie_braking_lottery)
+ {'Alice': ['c2'], 'Bob': ['c1'], 'Chana': ['c1'], 'Dana': ['c2'], 'Dor': ['c1']}
+
+
+ Example where the students course order does not align with the bids:
+ >>> s1 = {"c1": 20, "c2": 15, "c3": 35, "c4": 10, "c5": 20}
+ >>> s2 = {"c1": 30, "c2": 15, "c3": 20, "c4": 20, "c5": 15}
+ >>> s3 = {"c1": 40, "c2": 10, "c3": 25, "c4": 10, "c5": 15}
+ >>> s4 = {"c1": 10, "c2": 10, "c3": 15, "c4": 30, "c5": 35}
+ >>> s5 = {"c1": 25, "c2": 20, "c3": 30, "c4": 10, "c5": 15}
+ >>> agent_capacities = {"Alice": 3, "Bob": 3, "Chana": 3, "Dana": 3, "Dor": 3}
+ >>> course_capacities = {"c1": 4, "c2": 4, "c3": 2, "c4": 3, "c5": 2}
+ >>> valuations = {"Alice": s1, "Bob": s2, "Chana": s3, "Dana": s4, "Dor": s5}
+ >>> course_order_per_student = {"Alice": ["c5", "c3", "c1", "c2", "c4"], "Bob": ["c1", "c4", "c5", "c2", "c3"], "Chana": ["c5", "c1", "c4", "c3", "c2"], "Dana": ["c3", "c4", "c1", "c5", "c2"], "Dor": ["c5", "c1", "c4", "c3", "c2"]}
+ >>> tie_braking_lottery = {"Alice": 0.6, "Bob": 0.4, "Chana": 0.3, "Dana": 0.8, "Dor": 0.2}
+ >>> instance = Instance(agent_capacities=agent_capacities, item_capacities=course_capacities, valuations=valuations)
+ >>> divide(gale_shapley, instance=instance, course_order_per_student=course_order_per_student, tie_braking_lottery=tie_braking_lottery)
+ {'Alice': ['c1', 'c3', 'c5'], 'Bob': ['c1', 'c2', 'c4'], 'Chana': ['c1', 'c2', 'c4'], 'Dana': ['c2', 'c4', 'c5'], 'Dor': ['c1', 'c2', 'c3']}
+ """
+
+ # Check if inputs are dictionaries
+ input_to_check_types = [alloc.remaining_agent_capacities, alloc.remaining_item_capacities]
+ for input_to_check in input_to_check_types:
+ if(type(input_to_check) != dict):
+ raise TypeError(f"In the input {input_to_check}, Expected a dict, but got {type(input_to_check).__name__}")
+ if tie_braking_lottery and type(tie_braking_lottery) != dict:
+ raise TypeError(f"In the input tie_braking_lottery, Expected a dict or None, but got {type(tie_braking_lottery).__name__}")
+ if not tie_braking_lottery:
+ tie_braking_lottery = {student : np.random.uniform(low=0, high=1) for student in alloc.remaining_agents()}
+
+ if not course_order_per_student:
+ course_order_per_student = {student : generate_naive_course_order_for_student(student, alloc) for student in alloc.remaining_agents()}
+ logger.info(f"Created course_order_per_student: {course_order_per_student}")
+
+ was_an_offer_declined: bool = True
+ course_to_on_hold_students: Dict[str, Dict[str, float]] = {course: {} for course in alloc.remaining_items()}
+ student_to_rejection_count: Dict[str, int] = {student: alloc.remaining_agent_capacities[student] for student in alloc.remaining_agents()}
+
+ logger.info(f"We have {len(alloc.remaining_agents())} agents")
+ logger.info(f"The students allocation capacities are: {alloc.remaining_agent_capacities}")
+ logger.info(f"The courses capacities are: {alloc.remaining_item_capacities}")
+ logger.info(f"The tie-braking lottery results are: {tie_braking_lottery}")
+ for agent in alloc.remaining_agents():
+ agent_bids = {course: alloc.effective_value(agent, course) for course in alloc.remaining_items()}
+ logger.info(f"Student '{agent}' bids are: {agent_bids}")
+
+ step = 0
+ while(was_an_offer_declined):
+ step += 1
+ logger.info(f"\n *** Starting round #{step} ***")
+ was_an_offer_declined = False
+ logger.info("Each student who is rejected from k > 0 courses in the previous step proposes to his best remaining k courses based on his stated preferences")
+ for student in alloc.remaining_agents():
+ student_capability: int = student_to_rejection_count[student]
+ for index in range(student_capability):
+ if(not course_order_per_student[student]):
+ logger.info(f"Student {student} already proposed to all his desired courses")
+ continue
+ wanted_course = course_order_per_student[student].pop(0)
+ if(wanted_course in course_to_on_hold_students):
+ if(student in course_to_on_hold_students[wanted_course]):
+ continue
+ try:
+ student_to_course_proposal = alloc.effective_value(student, wanted_course)
+ course_to_on_hold_students[wanted_course][student] = student_to_course_proposal
+ logger.info(f"Student '{student} proposes to course {wanted_course} with a bid of {student_to_course_proposal}")
+ except Exception as e:
+ return {}
+
+ logger.info("Each course c considers the new proposals together with the proposals on hold and rejects all but the highest bidding Qc (the maximum capacity of students in course c) students")
+ student_to_rejection_count = {student: 0 for student in alloc.remaining_agents()}
+ for course_name in course_to_on_hold_students:
+ course_capacity = alloc.remaining_item_capacities[course_name]
+ if(type(course_capacity) == np.float64):
+ course_capacity = int(course_capacity)
+ course_to_offerings = course_to_on_hold_students[course_name]
+ logger.info(f"Course {course_name} considers the next offerings: {course_to_offerings}")
+ if len(course_to_offerings) == 0:
+ continue
+ elif len(course_to_offerings) <= course_capacity:
+ continue
+ logger.info("In case there is a tie, the tie-breaking lottery is used to determine who is rejected and who will be kept on hold.")
+ on_hold_students_sorted_and_tie_breaked = sort_and_tie_break(course_to_offerings, tie_braking_lottery)
+ course_to_on_hold_students[course_name].clear()
+ for key, value in on_hold_students_sorted_and_tie_breaked[:course_capacity]:
+ course_to_on_hold_students[course_name][key] = value
+
+ rejected_students = on_hold_students_sorted_and_tie_breaked[course_capacity:]
+ for rejected_student, bid in rejected_students:
+ logger.info(f"Agent '{rejected_student}' was rejected from course {course_name}")
+ student_to_rejection_count[rejected_student] += 1
+ was_an_offer_declined = True
+
+ logger.info("The procedure terminates when no proposal is rejected, and at this stage course assignments are finalized.")
+ final_course_matchings = course_to_on_hold_students.items()
+ for course_name, matching in final_course_matchings:
+ for student, bid in matching.items():
+ alloc.give(student, course_name, logger)
+ logger.info(f"The final course matchings are: {alloc.bundles}")
+
+
+def sort_and_tie_break(input_dict: Dict[str, float], tie_braking_lottery: Dict[str, float]) -> List[tuple[str, float]]:
+ """
+ Sorts a dictionary by its values in descending order and adds a number
+ to the values of keys with the same value to break ties.
+
+ Parameters:
+ input_dict (Dict[str, float]): A dictionary with string keys and float values representing student bids.
+ tie_braking_lottery (Dict[str, float]): A dictionary with string keys and float values for tie-breaking.
+
+ Returns:
+ List[tuple[str, float]]: A list of tuples containing student names and their modified bids, sorted in descending order.
+
+ Examples:
+ >>> input_dict = {"Alice": 45, "Bob": 55, "Chana": 45, "Dana": 60}
+ >>> tie_braking_lottery = {"Alice": 0.3, "Bob": 0.2, "Chana": 0.4, "Dana": 0.1}
+ >>> sort_and_tie_break(input_dict, tie_braking_lottery)
+ [('Dana', 60), ('Bob', 55), ('Chana', 45), ('Alice', 45)]
+ """
+
+
+ # Sort the dictionary by adjusted values in descending order
+ sorted_dict = (sorted(input_dict.items(), key=lambda item: item[1] + tie_braking_lottery[item[0]], reverse=True))
+
+ return sorted_dict
+
+
+def generate_naive_course_order_for_student(student: str, alloc: AllocationBuilder) -> List[str]:
+ """
+ Generate a naive course order for a given student based on the effective value the student assigns to each course.
+
+ Parameters:
+ student (str): The student's name.
+ alloc (AllocationBuilder): An allocation builder which tracks agent capacities, item capacities, and valuations.
+
+ Returns:
+ List[str]: A list of course names sorted by the effective value the student assigns to each course, in descending order.
+
+ Example:
+ >>> from fairpyx import Instance, AllocationBuilder
+ >>> s1 = {"c1": 40, "c2": 60}
+ >>> s2 = {"c1": 70, "c2": 30}
+ >>> s3 = {"c1": 70, "c2": 30}
+ >>> s4 = {"c1": 40, "c2": 60}
+ >>> s5 = {"c1": 50, "c2": 50}
+ >>> agent_capacities = {"Alice": 1, "Bob": 1, "Chana": 1, "Dana": 1, "Dor": 1}
+ >>> course_capacities = {"c1": 3, "c2": 2}
+ >>> valuations = {"Alice": s1, "Bob": s2, "Chana": s3, "Dana": s4, "Dor": s5}
+ >>> course_order_per_student = {"Alice": ["c2", "c1"], "Bob": ["c1", "c2"], "Chana": ["c1", "c2"], "Dana": ["c2", "c1"], "Dor": ["c1", "c2"]}
+ >>> tie_braking_lottery = {"Alice": 0.9, "Bob": 0.1, "Chana": 0.2, "Dana": 0.6, "Dor": 0.4}
+ >>> instance = Instance(agent_capacities=agent_capacities, item_capacities=course_capacities, valuations=valuations)
+ >>> alloc = AllocationBuilder(instance)
+ >>> generate_naive_course_order_for_student("Alice", alloc)
+ ['c2', 'c1']
+ >>> generate_naive_course_order_for_student("Bob", alloc)
+ ['c1', 'c2']
+ >>> generate_naive_course_order_for_student('Chana', alloc)
+ ['c1', 'c2']
+ >>> generate_naive_course_order_for_student('Dana', alloc)
+ ['c2', 'c1']
+ >>> generate_naive_course_order_for_student('Dor', alloc)
+ ['c1', 'c2']
+ """
+ # Get all courses
+ courses: List[str] = alloc.remaining_items()
+
+ # Calculate the effective value of each course for the given student
+ course_values: Dict[str, float] = {course: alloc.effective_value(student, course) for course in courses}
+
+ # Sort the courses by their values in descending order
+ sorted_courses = sorted(course_values.items(), key=lambda item: item[1], reverse=True)
+
+ # Extract the course names from the sorted list of tuples
+ sorted_course_names = [course for course, value in sorted_courses]
+
+ return sorted_course_names
+
+if __name__ == "__main__":
+ import doctest
+ print(doctest.testmod())
+
+ logger.setLevel(logging.DEBUG)
+ logger.addHandler(logging.StreamHandler())
+
+ from fairpyx import Instance, divide
+
+ s1 = {"c1": 20, "c2": 15, "c3": 35, "c4": 10, "c5": 20}
+ s2 = {"c1": 30, "c2": 15, "c3": 20, "c4": 20, "c5": 15}
+ s3 = {"c1": 40, "c2": 10, "c3": 25, "c4": 10, "c5": 15}
+ s4 = {"c1": 10, "c2": 10, "c3": 15, "c4": 30, "c5": 35}
+ s5 = {"c1": 25, "c2": 20, "c3": 30, "c4": 10, "c5": 15}
+ agent_capacities = {"Alice": 3, "Bob": 3, "Chana": 3, "Dana": 3, "Dor": 3}
+ course_capacities = {"c1": 4, "c2": 4, "c3": 2, "c4": 3, "c5": 2}
+ valuations = {"Alice": s1, "Bob": s2, "Chana": s3, "Dana": s4, "Dor": s5}
+ course_order_per_student = {"Alice": ["c5", "c3", "c1", "c2", "c4"], "Bob": ["c1", "c4", "c5", "c2", "c3"], "Chana": ["c5", "c1", "c4", "c3", "c2"], "Dana": ["c3", "c4", "c1", "c5", "c2"], "Dor": ["c5", "c1", "c4", "c3", "c2"]}
+ tie_braking_lottery = {"Alice": 0.6, "Bob": 0.4, "Chana": 0.3, "Dana": 0.8, "Dor": 0.2}
+ instance = Instance(agent_capacities=agent_capacities, item_capacities=course_capacities, valuations=valuations)
+ divide(gale_shapley, instance=instance, course_order_per_student=course_order_per_student, tie_braking_lottery=tie_braking_lottery)
+ {'Alice': ['c1', 'c3', 'c5'], 'Bob': ['c1', 'c2', 'c4'], 'Chana': ['c1', 'c2', 'c4'], 'Dana': ['c2', 'c4', 'c5'], 'Dor': ['c1', 'c2', 'c3']}
+
diff --git a/fairpyx/algorithms/__init__.py b/fairpyx/algorithms/__init__.py
index 376790b..bcb73be 100644
--- a/fairpyx/algorithms/__init__.py
+++ b/fairpyx/algorithms/__init__.py
@@ -2,6 +2,7 @@
from fairpyx.algorithms.iterated_maximum_matching import iterated_maximum_matching, iterated_maximum_matching_adjusted, iterated_maximum_matching_unadjusted
from fairpyx.algorithms.picking_sequence import round_robin, bidirectional_round_robin, serial_dictatorship
from fairpyx.algorithms.utilitarian_matching import utilitarian_matching
+from fairpyx.algorithms.Gale_Shapley_pareto_dominant_market_mechanism import gale_shapley
from fairpyx.algorithms.ACEEI_algorithms.tabu_search import tabu_search
from fairpyx.algorithms.ACEEI_algorithms.ACEEI import find_ACEEI_with_EFTB
from fairpyx.algorithms.ACEEI_algorithms.find_profitable_manipulation import find_profitable_manipulation
diff --git a/pyproject.toml b/pyproject.toml
index 34ca122..5cf6443 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -4,4 +4,4 @@ build-backend = "setuptools.build_meta"
[tool.pytest.ini_options]
minversion = "6.0"
-addopts = "--doctest-modules --ignore=examples/_pweave.py --ignore=experiments --ignore=fairpyx/zalternatives"
+addopts = "--doctest-modules --ignore=examples/_pweave.py --ignore=experiments --ignore=fairpyx/zalternatives --ignore=website_gale_shapley"
diff --git a/tests/test_gale_shapley.py b/tests/test_gale_shapley.py
new file mode 100644
index 0000000..a06eb3c
--- /dev/null
+++ b/tests/test_gale_shapley.py
@@ -0,0 +1,220 @@
+"""
+Test Allocate course seats using Gale-Shapley pareto-dominant market mechanism.
+
+Programmer: Zachi Ben Shitrit
+Since: 2024-05
+"""
+
+import pytest
+import fairpyx
+
+def test_regular_case():
+
+ s1 = {"c1": 40, "c2": 60}
+ s2 = {"c1": 70, "c2": 30}
+ s3 = {"c1": 70, "c2": 30}
+ s4 = {"c1": 40, "c2": 60}
+ s5 = {"c1": 50, "c2": 50}
+ agent_capacities = {"Alice": 1, "Bob": 1, "Chana": 1, "Dana": 1, "Dor": 1}
+ course_capacities = {"c1": 3, "c2": 2}
+ valuations = {"Alice": s1, "Bob": s2, "Chana": s3, "Dana": s4, "Dor": s5}
+ course_order_per_student = {"Alice": ["c2", "c1"], "Bob": ["c1", "c2"], "Chana": ["c1", "c2"], "Dana": ["c2", "c1"], "Dor": ["c1", "c2"]}
+ tie_braking_lottery = {"Alice": 0.9, "Bob": 0.1, "Chana": 0.2, "Dana": 0.6, "Dor": 0.4}
+ instance = fairpyx.Instance(agent_capacities=agent_capacities,
+ item_capacities=course_capacities,
+ valuations=valuations)
+ allocation = fairpyx.divide(fairpyx.algorithms.gale_shapley,
+ instance=instance,
+ course_order_per_student=course_order_per_student,
+ tie_braking_lottery=tie_braking_lottery)
+ assert allocation == {'Alice': ['c2'], 'Bob': ['c1'], 'Chana': ['c1'], 'Dana': ['c2'], 'Dor': ['c1']}, "allocation's did not match"
+
+def test_order_does_not_align_with_bids():
+ s1 = {"c1": 20, "c2": 15, "c3": 35, "c4": 10, "c5": 20}
+ s2 = {"c1": 30, "c2": 15, "c3": 20, "c4": 20, "c5": 15}
+ s3 = {"c1": 40, "c2": 10, "c3": 25, "c4": 10, "c5": 15}
+ s4 = {"c1": 10, "c2": 10, "c3": 15, "c4": 30, "c5": 35}
+ s5 = {"c1": 25, "c2": 20, "c3": 30, "c4": 10, "c5": 15}
+ agent_capacities = {"Alice": 3, "Bob": 3, "Chana": 3, "Dana": 3, "Dor": 3}
+ course_capacities = {"c1": 4, "c2": 4, "c3": 2, "c4": 3, "c5": 2}
+ valuations = {"Alice": s1, "Bob": s2, "Chana": s3, "Dana": s4, "Dor": s5}
+ course_order_per_student = {"Alice": ["c5", "c3", "c1", "c2", "c4"], "Bob": ["c1", "c4", "c5", "c2", "c3"], "Chana": ["c5", "c1", "c4", "c3", "c2"], "Dana": ["c3", "c4", "c1", "c5", "c2"], "Dor": ["c5", "c1", "c4", "c3", "c2"]}
+ tie_braking_lottery = {"Alice": 0.6, "Bob": 0.4, "Chana": 0.3, "Dana": 0.8, "Dor": 0.2}
+ instance = fairpyx.Instance(agent_capacities=agent_capacities,
+ item_capacities=course_capacities,
+ valuations=valuations)
+ allocation = fairpyx.divide(fairpyx.algorithms.gale_shapley,
+ instance=instance,
+ course_order_per_student=course_order_per_student,
+ tie_braking_lottery=tie_braking_lottery)
+ assert allocation == {'Alice': ['c1', 'c3', 'c5'], 'Bob': ['c1', 'c2', 'c4'], 'Chana': ['c1', 'c2', 'c4'], 'Dana': ['c2', 'c4', 'c5'], 'Dor': ['c1', 'c2', 'c3']}, "allocation's did not match"
+
+def test_one_agent():
+ s1 = {"c1": 40, "c2": 60}
+ agent_capacities = {"Alice": 1}
+ course_capacities = {"c1": 1, "c2": 1}
+ valuations = {"Alice": s1}
+ course_order_per_student = {"Alice": ["c2", "c1"]}
+ tie_braking_lottery = {"Alice": 0.9}
+ instance = fairpyx.Instance(agent_capacities=agent_capacities,
+ item_capacities=course_capacities,
+ valuations=valuations)
+ allocation = fairpyx.divide(fairpyx.algorithms.gale_shapley,
+ instance=instance,
+ course_order_per_student=course_order_per_student,
+ tie_braking_lottery=tie_braking_lottery)
+ assert allocation == {'Alice': ['c2']}, "allocation's did not match"
+
+def test_empty_input():
+ agent_capacities = {}
+ course_capacities = {}
+ valuations = {}
+ course_order_per_student = {}
+ tie_braking_lottery = {}
+ with pytest.raises(StopIteration):
+ instance = fairpyx.Instance(agent_capacities=agent_capacities,
+ item_capacities=course_capacities,
+ valuations=valuations)
+ allocation = fairpyx.divide(fairpyx.algorithms.gale_shapley,
+ instance=instance,
+ course_order_per_student=course_order_per_student,
+ tie_braking_lottery=tie_braking_lottery)
+
+def test_wrong_input_type_agent_capacities():
+ agent_capacities = "not a dict"
+ course_capacities = {"c1": 3, "c2": 2}
+ valuations = {"Alice": {"c1": 40, "c2": 60}}
+ course_order_per_student = {"Alice": ["c2", "c1"]}
+ tie_braking_lottery = {"Alice": 0.9}
+ with pytest.raises(TypeError):
+ instance = fairpyx.Instance(agent_capacities=agent_capacities,
+ item_capacities=course_capacities,
+ valuations=valuations)
+ fairpyx.divide(fairpyx.algorithms.gale_shapley,
+ instance=instance,
+ course_order_per_student=course_order_per_student,
+ tie_braking_lottery=tie_braking_lottery)
+
+def test_wrong_input_type_course_capacities():
+ agent_capacities = {"Alice": 1}
+ course_capacities = "not a dict"
+ valuations = {"Alice": {"c1": 40, "c2": 60}}
+ course_order_per_student = {"Alice": ["c2", "c1"]}
+ tie_braking_lottery = {"Alice": 0.9}
+ with pytest.raises(TypeError):
+ instance = fairpyx.Instance(agent_capacities=agent_capacities,
+ item_capacities=course_capacities,
+ valuations=valuations)
+ fairpyx.divide(fairpyx.algorithms.gale_shapley,
+ instance=instance,
+ course_order_per_student=course_order_per_student,
+ tie_braking_lottery=tie_braking_lottery)
+
+def test_wrong_input_type_valuations():
+ agent_capacities = {"Alice": 1}
+ course_capacities = {"c1": 3, "c2": 2}
+ valuations = "not a dict"
+ course_order_per_student = {"Alice": ["c2", "c1"]}
+ tie_braking_lottery = {"Alice": 0.9}
+ with pytest.raises(TypeError):
+ instance = fairpyx.Instance(agent_capacities=agent_capacities,
+ item_capacities=course_capacities,
+ valuations=valuations)
+ fairpyx.divide(fairpyx.algorithms.gale_shapley,
+ instance=instance,
+ course_order_per_student=course_order_per_student,
+ tie_braking_lottery=tie_braking_lottery)
+
+def test_wrong_input_type_course_order_per_student():
+ agent_capacities = {"Alice": 1}
+ course_capacities = {"c1": 3, "c2": 2}
+ valuations = {"Alice": {"c1": 40, "c2": 60}}
+ course_order_per_student = "not a dict"
+ tie_braking_lottery = {"Alice": 0.9}
+ with pytest.raises(TypeError):
+ instance = fairpyx.Instance(agent_capacities=agent_capacities,
+ item_capacities=course_capacities,
+ valuations=valuations)
+ fairpyx.divide(fairpyx.algorithms.gale_shapley,
+ instance=instance,
+ course_order_per_student=course_order_per_student,
+ tie_braking_lottery=tie_braking_lottery)
+
+def test_wrong_input_type_tie_braking_lottery():
+ agent_capacities = {"Alice": 1}
+ course_capacities = {"c1": 3, "c2": 2}
+ valuations = {"Alice": {"c1": 40, "c2": 60}}
+ course_order_per_student = {"Alice": ["c2", "c1"]}
+ tie_braking_lottery = "not a dict"
+ with pytest.raises(TypeError):
+ instance = fairpyx.Instance(agent_capacities=agent_capacities,
+ item_capacities=course_capacities,
+ valuations=valuations)
+ fairpyx.divide(fairpyx.algorithms.gale_shapley,
+ instance=instance,
+ course_order_per_student=course_order_per_student,
+ tie_braking_lottery=tie_braking_lottery)
+
+
+def test_large_input():
+ num_students = 1000
+ num_courses = 50
+ agent_capacities = {f"Student_{i}": 1 for i in range(num_students)}
+ course_capacities = {f"Course_{i}": num_students // num_courses for i in range(num_courses)}
+ valuations = {f"Student_{i}": {f"Course_{j}": (i+j) % 100 for j in range(num_courses)} for i in range(num_students)}
+ course_order_per_student = {f"Student_{i}": [f"Course_{j}" for j in range(num_courses)] for i in range(num_students)}
+ tie_braking_lottery = {f"Student_{i}": i / num_students for i in range(num_students)}
+ instance = fairpyx.Instance(agent_capacities=agent_capacities,
+ item_capacities=course_capacities,
+ valuations=valuations)
+ allocation = fairpyx.divide(fairpyx.algorithms.gale_shapley,
+ instance=instance,
+ course_order_per_student=course_order_per_student,
+ tie_braking_lottery=tie_braking_lottery)
+ # Validate that the allocation is valid
+ assert len(allocation) == num_students, "length of allocation did not match the number of students"
+ assert all(len(courses) == 1 for courses in allocation.values()), "not every course got exactly 1 student"
+ fairpyx.validate_allocation(instance, allocation, title=f"gale_shapley")
+
+def test_large_number_of_students_and_courses():
+ s1 = {"c1": 20, "c2": 15, "c3": 35, "c4": 10, "c5": 20, "c6": 30, "c7": 25, "c8": 30, "c9": 15, "c10": 20, "c11": 25, "c12": 10, "c13": 30, "c14": 20, "c15": 15, "c16": 35, "c17": 20, "c18": 10, "c19": 25, "c20": 30} # sum = 440
+ s2 = {"c1": 30, "c2": 15, "c3": 20, "c4": 20, "c5": 15, "c6": 25, "c7": 10, "c8": 20, "c9": 30, "c10": 25, "c11": 20, "c12": 15, "c13": 10, "c14": 20, "c15": 30, "c16": 15, "c17": 25, "c18": 20, "c19": 10, "c20": 35} # sum = 440
+ s3 = {"c1": 40, "c2": 10, "c3": 25, "c4": 10, "c5": 15, "c6": 20, "c7": 25, "c8": 30, "c9": 35, "c10": 20, "c11": 15, "c12": 10, "c13": 20, "c14": 25, "c15": 30, "c16": 15, "c17": 10, "c18": 20, "c19": 25, "c20": 30} # sum = 440
+ s4 = {"c1": 10, "c2": 10, "c3": 15, "c4": 30, "c5": 35, "c6": 20, "c7": 15, "c8": 10, "c9": 25, "c10": 20, "c11": 30, "c12": 15, "c13": 10, "c14": 25, "c15": 20, "c16": 30, "c17": 35, "c18": 20, "c19": 15, "c20": 30} # sum = 440
+ s5 = {"c1": 25, "c2": 20, "c3": 30, "c4": 10, "c5": 15, "c6": 35, "c7": 25, "c8": 20, "c9": 10, "c10": 30, "c11": 15, "c12": 20, "c13": 25, "c14": 10, "c15": 35, "c16": 20, "c17": 15, "c18": 10, "c19": 30, "c20": 25} # sum = 440
+ agent_capacities = {"Alice": 15, "Bob": 20, "Chana": 18, "Dana": 17, "Dor": 16}
+ course_capacities = {"c1": 10, "c2": 10, "c3": 8, "c4": 7, "c5": 6, "c6": 5, "c7": 4, "c8": 3, "c9": 2, "c10": 1, "c11": 10, "c12": 9, "c13": 8, "c14": 7, "c15": 6, "c16": 5, "c17": 4, "c18": 3, "c19": 2, "c20": 1}
+ valuations = {"Alice": s1, "Bob": s2, "Chana": s3, "Dana": s4, "Dor": s5}
+ course_order_per_student = {"Alice": ["c5", "c3", "c1", "c2", "c4", "c6", "c7", "c8", "c9", "c10", "c11", "c12", "c13", "c14", "c15", "c16", "c17", "c18", "c19", "c20"], "Bob": ["c1", "c4", "c5", "c2", "c3", "c6", "c7", "c8", "c9", "c10", "c11", "c12", "c13", "c14", "c15", "c16", "c17", "c18", "c19", "c20"], "Chana": ["c5", "c1", "c4", "c3", "c2", "c6", "c7", "c8", "c9", "c10", "c11", "c12", "c13", "c14", "c15", "c16", "c17", "c18", "c19", "c20"], "Dana": ["c3", "c4", "c1", "c5", "c2", "c6", "c7", "c8", "c9", "c10", "c11", "c12", "c13", "c14", "c15", "c16", "c17", "c18", "c19", "c20"], "Dor": ["c5", "c1", "c4", "c3", "c2", "c6", "c7", "c8", "c9", "c10", "c11", "c12", "c13", "c14", "c15", "c16", "c17", "c18", "c19", "c20"]}
+ tie_braking_lottery = {"Alice": 0.6, "Bob": 0.4, "Chana": 0.3, "Dana": 0.8, "Dor": 0.2}
+ instance = fairpyx.Instance(agent_capacities=agent_capacities,
+ item_capacities=course_capacities,
+ valuations=valuations)
+ allocation = fairpyx.divide(fairpyx.algorithms.gale_shapley,
+ instance=instance,
+ course_order_per_student=course_order_per_student,
+ tie_braking_lottery=tie_braking_lottery)
+ # Validate that the allocation is valid
+ fairpyx.validate_allocation(instance, allocation, title=f"gale_shapley")
+
+
+def test_edge_case_tie():
+ s1 = {"c1": 50, "c2": 50}
+ s2 = {"c1": 50, "c2": 50}
+ agent_capacities = {"Alice": 1, "Bob": 1}
+ course_capacities = {"c1": 1, "c2": 1}
+ valuations = {"Alice": s1, "Bob": s2}
+ course_order_per_student = {"Alice": ["c1", "c2"], "Bob": ["c1", "c2"]}
+ tie_braking_lottery = {"Alice": 0.5, "Bob": 0.5}
+ instance = fairpyx.Instance(agent_capacities=agent_capacities,
+ item_capacities=course_capacities,
+ valuations=valuations)
+ allocation = fairpyx.divide(fairpyx.algorithms.gale_shapley,
+ instance=instance,
+ course_order_per_student=course_order_per_student,
+ tie_braking_lottery=tie_braking_lottery)
+ assert set(allocation.keys()) == {"Alice", "Bob"}, "the keys in the allocation did not match 'Alice', 'Bob'"
+ assert set(allocation["Alice"] + allocation["Bob"]) == {"c1", "c2"}, "the total allocation of courses for Alice and Bob did not match 'c1', 'c2'"
+
+if __name__ == "__main__":
+ pytest.main(["-v",__file__])
\ No newline at end of file
diff --git a/website_gale_shapley/back/Dockerfile b/website_gale_shapley/back/Dockerfile
new file mode 100644
index 0000000..af32c81
--- /dev/null
+++ b/website_gale_shapley/back/Dockerfile
@@ -0,0 +1,28 @@
+FROM python:3.9.6-slim
+
+ENV SERVICE_FOLDER_NAME=back
+WORKDIR /${SERVICE_FOLDER_NAME}
+
+ENV PYTHONDONTWRITEBYTECODE 1
+ENV PYTHONBUFFERED 1
+
+RUN set -ex \
+ && RUN_DEPS=" \
+ libpq-dev \
+ git \
+ " \
+ && seq 1 8 | xargs -I{} mkdir -p /usr/share/man/man{} \
+ && apt-get update && apt-get install -y --no-install-recommends $RUN_DEPS \
+ && rm -rf /var/lib/apt/lists/*
+
+COPY requirements.txt .
+
+RUN pip install --no-cache-dir -r requirements.txt
+
+COPY . /${SERVICE_FOLDER_NAME}/
+
+EXPOSE 8000
+
+RUN chmod +x /${SERVICE_FOLDER_NAME}/entrypoint.sh
+
+ENTRYPOINT /$SERVICE_FOLDER_NAME/entrypoint.sh
diff --git a/website_gale_shapley/back/__init__.py b/website_gale_shapley/back/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/website_gale_shapley/back/entrypoint.sh b/website_gale_shapley/back/entrypoint.sh
new file mode 100644
index 0000000..758598b
--- /dev/null
+++ b/website_gale_shapley/back/entrypoint.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+cd ..
+uvicorn ${SERVICE_FOLDER_NAME}.main:app --host 0.0.0.0
diff --git a/website_gale_shapley/back/main.py b/website_gale_shapley/back/main.py
new file mode 100644
index 0000000..f95e8dd
--- /dev/null
+++ b/website_gale_shapley/back/main.py
@@ -0,0 +1,70 @@
+from contextlib import asynccontextmanager
+from typing import Any, AsyncGenerator, Dict, List
+from fastapi import FastAPI, status
+import io
+import logging
+
+import fairpyx
+from .schema import Instance
+
+logger = logging.getLogger("uvicorn")
+
+# On startup, create database tables
+@asynccontextmanager
+async def lifespan(app: FastAPI) -> AsyncGenerator[Any, None]:
+ # before app startup
+ yield
+ # After app shutdown
+
+
+app = FastAPI(lifespan=lifespan)
+
+
+@app.post("/api/divide", status_code=status.HTTP_200_OK)
+async def divide(instance: Instance) -> Dict[str, Any]:
+ fairpyx_instance = fairpyx.Instance(agent_capacities=instance.agentCapabilities,
+ item_capacities=instance.courseCapabilities,
+ valuations=instance.bids)
+
+ # Create a StringIO object to capture logs
+ log_capture = io.StringIO()
+ # Create a handler that writes to the StringIO object
+ handler = logging.StreamHandler(log_capture)
+ # Set the format for the handler
+ handler.setFormatter(logging.Formatter('%(message)s'))
+
+ # Add the handler to the fairpyx logger
+ fairpyx_logger = logging.getLogger('fairpyx')
+ fairpyx_logger.addHandler(handler)
+
+ # Set the level to capture all logs
+ original_level = fairpyx_logger.level
+ fairpyx_logger.setLevel(logging.DEBUG)
+
+ try:
+ allocation = fairpyx.divide(fairpyx.algorithms.gale_shapley,
+ instance=fairpyx_instance,
+ course_order_per_student=instance.courseOrderPerStudent,
+ tie_braking_lottery=instance.tieBrakingLottery)
+ finally:
+ # Reset the logger level and remove the handler
+ fairpyx_logger.setLevel(original_level)
+ fairpyx_logger.removeHandler(handler)
+
+ # Get the captured logs
+ log_capture.seek(0)
+ captured_logs = log_capture.getvalue().splitlines()
+
+ # Log the captured logs using the uvicorn logger
+ for log_line in captured_logs:
+ logger.info(f"fairpyx log: {log_line}")
+
+ logger.info(f"input: {instance}")
+ logger.info(f"output: {allocation}")
+
+ # Return both the allocation and the logs
+ return {
+ "allocation": allocation,
+ "logs": captured_logs
+ }
+
diff --git a/website_gale_shapley/back/requirements.txt b/website_gale_shapley/back/requirements.txt
new file mode 100644
index 0000000..3d711a1
--- /dev/null
+++ b/website_gale_shapley/back/requirements.txt
@@ -0,0 +1,53 @@
+aiosmtplib==2.0.2
+annotated-types==0.6.0
+anyio==4.3.0
+blinker==1.8.2
+certifi==2024.2.2
+cfgv==3.4.0
+click==8.1.7
+distlib==0.3.8
+dnspython==2.6.1
+exceptiongroup==1.2.1
+fastapi==0.111.0
+fastapi-cli==0.0.3
+filelock==3.14.0
+h11==0.14.0
+httpcore==1.0.5
+httptools==0.6.1
+httpx==0.27.0
+identify==2.5.36
+idna==3.7
+iniconfig==2.0.0
+Jinja2==3.1.4
+markdown-it-py==3.0.0
+MarkupSafe==2.1.5
+mdurl==0.1.2
+nodeenv==1.8.0
+orjson==3.10.3
+packaging==24.0
+platformdirs==4.2.1
+pluggy==1.5.0
+pre-commit==3.7.0
+pydantic==2.7.1
+pydantic-settings==2.2.1
+pydantic_core==2.18.2
+Pygments==2.18.0
+pytest==8.3.2
+python-dotenv==1.0.1
+python-multipart==0.0.9
+PyYAML==6.0.1
+rich==13.7.1
+shellingham==1.5.4
+sniffio==1.3.1
+starlette==0.37.2
+tomli==2.0.1
+typer==0.12.3
+typing_extensions==4.11.0
+ujson==5.9.0
+uvicorn==0.29.0
+uvloop==0.19.0
+virtualenv==20.26.1
+watchfiles==0.21.0
+websockets==12.0
+aiohttp==3.9.5
+-e git+https://github.com/zachibs/fairpyx.git#egg=fairpyx
\ No newline at end of file
diff --git a/website_gale_shapley/back/schema.py b/website_gale_shapley/back/schema.py
new file mode 100644
index 0000000..ea9c8bd
--- /dev/null
+++ b/website_gale_shapley/back/schema.py
@@ -0,0 +1,34 @@
+from typing import Dict, List
+from pydantic import BaseModel, field_validator
+import json
+
+class Instance(BaseModel):
+ courseCapabilities: Dict[str, int]
+ agentCapabilities: Dict[str, int]
+ bids: Dict[str, Dict[str, int]]
+ courseOrderPerStudent: Dict[str, List[str]]
+ tieBrakingLottery: Dict[str, float]
+
+ @field_validator("courseCapabilities", "agentCapabilities", mode="before")
+ @classmethod
+ def convert_str_to_dict_int(cls, value: str) -> Dict[str, int]:
+ if isinstance(value, str):
+ return json.loads(value)
+
+ @field_validator( "tieBrakingLottery", mode="before")
+ @classmethod
+ def convert_str_to_dict_float(cls, value: str) -> Dict[str, float]:
+ if isinstance(value, str):
+ return json.loads(value)
+
+ @field_validator("bids", mode="before")
+ @classmethod
+ def convert_str_to_dict_dict(cls, value: str) -> Dict[str, Dict[str, int]]:
+ if isinstance(value, str):
+ return json.loads(value)
+
+ @field_validator("courseOrderPerStudent", mode="before")
+ @classmethod
+ def convert_str_to_dict_list(cls, value: str) -> Dict[str, List[str]]:
+ if isinstance(value, str):
+ return json.loads(value)
diff --git a/website_gale_shapley/back/start.sh b/website_gale_shapley/back/start.sh
new file mode 100644
index 0000000..8738fb1
--- /dev/null
+++ b/website_gale_shapley/back/start.sh
@@ -0,0 +1 @@
+docker run -d -p 50010:8000 --name back-container backend-image
\ No newline at end of file
diff --git a/website_gale_shapley/front/.dockerignore b/website_gale_shapley/front/.dockerignore
new file mode 100644
index 0000000..2b5059d
--- /dev/null
+++ b/website_gale_shapley/front/.dockerignore
@@ -0,0 +1,10 @@
+Dockerfile
+.dockerignore
+node_modules
+npm-debug.log
+README.md
+.next
+!.next/static
+!.next/standalone
+.git
+.env
\ No newline at end of file
diff --git a/website_gale_shapley/front/.eslintrc.json b/website_gale_shapley/front/.eslintrc.json
new file mode 100644
index 0000000..62a9318
--- /dev/null
+++ b/website_gale_shapley/front/.eslintrc.json
@@ -0,0 +1,6 @@
+{
+ "extends": "next/core-web-vitals",
+ "rules": {
+ "react/no-unescaped-entities": 0
+ }
+}
\ No newline at end of file
diff --git a/website_gale_shapley/front/.gitignore b/website_gale_shapley/front/.gitignore
new file mode 100644
index 0000000..fd3dbb5
--- /dev/null
+++ b/website_gale_shapley/front/.gitignore
@@ -0,0 +1,36 @@
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+
+# dependencies
+/node_modules
+/.pnp
+.pnp.js
+.yarn/install-state.gz
+
+# testing
+/coverage
+
+# next.js
+/.next/
+/out/
+
+# production
+/build
+
+# misc
+.DS_Store
+*.pem
+
+# debug
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# local env files
+.env*.local
+
+# vercel
+.vercel
+
+# typescript
+*.tsbuildinfo
+next-env.d.ts
diff --git a/website_gale_shapley/front/Dockerfile b/website_gale_shapley/front/Dockerfile
new file mode 100644
index 0000000..d4cbf72
--- /dev/null
+++ b/website_gale_shapley/front/Dockerfile
@@ -0,0 +1,58 @@
+FROM node:22-alpine3.19 AS base
+
+# Install dependencies only when needed
+FROM base AS deps
+# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
+RUN apk add --no-cache libc6-compat
+WORKDIR /app
+
+# Install dependencies based on the preferred package manager
+COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* ./
+# RUN apk add --no-cache python3 make g++ bash
+RUN npm ci
+
+
+# Rebuild the source code only when needed
+FROM base AS builder
+WORKDIR /app
+COPY --from=deps /app/node_modules ./node_modules
+COPY . .
+
+# Next.js collects completely anonymous telemetry data about general usage.
+# Learn more here: https://nextjs.org/telemetry
+# Uncomment the following line in case you want to disable telemetry during the build.
+# ENV NEXT_TELEMETRY_DISABLED 1
+
+RUN npm run build
+
+# Production image, copy all the files and run next
+FROM base AS runner
+WORKDIR /app
+
+ENV NODE_ENV production
+# Uncomment the following line in case you want to disable telemetry during runtime.
+# ENV NEXT_TELEMETRY_DISABLED 1
+
+RUN addgroup --system --gid 1001 nodejs
+RUN adduser --system --uid 1001 nextjs
+
+COPY --from=builder /app/public ./public
+
+# Set the correct permission for prerender cache
+RUN mkdir .next
+RUN chown nextjs:nodejs .next
+
+# Automatically leverage output traces to reduce image size
+# https://nextjs.org/docs/advanced-features/output-file-tracing
+COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
+COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
+
+USER nextjs
+
+EXPOSE 50011
+
+ENV PORT 50011
+
+# server.js is created by next build from the standalone output
+# https://nextjs.org/docs/pages/api-reference/next-config-js/output
+CMD HOSTNAME="0.0.0.0" node server.js
diff --git a/website_gale_shapley/front/README.md b/website_gale_shapley/front/README.md
new file mode 100644
index 0000000..c403366
--- /dev/null
+++ b/website_gale_shapley/front/README.md
@@ -0,0 +1,36 @@
+This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).
+
+## Getting Started
+
+First, run the development server:
+
+```bash
+npm run dev
+# or
+yarn dev
+# or
+pnpm dev
+# or
+bun dev
+```
+
+Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
+
+You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
+
+This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.
+
+## Learn More
+
+To learn more about Next.js, take a look at the following resources:
+
+- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
+- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
+
+You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!
+
+## Deploy on Vercel
+
+The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
+
+Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.
diff --git a/website_gale_shapley/front/app/globals.css b/website_gale_shapley/front/app/globals.css
new file mode 100644
index 0000000..99a7b0c
--- /dev/null
+++ b/website_gale_shapley/front/app/globals.css
@@ -0,0 +1,69 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
+
+@layer base {
+ :root {
+ --background: 0 0% 100%;
+ --foreground: 222.2 84% 4.9%;
+ --card: 0 0% 100%;
+ --card-foreground: 222.2 84% 4.9%;
+ --popover: 0 0% 100%;
+ --popover-foreground: 222.2 84% 4.9%;
+ --primary: 222.2 47.4% 11.2%;
+ --primary-foreground: 210 40% 98%;
+ --secondary: 210 40% 96.1%;
+ --secondary-foreground: 222.2 47.4% 11.2%;
+ --muted: 210 40% 96.1%;
+ --muted-foreground: 215.4 16.3% 46.9%;
+ --accent: 210 40% 96.1%;
+ --accent-foreground: 222.2 47.4% 11.2%;
+ --destructive: 0 84.2% 60.2%;
+ --destructive-foreground: 210 40% 98%;
+ --border: 214.3 31.8% 91.4%;
+ --input: 214.3 31.8% 91.4%;
+ --ring: 222.2 84% 4.9%;
+ --radius: 0.5rem;
+ --chart-1: 12 76% 61%;
+ --chart-2: 173 58% 39%;
+ --chart-3: 197 37% 24%;
+ --chart-4: 43 74% 66%;
+ --chart-5: 27 87% 67%;
+ }
+
+ .dark {
+ --background: 222.2 84% 4.9%;
+ --foreground: 210 40% 98%;
+ --card: 222.2 84% 4.9%;
+ --card-foreground: 210 40% 98%;
+ --popover: 222.2 84% 4.9%;
+ --popover-foreground: 210 40% 98%;
+ --primary: 210 40% 98%;
+ --primary-foreground: 222.2 47.4% 11.2%;
+ --secondary: 217.2 32.6% 17.5%;
+ --secondary-foreground: 210 40% 98%;
+ --muted: 217.2 32.6% 17.5%;
+ --muted-foreground: 215 20.2% 65.1%;
+ --accent: 217.2 32.6% 17.5%;
+ --accent-foreground: 210 40% 98%;
+ --destructive: 0 62.8% 30.6%;
+ --destructive-foreground: 210 40% 98%;
+ --border: 217.2 32.6% 17.5%;
+ --input: 217.2 32.6% 17.5%;
+ --ring: 212.7 26.8% 83.9%;
+ --chart-1: 220 70% 50%;
+ --chart-2: 160 60% 45%;
+ --chart-3: 30 80% 55%;
+ --chart-4: 280 65% 60%;
+ --chart-5: 340 75% 55%;
+ }
+}
+
+@layer base {
+ * {
+ @apply border-border;
+ }
+ body {
+ @apply bg-background text-foreground;
+ }
+}
\ No newline at end of file
diff --git a/website_gale_shapley/front/app/layout.tsx b/website_gale_shapley/front/app/layout.tsx
new file mode 100644
index 0000000..2d08670
--- /dev/null
+++ b/website_gale_shapley/front/app/layout.tsx
@@ -0,0 +1,22 @@
+import type { Metadata } from "next";
+import { Inter } from "next/font/google";
+import "./globals.css";
+
+const inter = Inter({ subsets: ["latin"] });
+
+export const metadata: Metadata = {
+ title: "Create Next App",
+ description: "Generated by create next app",
+};
+
+export default function RootLayout({
+ children,
+}: Readonly<{
+ children: React.ReactNode;
+}>) {
+ return (
+
+
{children}
+
+ );
+}
diff --git a/website_gale_shapley/front/app/page.tsx b/website_gale_shapley/front/app/page.tsx
new file mode 100644
index 0000000..42ca894
--- /dev/null
+++ b/website_gale_shapley/front/app/page.tsx
@@ -0,0 +1,32 @@
+import AllocationForm from "@/components/AllocationForm";
+import Link from "next/link";
+
+export default async function Home() {
+ return (
+
+
+ Course allocation: Gale-Shapley protocol
+
+
+ This algorithm is based on the following paper:
+
+ "Course bidding at business schools", by Tayfun Sönmez and M. Utku Ünver (2010)
+
+ Programmed by: Zachi Ben Shitrit
+
+
+ This form allows you to allocate courses to students based on the Gale-Shapley algorithm.
+ Please provide the following data:
+
+ Course Capabilities: Enter a JSON string representing the capacities of each course.
+ Agent Capabilities: Enter a JSON string representing the capacities of each agent.
+ Bids: Enter a JSON string representing the bids for each agent on courses.
+ Course Order Per Student: Enter a JSON string representing the course order preferences for each student.
+ Tie-Breaking Lottery: Enter a JSON string representing the tie-breaking values for each student.
+
+ After filling out the form, the Gale-Shapley algorithm will process the data to allocate courses to students based on their preferences and the provided constraints.
+
+
+
+ );
+}
diff --git a/website_gale_shapley/front/components.json b/website_gale_shapley/front/components.json
new file mode 100644
index 0000000..15f2b02
--- /dev/null
+++ b/website_gale_shapley/front/components.json
@@ -0,0 +1,17 @@
+{
+ "$schema": "https://ui.shadcn.com/schema.json",
+ "style": "default",
+ "rsc": true,
+ "tsx": true,
+ "tailwind": {
+ "config": "tailwind.config.ts",
+ "css": "app/globals.css",
+ "baseColor": "slate",
+ "cssVariables": true,
+ "prefix": ""
+ },
+ "aliases": {
+ "components": "@/components",
+ "utils": "@/lib/utils"
+ }
+}
\ No newline at end of file
diff --git a/website_gale_shapley/front/components/AllocationForm.tsx b/website_gale_shapley/front/components/AllocationForm.tsx
new file mode 100644
index 0000000..ea49f45
--- /dev/null
+++ b/website_gale_shapley/front/components/AllocationForm.tsx
@@ -0,0 +1,147 @@
+"use client";
+import clsx from "clsx";
+import { Textarea } from "./ui/textarea";
+import { useForm } from "react-hook-form";
+import { zodResolver } from "@hookform/resolvers/zod";
+import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from "./ui/form";
+import { z } from "zod";
+import { Button } from "./ui/button";
+import { CoursePreferences, formSchema } from "@/lib/formSchemas";
+import { submitForm } from "@/lib/actions";
+import { AllocationResult } from "@/lib/formSchemas";
+import { AllocationResultDialog } from "./AllocationResultDialog";
+import { useState } from "react";
+
+export default function AllocationForm({ className }: { className?: string }) {
+ const [result, setResult] = useState();
+ const [open, setOpen] = useState(false);
+
+ // Define your form.
+ const form = useForm>({
+ resolver: zodResolver(formSchema),
+ defaultValues: {
+ courseCapabilities: "",
+ agentCapabilities: "",
+ bids: "",
+ courseOrderPerStudent: "",
+ tieBrakingLottery: "",
+ },
+ });
+
+ // Define a submit handler.
+ async function onSubmit(values: z.infer) {
+ try {
+ const temp = await submitForm(values);
+ console.log(temp);
+ setResult(temp);
+ setOpen(true);
+ } catch (error) {
+ console.error("Error submitting form:", error);
+ }
+ }
+
+ // Set example values for the form fields
+ function handleDefaultValuesExample() {
+ form.setValue("courseCapabilities", '{"Course1": 4, "Course2": 4, "Course3": 2, "Course4": 3, "Course5": 2}');
+ form.setValue("agentCapabilities", '{"Alice": 3, "Bob": 3, "Chana": 3, "Dana": 3, "Dor": 3}');
+ form.setValue("bids", '{"Alice": {"Course1": 20, "Course2": 15, "Course3": 35, "Course4": 10, "Course5": 20}, "Bob": {"Course1": 30, "Course2": 15, "Course3": 20, "Course4": 20, "Course5": 15}, "Chana": {"Course1": 40, "Course2": 10, "Course3": 25, "Course4": 10, "Course5": 15}, "Dana": {"Course1": 10, "Course2": 10, "Course3": 15, "Course4": 30, "Course5": 35}, "Dor": {"Course1": 25, "Course2": 20, "Course3": 30, "Course4": 10, "Course5": 15}}');
+ form.setValue("courseOrderPerStudent", '{"Alice": ["Course5", "Course3", "Course1", "Course2", "Course4"], "Bob": ["Course1", "Course4", "Course5", "Course2", "Course3"], "Chana": ["Course5", "Course1", "Course4", "Course3", "Course2"], "Dana": ["Course3", "Course4", "Course1", "Course5", "Course2"], "Dor": ["Course5", "Course1", "Course4", "Course3", "Course2"]}');
+ form.setValue("tieBrakingLottery", '{"Alice": 0.6, "Bob": 0.4, "Chana": 0.3, "Dana": 0.8, "Dor": 0.2}');
+ }
+
+ // Clear all form fields
+ function handleClearForm() {
+ form.setValue("courseCapabilities", "");
+ form.setValue("agentCapabilities", "");
+ form.setValue("bids", "");
+ form.setValue("courseOrderPerStudent", "");
+ form.setValue("tieBrakingLottery", "");
+ }
+
+ return (
+
+
+ Clear Form
+ Fill Example Values
+
+
+
+
+
+
+
+ );
+}
diff --git a/website_gale_shapley/front/components/AllocationResultDialog.tsx b/website_gale_shapley/front/components/AllocationResultDialog.tsx
new file mode 100644
index 0000000..70759a9
--- /dev/null
+++ b/website_gale_shapley/front/components/AllocationResultDialog.tsx
@@ -0,0 +1,53 @@
+"use client";
+import { Button } from "@/components/ui/button";
+import {
+ Dialog,
+ DialogContent,
+ DialogDescription,
+ DialogFooter,
+ DialogHeader,
+ DialogTitle,
+ DialogTrigger,
+} from "@/components/ui/dialog";
+import { CoursePreferences } from "@/lib/formSchemas";
+import { ReactNode, useState } from "react";
+import { AllocationResult } from "@/lib/formSchemas";
+
+export function AllocationResultDialog({ result, open, setOpen, children }: { result?: AllocationResult, open: boolean, setOpen: (value: boolean) => void, children?: ReactNode }) {
+
+ return (
+
+
+ {children}
+
+
+
+ Summary
+
+ Here are the allocation results:
+
+
+
+ {result && result.allocation && Object.entries(result.allocation).map(([name, courses]) => (
+
+
{name}
+
+ {courses.map((course, index) => (
+ {course}
+ ))}
+
+
+ ))}
+
+ {result && result.logs && (
+
+
Algorithm Logs:
+
+ {result.logs.join('\n')}
+
+
+ )}
+
+
+ );
+}
diff --git a/website_gale_shapley/front/components/ui/button.tsx b/website_gale_shapley/front/components/ui/button.tsx
new file mode 100644
index 0000000..0ba4277
--- /dev/null
+++ b/website_gale_shapley/front/components/ui/button.tsx
@@ -0,0 +1,56 @@
+import * as React from "react"
+import { Slot } from "@radix-ui/react-slot"
+import { cva, type VariantProps } from "class-variance-authority"
+
+import { cn } from "@/lib/utils"
+
+const buttonVariants = cva(
+ "inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
+ {
+ variants: {
+ variant: {
+ default: "bg-primary text-primary-foreground hover:bg-primary/90",
+ destructive:
+ "bg-destructive text-destructive-foreground hover:bg-destructive/90",
+ outline:
+ "border border-input bg-background hover:bg-accent hover:text-accent-foreground",
+ secondary:
+ "bg-secondary text-secondary-foreground hover:bg-secondary/80",
+ ghost: "hover:bg-accent hover:text-accent-foreground",
+ link: "text-primary underline-offset-4 hover:underline",
+ },
+ size: {
+ default: "h-10 px-4 py-2",
+ sm: "h-9 rounded-md px-3",
+ lg: "h-11 rounded-md px-8",
+ icon: "h-10 w-10",
+ },
+ },
+ defaultVariants: {
+ variant: "default",
+ size: "default",
+ },
+ }
+)
+
+export interface ButtonProps
+ extends React.ButtonHTMLAttributes,
+ VariantProps {
+ asChild?: boolean
+}
+
+const Button = React.forwardRef(
+ ({ className, variant, size, asChild = false, ...props }, ref) => {
+ const Comp = asChild ? Slot : "button"
+ return (
+
+ )
+ }
+)
+Button.displayName = "Button"
+
+export { Button, buttonVariants }
diff --git a/website_gale_shapley/front/components/ui/dialog.tsx b/website_gale_shapley/front/components/ui/dialog.tsx
new file mode 100644
index 0000000..6021370
--- /dev/null
+++ b/website_gale_shapley/front/components/ui/dialog.tsx
@@ -0,0 +1,122 @@
+"use client"
+
+import * as React from "react"
+import * as DialogPrimitive from "@radix-ui/react-dialog"
+import { X } from "lucide-react"
+
+import { cn } from "@/lib/utils"
+
+const Dialog = DialogPrimitive.Root
+
+const DialogTrigger = DialogPrimitive.Trigger
+
+const DialogPortal = DialogPrimitive.Portal
+
+const DialogClose = DialogPrimitive.Close
+
+const DialogOverlay = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+))
+DialogOverlay.displayName = DialogPrimitive.Overlay.displayName
+
+const DialogContent = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, children, ...props }, ref) => (
+
+
+
+ {children}
+
+
+ Close
+
+
+
+))
+DialogContent.displayName = DialogPrimitive.Content.displayName
+
+const DialogHeader = ({
+ className,
+ ...props
+}: React.HTMLAttributes) => (
+
+)
+DialogHeader.displayName = "DialogHeader"
+
+const DialogFooter = ({
+ className,
+ ...props
+}: React.HTMLAttributes) => (
+
+)
+DialogFooter.displayName = "DialogFooter"
+
+const DialogTitle = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+))
+DialogTitle.displayName = DialogPrimitive.Title.displayName
+
+const DialogDescription = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+))
+DialogDescription.displayName = DialogPrimitive.Description.displayName
+
+export {
+ Dialog,
+ DialogPortal,
+ DialogOverlay,
+ DialogClose,
+ DialogTrigger,
+ DialogContent,
+ DialogHeader,
+ DialogFooter,
+ DialogTitle,
+ DialogDescription,
+}
diff --git a/website_gale_shapley/front/components/ui/form.tsx b/website_gale_shapley/front/components/ui/form.tsx
new file mode 100644
index 0000000..ce264ae
--- /dev/null
+++ b/website_gale_shapley/front/components/ui/form.tsx
@@ -0,0 +1,178 @@
+"use client"
+
+import * as React from "react"
+import * as LabelPrimitive from "@radix-ui/react-label"
+import { Slot } from "@radix-ui/react-slot"
+import {
+ Controller,
+ ControllerProps,
+ FieldPath,
+ FieldValues,
+ FormProvider,
+ useFormContext,
+} from "react-hook-form"
+
+import { cn } from "@/lib/utils"
+import { Label } from "@/components/ui/label"
+
+const Form = FormProvider
+
+type FormFieldContextValue<
+ TFieldValues extends FieldValues = FieldValues,
+ TName extends FieldPath = FieldPath
+> = {
+ name: TName
+}
+
+const FormFieldContext = React.createContext(
+ {} as FormFieldContextValue
+)
+
+const FormField = <
+ TFieldValues extends FieldValues = FieldValues,
+ TName extends FieldPath = FieldPath
+>({
+ ...props
+}: ControllerProps) => {
+ return (
+
+
+
+ )
+}
+
+const useFormField = () => {
+ const fieldContext = React.useContext(FormFieldContext)
+ const itemContext = React.useContext(FormItemContext)
+ const { getFieldState, formState } = useFormContext()
+
+ const fieldState = getFieldState(fieldContext.name, formState)
+
+ if (!fieldContext) {
+ throw new Error("useFormField should be used within ")
+ }
+
+ const { id } = itemContext
+
+ return {
+ id,
+ name: fieldContext.name,
+ formItemId: `${id}-form-item`,
+ formDescriptionId: `${id}-form-item-description`,
+ formMessageId: `${id}-form-item-message`,
+ ...fieldState,
+ }
+}
+
+type FormItemContextValue = {
+ id: string
+}
+
+const FormItemContext = React.createContext(
+ {} as FormItemContextValue
+)
+
+const FormItem = React.forwardRef<
+ HTMLDivElement,
+ React.HTMLAttributes
+>(({ className, ...props }, ref) => {
+ const id = React.useId()
+
+ return (
+
+
+
+ )
+})
+FormItem.displayName = "FormItem"
+
+const FormLabel = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => {
+ const { error, formItemId } = useFormField()
+
+ return (
+
+ )
+})
+FormLabel.displayName = "FormLabel"
+
+const FormControl = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ ...props }, ref) => {
+ const { error, formItemId, formDescriptionId, formMessageId } = useFormField()
+
+ return (
+
+ )
+})
+FormControl.displayName = "FormControl"
+
+const FormDescription = React.forwardRef<
+ HTMLParagraphElement,
+ React.HTMLAttributes
+>(({ className, ...props }, ref) => {
+ const { formDescriptionId } = useFormField()
+
+ return (
+
+ )
+})
+FormDescription.displayName = "FormDescription"
+
+const FormMessage = React.forwardRef<
+ HTMLParagraphElement,
+ React.HTMLAttributes
+>(({ className, children, ...props }, ref) => {
+ const { error, formMessageId } = useFormField()
+ const body = error ? String(error?.message) : children
+
+ if (!body) {
+ return null
+ }
+
+ return (
+
+ {body}
+
+ )
+})
+FormMessage.displayName = "FormMessage"
+
+export {
+ useFormField,
+ Form,
+ FormItem,
+ FormLabel,
+ FormControl,
+ FormDescription,
+ FormMessage,
+ FormField,
+}
diff --git a/website_gale_shapley/front/components/ui/input.tsx b/website_gale_shapley/front/components/ui/input.tsx
new file mode 100644
index 0000000..677d05f
--- /dev/null
+++ b/website_gale_shapley/front/components/ui/input.tsx
@@ -0,0 +1,25 @@
+import * as React from "react"
+
+import { cn } from "@/lib/utils"
+
+export interface InputProps
+ extends React.InputHTMLAttributes {}
+
+const Input = React.forwardRef(
+ ({ className, type, ...props }, ref) => {
+ return (
+
+ )
+ }
+)
+Input.displayName = "Input"
+
+export { Input }
diff --git a/website_gale_shapley/front/components/ui/label.tsx b/website_gale_shapley/front/components/ui/label.tsx
new file mode 100644
index 0000000..5341821
--- /dev/null
+++ b/website_gale_shapley/front/components/ui/label.tsx
@@ -0,0 +1,26 @@
+"use client"
+
+import * as React from "react"
+import * as LabelPrimitive from "@radix-ui/react-label"
+import { cva, type VariantProps } from "class-variance-authority"
+
+import { cn } from "@/lib/utils"
+
+const labelVariants = cva(
+ "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
+)
+
+const Label = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef &
+ VariantProps
+>(({ className, ...props }, ref) => (
+
+))
+Label.displayName = LabelPrimitive.Root.displayName
+
+export { Label }
diff --git a/website_gale_shapley/front/components/ui/select.tsx b/website_gale_shapley/front/components/ui/select.tsx
new file mode 100644
index 0000000..3c20a71
--- /dev/null
+++ b/website_gale_shapley/front/components/ui/select.tsx
@@ -0,0 +1,160 @@
+"use client"
+
+import * as React from "react"
+import * as SelectPrimitive from "@radix-ui/react-select"
+import { Check, ChevronDown, ChevronUp } from "lucide-react"
+
+import { cn } from "@/lib/utils"
+
+const Select = SelectPrimitive.Root
+
+const SelectGroup = SelectPrimitive.Group
+
+const SelectValue = SelectPrimitive.Value
+
+const SelectTrigger = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, children, ...props }, ref) => (
+ span]:line-clamp-1",
+ className
+ )}
+ {...props}
+ >
+ {children}
+
+
+
+
+))
+SelectTrigger.displayName = SelectPrimitive.Trigger.displayName
+
+const SelectScrollUpButton = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+
+
+))
+SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName
+
+const SelectScrollDownButton = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+
+
+))
+SelectScrollDownButton.displayName =
+ SelectPrimitive.ScrollDownButton.displayName
+
+const SelectContent = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, children, position = "popper", ...props }, ref) => (
+
+
+
+
+ {children}
+
+
+
+
+))
+SelectContent.displayName = SelectPrimitive.Content.displayName
+
+const SelectLabel = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+))
+SelectLabel.displayName = SelectPrimitive.Label.displayName
+
+const SelectItem = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, children, ...props }, ref) => (
+
+
+
+
+
+
+
+ {children}
+
+))
+SelectItem.displayName = SelectPrimitive.Item.displayName
+
+const SelectSeparator = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+))
+SelectSeparator.displayName = SelectPrimitive.Separator.displayName
+
+export {
+ Select,
+ SelectGroup,
+ SelectValue,
+ SelectTrigger,
+ SelectContent,
+ SelectLabel,
+ SelectItem,
+ SelectSeparator,
+ SelectScrollUpButton,
+ SelectScrollDownButton,
+}
diff --git a/website_gale_shapley/front/components/ui/textarea.tsx b/website_gale_shapley/front/components/ui/textarea.tsx
new file mode 100644
index 0000000..9f9a6dc
--- /dev/null
+++ b/website_gale_shapley/front/components/ui/textarea.tsx
@@ -0,0 +1,24 @@
+import * as React from "react"
+
+import { cn } from "@/lib/utils"
+
+export interface TextareaProps
+ extends React.TextareaHTMLAttributes {}
+
+const Textarea = React.forwardRef(
+ ({ className, ...props }, ref) => {
+ return (
+
+ )
+ }
+)
+Textarea.displayName = "Textarea"
+
+export { Textarea }
diff --git a/website_gale_shapley/front/components/ui/toast.tsx b/website_gale_shapley/front/components/ui/toast.tsx
new file mode 100644
index 0000000..521b94b
--- /dev/null
+++ b/website_gale_shapley/front/components/ui/toast.tsx
@@ -0,0 +1,129 @@
+"use client"
+
+import * as React from "react"
+import * as ToastPrimitives from "@radix-ui/react-toast"
+import { cva, type VariantProps } from "class-variance-authority"
+import { X } from "lucide-react"
+
+import { cn } from "@/lib/utils"
+
+const ToastProvider = ToastPrimitives.Provider
+
+const ToastViewport = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+))
+ToastViewport.displayName = ToastPrimitives.Viewport.displayName
+
+const toastVariants = cva(
+ "group pointer-events-auto relative flex w-full items-center justify-between space-x-4 overflow-hidden rounded-md border p-6 pr-8 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full",
+ {
+ variants: {
+ variant: {
+ default: "border bg-background text-foreground",
+ destructive:
+ "destructive group border-destructive bg-destructive text-destructive-foreground",
+ },
+ },
+ defaultVariants: {
+ variant: "default",
+ },
+ }
+)
+
+const Toast = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef &
+ VariantProps
+>(({ className, variant, ...props }, ref) => {
+ return (
+
+ )
+})
+Toast.displayName = ToastPrimitives.Root.displayName
+
+const ToastAction = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+))
+ToastAction.displayName = ToastPrimitives.Action.displayName
+
+const ToastClose = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+
+
+))
+ToastClose.displayName = ToastPrimitives.Close.displayName
+
+const ToastTitle = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+))
+ToastTitle.displayName = ToastPrimitives.Title.displayName
+
+const ToastDescription = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+))
+ToastDescription.displayName = ToastPrimitives.Description.displayName
+
+type ToastProps = React.ComponentPropsWithoutRef
+
+type ToastActionElement = React.ReactElement
+
+export {
+ type ToastProps,
+ type ToastActionElement,
+ ToastProvider,
+ ToastViewport,
+ Toast,
+ ToastTitle,
+ ToastDescription,
+ ToastClose,
+ ToastAction,
+}
diff --git a/website_gale_shapley/front/components/ui/toaster.tsx b/website_gale_shapley/front/components/ui/toaster.tsx
new file mode 100644
index 0000000..e223385
--- /dev/null
+++ b/website_gale_shapley/front/components/ui/toaster.tsx
@@ -0,0 +1,35 @@
+"use client"
+
+import {
+ Toast,
+ ToastClose,
+ ToastDescription,
+ ToastProvider,
+ ToastTitle,
+ ToastViewport,
+} from "@/components/ui/toast"
+import { useToast } from "@/components/ui/use-toast"
+
+export function Toaster() {
+ const { toasts } = useToast()
+
+ return (
+
+ {toasts.map(function ({ id, title, description, action, ...props }) {
+ return (
+
+
+ {title && {title} }
+ {description && (
+ {description}
+ )}
+
+ {action}
+
+
+ )
+ })}
+
+
+ )
+}
diff --git a/website_gale_shapley/front/components/ui/use-toast.ts b/website_gale_shapley/front/components/ui/use-toast.ts
new file mode 100644
index 0000000..02e111d
--- /dev/null
+++ b/website_gale_shapley/front/components/ui/use-toast.ts
@@ -0,0 +1,194 @@
+"use client"
+
+// Inspired by react-hot-toast library
+import * as React from "react"
+
+import type {
+ ToastActionElement,
+ ToastProps,
+} from "@/components/ui/toast"
+
+const TOAST_LIMIT = 1
+const TOAST_REMOVE_DELAY = 1000000
+
+type ToasterToast = ToastProps & {
+ id: string
+ title?: React.ReactNode
+ description?: React.ReactNode
+ action?: ToastActionElement
+}
+
+const actionTypes = {
+ ADD_TOAST: "ADD_TOAST",
+ UPDATE_TOAST: "UPDATE_TOAST",
+ DISMISS_TOAST: "DISMISS_TOAST",
+ REMOVE_TOAST: "REMOVE_TOAST",
+} as const
+
+let count = 0
+
+function genId() {
+ count = (count + 1) % Number.MAX_SAFE_INTEGER
+ return count.toString()
+}
+
+type ActionType = typeof actionTypes
+
+type Action =
+ | {
+ type: ActionType["ADD_TOAST"]
+ toast: ToasterToast
+ }
+ | {
+ type: ActionType["UPDATE_TOAST"]
+ toast: Partial
+ }
+ | {
+ type: ActionType["DISMISS_TOAST"]
+ toastId?: ToasterToast["id"]
+ }
+ | {
+ type: ActionType["REMOVE_TOAST"]
+ toastId?: ToasterToast["id"]
+ }
+
+interface State {
+ toasts: ToasterToast[]
+}
+
+const toastTimeouts = new Map>()
+
+const addToRemoveQueue = (toastId: string) => {
+ if (toastTimeouts.has(toastId)) {
+ return
+ }
+
+ const timeout = setTimeout(() => {
+ toastTimeouts.delete(toastId)
+ dispatch({
+ type: "REMOVE_TOAST",
+ toastId: toastId,
+ })
+ }, TOAST_REMOVE_DELAY)
+
+ toastTimeouts.set(toastId, timeout)
+}
+
+export const reducer = (state: State, action: Action): State => {
+ switch (action.type) {
+ case "ADD_TOAST":
+ return {
+ ...state,
+ toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT),
+ }
+
+ case "UPDATE_TOAST":
+ return {
+ ...state,
+ toasts: state.toasts.map((t) =>
+ t.id === action.toast.id ? { ...t, ...action.toast } : t
+ ),
+ }
+
+ case "DISMISS_TOAST": {
+ const { toastId } = action
+
+ // ! Side effects ! - This could be extracted into a dismissToast() action,
+ // but I'll keep it here for simplicity
+ if (toastId) {
+ addToRemoveQueue(toastId)
+ } else {
+ state.toasts.forEach((toast) => {
+ addToRemoveQueue(toast.id)
+ })
+ }
+
+ return {
+ ...state,
+ toasts: state.toasts.map((t) =>
+ t.id === toastId || toastId === undefined
+ ? {
+ ...t,
+ open: false,
+ }
+ : t
+ ),
+ }
+ }
+ case "REMOVE_TOAST":
+ if (action.toastId === undefined) {
+ return {
+ ...state,
+ toasts: [],
+ }
+ }
+ return {
+ ...state,
+ toasts: state.toasts.filter((t) => t.id !== action.toastId),
+ }
+ }
+}
+
+const listeners: Array<(state: State) => void> = []
+
+let memoryState: State = { toasts: [] }
+
+function dispatch(action: Action) {
+ memoryState = reducer(memoryState, action)
+ listeners.forEach((listener) => {
+ listener(memoryState)
+ })
+}
+
+type Toast = Omit
+
+function toast({ ...props }: Toast) {
+ const id = genId()
+
+ const update = (props: ToasterToast) =>
+ dispatch({
+ type: "UPDATE_TOAST",
+ toast: { ...props, id },
+ })
+ const dismiss = () => dispatch({ type: "DISMISS_TOAST", toastId: id })
+
+ dispatch({
+ type: "ADD_TOAST",
+ toast: {
+ ...props,
+ id,
+ open: true,
+ onOpenChange: (open) => {
+ if (!open) dismiss()
+ },
+ },
+ })
+
+ return {
+ id: id,
+ dismiss,
+ update,
+ }
+}
+
+function useToast() {
+ const [state, setState] = React.useState(memoryState)
+
+ React.useEffect(() => {
+ listeners.push(setState)
+ return () => {
+ const index = listeners.indexOf(setState)
+ if (index > -1) {
+ listeners.splice(index, 1)
+ }
+ }
+ }, [state])
+
+ return {
+ ...state,
+ toast,
+ dismiss: (toastId?: string) => dispatch({ type: "DISMISS_TOAST", toastId }),
+ }
+}
+
+export { useToast, toast }
diff --git a/website_gale_shapley/front/lib/actions.ts b/website_gale_shapley/front/lib/actions.ts
new file mode 100644
index 0000000..30a031a
--- /dev/null
+++ b/website_gale_shapley/front/lib/actions.ts
@@ -0,0 +1,9 @@
+'use server';
+
+import { z } from "zod";
+import { post } from "./axios_client";
+import { AllocationResult, formSchema } from "./formSchemas";
+
+export async function submitForm(values: z.infer): Promise {
+ return await post(`/divide/`, values);
+}
\ No newline at end of file
diff --git a/website_gale_shapley/front/lib/axios_client.ts b/website_gale_shapley/front/lib/axios_client.ts
new file mode 100644
index 0000000..587359e
--- /dev/null
+++ b/website_gale_shapley/front/lib/axios_client.ts
@@ -0,0 +1,92 @@
+import axios, { AxiosInstance, AxiosResponse, AxiosError } from 'axios';
+
+// Create an Axios instance with default configuration
+const apiClient: AxiosInstance = axios.create({
+ baseURL: "http://localhost:50010/api", // Replace with your backend URL
+ timeout: 10000, // Optional: adjust the timeout as needed
+ headers: {
+ 'Content-Type': 'application/json',
+ // Add any other default headers you need
+ },
+});
+
+// Define the shape of your error response if you know it
+interface ErrorResponse {
+ detail: string;
+ [key: string]: any; // To accommodate any additional properties
+}
+
+// Handle responses
+const handleResponse = (response: AxiosResponse): T => {
+ return response.data;
+};
+
+// Handle errors
+const handleError = (error: AxiosError): never => {
+ if (error.response) {
+ // Server responded with a status other than 2xx
+ const data = error.response.data as ErrorResponse; // Type assertion
+ const message = data.detail || 'Server Error';
+ console.error('Server Error:', data);
+ throw new AxiosError(message);
+ } else if (error.request) {
+ // Request was made but no response received
+ console.error('Network Error:', error.request);
+ throw new Error('Network Error');
+ } else {
+ // Something happened in setting up the request
+ console.error('Error:', error.message);
+ throw new Error(error.message);
+ }
+};
+
+// Define API methods
+
+export const get = async (url: string, params?: Record, headers?: Record): Promise => {
+ try {
+ const config = {
+ params,
+ headers
+ };
+ const response: AxiosResponse = await apiClient.get(url, config);
+ return handleResponse(response);
+ } catch (error) {
+ return handleError(error as AxiosError);
+ }
+};
+
+export const post = async (url: string, data: Record, headers?: Record): Promise => {
+ try {
+ const config = {
+ headers
+ };
+ const response: AxiosResponse = await apiClient.post(url, data, config);
+ return handleResponse(response);
+ } catch (error) {
+ return handleError(error as AxiosError);
+ }
+};
+
+export const put = async (url: string, data: Record, headers?: Record): Promise => {
+ try {
+ const config = {
+ headers
+ };
+ const response: AxiosResponse = await apiClient.put(url, data, config);
+ return handleResponse(response);
+ } catch (error) {
+ return handleError(error as AxiosError);
+ }
+};
+
+export const del = async (url: string, headers?: Record): Promise => {
+ try {
+ const config = {
+ headers
+ };
+ const response: AxiosResponse = await apiClient.delete(url, config);
+ return handleResponse(response);
+ } catch (error) {
+ return handleError(error as AxiosError);
+ }
+};
diff --git a/website_gale_shapley/front/lib/formSchemas.ts b/website_gale_shapley/front/lib/formSchemas.ts
new file mode 100644
index 0000000..9ac5650
--- /dev/null
+++ b/website_gale_shapley/front/lib/formSchemas.ts
@@ -0,0 +1,30 @@
+import { z } from "zod";
+
+// Reusable JSON validation schema
+const jsonStringSchema = z.string().refine((data) => {
+ try {
+ JSON.parse(data);
+ return true;
+ } catch {
+ return false;
+ }
+}, {
+ message: 'Invalid JSON format',
+});
+
+// Form schema using the reusable JSON validation schema
+export const formSchema = z.object({
+ courseCapabilities: jsonStringSchema,
+ agentCapabilities: jsonStringSchema,
+ bids: jsonStringSchema,
+ courseOrderPerStudent: jsonStringSchema,
+ tieBrakingLottery: jsonStringSchema,
+});
+
+export interface CoursePreferences {
+ [key: string]: string[];
+ }
+export interface AllocationResult {
+ allocation: CoursePreferences;
+ logs: string[];
+}
diff --git a/website_gale_shapley/front/lib/utils.ts b/website_gale_shapley/front/lib/utils.ts
new file mode 100644
index 0000000..d084cca
--- /dev/null
+++ b/website_gale_shapley/front/lib/utils.ts
@@ -0,0 +1,6 @@
+import { type ClassValue, clsx } from "clsx"
+import { twMerge } from "tailwind-merge"
+
+export function cn(...inputs: ClassValue[]) {
+ return twMerge(clsx(inputs))
+}
diff --git a/website_gale_shapley/front/next.config.mjs b/website_gale_shapley/front/next.config.mjs
new file mode 100644
index 0000000..8fbe263
--- /dev/null
+++ b/website_gale_shapley/front/next.config.mjs
@@ -0,0 +1,11 @@
+/** @type {import('next').NextConfig} */
+const nextConfig = {
+ output: 'standalone',
+ experimental: {
+ serverActions: {
+ allowedOrigins: ["0.0.0.0:50011", "localhost:50011", "http://csariel.xyz:50011"]
+ },
+ }
+};
+
+export default nextConfig;
diff --git a/website_gale_shapley/front/package-lock.json b/website_gale_shapley/front/package-lock.json
new file mode 100644
index 0000000..5cb2c36
--- /dev/null
+++ b/website_gale_shapley/front/package-lock.json
@@ -0,0 +1,5699 @@
+{
+ "name": "gale_shapley_algorithm",
+ "version": "0.1.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "gale_shapley_algorithm",
+ "version": "0.1.0",
+ "dependencies": {
+ "@hookform/resolvers": "^3.9.0",
+ "@radix-ui/react-dialog": "^1.1.1",
+ "@radix-ui/react-label": "^2.1.0",
+ "@radix-ui/react-select": "^2.1.1",
+ "@radix-ui/react-slot": "^1.1.0",
+ "@radix-ui/react-toast": "^1.2.1",
+ "axios": "^1.7.3",
+ "class-variance-authority": "^0.7.0",
+ "clsx": "^2.1.1",
+ "lucide-react": "^0.427.0",
+ "next": "14.2.5",
+ "react": "^18",
+ "react-dom": "^18",
+ "react-hook-form": "^7.52.2",
+ "tailwind-merge": "^2.4.0",
+ "tailwindcss-animate": "^1.0.7",
+ "zod": "^3.23.8"
+ },
+ "devDependencies": {
+ "@types/node": "^20",
+ "@types/react": "^18",
+ "@types/react-dom": "^18",
+ "eslint": "^8",
+ "eslint-config-next": "14.2.5",
+ "postcss": "^8",
+ "tailwindcss": "^3.4.1",
+ "typescript": "^5"
+ }
+ },
+ "node_modules/@alloc/quick-lru": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
+ "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+ "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
+ "dev": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.11.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz",
+ "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==",
+ "dev": true,
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+ "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.6.0",
+ "globals": "^13.19.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/js": {
+ "version": "8.57.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz",
+ "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@floating-ui/core": {
+ "version": "1.6.7",
+ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.7.tgz",
+ "integrity": "sha512-yDzVT/Lm101nQ5TCVeK65LtdN7Tj4Qpr9RTXJ2vPFLqtLxwOrpoxAHAJI8J3yYWUc40J0BDBheaitK5SJmno2g==",
+ "dependencies": {
+ "@floating-ui/utils": "^0.2.7"
+ }
+ },
+ "node_modules/@floating-ui/dom": {
+ "version": "1.6.10",
+ "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.10.tgz",
+ "integrity": "sha512-fskgCFv8J8OamCmyun8MfjB1Olfn+uZKjOKZ0vhYF3gRmEUXcGOjxWL8bBr7i4kIuPZ2KD2S3EUIOxnjC8kl2A==",
+ "dependencies": {
+ "@floating-ui/core": "^1.6.0",
+ "@floating-ui/utils": "^0.2.7"
+ }
+ },
+ "node_modules/@floating-ui/react-dom": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.1.tgz",
+ "integrity": "sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==",
+ "dependencies": {
+ "@floating-ui/dom": "^1.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8.0",
+ "react-dom": ">=16.8.0"
+ }
+ },
+ "node_modules/@floating-ui/utils": {
+ "version": "0.2.7",
+ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.7.tgz",
+ "integrity": "sha512-X8R8Oj771YRl/w+c1HqAC1szL8zWQRwFvgDwT129k9ACdBoud/+/rX9V0qiMl6LWUdP9voC2nDVZYPMQQsb6eA=="
+ },
+ "node_modules/@hookform/resolvers": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-3.9.0.tgz",
+ "integrity": "sha512-bU0Gr4EepJ/EQsH/IwEzYLsT/PEj5C0ynLQ4m+GSHS+xKH4TfSelhluTgOaoc4kA5s7eCsQbM4wvZLzELmWzUg==",
+ "peerDependencies": {
+ "react-hook-form": "^7.0.0"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array": {
+ "version": "0.11.14",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
+ "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
+ "deprecated": "Use @eslint/config-array instead",
+ "dev": true,
+ "dependencies": {
+ "@humanwhocodes/object-schema": "^2.0.2",
+ "debug": "^4.3.1",
+ "minimatch": "^3.0.5"
+ },
+ "engines": {
+ "node": ">=10.10.0"
+ }
+ },
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/object-schema": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
+ "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
+ "deprecated": "Use @eslint/object-schema instead",
+ "dev": true
+ },
+ "node_modules/@isaacs/cliui": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
+ "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+ "dependencies": {
+ "string-width": "^5.1.2",
+ "string-width-cjs": "npm:string-width@^4.2.0",
+ "strip-ansi": "^7.0.1",
+ "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+ "wrap-ansi": "^8.1.0",
+ "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
+ "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
+ "dependencies": {
+ "@jridgewell/set-array": "^1.2.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/set-array": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+ "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
+ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.25",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+ "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@next/env": {
+ "version": "14.2.5",
+ "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.5.tgz",
+ "integrity": "sha512-/zZGkrTOsraVfYjGP8uM0p6r0BDT6xWpkjdVbcz66PJVSpwXX3yNiRycxAuDfBKGWBrZBXRuK/YVlkNgxHGwmA=="
+ },
+ "node_modules/@next/eslint-plugin-next": {
+ "version": "14.2.5",
+ "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.5.tgz",
+ "integrity": "sha512-LY3btOpPh+OTIpviNojDpUdIbHW9j0JBYBjsIp8IxtDFfYFyORvw3yNq6N231FVqQA7n7lwaf7xHbVJlA1ED7g==",
+ "dev": true,
+ "dependencies": {
+ "glob": "10.3.10"
+ }
+ },
+ "node_modules/@next/swc-darwin-arm64": {
+ "version": "14.2.5",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.5.tgz",
+ "integrity": "sha512-/9zVxJ+K9lrzSGli1///ujyRfon/ZneeZ+v4ptpiPoOU+GKZnm8Wj8ELWU1Pm7GHltYRBklmXMTUqM/DqQ99FQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-darwin-x64": {
+ "version": "14.2.5",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.5.tgz",
+ "integrity": "sha512-vXHOPCwfDe9qLDuq7U1OYM2wUY+KQ4Ex6ozwsKxp26BlJ6XXbHleOUldenM67JRyBfVjv371oneEvYd3H2gNSA==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-linux-arm64-gnu": {
+ "version": "14.2.5",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.5.tgz",
+ "integrity": "sha512-vlhB8wI+lj8q1ExFW8lbWutA4M2ZazQNvMWuEDqZcuJJc78iUnLdPPunBPX8rC4IgT6lIx/adB+Cwrl99MzNaA==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-linux-arm64-musl": {
+ "version": "14.2.5",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.5.tgz",
+ "integrity": "sha512-NpDB9NUR2t0hXzJJwQSGu1IAOYybsfeB+LxpGsXrRIb7QOrYmidJz3shzY8cM6+rO4Aojuef0N/PEaX18pi9OA==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-linux-x64-gnu": {
+ "version": "14.2.5",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.5.tgz",
+ "integrity": "sha512-8XFikMSxWleYNryWIjiCX+gU201YS+erTUidKdyOVYi5qUQo/gRxv/3N1oZFCgqpesN6FPeqGM72Zve+nReVXQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-linux-x64-musl": {
+ "version": "14.2.5",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.5.tgz",
+ "integrity": "sha512-6QLwi7RaYiQDcRDSU/os40r5o06b5ue7Jsk5JgdRBGGp8l37RZEh9JsLSM8QF0YDsgcosSeHjglgqi25+m04IQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-win32-arm64-msvc": {
+ "version": "14.2.5",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.5.tgz",
+ "integrity": "sha512-1GpG2VhbspO+aYoMOQPQiqc/tG3LzmsdBH0LhnDS3JrtDx2QmzXe0B6mSZZiN3Bq7IOMXxv1nlsjzoS1+9mzZw==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-win32-ia32-msvc": {
+ "version": "14.2.5",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.5.tgz",
+ "integrity": "sha512-Igh9ZlxwvCDsu6438FXlQTHlRno4gFpJzqPjSIBZooD22tKeI4fE/YMRoHVJHmrQ2P5YL1DoZ0qaOKkbeFWeMg==",
+ "cpu": [
+ "ia32"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-win32-x64-msvc": {
+ "version": "14.2.5",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.5.tgz",
+ "integrity": "sha512-tEQ7oinq1/CjSG9uSTerca3v4AZ+dFa+4Yu6ihaG8Ud8ddqLQgFGcnwYls13H5X5CPDPZJdYxyeMui6muOLd4g==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@pkgjs/parseargs": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+ "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+ "optional": true,
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@radix-ui/number": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.0.tgz",
+ "integrity": "sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ=="
+ },
+ "node_modules/@radix-ui/primitive": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.0.tgz",
+ "integrity": "sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA=="
+ },
+ "node_modules/@radix-ui/react-arrow": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.0.tgz",
+ "integrity": "sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==",
+ "dependencies": {
+ "@radix-ui/react-primitive": "2.0.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-collection": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.0.tgz",
+ "integrity": "sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==",
+ "dependencies": {
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-context": "1.1.0",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-slot": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-compose-refs": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz",
+ "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==",
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-context": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz",
+ "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==",
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-dialog": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.1.tgz",
+ "integrity": "sha512-zysS+iU4YP3STKNS6USvFVqI4qqx8EpiwmT5TuCApVEBca+eRCbONi4EgzfNSuVnOXvC5UPHHMjs8RXO6DH9Bg==",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-context": "1.1.0",
+ "@radix-ui/react-dismissable-layer": "1.1.0",
+ "@radix-ui/react-focus-guards": "1.1.0",
+ "@radix-ui/react-focus-scope": "1.1.0",
+ "@radix-ui/react-id": "1.1.0",
+ "@radix-ui/react-portal": "1.1.1",
+ "@radix-ui/react-presence": "1.1.0",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-slot": "1.1.0",
+ "@radix-ui/react-use-controllable-state": "1.1.0",
+ "aria-hidden": "^1.1.1",
+ "react-remove-scroll": "2.5.7"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-direction": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz",
+ "integrity": "sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==",
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-dismissable-layer": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.0.tgz",
+ "integrity": "sha512-/UovfmmXGptwGcBQawLzvn2jOfM0t4z3/uKffoBlj724+n3FvBbZ7M0aaBOmkp6pqFYpO4yx8tSVJjx3Fl2jig==",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-use-callback-ref": "1.1.0",
+ "@radix-ui/react-use-escape-keydown": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-focus-guards": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.0.tgz",
+ "integrity": "sha512-w6XZNUPVv6xCpZUqb/yN9DL6auvpGX3C/ee6Hdi16v2UUy25HV2Q5bcflsiDyT/g5RwbPQ/GIT1vLkeRb+ITBw==",
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-focus-scope": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.0.tgz",
+ "integrity": "sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==",
+ "dependencies": {
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-use-callback-ref": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-id": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.0.tgz",
+ "integrity": "sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==",
+ "dependencies": {
+ "@radix-ui/react-use-layout-effect": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-label": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.0.tgz",
+ "integrity": "sha512-peLblDlFw/ngk3UWq0VnYaOLy6agTZZ+MUO/WhVfm14vJGML+xH4FAl2XQGLqdefjNb7ApRg6Yn7U42ZhmYXdw==",
+ "dependencies": {
+ "@radix-ui/react-primitive": "2.0.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-popper": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.0.tgz",
+ "integrity": "sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==",
+ "dependencies": {
+ "@floating-ui/react-dom": "^2.0.0",
+ "@radix-ui/react-arrow": "1.1.0",
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-context": "1.1.0",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-use-callback-ref": "1.1.0",
+ "@radix-ui/react-use-layout-effect": "1.1.0",
+ "@radix-ui/react-use-rect": "1.1.0",
+ "@radix-ui/react-use-size": "1.1.0",
+ "@radix-ui/rect": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-portal": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.1.tgz",
+ "integrity": "sha512-A3UtLk85UtqhzFqtoC8Q0KvR2GbXF3mtPgACSazajqq6A41mEQgo53iPzY4i6BwDxlIFqWIhiQ2G729n+2aw/g==",
+ "dependencies": {
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-use-layout-effect": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-presence": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.0.tgz",
+ "integrity": "sha512-Gq6wuRN/asf9H/E/VzdKoUtT8GC9PQc9z40/vEr0VCJ4u5XvvhWIrSsCB6vD2/cH7ugTdSfYq9fLJCcM00acrQ==",
+ "dependencies": {
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-use-layout-effect": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-primitive": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz",
+ "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==",
+ "dependencies": {
+ "@radix-ui/react-slot": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-select": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.1.1.tgz",
+ "integrity": "sha512-8iRDfyLtzxlprOo9IicnzvpsO1wNCkuwzzCM+Z5Rb5tNOpCdMvcc2AkzX0Fz+Tz9v6NJ5B/7EEgyZveo4FBRfQ==",
+ "dependencies": {
+ "@radix-ui/number": "1.1.0",
+ "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/react-collection": "1.1.0",
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-context": "1.1.0",
+ "@radix-ui/react-direction": "1.1.0",
+ "@radix-ui/react-dismissable-layer": "1.1.0",
+ "@radix-ui/react-focus-guards": "1.1.0",
+ "@radix-ui/react-focus-scope": "1.1.0",
+ "@radix-ui/react-id": "1.1.0",
+ "@radix-ui/react-popper": "1.2.0",
+ "@radix-ui/react-portal": "1.1.1",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-slot": "1.1.0",
+ "@radix-ui/react-use-callback-ref": "1.1.0",
+ "@radix-ui/react-use-controllable-state": "1.1.0",
+ "@radix-ui/react-use-layout-effect": "1.1.0",
+ "@radix-ui/react-use-previous": "1.1.0",
+ "@radix-ui/react-visually-hidden": "1.1.0",
+ "aria-hidden": "^1.1.1",
+ "react-remove-scroll": "2.5.7"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-slot": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz",
+ "integrity": "sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==",
+ "dependencies": {
+ "@radix-ui/react-compose-refs": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-toast": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.2.1.tgz",
+ "integrity": "sha512-5trl7piMXcZiCq7MW6r8YYmu0bK5qDpTWz+FdEPdKyft2UixkspheYbjbrLXVN5NGKHFbOP7lm8eD0biiSqZqg==",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/react-collection": "1.1.0",
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-context": "1.1.0",
+ "@radix-ui/react-dismissable-layer": "1.1.0",
+ "@radix-ui/react-portal": "1.1.1",
+ "@radix-ui/react-presence": "1.1.0",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-use-callback-ref": "1.1.0",
+ "@radix-ui/react-use-controllable-state": "1.1.0",
+ "@radix-ui/react-use-layout-effect": "1.1.0",
+ "@radix-ui/react-visually-hidden": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-use-callback-ref": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz",
+ "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==",
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-use-controllable-state": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz",
+ "integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==",
+ "dependencies": {
+ "@radix-ui/react-use-callback-ref": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-use-escape-keydown": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz",
+ "integrity": "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==",
+ "dependencies": {
+ "@radix-ui/react-use-callback-ref": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-use-layout-effect": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz",
+ "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==",
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-use-previous": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.0.tgz",
+ "integrity": "sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og==",
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-use-rect": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz",
+ "integrity": "sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==",
+ "dependencies": {
+ "@radix-ui/rect": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-use-size": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.0.tgz",
+ "integrity": "sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==",
+ "dependencies": {
+ "@radix-ui/react-use-layout-effect": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-visually-hidden": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.0.tgz",
+ "integrity": "sha512-N8MDZqtgCgG5S3aV60INAB475osJousYpZ4cTJ2cFbMpdHS5Y6loLTH8LPtkj2QN0x93J30HT/M3qJXM0+lyeQ==",
+ "dependencies": {
+ "@radix-ui/react-primitive": "2.0.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/rect": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.0.tgz",
+ "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg=="
+ },
+ "node_modules/@rushstack/eslint-patch": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.4.tgz",
+ "integrity": "sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==",
+ "dev": true
+ },
+ "node_modules/@swc/counter": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz",
+ "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ=="
+ },
+ "node_modules/@swc/helpers": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.5.tgz",
+ "integrity": "sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==",
+ "dependencies": {
+ "@swc/counter": "^0.1.3",
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@types/json5": {
+ "version": "0.0.29",
+ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
+ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
+ "dev": true
+ },
+ "node_modules/@types/node": {
+ "version": "20.14.15",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.15.tgz",
+ "integrity": "sha512-Fz1xDMCF/B00/tYSVMlmK7hVeLh7jE5f3B7X1/hmV0MJBwE27KlS7EvD/Yp+z1lm8mVhwV5w+n8jOZG8AfTlKw==",
+ "dev": true,
+ "dependencies": {
+ "undici-types": "~5.26.4"
+ }
+ },
+ "node_modules/@types/prop-types": {
+ "version": "15.7.12",
+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz",
+ "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==",
+ "devOptional": true
+ },
+ "node_modules/@types/react": {
+ "version": "18.3.3",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz",
+ "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==",
+ "devOptional": true,
+ "dependencies": {
+ "@types/prop-types": "*",
+ "csstype": "^3.0.2"
+ }
+ },
+ "node_modules/@types/react-dom": {
+ "version": "18.3.0",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz",
+ "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==",
+ "devOptional": true,
+ "dependencies": {
+ "@types/react": "*"
+ }
+ },
+ "node_modules/@typescript-eslint/parser": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.2.0.tgz",
+ "integrity": "sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "7.2.0",
+ "@typescript-eslint/types": "7.2.0",
+ "@typescript-eslint/typescript-estree": "7.2.0",
+ "@typescript-eslint/visitor-keys": "7.2.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.56.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/scope-manager": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz",
+ "integrity": "sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "7.2.0",
+ "@typescript-eslint/visitor-keys": "7.2.0"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/types": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.2.0.tgz",
+ "integrity": "sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==",
+ "dev": true,
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz",
+ "integrity": "sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "7.2.0",
+ "@typescript-eslint/visitor-keys": "7.2.0",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "minimatch": "9.0.3",
+ "semver": "^7.5.4",
+ "ts-api-utils": "^1.0.1"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
+ "version": "9.0.3",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
+ "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@typescript-eslint/visitor-keys": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz",
+ "integrity": "sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "7.2.0",
+ "eslint-visitor-keys": "^3.4.1"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@ungap/structured-clone": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
+ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
+ "dev": true
+ },
+ "node_modules/acorn": {
+ "version": "8.12.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
+ "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
+ "dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/any-promise": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/arg": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
+ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "node_modules/aria-hidden": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz",
+ "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==",
+ "dependencies": {
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/aria-query": {
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz",
+ "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==",
+ "dev": true,
+ "dependencies": {
+ "deep-equal": "^2.0.5"
+ }
+ },
+ "node_modules/array-buffer-byte-length": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz",
+ "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.5",
+ "is-array-buffer": "^3.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array-includes": {
+ "version": "3.1.8",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz",
+ "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-object-atoms": "^1.0.0",
+ "get-intrinsic": "^1.2.4",
+ "is-string": "^1.0.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/array.prototype.findlast": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz",
+ "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "es-shim-unscopables": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.findlastindex": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz",
+ "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "es-shim-unscopables": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.flat": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz",
+ "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "es-shim-unscopables": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.flatmap": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz",
+ "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "es-shim-unscopables": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.tosorted": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz",
+ "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.3",
+ "es-errors": "^1.3.0",
+ "es-shim-unscopables": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/arraybuffer.prototype.slice": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz",
+ "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==",
+ "dev": true,
+ "dependencies": {
+ "array-buffer-byte-length": "^1.0.1",
+ "call-bind": "^1.0.5",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.22.3",
+ "es-errors": "^1.2.1",
+ "get-intrinsic": "^1.2.3",
+ "is-array-buffer": "^3.0.4",
+ "is-shared-array-buffer": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/ast-types-flow": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz",
+ "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==",
+ "dev": true
+ },
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "node_modules/available-typed-arrays": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
+ "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
+ "dev": true,
+ "dependencies": {
+ "possible-typed-array-names": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/axe-core": {
+ "version": "4.10.0",
+ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.0.tgz",
+ "integrity": "sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/axios": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.3.tgz",
+ "integrity": "sha512-Ar7ND9pU99eJ9GpoGQKhKf58GpUOgnzuaB7ueNQ5BMi0p+LZ5oaEnfF999fAArcTIBwXTCHAmGcHOZJaWPq9Nw==",
+ "dependencies": {
+ "follow-redirects": "^1.15.6",
+ "form-data": "^4.0.0",
+ "proxy-from-env": "^1.1.0"
+ }
+ },
+ "node_modules/axobject-query": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz",
+ "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==",
+ "dev": true,
+ "dependencies": {
+ "deep-equal": "^2.0.5"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "dependencies": {
+ "fill-range": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/busboy": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
+ "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
+ "dependencies": {
+ "streamsearch": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=10.16.0"
+ }
+ },
+ "node_modules/call-bind": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
+ "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
+ "dev": true,
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "set-function-length": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camelcase-css": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
+ "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001651",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz",
+ "integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ]
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/chokidar/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/class-variance-authority": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.0.tgz",
+ "integrity": "sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==",
+ "dependencies": {
+ "clsx": "2.0.0"
+ },
+ "funding": {
+ "url": "https://joebell.co.uk"
+ }
+ },
+ "node_modules/class-variance-authority/node_modules/clsx": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz",
+ "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/client-only": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
+ "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="
+ },
+ "node_modules/clsx": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
+ "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/commander": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
+ "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "bin": {
+ "cssesc": "bin/cssesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/csstype": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
+ "devOptional": true
+ },
+ "node_modules/damerau-levenshtein": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
+ "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==",
+ "dev": true
+ },
+ "node_modules/data-view-buffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz",
+ "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.6",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/data-view-byte-length": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz",
+ "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/data-view-byte-offset": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz",
+ "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.6",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
+ "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/deep-equal": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz",
+ "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==",
+ "dev": true,
+ "dependencies": {
+ "array-buffer-byte-length": "^1.0.0",
+ "call-bind": "^1.0.5",
+ "es-get-iterator": "^1.1.3",
+ "get-intrinsic": "^1.2.2",
+ "is-arguments": "^1.1.1",
+ "is-array-buffer": "^3.0.2",
+ "is-date-object": "^1.0.5",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.2",
+ "isarray": "^2.0.5",
+ "object-is": "^1.1.5",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.4",
+ "regexp.prototype.flags": "^1.5.1",
+ "side-channel": "^1.0.4",
+ "which-boxed-primitive": "^1.0.2",
+ "which-collection": "^1.0.1",
+ "which-typed-array": "^1.1.13"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
+ },
+ "node_modules/define-data-property": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+ "dev": true,
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/define-properties": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
+ "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
+ "dev": true,
+ "dependencies": {
+ "define-data-property": "^1.0.1",
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/detect-node-es": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz",
+ "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ=="
+ },
+ "node_modules/didyoumean": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
+ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="
+ },
+ "node_modules/dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "dev": true,
+ "dependencies": {
+ "path-type": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/dlv": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
+ },
+ "node_modules/doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/eastasianwidth": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
+ },
+ "node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
+ },
+ "node_modules/enhanced-resolve": {
+ "version": "5.17.1",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz",
+ "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/es-abstract": {
+ "version": "1.23.3",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz",
+ "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==",
+ "dev": true,
+ "dependencies": {
+ "array-buffer-byte-length": "^1.0.1",
+ "arraybuffer.prototype.slice": "^1.0.3",
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
+ "data-view-buffer": "^1.0.1",
+ "data-view-byte-length": "^1.0.1",
+ "data-view-byte-offset": "^1.0.0",
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "es-set-tostringtag": "^2.0.3",
+ "es-to-primitive": "^1.2.1",
+ "function.prototype.name": "^1.1.6",
+ "get-intrinsic": "^1.2.4",
+ "get-symbol-description": "^1.0.2",
+ "globalthis": "^1.0.3",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2",
+ "has-proto": "^1.0.3",
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.2",
+ "internal-slot": "^1.0.7",
+ "is-array-buffer": "^3.0.4",
+ "is-callable": "^1.2.7",
+ "is-data-view": "^1.0.1",
+ "is-negative-zero": "^2.0.3",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.3",
+ "is-string": "^1.0.7",
+ "is-typed-array": "^1.1.13",
+ "is-weakref": "^1.0.2",
+ "object-inspect": "^1.13.1",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.5",
+ "regexp.prototype.flags": "^1.5.2",
+ "safe-array-concat": "^1.1.2",
+ "safe-regex-test": "^1.0.3",
+ "string.prototype.trim": "^1.2.9",
+ "string.prototype.trimend": "^1.0.8",
+ "string.prototype.trimstart": "^1.0.8",
+ "typed-array-buffer": "^1.0.2",
+ "typed-array-byte-length": "^1.0.1",
+ "typed-array-byte-offset": "^1.0.2",
+ "typed-array-length": "^1.0.6",
+ "unbox-primitive": "^1.0.2",
+ "which-typed-array": "^1.1.15"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/es-define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
+ "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.2.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-get-iterator": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz",
+ "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.3",
+ "has-symbols": "^1.0.3",
+ "is-arguments": "^1.1.1",
+ "is-map": "^2.0.2",
+ "is-set": "^2.0.2",
+ "is-string": "^1.0.7",
+ "isarray": "^2.0.5",
+ "stop-iteration-iterator": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/es-iterator-helpers": {
+ "version": "1.0.19",
+ "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz",
+ "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.3",
+ "es-errors": "^1.3.0",
+ "es-set-tostringtag": "^2.0.3",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "globalthis": "^1.0.3",
+ "has-property-descriptors": "^1.0.2",
+ "has-proto": "^1.0.3",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.7",
+ "iterator.prototype": "^1.1.2",
+ "safe-array-concat": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-object-atoms": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz",
+ "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==",
+ "dev": true,
+ "dependencies": {
+ "es-errors": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-set-tostringtag": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz",
+ "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.2.4",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-shim-unscopables": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz",
+ "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==",
+ "dev": true,
+ "dependencies": {
+ "hasown": "^2.0.0"
+ }
+ },
+ "node_modules/es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dev": true,
+ "dependencies": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "8.57.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz",
+ "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.6.1",
+ "@eslint/eslintrc": "^2.1.4",
+ "@eslint/js": "8.57.0",
+ "@humanwhocodes/config-array": "^0.11.14",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
+ "@ungap/structured-clone": "^1.2.0",
+ "ajv": "^6.12.4",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.2.2",
+ "eslint-visitor-keys": "^3.4.3",
+ "espree": "^9.6.1",
+ "esquery": "^1.4.2",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "globals": "^13.19.0",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3",
+ "strip-ansi": "^6.0.1",
+ "text-table": "^0.2.0"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-config-next": {
+ "version": "14.2.5",
+ "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.2.5.tgz",
+ "integrity": "sha512-zogs9zlOiZ7ka+wgUnmcM0KBEDjo4Jis7kxN1jvC0N4wynQ2MIx/KBkg4mVF63J5EK4W0QMCn7xO3vNisjaAoA==",
+ "dev": true,
+ "dependencies": {
+ "@next/eslint-plugin-next": "14.2.5",
+ "@rushstack/eslint-patch": "^1.3.3",
+ "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || 7.0.0 - 7.2.0",
+ "eslint-import-resolver-node": "^0.3.6",
+ "eslint-import-resolver-typescript": "^3.5.2",
+ "eslint-plugin-import": "^2.28.1",
+ "eslint-plugin-jsx-a11y": "^6.7.1",
+ "eslint-plugin-react": "^7.33.2",
+ "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705"
+ },
+ "peerDependencies": {
+ "eslint": "^7.23.0 || ^8.0.0",
+ "typescript": ">=3.3.1"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-import-resolver-node": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
+ "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^3.2.7",
+ "is-core-module": "^2.13.0",
+ "resolve": "^1.22.4"
+ }
+ },
+ "node_modules/eslint-import-resolver-node/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-import-resolver-typescript": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz",
+ "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^4.3.4",
+ "enhanced-resolve": "^5.12.0",
+ "eslint-module-utils": "^2.7.4",
+ "fast-glob": "^3.3.1",
+ "get-tsconfig": "^4.5.0",
+ "is-core-module": "^2.11.0",
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts"
+ },
+ "peerDependencies": {
+ "eslint": "*",
+ "eslint-plugin-import": "*"
+ }
+ },
+ "node_modules/eslint-module-utils": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz",
+ "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^3.2.7"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependenciesMeta": {
+ "eslint": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-module-utils/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-plugin-import": {
+ "version": "2.29.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz",
+ "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==",
+ "dev": true,
+ "dependencies": {
+ "array-includes": "^3.1.7",
+ "array.prototype.findlastindex": "^1.2.3",
+ "array.prototype.flat": "^1.3.2",
+ "array.prototype.flatmap": "^1.3.2",
+ "debug": "^3.2.7",
+ "doctrine": "^2.1.0",
+ "eslint-import-resolver-node": "^0.3.9",
+ "eslint-module-utils": "^2.8.0",
+ "hasown": "^2.0.0",
+ "is-core-module": "^2.13.1",
+ "is-glob": "^4.0.3",
+ "minimatch": "^3.1.2",
+ "object.fromentries": "^2.0.7",
+ "object.groupby": "^1.0.1",
+ "object.values": "^1.1.7",
+ "semver": "^6.3.1",
+ "tsconfig-paths": "^3.15.0"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/eslint-plugin-jsx-a11y": {
+ "version": "6.9.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.9.0.tgz",
+ "integrity": "sha512-nOFOCaJG2pYqORjK19lqPqxMO/JpvdCZdPtNdxY3kvom3jTvkAbOvQvD8wuD0G8BYR0IGAGYDlzqWJOh/ybn2g==",
+ "dev": true,
+ "dependencies": {
+ "aria-query": "~5.1.3",
+ "array-includes": "^3.1.8",
+ "array.prototype.flatmap": "^1.3.2",
+ "ast-types-flow": "^0.0.8",
+ "axe-core": "^4.9.1",
+ "axobject-query": "~3.1.1",
+ "damerau-levenshtein": "^1.0.8",
+ "emoji-regex": "^9.2.2",
+ "es-iterator-helpers": "^1.0.19",
+ "hasown": "^2.0.2",
+ "jsx-ast-utils": "^3.3.5",
+ "language-tags": "^1.0.9",
+ "minimatch": "^3.1.2",
+ "object.fromentries": "^2.0.8",
+ "safe-regex-test": "^1.0.3",
+ "string.prototype.includes": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependencies": {
+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
+ }
+ },
+ "node_modules/eslint-plugin-react": {
+ "version": "7.35.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.35.0.tgz",
+ "integrity": "sha512-v501SSMOWv8gerHkk+IIQBkcGRGrO2nfybfj5pLxuJNFTPxxA3PSryhXTK+9pNbtkggheDdsC0E9Q8CuPk6JKA==",
+ "dev": true,
+ "dependencies": {
+ "array-includes": "^3.1.8",
+ "array.prototype.findlast": "^1.2.5",
+ "array.prototype.flatmap": "^1.3.2",
+ "array.prototype.tosorted": "^1.1.4",
+ "doctrine": "^2.1.0",
+ "es-iterator-helpers": "^1.0.19",
+ "estraverse": "^5.3.0",
+ "hasown": "^2.0.2",
+ "jsx-ast-utils": "^2.4.1 || ^3.0.0",
+ "minimatch": "^3.1.2",
+ "object.entries": "^1.1.8",
+ "object.fromentries": "^2.0.8",
+ "object.values": "^1.2.0",
+ "prop-types": "^15.8.1",
+ "resolve": "^2.0.0-next.5",
+ "semver": "^6.3.1",
+ "string.prototype.matchall": "^4.0.11",
+ "string.prototype.repeat": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7"
+ }
+ },
+ "node_modules/eslint-plugin-react-hooks": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz",
+ "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0"
+ }
+ },
+ "node_modules/eslint-plugin-react/node_modules/doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eslint-plugin-react/node_modules/resolve": {
+ "version": "2.0.0-next.5",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz",
+ "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==",
+ "dev": true,
+ "dependencies": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/eslint-plugin-react/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+ "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/espree": {
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+ "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^8.9.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.4.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
+ "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
+ "node_modules/fast-glob": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+ "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-glob/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true
+ },
+ "node_modules/fastq": {
+ "version": "1.17.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
+ "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dev": true,
+ "dependencies": {
+ "flat-cache": "^3.0.4"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
+ "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
+ "dev": true,
+ "dependencies": {
+ "flatted": "^3.2.9",
+ "keyv": "^4.5.3",
+ "rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz",
+ "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==",
+ "dev": true
+ },
+ "node_modules/follow-redirects": {
+ "version": "1.15.6",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
+ "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
+ }
+ ],
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/for-each": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
+ "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
+ "dev": true,
+ "dependencies": {
+ "is-callable": "^1.1.3"
+ }
+ },
+ "node_modules/foreground-child": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
+ "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
+ "dependencies": {
+ "cross-spawn": "^7.0.0",
+ "signal-exit": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/form-data": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/function.prototype.name": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz",
+ "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "functions-have-names": "^1.2.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/functions-have-names": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
+ "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
+ "dev": true,
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-nonce": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz",
+ "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/get-symbol-description": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz",
+ "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.5",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-tsconfig": {
+ "version": "4.7.6",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.6.tgz",
+ "integrity": "sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==",
+ "dev": true,
+ "dependencies": {
+ "resolve-pkg-maps": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
+ }
+ },
+ "node_modules/glob": {
+ "version": "10.3.10",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz",
+ "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==",
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^2.3.5",
+ "minimatch": "^9.0.1",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0",
+ "path-scurry": "^1.10.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/glob/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/glob/node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/globals": {
+ "version": "13.24.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/globalthis": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
+ "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
+ "dev": true,
+ "dependencies": {
+ "define-properties": "^1.2.1",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/globby": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+ "dev": true,
+ "dependencies": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.1.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
+ },
+ "node_modules/graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "dev": true
+ },
+ "node_modules/has-bigints": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
+ "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/has-property-descriptors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
+ "dev": true,
+ "dependencies": {
+ "es-define-property": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-proto": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
+ "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-tostringtag": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+ "dev": true,
+ "dependencies": {
+ "has-symbols": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/ignore": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
+ "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
+ "dev": true,
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "node_modules/internal-slot": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz",
+ "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==",
+ "dev": true,
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "hasown": "^2.0.0",
+ "side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dependencies": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "node_modules/is-arguments": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
+ "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-array-buffer": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz",
+ "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-async-function": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz",
+ "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==",
+ "dev": true,
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-bigint": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
+ "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
+ "dev": true,
+ "dependencies": {
+ "has-bigints": "^1.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-boolean-object": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
+ "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-callable": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.15.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz",
+ "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==",
+ "dependencies": {
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-data-view": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz",
+ "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==",
+ "dev": true,
+ "dependencies": {
+ "is-typed-array": "^1.1.13"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-date-object": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
+ "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
+ "dev": true,
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-finalizationregistry": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz",
+ "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-generator-function": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz",
+ "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==",
+ "dev": true,
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-map": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
+ "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-negative-zero": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
+ "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-number-object": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
+ "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
+ "dev": true,
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-regex": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
+ "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-set": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz",
+ "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-shared-array-buffer": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz",
+ "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-string": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
+ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
+ "dev": true,
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-symbol": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
+ "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
+ "dev": true,
+ "dependencies": {
+ "has-symbols": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-typed-array": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz",
+ "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==",
+ "dev": true,
+ "dependencies": {
+ "which-typed-array": "^1.1.14"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-weakmap": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz",
+ "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-weakref": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
+ "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-weakset": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz",
+ "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "get-intrinsic": "^1.2.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+ "dev": true
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
+ },
+ "node_modules/iterator.prototype": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz",
+ "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==",
+ "dev": true,
+ "dependencies": {
+ "define-properties": "^1.2.1",
+ "get-intrinsic": "^1.2.1",
+ "has-symbols": "^1.0.3",
+ "reflect.getprototypeof": "^1.0.4",
+ "set-function-name": "^2.0.1"
+ }
+ },
+ "node_modules/jackspeak": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz",
+ "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==",
+ "dependencies": {
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
+ }
+ },
+ "node_modules/jiti": {
+ "version": "1.21.6",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz",
+ "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==",
+ "bin": {
+ "jiti": "bin/jiti.js"
+ }
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+ "dev": true
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true
+ },
+ "node_modules/json5": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
+ "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+ "dev": true,
+ "dependencies": {
+ "minimist": "^1.2.0"
+ },
+ "bin": {
+ "json5": "lib/cli.js"
+ }
+ },
+ "node_modules/jsx-ast-utils": {
+ "version": "3.3.5",
+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz",
+ "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==",
+ "dev": true,
+ "dependencies": {
+ "array-includes": "^3.1.6",
+ "array.prototype.flat": "^1.3.1",
+ "object.assign": "^4.1.4",
+ "object.values": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/keyv": {
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+ "dev": true,
+ "dependencies": {
+ "json-buffer": "3.0.1"
+ }
+ },
+ "node_modules/language-subtag-registry": {
+ "version": "0.3.23",
+ "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz",
+ "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==",
+ "dev": true
+ },
+ "node_modules/language-tags": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz",
+ "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==",
+ "dev": true,
+ "dependencies": {
+ "language-subtag-registry": "^0.3.20"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/lilconfig": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
+ "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
+ },
+ "node_modules/loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "dependencies": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ },
+ "bin": {
+ "loose-envify": "cli.js"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="
+ },
+ "node_modules/lucide-react": {
+ "version": "0.427.0",
+ "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.427.0.tgz",
+ "integrity": "sha512-lv9s6c5BDF/ccuA0EgTdskTxIe11qpwBDmzRZHJAKtp8LTewAvDvOM+pTES9IpbBuTqkjiMhOmGpJ/CB+mKjFw==",
+ "peerDependencies": {
+ "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc"
+ }
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz",
+ "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==",
+ "dependencies": {
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/minipass": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "node_modules/mz": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
+ "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+ "dependencies": {
+ "any-promise": "^1.0.0",
+ "object-assign": "^4.0.1",
+ "thenify-all": "^1.0.0"
+ }
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
+ "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true
+ },
+ "node_modules/next": {
+ "version": "14.2.5",
+ "resolved": "https://registry.npmjs.org/next/-/next-14.2.5.tgz",
+ "integrity": "sha512-0f8aRfBVL+mpzfBjYfQuLWh2WyAwtJXCRfkPF4UJ5qd2YwrHczsrSzXU4tRMV0OAxR8ZJZWPFn6uhSC56UTsLA==",
+ "dependencies": {
+ "@next/env": "14.2.5",
+ "@swc/helpers": "0.5.5",
+ "busboy": "1.6.0",
+ "caniuse-lite": "^1.0.30001579",
+ "graceful-fs": "^4.2.11",
+ "postcss": "8.4.31",
+ "styled-jsx": "5.1.1"
+ },
+ "bin": {
+ "next": "dist/bin/next"
+ },
+ "engines": {
+ "node": ">=18.17.0"
+ },
+ "optionalDependencies": {
+ "@next/swc-darwin-arm64": "14.2.5",
+ "@next/swc-darwin-x64": "14.2.5",
+ "@next/swc-linux-arm64-gnu": "14.2.5",
+ "@next/swc-linux-arm64-musl": "14.2.5",
+ "@next/swc-linux-x64-gnu": "14.2.5",
+ "@next/swc-linux-x64-musl": "14.2.5",
+ "@next/swc-win32-arm64-msvc": "14.2.5",
+ "@next/swc-win32-ia32-msvc": "14.2.5",
+ "@next/swc-win32-x64-msvc": "14.2.5"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": "^1.1.0",
+ "@playwright/test": "^1.41.2",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0",
+ "sass": "^1.3.0"
+ },
+ "peerDependenciesMeta": {
+ "@opentelemetry/api": {
+ "optional": true
+ },
+ "@playwright/test": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/next/node_modules/postcss": {
+ "version": "8.4.31",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
+ "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "nanoid": "^3.3.6",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-hash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
+ "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/object-inspect": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz",
+ "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object-is": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz",
+ "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.assign": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz",
+ "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.5",
+ "define-properties": "^1.2.1",
+ "has-symbols": "^1.0.3",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.entries": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz",
+ "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.fromentries": {
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz",
+ "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.groupby": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz",
+ "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.values": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz",
+ "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dev": true,
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.9.4",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
+ "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
+ "dev": true,
+ "dependencies": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.5"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "node_modules/path-scurry": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+ "dependencies": {
+ "lru-cache": "^10.2.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
+ "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew=="
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pirates": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
+ "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/possible-typed-array-names": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
+ "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.4.41",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz",
+ "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "nanoid": "^3.3.7",
+ "picocolors": "^1.0.1",
+ "source-map-js": "^1.2.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/postcss-import": {
+ "version": "15.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
+ "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
+ "dependencies": {
+ "postcss-value-parser": "^4.0.0",
+ "read-cache": "^1.0.0",
+ "resolve": "^1.1.7"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.0.0"
+ }
+ },
+ "node_modules/postcss-js": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
+ "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
+ "dependencies": {
+ "camelcase-css": "^2.0.1"
+ },
+ "engines": {
+ "node": "^12 || ^14 || >= 16"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.21"
+ }
+ },
+ "node_modules/postcss-load-config": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
+ "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "lilconfig": "^3.0.0",
+ "yaml": "^2.3.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ },
+ "peerDependencies": {
+ "postcss": ">=8.0.9",
+ "ts-node": ">=9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "postcss": {
+ "optional": true
+ },
+ "ts-node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/postcss-load-config/node_modules/lilconfig": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz",
+ "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antonk52"
+ }
+ },
+ "node_modules/postcss-nested": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz",
+ "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "postcss-selector-parser": "^6.1.1"
+ },
+ "engines": {
+ "node": ">=12.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.14"
+ }
+ },
+ "node_modules/postcss-selector-parser": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz",
+ "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/prop-types": {
+ "version": "15.8.1",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+ "dev": true,
+ "dependencies": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.13.1"
+ }
+ },
+ "node_modules/proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+ },
+ "node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/react": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
+ "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-dom": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
+ "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
+ "dependencies": {
+ "loose-envify": "^1.1.0",
+ "scheduler": "^0.23.2"
+ },
+ "peerDependencies": {
+ "react": "^18.3.1"
+ }
+ },
+ "node_modules/react-hook-form": {
+ "version": "7.52.2",
+ "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.52.2.tgz",
+ "integrity": "sha512-pqfPEbERnxxiNMPd0bzmt1tuaPcVccywFDpyk2uV5xCIBphHV5T8SVnX9/o3kplPE1zzKt77+YIoq+EMwJp56A==",
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/react-hook-form"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17 || ^18 || ^19"
+ }
+ },
+ "node_modules/react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
+ "dev": true
+ },
+ "node_modules/react-remove-scroll": {
+ "version": "2.5.7",
+ "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.7.tgz",
+ "integrity": "sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA==",
+ "dependencies": {
+ "react-remove-scroll-bar": "^2.3.4",
+ "react-style-singleton": "^2.2.1",
+ "tslib": "^2.1.0",
+ "use-callback-ref": "^1.3.0",
+ "use-sidecar": "^1.1.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-remove-scroll-bar": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz",
+ "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==",
+ "dependencies": {
+ "react-style-singleton": "^2.2.1",
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-style-singleton": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz",
+ "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==",
+ "dependencies": {
+ "get-nonce": "^1.0.0",
+ "invariant": "^2.2.4",
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/read-cache": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
+ "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
+ "dependencies": {
+ "pify": "^2.3.0"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/reflect.getprototypeof": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz",
+ "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.1",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4",
+ "globalthis": "^1.0.3",
+ "which-builtin-type": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/regexp.prototype.flags": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
+ "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.6",
+ "define-properties": "^1.2.1",
+ "es-errors": "^1.3.0",
+ "set-function-name": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/resolve": {
+ "version": "1.22.8",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
+ "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
+ "dependencies": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/resolve-pkg-maps": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+ "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "deprecated": "Rimraf versions prior to v4 are no longer supported",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/rimraf/node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "deprecated": "Glob versions prior to v9 are no longer supported",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/safe-array-concat": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz",
+ "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "get-intrinsic": "^1.2.4",
+ "has-symbols": "^1.0.3",
+ "isarray": "^2.0.5"
+ },
+ "engines": {
+ "node": ">=0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/safe-regex-test": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz",
+ "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.6",
+ "es-errors": "^1.3.0",
+ "is-regex": "^1.1.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/scheduler": {
+ "version": "0.23.2",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
+ "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/set-function-length": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+ "dev": true,
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/set-function-name": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
+ "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
+ "dev": true,
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "functions-have-names": "^1.2.3",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/side-channel": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
+ "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4",
+ "object-inspect": "^1.13.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
+ "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/stop-iteration-iterator": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz",
+ "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==",
+ "dev": true,
+ "dependencies": {
+ "internal-slot": "^1.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/streamsearch": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
+ "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==",
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "dependencies": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/string-width-cjs": {
+ "name": "string-width",
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string-width-cjs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ },
+ "node_modules/string-width/node_modules/ansi-regex": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/string-width/node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/string.prototype.includes": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.0.tgz",
+ "integrity": "sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg==",
+ "dev": true,
+ "dependencies": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5"
+ }
+ },
+ "node_modules/string.prototype.matchall": {
+ "version": "4.0.11",
+ "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz",
+ "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.7",
+ "regexp.prototype.flags": "^1.5.2",
+ "set-function-name": "^2.0.2",
+ "side-channel": "^1.0.6"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.repeat": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz",
+ "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==",
+ "dev": true,
+ "dependencies": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5"
+ }
+ },
+ "node_modules/string.prototype.trim": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz",
+ "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.0",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trimend": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz",
+ "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trimstart": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
+ "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi-cjs": {
+ "name": "strip-ansi",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/styled-jsx": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz",
+ "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==",
+ "dependencies": {
+ "client-only": "0.0.1"
+ },
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "peerDependencies": {
+ "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0"
+ },
+ "peerDependenciesMeta": {
+ "@babel/core": {
+ "optional": true
+ },
+ "babel-plugin-macros": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/sucrase": {
+ "version": "3.35.0",
+ "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
+ "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "commander": "^4.0.0",
+ "glob": "^10.3.10",
+ "lines-and-columns": "^1.1.6",
+ "mz": "^2.7.0",
+ "pirates": "^4.0.1",
+ "ts-interface-checker": "^0.1.9"
+ },
+ "bin": {
+ "sucrase": "bin/sucrase",
+ "sucrase-node": "bin/sucrase-node"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/tailwind-merge": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.4.0.tgz",
+ "integrity": "sha512-49AwoOQNKdqKPd9CViyH5wJoSKsCDjUlzL8DxuGp3P1FsGY36NJDAa18jLZcaHAUUuTj+JB8IAo8zWgBNvBF7A==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/dcastil"
+ }
+ },
+ "node_modules/tailwindcss": {
+ "version": "3.4.9",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.9.tgz",
+ "integrity": "sha512-1SEOvRr6sSdV5IDf9iC+NU4dhwdqzF4zKKq3sAbasUWHEM6lsMhX+eNN5gkPx1BvLFEnZQEUFbXnGj8Qlp83Pg==",
+ "dependencies": {
+ "@alloc/quick-lru": "^5.2.0",
+ "arg": "^5.0.2",
+ "chokidar": "^3.5.3",
+ "didyoumean": "^1.2.2",
+ "dlv": "^1.1.3",
+ "fast-glob": "^3.3.0",
+ "glob-parent": "^6.0.2",
+ "is-glob": "^4.0.3",
+ "jiti": "^1.21.0",
+ "lilconfig": "^2.1.0",
+ "micromatch": "^4.0.5",
+ "normalize-path": "^3.0.0",
+ "object-hash": "^3.0.0",
+ "picocolors": "^1.0.0",
+ "postcss": "^8.4.23",
+ "postcss-import": "^15.1.0",
+ "postcss-js": "^4.0.1",
+ "postcss-load-config": "^4.0.1",
+ "postcss-nested": "^6.0.1",
+ "postcss-selector-parser": "^6.0.11",
+ "resolve": "^1.22.2",
+ "sucrase": "^3.32.0"
+ },
+ "bin": {
+ "tailwind": "lib/cli.js",
+ "tailwindcss": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/tailwindcss-animate": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz",
+ "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==",
+ "peerDependencies": {
+ "tailwindcss": ">=3.0.0 || insiders"
+ }
+ },
+ "node_modules/tapable": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
+ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+ "dev": true
+ },
+ "node_modules/thenify": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
+ "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
+ "dependencies": {
+ "any-promise": "^1.0.0"
+ }
+ },
+ "node_modules/thenify-all": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
+ "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
+ "dependencies": {
+ "thenify": ">= 3.1.0 < 4"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/ts-api-utils": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz",
+ "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=16"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.2.0"
+ }
+ },
+ "node_modules/ts-interface-checker": {
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
+ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="
+ },
+ "node_modules/tsconfig-paths": {
+ "version": "3.15.0",
+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
+ "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==",
+ "dev": true,
+ "dependencies": {
+ "@types/json5": "^0.0.29",
+ "json5": "^1.0.2",
+ "minimist": "^1.2.6",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
+ "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ=="
+ },
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/typed-array-buffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz",
+ "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "is-typed-array": "^1.1.13"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/typed-array-byte-length": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz",
+ "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/typed-array-byte-offset": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz",
+ "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==",
+ "dev": true,
+ "dependencies": {
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/typed-array-length": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz",
+ "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13",
+ "possible-typed-array-names": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "5.5.4",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz",
+ "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==",
+ "dev": true,
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/unbox-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
+ "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-bigints": "^1.0.2",
+ "has-symbols": "^1.0.3",
+ "which-boxed-primitive": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/undici-types": {
+ "version": "5.26.5",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
+ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
+ "dev": true
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/use-callback-ref": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz",
+ "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==",
+ "dependencies": {
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/use-sidecar": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz",
+ "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==",
+ "dependencies": {
+ "detect-node-es": "^1.1.0",
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/which-boxed-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
+ "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
+ "dev": true,
+ "dependencies": {
+ "is-bigint": "^1.0.1",
+ "is-boolean-object": "^1.1.0",
+ "is-number-object": "^1.0.4",
+ "is-string": "^1.0.5",
+ "is-symbol": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/which-builtin-type": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz",
+ "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==",
+ "dev": true,
+ "dependencies": {
+ "function.prototype.name": "^1.1.6",
+ "has-tostringtag": "^1.0.2",
+ "is-async-function": "^2.0.0",
+ "is-date-object": "^1.0.5",
+ "is-finalizationregistry": "^1.0.2",
+ "is-generator-function": "^1.0.10",
+ "is-regex": "^1.1.4",
+ "is-weakref": "^1.0.2",
+ "isarray": "^2.0.5",
+ "which-boxed-primitive": "^1.0.2",
+ "which-collection": "^1.0.2",
+ "which-typed-array": "^1.1.15"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/which-collection": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz",
+ "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==",
+ "dev": true,
+ "dependencies": {
+ "is-map": "^2.0.3",
+ "is-set": "^2.0.3",
+ "is-weakmap": "^2.0.2",
+ "is-weakset": "^2.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/which-typed-array": {
+ "version": "1.1.15",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz",
+ "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==",
+ "dev": true,
+ "dependencies": {
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/word-wrap": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/wrap-ansi": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+ "dependencies": {
+ "ansi-styles": "^6.1.0",
+ "string-width": "^5.0.1",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi-cjs": {
+ "name": "wrap-ansi",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-regex": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true
+ },
+ "node_modules/yaml": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz",
+ "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==",
+ "bin": {
+ "yaml": "bin.mjs"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/zod": {
+ "version": "3.23.8",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz",
+ "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==",
+ "funding": {
+ "url": "https://github.com/sponsors/colinhacks"
+ }
+ }
+ }
+}
diff --git a/website_gale_shapley/front/package.json b/website_gale_shapley/front/package.json
new file mode 100644
index 0000000..28e0b22
--- /dev/null
+++ b/website_gale_shapley/front/package.json
@@ -0,0 +1,40 @@
+{
+ "name": "gale_shapley_algorithm",
+ "version": "0.1.0",
+ "private": true,
+ "scripts": {
+ "dev": "next dev",
+ "build": "next build",
+ "start": "next start",
+ "lint": "next lint"
+ },
+ "dependencies": {
+ "@hookform/resolvers": "^3.9.0",
+ "@radix-ui/react-dialog": "^1.1.1",
+ "@radix-ui/react-label": "^2.1.0",
+ "@radix-ui/react-select": "^2.1.1",
+ "@radix-ui/react-slot": "^1.1.0",
+ "@radix-ui/react-toast": "^1.2.1",
+ "axios": "^1.7.3",
+ "class-variance-authority": "^0.7.0",
+ "clsx": "^2.1.1",
+ "lucide-react": "^0.427.0",
+ "next": "14.2.5",
+ "react": "^18",
+ "react-dom": "^18",
+ "react-hook-form": "^7.52.2",
+ "tailwind-merge": "^2.4.0",
+ "tailwindcss-animate": "^1.0.7",
+ "zod": "^3.23.8"
+ },
+ "devDependencies": {
+ "@types/node": "^20",
+ "@types/react": "^18",
+ "@types/react-dom": "^18",
+ "eslint": "^8",
+ "eslint-config-next": "14.2.5",
+ "postcss": "^8",
+ "tailwindcss": "^3.4.1",
+ "typescript": "^5"
+ }
+}
diff --git a/website_gale_shapley/front/postcss.config.mjs b/website_gale_shapley/front/postcss.config.mjs
new file mode 100644
index 0000000..1a69fd2
--- /dev/null
+++ b/website_gale_shapley/front/postcss.config.mjs
@@ -0,0 +1,8 @@
+/** @type {import('postcss-load-config').Config} */
+const config = {
+ plugins: {
+ tailwindcss: {},
+ },
+};
+
+export default config;
diff --git a/website_gale_shapley/front/public/next.svg b/website_gale_shapley/front/public/next.svg
new file mode 100644
index 0000000..5174b28
--- /dev/null
+++ b/website_gale_shapley/front/public/next.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/website_gale_shapley/front/public/vercel.svg b/website_gale_shapley/front/public/vercel.svg
new file mode 100644
index 0000000..d2f8422
--- /dev/null
+++ b/website_gale_shapley/front/public/vercel.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/website_gale_shapley/front/start.sh b/website_gale_shapley/front/start.sh
new file mode 100644
index 0000000..8a9803d
--- /dev/null
+++ b/website_gale_shapley/front/start.sh
@@ -0,0 +1 @@
+docker run -d -p 50011:50011 --network host --name front-container frontend-image
\ No newline at end of file
diff --git a/website_gale_shapley/front/tailwind.config.ts b/website_gale_shapley/front/tailwind.config.ts
new file mode 100644
index 0000000..84287e8
--- /dev/null
+++ b/website_gale_shapley/front/tailwind.config.ts
@@ -0,0 +1,80 @@
+import type { Config } from "tailwindcss"
+
+const config = {
+ darkMode: ["class"],
+ content: [
+ './pages/**/*.{ts,tsx}',
+ './components/**/*.{ts,tsx}',
+ './app/**/*.{ts,tsx}',
+ './src/**/*.{ts,tsx}',
+ ],
+ prefix: "",
+ theme: {
+ container: {
+ center: true,
+ padding: "2rem",
+ screens: {
+ "2xl": "1400px",
+ },
+ },
+ extend: {
+ colors: {
+ border: "hsl(var(--border))",
+ input: "hsl(var(--input))",
+ ring: "hsl(var(--ring))",
+ background: "hsl(var(--background))",
+ foreground: "hsl(var(--foreground))",
+ primary: {
+ DEFAULT: "hsl(var(--primary))",
+ foreground: "hsl(var(--primary-foreground))",
+ },
+ secondary: {
+ DEFAULT: "hsl(var(--secondary))",
+ foreground: "hsl(var(--secondary-foreground))",
+ },
+ destructive: {
+ DEFAULT: "hsl(var(--destructive))",
+ foreground: "hsl(var(--destructive-foreground))",
+ },
+ muted: {
+ DEFAULT: "hsl(var(--muted))",
+ foreground: "hsl(var(--muted-foreground))",
+ },
+ accent: {
+ DEFAULT: "hsl(var(--accent))",
+ foreground: "hsl(var(--accent-foreground))",
+ },
+ popover: {
+ DEFAULT: "hsl(var(--popover))",
+ foreground: "hsl(var(--popover-foreground))",
+ },
+ card: {
+ DEFAULT: "hsl(var(--card))",
+ foreground: "hsl(var(--card-foreground))",
+ },
+ },
+ borderRadius: {
+ lg: "var(--radius)",
+ md: "calc(var(--radius) - 2px)",
+ sm: "calc(var(--radius) - 4px)",
+ },
+ keyframes: {
+ "accordion-down": {
+ from: { height: "0" },
+ to: { height: "var(--radix-accordion-content-height)" },
+ },
+ "accordion-up": {
+ from: { height: "var(--radix-accordion-content-height)" },
+ to: { height: "0" },
+ },
+ },
+ animation: {
+ "accordion-down": "accordion-down 0.2s ease-out",
+ "accordion-up": "accordion-up 0.2s ease-out",
+ },
+ },
+ },
+ plugins: [require("tailwindcss-animate")],
+} satisfies Config
+
+export default config
\ No newline at end of file
diff --git a/website_gale_shapley/front/tsconfig.json b/website_gale_shapley/front/tsconfig.json
new file mode 100644
index 0000000..e7ff90f
--- /dev/null
+++ b/website_gale_shapley/front/tsconfig.json
@@ -0,0 +1,26 @@
+{
+ "compilerOptions": {
+ "lib": ["dom", "dom.iterable", "esnext"],
+ "allowJs": true,
+ "skipLibCheck": true,
+ "strict": true,
+ "noEmit": true,
+ "esModuleInterop": true,
+ "module": "esnext",
+ "moduleResolution": "bundler",
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "jsx": "preserve",
+ "incremental": true,
+ "plugins": [
+ {
+ "name": "next"
+ }
+ ],
+ "paths": {
+ "@/*": ["./*"]
+ }
+ },
+ "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
+ "exclude": ["node_modules"]
+}
diff --git a/website_gale_shapley/readme.md b/website_gale_shapley/readme.md
new file mode 100644
index 0000000..a8c23bc
--- /dev/null
+++ b/website_gale_shapley/readme.md
@@ -0,0 +1,105 @@
+# Gale-Shapley Course Allocation Website
+
+This project implements a web application for course allocation using the Gale-Shapley algorithm. It consists of a frontend built with Next.js and a backend powered by FastAPI.
+
+## Project Structure
+
+- `front/`: Frontend application
+- `back/`: Backend application
+
+## Frontend
+
+The frontend is a Next.js application that provides a user interface for inputting course allocation data and displaying results.
+
+### Key Features
+
+1. Input form for course capabilities, agent capabilities, bids, course order preferences, and tie-breaking lottery.
+2. Result display showing the final allocation and algorithm logs.
+
+### Setup and Running
+
+1. Navigate to the `front/` directory.
+2. Install dependencies:
+ ```
+ npm install
+ ```
+3. Run the development server:
+ ```
+ npm run dev
+ ```
+4. Open [http://localhost:3000](http://localhost:3000) in your browser.
+
+### Key Components
+
+- `AllocationForm`: Main form component for input data
+- `AllocationResultDialog`: Dialog component for displaying results
+
+
+## Backend
+
+The backend is a FastAPI application that implements the Gale-Shapley algorithm for course allocation.
+
+### Key Features
+
+1. RESTful API endpoint for processing allocation requests.
+2. Implementation of the Gale-Shapley algorithm.
+
+### Setup and Running
+
+1. Navigate to the `back/` directory.
+2. Install dependencies:
+ ```
+ pip install -r requirements.txt
+ ```
+3. Run the FastAPI server:
+ ```
+ uvicorn main:app --reload
+ ```
+
+### Key Components
+
+- `main.py`: Contains the FastAPI application and API endpoints
+
+
+## Algorithm
+
+The Gale-Shapley algorithm is implemented in the backend. It takes the following inputs:
+
+- Course capabilities
+- Agent capabilities
+- Bids
+- Course order preferences
+- Tie-breaking lottery
+
+The algorithm processes these inputs to produce a stable matching between students and courses.
+
+### Implementation
+
+The core algorithm is implemented in:
+
+
+## Deployment
+
+The project includes Kubernetes deployment configurations for both frontend and backend in their respective `deployment/` directories.
+
+To deploy:
+
+1. Build Docker images for frontend and backend.
+>>>
+```bash
+cd front
+docker build -t frontend-image .
+cd ../back
+docker build -t backend-image .
+```
+2. Deploy to Kubernetes:
+```bash
+cd front/deployment
+sh start.sh
+cd ../back/deployment
+sh start.sh
+```
+
+## License
+
+This project is licensed under the MIT License.
\ No newline at end of file
diff --git a/website_gale_shapley/setup.sh b/website_gale_shapley/setup.sh
new file mode 100644
index 0000000..8a87261
--- /dev/null
+++ b/website_gale_shapley/setup.sh
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+kubectl create namespace fairpyx
+
+# Setup backend
+cd back
+docker build -t backend-image .
+sh start.sh
+
+# Setup frontend
+cd ../front
+docker build -t frontned-image .
+sh start.sh
\ No newline at end of file
diff --git a/website_gale_shapley/stop.sh b/website_gale_shapley/stop.sh
new file mode 100644
index 0000000..44605b0
--- /dev/null
+++ b/website_gale_shapley/stop.sh
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+docker stop front-container
+docker rm front-container
+
+docker stop back-container
+docker rm back-container
\ No newline at end of file