From f63cf806472e2273a53be004e970429594750fe0 Mon Sep 17 00:00:00 2001 From: Ian Reynolds Date: Sun, 1 Sep 2024 23:11:09 -0400 Subject: [PATCH] good stopping point --- dash.json | 2 +- .../service_ridership_dashboard/.gitignore | 1 + .../service_ridership_dashboard/generate.py | 90 ++-- .../generate_old.py | 457 ------------------ .../service_ridership_dashboard/gtfs.py | 7 +- .../ridership_old.py | 76 --- .../service_summaries.py | 15 +- .../service_ridership_dashboard/summary.py | 87 ++++ .../service_ridership_dashboard/time.py | 52 -- .../service_ridership_dashboard/types.py | 61 +++ 10 files changed, 204 insertions(+), 644 deletions(-) create mode 100644 ingestor/chalicelib/service_ridership_dashboard/.gitignore delete mode 100644 ingestor/chalicelib/service_ridership_dashboard/generate_old.py delete mode 100644 ingestor/chalicelib/service_ridership_dashboard/ridership_old.py create mode 100644 ingestor/chalicelib/service_ridership_dashboard/summary.py delete mode 100644 ingestor/chalicelib/service_ridership_dashboard/time.py create mode 100644 ingestor/chalicelib/service_ridership_dashboard/types.py diff --git a/dash.json b/dash.json index f4be94b..68e59e1 100644 --- a/dash.json +++ b/dash.json @@ -1 +1 @@ -{"lineData": {"line-Red": {"id": "line-Red", "shortName": "", "longName": "Red Line", "routeIds": ["Red"], "startDate": "2018-01-01", "lineKind": "bus", "ridershipHistory": [122736, 122736, 122736, 122736, 122736, 122736, 122736, 185912, 185912, 185912, 185912, 185912, 185912, 185912, 185489, 185489, 185489, 185489, 185489, 185489, 185489, 193488, 193488, 193488, 193488, 193488, 193488, 193488, 192017, 192017, 192017, 192017, 192017, 192017, 192017, 189824, 189824, 189824, 189824, 189824, 189824, 189824, 194198, 194198, 194198, 194198, 194198, 194198, 194198, 182912, 182912, 182912, 182912, 182912, 182912, 182912, 184373, 184373, 184373, 184373, 184373, 184373, 184373, 178126, 178126, 178126, 178126, 178126, 178126, 178126, 155855, 155855, 155855, 155855, 155855, 155855, 155855, 188125, 188125, 188125, 188125, 188125, 188125, 188125, 197474, 197474, 197474, 197474, 197474, 197474, 197474, 205680, 205680, 205680, 205680, 205680, 205680, 205680, 203109, 203109, 203109, 203109, 203109, 203109, 203109, 181283, 181283, 181283, 181283, 181283, 181283, 181283, 198255, 198255, 198255, 198255, 198255, 198255, 198255, 202483, 202483, 202483, 202483, 202483, 202483, 202483, 198818, 198818, 198818, 198818, 198818, 198818, 198818, 199062, 199062, 199062, 199062, 199062, 199062, 199062, 203522, 203522, 203522, 203522, 203522, 203522, 203522, 195779, 195779, 195779, 195779, 195779, 195779, 195779, 202095, 202095, 202095, 202095, 202095, 202095, 202095, 199585, 199585, 199585, 199585, 199585, 199585, 199585, 198994, 198994, 198994, 198994, 198994, 198994, 198994, 199835, 199835, 199835, 199835, 199835, 199835, 199835, 171656, 171656, 171656, 171656, 171656, 171656, 171656, 203203, 203203, 203203, 203203, 203203, 203203, 203203, 200610, 200610, 200610, 200610, 200610, 200610, 200610, 202409, 202409, 202409, 202409, 202409, 202409, 202409, 203914, 203914, 203914, 203914, 203914, 203914, 203914, 195264, 195264, 195264, 195264, 195264, 195264, 195264, 189905, 189905, 189905, 189905, 189905, 189905, 189905, 187941, 187941, 187941, 187941, 187941, 187941, 187941, 182592, 182592, 182592, 182592, 182592, 182592, 182592, 202356, 202356, 202356, 202356, 202356, 202356, 202356, 208945, 208945, 208945, 208945, 208945, 208945, 208945, 204782, 204782, 204782, 204782, 204782, 204782, 204782, 206923, 206923, 206923, 206923, 206923, 206923, 206923, 210704, 210704, 210704, 210704, 210704, 210704, 210704, 212634, 212634, 212634, 212634, 212634, 212634, 212634, 210614, 210614, 210614, 210614, 210614, 210614, 210614, 210594, 210594, 210594, 210594, 210594, 210594, 210594, 213703, 213703, 213703, 213703, 213703, 213703, 213703, 208274, 208274, 208274, 208274, 208274, 208274, 208274, 205388, 205388, 205388, 205388, 205388, 205388, 205388, 162985, 162985, 162985, 162985, 162985, 162985, 162985, 203248, 203248, 203248, 203248, 203248, 203248, 203248, 201329, 201329, 201329, 201329, 201329, 201329, 201329, 198366, 198366, 198366, 198366, 198366, 198366, 198366, 182006, 182006, 182006, 182006, 182006, 182006, 182006, 105016, 105016, 105016, 105016, 105016, 105016, 105016, 155304, 155304, 155304, 155304, 155304, 155304, 155304, 184955, 184955, 184955, 184955, 184955, 184955, 184955, 185283, 185283, 185283, 185283, 185283, 185283, 185283, 183364, 183364, 183364, 183364, 183364, 183364, 183364, 186778, 186778, 186778, 186778, 186778, 186778, 186778, 204013, 204013, 204013, 204013, 204013, 204013, 204013, 195155, 195155, 195155, 195155, 195155, 195155, 195155, 190746, 190746, 190746, 190746, 190746, 190746, 190746, 192467, 192467, 192467, 192467, 192467, 192467, 192467, 186686, 186686, 186686, 186686, 186686, 186686, 186686, 192375, 192375, 192375, 192375, 192375, 192375, 192375, 191621, 191621, 191621, 191621, 191621, 191621, 191621, 196751, 196751, 196751, 196751, 196751, 196751, 196751, 197210, 197210, 197210, 197210, 197210, 197210, 197210, 198766, 198766, 198766, 198766, 198766, 198766, 198766, 184988, 184988, 184988, 184988, 184988, 184988, 184988, 200523, 200523, 200523, 200523, 200523, 200523, 200523, 199340, 199340, 199340, 199340, 199340, 199340, 199340, 198988, 198988, 198988, 198988, 198988, 198988, 198988, 197970, 197970, 197970, 197970, 197970, 197970, 197970, 194295, 194295, 194295, 194295, 194295, 194295, 194295, 200930, 200930, 200930, 200930, 200930, 200930, 200930, 204249, 204249, 204249, 204249, 204249, 204249, 204249, 177859, 177859, 177859, 177859, 177859, 177859, 177859, 186759, 186759, 186759, 186759, 186759, 186759, 186759, 189453, 189453, 189453, 189453, 189453, 189453, 189453, 160740, 160740, 160740, 160740, 160740, 160740, 160740, 187736, 187736, 187736, 187736, 187736, 187736, 187736, 188458, 188458, 188458, 188458, 188458, 188458, 188458, 187167, 187167, 187167, 187167, 187167, 187167, 187167, 187111, 187111, 187111, 187111, 187111, 187111, 187111, 185443, 185443, 185443, 185443, 185443, 185443, 185443, 179392, 179392, 179392, 179392, 179392, 179392, 179392, 174702, 174702, 174702, 174702, 174702, 174702, 174702, 172328, 172328, 172328, 172328, 172328, 172328, 172328, 195698, 195698, 195698, 195698, 195698, 195698, 195698, 198392, 198392, 198392, 198392, 198392, 198392, 198392, 203091, 203091, 203091, 203091, 203091, 203091, 203091, 201441, 201441, 201441, 201441, 201441, 201441, 201441, 200137, 200137, 200137, 200137, 200137, 200137, 200137, 200630, 200630, 200630, 200630, 200630, 200630, 200630, 205144, 205144, 205144, 205144, 205144, 205144, 205144, 203482, 203482, 203482, 203482, 203482, 203482, 203482, 204843, 204843, 204843, 204843, 204843, 204843, 204843, 202714, 202714, 202714, 202714, 202714, 202714, 202714, 198015, 198015, 198015, 198015, 198015, 198015, 198015, 195289, 195289, 195289, 195289, 195289, 195289, 195289, 157513, 157513, 157513, 157513, 157513, 157513, 157513, 186016, 186016, 186016, 186016, 186016, 186016, 186016, 194819, 194819, 194819, 194819, 194819, 194819, 194819, 183610, 183610, 183610, 183610, 183610, 183610, 183610, 105674, 105674, 105674, 105674, 105674, 105674, 105674, 131436, 131436, 131436, 131436, 131436, 131436, 131436, 183172, 183172, 183172, 183172, 183172, 183172, 183172, 186939, 186939, 186939, 186939, 186939, 186939, 186939, 187216, 187216, 187216, 187216, 187216, 187216, 187216, 191856, 191856, 191856, 191856, 191856, 191856, 191856, 188748, 188748, 188748, 188748, 188748, 188748, 188748, 189762, 189762, 189762, 189762, 189762, 189762, 189762, 181634, 181634, 181634, 181634, 181634, 181634, 181634, 191507, 191507, 191507, 191507, 191507, 191507, 191507, 187109, 187109, 187109, 187109, 187109, 187109, 187109, 142057, 142057, 142057, 142057, 142057, 142057, 142057, 38678, 38678, 38678, 38678, 38678, 38678, 38678, 20143, 20143, 20143, 20143, 20143, 20143, 20143, 16637, 16637, 16637, 16637, 16637, 16637, 16637, 14723, 14723, 14723, 14723, 14723, 14723, 14723, 13996, 13996, 13996, 13996, 13996, 13996, 13996, 13882, 13882, 13882, 13882, 13882, 13882, 13882, 14323, 14323, 14323, 14323, 14323, 14323, 14323, 15897, 15897, 15897, 15897, 15897, 15897, 15897, 16334, 16334, 16334, 16334, 16334, 16334, 16334, 17613, 17613, 17613, 17613, 17613, 17613, 17613, 19420, 19420, 19420, 19420, 19420, 19420, 19420, 21193, 21193, 21193, 21193, 21193, 21193, 21193, 24372, 24372, 24372, 24372, 24372, 24372, 24372, 27120, 27120, 27120, 27120, 27120, 27120, 27120, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 29936, 29936, 29936, 29936, 29936, 29936, 29936, 33125, 33125, 33125, 33125, 33125, 33125, 33125, 34677, 34677, 34677, 34677, 34677, 34677, 34677, 35632, 35632, 35632, 35632, 35632, 35632, 35632, 36248, 36248, 36248, 36248, 36248, 36248, 36248, 37297, 37297, 37297, 37297, 37297, 37297, 37297, 38498, 38498, 38498, 38498, 38498, 38498, 38498, 39359, 39359, 39359, 39359, 39359, 39359, 39359, 40559, 40559, 40559, 40559, 40559, 40559, 40559, 42198, 42198, 42198, 42198, 42198, 42198, 42198, 43340, 43340, 43340, 43340, 43340, 43340, 43340, 44459, 44459, 44459, 44459, 44459, 44459, 44459, 44855, 44855, 44855, 44855, 44855, 44855, 44855, 45112, 45112, 45112, 45112, 45112, 45112, 45112, 45344, 45344, 45344, 45344, 45344, 45344, 45344, 44142, 44142, 44142, 44142, 44142, 44142, 44142, 45535, 45535, 45535, 45535, 45535, 45535, 45535, 42822, 42822, 42822, 42822, 42822, 42822, 42822, 43339, 43339, 43339, 43339, 43339, 43339, 43339, 42621, 42621, 42621, 42621, 42621, 42621, 42621, 41973, 41973, 41973, 41973, 41973, 41973, 41973, 37706, 37706, 37706, 37706, 37706, 37706, 37706, 40384, 40384, 40384, 40384, 40384, 40384, 40384, 40673, 40673, 40673, 40673, 40673, 40673, 40673, 36352, 36352, 36352, 36352, 36352, 36352, 36352, 37586, 37586, 37586, 37586, 37586, 37586, 37586, 31702, 31702, 31702, 31702, 31702, 31702, 31702, 37668, 37668, 37668, 37668, 37668, 37668, 37668, 39366, 39366, 39366, 39366, 39366, 39366, 39366, 39158, 39158, 39158, 39158, 39158, 39158, 39158, 38086, 38086, 38086, 38086, 38086, 38086, 38086, 38065, 38065, 38065, 38065, 38065, 38065, 38065, 40503, 40503, 40503, 40503, 40503, 40503, 40503, 40196, 40196, 40196, 40196, 40196, 40196, 40196, 42402, 42402, 42402, 42402, 42402, 42402, 42402, 42553, 42553, 42553, 42553, 42553, 42553, 42553, 45125, 45125, 45125, 45125, 45125, 45125, 45125, 43107, 43107, 43107, 43107, 43107, 43107, 43107, 45658, 45658, 45658, 45658, 45658, 45658, 45658, 46849, 46849, 46849, 46849, 46849, 46849, 46849, 48520, 48520, 48520, 48520, 48520, 48520, 48520, 47470, 47470, 47470, 47470, 47470, 47470, 47470, 49051, 49051, 49051, 49051, 49051, 49051, 49051, 50492, 50492, 50492, 50492, 50492, 50492, 50492, 52552, 52552, 52552, 52552, 52552, 52552, 52552, 54732, 54732, 54732, 54732, 54732, 54732, 54732, 56664, 56664, 56664, 56664, 56664, 56664, 56664, 57959, 57959, 57959, 57959, 57959, 57959, 57959, 60435, 60435, 60435, 60435, 60435, 60435, 60435, 63965, 63965, 63965, 63965, 63965, 63965, 63965, 63372, 63372, 63372, 63372, 63372, 63372, 63372, 65101, 65101, 65101, 65101, 65101, 65101, 65101, 61782, 61782, 61782, 61782, 61782, 61782, 61782, 64409, 64409, 64409, 64409, 64409, 64409, 64409, 69770, 69770, 69770, 69770, 69770, 69770, 69770, 73560, 73560, 73560, 73560, 73560, 73560, 73560, 73329, 73329, 73329, 73329, 73329, 73329, 73329, 72694, 72694, 72694, 72694, 72694, 72694, 72694, 72458, 72458, 72458, 72458, 72458, 72458, 72458, 71374, 71374, 71374, 71374, 71374, 71374, 71374, 74506, 74506, 74506, 74506, 74506, 74506, 74506, 76097, 76097, 76097, 76097, 76097, 76097, 76097, 89294, 89294, 89294, 89294, 89294, 89294, 89294, 91003, 91003, 91003, 91003, 91003, 91003, 91003, 92855, 92855, 92855, 92855, 92855, 92855, 92855, 89722, 89722, 89722, 89722, 89722, 89722, 89722, 93018, 93018, 93018, 93018, 93018, 93018, 93018, 96439, 96439, 96439, 96439, 96439, 96439, 96439, 95431, 95431, 95431, 95431, 95431, 95431, 95431, 87343, 87343, 87343, 87343, 87343, 87343, 87343, 93655, 93655, 93655, 93655, 93655, 93655, 93655, 92386, 92386, 92386, 92386, 92386, 92386, 92386, 93897, 93897, 93897, 93897, 93897, 93897, 93897, 74542, 74542, 74542, 74542, 74542, 74542, 74542, 87863, 87863, 87863, 87863, 87863, 87863, 87863, 86925, 86925, 86925, 86925, 86925, 86925, 86925, 85170, 85170, 85170, 85170, 85170, 85170, 85170, 64429, 64429, 64429, 64429, 64429, 64429, 64429, 51046, 51046, 51046, 51046, 51046, 51046, 51046, 51791, 51791, 51791, 51791, 51791, 51791, 51791, 56740, 56740, 56740, 56740, 56740, 56740, 56740, 65591, 65591, 65591, 65591, 65591, 65591, 65591, 73493, 73493, 73493, 73493, 73493, 73493, 73493, 74321, 74321, 74321, 74321, 74321, 74321, 74321, 83544, 83544, 83544, 83544, 83544, 83544, 83544, 83778, 83778, 83778, 83778, 83778, 83778, 83778, 73353, 73353, 73353, 73353, 73353, 73353, 73353, 88844, 88844, 88844, 88844, 88844, 88844, 88844, 92961, 92961, 92961, 92961, 92961, 92961, 92961, 90359, 90359, 90359, 90359, 90359, 90359, 90359, 92999, 92999, 92999, 92999, 92999, 92999, 92999, 93588, 93588, 93588, 93588, 93588, 93588, 93588, 95885, 95885, 95885, 95885, 95885, 95885, 95885, 97244, 97244, 97244, 97244, 97244, 97244, 97244, 93763, 93763, 93763, 93763, 93763, 93763, 93763, 92050, 92050, 92050, 92050, 92050, 92050, 92050, 95011, 95011, 95011, 95011, 95011, 95011, 95011, 93713, 93713, 93713, 93713, 93713, 93713, 93713, 93928, 93928, 93928, 93928, 93928, 93928, 93928, 101456, 101456, 101456, 101456, 101456, 101456, 101456, 93865, 93865, 93865, 93865, 93865, 93865, 93865, 98237, 98237, 98237, 98237, 98237, 98237, 98237, 100638, 100638, 100638, 100638, 100638, 100638, 100638, 101748, 101748, 101748, 101748, 101748, 101748, 101748, 93036, 93036, 93036, 93036, 93036, 93036, 93036, 94762, 94762, 94762, 94762, 94762, 94762, 94762, 98794, 98794, 98794, 98794, 98794, 98794, 98794, 96257, 96257, 96257, 96257, 96257, 96257, 96257, 95740, 95740, 95740, 95740, 95740, 95740, 95740, 92453, 92453, 92453, 92453, 92453, 92453, 92453, 92147, 92147, 92147, 92147, 92147, 92147, 92147, 91674, 91674, 91674, 91674, 91674, 91674, 91674, 91354, 91354, 91354, 91354, 91354, 91354, 91354, 90818, 90818, 90818, 90818, 90818, 90818, 90818, 105176, 105176, 105176, 105176, 105176, 105176, 105176, 107786, 107786, 107786, 107786, 107786, 107786, 107786, 102409, 102409, 102409, 102409, 102409, 102409, 102409, 102856, 102856, 102856, 102856, 102856, 102856, 102856, 102955, 102955, 102955, 102955, 102955, 102955, 102955, 105109, 105109, 105109, 105109, 105109, 105109, 105109, 106311, 106311, 106311, 106311, 106311, 106311, 106311, 103796, 103796, 103796, 103796, 103796, 103796, 103796, 103136, 103136, 103136, 103136, 103136, 103136, 103136, 104989, 104989, 104989, 104989, 104989, 104989, 104989, 102271, 102271, 102271, 102271, 102271, 102271, 102271, 79350, 79350, 79350, 79350, 79350, 79350, 79350, 97838, 97838, 97838, 97838, 97838, 97838, 97838, 99109, 99109, 99109, 99109, 99109, 99109, 99109, 92099, 92099, 92099, 92099, 92099, 92099, 92099, 74709, 74709, 74709, 74709, 74709, 74709, 74709, 61525, 61525, 61525, 61525, 61525, 61525, 61525, 79371, 79371, 79371, 79371, 79371, 79371, 79371, 86785, 86785, 86785, 86785, 86785, 86785, 86785, 91898, 91898, 91898, 91898, 91898, 91898, 91898, 94912, 94912, 94912, 94912, 94912, 94912, 94912, 89153, 89153, 89153, 89153, 89153, 89153, 89153, 92255, 92255, 92255, 92255, 92255, 92255, 92255, 91951, 91951, 91951, 91951, 91951, 91951, 91951, 83645, 83645, 83645, 83645, 83645, 83645, 83645, 86415, 86415, 86415, 86415, 86415, 86415, 86415, 90563, 90563, 90563, 90563, 90563, 90563, 90563, 78225, 78225, 78225, 78225, 78225, 78225, 78225, 89257, 89257, 89257, 89257, 89257, 89257, 89257, 89637, 89637, 89637, 89637, 89637, 89637, 89637, 93753, 93753, 93753, 93753, 93753, 93753, 93753, 93265, 93265, 93265, 93265, 93265, 93265, 93265, 87685, 87685, 87685, 87685, 87685, 87685, 87685, 90279, 90279, 90279, 90279, 90279, 90279, 90279, 89917, 89917, 89917, 89917, 89917, 89917, 89917, 89744, 89744, 89744, 89744, 89744, 89744, 89744, 90717, 90717, 90717, 90717, 90717, 90717, 90717, 94920, 94920, 94920, 94920, 94920, 94920, 94920, 91916, 91916, 91916, 91916, 91916, 91916, 91916, 90679, 90679, 90679, 90679, 90679, 90679, 90679, 92755, 92755, 92755, 92755, 92755, 92755, 92755, 93422, 93422, 93422, 93422, 93422, 93422, 93422, 86694, 86694, 86694, 86694, 86694, 86694, 86694, 77866, 77866, 77866, 77866, 77866, 77866, 77866, 97947, 97947, 97947, 97947, 97947, 97947, 97947, 92406, 92406, 92406, 92406, 92406, 92406, 92406, 90188, 90188, 90188, 90188, 90188, 90188, 90188, 92620, 92620, 92620, 92620, 92620, 92620, 92620, 88925, 88925, 88925, 88925, 88925, 88925, 88925, 82718, 82718, 82718, 82718, 82718, 82718, 82718, 81373, 81373, 81373, 81373, 81373, 81373, 81373, 80069, 80069, 80069, 80069, 80069, 80069, 80069, 89655, 89655, 89655, 89655, 89655, 89655, 89655, 95605, 95605, 95605, 95605, 95605, 95605, 95605, 97566, 97566, 97566, 97566, 97566, 97566, 97566, 99647, 99647, 99647, 99647, 99647, 99647, 99647, 95168, 95168, 95168, 95168, 95168, 95168, 95168, 98067, 98067, 98067, 98067, 98067, 98067, 98067, 82019, 82019, 82019, 82019, 82019, 82019, 82019, 78721, 78721, 78721, 78721, 78721, 78721, 78721, 90829, 90829, 90829, 90829, 90829, 90829, 90829, 91616, 91616, 91616, 91616, 91616, 91616, 91616, 90427, 90427, 90427, 90427, 90427, 90427, 90427, 70180, 70180, 70180, 70180, 70180, 70180, 70180, 88786, 88786, 88786, 88786, 88786, 88786, 88786, 90413, 90413, 90413, 90413, 90413, 90413, 90413, 88697, 88697, 88697, 88697, 88697, 88697, 88697, 72100, 72100, 72100, 72100, 72100, 72100, 72100, 52308, 52308, 52308, 52308, 52308, 52308, 52308, 72986, 72986, 72986, 72986, 72986, 72986, 72986, 78348, 78348, 78348, 78348, 78348, 78348, 78348, 79336, 79336, 79336, 79336, 79336, 79336, 79336, 84922, 84922, 84922, 84922, 84922, 84922, 84922, 88096, 88096, 88096, 88096, 88096, 88096, 88096, 73097, 73097, 73097, 73097, 73097, 73097, 73097, 64757, 64757, 64757, 64757, 64757, 64757, 64757, 84224, 84224, 84224, 84224, 84224, 84224, 84224, 85137, 85137, 85137, 85137, 85137, 85137, 85137, 88546, 88546, 88546, 88546, 88546, 88546, 88546, 85881, 85881, 85881, 85881, 85881, 85881, 85881, 91211, 91211, 91211, 91211, 91211, 91211, 91211, 89736, 89736, 89736, 89736, 89736, 89736, 89736, 89592, 89592, 89592, 89592, 89592, 89592, 89592, 91143, 91143, 91143, 91143, 91143, 91143, 91143, 91601, 91601, 91601, 91601, 91601, 91601, 91601, 92642, 92642, 92642, 92642, 92642, 92642, 92642, 80500, 80500, 80500, 80500, 80500, 80500, 80500, 58966, 58966, 58966, 58966, 58966, 58966, 58966, 90702, 90702, 90702, 90702, 90702, 90702, 90702, 94408, 94408, 94408, 94408, 94408, 94408, 94408, 90431, 90431, 90431, 90431, 90431, 90431, 90431, 92268, 92268, 92268, 92268, 92268, 92268, 92268, 93461, 93461, 93461, 93461, 93461, 93461, 93461, 95606, 95606, 95606, 95606, 95606, 95606, 95606, 92469, 92469, 92469, 92469, 92469, 92469, 92469, 78538, 78538, 78538, 78538, 78538, 78538, 78538, 81425, 81425, 81425, 81425, 81425, 81425, 81425, 58971, 58971, 58971, 58971, 58971, 58971, 58971, 59195, 59195, 59195, 59195, 59195, 59195, 59195, 84655, 84655, 84655, 84655, 84655, 84655, 84655, 81547, 81547, 81547, 81547, 81547, 81547, 81547, 76535], "serviceHistory": [147.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 171.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 171.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 368.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 221.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 203.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 212.5, 212.5, 166.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 147.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 147.0, 223.0, 223.0, 223.0, 223.0, 223.0, 261.0, 147.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 171.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 171.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 147.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 208.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 147.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 259.0, 259.0, 259.0, 223.0, 223.0, 223.0, 223.0, 259.0, 259.0, 259.0, 223.0, 223.0, 223.0, 147.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 259.0, 259.0, 259.0, 223.0, 223.0, 223.0, 223.0, 259.0, 259.0, 259.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 149.0, 223.0, 223.0, 223.0, 223.0, 223.0, 257.0, 149.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 171.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 171.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 223.0, 217.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 149.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 171.0, 217.0, 217.0, 217.0, 217.0, 220.0, 220.0, 220.0, 217.0, 217.0, 217.0, 223.0, 220.0, 220.0, 220.0, 223.0, 223.0, 223.0, 217.0, 220.0, 220.0, 220.0, 217.0, 217.0, 217.0, 217.0, 220.0, 220.0, 220.0, 217.0, 217.0, 217.0, 217.0, 220.0, 220.0, 220.0, 217.0, 217.0, 217.0, 217.0, 220.0, 220.0, 220.0, 217.0, 217.0, 217.0, 217.0, 220.0, 220.0, 220.0, 217.0, 217.0, 217.0, 217.0, 220.0, 220.0, 220.0, 217.0, 217.0, 217.0, 217.0, 220.0, 220.0, 220.0, 217.0, 217.0, 217.0, 217.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 155.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 155.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 211.0, 211.0, 211.0, 211.0, 155.0, 155.0, 155.0, 211.0, 211.0, 211.0, 171.0, 155.0, 155.0, 155.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 171.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 171.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 211.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 151.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 145.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 171.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 207.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 155.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 155.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 171.0, 171.0, 171.0, 215.0, 215.0, 215.0, 215.0, 231.0, 231.0, 231.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 171.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 171.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 155.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 215.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 201.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 155.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 155.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 139.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 139.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 145.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 145.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 167.0, 165.0, 165.0, 165.0, 165.0, 165.0, 165.0, 165.0, 165.0, 165.0, 165.0, 165.0, 165.0, 165.0, 165.0, 165.0, 165.0, 165.0, 127.0, 127.0, 127.0, 127.0, 138.5, 138.5, 138.5, 138.5, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 152.5, 152.5, 152.5, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 254.0, 254.0, 254.0, 254.0, 254.0, 254.0, 254.0, 127.0, 127.0, 127.0, 118.0, 118.0, 118.0, 118.0, 118.0, 118.0, 118.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 103.0, 138.5, 138.5, 138.5, 127.0, 127.0, 127.0, 127.0, 138.5, 138.5, 138.5, 127.0, 127.0, 127.0, 127.0, 138.5, 138.5, 138.5, 127.0, 127.0, 127.0, 127.0, 138.5, 138.5, 138.5, 127.0, 127.0, 127.0, 138.5, 138.5, 138.5, 138.5, 127.0, 127.0, 127.0, 127.0, 119.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 139.0, 139.0, 139.0, 127.0, 127.0, 127.0, 127.0, 139.0, 139.0, 139.0, 122.0, 122.0, 122.0, 127.0, 127.0, 127.0, 127.0, 122.0, 122.0, 122.0, 127.0, 127.0, 127.0, 127.0, 122.0, 122.0, 122.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 117.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 107.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 105.0, 105.0, 105.0, 105.0, 105.0, 105.0, 105.0, 105.0, 105.0, 105.0, 105.0, 105.0, 105.0, 105.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 154.5, 154.5, 154.5, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 103.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 127.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 113.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 113.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 117.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 133.0, 133.0, 133.0, 133.0, 117.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 133.0, 145.0, 145.0, 145.0, 145.0, 145.0, 145.0, 145.0, 145.0, 145.0, 145.0, 145.0, 145.0, 145.0, 145.0, 145.0, 145.0, 145.0, 145.0, 145.0, 145.0, 145.0, 145.0, 145.0, 145.0, 260.0, 260.0, 260.0, 260.0, 260.0, 260.0, 260.0, 260.0, 260.0, 260.0, 260.0, 145.0, 145.0, 145.0, 145.0, 145.0, 145.0, 145.0, 145.0, 145.0, 145.0, 145.0, 145.0, 145.0, 145.0, 121.0, 145.0, 145.0, 145.0, 145.0, 145.0, 145.0, 145.0, 145.0, 145.0, 145.0, 145.0, 145.0, 145.0, 145.0, 145.0, 145.0, 145.0, 145.0, 145.0, 145.0, 163.0, 163.0, 163.0, 163.0, 163.0, 163.0, 163.0, 163.0, 163.0, 163.0, 163.0, 163.0, 163.0, 163.0, 163.0, 163.0, 163.0, 151.0, 163.0, 163.0, 163.0, 163.0, 163.0, 163.0, 163.0, 163.0, 163.0, 163.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 163.0, 163.0, 163.0, 163.0, 163.0, 163.0, 163.0, 163.0, 163.0, 163.0, 163.0, 163.0, 163.0, 163.0, 163.0, 163.0, 163.0, 163.0, 163.0, 163.0, 163.0, 296.5, 296.5, 296.5, 296.5, 296.5, 296.5, 296.5, 296.5, 181.0, 181.0, 181.0, 181.0, 181.0, 181.0], "serviceRegimes": {"present": {"weekday": {"cancelled": false, "tripsPerHour": [3.5, 0.0, 0.0, 0.0, 0.0, 8.0, 10.0, 9.5, 10.0, 9.5, 10.5, 9.5, 10.0, 10.0, 10.0, 10.0, 9.0, 10.0, 9.5, 10.5, 9.0, 7.5, 8.0, 7.0], "totalTrips": 181}, "saturday": {"cancelled": false, "tripsPerHour": [11.0, 2.5, 0.0, 0.0, 0.0, 11.0, 14.5, 15.0, 16.0, 14.5, 15.5, 15.5, 15.0, 15.5, 14.5, 15.0, 15.5, 14.5, 15.0, 16.0, 14.5, 16.0, 14.5, 15.0], "totalTrips": 296}, "sunday": {"cancelled": false, "tripsPerHour": [11.0, 2.5, 0.0, 0.0, 0.0, 0.5, 13.0, 15.0, 16.0, 14.5, 15.5, 15.5, 15.0, 15.5, 14.5, 15.0, 15.5, 14.5, 15.0, 16.0, 14.5, 16.0, 14.5, 15.0], "totalTrips": 284}}, "oneYearAgo": {"weekday": {"cancelled": false, "tripsPerHour": [4.0, 0.0, 0.0, 0.0, 0.0, 6.0, 7.5, 8.0, 8.0, 8.0, 7.5, 7.0, 7.0, 7.5, 7.0, 8.0, 8.0, 8.0, 7.5, 6.5, 5.5, 7.0, 6.5, 6.5], "totalTrips": 141}, "saturday": {"cancelled": false, "tripsPerHour": [3.5, 0.0, 0.0, 0.0, 0.0, 5.5, 6.0, 6.5, 6.5, 6.5, 6.0, 6.5, 6.0, 6.5, 6.5, 6.0, 6.5, 6.0, 6.5, 6.0, 6.0, 6.0, 6.0, 6.0], "totalTrips": 121}, "sunday": {"cancelled": false, "tripsPerHour": [3.5, 0.0, 0.0, 0.0, 0.0, 0.0, 5.5, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0], "totalTrips": 94}}, "preCovid": {"weekday": {"cancelled": false, "tripsPerHour": [4.5, 0.0, 0.0, 0.0, 0.0, 7.5, 13.0, 14.0, 14.5, 14.5, 11.0, 8.0, 9.0, 9.0, 10.5, 14.0, 14.5, 14.0, 14.0, 11.5, 10.5, 10.0, 9.5, 9.5], "totalTrips": 223}, "saturday": {"cancelled": false, "tripsPerHour": [5.5, 0.0, 0.0, 0.0, 0.0, 5.5, 9.0, 9.0, 8.5, 9.0, 8.5, 9.0, 9.0, 9.0, 9.0, 9.0, 9.0, 8.0, 9.5, 8.5, 9.0, 9.0, 9.0, 9.0], "totalTrips": 171}, "sunday": {"cancelled": false, "tripsPerHour": [6.0, 0.0, 0.0, 0.0, 0.0, 0.0, 7.0, 8.0, 8.0, 8.0, 8.0, 8.0, 8.0, 8.0, 8.0, 8.0, 8.0, 8.0, 8.0, 8.0, 8.0, 8.0, 8.0, 8.0], "totalTrips": 149}}}}, "line-Orange": {"id": "line-Orange", "shortName": "", "longName": "Orange Line", "routeIds": ["Orange"], "startDate": "2018-01-01", "lineKind": "bus", "ridershipHistory": [97482, 97482, 97482, 97482, 97482, 97482, 97482, 149128, 149128, 149128, 149128, 149128, 149128, 149128, 155324, 155324, 155324, 155324, 155324, 155324, 155324, 153558, 153558, 153558, 153558, 153558, 153558, 153558, 154843, 154843, 154843, 154843, 154843, 154843, 154843, 152022, 152022, 152022, 152022, 152022, 152022, 152022, 157506, 157506, 157506, 157506, 157506, 157506, 157506, 152145, 152145, 152145, 152145, 152145, 152145, 152145, 152388, 152388, 152388, 152388, 152388, 152388, 152388, 139590, 139590, 139590, 139590, 139590, 139590, 139590, 124961, 124961, 124961, 124961, 124961, 124961, 124961, 150501, 150501, 150501, 150501, 150501, 150501, 150501, 159354, 159354, 159354, 159354, 159354, 159354, 159354, 164759, 164759, 164759, 164759, 164759, 164759, 164759, 163646, 163646, 163646, 163646, 163646, 163646, 163646, 144476, 144476, 144476, 144476, 144476, 144476, 144476, 160051, 160051, 160051, 160051, 160051, 160051, 160051, 164008, 164008, 164008, 164008, 164008, 164008, 164008, 158737, 158737, 158737, 158737, 158737, 158737, 158737, 158268, 158268, 158268, 158268, 158268, 158268, 158268, 157396, 157396, 157396, 157396, 157396, 157396, 157396, 156118, 156118, 156118, 156118, 156118, 156118, 156118, 159825, 159825, 159825, 159825, 159825, 159825, 159825, 160186, 160186, 160186, 160186, 160186, 160186, 160186, 158805, 158805, 158805, 158805, 158805, 158805, 158805, 154052, 154052, 154052, 154052, 154052, 154052, 154052, 132986, 132986, 132986, 132986, 132986, 132986, 132986, 157054, 157054, 157054, 157054, 157054, 157054, 157054, 154442, 154442, 154442, 154442, 154442, 154442, 154442, 153920, 153920, 153920, 153920, 153920, 153920, 153920, 153189, 153189, 153189, 153189, 153189, 153189, 153189, 148751, 148751, 148751, 148751, 148751, 148751, 148751, 146848, 146848, 146848, 146848, 146848, 146848, 146848, 144156, 144156, 144156, 144156, 144156, 144156, 144156, 139403, 139403, 139403, 139403, 139403, 139403, 139403, 157624, 157624, 157624, 157624, 157624, 157624, 157624, 163634, 163634, 163634, 163634, 163634, 163634, 163634, 161046, 161046, 161046, 161046, 161046, 161046, 161046, 163089, 163089, 163089, 163089, 163089, 163089, 163089, 165524, 165524, 165524, 165524, 165524, 165524, 165524, 168368, 168368, 168368, 168368, 168368, 168368, 168368, 166265, 166265, 166265, 166265, 166265, 166265, 166265, 167670, 167670, 167670, 167670, 167670, 167670, 167670, 169578, 169578, 169578, 169578, 169578, 169578, 169578, 166224, 166224, 166224, 166224, 166224, 166224, 166224, 161725, 161725, 161725, 161725, 161725, 161725, 161725, 132979, 132979, 132979, 132979, 132979, 132979, 132979, 160794, 160794, 160794, 160794, 160794, 160794, 160794, 160989, 160989, 160989, 160989, 160989, 160989, 160989, 156740, 156740, 156740, 156740, 156740, 156740, 156740, 145937, 145937, 145937, 145937, 145937, 145937, 145937, 91166, 91166, 91166, 91166, 91166, 91166, 91166, 124157, 124157, 124157, 124157, 124157, 124157, 124157, 149460, 149460, 149460, 149460, 149460, 149460, 149460, 150597, 150597, 150597, 150597, 150597, 150597, 150597, 146392, 146392, 146392, 146392, 146392, 146392, 146392, 148082, 148082, 148082, 148082, 148082, 148082, 148082, 158940, 158940, 158940, 158940, 158940, 158940, 158940, 151001, 151001, 151001, 151001, 151001, 151001, 151001, 144470, 144470, 144470, 144470, 144470, 144470, 144470, 151622, 151622, 151622, 151622, 151622, 151622, 151622, 140155, 140155, 140155, 140155, 140155, 140155, 140155, 153859, 153859, 153859, 153859, 153859, 153859, 153859, 151461, 151461, 151461, 151461, 151461, 151461, 151461, 158541, 158541, 158541, 158541, 158541, 158541, 158541, 158741, 158741, 158741, 158741, 158741, 158741, 158741, 159553, 159553, 159553, 159553, 159553, 159553, 159553, 145981, 145981, 145981, 145981, 145981, 145981, 145981, 159924, 159924, 159924, 159924, 159924, 159924, 159924, 159121, 159121, 159121, 159121, 159121, 159121, 159121, 158181, 158181, 158181, 158181, 158181, 158181, 158181, 156469, 156469, 156469, 156469, 156469, 156469, 156469, 155036, 155036, 155036, 155036, 155036, 155036, 155036, 156895, 156895, 156895, 156895, 156895, 156895, 156895, 162097, 162097, 162097, 162097, 162097, 162097, 162097, 162740, 162740, 162740, 162740, 162740, 162740, 162740, 155097, 155097, 155097, 155097, 155097, 155097, 155097, 155851, 155851, 155851, 155851, 155851, 155851, 155851, 136118, 136118, 136118, 136118, 136118, 136118, 136118, 153691, 153691, 153691, 153691, 153691, 153691, 153691, 155113, 155113, 155113, 155113, 155113, 155113, 155113, 152827, 152827, 152827, 152827, 152827, 152827, 152827, 151544, 151544, 151544, 151544, 151544, 151544, 151544, 151336, 151336, 151336, 151336, 151336, 151336, 151336, 150228, 150228, 150228, 150228, 150228, 150228, 150228, 140743, 140743, 140743, 140743, 140743, 140743, 140743, 141695, 141695, 141695, 141695, 141695, 141695, 141695, 159340, 159340, 159340, 159340, 159340, 159340, 159340, 165796, 165796, 165796, 165796, 165796, 165796, 165796, 167315, 167315, 167315, 167315, 167315, 167315, 167315, 168168, 168168, 168168, 168168, 168168, 168168, 168168, 164299, 164299, 164299, 164299, 164299, 164299, 164299, 164502, 164502, 164502, 164502, 164502, 164502, 164502, 166392, 166392, 166392, 166392, 166392, 166392, 166392, 148322, 148322, 148322, 148322, 148322, 148322, 148322, 164533, 164533, 164533, 164533, 164533, 164533, 164533, 160374, 160374, 160374, 160374, 160374, 160374, 160374, 160290, 160290, 160290, 160290, 160290, 160290, 160290, 160838, 160838, 160838, 160838, 160838, 160838, 160838, 135823, 135823, 135823, 135823, 135823, 135823, 135823, 149830, 149830, 149830, 149830, 149830, 149830, 149830, 159072, 159072, 159072, 159072, 159072, 159072, 159072, 148797, 148797, 148797, 148797, 148797, 148797, 148797, 96299, 96299, 96299, 96299, 96299, 96299, 96299, 111200, 111200, 111200, 111200, 111200, 111200, 111200, 150987, 150987, 150987, 150987, 150987, 150987, 150987, 153353, 153353, 153353, 153353, 153353, 153353, 153353, 155610, 155610, 155610, 155610, 155610, 155610, 155610, 156008, 156008, 156008, 156008, 156008, 156008, 156008, 154099, 154099, 154099, 154099, 154099, 154099, 154099, 154198, 154198, 154198, 154198, 154198, 154198, 154198, 146286, 146286, 146286, 146286, 146286, 146286, 146286, 155749, 155749, 155749, 155749, 155749, 155749, 155749, 149229, 149229, 149229, 149229, 149229, 149229, 149229, 119224, 119224, 119224, 119224, 119224, 119224, 119224, 36696, 36696, 36696, 36696, 36696, 36696, 36696, 18632, 18632, 18632, 18632, 18632, 18632, 18632, 14896, 14896, 14896, 14896, 14896, 14896, 14896, 13071, 13071, 13071, 13071, 13071, 13071, 13071, 12341, 12341, 12341, 12341, 12341, 12341, 12341, 12241, 12241, 12241, 12241, 12241, 12241, 12241, 12884, 12884, 12884, 12884, 12884, 12884, 12884, 14101, 14101, 14101, 14101, 14101, 14101, 14101, 14437, 14437, 14437, 14437, 14437, 14437, 14437, 15987, 15987, 15987, 15987, 15987, 15987, 15987, 18142, 18142, 18142, 18142, 18142, 18142, 18142, 20049, 20049, 20049, 20049, 20049, 20049, 20049, 22264, 22264, 22264, 22264, 22264, 22264, 22264, 25483, 25483, 25483, 25483, 25483, 25483, 25483, 27350, 27350, 27350, 27350, 27350, 27350, 27350, 28070, 28070, 28070, 28070, 28070, 28070, 28070, 30495, 30495, 30495, 30495, 30495, 30495, 30495, 31051, 31051, 31051, 31051, 31051, 31051, 31051, 31945, 31945, 31945, 31945, 31945, 31945, 31945, 32973, 32973, 32973, 32973, 32973, 32973, 32973, 34376, 34376, 34376, 34376, 34376, 34376, 34376, 34203, 34203, 34203, 34203, 34203, 34203, 34203, 35596, 35596, 35596, 35596, 35596, 35596, 35596, 36494, 36494, 36494, 36494, 36494, 36494, 36494, 39677, 39677, 39677, 39677, 39677, 39677, 39677, 41304, 41304, 41304, 41304, 41304, 41304, 41304, 42014, 42014, 42014, 42014, 42014, 42014, 42014, 42273, 42273, 42273, 42273, 42273, 42273, 42273, 42082, 42082, 42082, 42082, 42082, 42082, 42082, 42930, 42930, 42930, 42930, 42930, 42930, 42930, 41640, 41640, 41640, 41640, 41640, 41640, 41640, 42873, 42873, 42873, 42873, 42873, 42873, 42873, 39973, 39973, 39973, 39973, 39973, 39973, 39973, 40527, 40527, 40527, 40527, 40527, 40527, 40527, 40477, 40477, 40477, 40477, 40477, 40477, 40477, 39045, 39045, 39045, 39045, 39045, 39045, 39045, 35374, 35374, 35374, 35374, 35374, 35374, 35374, 36949, 36949, 36949, 36949, 36949, 36949, 36949, 37848, 37848, 37848, 37848, 37848, 37848, 37848, 32805, 32805, 32805, 32805, 32805, 32805, 32805, 34569, 34569, 34569, 34569, 34569, 34569, 34569, 28844, 28844, 28844, 28844, 28844, 28844, 28844, 34018, 34018, 34018, 34018, 34018, 34018, 34018, 35164, 35164, 35164, 35164, 35164, 35164, 35164, 36029, 36029, 36029, 36029, 36029, 36029, 36029, 34336, 34336, 34336, 34336, 34336, 34336, 34336, 34205, 34205, 34205, 34205, 34205, 34205, 34205, 37215, 37215, 37215, 37215, 37215, 37215, 37215, 36989, 36989, 36989, 36989, 36989, 36989, 36989, 38673, 38673, 38673, 38673, 38673, 38673, 38673, 38665, 38665, 38665, 38665, 38665, 38665, 38665, 41137, 41137, 41137, 41137, 41137, 41137, 41137, 35975, 35975, 35975, 35975, 35975, 35975, 35975, 36424, 36424, 36424, 36424, 36424, 36424, 36424, 37795, 37795, 37795, 37795, 37795, 37795, 37795, 38769, 38769, 38769, 38769, 38769, 38769, 38769, 40581, 40581, 40581, 40581, 40581, 40581, 40581, 42219, 42219, 42219, 42219, 42219, 42219, 42219, 43448, 43448, 43448, 43448, 43448, 43448, 43448, 45444, 45444, 45444, 45444, 45444, 45444, 45444, 46859, 46859, 46859, 46859, 46859, 46859, 46859, 49204, 49204, 49204, 49204, 49204, 49204, 49204, 49739, 49739, 49739, 49739, 49739, 49739, 49739, 51505, 51505, 51505, 51505, 51505, 51505, 51505, 54143, 54143, 54143, 54143, 54143, 54143, 54143, 53386, 53386, 53386, 53386, 53386, 53386, 53386, 55121, 55121, 55121, 55121, 55121, 55121, 55121, 47860, 47860, 47860, 47860, 47860, 47860, 47860, 53280, 53280, 53280, 53280, 53280, 53280, 53280, 56730, 56730, 56730, 56730, 56730, 56730, 56730, 59717, 59717, 59717, 59717, 59717, 59717, 59717, 60610, 60610, 60610, 60610, 60610, 60610, 60610, 60534, 60534, 60534, 60534, 60534, 60534, 60534, 59318, 59318, 59318, 59318, 59318, 59318, 59318, 58209, 58209, 58209, 58209, 58209, 58209, 58209, 60680, 60680, 60680, 60680, 60680, 60680, 60680, 59760, 59760, 59760, 59760, 59760, 59760, 59760, 69561, 69561, 69561, 69561, 69561, 69561, 69561, 73363, 73363, 73363, 73363, 73363, 73363, 73363, 75375, 75375, 75375, 75375, 75375, 75375, 75375, 75718, 75718, 75718, 75718, 75718, 75718, 75718, 77103, 77103, 77103, 77103, 77103, 77103, 77103, 77876, 77876, 77876, 77876, 77876, 77876, 77876, 78749, 78749, 78749, 78749, 78749, 78749, 78749, 72088, 72088, 72088, 72088, 72088, 72088, 72088, 76712, 76712, 76712, 76712, 76712, 76712, 76712, 78494, 78494, 78494, 78494, 78494, 78494, 78494, 77920, 77920, 77920, 77920, 77920, 77920, 77920, 66128, 66128, 66128, 66128, 66128, 66128, 66128, 76466, 76466, 76466, 76466, 76466, 76466, 76466, 74771, 74771, 74771, 74771, 74771, 74771, 74771, 74883, 74883, 74883, 74883, 74883, 74883, 74883, 62251, 62251, 62251, 62251, 62251, 62251, 62251, 47983, 47983, 47983, 47983, 47983, 47983, 47983, 47944, 47944, 47944, 47944, 47944, 47944, 47944, 53760, 53760, 53760, 53760, 53760, 53760, 53760, 61544, 61544, 61544, 61544, 61544, 61544, 61544, 64695, 64695, 64695, 64695, 64695, 64695, 64695, 64450, 64450, 64450, 64450, 64450, 64450, 64450, 72418, 72418, 72418, 72418, 72418, 72418, 72418, 72373, 72373, 72373, 72373, 72373, 72373, 72373, 61485, 61485, 61485, 61485, 61485, 61485, 61485, 74790, 74790, 74790, 74790, 74790, 74790, 74790, 76734, 76734, 76734, 76734, 76734, 76734, 76734, 75628, 75628, 75628, 75628, 75628, 75628, 75628, 77914, 77914, 77914, 77914, 77914, 77914, 77914, 60149, 60149, 60149, 60149, 60149, 60149, 60149, 75500, 75500, 75500, 75500, 75500, 75500, 75500, 76835, 76835, 76835, 76835, 76835, 76835, 76835, 76061, 76061, 76061, 76061, 76061, 76061, 76061, 75464, 75464, 75464, 75464, 75464, 75464, 75464, 75987, 75987, 75987, 75987, 75987, 75987, 75987, 75886, 75886, 75886, 75886, 75886, 75886, 75886, 75452, 75452, 75452, 75452, 75452, 75452, 75452, 77453, 77453, 77453, 77453, 77453, 77453, 77453, 77577, 77577, 77577, 77577, 77577, 77577, 77577, 81578, 81578, 81578, 81578, 81578, 81578, 81578, 84052, 84052, 84052, 84052, 84052, 84052, 84052, 72160, 72160, 72160, 72160, 72160, 72160, 72160, 69616, 69616, 69616, 69616, 69616, 69616, 69616, 73470, 73470, 73470, 73470, 73470, 73470, 73470, 75520, 75520, 75520, 75520, 75520, 75520, 75520, 71375, 71375, 71375, 71375, 71375, 71375, 71375, 73970, 73970, 73970, 73970, 73970, 73970, 73970, 70692, 70692, 70692, 70692, 70692, 70692, 70692, 73268, 73268, 73268, 73268, 73268, 73268, 73268, 67626, 67626, 67626, 67626, 67626, 67626, 67626, 187, 187, 187, 187, 187, 187, 187, 177, 177, 177, 177, 177, 177, 177, 185, 185, 185, 185, 185, 185, 185, 199, 199, 199, 199, 199, 199, 199, 68360, 68360, 68360, 68360, 68360, 68360, 68360, 74863, 74863, 74863, 74863, 74863, 74863, 74863, 76228, 76228, 76228, 76228, 76228, 76228, 76228, 77972, 77972, 77972, 77972, 77972, 77972, 77972, 79734, 79734, 79734, 79734, 79734, 79734, 79734, 79693, 79693, 79693, 79693, 79693, 79693, 79693, 78875, 78875, 78875, 78875, 78875, 78875, 78875, 82012, 82012, 82012, 82012, 82012, 82012, 82012, 78149, 78149, 78149, 78149, 78149, 78149, 78149, 66569, 66569, 66569, 66569, 66569, 66569, 66569, 79286, 79286, 79286, 79286, 79286, 79286, 79286, 78062, 78062, 78062, 78062, 78062, 78062, 78062, 74150, 74150, 74150, 74150, 74150, 74150, 74150, 64210, 64210, 64210, 64210, 64210, 64210, 64210, 54999, 54999, 54999, 54999, 54999, 54999, 54999, 63460, 63460, 63460, 63460, 63460, 63460, 63460, 74927, 74927, 74927, 74927, 74927, 74927, 74927, 75054, 75054, 75054, 75054, 75054, 75054, 75054, 75386, 75386, 75386, 75386, 75386, 75386, 75386, 71735, 71735, 71735, 71735, 71735, 71735, 71735, 77993, 77993, 77993, 77993, 77993, 77993, 77993, 77197, 77197, 77197, 77197, 77197, 77197, 77197, 69220, 69220, 69220, 69220, 69220, 69220, 69220, 74025, 74025, 74025, 74025, 74025, 74025, 74025, 75644, 75644, 75644, 75644, 75644, 75644, 75644, 69246, 69246, 69246, 69246, 69246, 69246, 69246, 77032, 77032, 77032, 77032, 77032, 77032, 77032, 74433, 74433, 74433, 74433, 74433, 74433, 74433, 77226, 77226, 77226, 77226, 77226, 77226, 77226, 75413, 75413, 75413, 75413, 75413, 75413, 75413, 73908, 73908, 73908, 73908, 73908, 73908, 73908, 74005, 74005, 74005, 74005, 74005, 74005, 74005, 73996, 73996, 73996, 73996, 73996, 73996, 73996, 74754, 74754, 74754, 74754, 74754, 74754, 74754, 75005, 75005, 75005, 75005, 75005, 75005, 75005, 73954, 73954, 73954, 73954, 73954, 73954, 73954, 75411, 75411, 75411, 75411, 75411, 75411, 75411, 76833, 76833, 76833, 76833, 76833, 76833, 76833, 75529, 75529, 75529, 75529, 75529, 75529, 75529, 72668, 72668, 72668, 72668, 72668, 72668, 72668, 71251, 71251, 71251, 71251, 71251, 71251, 71251, 65194, 65194, 65194, 65194, 65194, 65194, 65194, 75413, 75413, 75413, 75413, 75413, 75413, 75413, 77408, 77408, 77408, 77408, 77408, 77408, 77408, 76818, 76818, 76818, 76818, 76818, 76818, 76818, 79847, 79847, 79847, 79847, 79847, 79847, 79847, 78258, 78258, 78258, 78258, 78258, 78258, 78258, 74272, 74272, 74272, 74272, 74272, 74272, 74272, 72048, 72048, 72048, 72048, 72048, 72048, 72048, 69516, 69516, 69516, 69516, 69516, 69516, 69516, 80127, 80127, 80127, 80127, 80127, 80127, 80127, 86866, 86866, 86866, 86866, 86866, 86866, 86866, 78793, 78793, 78793, 78793, 78793, 78793, 78793, 79872, 79872, 79872, 79872, 79872, 79872, 79872, 80754, 80754, 80754, 80754, 80754, 80754, 80754, 84420, 84420, 84420, 84420, 84420, 84420, 84420, 91819, 91819, 91819, 91819, 91819, 91819, 91819, 90571, 90571, 90571, 90571, 90571, 90571, 90571, 88945, 88945, 88945, 88945, 88945, 88945, 88945, 87156, 87156, 87156, 87156, 87156, 87156, 87156, 86936, 86936, 86936, 86936, 86936, 86936, 86936, 69656, 69656, 69656, 69656, 69656, 69656, 69656, 85266, 85266, 85266, 85266, 85266, 85266, 85266, 85572, 85572, 85572, 85572, 85572, 85572, 85572, 83618, 83618, 83618, 83618, 83618, 83618, 83618, 69886, 69886, 69886, 69886, 69886, 69886, 69886, 54574, 54574, 54574, 54574, 54574, 54574, 54574, 69363, 69363, 69363, 69363, 69363, 69363, 69363, 76775, 76775, 76775, 76775, 76775, 76775, 76775, 78049, 78049, 78049, 78049, 78049, 78049, 78049, 82274, 82274, 82274, 82274, 82274, 82274, 82274, 82487, 82487, 82487, 82487, 82487, 82487, 82487, 84552, 84552, 84552, 84552, 84552, 84552, 84552, 68157, 68157, 68157, 68157, 68157, 68157, 68157, 72607, 72607, 72607, 72607, 72607, 72607, 72607, 75897, 75897, 75897, 75897, 75897, 75897, 75897, 73910, 73910, 73910, 73910, 73910, 73910, 73910, 83692, 83692, 83692, 83692, 83692, 83692, 83692, 48758, 48758, 48758, 48758, 48758, 48758, 48758, 78880, 78880, 78880, 78880, 78880, 78880, 78880, 81636, 81636, 81636, 81636, 81636, 81636, 81636, 82861, 82861, 82861, 82861, 82861, 82861, 82861, 82212, 82212, 82212, 82212, 82212, 82212, 82212, 84349, 84349, 84349, 84349, 84349, 84349, 84349, 83393, 83393, 83393, 83393, 83393, 83393, 83393, 84659, 84659, 84659, 84659, 84659, 84659, 84659, 83679, 83679, 83679, 83679, 83679, 83679, 83679, 79344, 79344, 79344, 79344, 79344, 79344, 79344, 32226, 32226, 32226, 32226, 32226, 32226, 32226, 39217, 39217, 39217, 39217, 39217, 39217, 39217, 83258, 83258, 83258, 83258, 83258, 83258, 83258, 86626, 86626, 86626, 86626, 86626, 86626, 86626, 49804, 49804, 49804, 49804, 49804, 49804, 49804, 68006, 68006, 68006, 68006, 68006, 68006, 68006, 71814, 71814, 71814, 71814, 71814, 71814, 71814, 72213, 72213, 72213, 72213, 72213, 72213, 72213, 73325, 73325, 73325, 73325, 73325, 73325, 73325, 71272, 71272, 71272, 71272, 71272, 71272, 71272, 75380, 75380, 75380, 75380, 75380, 75380, 75380, 69059], "serviceHistory": [98.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 117.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 117.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 98.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 144.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 98.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 98.0, 153.0, 153.0, 153.0, 153.0, 153.0, 163.0, 98.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 117.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 117.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 98.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 144.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 98.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 184.0, 184.0, 184.0, 161.0, 161.0, 161.0, 161.0, 184.0, 184.0, 184.0, 161.0, 161.0, 161.0, 161.0, 184.0, 184.0, 184.0, 161.0, 161.0, 161.0, 161.0, 184.0, 184.0, 184.0, 161.0, 161.0, 161.0, 161.0, 184.0, 184.0, 184.0, 161.0, 161.0, 161.0, 161.0, 184.0, 184.0, 184.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 98.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 161.0, 158.0, 158.0, 98.0, 158.0, 158.0, 158.0, 158.0, 158.0, 173.0, 98.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 183.0, 183.0, 183.0, 117.0, 158.0, 158.0, 158.0, 183.0, 183.0, 183.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 183.0, 183.0, 183.0, 158.0, 158.0, 158.0, 158.0, 183.0, 183.0, 183.0, 117.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 98.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 98.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 208.0, 208.0, 208.0, 208.0, 208.0, 208.0, 208.0, 208.0, 208.0, 208.0, 208.0, 208.0, 208.0, 208.0, 208.0, 208.0, 208.0, 208.0, 208.0, 208.0, 98.0, 158.0, 158.0, 158.0, 208.0, 208.0, 208.0, 208.0, 158.0, 158.0, 158.0, 208.0, 208.0, 208.0, 208.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 158.0, 153.5, 153.5, 153.5, 153.5, 98.0, 98.0, 98.0, 153.5, 153.5, 153.5, 117.0, 98.0, 98.0, 98.0, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 117.0, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 117.0, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 153.5, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 90.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 75.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 128.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 117.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 153.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 98.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 98.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 152.0, 155.0, 155.0, 155.0, 155.0, 117.0, 117.0, 117.0, 155.0, 155.0, 155.0, 155.0, 163.0, 163.0, 163.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 117.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 117.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 310.0, 253.5, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 98.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 155.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 152.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 117.0, 99.0, 99.0, 99.0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 92.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 119.0, 111.0, 111.0, 111.0, 111.0, 111.0, 111.0, 111.0, 111.0, 111.0, 111.0, 111.0, 111.0, 111.0, 111.0, 94.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 122.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 122.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 122.0, 122.0, 122.0, 122.0, 122.0, 122.0, 122.0, 122.0, 122.0, 122.0, 122.0, 122.0, 122.0, 122.0, 144.5, 144.5, 144.5, 144.5, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 200.0, 200.0, 200.0, 200.0, 200.0, 200.0, 200.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 80.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 116.0, 106.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 116.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 86.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 111.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 123.0, 123.0, 123.0, 123.0, 123.0, 123.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 86.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 125.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 86.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 86.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 111.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 111.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 276.0, 276.0, 276.0, 276.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 132.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 135.5, 135.5, 135.5, 135.5, 135.5, 135.5, 135.5, 141.0, 141.0, 141.0, 86.0, 219.5, 219.5, 219.5, 219.5, 219.5, 219.5, 219.5, 219.5, 219.5, 219.5, 135.5, 135.5, 135.5, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 219.0, 219.0, 219.0, 219.0, 219.0, 219.0, 219.0, 141.0, 141.0, 141.0, 137.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 141.0, 165.0, 165.0, 148.0, 165.0, 165.0, 165.0, 165.0], "serviceRegimes": {"present": {"weekday": {"cancelled": false, "tripsPerHour": [4.0, 0.0, 0.0, 0.0, 0.0, 7.5, 10.0, 10.0, 9.0, 10.0, 8.0, 8.0, 7.5, 8.0, 8.0, 9.0, 9.5, 10.0, 10.0, 8.0, 7.5, 7.0, 7.0, 7.0], "totalTrips": 165}, "saturday": {"cancelled": false, "tripsPerHour": [4.0, 0.0, 0.0, 0.0, 0.0, 5.0, 6.0, 7.0, 6.0, 6.0, 6.0, 6.0, 7.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.5, 6.5, 6.0, 6.0, 6.0], "totalTrips": 120}, "sunday": {"cancelled": false, "tripsPerHour": [3.0, 0.0, 0.0, 0.0, 0.0, 0.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 4.5, 5.0, 5.5, 5.0, 4.0], "totalTrips": 92}}, "oneYearAgo": {"weekday": {"cancelled": false, "tripsPerHour": [3.5, 0.0, 0.0, 0.0, 0.0, 5.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 5.5, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0], "totalTrips": 116}, "saturday": {"cancelled": false, "tripsPerHour": [3.0, 0.0, 0.0, 0.0, 0.0, 5.0, 5.5, 6.0, 5.5, 6.0, 5.0, 6.0, 6.0, 5.5, 5.5, 6.0, 6.0, 5.0, 6.0, 6.0, 5.5, 5.5, 6.0, 6.0], "totalTrips": 111}, "sunday": {"cancelled": false, "tripsPerHour": [3.0, 0.0, 0.0, 0.0, 0.0, 0.0, 5.0, 5.0, 4.0, 5.0, 5.0, 4.0, 5.0, 4.5, 4.5, 5.0, 4.0, 5.0, 4.0, 5.0, 5.0, 4.0, 5.0, 4.0], "totalTrips": 86}}, "preCovid": {"weekday": {"cancelled": false, "tripsPerHour": [3.5, 0.0, 0.0, 0.0, 0.0, 4.5, 9.0, 9.0, 10.0, 9.5, 8.5, 7.0, 6.5, 8.0, 9.5, 9.5, 9.5, 10.0, 9.5, 8.0, 6.0, 7.0, 7.0, 6.5], "totalTrips": 158}, "saturday": {"cancelled": false, "tripsPerHour": [3.0, 0.0, 0.0, 0.0, 0.0, 5.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.5, 7.0, 7.0, 6.0, 7.0, 7.0, 6.5, 5.0, 6.0, 5.0, 6.0, 4.0], "totalTrips": 117}, "sunday": {"cancelled": false, "tripsPerHour": [3.0, 0.0, 0.0, 0.0, 0.0, 0.0, 5.0, 5.0, 4.5, 5.0, 5.5, 5.0, 6.0, 5.0, 6.0, 5.0, 5.5, 5.5, 5.0, 6.0, 5.0, 6.0, 5.0, 5.0], "totalTrips": 98}}}}, "line-Blue": {"id": "line-Blue", "shortName": "", "longName": "Blue Line", "routeIds": ["Blue"], "startDate": "2018-01-01", "lineKind": "bus", "ridershipHistory": [32170, 32170, 32170, 32170, 32170, 32170, 32170, 47948, 47948, 47948, 47948, 47948, 47948, 47948, 48281, 48281, 48281, 48281, 48281, 48281, 48281, 49130, 49130, 49130, 49130, 49130, 49130, 49130, 48271, 48271, 48271, 48271, 48271, 48271, 48271, 48678, 48678, 48678, 48678, 48678, 48678, 48678, 50254, 50254, 50254, 50254, 50254, 50254, 50254, 49942, 49942, 49942, 49942, 49942, 49942, 49942, 48068, 48068, 48068, 48068, 48068, 48068, 48068, 46983, 46983, 46983, 46983, 46983, 46983, 46983, 41557, 41557, 41557, 41557, 41557, 41557, 41557, 49524, 49524, 49524, 49524, 49524, 49524, 49524, 52489, 52489, 52489, 52489, 52489, 52489, 52489, 53967, 53967, 53967, 53967, 53967, 53967, 53967, 54974, 54974, 54974, 54974, 54974, 54974, 54974, 49753, 49753, 49753, 49753, 49753, 49753, 49753, 54074, 54074, 54074, 54074, 54074, 54074, 54074, 55942, 55942, 55942, 55942, 55942, 55942, 55942, 55576, 55576, 55576, 55576, 55576, 55576, 55576, 56504, 56504, 56504, 56504, 56504, 56504, 56504, 57650, 57650, 57650, 57650, 57650, 57650, 57650, 57288, 57288, 57288, 57288, 57288, 57288, 57288, 57611, 57611, 57611, 57611, 57611, 57611, 57611, 57427, 57427, 57427, 57427, 57427, 57427, 57427, 58843, 58843, 58843, 58843, 58843, 58843, 58843, 58153, 58153, 58153, 58153, 58153, 58153, 58153, 52606, 52606, 52606, 52606, 52606, 52606, 52606, 60129, 60129, 60129, 60129, 60129, 60129, 60129, 58987, 58987, 58987, 58987, 58987, 58987, 58987, 58701, 58701, 58701, 58701, 58701, 58701, 58701, 58789, 58789, 58789, 58789, 58789, 58789, 58789, 55231, 55231, 55231, 55231, 55231, 55231, 55231, 55066, 55066, 55066, 55066, 55066, 55066, 55066, 54917, 54917, 54917, 54917, 54917, 54917, 54917, 53085, 53085, 53085, 53085, 53085, 53085, 53085, 56497, 56497, 56497, 56497, 56497, 56497, 56497, 57068, 57068, 57068, 57068, 57068, 57068, 57068, 55887, 55887, 55887, 55887, 55887, 55887, 55887, 56216, 56216, 56216, 56216, 56216, 56216, 56216, 57151, 57151, 57151, 57151, 57151, 57151, 57151, 58536, 58536, 58536, 58536, 58536, 58536, 58536, 56842, 56842, 56842, 56842, 56842, 56842, 56842, 57194, 57194, 57194, 57194, 57194, 57194, 57194, 57470, 57470, 57470, 57470, 57470, 57470, 57470, 55779, 55779, 55779, 55779, 55779, 55779, 55779, 53350, 53350, 53350, 53350, 53350, 53350, 53350, 46340, 46340, 46340, 46340, 46340, 46340, 46340, 55103, 55103, 55103, 55103, 55103, 55103, 55103, 54332, 54332, 54332, 54332, 54332, 54332, 54332, 52925, 52925, 52925, 52925, 52925, 52925, 52925, 50492, 50492, 50492, 50492, 50492, 50492, 50492, 37591, 37591, 37591, 37591, 37591, 37591, 37591, 45478, 45478, 45478, 45478, 45478, 45478, 45478, 49368, 49368, 49368, 49368, 49368, 49368, 49368, 50343, 50343, 50343, 50343, 50343, 50343, 50343, 49867, 49867, 49867, 49867, 49867, 49867, 49867, 48961, 48961, 48961, 48961, 48961, 48961, 48961, 52927, 52927, 52927, 52927, 52927, 52927, 52927, 50677, 50677, 50677, 50677, 50677, 50677, 50677, 49616, 49616, 49616, 49616, 49616, 49616, 49616, 49790, 49790, 49790, 49790, 49790, 49790, 49790, 45078, 45078, 45078, 45078, 45078, 45078, 45078, 45605, 45605, 45605, 45605, 45605, 45605, 45605, 45067, 45067, 45067, 45067, 45067, 45067, 45067, 47239, 47239, 47239, 47239, 47239, 47239, 47239, 48478, 48478, 48478, 48478, 48478, 48478, 48478, 49039, 49039, 49039, 49039, 49039, 49039, 49039, 47239, 47239, 47239, 47239, 47239, 47239, 47239, 48887, 48887, 48887, 48887, 48887, 48887, 48887, 48879, 48879, 48879, 48879, 48879, 48879, 48879, 50077, 50077, 50077, 50077, 50077, 50077, 50077, 50384, 50384, 50384, 50384, 50384, 50384, 50384, 51314, 51314, 51314, 51314, 51314, 51314, 51314, 51499, 51499, 51499, 51499, 51499, 51499, 51499, 53217, 53217, 53217, 53217, 53217, 53217, 53217, 52774, 52774, 52774, 52774, 52774, 52774, 52774, 51886, 51886, 51886, 51886, 51886, 51886, 51886, 52719, 52719, 52719, 52719, 52719, 52719, 52719, 48653, 48653, 48653, 48653, 48653, 48653, 48653, 52707, 52707, 52707, 52707, 52707, 52707, 52707, 52064, 52064, 52064, 52064, 52064, 52064, 52064, 52625, 52625, 52625, 52625, 52625, 52625, 52625, 52351, 52351, 52351, 52351, 52351, 52351, 52351, 52556, 52556, 52556, 52556, 52556, 52556, 52556, 51513, 51513, 51513, 51513, 51513, 51513, 51513, 50119, 50119, 50119, 50119, 50119, 50119, 50119, 49595, 49595, 49595, 49595, 49595, 49595, 49595, 52539, 52539, 52539, 52539, 52539, 52539, 52539, 53466, 53466, 53466, 53466, 53466, 53466, 53466, 54415, 54415, 54415, 54415, 54415, 54415, 54415, 54099, 54099, 54099, 54099, 54099, 54099, 54099, 53110, 53110, 53110, 53110, 53110, 53110, 53110, 51419, 51419, 51419, 51419, 51419, 51419, 51419, 53124, 53124, 53124, 53124, 53124, 53124, 53124, 53199, 53199, 53199, 53199, 53199, 53199, 53199, 52277, 52277, 52277, 52277, 52277, 52277, 52277, 50387, 50387, 50387, 50387, 50387, 50387, 50387, 49975, 49975, 49975, 49975, 49975, 49975, 49975, 49587, 49587, 49587, 49587, 49587, 49587, 49587, 42850, 42850, 42850, 42850, 42850, 42850, 42850, 46944, 46944, 46944, 46944, 46944, 46944, 46944, 49395, 49395, 49395, 49395, 49395, 49395, 49395, 46747, 46747, 46747, 46747, 46747, 46747, 46747, 35812, 35812, 35812, 35812, 35812, 35812, 35812, 38824, 38824, 38824, 38824, 38824, 38824, 38824, 46230, 46230, 46230, 46230, 46230, 46230, 46230, 47269, 47269, 47269, 47269, 47269, 47269, 47269, 47386, 47386, 47386, 47386, 47386, 47386, 47386, 47883, 47883, 47883, 47883, 47883, 47883, 47883, 47506, 47506, 47506, 47506, 47506, 47506, 47506, 46971, 46971, 46971, 46971, 46971, 46971, 46971, 45730, 45730, 45730, 45730, 45730, 45730, 45730, 47814, 47814, 47814, 47814, 47814, 47814, 47814, 48624, 48624, 48624, 48624, 48624, 48624, 48624, 43200, 43200, 43200, 43200, 43200, 43200, 43200, 17605, 17605, 17605, 17605, 17605, 17605, 17605, 9069, 9069, 9069, 9069, 9069, 9069, 9069, 7042, 7042, 7042, 7042, 7042, 7042, 7042, 5988, 5988, 5988, 5988, 5988, 5988, 5988, 5915, 5915, 5915, 5915, 5915, 5915, 5915, 6026, 6026, 6026, 6026, 6026, 6026, 6026, 6304, 6304, 6304, 6304, 6304, 6304, 6304, 7434, 7434, 7434, 7434, 7434, 7434, 7434, 7855, 7855, 7855, 7855, 7855, 7855, 7855, 494, 494, 494, 494, 494, 494, 494, 398, 398, 398, 398, 398, 398, 398, 9907, 9907, 9907, 9907, 9907, 9907, 9907, 11677, 11677, 11677, 11677, 11677, 11677, 11677, 13200, 13200, 13200, 13200, 13200, 13200, 13200, 14456, 14456, 14456, 14456, 14456, 14456, 14456, 14845, 14845, 14845, 14845, 14845, 14845, 14845, 16714, 16714, 16714, 16714, 16714, 16714, 16714, 16794, 16794, 16794, 16794, 16794, 16794, 16794, 17914, 17914, 17914, 17914, 17914, 17914, 17914, 18285, 18285, 18285, 18285, 18285, 18285, 18285, 18551, 18551, 18551, 18551, 18551, 18551, 18551, 18542, 18542, 18542, 18542, 18542, 18542, 18542, 18622, 18622, 18622, 18622, 18622, 18622, 18622, 19150, 19150, 19150, 19150, 19150, 19150, 19150, 19477, 19477, 19477, 19477, 19477, 19477, 19477, 19917, 19917, 19917, 19917, 19917, 19917, 19917, 20001, 20001, 20001, 20001, 20001, 20001, 20001, 20071, 20071, 20071, 20071, 20071, 20071, 20071, 19893, 19893, 19893, 19893, 19893, 19893, 19893, 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19160, 19160, 19160, 19160, 19160, 19160, 19160, 19226, 19226, 19226, 19226, 19226, 19226, 19226, 17482, 17482, 17482, 17482, 17482, 17482, 17482, 18296, 18296, 18296, 18296, 18296, 18296, 18296, 18306, 18306, 18306, 18306, 18306, 18306, 18306, 18027, 18027, 18027, 18027, 18027, 18027, 18027, 16220, 16220, 16220, 16220, 16220, 16220, 16220, 17350, 17350, 17350, 17350, 17350, 17350, 17350, 17138, 17138, 17138, 17138, 17138, 17138, 17138, 14761, 14761, 14761, 14761, 14761, 14761, 14761, 15878, 15878, 15878, 15878, 15878, 15878, 15878, 13872, 13872, 13872, 13872, 13872, 13872, 13872, 16041, 16041, 16041, 16041, 16041, 16041, 16041, 16450, 16450, 16450, 16450, 16450, 16450, 16450, 17033, 17033, 17033, 17033, 17033, 17033, 17033, 16028, 16028, 16028, 16028, 16028, 16028, 16028, 16001, 16001, 16001, 16001, 16001, 16001, 16001, 16975, 16975, 16975, 16975, 16975, 16975, 16975, 16977, 16977, 16977, 16977, 16977, 16977, 16977, 18000, 18000, 18000, 18000, 18000, 18000, 18000, 17774, 17774, 17774, 17774, 17774, 17774, 17774, 19328, 19328, 19328, 19328, 19328, 19328, 19328, 18358, 18358, 18358, 18358, 18358, 18358, 18358, 19697, 19697, 19697, 19697, 19697, 19697, 19697, 19800, 19800, 19800, 19800, 19800, 19800, 19800, 21041, 21041, 21041, 21041, 21041, 21041, 21041, 19919, 19919, 19919, 19919, 19919, 19919, 19919, 20831, 20831, 20831, 20831, 20831, 20831, 20831, 20906, 20906, 20906, 20906, 20906, 20906, 20906, 21751, 21751, 21751, 21751, 21751, 21751, 21751, 22755, 22755, 22755, 22755, 22755, 22755, 22755, 23650, 23650, 23650, 23650, 23650, 23650, 23650, 23720, 23720, 23720, 23720, 23720, 23720, 23720, 24647, 24647, 24647, 24647, 24647, 24647, 24647, 25629, 25629, 25629, 25629, 25629, 25629, 25629, 25302, 25302, 25302, 25302, 25302, 25302, 25302, 25971, 25971, 25971, 25971, 25971, 25971, 25971, 24348, 24348, 24348, 24348, 24348, 24348, 24348, 25227, 25227, 25227, 25227, 25227, 25227, 25227, 26753, 26753, 26753, 26753, 26753, 26753, 26753, 27822, 27822, 27822, 27822, 27822, 27822, 27822, 28236, 28236, 28236, 28236, 28236, 28236, 28236, 27540, 27540, 27540, 27540, 27540, 27540, 27540, 27525, 27525, 27525, 27525, 27525, 27525, 27525, 27098, 27098, 27098, 27098, 27098, 27098, 27098, 27033, 27033, 27033, 27033, 27033, 27033, 27033, 27581, 27581, 27581, 27581, 27581, 27581, 27581, 29846, 29846, 29846, 29846, 29846, 29846, 29846, 30373, 30373, 30373, 30373, 30373, 30373, 30373, 31183, 31183, 31183, 31183, 31183, 31183, 31183, 30484, 30484, 30484, 30484, 30484, 30484, 30484, 30966, 30966, 30966, 30966, 30966, 30966, 30966, 32502, 32502, 32502, 32502, 32502, 32502, 32502, 31776, 31776, 31776, 31776, 31776, 31776, 31776, 28238, 28238, 28238, 28238, 28238, 28238, 28238, 30527, 30527, 30527, 30527, 30527, 30527, 30527, 29141, 29141, 29141, 29141, 29141, 29141, 29141, 28069, 28069, 28069, 28069, 28069, 28069, 28069, 23278, 23278, 23278, 23278, 23278, 23278, 23278, 28817, 28817, 28817, 28817, 28817, 28817, 28817, 27995, 27995, 27995, 27995, 27995, 27995, 27995, 28979, 28979, 28979, 28979, 28979, 28979, 28979, 25662, 25662, 25662, 25662, 25662, 25662, 25662, 21894, 21894, 21894, 21894, 21894, 21894, 21894, 20953, 20953, 20953, 20953, 20953, 20953, 20953, 22135, 22135, 22135, 22135, 22135, 22135, 22135, 23688, 23688, 23688, 23688, 23688, 23688, 23688, 24750, 24750, 24750, 24750, 24750, 24750, 24750, 24323, 24323, 24323, 24323, 24323, 24323, 24323, 27343, 27343, 27343, 27343, 27343, 27343, 27343, 26387, 26387, 26387, 26387, 26387, 26387, 26387, 24786, 24786, 24786, 24786, 24786, 24786, 24786, 28081, 28081, 28081, 28081, 28081, 28081, 28081, 29299, 29299, 29299, 29299, 29299, 29299, 29299, 29301, 29301, 29301, 29301, 29301, 29301, 29301, 29732, 29732, 29732, 29732, 29732, 29732, 29732, 29458, 29458, 29458, 29458, 29458, 29458, 29458, 30063, 30063, 30063, 30063, 30063, 30063, 30063, 30636, 30636, 30636, 30636, 30636, 30636, 30636, 31005, 31005, 31005, 31005, 31005, 31005, 31005, 13287, 13287, 13287, 13287, 13287, 13287, 13287, 11108, 11108, 11108, 11108, 11108, 11108, 11108, 11214, 11214, 11214, 11214, 11214, 11214, 11214, 22260, 22260, 22260, 22260, 22260, 22260, 22260, 28341, 28341, 28341, 28341, 28341, 28341, 28341, 28446, 28446, 28446, 28446, 28446, 28446, 28446, 29971, 29971, 29971, 29971, 29971, 29971, 29971, 33606, 33606, 33606, 33606, 33606, 33606, 33606, 32331, 32331, 32331, 32331, 32331, 32331, 32331, 31531, 31531, 31531, 31531, 31531, 31531, 31531, 30917, 30917, 30917, 30917, 30917, 30917, 30917, 32448, 32448, 32448, 32448, 32448, 32448, 32448, 32259, 32259, 32259, 32259, 32259, 32259, 32259, 31318, 31318, 31318, 31318, 31318, 31318, 31318, 30842, 30842, 30842, 30842, 30842, 30842, 30842, 31232, 31232, 31232, 31232, 31232, 31232, 31232, 31226, 31226, 31226, 31226, 31226, 31226, 31226, 34357, 34357, 34357, 34357, 34357, 34357, 34357, 35652, 35652, 35652, 35652, 35652, 35652, 35652, 39278, 39278, 39278, 39278, 39278, 39278, 39278, 39816, 39816, 39816, 39816, 39816, 39816, 39816, 33920, 33920, 33920, 33920, 33920, 33920, 33920, 35617, 35617, 35617, 35617, 35617, 35617, 35617, 35080, 35080, 35080, 35080, 35080, 35080, 35080, 35734, 35734, 35734, 35734, 35734, 35734, 35734, 35516, 35516, 35516, 35516, 35516, 35516, 35516, 35091, 35091, 35091, 35091, 35091, 35091, 35091, 35184, 35184, 35184, 35184, 35184, 35184, 35184, 34313, 34313, 34313, 34313, 34313, 34313, 34313, 32439, 32439, 32439, 32439, 32439, 32439, 32439, 29295, 29295, 29295, 29295, 29295, 29295, 29295, 32964, 32964, 32964, 32964, 32964, 32964, 32964, 32428, 32428, 32428, 32428, 32428, 32428, 32428, 30282, 30282, 30282, 30282, 30282, 30282, 30282, 28125, 28125, 28125, 28125, 28125, 28125, 28125, 26952, 26952, 26952, 26952, 26952, 26952, 26952, 28697, 28697, 28697, 28697, 28697, 28697, 28697, 30896, 30896, 30896, 30896, 30896, 30896, 30896, 31438, 31438, 31438, 31438, 31438, 31438, 31438, 30486, 30486, 30486, 30486, 30486, 30486, 30486, 29869, 29869, 29869, 29869, 29869, 29869, 29869, 33370, 33370, 33370, 33370, 33370, 33370, 33370, 34103, 34103, 34103, 34103, 34103, 34103, 34103, 30750, 30750, 30750, 30750, 30750, 30750, 30750, 31923, 31923, 31923, 31923, 31923, 31923, 31923, 32076, 32076, 32076, 32076, 32076, 32076, 32076, 31541, 31541, 31541, 31541, 31541, 31541, 31541, 35038, 35038, 35038, 35038, 35038, 35038, 35038, 34048, 34048, 34048, 34048, 34048, 34048, 34048, 35010, 35010, 35010, 35010, 35010, 35010, 35010, 32308, 32308, 32308, 32308, 32308, 32308, 32308, 34979, 34979, 34979, 34979, 34979, 34979, 34979, 32970, 32970, 32970, 32970, 32970, 32970, 32970, 32620, 32620, 32620, 32620, 32620, 32620, 32620, 36581, 36581, 36581, 36581, 36581, 36581, 36581, 37384, 37384, 37384, 37384, 37384, 37384, 37384, 37183, 37183, 37183, 37183, 37183, 37183, 37183, 41503, 41503, 41503, 41503, 41503, 41503, 41503, 42844, 42844, 42844, 42844, 42844, 42844, 42844, 44966, 44966, 44966, 44966, 44966, 44966, 44966, 44522, 44522, 44522, 44522, 44522, 44522, 44522, 42049, 42049, 42049, 42049, 42049, 42049, 42049, 43380, 43380, 43380, 43380, 43380, 43380, 43380, 44695, 44695, 44695, 44695, 44695, 44695, 44695, 47206, 47206, 47206, 47206, 47206, 47206, 47206, 45527, 45527, 45527, 45527, 45527, 45527, 45527, 46478, 46478, 46478, 46478, 46478, 46478, 46478, 49477, 49477, 49477, 49477, 49477, 49477, 49477, 46950, 46950, 46950, 46950, 46950, 46950, 46950, 44310, 44310, 44310, 44310, 44310, 44310, 44310, 41864, 41864, 41864, 41864, 41864, 41864, 41864, 39283, 39283, 39283, 39283, 39283, 39283, 39283, 40339, 40339, 40339, 40339, 40339, 40339, 40339, 38728, 38728, 38728, 38728, 38728, 38728, 38728, 38275, 38275, 38275, 38275, 38275, 38275, 38275, 39761, 39761, 39761, 39761, 39761, 39761, 39761, 39787, 39787, 39787, 39787, 39787, 39787, 39787, 39392, 39392, 39392, 39392, 39392, 39392, 39392, 39082, 39082, 39082, 39082, 39082, 39082, 39082, 37916, 37916, 37916, 37916, 37916, 37916, 37916, 37824, 37824, 37824, 37824, 37824, 37824, 37824, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 32347, 32347, 32347, 32347, 32347, 32347, 32347, 36352, 36352, 36352, 36352, 36352, 36352, 36352, 37193, 37193, 37193, 37193, 37193, 37193, 37193, 36399, 36399, 36399, 36399, 36399, 36399, 36399, 32510, 32510, 32510, 32510, 32510, 32510, 32510, 28363, 28363, 28363, 28363, 28363, 28363, 28363, 31852, 31852, 31852, 31852, 31852, 31852, 31852, 31732, 31732, 31732, 31732, 31732, 31732, 31732, 31129, 31129, 31129, 31129, 31129, 31129, 31129, 32044, 32044, 32044, 32044, 32044, 32044, 32044, 33238, 33238, 33238, 33238, 33238, 33238, 33238, 35215, 35215, 35215, 35215, 35215, 35215, 35215, 29701, 29701, 29701, 29701, 29701, 29701, 29701, 33690, 33690, 33690, 33690, 33690, 33690, 33690, 34913, 34913, 34913, 34913, 34913, 34913, 34913, 34971, 34971, 34971, 34971, 34971, 34971, 34971, 35862, 35862, 35862, 35862, 35862, 35862, 35862, 35074, 35074, 35074, 35074, 35074, 35074, 35074, 35202, 35202, 35202, 35202, 35202, 35202, 35202, 34871, 34871, 34871, 34871, 34871, 34871, 34871, 35171, 35171, 35171, 35171, 35171, 35171, 35171, 19032, 19032, 19032, 19032, 19032, 19032, 19032, 21121, 21121, 21121, 21121, 21121, 21121, 21121, 32055, 32055, 32055, 32055, 32055, 32055, 32055, 36995, 36995, 36995, 36995, 36995, 36995, 36995, 38045, 38045, 38045, 38045, 38045, 38045, 38045, 38467, 38467, 38467, 38467, 38467, 38467, 38467, 37772, 37772, 37772, 37772, 37772, 37772, 37772, 38766, 38766, 38766, 38766, 38766, 38766, 38766, 39971, 39971, 39971, 39971, 39971, 39971, 39971, 39668, 39668, 39668, 39668, 39668, 39668, 39668, 38285, 38285, 38285, 38285, 38285, 38285, 38285, 27804, 27804, 27804, 27804, 27804, 27804, 27804, 130, 130, 130, 130, 130, 130, 130, 30, 30, 30, 30, 30, 30, 30, 14, 14, 14, 14, 14, 14, 14, 9, 9, 9, 9, 9, 9, 9, 34332, 34332, 34332, 34332, 34332, 34332, 34332, 35275], "serviceHistory": [114.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 126.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 126.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 114.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 174.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 114.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.0, 186.5, 114.0, 186.5, 186.5, 186.5, 186.5, 186.5, 237.5, 114.0, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 126.0, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 126.0, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 114.0, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 114.0, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 114.0, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 186.5, 180.5, 180.5, 114.0, 180.5, 180.5, 180.5, 180.5, 180.5, 205.0, 114.0, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 126.0, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 126.0, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 180.5, 174.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 114.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 126.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 174.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 114.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 114.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 114.0, 114.0, 114.0, 175.0, 175.0, 175.0, 126.0, 114.0, 114.0, 114.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 126.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 126.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 175.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 120.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 108.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 160.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 120.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 108.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 108.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 120.0, 120.0, 120.0, 177.0, 177.0, 177.0, 177.0, 200.0, 200.0, 200.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 120.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 120.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 108.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 177.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 180.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 108.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 108.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 135.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 108.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 108.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 120.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 120.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 149.0, 149.0, 149.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 145.0, 145.0, 145.0, 145.0, 346.0, 346.0, 346.0, 290.0, 290.0, 290.0, 290.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 124.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 173.0, 162.0, 129.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 162.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 108.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 112.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 108.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 108.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 108.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 112.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 112.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 169.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 107.0, 107.0, 107.0, 107.0, 107.0, 107.0, 107.0, 107.0, 107.0, 107.0, 107.0, 107.0, 107.0, 107.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 108.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 143.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 198.0, 198.0, 198.0, 198.0, 198.0, 198.0, 198.0], "serviceRegimes": {"present": {"weekday": {"cancelled": false, "tripsPerHour": [3.0, 0.0, 0.0, 0.0, 0.0, 9.5, 13.0, 13.0, 13.0, 12.5, 9.0, 9.0, 8.5, 8.5, 10.5, 12.0, 13.0, 12.5, 12.5, 10.5, 8.5, 6.5, 6.5, 6.5], "totalTrips": 198}, "saturday": {"cancelled": false, "tripsPerHour": [4.0, 0.0, 0.0, 0.0, 0.0, 4.0, 6.5, 7.0, 6.5, 6.5, 7.0, 6.5, 6.5, 7.0, 6.5, 6.5, 7.0, 6.5, 6.5, 7.0, 6.5, 6.5, 7.0, 5.5], "totalTrips": 127}, "sunday": {"cancelled": false, "tripsPerHour": [4.0, 0.0, 0.0, 0.0, 0.0, 0.0, 5.5, 7.0, 6.5, 6.5, 7.0, 6.5, 6.5, 7.0, 6.5, 6.5, 7.0, 6.5, 6.5, 7.0, 6.5, 6.5, 7.0, 5.5], "totalTrips": 122}}, "oneYearAgo": {"weekday": {"cancelled": false, "tripsPerHour": [4.0, 0.0, 0.0, 0.0, 0.0, 7.5, 11.0, 11.0, 11.5, 10.5, 8.5, 7.5, 7.5, 7.5, 9.5, 9.0, 11.5, 11.0, 11.5, 9.0, 6.0, 5.0, 5.0, 5.0], "totalTrips": 169}, "saturday": {"cancelled": false, "tripsPerHour": [4.5, 0.0, 0.0, 0.0, 0.0, 3.5, 6.0, 5.5, 6.0, 5.5, 6.0, 6.0, 5.5, 6.0, 5.5, 6.0, 6.0, 5.5, 6.0, 5.5, 6.0, 6.0, 5.5, 5.5], "totalTrips": 112}, "sunday": {"cancelled": false, "tripsPerHour": [4.5, 0.0, 0.0, 0.0, 0.0, 0.0, 5.0, 6.0, 6.0, 5.5, 6.0, 6.0, 5.5, 6.0, 5.5, 6.0, 6.0, 5.5, 6.0, 5.5, 6.0, 6.0, 5.5, 5.5], "totalTrips": 108}}, "preCovid": {"weekday": {"cancelled": false, "tripsPerHour": [4.0, 0.5, 0.0, 0.0, 0.0, 7.0, 11.5, 12.0, 12.0, 10.0, 7.0, 7.0, 7.0, 8.0, 11.0, 12.0, 12.0, 12.0, 11.0, 8.0, 7.0, 7.5, 7.0, 7.0], "totalTrips": 180}, "saturday": {"cancelled": false, "tripsPerHour": [3.5, 0.5, 0.0, 0.0, 0.0, 3.0, 6.0, 6.5, 7.0, 7.0, 7.0, 7.0, 6.5, 7.0, 7.0, 7.0, 7.0, 6.5, 7.0, 7.0, 7.0, 6.5, 6.0, 4.0], "totalTrips": 126}, "sunday": {"cancelled": false, "tripsPerHour": [3.5, 0.5, 0.0, 0.0, 0.0, 0.5, 4.0, 4.5, 5.0, 5.0, 6.0, 5.5, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 6.5, 6.0, 4.0], "totalTrips": 114}}}}}} \ No newline at end of file +{"hi": 3} \ No newline at end of file diff --git a/ingestor/chalicelib/service_ridership_dashboard/.gitignore b/ingestor/chalicelib/service_ridership_dashboard/.gitignore new file mode 100644 index 0000000..8845ff1 --- /dev/null +++ b/ingestor/chalicelib/service_ridership_dashboard/.gitignore @@ -0,0 +1 @@ +dash.json \ No newline at end of file diff --git a/ingestor/chalicelib/service_ridership_dashboard/generate.py b/ingestor/chalicelib/service_ridership_dashboard/generate.py index 95a0e9b..72f9f5e 100644 --- a/ingestor/chalicelib/service_ridership_dashboard/generate.py +++ b/ingestor/chalicelib/service_ridership_dashboard/generate.py @@ -1,6 +1,7 @@ import json from datetime import date, datetime, timedelta -from typing import TypedDict, Literal +from typing import cast +from pathlib import PurePath from .config import ( START_DATE, @@ -8,34 +9,27 @@ PRE_COVID_DATE, ) from .service_levels import get_service_level_entries_by_line_id, ServiceLevelsByDate, ServiceLevelsEntry -from .ridership import ridership_by_line_id, RidershipByDate, RidershipEntry -from .service_summaries import ServiceSummary, summarize_weekly_service_around_date +from .ridership import ridership_by_line_id, RidershipEntry +from .service_summaries import summarize_weekly_service_around_date from .util import date_to_string from .time_series import get_time_series +from .summary import get_summary_data +from .types import ServiceRegimes, LineData, DashJSON, LineKind -LineKind = Literal["bus", "subway", "commuter-rail", "ferry"] +parent_dir = PurePath(__file__).parent +debug_file_name = parent_dir / "dash.json" -class ServiceRegimes(TypedDict): - present: ServiceSummary - oneYearAgo: ServiceSummary - preCovid: ServiceSummary - - -class LineData(TypedDict): - id: str - shortName: str - longName: str - routeIds: list[str] - startDate: str - lineKind: LineKind - ridershipHistory: list[float] - serviceHistory: list[float] - serviceRegimes: ServiceRegimes - - -class DashJSON(TypedDict): - lineData: dict[str, LineData] +def get_line_kind(route_ids: list[str], line_id: str) -> LineKind: + if line_id.startswith("line-Boat"): + return "boat" + if any((r for r in route_ids if r.lower().startswith("cr-"))): + return "regional-rail" + if line_id.startswith("line-SL"): + return "silver" + if line_id in ("line-Red", "line-Orange", "line-Blue", "line-Green"): + return cast(LineKind, line_id.split("-")[1].lower()) + return "bus" def create_service_regimes( @@ -43,7 +37,7 @@ def create_service_regimes( date: date, ) -> ServiceRegimes: return { - "present": summarize_weekly_service_around_date( + "current": summarize_weekly_service_around_date( date=date, service_levels=service_levels, ), @@ -51,7 +45,7 @@ def create_service_regimes( date=date - timedelta(days=365), service_levels=service_levels, ), - "preCovid": summarize_weekly_service_around_date( + "baseline": summarize_weekly_service_around_date( date=PRE_COVID_DATE, service_levels=service_levels, ), @@ -72,7 +66,10 @@ def create_line_data( "longName": service_level_entry.line_long_name, "routeIds": service_level_entry.route_ids, "startDate": date_to_string(start_date), - "lineKind": "bus", + "lineKind": get_line_kind( + route_ids=service_level_entry.route_ids, + line_id=service_level_entry.line_id, + ), "ridershipHistory": get_time_series( entries=ridership, entry_value_getter=lambda entry: entry.ridership, @@ -81,7 +78,7 @@ def create_line_data( ), "serviceHistory": get_time_series( entries=service_levels, - entry_value_getter=lambda entry: sum(entry.service_levels), + entry_value_getter=lambda entry: round(sum(entry.service_levels)), start_date=start_date, max_end_date=end_date, ), @@ -95,31 +92,44 @@ def create_line_data( def create_service_ridership_dash_json( start_date: date = START_DATE, end_date: date = datetime.now(TIME_ZONE).date(), + write_debug_file: bool = False, ): + with open("./dash.json", "w") as f: + json.dump({"hi": 3}, f) service_level_entries = get_service_level_entries_by_line_id( start_date=start_date, end_date=end_date, ) - print("service_level_entries", service_level_entries) ridership_entries = ridership_by_line_id( start_date=start_date, end_date=end_date, line_ids=list(service_level_entries.keys()), ) + line_data_by_line_id = { + line_id: create_line_data( + start_date=start_date, + end_date=end_date, + service_levels=service_level_entries[line_id], + ridership=ridership_entries[line_id], + ) + for line_id in service_level_entries.keys() + if service_level_entries[line_id] + and ridership_entries[line_id] + and len(service_level_entries[line_id]) + and len(ridership_entries[line_id]) + } + summary_data = get_summary_data( + line_data=list(line_data_by_line_id.values()), + start_date=start_date, + end_date=end_date, + ) dash_json: DashJSON = { - "lineData": { - line_id: create_line_data( - start_date=start_date, - end_date=end_date, - service_levels=service_level_entries[line_id], - ridership=ridership_entries[line_id], - ) - for line_id in service_level_entries.keys() - }, + "summaryData": summary_data, + "lineData": line_data_by_line_id, } - with open("dash.json", "w") as f: + with open(debug_file_name, "w") as f: json.dump(dash_json, f) if __name__ == "__main__": - create_service_ridership_dash_json() + create_service_ridership_dash_json(write_debug_file=True) diff --git a/ingestor/chalicelib/service_ridership_dashboard/generate_old.py b/ingestor/chalicelib/service_ridership_dashboard/generate_old.py deleted file mode 100644 index 547b659..0000000 --- a/ingestor/chalicelib/service_ridership_dashboard/generate_old.py +++ /dev/null @@ -1,457 +0,0 @@ -import json -from datetime import date, datetime, timedelta -from typing import TypedDict -from dataclasses import dataclass -from tqdm import tqdm -from math import isnan - -from .config import ( - OUTPUT_FILE, - START_DATE, - PRE_COVID_DATE, - IGNORE_LINE_IDS, - FILL_DATE_RANGES, - ANOMALY_RANGES, - TIME_ZONE, -) -from .queries import query_scheduled_service, query_ridership -from .gtfs import get_routes_by_line -from .util import ( - bucket_by, - date_from_string, - date_range_contains, - date_range, - date_to_string, - get_date_ranges_of_same_value, - index_by, -) -from .service_levels import ServiceLevelsEntry, get_service_level_entries_by_line_id - - -class ServiceRegimeEntry(TypedDict): - cancelled: bool - tripsPerHour: list[int] - totalTrips: int - - -class ServiceRegime(TypedDict): - weekday: ServiceRegimeEntry - saturday: ServiceRegimeEntry - sunday: ServiceRegimeEntry - - -class LineData(TypedDict): - id: str - shortName: str - longName: str - routeIds: list[str] - startDate: str - lineKind: str - ridershipHistory: list[int] - serviceHistory: list[int] - serviceRegimes: dict[str, ServiceRegime] - - -@dataclass -class RidershipEntry: - date: date - ridership: float - - -def get_line_kind(route_ids: list[str], line_id: str): - if line_id.startswith("line-Boat"): - return "boat" - if any((r for r in route_ids if r.lower().startswith("cr-"))): - return "regional-rail" - if line_id.startswith("line-SL"): - return "silver" - if line_id in ("line-Red", "line-Orange", "line-Blue", "line-Green"): - return line_id.split("-")[1].lower() - return "bus" - - -def get_ridership_entries_for_line_id(start_date: date, end_date: date, line_id: str) -> list[RidershipEntry]: - entries = query_ridership( - start_date=start_date, - end_date=end_date, - line_id=line_id, - ) - return [ - RidershipEntry( - date=date_from_string(entry["date"]), - ridership=entry["count"], - ) - for entry in entries - ] - - -def get_valid_ridership_value(entries: list[RidershipEntry], start_lookback_idx: int): - idx = start_lookback_idx - while idx >= 0: - entry = entries[idx] - if not isnan(entry.ridership): - return int(entry.ridership) - idx -= 1 - - -def get_ridership_time_series_for_line_id(start_date: date, end_date: date, line_id: str) -> list[int]: - time_series: list[int] = [] - entries = get_ridership_entries_for_line_id( - start_date=start_date, - end_date=end_date, - line_id=line_id, - ) - for idx, entry in enumerate(entries): - if entry.date < start_date: - continue - ridership = get_valid_ridership_value(entries, idx) - entry_start_date = max(start_date, entry.date) - entry_end_date = min( - end_date if idx == len(entries) - 1 else entries[idx + 1].date - timedelta(days=1), - end_date, - ) - today = entry_start_date - while today <= entry_end_date: - time_series.append(ridership) - today += timedelta(days=1) - return time_series - - -def get_ridership_time_series_by_line_id(start_date: date, end_date: date, line_ids: list[str]): - ridership_time_series_by_line_id: dict[str, list[int]] = {} - for line_id in (progress := tqdm(line_ids)): - progress.set_description(f"Loading ridership for {line_id}") - entries_for_line_id = get_ridership_time_series_for_line_id( - start_date=start_date, - end_date=end_date, - line_id=line_id, - ) - ridership_time_series_by_line_id[line_id] = entries_for_line_id - return ridership_time_series_by_line_id - - -# def get_service_level_entries_and_line_ids(feeds_and_service_levels: list[Tuple[GtfsFeed, Dict]]): -# entries = [] - -# for feed, service_levels in feeds_and_service_levels: -# for line_id, line_entry in service_levels.items(): -# all_line_ids.add(line_id) -# service_level_history = line_entry["history"] -# line_long_name = line_entry["longName"] -# line_short_name = line_entry["shortName"] -# route_ids = line_entry["routeIds"] -# exception_dates = list(map(date_from_string, line_entry["exceptionDates"])) -# for service_levels in service_level_history: -# entry = ServiceLevelsEntry( -# line_id=line_id, -# line_short_name=line_short_name, -# line_long_name=line_long_name, -# route_ids=route_ids, -# service_levels=service_levels["serviceLevels"], -# start_date=date_from_string(service_levels["startDate"]), -# end_date=date_from_string(service_levels["endDate"]), -# exception_dates=exception_dates, -# feed=feed, -# ) -# entries.append(entry) -# return bucket_by(entries, lambda e: e.line_id), all_line_ids - - -def get_service_levels_entry_for_date(entries: list[ServiceLevelsEntry], date: date): - matching_entries = [e for e in entries if e.date <= date <= e.end_date] - if len(matching_entries) > 0: - return max(matching_entries, key=lambda e: e.feed.start_date) - return None - - -def get_service_level_history( - entries: list[ServiceLevelsEntry], - start_date: date, - end_date: date, -): - levels_by_date = {} - date = start_date - while date <= end_date: - entry = get_service_levels_entry_for_date(entries, date) - levels_by_date[date] = round(sum(entry.service_levels)) if entry else 0 - date += timedelta(days=1) - values = [] - for date_range, value in get_date_ranges_of_same_value(levels_by_date): - (min_date, max_date) = date_range - range_length_days = 1 + (max_date - min_date).days - is_weekend = range_length_days <= 2 and all((d.weekday() in (5, 6) for d in (min_date, max_date))) - is_fill_range = any((date_range_contains(fill_range, date_range) for fill_range in FILL_DATE_RANGES)) - is_ignore_range = any((date_range_contains(ignore_range, date_range) for ignore_range in ANOMALY_RANGES)) - fill_hole = value == 0 and (range_length_days <= 5 or is_fill_range) - value_to_append = values[-1] if len(values) and (fill_hole or is_ignore_range or is_weekend) else value - values += range_length_days * [value_to_append] - return values - - -def get_exemplar_service_levels_for_lookback_date( - entries: list[ServiceLevelsEntry], - start_lookback_date: date, - matching_days_of_week: list[int], -): - date = start_lookback_date - while date >= PRE_COVID_DATE: - entry = get_service_levels_entry_for_date(entries, date) - if ( - entry - and sum(entry.service_levels) > 0 - and not date in entry.exception_dates - and date.weekday() in matching_days_of_week - ): - return entry.service_levels - date -= timedelta(days=1) - return None - - -def service_is_cancelled( - entries: list[ServiceLevelsEntry], - start_lookback_date: date, - matching_days_of_week: list[int], -): - most_recent_matching_date = start_lookback_date - while most_recent_matching_date.weekday() not in matching_days_of_week: - most_recent_matching_date -= timedelta(days=1) - entry = get_service_levels_entry_for_date(entries, most_recent_matching_date) - return entry is None - - -def get_service_levels_summary_dict( - entries: list[ServiceLevelsEntry], - start_lookback_date: date, - matching_days_of_week: list[int], -): - if service_is_cancelled(entries, start_lookback_date, matching_days_of_week): - return {"cancelled": True, "tripsPerHour": None, "totalTrips": 0} - trips_per_hour = get_exemplar_service_levels_for_lookback_date( - entries, - start_lookback_date, - matching_days_of_week, - ) - total_trips = round(sum(trips_per_hour)) if trips_per_hour else 0 - return { - "cancelled": False, - "tripsPerHour": trips_per_hour, - "totalTrips": total_trips, - } - - -def get_service_regime_dict(entries: list[ServiceLevelsEntry], start_lookback_date: date): - return { - "weekday": get_service_levels_summary_dict(entries, start_lookback_date, list(range(0, 5))), - "saturday": get_service_levels_summary_dict(entries, start_lookback_date, [5]), - "sunday": get_service_levels_summary_dict(entries, start_lookback_date, [6]), - } - - -def count_total_trips(regime_dict): - return ( - regime_dict["weekday"]["totalTrips"] - + regime_dict["saturday"]["totalTrips"] - + regime_dict["sunday"]["totalTrips"] - ) - - -def summarize_service(numerator_regime_dict, denominator_regime_dict): - numerator_total_trips = count_total_trips(numerator_regime_dict) - denominator_total_trips = count_total_trips(denominator_regime_dict) - try: - total_trips_fraction = numerator_total_trips / denominator_total_trips - except ZeroDivisionError: - total_trips_fraction = 0 - return numerator_total_trips, total_trips_fraction - - -def get_merged_ridership_time_series( - route_ids: list[str], - ridership_time_series_by_label: dict[str, list[int]], -): - labels = set((map_route_id_to_adhoc_label(route_id) for route_id in route_ids)) - matching_time_series = [ - ridership_time_series_by_label.get(label) for label in labels if label in ridership_time_series_by_label - ] - if len(matching_time_series) == 0: - return None - merged_time_series = [0] * len(matching_time_series[0]) - for ts in matching_time_series: - for idx, value in enumerate(ts): - merged_time_series[idx] += value - return merged_time_series - - -def get_ridership_percentage(total_ridership_time_series): - ridership_percentage = round(total_ridership_time_series[-1] / total_ridership_time_series[0], 2) - return ridership_percentage - - -def get_service_percentage(total_service_time_series): - service_percentage = round(total_service_time_series[-1] / total_service_time_series[0], 2) - return service_percentage - - -# since the data holds constant over a week, this function removes the duplicates of 7 and condenses into 1 datapoint -# keeps overall trends the same -def condensed_time_series(total_time_series): - condensed_series = [total_time_series[0]] - for i in range(len(total_time_series) - 1): - if total_time_series[i] is not total_time_series[i + 1]: - condensed_series.append(total_time_series[i + 1]) - return condensed_series - - -def generate_total_data( - ridership_time_series_list: list[list[float]], - service_time_series_list: list[list[float]], - combined_total_trips: int, - total_cancelled_routes: int, - total_reduced_serv_routes: int, - total_increased_serv_routes: int, - start_date: date, -): - total_ridership_time_series = [sum(entries_for_day) for entries_for_day in zip(*ridership_time_series_list)] - condensed_ridership_series = condensed_time_series(total_ridership_time_series) - total_service_time_series = [sum(entries_for_day) for entries_for_day in zip(*service_time_series_list)] - condensed_service_series = condensed_time_series(total_service_time_series) - total_ridership_percentage = get_ridership_percentage(total_ridership_time_series) - total_service_percentage = get_service_percentage(total_service_time_series) - total_passengers = total_ridership_time_series[-1] - end_date = start_date + timedelta(days=(len(total_service_time_series) - 1)) - return { - "totalRidershipHistory": condensed_ridership_series, - "totalServiceHistory": condensed_service_series, - "totalRidershipPercentage": total_ridership_percentage, - "totalServicePercentage": total_service_percentage, - "totalPassengers": total_passengers, - "totalTrips": combined_total_trips, - "totalRoutesCancelled": total_cancelled_routes, - "totalReducedService": total_reduced_serv_routes, - "totalIncreasedService": total_increased_serv_routes, - "startDate": start_date.strftime("%Y-%m-%d"), - "endDate": end_date.strftime("%Y-%m-%d"), - } - - -def generate_data_file(start_date: date, end_date: date): - data_by_line_id = {} - entries, line_ids = get_service_level_entries_and_line_ids(feeds_and_service_levels) - # feeds_and_service_levels = load_feeds_and_service_levels_from_archive() - ridership_time_series_by_label = get_ridership_time_series_by_adhoc_label( - ridership_source, - start_date, - end_date, - ) - ridership_time_series_list = [] - service_time_series_list = [] - combined_total_trips = 0 - total_reduced_serv_routes = 0 - total_increased_serv_routes = 0 - total_cancelled_routes = 0 - for line_id in line_ids: - if line_id in IGNORE_LINE_IDS: - continue - entries_for_line_id = entries[line_id] - exemplar_entry = entries_for_line_id[-1] - ridership_time_series = get_merged_ridership_time_series( - exemplar_entry.route_ids, - ridership_time_series_by_label, - ) - service_time_series = get_service_level_history( - entries_for_line_id, - start_date, - end_date, - ) - baseline_service_regime = get_service_regime_dict( - entries_for_line_id, - start_date, - ) - current_service_regime = get_service_regime_dict(entries_for_line_id, end_date) - day_kinds = ("weekday", "saturday", "sunday") - - try: - service_time_fraction = sum((current_service_regime[day]["totalTrips"] for day in day_kinds)) / sum( - (baseline_service_regime[day]["totalTrips"] for day in day_kinds) - ) - except ZeroDivisionError: - service_time_fraction = 0 - if service_time_fraction > 1: - total_increased_serv_routes += 1 - elif service_time_fraction < 1 and service_time_fraction != 0: - total_reduced_serv_routes += 1 - - if ( - current_service_regime["weekday"]["cancelled"] - or current_service_regime["saturday"]["cancelled"] - or current_service_regime["sunday"]["cancelled"] - ): - total_cancelled_routes += 1 - - total_trips, service_fraction = summarize_service( - current_service_regime, - baseline_service_regime, - ) - - if ridership_time_series is not None and service_time_series is not None: - ridership_time_series_list.append(ridership_time_series) - service_time_series_list.append(service_time_series) - combined_total_trips += total_trips - data_by_line_id[line_id] = { - "id": line_id, - "shortName": exemplar_entry.line_short_name, - "longName": exemplar_entry.line_long_name, - "routeIds": exemplar_entry.route_ids, - "startDate": start_date.strftime("%Y-%m-%d"), - "lineKind": get_line_kind(exemplar_entry.route_ids, line_id), - "ridershipHistory": ridership_time_series, - "serviceHistory": service_time_series, - "serviceFraction": service_fraction, - "totalTrips": total_trips, - "serviceRegimes": { - "baseline": baseline_service_regime, - "current": current_service_regime, - }, - } - - total_data = generate_total_data( - ridership_time_series_list, - service_time_series_list, - combined_total_trips, - total_cancelled_routes, - total_reduced_serv_routes, - total_increased_serv_routes, - start_date, - ) - - with open(OUTPUT_FILE, "w") as file: - file.write( - json.dumps( - { - "summaryData": total_data, - "lineData": data_by_line_id, - } - ) - ) - - -def create_service_ridership_dash_json( - start_date: date = START_DATE, - end_date: date = datetime.now(TIME_ZONE).date(), -): - # service_level_entries = get_service_level_entries_by_line_id( - # start_date=start_date, - # end_date=end_date, - # ) - # line_ids = list(service_level_entries.keys()) - line_ids = ["line-Red", "line-Orange", "line-Blue", "line-Green"] - ridership_time_series_by_line_id = get_ridership_time_series_by_line_id( - start_date=start_date, - end_date=end_date, - line_ids=line_ids, - ) - print(ridership_time_series_by_line_id) - - -if __name__ == "__main__": - create_service_ridership_dash_json() diff --git a/ingestor/chalicelib/service_ridership_dashboard/gtfs.py b/ingestor/chalicelib/service_ridership_dashboard/gtfs.py index b244108..40ae07b 100644 --- a/ingestor/chalicelib/service_ridership_dashboard/gtfs.py +++ b/ingestor/chalicelib/service_ridership_dashboard/gtfs.py @@ -19,11 +19,8 @@ def get_routes_by_line() -> Dict[Line, Route]: feed.use_compact_only() feed.download_or_build() session = feed.create_sqlite_session(compact=True) - lines_by_id = index_by( - session.query(Line).filter(Line.line_id.notin_(IGNORE_LINE_IDS)).all(), - lambda line: line.line_id, - ) + lines_by_id = index_by(session.query(Line).all(), lambda line: line.line_id) all_routes_with_line_ids = [ - route for route in session.query(Route).all() if route.line_id and route.route_type == RouteType.METRO + route for route in session.query(Route).all() if route.line_id and route.line_id not in IGNORE_LINE_IDS ] return bucket_by(all_routes_with_line_ids, lambda route: lines_by_id[route.line_id]) diff --git a/ingestor/chalicelib/service_ridership_dashboard/ridership_old.py b/ingestor/chalicelib/service_ridership_dashboard/ridership_old.py deleted file mode 100644 index 6c6b17a..0000000 --- a/ingestor/chalicelib/service_ridership_dashboard/ridership_old.py +++ /dev/null @@ -1,76 +0,0 @@ -from typing import List -from datetime import date, datetime, timedelta -from dataclasses import dataclass -from math import isnan - - -@dataclass -class RidershipEntry: - date: date - ridership: float - - -def create_ridership_entry_from_dict(entry_dict): - return RidershipEntry( - date=datetime.strptime(entry_dict["date"], "%Y-%m-%d").date(), - ridership=float(entry_dict["riders"]), - ) - - -def get_valid_ridership_value(entries: List[RidershipEntry], start_lookback_idx: int): - idx = start_lookback_idx - while idx >= 0: - entry = entries[idx] - if not isnan(entry.ridership): - return int(entry.ridership) - idx -= 1 - - -def create_time_series_from_entries( - entries: List[RidershipEntry], - start_date: date, - end_date: date, -): - series = [] - for idx, entry in enumerate(entries): - if entry.date < start_date: - continue - ridership = get_valid_ridership_value(entries, idx) - entry_start_date = max(start_date, entry.date) - entry_end_date = min( - end_date if idx == len(entries) - 1 else entries[idx + 1].date - timedelta(days=1), - end_date, - ) - today = entry_start_date - while today <= entry_end_date: - series.append(ridership) - today += timedelta(days=1) - return series - - -def get_ridership_time_series_by_adhoc_label( - source: "RidershipSource", - start_date: date, - end_date: date, -): - res = {} - ridership_dict = get_ridership_json(source) - for label, entries_json in ridership_dict.items(): - entries = [create_ridership_entry_from_dict(e) for e in entries_json] - res[label] = create_time_series_from_entries(entries, start_date, end_date) - return res - - -_adhoc_labels_map = { - "Green-B": "Green Line", - "Green-C": "Green Line", - "Green-D": "Green Line", - "Green-E": "Green Line", - "Blue": "Blue Line", - "Orange": "Orange Line", - "Red": "Red Line", -} - - -def map_route_id_to_adhoc_label(route_id: str): - return _adhoc_labels_map.get(route_id) or route_id diff --git a/ingestor/chalicelib/service_ridership_dashboard/service_summaries.py b/ingestor/chalicelib/service_ridership_dashboard/service_summaries.py index 801fc4f..caa7773 100644 --- a/ingestor/chalicelib/service_ridership_dashboard/service_summaries.py +++ b/ingestor/chalicelib/service_ridership_dashboard/service_summaries.py @@ -1,19 +1,8 @@ -from typing import TypedDict, Optional +from typing import Optional from datetime import date, timedelta from .service_levels import ServiceLevelsEntry, ServiceLevelsByDate - - -class ServiceSummaryForDay(TypedDict): - cancelled: bool - tripsPerHour: Optional[list[int]] - totalTrips: int - - -class ServiceSummary(TypedDict): - weekday: ServiceSummaryForDay - saturday: ServiceSummaryForDay - sunday: ServiceSummaryForDay +from .types import ServiceSummary, ServiceSummaryForDay def _is_matching_service_levels_entry( diff --git a/ingestor/chalicelib/service_ridership_dashboard/summary.py b/ingestor/chalicelib/service_ridership_dashboard/summary.py new file mode 100644 index 0000000..32c28bb --- /dev/null +++ b/ingestor/chalicelib/service_ridership_dashboard/summary.py @@ -0,0 +1,87 @@ +from datetime import date + +from .util import date_to_string +from .types import LineData, SummaryData +from .config import PRE_COVID_DATE + + +def _line_is_cancelled(line: LineData) -> bool: + return line["serviceRegimes"]["current"]["weekday"]["cancelled"] + + +def _line_has_reduced_service(line: LineData) -> bool: + try: + weekday_service_last_year = line["serviceRegimes"]["oneYearAgo"]["weekday"]["totalTrips"] + weekday_service_present = line["serviceRegimes"]["current"]["weekday"]["totalTrips"] + return weekday_service_present / weekday_service_last_year < (19 / 20) + except ZeroDivisionError: + return False + + +def _line_has_increased_service(line: LineData) -> bool: + try: + weekday_service_last_year = line["serviceRegimes"]["oneYearAgo"]["weekday"]["totalTrips"] + weekday_service_present = line["serviceRegimes"]["current"]["weekday"]["totalTrips"] + return weekday_service_present / weekday_service_last_year > (20 / 19) + except ZeroDivisionError: + return False + + +def _merge_time_series(many_series: list[list[float]]) -> list[float]: + min_length = min(len(series) for series in many_series) + entries = [0.0] * min_length + for series in many_series: + for idx, value in enumerate(series): + if idx >= min_length: + break + entries[idx] += value + return [round(e) for e in entries] + + +def _get_fraction_of_timeseries_value( + time_series: list[float], + start_date: date, + present_date: date, + denominator_date: date, +) -> float: + present_idx = min( + (present_date - start_date).days, + len(time_series) - 1, + ) + denominator_idx = (denominator_date - start_date).days + numerator = time_series[present_idx] + denominator = time_series[denominator_idx] + return numerator / denominator if denominator != 0 else 0.0 + + +def get_summary_data(line_data: list[LineData], start_date: date, end_date: date) -> SummaryData: + total_ridership_history = _merge_time_series([line["ridershipHistory"] for line in line_data]) + total_service_history = _merge_time_series([line["serviceHistory"] for line in line_data]) + total_passengers = total_ridership_history[-1] + total_trips = total_service_history[-1] + total_routes_cancelled = sum(_line_is_cancelled(line) for line in line_data) + total_reduced_service = sum(_line_has_reduced_service(line) for line in line_data) + total_increased_service = sum(_line_has_increased_service(line) for line in line_data) + return { + "totalRidershipHistory": total_ridership_history, + "totalServiceHistory": total_service_history, + "totalRidershipPercentage": _get_fraction_of_timeseries_value( + time_series=total_ridership_history, + start_date=start_date, + present_date=end_date, + denominator_date=PRE_COVID_DATE, + ), + "totalServicePercentage": _get_fraction_of_timeseries_value( + time_series=total_service_history, + start_date=start_date, + present_date=end_date, + denominator_date=PRE_COVID_DATE, + ), + "totalPassengers": total_passengers, + "totalTrips": total_trips, + "totalRoutesCancelled": total_routes_cancelled, + "totalReducedService": total_reduced_service, + "totalIncreasedService": total_increased_service, + "startDate": date_to_string(start_date), + "endDate": date_to_string(end_date), + } diff --git a/ingestor/chalicelib/service_ridership_dashboard/time.py b/ingestor/chalicelib/service_ridership_dashboard/time.py deleted file mode 100644 index 49a6166..0000000 --- a/ingestor/chalicelib/service_ridership_dashboard/time.py +++ /dev/null @@ -1,52 +0,0 @@ -import datetime -from datetime import date, timedelta - - -def date_from_string(date_str): - return datetime.datetime.strptime(date_str, "%Y-%m-%d").date() - - -def date_to_string(date): - return date.strftime("%Y-%m-%d") - - -def time_from_string(time_string): - pieces = [int(x) for x in time_string.split(":")] - if len(pieces) == 3: - hours, minutes, seconds = pieces - return datetime.timedelta(hours=hours, minutes=minutes, seconds=seconds) - hours, minutes = pieces - return datetime.timedelta(hours=hours, minutes=minutes) - - -def time_range_from_string(time_string): - pieces = time_string.split("-") - assert len(pieces) == 2 - return tuple(time_from_string(piece.strip()) for piece in pieces) - - -def stringify_timedelta(td): - seconds = td.total_seconds() - hours = seconds // 3600 - minutes = (seconds % 3600) // 60 - seconds = seconds % 60 - return "{:02}:{:02}:{:02}".format(int(hours), int(minutes), int(seconds)) - - -def date_range(start_date: date, end_date: date): - assert start_date <= end_date - now = start_date - while now <= end_date: - yield now - now = now + timedelta(days=1) - - -DAYS_OF_WEEK = [ - "monday", - "tuesday", - "wednesday", - "thursday", - "friday", - "saturday", - "sunday", -] diff --git a/ingestor/chalicelib/service_ridership_dashboard/types.py b/ingestor/chalicelib/service_ridership_dashboard/types.py new file mode 100644 index 0000000..a2d8431 --- /dev/null +++ b/ingestor/chalicelib/service_ridership_dashboard/types.py @@ -0,0 +1,61 @@ +from typing import TypedDict, Literal, Optional + +LineKind = Literal[ + "bus", + "regional-rail", + "silver", + "red", + "orange", + "blue", + "green", + "boat", +] + + +class ServiceSummaryForDay(TypedDict): + cancelled: bool + tripsPerHour: Optional[list[int]] + totalTrips: int + + +class ServiceSummary(TypedDict): + weekday: ServiceSummaryForDay + saturday: ServiceSummaryForDay + sunday: ServiceSummaryForDay + + +class ServiceRegimes(TypedDict): + current: ServiceSummary + oneYearAgo: ServiceSummary + baseline: ServiceSummary # This is the pre-covid service level from CRD + + +class LineData(TypedDict): + id: str + shortName: str + longName: str + routeIds: list[str] + startDate: str + lineKind: LineKind + ridershipHistory: list[float] + serviceHistory: list[float] + serviceRegimes: ServiceRegimes + + +class SummaryData(TypedDict): + totalRidershipHistory: list[float] + totalServiceHistory: list[float] + totalRidershipPercentage: float + totalServicePercentage: float + totalPassengers: float + totalTrips: float + totalRoutesCancelled: int + totalReducedService: int + totalIncreasedService: int + startDate: str + endDate: str + + +class DashJSON(TypedDict): + lineData: dict[str, LineData] + summaryData: SummaryData