messageboard-2025-01-04-1450.py
01234567890123456789012345678901234567890123456789012345678901234567890123456789









368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408








417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458








464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509








523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563








28242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864











                            <----SKIPPED LINES---->




#https://github.com/SDRplay/dump1090/blob/master/track.c
SPEED_UNITS = 'kn'
DISTANCE_UNITS = 'ft'  # altitude

# For displaying histograms
# If a key is not present, how should it be displayed in histograms?
KEY_NOT_PRESENT_STRING = 'Unknown'
OTHER_STRING = 'Other' # What key strings should be listed last in sequence?
# What key strings should be listed last in sequence?
SORT_AT_END_STRINGS = [OTHER_STRING, KEY_NOT_PRESENT_STRING]
# What is the sorted sequence of keys for days of week?
DAYS_OF_WEEK = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']

# AIRCRAFT_LENGTH[''] =
AIRCRAFT_LENGTH = {} # in meters

AIRCRAFT_LENGTH['Airbus A220-100'] = 35
AIRCRAFT_LENGTH['Airbus A220-300'] = 38.71
AIRCRAFT_LENGTH['Airbus A300F4-600'] = 54.08
AIRCRAFT_LENGTH['Airbus A319'] = 33.84
AIRCRAFT_LENGTH['Airbus A320'] = 37.57
AIRCRAFT_LENGTH['Airbus A320'] = 37.57
AIRCRAFT_LENGTH['Airbus A320neo'] = 37.57
AIRCRAFT_LENGTH['Airbus A321'] = 44.51
AIRCRAFT_LENGTH['Airbus A321neo'] = 44.51
AIRCRAFT_LENGTH['Airbus A330'] = 58.82  # assumed -200 or -300
AIRCRAFT_LENGTH['Airbus A330-200'] = 58.82
AIRCRAFT_LENGTH['Airbus A330-300'] = 63.67
AIRCRAFT_LENGTH['AIRBUS A-330-900'] = 63.66
AIRCRAFT_LENGTH['Airbus A330-900'] = 63.66
AIRCRAFT_LENGTH['Airbus A340-300'] = 63.69
AIRCRAFT_LENGTH['Airbus A350-1000'] = 73.79
AIRCRAFT_LENGTH['Airbus A350-900'] = 66.8
AIRCRAFT_LENGTH['Airbus A380-800'] = 72.72
AIRCRAFT_LENGTH['Antonov An-124 Ruslan'] = 69.1
AIRCRAFT_LENGTH['Beechcraft Beechjet'] = 14.76
AIRCRAFT_LENGTH['Beechcraft Bonanza (33)'] = 7.65
AIRCRAFT_LENGTH['Beechcraft Bonanza (36)'] = 8.38
AIRCRAFT_LENGTH['Beechcraft King Air 90'] = 10.82
AIRCRAFT_LENGTH['Beechcraft King Air F90'] = 12.14
AIRCRAFT_LENGTH['Beechcraft Premier 1'] = 14.02




                            <----SKIPPED LINES---->




AIRCRAFT_LENGTH['Boeing 737-900'] = 42.11
AIRCRAFT_LENGTH['Boeing 737-900'] = 42.11
AIRCRAFT_LENGTH['Boeing 737 MAX 8'] = 39.47
AIRCRAFT_LENGTH['Boeing 737 MAX 9'] = 42.1
AIRCRAFT_LENGTH['Boeing 737 MAX 9'] = 42.1
AIRCRAFT_LENGTH['Boeing 747-100'] = 70.66
AIRCRAFT_LENGTH['Boeing 747-400'] = 70.66
AIRCRAFT_LENGTH['Boeing 747-8'] = 76.25
AIRCRAFT_LENGTH['Boeing 757-200'] = 47.3
AIRCRAFT_LENGTH['Boeing 757-300'] = 54.4
AIRCRAFT_LENGTH['Boeing 767-200'] = 48.51
AIRCRAFT_LENGTH['BOEING 767-300'] = 54.94
AIRCRAFT_LENGTH['Boeing 767-300'] = 54.94
AIRCRAFT_LENGTH['BOEING 767-400'] = 61.37
AIRCRAFT_LENGTH['Boeing 777'] = (63.73 + 73.86) / 2
AIRCRAFT_LENGTH['Boeing 777-200'] = 63.73
AIRCRAFT_LENGTH['BOEING 777-200ER'] = 63.73
AIRCRAFT_LENGTH['BOEING 777-200LR'] = 63.73
AIRCRAFT_LENGTH['Boeing 777-200LR/F'] = 63.73
AIRCRAFT_LENGTH['Boeing 777-300'] = 33.4
AIRCRAFT_LENGTH['BOEING 777-300ER'] = 73.86
AIRCRAFT_LENGTH['BOEING 777-300ER'] = 73.86
AIRCRAFT_LENGTH['Boeing 777-300ER'] = 73.86
AIRCRAFT_LENGTH['Boeing 787-10'] = 68.28
AIRCRAFT_LENGTH['Boeing 787-8'] = 56.72
AIRCRAFT_LENGTH['Boeing 787-9'] = 62.81
AIRCRAFT_LENGTH['Boeing 787-9 Dreamliner'] = 62.81
AIRCRAFT_LENGTH['BOEING 787-10 Dreamliner'] = 68.28
AIRCRAFT_LENGTH['BOEING BBJ (747-8)'] = 76.25
AIRCRAFT_LENGTH['BOEING BBJ (777-200LR)'] = 63.73
AIRCRAFT_LENGTH['BOEING BBJ (777-300ER)'] = 73.86
AIRCRAFT_LENGTH['BOEING BBJ3'] = 42.11
AIRCRAFT_LENGTH['Boeing Dreamliner (Srs.8)'] = 56.72
AIRCRAFT_LENGTH['BOEING Dreamliner (Srs.9)'] = 62.81
AIRCRAFT_LENGTH['Boeing MD-11'] = (61.2 + 61.6) / 2
AIRCRAFT_LENGTH['BOMBARDIER BD-700 Global 7500'] = 33.88
AIRCRAFT_LENGTH['Bombardier Challenger 300'] = 20.92
AIRCRAFT_LENGTH['Bombardier Global 5000'] = 29.5
AIRCRAFT_LENGTH['Bombardier Global Express'] = (29.5 + 30.3) / 2
AIRCRAFT_LENGTH['Bombardier Learjet 75'] = 17.7
AIRCRAFT_LENGTH['Canadair Challenger'] = 20.9
AIRCRAFT_LENGTH['Canadair Challenger 350'] = 20.9




                            <----SKIPPED LINES---->




AIRCRAFT_LENGTH['Cessna Citation 1SP'] = 13.26
AIRCRAFT_LENGTH['Cessna Citation Bravo'] = 14.54
AIRCRAFT_LENGTH['Cessna Citation CJ1'] = 12.98
AIRCRAFT_LENGTH['Cessna Citation CJ2+'] = 14.53
AIRCRAFT_LENGTH['Cessna Citation CJ3'] = 15.59
AIRCRAFT_LENGTH['Cessna Citation CJ4'] = 16.26
AIRCRAFT_LENGTH['Cessna Citation M2'] = 12.98
AIRCRAFT_LENGTH['Cessna Citation Excel/XLS'] = 16.0
AIRCRAFT_LENGTH['Cessna Citation II'] = 14.54
AIRCRAFT_LENGTH['Cessna Citation Latitude'] = 18.97
AIRCRAFT_LENGTH['Cessna Citation Longitude'] = 22.3
AIRCRAFT_LENGTH['Cessna Citation Mustang'] = 12.37
AIRCRAFT_LENGTH['Cessna Citation Sovereign'] = 19.35
AIRCRAFT_LENGTH['Cessna Citation V'] = 14.91
AIRCRAFT_LENGTH['Cessna Citation X'] = 22.04
AIRCRAFT_LENGTH['Cessna Conquest 2'] = 11.89
AIRCRAFT_LENGTH['Cessna Skyhawk'] = 8.28
AIRCRAFT_LENGTH['Cessna Skylane'] = 8.84
AIRCRAFT_LENGTH['CESSNA T182 Turbo Skylane'] = 8.84
AIRCRAFT_LENGTH['Cessna T206 Turbo Stationair'] = 8.61
AIRCRAFT_LENGTH['Cessna 310 (twin-piston)'] = 8.23
AIRCRAFT_LENGTH['Cessna 421 (twin-piston)'] = 11.09
AIRCRAFT_LENGTH['Cirrus SR-20'] = 7.92
AIRCRAFT_LENGTH['Cirrus SR-22'] = 7.92
AIRCRAFT_LENGTH['Cirrus SR22 Turbo'] = 7.92
AIRCRAFT_LENGTH['Cirrus Vision SF50 (single-jet)'] = 9.42
AIRCRAFT_LENGTH['Daher-Socata TBM-900'] = 10.72
AIRCRAFT_LENGTH['Dassault Falcon 50'] = 18.52
AIRCRAFT_LENGTH['Dassault Falcon 7X'] = 23.38
AIRCRAFT_LENGTH['Dassault Falcon 2000'] = 20.23
AIRCRAFT_LENGTH['Dassault Falcon 900'] = 20.21
AIRCRAFT_LENGTH['de Havilland Dash 8-400'] = 32.8
AIRCRAFT_LENGTH['Diamond Star'] = 8.1
AIRCRAFT_LENGTH['Embraer 170/175'] = (29.90 + 31.68) / 2
AIRCRAFT_LENGTH['EMBRAER 175 (long wing)'] = 31.68
AIRCRAFT_LENGTH['EMBRAER 195'] = 38.66
AIRCRAFT_LENGTH['Embraer ERJ-135'] = 26.33
AIRCRAFT_LENGTH['Embraer ERJ-145'] = 29.87
AIRCRAFT_LENGTH['Embraer ERJ 175'] = 31.68
AIRCRAFT_LENGTH['Embraer ERJ 190'] = 36.25
AIRCRAFT_LENGTH['Embraer ERJ-190'] = 36.25
AIRCRAFT_LENGTH['Embraer Legacy 450'] = 19.69
AIRCRAFT_LENGTH['Embraer Legacy 550'] = 20.74
AIRCRAFT_LENGTH['Embraer Legacy 600/650'] = 26.33
AIRCRAFT_LENGTH['Embraer Phenom 100'] = 12.82
AIRCRAFT_LENGTH['Embraer Phenom 300'] = 15.9




                            <----SKIPPED LINES---->




AIRCRAFT_LENGTH['IAI Gulfstream G100'] = 16.94
AIRCRAFT_LENGTH['IAI Gulfstream G150'] = 16.94
AIRCRAFT_LENGTH['IAI Gulfstream G200'] = 18.97
AIRCRAFT_LENGTH['IAI Gulfstream G280'] = 20.3
AIRCRAFT_LENGTH['Learjet 31'] = 14.83
AIRCRAFT_LENGTH['Learjet 35'] = 14.83
AIRCRAFT_LENGTH['Learjet 40'] = 16.92
AIRCRAFT_LENGTH['Learjet 45'] = 17.68
AIRCRAFT_LENGTH['Learjet 55'] = 16.79
AIRCRAFT_LENGTH['Learjet 60'] = 17.88
AIRCRAFT_LENGTH['McDonnell Douglas MD-11'] = 61.6
AIRCRAFT_LENGTH['McDonnell Douglas MD-83'] = 45.06
AIRCRAFT_LENGTH['Mooney M-20'] = 8.13
AIRCRAFT_LENGTH['North American Navion'] = 8.38
AIRCRAFT_LENGTH['North American Sabreliner'] = 13.41
AIRCRAFT_LENGTH['Piaggio P.180 Avanti'] = 47.3
AIRCRAFT_LENGTH['Pilatus PC-12'] = 14.4
AIRCRAFT_LENGTH['Pilatus PC-24'] = 16.85
AIRCRAFT_LENGTH['Piper Cherokee'] = 7.10
AIRCRAFT_LENGTH['Piper Malibu Meridian'] = 9.02
AIRCRAFT_LENGTH['Piper Navajo (twin-piston)'] = 9.94
AIRCRAFT_LENGTH['Raytheon Hawker 800'] = 15.60
AIRCRAFT_LENGTH['Raytheon Hawker 800XP'] = 15.60
AIRCRAFT_LENGTH['Raytheon Hawker 850XP'] = 15.60
AIRCRAFT_LENGTH['Raytheon Hawker 900XP'] = 15.60
AIRCRAFT_LENGTH['Raytheon Hawker 1000'] = 16.08
AIRCRAFT_LENGTH['Rockwell Turbo Commander 690'] = 11.22
for mixed_case_plane in list(AIRCRAFT_LENGTH.keys()):  # pylint: disable=C0201
  AIRCRAFT_LENGTH[mixed_case_plane.upper()] = AIRCRAFT_LENGTH[mixed_case_plane]
  AIRCRAFT_LENGTH.pop(mixed_case_plane)

# pylint: disable=line-too-long
SHORTER_AIRCRAFT_NAME = {}
SHORTER_AIRCRAFT_NAME['Boeing 787-9 Dreamliner (twin-jet)'] = 'Boeing 787-9 (twin-jet)'
SHORTER_AIRCRAFT_NAME['BOEING 787-10 Dreamliner (twin-jet)'] = 'Boeing 787-10 (twin-jet)'
SHORTER_AIRCRAFT_NAME['Canadair Regional Jet CRJ-200 (twin-jet)'] = 'Canadair CRJ-200 (twin-jet)'
SHORTER_AIRCRAFT_NAME['Canadair Regional Jet CRJ-700 (twin-jet)'] = 'Canadair CRJ-700 (twin-jet)'
SHORTER_AIRCRAFT_NAME['Canadair Regional Jet CRJ-900 (twin-jet)'] = 'Canadair CRJ-900 (twin-jet)'
SHORTER_AIRCRAFT_NAME['Gulfstream Aerospace Gulfstream 3 (twin-jet)'] = 'Gulfstream 3 (twin-jet)'
SHORTER_AIRCRAFT_NAME['Gulfstream Aerospace Gulfstream G450 (twin-jet)'] = 'Gulfstream G450 (twin-jet)'
SHORTER_AIRCRAFT_NAME['Gulfstream Aerospace Gulfstream G550 (twin-jet)'] = 'Gulfstream G550 (twin-jet)'




                            <----SKIPPED LINES---->




  if vert_rate:
    line_elements.append('%+d%s' % (vert_rate, CLIMB_RATE_UNITS))
  if line_elements:
    lines.append(EvenlySpace(line_elements))

  return lines


def EvenlySpace(l):
  """Converts list to string with equal space between each element in list."""
  if not l:
    return ''
  if len(l) == 1:
    return l[0]
  extra_space = SPLITFLAP_CHARS_PER_LINE - sum([len(str(s)) for s in l])
  last_gap = round(extra_space / (len(l) - 1))
  return EvenlySpace([*l[:-2], str(l[-2]) + ' '*last_gap + str(l[-1])])


def RemoveLastParenthetical(s):
  """Removes last instance of () and text contained within - from string."""

  # Find the index of the last opening parenthesis
  last_open_index = s.rfind('(')
  if last_open_index == -1:
    return s  # No parentheses found

  # Find the index of the closing parenthesis that matches the last opening one
  last_close_index = s.find(')', last_open_index)
  if last_close_index == -1:
    return s  # Unmatched parenthesis

  # Remove the parentheses and their contents
  return s[:last_open_index] + s[last_close_index + 1:]


def ShorterPlaneName(s):
  """Replaces full plane name with a shorter name, if it exists."""
  return SHORTER_AIRCRAFT_NAME.get(s, s)






                            <----SKIPPED LINES---->





01234567890123456789012345678901234567890123456789012345678901234567890123456789









368369370371372373374375376377378379380381382383384385386387 388389390391392393394395396397398399400401402403404405406407








416417418419420421422423424425426427428429430431432433434435  436437438439440441442443444445446447448449450451452453454455








461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506








520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560








28212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861











                            <----SKIPPED LINES---->




#https://github.com/SDRplay/dump1090/blob/master/track.c
SPEED_UNITS = 'kn'
DISTANCE_UNITS = 'ft'  # altitude

# For displaying histograms
# If a key is not present, how should it be displayed in histograms?
KEY_NOT_PRESENT_STRING = 'Unknown'
OTHER_STRING = 'Other' # What key strings should be listed last in sequence?
# What key strings should be listed last in sequence?
SORT_AT_END_STRINGS = [OTHER_STRING, KEY_NOT_PRESENT_STRING]
# What is the sorted sequence of keys for days of week?
DAYS_OF_WEEK = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']

# AIRCRAFT_LENGTH[''] =
AIRCRAFT_LENGTH = {} # in meters

AIRCRAFT_LENGTH['Airbus A220-100'] = 35
AIRCRAFT_LENGTH['Airbus A220-300'] = 38.71
AIRCRAFT_LENGTH['Airbus A300F4-600'] = 54.08
AIRCRAFT_LENGTH['Airbus A319'] = 33.84

AIRCRAFT_LENGTH['Airbus A320'] = 37.57
AIRCRAFT_LENGTH['Airbus A320neo'] = 37.57
AIRCRAFT_LENGTH['Airbus A321'] = 44.51
AIRCRAFT_LENGTH['Airbus A321neo'] = 44.51
AIRCRAFT_LENGTH['Airbus A330'] = 58.82  # assumed -200 or -300
AIRCRAFT_LENGTH['Airbus A330-200'] = 58.82
AIRCRAFT_LENGTH['Airbus A330-300'] = 63.67
AIRCRAFT_LENGTH['AIRBUS A-330-900'] = 63.66
AIRCRAFT_LENGTH['Airbus A330-900'] = 63.66
AIRCRAFT_LENGTH['Airbus A340-300'] = 63.69
AIRCRAFT_LENGTH['Airbus A350-1000'] = 73.79
AIRCRAFT_LENGTH['Airbus A350-900'] = 66.8
AIRCRAFT_LENGTH['Airbus A380-800'] = 72.72
AIRCRAFT_LENGTH['Antonov An-124 Ruslan'] = 69.1
AIRCRAFT_LENGTH['Beechcraft Beechjet'] = 14.76
AIRCRAFT_LENGTH['Beechcraft Bonanza (33)'] = 7.65
AIRCRAFT_LENGTH['Beechcraft Bonanza (36)'] = 8.38
AIRCRAFT_LENGTH['Beechcraft King Air 90'] = 10.82
AIRCRAFT_LENGTH['Beechcraft King Air F90'] = 12.14
AIRCRAFT_LENGTH['Beechcraft Premier 1'] = 14.02




                            <----SKIPPED LINES---->




AIRCRAFT_LENGTH['Boeing 737-900'] = 42.11
AIRCRAFT_LENGTH['Boeing 737-900'] = 42.11
AIRCRAFT_LENGTH['Boeing 737 MAX 8'] = 39.47
AIRCRAFT_LENGTH['Boeing 737 MAX 9'] = 42.1
AIRCRAFT_LENGTH['Boeing 737 MAX 9'] = 42.1
AIRCRAFT_LENGTH['Boeing 747-100'] = 70.66
AIRCRAFT_LENGTH['Boeing 747-400'] = 70.66
AIRCRAFT_LENGTH['Boeing 747-8'] = 76.25
AIRCRAFT_LENGTH['Boeing 757-200'] = 47.3
AIRCRAFT_LENGTH['Boeing 757-300'] = 54.4
AIRCRAFT_LENGTH['Boeing 767-200'] = 48.51
AIRCRAFT_LENGTH['BOEING 767-300'] = 54.94
AIRCRAFT_LENGTH['Boeing 767-300'] = 54.94
AIRCRAFT_LENGTH['BOEING 767-400'] = 61.37
AIRCRAFT_LENGTH['Boeing 777'] = (63.73 + 73.86) / 2
AIRCRAFT_LENGTH['Boeing 777-200'] = 63.73
AIRCRAFT_LENGTH['BOEING 777-200ER'] = 63.73
AIRCRAFT_LENGTH['BOEING 777-200LR'] = 63.73
AIRCRAFT_LENGTH['Boeing 777-200LR/F'] = 63.73
AIRCRAFT_LENGTH['Boeing 777-300'] = 33.4


AIRCRAFT_LENGTH['Boeing 777-300ER'] = 73.86
AIRCRAFT_LENGTH['Boeing 787-10'] = 68.28
AIRCRAFT_LENGTH['Boeing 787-8'] = 56.72
AIRCRAFT_LENGTH['Boeing 787-9'] = 62.81
AIRCRAFT_LENGTH['Boeing 787-9 Dreamliner'] = 62.81
AIRCRAFT_LENGTH['BOEING 787-10 Dreamliner'] = 68.28
AIRCRAFT_LENGTH['BOEING BBJ (747-8)'] = 76.25
AIRCRAFT_LENGTH['BOEING BBJ (777-200LR)'] = 63.73
AIRCRAFT_LENGTH['BOEING BBJ (777-300ER)'] = 73.86
AIRCRAFT_LENGTH['BOEING BBJ3'] = 42.11
AIRCRAFT_LENGTH['Boeing Dreamliner (Srs.8)'] = 56.72
AIRCRAFT_LENGTH['BOEING Dreamliner (Srs.9)'] = 62.81
AIRCRAFT_LENGTH['Boeing MD-11'] = (61.2 + 61.6) / 2
AIRCRAFT_LENGTH['BOMBARDIER BD-700 Global 7500'] = 33.88
AIRCRAFT_LENGTH['Bombardier Challenger 300'] = 20.92
AIRCRAFT_LENGTH['Bombardier Global 5000'] = 29.5
AIRCRAFT_LENGTH['Bombardier Global Express'] = (29.5 + 30.3) / 2
AIRCRAFT_LENGTH['Bombardier Learjet 75'] = 17.7
AIRCRAFT_LENGTH['Canadair Challenger'] = 20.9
AIRCRAFT_LENGTH['Canadair Challenger 350'] = 20.9




                            <----SKIPPED LINES---->




AIRCRAFT_LENGTH['Cessna Citation 1SP'] = 13.26
AIRCRAFT_LENGTH['Cessna Citation Bravo'] = 14.54
AIRCRAFT_LENGTH['Cessna Citation CJ1'] = 12.98
AIRCRAFT_LENGTH['Cessna Citation CJ2+'] = 14.53
AIRCRAFT_LENGTH['Cessna Citation CJ3'] = 15.59
AIRCRAFT_LENGTH['Cessna Citation CJ4'] = 16.26
AIRCRAFT_LENGTH['Cessna Citation M2'] = 12.98
AIRCRAFT_LENGTH['Cessna Citation Excel/XLS'] = 16.0
AIRCRAFT_LENGTH['Cessna Citation II'] = 14.54
AIRCRAFT_LENGTH['Cessna Citation Latitude'] = 18.97
AIRCRAFT_LENGTH['Cessna Citation Longitude'] = 22.3
AIRCRAFT_LENGTH['Cessna Citation Mustang'] = 12.37
AIRCRAFT_LENGTH['Cessna Citation Sovereign'] = 19.35
AIRCRAFT_LENGTH['Cessna Citation V'] = 14.91
AIRCRAFT_LENGTH['Cessna Citation X'] = 22.04
AIRCRAFT_LENGTH['Cessna Conquest 2'] = 11.89
AIRCRAFT_LENGTH['Cessna Skyhawk'] = 8.28
AIRCRAFT_LENGTH['Cessna Skylane'] = 8.84
AIRCRAFT_LENGTH['CESSNA T182 Turbo Skylane'] = 8.84
AIRCRAFT_LENGTH['Cessna T206 Turbo Stationair'] = 8.61
AIRCRAFT_LENGTH['Cessna 310'] = 8.23
AIRCRAFT_LENGTH['Cessna 421'] = 11.09
AIRCRAFT_LENGTH['Cirrus SR-20'] = 7.92
AIRCRAFT_LENGTH['Cirrus SR-22'] = 7.92
AIRCRAFT_LENGTH['Cirrus SR22 Turbo'] = 7.92
AIRCRAFT_LENGTH['Cirrus Vision SF50'] = 9.42
AIRCRAFT_LENGTH['Daher-Socata TBM-900'] = 10.72
AIRCRAFT_LENGTH['Dassault Falcon 50'] = 18.52
AIRCRAFT_LENGTH['Dassault Falcon 7X'] = 23.38
AIRCRAFT_LENGTH['Dassault Falcon 2000'] = 20.23
AIRCRAFT_LENGTH['Dassault Falcon 900'] = 20.21
AIRCRAFT_LENGTH['de Havilland Dash 8-400'] = 32.8
AIRCRAFT_LENGTH['Diamond Star'] = 8.1
AIRCRAFT_LENGTH['Embraer 170/175'] = (29.90 + 31.68) / 2
AIRCRAFT_LENGTH['EMBRAER 175 (long wing)'] = 31.68
AIRCRAFT_LENGTH['EMBRAER 195'] = 38.66
AIRCRAFT_LENGTH['Embraer ERJ-135'] = 26.33
AIRCRAFT_LENGTH['Embraer ERJ-145'] = 29.87
AIRCRAFT_LENGTH['Embraer ERJ 175'] = 31.68
AIRCRAFT_LENGTH['Embraer ERJ 190'] = 36.25
AIRCRAFT_LENGTH['Embraer ERJ-190'] = 36.25
AIRCRAFT_LENGTH['Embraer Legacy 450'] = 19.69
AIRCRAFT_LENGTH['Embraer Legacy 550'] = 20.74
AIRCRAFT_LENGTH['Embraer Legacy 600/650'] = 26.33
AIRCRAFT_LENGTH['Embraer Phenom 100'] = 12.82
AIRCRAFT_LENGTH['Embraer Phenom 300'] = 15.9




                            <----SKIPPED LINES---->




AIRCRAFT_LENGTH['IAI Gulfstream G100'] = 16.94
AIRCRAFT_LENGTH['IAI Gulfstream G150'] = 16.94
AIRCRAFT_LENGTH['IAI Gulfstream G200'] = 18.97
AIRCRAFT_LENGTH['IAI Gulfstream G280'] = 20.3
AIRCRAFT_LENGTH['Learjet 31'] = 14.83
AIRCRAFT_LENGTH['Learjet 35'] = 14.83
AIRCRAFT_LENGTH['Learjet 40'] = 16.92
AIRCRAFT_LENGTH['Learjet 45'] = 17.68
AIRCRAFT_LENGTH['Learjet 55'] = 16.79
AIRCRAFT_LENGTH['Learjet 60'] = 17.88
AIRCRAFT_LENGTH['McDonnell Douglas MD-11'] = 61.6
AIRCRAFT_LENGTH['McDonnell Douglas MD-83'] = 45.06
AIRCRAFT_LENGTH['Mooney M-20'] = 8.13
AIRCRAFT_LENGTH['North American Navion'] = 8.38
AIRCRAFT_LENGTH['North American Sabreliner'] = 13.41
AIRCRAFT_LENGTH['Piaggio P.180 Avanti'] = 47.3
AIRCRAFT_LENGTH['Pilatus PC-12'] = 14.4
AIRCRAFT_LENGTH['Pilatus PC-24'] = 16.85
AIRCRAFT_LENGTH['Piper Cherokee'] = 7.10
AIRCRAFT_LENGTH['Piper Malibu Meridian'] = 9.02
AIRCRAFT_LENGTH['Piper Navajo'] = 9.94
AIRCRAFT_LENGTH['Raytheon Hawker 800'] = 15.60
AIRCRAFT_LENGTH['Raytheon Hawker 800XP'] = 15.60
AIRCRAFT_LENGTH['Raytheon Hawker 850XP'] = 15.60
AIRCRAFT_LENGTH['Raytheon Hawker 900XP'] = 15.60
AIRCRAFT_LENGTH['Raytheon Hawker 1000'] = 16.08
AIRCRAFT_LENGTH['Rockwell Turbo Commander 690'] = 11.22
for mixed_case_plane in list(AIRCRAFT_LENGTH.keys()):  # pylint: disable=C0201
  AIRCRAFT_LENGTH[mixed_case_plane.upper()] = AIRCRAFT_LENGTH[mixed_case_plane]
  AIRCRAFT_LENGTH.pop(mixed_case_plane)

# pylint: disable=line-too-long
SHORTER_AIRCRAFT_NAME = {}
SHORTER_AIRCRAFT_NAME['Boeing 787-9 Dreamliner (twin-jet)'] = 'Boeing 787-9 (twin-jet)'
SHORTER_AIRCRAFT_NAME['BOEING 787-10 Dreamliner (twin-jet)'] = 'Boeing 787-10 (twin-jet)'
SHORTER_AIRCRAFT_NAME['Canadair Regional Jet CRJ-200 (twin-jet)'] = 'Canadair CRJ-200 (twin-jet)'
SHORTER_AIRCRAFT_NAME['Canadair Regional Jet CRJ-700 (twin-jet)'] = 'Canadair CRJ-700 (twin-jet)'
SHORTER_AIRCRAFT_NAME['Canadair Regional Jet CRJ-900 (twin-jet)'] = 'Canadair CRJ-900 (twin-jet)'
SHORTER_AIRCRAFT_NAME['Gulfstream Aerospace Gulfstream 3 (twin-jet)'] = 'Gulfstream 3 (twin-jet)'
SHORTER_AIRCRAFT_NAME['Gulfstream Aerospace Gulfstream G450 (twin-jet)'] = 'Gulfstream G450 (twin-jet)'
SHORTER_AIRCRAFT_NAME['Gulfstream Aerospace Gulfstream G550 (twin-jet)'] = 'Gulfstream G550 (twin-jet)'




                            <----SKIPPED LINES---->




  if vert_rate:
    line_elements.append('%+d%s' % (vert_rate, CLIMB_RATE_UNITS))
  if line_elements:
    lines.append(EvenlySpace(line_elements))

  return lines


def EvenlySpace(l):
  """Converts list to string with equal space between each element in list."""
  if not l:
    return ''
  if len(l) == 1:
    return l[0]
  extra_space = SPLITFLAP_CHARS_PER_LINE - sum([len(str(s)) for s in l])
  last_gap = round(extra_space / (len(l) - 1))
  return EvenlySpace([*l[:-2], str(l[-2]) + ' '*last_gap + str(l[-1])])


def RemoveLastParenthetical(s):
  """Removes last instance of () and text contained within from string."""

  # Find the index of the last opening parenthesis
  last_open_index = s.rfind('(')
  if last_open_index == -1:
    return s  # No parentheses found

  # Find the index of the closing parenthesis that matches the last opening one
  last_close_index = s.find(')', last_open_index)
  if last_close_index == -1:
    return s  # Unmatched parenthesis

  # Remove the parentheses and their contents
  return s[:last_open_index] + s[last_close_index + 1:]


def ShorterPlaneName(s):
  """Replaces full plane name with a shorter name, if it exists."""
  return SHORTER_AIRCRAFT_NAME.get(s, s)






                            <----SKIPPED LINES---->