diff --git a/pydbc/ldf.g4 b/pydbc/ldf.g4 index 0f5c592..8deb093 100644 --- a/pydbc/ldf.g4 +++ b/pydbc/ldf.g4 @@ -166,7 +166,7 @@ attributes_def: ('ST_min' '=' stMin = number 'ms' ';')? ('N_As_timeout' '=' nAs = number 'ms' ';')? ('N_Cr_timeout' '=' nCr = number 'ms' ';')? - cf20 = configurable_frames_20_def | cf21 = configurable_frames_21_def + cf = configurable_frames ; supplier_id: @@ -185,30 +185,36 @@ signal_name: i = identifierValue ; -configurable_frames_20_def: +configurable_frames: 'configurable_frames' '{' - (fname = frame_name '=' mid = message_id ';')* + (frames += configurable_frame)* '}' ; +configurable_frame: + fname = frame_name ('=' mid = message_id)? ';' // Note: optional part is required for LIN < 2.1 -- TODO: syn. predicate! + ; + message_id: i = intValue ; -configurable_frames_21_def: - 'configurable_frames' '{' - (fnames += frame_name ';')* +node_composition_def: + 'composite' '{' + (items += configuration)* '}' ; -node_composition_def: - 'composite' '{' - ('configuration' cname = configuration_name '{' - (cnode = composite_node '{' lnodes += logical_node (',' lnodes += logical_node)* ';')* - '}')* +configuration: + 'configuration' cname = configuration_name '{' + (items += configuration_item)* '}' ; +configuration_item: + cnode = composite_node '{' lnodes += logical_node (',' lnodes += logical_node)* '}' + ; + configuration_name: i = identifierValue ; @@ -223,10 +229,14 @@ logical_node: signal_def: 'Signals' '{' - (sname = signal_name ':' ssize = signal_size ',' initValue = init_value ',' pub = published_by (',' sub += subscribed_by)* ';')* + (items += signal_item)* '}' ; +signal_item: + sname = signal_name ':' ssize = signal_size ',' initValue = init_value ',' pub = published_by (',' sub += subscribed_by)* ';' + ; + signal_size: i = intValue ; @@ -255,7 +265,7 @@ subscribed_by: diagnostic_signal_def: 'Diagnostic_signals' '{' - (i10 = identifierValue ':' i11 = intValue ',' i12 = intValue ';')* + (items += diagnostic_item)* /* MasterReqB0: 8, 0 ; MasterReqB1: 8, 0 ; @@ -277,14 +287,26 @@ diagnostic_signal_def: '}' ; +diagnostic_item: + name = identifierValue ':' size = signal_size ',' initValue = init_value ';' + ; + signal_groups_def: 'Signal_groups' '{' - (sgname = signal_group_name ':' gsize = group_size '{' - (sname = signal_name ',' goffs = group_offset ';')* - '}')* + (items += signal_group)* + '}' + ; + +signal_group: + // Signal groups are deprecated. + sgname = signal_group_name ':' gsize = group_size '{' (items += signal_group_item)* '}' ; +signal_group_item: + sname = signal_name ',' goffs = group_offset ';' + ; + signal_group_name: i = identifierValue ; @@ -299,12 +321,18 @@ group_offset: frame_def: 'Frames' '{' - (fname = frame_name ':' fid = frame_id ',' p = published_by ',' fsize = frame_size '{' - (sname = signal_name ',' soffs = signal_offset ';')* - '}')* + (items += frame_item)* '}' ; +frame_item: + fname = frame_name ':' fid = frame_id ',' p = published_by ',' fsize = frame_size '{' (items += frame_signal)* '}' + ; + +frame_signal: + sname = signal_name ',' soffs = signal_offset ';' + ; + frame_name: i = identifierValue ; @@ -323,20 +351,28 @@ signal_offset: sporadic_frame_def: 'Sporadic_frames' '{' - (sfn = sporadic_frame_name ':' names += frame_name (',' names += frame_name)* ';')* + (items += sporadic_frame_item)* '}' ; +sporadic_frame_item: + sfn = sporadic_frame_name ':' names += frame_name (',' names += frame_name)* ';' + ; + sporadic_frame_name: i = identifierValue ; event_triggered_frame_def: 'Event_triggered_frames' '{' - (e = event_trig_frm_name ':' c = collision_resolving_schedule_table ',' fid = frame_id (',' frame_name ';')* )* + (items += event_triggered_frame_item)* '}' ; +event_triggered_frame_item: + e = event_trig_frm_name ':' c = collision_resolving_schedule_table ',' fid = frame_id (',' items += frame_name ';')* + ; + event_trig_frm_name: i = identifierValue ; @@ -347,8 +383,8 @@ collision_resolving_schedule_table: diag_frame_def: 'Diagnostic_frames' '{' - 'MasterReq' ':' m = intValue '{' - (i10 = identifierValue ',' i11 = intValue ';')* + 'MasterReq' ':' mid = intValue '{' + (mitems += diag_frame_item)* /* MasterReqB0, 0; MasterReqB1, 8; @@ -360,8 +396,8 @@ diag_frame_def: MasterReqB7, 56; */ '}' - 'SlaveResp' ':' s = intValue '{' - (i20 = identifierValue ',' i21 = intValue ';')* + 'SlaveResp' ':' sid = intValue '{' + (sitems += diag_frame_item)* /* SlaveRespB0, 0; SlaveRespB1, 8; @@ -376,19 +412,31 @@ diag_frame_def: '}' ; +diag_frame_item: + sname = identifierValue ',' soffs = intValue ';' + ; + schedule_table_def: 'Schedule_tables' '{' - (s = schedule_table_name '{' (c = command 'delay' f = frame_time 'ms' ';')* '}')* + (items += schedule_table_entry)* '}' ; +schedule_table_entry: + s = schedule_table_name '{' (items += schedule_table_command)* '}' + ; + +schedule_table_command: + c = command 'delay' f = frame_time 'ms' ';' + ; + schedule_table_name: i = identifierValue ; command: frameName = frame_name - | c = 'MasterReq' + | c = 'MasterReq' | c = 'SlaveResp' | c = 'AssignNAD' '{' nodeName = node_name '}' | c = 'ConditionalChangeNAD' '{' nad = intValue ',' id_ = intValue ',' byte_ = intValue ',' mask = intValue ',' inv = intValue ',' new_NAD = intValue'}' @@ -412,15 +460,22 @@ frame_time: n = number ; - signal_encoding_type_def: 'Signal_encoding_types' '{' - (s = signal_encoding_type_name '{' - (l = logical_value | p = physical_range | b = bcd_value | a = ascii_value)* - '}')* + (items += signal_encoding_entry)* '}' ; +signal_encoding_entry: + s = signal_encoding_type_name '{' + (items += signal_encoding_value)* + '}' + ; + +signal_encoding_value: + l = logical_value | p = physical_range | b = bcd_value | a = ascii_value + ; + signal_encoding_type_name: i = identifierValue ; @@ -467,10 +522,13 @@ text_info: signal_representation_def: 'Signal_representation' '{' - ( enc = signal_encoding_type_name ':' names += signal_name (',' names += signal_name)* ';')* + (items += signal_representation_entry)* '}' ; +signal_representation_entry: + enc = signal_encoding_type_name ':' names += signal_name (',' names += signal_name)* ';' + ; /* ** diff --git a/pydbc/ldfListener.py b/pydbc/ldfListener.py index de57bec..dac33de 100644 --- a/pydbc/ldfListener.py +++ b/pydbc/ldfListener.py @@ -97,17 +97,29 @@ def exitSignal_name(self, ctx): ctx.value = ctx.i.value print("signal_name", ctx.value) - def exitConfigurable_frames_20_def(self, ctx): - pass + def exitConfigurable_frames(self, ctx): + ctx.value = [x.value for x in ctx.frames] + + def exitConfigurable_frame(self, ctx): + fname = ctx.fname.value + mid = ctx.mid.value if ctx.mid else None + ctx.value = OrderedDict(frameName = fname, messageID = mid) def exitMessage_id(self, ctx): ctx.value = ctx.i.value - def exitConfigurable_frames_21_def(self, ctx): - pass - def exitNode_composition_def(self, ctx): - pass + ctx.value = [x.value for x in ctx.items] + + def exitConfiguration(self, ctx): + cname = ctx.cname.value + items = [x.value for x in ctx.items] + ctx.value = OrderedDict(configurationName = cname, items = items) + + def exitConfiguration_item(self, ctx): + cnode = ctx.cnode.value + lnodes = [x.value for x in ctx.lnodes] + ctx.value = OrderedDict(compositeNode = cnode, logicalNodes = lnodes) def exitConfiguration_name(self, ctx): ctx.value = ctx.i.value @@ -119,14 +131,16 @@ def exitLogical_node(self, ctx): ctx.value = ctx.i.value def exitSignal_def(self, ctx): - #(sname = signal_name ':' ssize = signal_size ',' initValue = init_value ',' pub = published_by (',' sub += subscribed_by)* ';')* + ctx.value = [x.value for x in ctx.items] + + def exit_Signal_item(self, ctx): sname = ctx.sname.value ssize = ctx.ssize.value initValue = ctx.initValue.value pub = ctx.pub.value sub = [x.value for x in ctx.sub] - ctx.value = OrderedDict(name = sname, size = ssize, initValue = initValue, pub = pub, sub = sub) - print("signal_def:", ctx.value) + ctx.value = OrderedDict(name = sname, size = ssize, initValue = initValue, publishedBy = pub, subscribedBy = sub) + print("signal_item:", ctx.value) def exitSignal_size(self, ctx): ctx.value = ctx.i.value @@ -150,22 +164,52 @@ def exitSubscribed_by(self, ctx): ctx.value = ctx.i.value def exitDiagnostic_signal_def(self, ctx): - pass + ctx.value = [x.value for x in ctx.items] + + def exitDiagnostic_item(self, ctx): + name = ctx.name.value + size = ctx.size.value + initValue = ctx.initValue.value + ctx.value = OrderedDict(name = name, size = size, initValue = initValue) def exitSignal_groups_def(self, ctx): - pass + ctx.value = [x.value for x in ctx.items] + + def exitSignal_group(self, ctx): + sgname = signal_group_name ':' + gsize = group_size '{' + items = [x.value for x in ctx.items] + ctx.value = OrderedDict(signalGroupName = sgname, groupSize = gsize, items = items) + + def exitSignal_group_item(self, ctx): + sname = ctx.sname.value + goffs = ctx.goffs.value + ctx.value = OrderedDict(signalName = sname, groupOffset = goffs) def exitSignal_group_name(self, ctx): - pass + ctx.value = ctx.i.value def exitGroup_size(self, ctx): - pass + ctx.value = ctx.i.value def exitGroup_offset(self, ctx): - pass + ctx.value = ctx.i.value def exitFrame_def(self, ctx): - pass + ctx.value = [x.value for x in ctx.items] + + def exitFrame_item(self, ctx): + fname = ctx.fname.value + fid = ctx.fid.value + p = ctx.p.value + fsize = ctx.fsize.value + items = [x.value for x in ctx.items] + ctx.value = OrderedDict(frameName = fname, frameID = fid, publishedBy = p, frameSize = fsize, signals = items) + + def exitFrame_signal(self, ctx): + sname = ctx.sname.value + soffs = ctx.soffs.value + ctx.value = OrderedDict(signalName = sname, signalOffset = soffs) def exitFrame_name(self, ctx): ctx.value = ctx.i.value @@ -180,14 +224,25 @@ def exitSignal_offset(self, ctx): ctx.value = ctx.i.value def exitSporadic_frame_def(self, ctx): - pass + ctx.value = [x.value for x in ctx.items] + + def exitSporadic_frame_item(self, ctx): + name = ctx.sfn.value + fnames = [x.value for x in ctx.names] + ctx.value = OrderedDict(sporadicFrameName = name, frameNames = fnames) def exitSporadic_frame_name(self, ctx): ctx.value = ctx.i.value def exitEvent_triggered_frame_def(self, ctx): - #(e = event_trig_frm_name ':' c = collision_resolving_schedule_table ',' fid = frame_id names += (',' frame_name ';')* )* - pass + ctx.value = [x.value for x in ctx.items] + + def exitEvent_triggered_frame_item(self, ctx): + e = ctx.e.value + c = ctx.c.value + fid = ctx.fid.value + items = [x.value for x in ctx.items] + ctx.value = OrderedDict(frameName = e, frameID = fid, scheduleTable = c, frameNames = items) def exitEvent_trig_frm_name(self, ctx): ctx.value = ctx.i.value @@ -196,19 +251,29 @@ def exitCollision_resolving_schedule_table(self, ctx): ctx.value = ctx.i.value def exitDiag_frame_def(self, ctx): - m = ctx.m.value - #ms = [x.value for x in ctx.ms] - s = ctx.s.value - #ss = [x.value for x in ctx.ss] - #ctx.value = OrderedDict(m = m, ms = ms, s = s, ss = ss) - ctx.value = OrderedDict(m = m, s = s) + mid = ctx.mid.value + sid = ctx.sid.value + mitems = [x.value for x in ctx.mitems] + sitems = [x.value for x in ctx.sitems] + ctx.value = OrderedDict(masterID = mid, slaveID = sid, masterSignals = mitems, slaveSignals = sitems) + def ExitDiag_frame_item(self, ctx): + sname = ctx.sname.value + soffs = ctx.soffs.value + ctx.value = OrderedDict(signalName = sname, signalOffset = soffs) def exitSchedule_table_def(self, ctx): - pass - #items = [x.value for x in ctx.items] - #ctx.value = items - #(s = schedule_table_name '{' (c = command 'delay' f = frame_time 'ms' ';')* '}')* + ctx.value = [x.value for x in ctx.items] + + def exitSchedule_table_entry(self, ctx): + s = ctx.s.value + items = [x.value for x in ctx.items] + ctx.value = OrderedDict(name = s, commands = items) + + def exitSchedule_table_command(self, ctx): + c = ctx.c.value + f = ctx.f.value + ctx.value = OrderedDict(command = c, frameTime = f) def exitSchedule_table_name(self, ctx): ctx.value = ctx.i.value @@ -266,7 +331,15 @@ def exitFrame_time(self, ctx): ctx.value = ctx.n.value def exitSignal_encoding_type_def(self, ctx): - encoding_type_name = ctx.s.value + items = [x.value for x in ctx.items] + ctx.value = items + + def exitSignal_encoding_entry(self, ctx): + s = ctx.s.value + items = [x.value for x in ctx.items] + ctx.value = OrderedDict(name = s, values = items) + + def exitSignal_encoding_value(self, ctx): if ctx.l: value = ctx.l.value vtype = "logical" @@ -279,7 +352,8 @@ def exitSignal_encoding_type_def(self, ctx): elif ctx.a: value = ctx.a.name vtype = "ascii" - ctx.value = OrderedDict(encoding_type_name = encoding_type_name, value = value, type = vtype) + ctx.value = OrderedDict(value = value, valueType = vtype) + def exitSignal_encoding_type_name(self, ctx): ctx.value = ctx.i.value @@ -323,8 +397,13 @@ def exitText_info(self, ctx): ctx.value = ctx.s.value def exitSignal_representation_def(self, ctx): + items = [x.value for x in ctx.items] + ctx.value = items + + def exitSignal_representation_entry(self, ctx): + enc = ctx.enc.value names = [x.value for x in ctx.names] - ctx.value = OrderedDict(encoding_type = ctx.enc.value, signal_names = names) + ctx.value = OrderedDict(name = enc, signalNames = names) def exitIntValue(self, ctx): ctx.value = int(ctx.i.text) if ctx.i else None diff --git a/pydbc/py3/ldfLexer.py b/pydbc/py3/ldfLexer.py index 8cfa854..f6ae4f4 100644 --- a/pydbc/py3/ldfLexer.py +++ b/pydbc/py3/ldfLexer.py @@ -8,8 +8,8 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2?") - buf.write("\u037b\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2@") + buf.write("\u0388\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r") buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23") buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30") @@ -18,371 +18,378 @@ def serializedATN(): buf.write("\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4,\t,\4-\t-\4.") buf.write("\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64") buf.write("\t\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:") - buf.write("\4;\t;\4<\t<\4=\t=\4>\t>\4?\t?\4@\t@\3\2\3\2\3\2\3\2\3") + buf.write("\4;\t;\4<\t<\4=\t=\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\3\2\3") buf.write("\2\3\2\3\2\3\2\3\2\3\2\3\2\3\2\3\2\3\2\3\2\3\2\3\2\3\2") - buf.write("\3\2\3\2\3\2\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3") - buf.write("\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\5") - buf.write("\3\5\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3") - buf.write("\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\7\3\7\3\7\3\7\3\7") - buf.write("\3\7\3\7\3\7\3\7\3\7\3\b\3\b\3\b\3\b\3\b\3\t\3\t\3\t\3") - buf.write("\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\n\3\n\3\n\3\n") - buf.write("\3\n\3\n\3\13\3\13\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\r\3\r") - buf.write("\3\16\3\16\3\17\3\17\3\17\3\20\3\20\3\20\3\20\3\20\3\20") - buf.write("\3\20\3\21\3\21\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22") - buf.write("\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\23\3\23\3\23") - buf.write("\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\24") - buf.write("\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24") - buf.write("\3\24\3\24\3\24\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25") - buf.write("\3\25\3\25\3\25\3\25\3\26\3\26\3\26\3\26\3\26\3\26\3\26") - buf.write("\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\27\3\27\3\27\3\27") - buf.write("\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\30\3\30\3\30") + buf.write("\3\2\3\2\3\2\3\2\3\2\3\2\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3") + buf.write("\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4") + buf.write("\3\4\3\4\3\5\3\5\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3") + buf.write("\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\7\3\7") + buf.write("\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\b\3\b\3\b\3\b\3\b\3") + buf.write("\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\n") + buf.write("\3\n\3\n\3\n\3\n\3\n\3\13\3\13\3\f\3\f\3\f\3\f\3\f\3\f") + buf.write("\3\f\3\r\3\r\3\16\3\16\3\17\3\17\3\17\3\20\3\20\3\20\3") + buf.write("\20\3\20\3\20\3\20\3\21\3\21\3\22\3\22\3\22\3\22\3\22") + buf.write("\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22") + buf.write("\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23") + buf.write("\3\23\3\23\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24") + buf.write("\3\24\3\24\3\24\3\24\3\24\3\24\3\25\3\25\3\25\3\25\3\25") + buf.write("\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\26\3\26\3\26\3\26") + buf.write("\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\27") + buf.write("\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27") buf.write("\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30") - buf.write("\3\30\3\30\3\30\3\30\3\30\3\30\3\31\3\31\3\31\3\31\3\31") - buf.write("\3\31\3\31\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\33\3\33") - buf.write("\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33") - buf.write("\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34") - buf.write("\3\34\3\34\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35") + buf.write("\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\31\3\31") + buf.write("\3\31\3\31\3\31\3\31\3\31\3\32\3\32\3\32\3\32\3\32\3\32") + buf.write("\3\32\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33") + buf.write("\3\33\3\33\3\33\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34") + buf.write("\3\34\3\34\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\35\3\35") buf.write("\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35") - buf.write("\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\37") - buf.write("\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37") - buf.write("\3\37\3\37\3 \3 \3 \3 \3 \3 \3 \3 \3!\3!\3!\3!\3!\3!\3") - buf.write("!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3\"\3\"\3\"\3\"") - buf.write("\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3#\3#\3#\3#\3") - buf.write("#\3#\3#\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3") - buf.write("$\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3") - buf.write("%\3%\3%\3%\3%\3%\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3") - buf.write("&\3&\3&\3&\3&\3&\3\'\3\'\3\'\3\'\3\'\3\'\3\'\3\'\3\'\3") - buf.write("\'\3(\3(\3(\3(\3(\3(\3(\3(\3(\3(\3)\3)\3)\3)\3)\3)\3)") - buf.write("\3)\3)\3)\3)\3)\3)\3)\3)\3)\3*\3*\3*\3*\3*\3*\3+\3+\3") - buf.write("+\3+\3+\3+\3+\3+\3+\3+\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3") - buf.write(",\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3-\3-\3-\3-\3-\3-\3-\3") - buf.write("-\3-\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3") - buf.write(".\3.\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3") - buf.write("/\3/\3/\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3") - buf.write("\60\3\60\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61") - buf.write("\3\61\3\61\3\61\3\61\3\61\3\62\3\62\3\62\3\62\3\62\3\62") + buf.write("\3\35\3\35\3\35\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36") + buf.write("\3\36\3\36\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37") + buf.write("\3\37\3\37\3\37\3\37\3\37\3 \3 \3 \3 \3 \3 \3 \3 \3!\3") + buf.write("!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3") + buf.write("\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"") + buf.write("\3#\3#\3#\3#\3#\3#\3#\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3") + buf.write("$\3$\3$\3$\3$\3$\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3") + buf.write("%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3&\3&\3&\3&\3&\3&\3&\3") + buf.write("&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3\'\3\'\3\'\3\'\3\'\3") + buf.write("\'\3\'\3\'\3\'\3\'\3(\3(\3(\3(\3(\3(\3(\3(\3(\3(\3)\3") + buf.write(")\3)\3)\3)\3)\3)\3)\3)\3)\3)\3)\3)\3)\3)\3)\3*\3*\3*\3") + buf.write("*\3*\3*\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3,\3,\3,\3,\3,\3") + buf.write(",\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3-\3-\3") + buf.write("-\3-\3-\3-\3-\3-\3-\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3") + buf.write(".\3.\3.\3.\3.\3.\3.\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3") + buf.write("/\3/\3/\3/\3/\3/\3/\3/\3\60\3\60\3\60\3\60\3\60\3\60\3") + buf.write("\60\3\60\3\60\3\60\3\60\3\61\3\61\3\61\3\61\3\61\3\61") + buf.write("\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\62\3\62\3\62") buf.write("\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62") - buf.write("\3\62\3\62\3\62\3\62\3\62\3\63\3\63\3\63\3\63\3\63\3\63") - buf.write("\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\64\3\64\3\64") + buf.write("\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\63\3\63\3\63") + buf.write("\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63") buf.write("\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64") - buf.write("\3\64\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65") - buf.write("\3\66\3\66\3\66\3\66\3\66\3\66\3\66\3\66\3\66\3\66\3\66") - buf.write("\3\66\3\67\3\67\3\67\3\67\3\67\3\67\3\67\3\67\3\67\3\67") + buf.write("\3\64\3\64\3\64\3\64\3\65\3\65\3\65\3\65\3\65\3\65\3\65") + buf.write("\3\65\3\65\3\65\3\66\3\66\3\66\3\66\3\66\3\66\3\66\3\66") + buf.write("\3\66\3\66\3\66\3\66\3\67\3\67\3\67\3\67\3\67\3\67\3\67") buf.write("\3\67\3\67\3\67\3\67\3\67\3\67\3\67\3\67\3\67\3\67\3\67") - buf.write("\3\67\38\38\78\u0314\n8\f8\168\u0317\138\39\39\59\u031b") - buf.write("\n9\39\69\u031e\n9\r9\169\u031f\3:\5:\u0323\n:\3:\6:\u0326") - buf.write("\n:\r:\16:\u0327\3:\3:\7:\u032c\n:\f:\16:\u032f\13:\3") - buf.write(":\5:\u0332\n:\3:\3:\6:\u0336\n:\r:\16:\u0337\3:\5:\u033b") - buf.write("\n:\3:\6:\u033e\n:\r:\16:\u033f\3:\5:\u0343\n:\3;\5;\u0346") - buf.write("\n;\3;\6;\u0349\n;\r;\16;\u034a\3<\3<\3<\3=\3=\3=\3=\3") - buf.write(">\3>\3>\3>\7>\u0358\n>\f>\16>\u035b\13>\3>\5>\u035e\n") - buf.write(">\3>\3>\3>\3>\3>\7>\u0365\n>\f>\16>\u0368\13>\3>\3>\5") - buf.write(">\u036c\n>\3>\3>\3?\3?\3?\7?\u0373\n?\f?\16?\u0376\13") - buf.write("?\3?\3?\3@\3@\3\u0366\2A\3\3\5\4\7\5\t\6\13\7\r\b\17\t") - buf.write("\21\n\23\13\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23") - buf.write("%\24\'\25)\26+\27-\30/\31\61\32\63\33\65\34\67\359\36") - buf.write(";\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63") - buf.write("e\64g\65i\66k\67m8o9q\2s:u;w\2y<{=}>\177?\3\2\n\5\2C\\") - buf.write("aac|\6\2\62;C\\aac|\4\2GGgg\4\2--//\n\2$$))^^ddhhpptt") - buf.write("vv\5\2\13\f\17\17\"\"\4\2\f\f\17\17\4\2$$^^\2\u038c\2") - buf.write("\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3") - buf.write("\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2") - buf.write("\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2") - buf.write("\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%") - buf.write("\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2") - buf.write("\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67") - buf.write("\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2") - buf.write("A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2") - buf.write("\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2") - buf.write("\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2") - buf.write("\2\2\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3") - buf.write("\2\2\2\2i\3\2\2\2\2k\3\2\2\2\2m\3\2\2\2\2o\3\2\2\2\2s") - buf.write("\3\2\2\2\2u\3\2\2\2\2y\3\2\2\2\2{\3\2\2\2\2}\3\2\2\2\2") - buf.write("\177\3\2\2\2\3\u0081\3\2\2\2\5\u0096\3\2\2\2\7\u0098\3") - buf.write("\2\2\2\t\u00ad\3\2\2\2\13\u00af\3\2\2\2\r\u00c4\3\2\2") - buf.write("\2\17\u00ce\3\2\2\2\21\u00d3\3\2\2\2\23\u00e0\3\2\2\2") - buf.write("\25\u00e6\3\2\2\2\27\u00e8\3\2\2\2\31\u00ef\3\2\2\2\33") - buf.write("\u00f1\3\2\2\2\35\u00f3\3\2\2\2\37\u00f6\3\2\2\2!\u00fd") - buf.write("\3\2\2\2#\u00ff\3\2\2\2%\u010f\3\2\2\2\'\u011c\3\2\2\2") - buf.write(")\u012b\3\2\2\2+\u0137\3\2\2\2-\u0142\3\2\2\2/\u0151\3") - buf.write("\2\2\2\61\u0165\3\2\2\2\63\u016c\3\2\2\2\65\u0173\3\2") - buf.write("\2\2\67\u0180\3\2\2\29\u018d\3\2\2\2;\u01a1\3\2\2\2=\u01ab") - buf.write("\3\2\2\2?\u01b9\3\2\2\2A\u01c1\3\2\2\2C\u01d4\3\2\2\2") - buf.write("E\u01e2\3\2\2\2G\u01e9\3\2\2\2I\u01f9\3\2\2\2K\u0210\3") - buf.write("\2\2\2M\u0222\3\2\2\2O\u022c\3\2\2\2Q\u0236\3\2\2\2S\u0246") - buf.write("\3\2\2\2U\u024c\3\2\2\2W\u0256\3\2\2\2Y\u026b\3\2\2\2") - buf.write("[\u0274\3\2\2\2]\u0286\3\2\2\2_\u0299\3\2\2\2a\u02a4\3") - buf.write("\2\2\2c\u02b2\3\2\2\2e\u02c8\3\2\2\2g\u02d6\3\2\2\2i\u02e5") - buf.write("\3\2\2\2k\u02ef\3\2\2\2m\u02fb\3\2\2\2o\u0311\3\2\2\2") - buf.write("q\u0318\3\2\2\2s\u0322\3\2\2\2u\u0345\3\2\2\2w\u034c\3") - buf.write("\2\2\2y\u034f\3\2\2\2{\u036b\3\2\2\2}\u036f\3\2\2\2\177") - buf.write("\u0379\3\2\2\2\u0081\u0082\7N\2\2\u0082\u0083\7K\2\2\u0083") - buf.write("\u0084\7P\2\2\u0084\u0085\7a\2\2\u0085\u0086\7f\2\2\u0086") - buf.write("\u0087\7g\2\2\u0087\u0088\7u\2\2\u0088\u0089\7e\2\2\u0089") - buf.write("\u008a\7t\2\2\u008a\u008b\7k\2\2\u008b\u008c\7r\2\2\u008c") - buf.write("\u008d\7v\2\2\u008d\u008e\7k\2\2\u008e\u008f\7q\2\2\u008f") - buf.write("\u0090\7p\2\2\u0090\u0091\7a\2\2\u0091\u0092\7h\2\2\u0092") - buf.write("\u0093\7k\2\2\u0093\u0094\7n\2\2\u0094\u0095\7g\2\2\u0095") - buf.write("\4\3\2\2\2\u0096\u0097\7=\2\2\u0097\6\3\2\2\2\u0098\u0099") - buf.write("\7N\2\2\u0099\u009a\7K\2\2\u009a\u009b\7P\2\2\u009b\u009c") - buf.write("\7a\2\2\u009c\u009d\7r\2\2\u009d\u009e\7t\2\2\u009e\u009f") - buf.write("\7q\2\2\u009f\u00a0\7v\2\2\u00a0\u00a1\7q\2\2\u00a1\u00a2") - buf.write("\7e\2\2\u00a2\u00a3\7q\2\2\u00a3\u00a4\7n\2\2\u00a4\u00a5") - buf.write("\7a\2\2\u00a5\u00a6\7x\2\2\u00a6\u00a7\7g\2\2\u00a7\u00a8") - buf.write("\7t\2\2\u00a8\u00a9\7u\2\2\u00a9\u00aa\7k\2\2\u00aa\u00ab") - buf.write("\7q\2\2\u00ab\u00ac\7p\2\2\u00ac\b\3\2\2\2\u00ad\u00ae") - buf.write("\7?\2\2\u00ae\n\3\2\2\2\u00af\u00b0\7N\2\2\u00b0\u00b1") - buf.write("\7K\2\2\u00b1\u00b2\7P\2\2\u00b2\u00b3\7a\2\2\u00b3\u00b4") - buf.write("\7n\2\2\u00b4\u00b5\7c\2\2\u00b5\u00b6\7p\2\2\u00b6\u00b7") - buf.write("\7i\2\2\u00b7\u00b8\7w\2\2\u00b8\u00b9\7c\2\2\u00b9\u00ba") - buf.write("\7i\2\2\u00ba\u00bb\7g\2\2\u00bb\u00bc\7a\2\2\u00bc\u00bd") - buf.write("\7x\2\2\u00bd\u00be\7g\2\2\u00be\u00bf\7t\2\2\u00bf\u00c0") - buf.write("\7u\2\2\u00c0\u00c1\7k\2\2\u00c1\u00c2\7q\2\2\u00c2\u00c3") - buf.write("\7p\2\2\u00c3\f\3\2\2\2\u00c4\u00c5\7N\2\2\u00c5\u00c6") - buf.write("\7K\2\2\u00c6\u00c7\7P\2\2\u00c7\u00c8\7a\2\2\u00c8\u00c9") - buf.write("\7u\2\2\u00c9\u00ca\7r\2\2\u00ca\u00cb\7g\2\2\u00cb\u00cc") - buf.write("\7g\2\2\u00cc\u00cd\7f\2\2\u00cd\16\3\2\2\2\u00ce\u00cf") - buf.write("\7m\2\2\u00cf\u00d0\7d\2\2\u00d0\u00d1\7r\2\2\u00d1\u00d2") - buf.write("\7u\2\2\u00d2\20\3\2\2\2\u00d3\u00d4\7E\2\2\u00d4\u00d5") - buf.write("\7j\2\2\u00d5\u00d6\7c\2\2\u00d6\u00d7\7p\2\2\u00d7\u00d8") - buf.write("\7p\2\2\u00d8\u00d9\7g\2\2\u00d9\u00da\7n\2\2\u00da\u00db") - buf.write("\7a\2\2\u00db\u00dc\7p\2\2\u00dc\u00dd\7c\2\2\u00dd\u00de") - buf.write("\7o\2\2\u00de\u00df\7g\2\2\u00df\22\3\2\2\2\u00e0\u00e1") - buf.write("\7P\2\2\u00e1\u00e2\7q\2\2\u00e2\u00e3\7f\2\2\u00e3\u00e4") - buf.write("\7g\2\2\u00e4\u00e5\7u\2\2\u00e5\24\3\2\2\2\u00e6\u00e7") - buf.write("\7}\2\2\u00e7\26\3\2\2\2\u00e8\u00e9\7O\2\2\u00e9\u00ea") - buf.write("\7c\2\2\u00ea\u00eb\7u\2\2\u00eb\u00ec\7v\2\2\u00ec\u00ed") - buf.write("\7g\2\2\u00ed\u00ee\7t\2\2\u00ee\30\3\2\2\2\u00ef\u00f0") - buf.write("\7<\2\2\u00f0\32\3\2\2\2\u00f1\u00f2\7.\2\2\u00f2\34\3") - buf.write("\2\2\2\u00f3\u00f4\7o\2\2\u00f4\u00f5\7u\2\2\u00f5\36") - buf.write("\3\2\2\2\u00f6\u00f7\7U\2\2\u00f7\u00f8\7n\2\2\u00f8\u00f9") - buf.write("\7c\2\2\u00f9\u00fa\7x\2\2\u00fa\u00fb\7g\2\2\u00fb\u00fc") - buf.write("\7u\2\2\u00fc \3\2\2\2\u00fd\u00fe\7\177\2\2\u00fe\"\3") - buf.write("\2\2\2\u00ff\u0100\7P\2\2\u0100\u0101\7q\2\2\u0101\u0102") - buf.write("\7f\2\2\u0102\u0103\7g\2\2\u0103\u0104\7a\2\2\u0104\u0105") - buf.write("\7c\2\2\u0105\u0106\7v\2\2\u0106\u0107\7v\2\2\u0107\u0108") - buf.write("\7t\2\2\u0108\u0109\7k\2\2\u0109\u010a\7d\2\2\u010a\u010b") - buf.write("\7w\2\2\u010b\u010c\7v\2\2\u010c\u010d\7g\2\2\u010d\u010e") - buf.write("\7u\2\2\u010e$\3\2\2\2\u010f\u0110\7N\2\2\u0110\u0111") - buf.write("\7K\2\2\u0111\u0112\7P\2\2\u0112\u0113\7a\2\2\u0113\u0114") - buf.write("\7r\2\2\u0114\u0115\7t\2\2\u0115\u0116\7q\2\2\u0116\u0117") - buf.write("\7v\2\2\u0117\u0118\7q\2\2\u0118\u0119\7e\2\2\u0119\u011a") - buf.write("\7q\2\2\u011a\u011b\7n\2\2\u011b&\3\2\2\2\u011c\u011d") - buf.write("\7e\2\2\u011d\u011e\7q\2\2\u011e\u011f\7p\2\2\u011f\u0120") - buf.write("\7h\2\2\u0120\u0121\7k\2\2\u0121\u0122\7i\2\2\u0122\u0123") - buf.write("\7w\2\2\u0123\u0124\7t\2\2\u0124\u0125\7g\2\2\u0125\u0126") - buf.write("\7f\2\2\u0126\u0127\7a\2\2\u0127\u0128\7P\2\2\u0128\u0129") - buf.write("\7C\2\2\u0129\u012a\7F\2\2\u012a(\3\2\2\2\u012b\u012c") - buf.write("\7k\2\2\u012c\u012d\7p\2\2\u012d\u012e\7k\2\2\u012e\u012f") - buf.write("\7v\2\2\u012f\u0130\7k\2\2\u0130\u0131\7c\2\2\u0131\u0132") - buf.write("\7n\2\2\u0132\u0133\7a\2\2\u0133\u0134\7P\2\2\u0134\u0135") - buf.write("\7C\2\2\u0135\u0136\7F\2\2\u0136*\3\2\2\2\u0137\u0138") - buf.write("\7r\2\2\u0138\u0139\7t\2\2\u0139\u013a\7q\2\2\u013a\u013b") - buf.write("\7f\2\2\u013b\u013c\7w\2\2\u013c\u013d\7e\2\2\u013d\u013e") - buf.write("\7v\2\2\u013e\u013f\7a\2\2\u013f\u0140\7k\2\2\u0140\u0141") - buf.write("\7f\2\2\u0141,\3\2\2\2\u0142\u0143\7t\2\2\u0143\u0144") - buf.write("\7g\2\2\u0144\u0145\7u\2\2\u0145\u0146\7r\2\2\u0146\u0147") - buf.write("\7q\2\2\u0147\u0148\7p\2\2\u0148\u0149\7u\2\2\u0149\u014a") - buf.write("\7g\2\2\u014a\u014b\7a\2\2\u014b\u014c\7g\2\2\u014c\u014d") - buf.write("\7t\2\2\u014d\u014e\7t\2\2\u014e\u014f\7q\2\2\u014f\u0150") - buf.write("\7t\2\2\u0150.\3\2\2\2\u0151\u0152\7h\2\2\u0152\u0153") - buf.write("\7c\2\2\u0153\u0154\7w\2\2\u0154\u0155\7n\2\2\u0155\u0156") - buf.write("\7v\2\2\u0156\u0157\7a\2\2\u0157\u0158\7u\2\2\u0158\u0159") - buf.write("\7v\2\2\u0159\u015a\7c\2\2\u015a\u015b\7v\2\2\u015b\u015c") - buf.write("\7g\2\2\u015c\u015d\7a\2\2\u015d\u015e\7u\2\2\u015e\u015f") - buf.write("\7k\2\2\u015f\u0160\7i\2\2\u0160\u0161\7p\2\2\u0161\u0162") - buf.write("\7c\2\2\u0162\u0163\7n\2\2\u0163\u0164\7u\2\2\u0164\60") - buf.write("\3\2\2\2\u0165\u0166\7R\2\2\u0166\u0167\7\64\2\2\u0167") - buf.write("\u0168\7a\2\2\u0168\u0169\7o\2\2\u0169\u016a\7k\2\2\u016a") - buf.write("\u016b\7p\2\2\u016b\62\3\2\2\2\u016c\u016d\7U\2\2\u016d") - buf.write("\u016e\7V\2\2\u016e\u016f\7a\2\2\u016f\u0170\7o\2\2\u0170") - buf.write("\u0171\7k\2\2\u0171\u0172\7p\2\2\u0172\64\3\2\2\2\u0173") - buf.write("\u0174\7P\2\2\u0174\u0175\7a\2\2\u0175\u0176\7C\2\2\u0176") - buf.write("\u0177\7u\2\2\u0177\u0178\7a\2\2\u0178\u0179\7v\2\2\u0179") - buf.write("\u017a\7k\2\2\u017a\u017b\7o\2\2\u017b\u017c\7g\2\2\u017c") - buf.write("\u017d\7q\2\2\u017d\u017e\7w\2\2\u017e\u017f\7v\2\2\u017f") - buf.write("\66\3\2\2\2\u0180\u0181\7P\2\2\u0181\u0182\7a\2\2\u0182") - buf.write("\u0183\7E\2\2\u0183\u0184\7t\2\2\u0184\u0185\7a\2\2\u0185") - buf.write("\u0186\7v\2\2\u0186\u0187\7k\2\2\u0187\u0188\7o\2\2\u0188") - buf.write("\u0189\7g\2\2\u0189\u018a\7q\2\2\u018a\u018b\7w\2\2\u018b") - buf.write("\u018c\7v\2\2\u018c8\3\2\2\2\u018d\u018e\7e\2\2\u018e") - buf.write("\u018f\7q\2\2\u018f\u0190\7p\2\2\u0190\u0191\7h\2\2\u0191") - buf.write("\u0192\7k\2\2\u0192\u0193\7i\2\2\u0193\u0194\7w\2\2\u0194") - buf.write("\u0195\7t\2\2\u0195\u0196\7c\2\2\u0196\u0197\7d\2\2\u0197") - buf.write("\u0198\7n\2\2\u0198\u0199\7g\2\2\u0199\u019a\7a\2\2\u019a") - buf.write("\u019b\7h\2\2\u019b\u019c\7t\2\2\u019c\u019d\7c\2\2\u019d") - buf.write("\u019e\7o\2\2\u019e\u019f\7g\2\2\u019f\u01a0\7u\2\2\u01a0") - buf.write(":\3\2\2\2\u01a1\u01a2\7e\2\2\u01a2\u01a3\7q\2\2\u01a3") - buf.write("\u01a4\7o\2\2\u01a4\u01a5\7r\2\2\u01a5\u01a6\7q\2\2\u01a6") - buf.write("\u01a7\7u\2\2\u01a7\u01a8\7k\2\2\u01a8\u01a9\7v\2\2\u01a9") - buf.write("\u01aa\7g\2\2\u01aa<\3\2\2\2\u01ab\u01ac\7e\2\2\u01ac") - buf.write("\u01ad\7q\2\2\u01ad\u01ae\7p\2\2\u01ae\u01af\7h\2\2\u01af") - buf.write("\u01b0\7k\2\2\u01b0\u01b1\7i\2\2\u01b1\u01b2\7w\2\2\u01b2") - buf.write("\u01b3\7t\2\2\u01b3\u01b4\7c\2\2\u01b4\u01b5\7v\2\2\u01b5") - buf.write("\u01b6\7k\2\2\u01b6\u01b7\7q\2\2\u01b7\u01b8\7p\2\2\u01b8") - buf.write(">\3\2\2\2\u01b9\u01ba\7U\2\2\u01ba\u01bb\7k\2\2\u01bb") - buf.write("\u01bc\7i\2\2\u01bc\u01bd\7p\2\2\u01bd\u01be\7c\2\2\u01be") - buf.write("\u01bf\7n\2\2\u01bf\u01c0\7u\2\2\u01c0@\3\2\2\2\u01c1") - buf.write("\u01c2\7F\2\2\u01c2\u01c3\7k\2\2\u01c3\u01c4\7c\2\2\u01c4") - buf.write("\u01c5\7i\2\2\u01c5\u01c6\7p\2\2\u01c6\u01c7\7q\2\2\u01c7") - buf.write("\u01c8\7u\2\2\u01c8\u01c9\7v\2\2\u01c9\u01ca\7k\2\2\u01ca") - buf.write("\u01cb\7e\2\2\u01cb\u01cc\7a\2\2\u01cc\u01cd\7u\2\2\u01cd") - buf.write("\u01ce\7k\2\2\u01ce\u01cf\7i\2\2\u01cf\u01d0\7p\2\2\u01d0") - buf.write("\u01d1\7c\2\2\u01d1\u01d2\7n\2\2\u01d2\u01d3\7u\2\2\u01d3") - buf.write("B\3\2\2\2\u01d4\u01d5\7U\2\2\u01d5\u01d6\7k\2\2\u01d6") - buf.write("\u01d7\7i\2\2\u01d7\u01d8\7p\2\2\u01d8\u01d9\7c\2\2\u01d9") - buf.write("\u01da\7n\2\2\u01da\u01db\7a\2\2\u01db\u01dc\7i\2\2\u01dc") - buf.write("\u01dd\7t\2\2\u01dd\u01de\7q\2\2\u01de\u01df\7w\2\2\u01df") - buf.write("\u01e0\7r\2\2\u01e0\u01e1\7u\2\2\u01e1D\3\2\2\2\u01e2") - buf.write("\u01e3\7H\2\2\u01e3\u01e4\7t\2\2\u01e4\u01e5\7c\2\2\u01e5") - buf.write("\u01e6\7o\2\2\u01e6\u01e7\7g\2\2\u01e7\u01e8\7u\2\2\u01e8") - buf.write("F\3\2\2\2\u01e9\u01ea\7U\2\2\u01ea\u01eb\7r\2\2\u01eb") - buf.write("\u01ec\7q\2\2\u01ec\u01ed\7t\2\2\u01ed\u01ee\7c\2\2\u01ee") - buf.write("\u01ef\7f\2\2\u01ef\u01f0\7k\2\2\u01f0\u01f1\7e\2\2\u01f1") - buf.write("\u01f2\7a\2\2\u01f2\u01f3\7h\2\2\u01f3\u01f4\7t\2\2\u01f4") - buf.write("\u01f5\7c\2\2\u01f5\u01f6\7o\2\2\u01f6\u01f7\7g\2\2\u01f7") - buf.write("\u01f8\7u\2\2\u01f8H\3\2\2\2\u01f9\u01fa\7G\2\2\u01fa") - buf.write("\u01fb\7x\2\2\u01fb\u01fc\7g\2\2\u01fc\u01fd\7p\2\2\u01fd") - buf.write("\u01fe\7v\2\2\u01fe\u01ff\7a\2\2\u01ff\u0200\7v\2\2\u0200") - buf.write("\u0201\7t\2\2\u0201\u0202\7k\2\2\u0202\u0203\7i\2\2\u0203") - buf.write("\u0204\7i\2\2\u0204\u0205\7g\2\2\u0205\u0206\7t\2\2\u0206") - buf.write("\u0207\7g\2\2\u0207\u0208\7f\2\2\u0208\u0209\7a\2\2\u0209") - buf.write("\u020a\7h\2\2\u020a\u020b\7t\2\2\u020b\u020c\7c\2\2\u020c") - buf.write("\u020d\7o\2\2\u020d\u020e\7g\2\2\u020e\u020f\7u\2\2\u020f") - buf.write("J\3\2\2\2\u0210\u0211\7F\2\2\u0211\u0212\7k\2\2\u0212") - buf.write("\u0213\7c\2\2\u0213\u0214\7i\2\2\u0214\u0215\7p\2\2\u0215") - buf.write("\u0216\7q\2\2\u0216\u0217\7u\2\2\u0217\u0218\7v\2\2\u0218") - buf.write("\u0219\7k\2\2\u0219\u021a\7e\2\2\u021a\u021b\7a\2\2\u021b") - buf.write("\u021c\7h\2\2\u021c\u021d\7t\2\2\u021d\u021e\7c\2\2\u021e") - buf.write("\u021f\7o\2\2\u021f\u0220\7g\2\2\u0220\u0221\7u\2\2\u0221") - buf.write("L\3\2\2\2\u0222\u0223\7O\2\2\u0223\u0224\7c\2\2\u0224") - buf.write("\u0225\7u\2\2\u0225\u0226\7v\2\2\u0226\u0227\7g\2\2\u0227") - buf.write("\u0228\7t\2\2\u0228\u0229\7T\2\2\u0229\u022a\7g\2\2\u022a") - buf.write("\u022b\7s\2\2\u022bN\3\2\2\2\u022c\u022d\7U\2\2\u022d") - buf.write("\u022e\7n\2\2\u022e\u022f\7c\2\2\u022f\u0230\7x\2\2\u0230") - buf.write("\u0231\7g\2\2\u0231\u0232\7T\2\2\u0232\u0233\7g\2\2\u0233") - buf.write("\u0234\7u\2\2\u0234\u0235\7r\2\2\u0235P\3\2\2\2\u0236") - buf.write("\u0237\7U\2\2\u0237\u0238\7e\2\2\u0238\u0239\7j\2\2\u0239") - buf.write("\u023a\7g\2\2\u023a\u023b\7f\2\2\u023b\u023c\7w\2\2\u023c") - buf.write("\u023d\7n\2\2\u023d\u023e\7g\2\2\u023e\u023f\7a\2\2\u023f") - buf.write("\u0240\7v\2\2\u0240\u0241\7c\2\2\u0241\u0242\7d\2\2\u0242") - buf.write("\u0243\7n\2\2\u0243\u0244\7g\2\2\u0244\u0245\7u\2\2\u0245") - buf.write("R\3\2\2\2\u0246\u0247\7f\2\2\u0247\u0248\7g\2\2\u0248") - buf.write("\u0249\7n\2\2\u0249\u024a\7c\2\2\u024a\u024b\7{\2\2\u024b") - buf.write("T\3\2\2\2\u024c\u024d\7C\2\2\u024d\u024e\7u\2\2\u024e") - buf.write("\u024f\7u\2\2\u024f\u0250\7k\2\2\u0250\u0251\7i\2\2\u0251") - buf.write("\u0252\7p\2\2\u0252\u0253\7P\2\2\u0253\u0254\7C\2\2\u0254") - buf.write("\u0255\7F\2\2\u0255V\3\2\2\2\u0256\u0257\7E\2\2\u0257") - buf.write("\u0258\7q\2\2\u0258\u0259\7p\2\2\u0259\u025a\7f\2\2\u025a") - buf.write("\u025b\7k\2\2\u025b\u025c\7v\2\2\u025c\u025d\7k\2\2\u025d") - buf.write("\u025e\7q\2\2\u025e\u025f\7p\2\2\u025f\u0260\7c\2\2\u0260") - buf.write("\u0261\7n\2\2\u0261\u0262\7E\2\2\u0262\u0263\7j\2\2\u0263") - buf.write("\u0264\7c\2\2\u0264\u0265\7p\2\2\u0265\u0266\7i\2\2\u0266") - buf.write("\u0267\7g\2\2\u0267\u0268\7P\2\2\u0268\u0269\7C\2\2\u0269") - buf.write("\u026a\7F\2\2\u026aX\3\2\2\2\u026b\u026c\7F\2\2\u026c") - buf.write("\u026d\7c\2\2\u026d\u026e\7v\2\2\u026e\u026f\7c\2\2\u026f") - buf.write("\u0270\7F\2\2\u0270\u0271\7w\2\2\u0271\u0272\7o\2\2\u0272") - buf.write("\u0273\7r\2\2\u0273Z\3\2\2\2\u0274\u0275\7U\2\2\u0275") - buf.write("\u0276\7c\2\2\u0276\u0277\7x\2\2\u0277\u0278\7g\2\2\u0278") - buf.write("\u0279\7E\2\2\u0279\u027a\7q\2\2\u027a\u027b\7p\2\2\u027b") - buf.write("\u027c\7h\2\2\u027c\u027d\7k\2\2\u027d\u027e\7i\2\2\u027e") - buf.write("\u027f\7w\2\2\u027f\u0280\7t\2\2\u0280\u0281\7c\2\2\u0281") - buf.write("\u0282\7v\2\2\u0282\u0283\7k\2\2\u0283\u0284\7q\2\2\u0284") - buf.write("\u0285\7p\2\2\u0285\\\3\2\2\2\u0286\u0287\7C\2\2\u0287") - buf.write("\u0288\7u\2\2\u0288\u0289\7u\2\2\u0289\u028a\7k\2\2\u028a") - buf.write("\u028b\7i\2\2\u028b\u028c\7p\2\2\u028c\u028d\7H\2\2\u028d") - buf.write("\u028e\7t\2\2\u028e\u028f\7c\2\2\u028f\u0290\7o\2\2\u0290") - buf.write("\u0291\7g\2\2\u0291\u0292\7K\2\2\u0292\u0293\7f\2\2\u0293") - buf.write("\u0294\7T\2\2\u0294\u0295\7c\2\2\u0295\u0296\7p\2\2\u0296") - buf.write("\u0297\7i\2\2\u0297\u0298\7g\2\2\u0298^\3\2\2\2\u0299") - buf.write("\u029a\7H\2\2\u029a\u029b\7t\2\2\u029b\u029c\7g\2\2\u029c") - buf.write("\u029d\7g\2\2\u029d\u029e\7H\2\2\u029e\u029f\7q\2\2\u029f") - buf.write("\u02a0\7t\2\2\u02a0\u02a1\7o\2\2\u02a1\u02a2\7c\2\2\u02a2") - buf.write("\u02a3\7v\2\2\u02a3`\3\2\2\2\u02a4\u02a5\7C\2\2\u02a5") - buf.write("\u02a6\7u\2\2\u02a6\u02a7\7u\2\2\u02a7\u02a8\7k\2\2\u02a8") - buf.write("\u02a9\7i\2\2\u02a9\u02aa\7p\2\2\u02aa\u02ab\7H\2\2\u02ab") - buf.write("\u02ac\7t\2\2\u02ac\u02ad\7c\2\2\u02ad\u02ae\7o\2\2\u02ae") - buf.write("\u02af\7g\2\2\u02af\u02b0\7K\2\2\u02b0\u02b1\7f\2\2\u02b1") - buf.write("b\3\2\2\2\u02b2\u02b3\7U\2\2\u02b3\u02b4\7k\2\2\u02b4") - buf.write("\u02b5\7i\2\2\u02b5\u02b6\7p\2\2\u02b6\u02b7\7c\2\2\u02b7") - buf.write("\u02b8\7n\2\2\u02b8\u02b9\7a\2\2\u02b9\u02ba\7g\2\2\u02ba") - buf.write("\u02bb\7p\2\2\u02bb\u02bc\7e\2\2\u02bc\u02bd\7q\2\2\u02bd") - buf.write("\u02be\7f\2\2\u02be\u02bf\7k\2\2\u02bf\u02c0\7p\2\2\u02c0") - buf.write("\u02c1\7i\2\2\u02c1\u02c2\7a\2\2\u02c2\u02c3\7v\2\2\u02c3") - buf.write("\u02c4\7{\2\2\u02c4\u02c5\7r\2\2\u02c5\u02c6\7g\2\2\u02c6") - buf.write("\u02c7\7u\2\2\u02c7d\3\2\2\2\u02c8\u02c9\7n\2\2\u02c9") - buf.write("\u02ca\7q\2\2\u02ca\u02cb\7i\2\2\u02cb\u02cc\7k\2\2\u02cc") - buf.write("\u02cd\7e\2\2\u02cd\u02ce\7c\2\2\u02ce\u02cf\7n\2\2\u02cf") - buf.write("\u02d0\7a\2\2\u02d0\u02d1\7x\2\2\u02d1\u02d2\7c\2\2\u02d2") - buf.write("\u02d3\7n\2\2\u02d3\u02d4\7w\2\2\u02d4\u02d5\7g\2\2\u02d5") - buf.write("f\3\2\2\2\u02d6\u02d7\7r\2\2\u02d7\u02d8\7j\2\2\u02d8") - buf.write("\u02d9\7{\2\2\u02d9\u02da\7u\2\2\u02da\u02db\7k\2\2\u02db") - buf.write("\u02dc\7e\2\2\u02dc\u02dd\7c\2\2\u02dd\u02de\7n\2\2\u02de") - buf.write("\u02df\7a\2\2\u02df\u02e0\7x\2\2\u02e0\u02e1\7c\2\2\u02e1") - buf.write("\u02e2\7n\2\2\u02e2\u02e3\7w\2\2\u02e3\u02e4\7g\2\2\u02e4") - buf.write("h\3\2\2\2\u02e5\u02e6\7d\2\2\u02e6\u02e7\7e\2\2\u02e7") - buf.write("\u02e8\7f\2\2\u02e8\u02e9\7a\2\2\u02e9\u02ea\7x\2\2\u02ea") - buf.write("\u02eb\7c\2\2\u02eb\u02ec\7n\2\2\u02ec\u02ed\7w\2\2\u02ed") - buf.write("\u02ee\7g\2\2\u02eej\3\2\2\2\u02ef\u02f0\7c\2\2\u02f0") - buf.write("\u02f1\7u\2\2\u02f1\u02f2\7e\2\2\u02f2\u02f3\7k\2\2\u02f3") - buf.write("\u02f4\7k\2\2\u02f4\u02f5\7a\2\2\u02f5\u02f6\7x\2\2\u02f6") - buf.write("\u02f7\7c\2\2\u02f7\u02f8\7n\2\2\u02f8\u02f9\7w\2\2\u02f9") - buf.write("\u02fa\7g\2\2\u02fal\3\2\2\2\u02fb\u02fc\7U\2\2\u02fc") - buf.write("\u02fd\7k\2\2\u02fd\u02fe\7i\2\2\u02fe\u02ff\7p\2\2\u02ff") - buf.write("\u0300\7c\2\2\u0300\u0301\7n\2\2\u0301\u0302\7a\2\2\u0302") - buf.write("\u0303\7t\2\2\u0303\u0304\7g\2\2\u0304\u0305\7r\2\2\u0305") - buf.write("\u0306\7t\2\2\u0306\u0307\7g\2\2\u0307\u0308\7u\2\2\u0308") - buf.write("\u0309\7g\2\2\u0309\u030a\7p\2\2\u030a\u030b\7v\2\2\u030b") - buf.write("\u030c\7c\2\2\u030c\u030d\7v\2\2\u030d\u030e\7k\2\2\u030e") - buf.write("\u030f\7q\2\2\u030f\u0310\7p\2\2\u0310n\3\2\2\2\u0311") - buf.write("\u0315\t\2\2\2\u0312\u0314\t\3\2\2\u0313\u0312\3\2\2\2") - buf.write("\u0314\u0317\3\2\2\2\u0315\u0313\3\2\2\2\u0315\u0316\3") - buf.write("\2\2\2\u0316p\3\2\2\2\u0317\u0315\3\2\2\2\u0318\u031a") - buf.write("\t\4\2\2\u0319\u031b\t\5\2\2\u031a\u0319\3\2\2\2\u031a") - buf.write("\u031b\3\2\2\2\u031b\u031d\3\2\2\2\u031c\u031e\4\62;\2") - buf.write("\u031d\u031c\3\2\2\2\u031e\u031f\3\2\2\2\u031f\u031d\3") - buf.write("\2\2\2\u031f\u0320\3\2\2\2\u0320r\3\2\2\2\u0321\u0323") - buf.write("\5\177@\2\u0322\u0321\3\2\2\2\u0322\u0323\3\2\2\2\u0323") - buf.write("\u0342\3\2\2\2\u0324\u0326\4\62;\2\u0325\u0324\3\2\2\2") - buf.write("\u0326\u0327\3\2\2\2\u0327\u0325\3\2\2\2\u0327\u0328\3") - buf.write("\2\2\2\u0328\u0329\3\2\2\2\u0329\u032d\7\60\2\2\u032a") - buf.write("\u032c\4\62;\2\u032b\u032a\3\2\2\2\u032c\u032f\3\2\2\2") - buf.write("\u032d\u032b\3\2\2\2\u032d\u032e\3\2\2\2\u032e\u0331\3") - buf.write("\2\2\2\u032f\u032d\3\2\2\2\u0330\u0332\5q9\2\u0331\u0330") - buf.write("\3\2\2\2\u0331\u0332\3\2\2\2\u0332\u0343\3\2\2\2\u0333") - buf.write("\u0335\7\60\2\2\u0334\u0336\4\62;\2\u0335\u0334\3\2\2") - buf.write("\2\u0336\u0337\3\2\2\2\u0337\u0335\3\2\2\2\u0337\u0338") - buf.write("\3\2\2\2\u0338\u033a\3\2\2\2\u0339\u033b\5q9\2\u033a\u0339") - buf.write("\3\2\2\2\u033a\u033b\3\2\2\2\u033b\u0343\3\2\2\2\u033c") - buf.write("\u033e\4\62;\2\u033d\u033c\3\2\2\2\u033e\u033f\3\2\2\2") - buf.write("\u033f\u033d\3\2\2\2\u033f\u0340\3\2\2\2\u0340\u0341\3") - buf.write("\2\2\2\u0341\u0343\5q9\2\u0342\u0325\3\2\2\2\u0342\u0333") - buf.write("\3\2\2\2\u0342\u033d\3\2\2\2\u0343t\3\2\2\2\u0344\u0346") - buf.write("\5\177@\2\u0345\u0344\3\2\2\2\u0345\u0346\3\2\2\2\u0346") - buf.write("\u0348\3\2\2\2\u0347\u0349\4\62;\2\u0348\u0347\3\2\2\2") - buf.write("\u0349\u034a\3\2\2\2\u034a\u0348\3\2\2\2\u034a\u034b\3") - buf.write("\2\2\2\u034bv\3\2\2\2\u034c\u034d\7^\2\2\u034d\u034e\t") - buf.write("\6\2\2\u034ex\3\2\2\2\u034f\u0350\t\7\2\2\u0350\u0351") - buf.write("\3\2\2\2\u0351\u0352\b=\2\2\u0352z\3\2\2\2\u0353\u0354") - buf.write("\7\61\2\2\u0354\u0355\7\61\2\2\u0355\u0359\3\2\2\2\u0356") - buf.write("\u0358\n\b\2\2\u0357\u0356\3\2\2\2\u0358\u035b\3\2\2\2") - buf.write("\u0359\u0357\3\2\2\2\u0359\u035a\3\2\2\2\u035a\u035d\3") - buf.write("\2\2\2\u035b\u0359\3\2\2\2\u035c\u035e\7\17\2\2\u035d") - buf.write("\u035c\3\2\2\2\u035d\u035e\3\2\2\2\u035e\u035f\3\2\2\2") - buf.write("\u035f\u036c\7\f\2\2\u0360\u0361\7\61\2\2\u0361\u0362") - buf.write("\7,\2\2\u0362\u0366\3\2\2\2\u0363\u0365\13\2\2\2\u0364") - buf.write("\u0363\3\2\2\2\u0365\u0368\3\2\2\2\u0366\u0367\3\2\2\2") - buf.write("\u0366\u0364\3\2\2\2\u0367\u0369\3\2\2\2\u0368\u0366\3") - buf.write("\2\2\2\u0369\u036a\7,\2\2\u036a\u036c\7\61\2\2\u036b\u0353") - buf.write("\3\2\2\2\u036b\u0360\3\2\2\2\u036c\u036d\3\2\2\2\u036d") - buf.write("\u036e\b>\2\2\u036e|\3\2\2\2\u036f\u0374\7$\2\2\u0370") - buf.write("\u0373\5w<\2\u0371\u0373\n\t\2\2\u0372\u0370\3\2\2\2\u0372") - buf.write("\u0371\3\2\2\2\u0373\u0376\3\2\2\2\u0374\u0372\3\2\2\2") - buf.write("\u0374\u0375\3\2\2\2\u0375\u0377\3\2\2\2\u0376\u0374\3") - buf.write("\2\2\2\u0377\u0378\7$\2\2\u0378~\3\2\2\2\u0379\u037a\t") - buf.write("\5\2\2\u037a\u0080\3\2\2\2\26\2\u0315\u031a\u031f\u0322") - buf.write("\u0327\u032d\u0331\u0337\u033a\u033f\u0342\u0345\u034a") - buf.write("\u0359\u035d\u0366\u036b\u0372\u0374\3\2\3\2") + buf.write("\3\67\3\67\3\67\3\67\38\38\78\u0318\n8\f8\168\u031b\13") + buf.write("8\39\39\59\u031f\n9\39\69\u0322\n9\r9\169\u0323\3:\5:") + buf.write("\u0327\n:\3:\6:\u032a\n:\r:\16:\u032b\3:\3:\7:\u0330\n") + buf.write(":\f:\16:\u0333\13:\3:\5:\u0336\n:\3:\3:\6:\u033a\n:\r") + buf.write(":\16:\u033b\3:\5:\u033f\n:\3:\6:\u0342\n:\r:\16:\u0343") + buf.write("\3:\5:\u0347\n:\3;\5;\u034a\n;\3;\6;\u034d\n;\r;\16;\u034e") + buf.write("\3<\3<\3<\6<\u0354\n<\r<\16<\u0355\3=\3=\3>\3>\3>\3?\3") + buf.write("?\3?\3?\3@\3@\3@\3@\7@\u0365\n@\f@\16@\u0368\13@\3@\5") + buf.write("@\u036b\n@\3@\3@\3@\3@\3@\7@\u0372\n@\f@\16@\u0375\13") + buf.write("@\3@\3@\5@\u0379\n@\3@\3@\3A\3A\3A\7A\u0380\nA\fA\16A") + buf.write("\u0383\13A\3A\3A\3B\3B\3\u0373\2C\3\3\5\4\7\5\t\6\13\7") + buf.write("\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33\17\35\20\37\21") + buf.write("!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33\65\34\67") + buf.write("\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61") + buf.write("a\62c\63e\64g\65i\66k\67m8o9q\2s:u;w\u0081") + buf.write("?\u0083@\3\2\f\5\2C\\aac|\6\2\62;C\\aac|\4\2GGgg\4\2-") + buf.write("-//\4\2ZZzz\5\2\62;CHch\n\2$$))^^ddhhppttvv\5\2\13\f\17") + buf.write("\17\"\"\4\2\f\f\17\17\4\2$$^^\2\u0399\2\3\3\2\2\2\2\5") + buf.write("\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2") + buf.write("\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2") + buf.write("\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2") + buf.write("\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2") + buf.write("\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61") + buf.write("\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2") + buf.write("\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3") + buf.write("\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M") + buf.write("\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2") + buf.write("W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2") + buf.write("\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2") + buf.write("\2\2k\3\2\2\2\2m\3\2\2\2\2o\3\2\2\2\2s\3\2\2\2\2u\3\2") + buf.write("\2\2\2w\3\2\2\2\2}\3\2\2\2\2\177\3\2\2\2\2\u0081\3\2\2") + buf.write("\2\2\u0083\3\2\2\2\3\u0085\3\2\2\2\5\u009a\3\2\2\2\7\u009c") + buf.write("\3\2\2\2\t\u00b1\3\2\2\2\13\u00b3\3\2\2\2\r\u00c8\3\2") + buf.write("\2\2\17\u00d2\3\2\2\2\21\u00d7\3\2\2\2\23\u00e4\3\2\2") + buf.write("\2\25\u00ea\3\2\2\2\27\u00ec\3\2\2\2\31\u00f3\3\2\2\2") + buf.write("\33\u00f5\3\2\2\2\35\u00f7\3\2\2\2\37\u00fa\3\2\2\2!\u0101") + buf.write("\3\2\2\2#\u0103\3\2\2\2%\u0113\3\2\2\2\'\u0120\3\2\2\2") + buf.write(")\u012f\3\2\2\2+\u013b\3\2\2\2-\u0146\3\2\2\2/\u0155\3") + buf.write("\2\2\2\61\u0169\3\2\2\2\63\u0170\3\2\2\2\65\u0177\3\2") + buf.write("\2\2\67\u0184\3\2\2\29\u0191\3\2\2\2;\u01a5\3\2\2\2=\u01af") + buf.write("\3\2\2\2?\u01bd\3\2\2\2A\u01c5\3\2\2\2C\u01d8\3\2\2\2") + buf.write("E\u01e6\3\2\2\2G\u01ed\3\2\2\2I\u01fd\3\2\2\2K\u0214\3") + buf.write("\2\2\2M\u0226\3\2\2\2O\u0230\3\2\2\2Q\u023a\3\2\2\2S\u024a") + buf.write("\3\2\2\2U\u0250\3\2\2\2W\u025a\3\2\2\2Y\u026f\3\2\2\2") + buf.write("[\u0278\3\2\2\2]\u028a\3\2\2\2_\u029d\3\2\2\2a\u02a8\3") + buf.write("\2\2\2c\u02b6\3\2\2\2e\u02cc\3\2\2\2g\u02da\3\2\2\2i\u02e9") + buf.write("\3\2\2\2k\u02f3\3\2\2\2m\u02ff\3\2\2\2o\u0315\3\2\2\2") + buf.write("q\u031c\3\2\2\2s\u0326\3\2\2\2u\u0349\3\2\2\2w\u0350\3") + buf.write("\2\2\2y\u0357\3\2\2\2{\u0359\3\2\2\2}\u035c\3\2\2\2\177") + buf.write("\u0378\3\2\2\2\u0081\u037c\3\2\2\2\u0083\u0386\3\2\2\2") + buf.write("\u0085\u0086\7N\2\2\u0086\u0087\7K\2\2\u0087\u0088\7P") + buf.write("\2\2\u0088\u0089\7a\2\2\u0089\u008a\7f\2\2\u008a\u008b") + buf.write("\7g\2\2\u008b\u008c\7u\2\2\u008c\u008d\7e\2\2\u008d\u008e") + buf.write("\7t\2\2\u008e\u008f\7k\2\2\u008f\u0090\7r\2\2\u0090\u0091") + buf.write("\7v\2\2\u0091\u0092\7k\2\2\u0092\u0093\7q\2\2\u0093\u0094") + buf.write("\7p\2\2\u0094\u0095\7a\2\2\u0095\u0096\7h\2\2\u0096\u0097") + buf.write("\7k\2\2\u0097\u0098\7n\2\2\u0098\u0099\7g\2\2\u0099\4") + buf.write("\3\2\2\2\u009a\u009b\7=\2\2\u009b\6\3\2\2\2\u009c\u009d") + buf.write("\7N\2\2\u009d\u009e\7K\2\2\u009e\u009f\7P\2\2\u009f\u00a0") + buf.write("\7a\2\2\u00a0\u00a1\7r\2\2\u00a1\u00a2\7t\2\2\u00a2\u00a3") + buf.write("\7q\2\2\u00a3\u00a4\7v\2\2\u00a4\u00a5\7q\2\2\u00a5\u00a6") + buf.write("\7e\2\2\u00a6\u00a7\7q\2\2\u00a7\u00a8\7n\2\2\u00a8\u00a9") + buf.write("\7a\2\2\u00a9\u00aa\7x\2\2\u00aa\u00ab\7g\2\2\u00ab\u00ac") + buf.write("\7t\2\2\u00ac\u00ad\7u\2\2\u00ad\u00ae\7k\2\2\u00ae\u00af") + buf.write("\7q\2\2\u00af\u00b0\7p\2\2\u00b0\b\3\2\2\2\u00b1\u00b2") + buf.write("\7?\2\2\u00b2\n\3\2\2\2\u00b3\u00b4\7N\2\2\u00b4\u00b5") + buf.write("\7K\2\2\u00b5\u00b6\7P\2\2\u00b6\u00b7\7a\2\2\u00b7\u00b8") + buf.write("\7n\2\2\u00b8\u00b9\7c\2\2\u00b9\u00ba\7p\2\2\u00ba\u00bb") + buf.write("\7i\2\2\u00bb\u00bc\7w\2\2\u00bc\u00bd\7c\2\2\u00bd\u00be") + buf.write("\7i\2\2\u00be\u00bf\7g\2\2\u00bf\u00c0\7a\2\2\u00c0\u00c1") + buf.write("\7x\2\2\u00c1\u00c2\7g\2\2\u00c2\u00c3\7t\2\2\u00c3\u00c4") + buf.write("\7u\2\2\u00c4\u00c5\7k\2\2\u00c5\u00c6\7q\2\2\u00c6\u00c7") + buf.write("\7p\2\2\u00c7\f\3\2\2\2\u00c8\u00c9\7N\2\2\u00c9\u00ca") + buf.write("\7K\2\2\u00ca\u00cb\7P\2\2\u00cb\u00cc\7a\2\2\u00cc\u00cd") + buf.write("\7u\2\2\u00cd\u00ce\7r\2\2\u00ce\u00cf\7g\2\2\u00cf\u00d0") + buf.write("\7g\2\2\u00d0\u00d1\7f\2\2\u00d1\16\3\2\2\2\u00d2\u00d3") + buf.write("\7m\2\2\u00d3\u00d4\7d\2\2\u00d4\u00d5\7r\2\2\u00d5\u00d6") + buf.write("\7u\2\2\u00d6\20\3\2\2\2\u00d7\u00d8\7E\2\2\u00d8\u00d9") + buf.write("\7j\2\2\u00d9\u00da\7c\2\2\u00da\u00db\7p\2\2\u00db\u00dc") + buf.write("\7p\2\2\u00dc\u00dd\7g\2\2\u00dd\u00de\7n\2\2\u00de\u00df") + buf.write("\7a\2\2\u00df\u00e0\7p\2\2\u00e0\u00e1\7c\2\2\u00e1\u00e2") + buf.write("\7o\2\2\u00e2\u00e3\7g\2\2\u00e3\22\3\2\2\2\u00e4\u00e5") + buf.write("\7P\2\2\u00e5\u00e6\7q\2\2\u00e6\u00e7\7f\2\2\u00e7\u00e8") + buf.write("\7g\2\2\u00e8\u00e9\7u\2\2\u00e9\24\3\2\2\2\u00ea\u00eb") + buf.write("\7}\2\2\u00eb\26\3\2\2\2\u00ec\u00ed\7O\2\2\u00ed\u00ee") + buf.write("\7c\2\2\u00ee\u00ef\7u\2\2\u00ef\u00f0\7v\2\2\u00f0\u00f1") + buf.write("\7g\2\2\u00f1\u00f2\7t\2\2\u00f2\30\3\2\2\2\u00f3\u00f4") + buf.write("\7<\2\2\u00f4\32\3\2\2\2\u00f5\u00f6\7.\2\2\u00f6\34\3") + buf.write("\2\2\2\u00f7\u00f8\7o\2\2\u00f8\u00f9\7u\2\2\u00f9\36") + buf.write("\3\2\2\2\u00fa\u00fb\7U\2\2\u00fb\u00fc\7n\2\2\u00fc\u00fd") + buf.write("\7c\2\2\u00fd\u00fe\7x\2\2\u00fe\u00ff\7g\2\2\u00ff\u0100") + buf.write("\7u\2\2\u0100 \3\2\2\2\u0101\u0102\7\177\2\2\u0102\"\3") + buf.write("\2\2\2\u0103\u0104\7P\2\2\u0104\u0105\7q\2\2\u0105\u0106") + buf.write("\7f\2\2\u0106\u0107\7g\2\2\u0107\u0108\7a\2\2\u0108\u0109") + buf.write("\7c\2\2\u0109\u010a\7v\2\2\u010a\u010b\7v\2\2\u010b\u010c") + buf.write("\7t\2\2\u010c\u010d\7k\2\2\u010d\u010e\7d\2\2\u010e\u010f") + buf.write("\7w\2\2\u010f\u0110\7v\2\2\u0110\u0111\7g\2\2\u0111\u0112") + buf.write("\7u\2\2\u0112$\3\2\2\2\u0113\u0114\7N\2\2\u0114\u0115") + buf.write("\7K\2\2\u0115\u0116\7P\2\2\u0116\u0117\7a\2\2\u0117\u0118") + buf.write("\7r\2\2\u0118\u0119\7t\2\2\u0119\u011a\7q\2\2\u011a\u011b") + buf.write("\7v\2\2\u011b\u011c\7q\2\2\u011c\u011d\7e\2\2\u011d\u011e") + buf.write("\7q\2\2\u011e\u011f\7n\2\2\u011f&\3\2\2\2\u0120\u0121") + buf.write("\7e\2\2\u0121\u0122\7q\2\2\u0122\u0123\7p\2\2\u0123\u0124") + buf.write("\7h\2\2\u0124\u0125\7k\2\2\u0125\u0126\7i\2\2\u0126\u0127") + buf.write("\7w\2\2\u0127\u0128\7t\2\2\u0128\u0129\7g\2\2\u0129\u012a") + buf.write("\7f\2\2\u012a\u012b\7a\2\2\u012b\u012c\7P\2\2\u012c\u012d") + buf.write("\7C\2\2\u012d\u012e\7F\2\2\u012e(\3\2\2\2\u012f\u0130") + buf.write("\7k\2\2\u0130\u0131\7p\2\2\u0131\u0132\7k\2\2\u0132\u0133") + buf.write("\7v\2\2\u0133\u0134\7k\2\2\u0134\u0135\7c\2\2\u0135\u0136") + buf.write("\7n\2\2\u0136\u0137\7a\2\2\u0137\u0138\7P\2\2\u0138\u0139") + buf.write("\7C\2\2\u0139\u013a\7F\2\2\u013a*\3\2\2\2\u013b\u013c") + buf.write("\7r\2\2\u013c\u013d\7t\2\2\u013d\u013e\7q\2\2\u013e\u013f") + buf.write("\7f\2\2\u013f\u0140\7w\2\2\u0140\u0141\7e\2\2\u0141\u0142") + buf.write("\7v\2\2\u0142\u0143\7a\2\2\u0143\u0144\7k\2\2\u0144\u0145") + buf.write("\7f\2\2\u0145,\3\2\2\2\u0146\u0147\7t\2\2\u0147\u0148") + buf.write("\7g\2\2\u0148\u0149\7u\2\2\u0149\u014a\7r\2\2\u014a\u014b") + buf.write("\7q\2\2\u014b\u014c\7p\2\2\u014c\u014d\7u\2\2\u014d\u014e") + buf.write("\7g\2\2\u014e\u014f\7a\2\2\u014f\u0150\7g\2\2\u0150\u0151") + buf.write("\7t\2\2\u0151\u0152\7t\2\2\u0152\u0153\7q\2\2\u0153\u0154") + buf.write("\7t\2\2\u0154.\3\2\2\2\u0155\u0156\7h\2\2\u0156\u0157") + buf.write("\7c\2\2\u0157\u0158\7w\2\2\u0158\u0159\7n\2\2\u0159\u015a") + buf.write("\7v\2\2\u015a\u015b\7a\2\2\u015b\u015c\7u\2\2\u015c\u015d") + buf.write("\7v\2\2\u015d\u015e\7c\2\2\u015e\u015f\7v\2\2\u015f\u0160") + buf.write("\7g\2\2\u0160\u0161\7a\2\2\u0161\u0162\7u\2\2\u0162\u0163") + buf.write("\7k\2\2\u0163\u0164\7i\2\2\u0164\u0165\7p\2\2\u0165\u0166") + buf.write("\7c\2\2\u0166\u0167\7n\2\2\u0167\u0168\7u\2\2\u0168\60") + buf.write("\3\2\2\2\u0169\u016a\7R\2\2\u016a\u016b\7\64\2\2\u016b") + buf.write("\u016c\7a\2\2\u016c\u016d\7o\2\2\u016d\u016e\7k\2\2\u016e") + buf.write("\u016f\7p\2\2\u016f\62\3\2\2\2\u0170\u0171\7U\2\2\u0171") + buf.write("\u0172\7V\2\2\u0172\u0173\7a\2\2\u0173\u0174\7o\2\2\u0174") + buf.write("\u0175\7k\2\2\u0175\u0176\7p\2\2\u0176\64\3\2\2\2\u0177") + buf.write("\u0178\7P\2\2\u0178\u0179\7a\2\2\u0179\u017a\7C\2\2\u017a") + buf.write("\u017b\7u\2\2\u017b\u017c\7a\2\2\u017c\u017d\7v\2\2\u017d") + buf.write("\u017e\7k\2\2\u017e\u017f\7o\2\2\u017f\u0180\7g\2\2\u0180") + buf.write("\u0181\7q\2\2\u0181\u0182\7w\2\2\u0182\u0183\7v\2\2\u0183") + buf.write("\66\3\2\2\2\u0184\u0185\7P\2\2\u0185\u0186\7a\2\2\u0186") + buf.write("\u0187\7E\2\2\u0187\u0188\7t\2\2\u0188\u0189\7a\2\2\u0189") + buf.write("\u018a\7v\2\2\u018a\u018b\7k\2\2\u018b\u018c\7o\2\2\u018c") + buf.write("\u018d\7g\2\2\u018d\u018e\7q\2\2\u018e\u018f\7w\2\2\u018f") + buf.write("\u0190\7v\2\2\u01908\3\2\2\2\u0191\u0192\7e\2\2\u0192") + buf.write("\u0193\7q\2\2\u0193\u0194\7p\2\2\u0194\u0195\7h\2\2\u0195") + buf.write("\u0196\7k\2\2\u0196\u0197\7i\2\2\u0197\u0198\7w\2\2\u0198") + buf.write("\u0199\7t\2\2\u0199\u019a\7c\2\2\u019a\u019b\7d\2\2\u019b") + buf.write("\u019c\7n\2\2\u019c\u019d\7g\2\2\u019d\u019e\7a\2\2\u019e") + buf.write("\u019f\7h\2\2\u019f\u01a0\7t\2\2\u01a0\u01a1\7c\2\2\u01a1") + buf.write("\u01a2\7o\2\2\u01a2\u01a3\7g\2\2\u01a3\u01a4\7u\2\2\u01a4") + buf.write(":\3\2\2\2\u01a5\u01a6\7e\2\2\u01a6\u01a7\7q\2\2\u01a7") + buf.write("\u01a8\7o\2\2\u01a8\u01a9\7r\2\2\u01a9\u01aa\7q\2\2\u01aa") + buf.write("\u01ab\7u\2\2\u01ab\u01ac\7k\2\2\u01ac\u01ad\7v\2\2\u01ad") + buf.write("\u01ae\7g\2\2\u01ae<\3\2\2\2\u01af\u01b0\7e\2\2\u01b0") + buf.write("\u01b1\7q\2\2\u01b1\u01b2\7p\2\2\u01b2\u01b3\7h\2\2\u01b3") + buf.write("\u01b4\7k\2\2\u01b4\u01b5\7i\2\2\u01b5\u01b6\7w\2\2\u01b6") + buf.write("\u01b7\7t\2\2\u01b7\u01b8\7c\2\2\u01b8\u01b9\7v\2\2\u01b9") + buf.write("\u01ba\7k\2\2\u01ba\u01bb\7q\2\2\u01bb\u01bc\7p\2\2\u01bc") + buf.write(">\3\2\2\2\u01bd\u01be\7U\2\2\u01be\u01bf\7k\2\2\u01bf") + buf.write("\u01c0\7i\2\2\u01c0\u01c1\7p\2\2\u01c1\u01c2\7c\2\2\u01c2") + buf.write("\u01c3\7n\2\2\u01c3\u01c4\7u\2\2\u01c4@\3\2\2\2\u01c5") + buf.write("\u01c6\7F\2\2\u01c6\u01c7\7k\2\2\u01c7\u01c8\7c\2\2\u01c8") + buf.write("\u01c9\7i\2\2\u01c9\u01ca\7p\2\2\u01ca\u01cb\7q\2\2\u01cb") + buf.write("\u01cc\7u\2\2\u01cc\u01cd\7v\2\2\u01cd\u01ce\7k\2\2\u01ce") + buf.write("\u01cf\7e\2\2\u01cf\u01d0\7a\2\2\u01d0\u01d1\7u\2\2\u01d1") + buf.write("\u01d2\7k\2\2\u01d2\u01d3\7i\2\2\u01d3\u01d4\7p\2\2\u01d4") + buf.write("\u01d5\7c\2\2\u01d5\u01d6\7n\2\2\u01d6\u01d7\7u\2\2\u01d7") + buf.write("B\3\2\2\2\u01d8\u01d9\7U\2\2\u01d9\u01da\7k\2\2\u01da") + buf.write("\u01db\7i\2\2\u01db\u01dc\7p\2\2\u01dc\u01dd\7c\2\2\u01dd") + buf.write("\u01de\7n\2\2\u01de\u01df\7a\2\2\u01df\u01e0\7i\2\2\u01e0") + buf.write("\u01e1\7t\2\2\u01e1\u01e2\7q\2\2\u01e2\u01e3\7w\2\2\u01e3") + buf.write("\u01e4\7r\2\2\u01e4\u01e5\7u\2\2\u01e5D\3\2\2\2\u01e6") + buf.write("\u01e7\7H\2\2\u01e7\u01e8\7t\2\2\u01e8\u01e9\7c\2\2\u01e9") + buf.write("\u01ea\7o\2\2\u01ea\u01eb\7g\2\2\u01eb\u01ec\7u\2\2\u01ec") + buf.write("F\3\2\2\2\u01ed\u01ee\7U\2\2\u01ee\u01ef\7r\2\2\u01ef") + buf.write("\u01f0\7q\2\2\u01f0\u01f1\7t\2\2\u01f1\u01f2\7c\2\2\u01f2") + buf.write("\u01f3\7f\2\2\u01f3\u01f4\7k\2\2\u01f4\u01f5\7e\2\2\u01f5") + buf.write("\u01f6\7a\2\2\u01f6\u01f7\7h\2\2\u01f7\u01f8\7t\2\2\u01f8") + buf.write("\u01f9\7c\2\2\u01f9\u01fa\7o\2\2\u01fa\u01fb\7g\2\2\u01fb") + buf.write("\u01fc\7u\2\2\u01fcH\3\2\2\2\u01fd\u01fe\7G\2\2\u01fe") + buf.write("\u01ff\7x\2\2\u01ff\u0200\7g\2\2\u0200\u0201\7p\2\2\u0201") + buf.write("\u0202\7v\2\2\u0202\u0203\7a\2\2\u0203\u0204\7v\2\2\u0204") + buf.write("\u0205\7t\2\2\u0205\u0206\7k\2\2\u0206\u0207\7i\2\2\u0207") + buf.write("\u0208\7i\2\2\u0208\u0209\7g\2\2\u0209\u020a\7t\2\2\u020a") + buf.write("\u020b\7g\2\2\u020b\u020c\7f\2\2\u020c\u020d\7a\2\2\u020d") + buf.write("\u020e\7h\2\2\u020e\u020f\7t\2\2\u020f\u0210\7c\2\2\u0210") + buf.write("\u0211\7o\2\2\u0211\u0212\7g\2\2\u0212\u0213\7u\2\2\u0213") + buf.write("J\3\2\2\2\u0214\u0215\7F\2\2\u0215\u0216\7k\2\2\u0216") + buf.write("\u0217\7c\2\2\u0217\u0218\7i\2\2\u0218\u0219\7p\2\2\u0219") + buf.write("\u021a\7q\2\2\u021a\u021b\7u\2\2\u021b\u021c\7v\2\2\u021c") + buf.write("\u021d\7k\2\2\u021d\u021e\7e\2\2\u021e\u021f\7a\2\2\u021f") + buf.write("\u0220\7h\2\2\u0220\u0221\7t\2\2\u0221\u0222\7c\2\2\u0222") + buf.write("\u0223\7o\2\2\u0223\u0224\7g\2\2\u0224\u0225\7u\2\2\u0225") + buf.write("L\3\2\2\2\u0226\u0227\7O\2\2\u0227\u0228\7c\2\2\u0228") + buf.write("\u0229\7u\2\2\u0229\u022a\7v\2\2\u022a\u022b\7g\2\2\u022b") + buf.write("\u022c\7t\2\2\u022c\u022d\7T\2\2\u022d\u022e\7g\2\2\u022e") + buf.write("\u022f\7s\2\2\u022fN\3\2\2\2\u0230\u0231\7U\2\2\u0231") + buf.write("\u0232\7n\2\2\u0232\u0233\7c\2\2\u0233\u0234\7x\2\2\u0234") + buf.write("\u0235\7g\2\2\u0235\u0236\7T\2\2\u0236\u0237\7g\2\2\u0237") + buf.write("\u0238\7u\2\2\u0238\u0239\7r\2\2\u0239P\3\2\2\2\u023a") + buf.write("\u023b\7U\2\2\u023b\u023c\7e\2\2\u023c\u023d\7j\2\2\u023d") + buf.write("\u023e\7g\2\2\u023e\u023f\7f\2\2\u023f\u0240\7w\2\2\u0240") + buf.write("\u0241\7n\2\2\u0241\u0242\7g\2\2\u0242\u0243\7a\2\2\u0243") + buf.write("\u0244\7v\2\2\u0244\u0245\7c\2\2\u0245\u0246\7d\2\2\u0246") + buf.write("\u0247\7n\2\2\u0247\u0248\7g\2\2\u0248\u0249\7u\2\2\u0249") + buf.write("R\3\2\2\2\u024a\u024b\7f\2\2\u024b\u024c\7g\2\2\u024c") + buf.write("\u024d\7n\2\2\u024d\u024e\7c\2\2\u024e\u024f\7{\2\2\u024f") + buf.write("T\3\2\2\2\u0250\u0251\7C\2\2\u0251\u0252\7u\2\2\u0252") + buf.write("\u0253\7u\2\2\u0253\u0254\7k\2\2\u0254\u0255\7i\2\2\u0255") + buf.write("\u0256\7p\2\2\u0256\u0257\7P\2\2\u0257\u0258\7C\2\2\u0258") + buf.write("\u0259\7F\2\2\u0259V\3\2\2\2\u025a\u025b\7E\2\2\u025b") + buf.write("\u025c\7q\2\2\u025c\u025d\7p\2\2\u025d\u025e\7f\2\2\u025e") + buf.write("\u025f\7k\2\2\u025f\u0260\7v\2\2\u0260\u0261\7k\2\2\u0261") + buf.write("\u0262\7q\2\2\u0262\u0263\7p\2\2\u0263\u0264\7c\2\2\u0264") + buf.write("\u0265\7n\2\2\u0265\u0266\7E\2\2\u0266\u0267\7j\2\2\u0267") + buf.write("\u0268\7c\2\2\u0268\u0269\7p\2\2\u0269\u026a\7i\2\2\u026a") + buf.write("\u026b\7g\2\2\u026b\u026c\7P\2\2\u026c\u026d\7C\2\2\u026d") + buf.write("\u026e\7F\2\2\u026eX\3\2\2\2\u026f\u0270\7F\2\2\u0270") + buf.write("\u0271\7c\2\2\u0271\u0272\7v\2\2\u0272\u0273\7c\2\2\u0273") + buf.write("\u0274\7F\2\2\u0274\u0275\7w\2\2\u0275\u0276\7o\2\2\u0276") + buf.write("\u0277\7r\2\2\u0277Z\3\2\2\2\u0278\u0279\7U\2\2\u0279") + buf.write("\u027a\7c\2\2\u027a\u027b\7x\2\2\u027b\u027c\7g\2\2\u027c") + buf.write("\u027d\7E\2\2\u027d\u027e\7q\2\2\u027e\u027f\7p\2\2\u027f") + buf.write("\u0280\7h\2\2\u0280\u0281\7k\2\2\u0281\u0282\7i\2\2\u0282") + buf.write("\u0283\7w\2\2\u0283\u0284\7t\2\2\u0284\u0285\7c\2\2\u0285") + buf.write("\u0286\7v\2\2\u0286\u0287\7k\2\2\u0287\u0288\7q\2\2\u0288") + buf.write("\u0289\7p\2\2\u0289\\\3\2\2\2\u028a\u028b\7C\2\2\u028b") + buf.write("\u028c\7u\2\2\u028c\u028d\7u\2\2\u028d\u028e\7k\2\2\u028e") + buf.write("\u028f\7i\2\2\u028f\u0290\7p\2\2\u0290\u0291\7H\2\2\u0291") + buf.write("\u0292\7t\2\2\u0292\u0293\7c\2\2\u0293\u0294\7o\2\2\u0294") + buf.write("\u0295\7g\2\2\u0295\u0296\7K\2\2\u0296\u0297\7f\2\2\u0297") + buf.write("\u0298\7T\2\2\u0298\u0299\7c\2\2\u0299\u029a\7p\2\2\u029a") + buf.write("\u029b\7i\2\2\u029b\u029c\7g\2\2\u029c^\3\2\2\2\u029d") + buf.write("\u029e\7H\2\2\u029e\u029f\7t\2\2\u029f\u02a0\7g\2\2\u02a0") + buf.write("\u02a1\7g\2\2\u02a1\u02a2\7H\2\2\u02a2\u02a3\7q\2\2\u02a3") + buf.write("\u02a4\7t\2\2\u02a4\u02a5\7o\2\2\u02a5\u02a6\7c\2\2\u02a6") + buf.write("\u02a7\7v\2\2\u02a7`\3\2\2\2\u02a8\u02a9\7C\2\2\u02a9") + buf.write("\u02aa\7u\2\2\u02aa\u02ab\7u\2\2\u02ab\u02ac\7k\2\2\u02ac") + buf.write("\u02ad\7i\2\2\u02ad\u02ae\7p\2\2\u02ae\u02af\7H\2\2\u02af") + buf.write("\u02b0\7t\2\2\u02b0\u02b1\7c\2\2\u02b1\u02b2\7o\2\2\u02b2") + buf.write("\u02b3\7g\2\2\u02b3\u02b4\7K\2\2\u02b4\u02b5\7f\2\2\u02b5") + buf.write("b\3\2\2\2\u02b6\u02b7\7U\2\2\u02b7\u02b8\7k\2\2\u02b8") + buf.write("\u02b9\7i\2\2\u02b9\u02ba\7p\2\2\u02ba\u02bb\7c\2\2\u02bb") + buf.write("\u02bc\7n\2\2\u02bc\u02bd\7a\2\2\u02bd\u02be\7g\2\2\u02be") + buf.write("\u02bf\7p\2\2\u02bf\u02c0\7e\2\2\u02c0\u02c1\7q\2\2\u02c1") + buf.write("\u02c2\7f\2\2\u02c2\u02c3\7k\2\2\u02c3\u02c4\7p\2\2\u02c4") + buf.write("\u02c5\7i\2\2\u02c5\u02c6\7a\2\2\u02c6\u02c7\7v\2\2\u02c7") + buf.write("\u02c8\7{\2\2\u02c8\u02c9\7r\2\2\u02c9\u02ca\7g\2\2\u02ca") + buf.write("\u02cb\7u\2\2\u02cbd\3\2\2\2\u02cc\u02cd\7n\2\2\u02cd") + buf.write("\u02ce\7q\2\2\u02ce\u02cf\7i\2\2\u02cf\u02d0\7k\2\2\u02d0") + buf.write("\u02d1\7e\2\2\u02d1\u02d2\7c\2\2\u02d2\u02d3\7n\2\2\u02d3") + buf.write("\u02d4\7a\2\2\u02d4\u02d5\7x\2\2\u02d5\u02d6\7c\2\2\u02d6") + buf.write("\u02d7\7n\2\2\u02d7\u02d8\7w\2\2\u02d8\u02d9\7g\2\2\u02d9") + buf.write("f\3\2\2\2\u02da\u02db\7r\2\2\u02db\u02dc\7j\2\2\u02dc") + buf.write("\u02dd\7{\2\2\u02dd\u02de\7u\2\2\u02de\u02df\7k\2\2\u02df") + buf.write("\u02e0\7e\2\2\u02e0\u02e1\7c\2\2\u02e1\u02e2\7n\2\2\u02e2") + buf.write("\u02e3\7a\2\2\u02e3\u02e4\7x\2\2\u02e4\u02e5\7c\2\2\u02e5") + buf.write("\u02e6\7n\2\2\u02e6\u02e7\7w\2\2\u02e7\u02e8\7g\2\2\u02e8") + buf.write("h\3\2\2\2\u02e9\u02ea\7d\2\2\u02ea\u02eb\7e\2\2\u02eb") + buf.write("\u02ec\7f\2\2\u02ec\u02ed\7a\2\2\u02ed\u02ee\7x\2\2\u02ee") + buf.write("\u02ef\7c\2\2\u02ef\u02f0\7n\2\2\u02f0\u02f1\7w\2\2\u02f1") + buf.write("\u02f2\7g\2\2\u02f2j\3\2\2\2\u02f3\u02f4\7c\2\2\u02f4") + buf.write("\u02f5\7u\2\2\u02f5\u02f6\7e\2\2\u02f6\u02f7\7k\2\2\u02f7") + buf.write("\u02f8\7k\2\2\u02f8\u02f9\7a\2\2\u02f9\u02fa\7x\2\2\u02fa") + buf.write("\u02fb\7c\2\2\u02fb\u02fc\7n\2\2\u02fc\u02fd\7w\2\2\u02fd") + buf.write("\u02fe\7g\2\2\u02fel\3\2\2\2\u02ff\u0300\7U\2\2\u0300") + buf.write("\u0301\7k\2\2\u0301\u0302\7i\2\2\u0302\u0303\7p\2\2\u0303") + buf.write("\u0304\7c\2\2\u0304\u0305\7n\2\2\u0305\u0306\7a\2\2\u0306") + buf.write("\u0307\7t\2\2\u0307\u0308\7g\2\2\u0308\u0309\7r\2\2\u0309") + buf.write("\u030a\7t\2\2\u030a\u030b\7g\2\2\u030b\u030c\7u\2\2\u030c") + buf.write("\u030d\7g\2\2\u030d\u030e\7p\2\2\u030e\u030f\7v\2\2\u030f") + buf.write("\u0310\7c\2\2\u0310\u0311\7v\2\2\u0311\u0312\7k\2\2\u0312") + buf.write("\u0313\7q\2\2\u0313\u0314\7p\2\2\u0314n\3\2\2\2\u0315") + buf.write("\u0319\t\2\2\2\u0316\u0318\t\3\2\2\u0317\u0316\3\2\2\2") + buf.write("\u0318\u031b\3\2\2\2\u0319\u0317\3\2\2\2\u0319\u031a\3") + buf.write("\2\2\2\u031ap\3\2\2\2\u031b\u0319\3\2\2\2\u031c\u031e") + buf.write("\t\4\2\2\u031d\u031f\t\5\2\2\u031e\u031d\3\2\2\2\u031e") + buf.write("\u031f\3\2\2\2\u031f\u0321\3\2\2\2\u0320\u0322\4\62;\2") + buf.write("\u0321\u0320\3\2\2\2\u0322\u0323\3\2\2\2\u0323\u0321\3") + buf.write("\2\2\2\u0323\u0324\3\2\2\2\u0324r\3\2\2\2\u0325\u0327") + buf.write("\5\u0083B\2\u0326\u0325\3\2\2\2\u0326\u0327\3\2\2\2\u0327") + buf.write("\u0346\3\2\2\2\u0328\u032a\4\62;\2\u0329\u0328\3\2\2\2") + buf.write("\u032a\u032b\3\2\2\2\u032b\u0329\3\2\2\2\u032b\u032c\3") + buf.write("\2\2\2\u032c\u032d\3\2\2\2\u032d\u0331\7\60\2\2\u032e") + buf.write("\u0330\4\62;\2\u032f\u032e\3\2\2\2\u0330\u0333\3\2\2\2") + buf.write("\u0331\u032f\3\2\2\2\u0331\u0332\3\2\2\2\u0332\u0335\3") + buf.write("\2\2\2\u0333\u0331\3\2\2\2\u0334\u0336\5q9\2\u0335\u0334") + buf.write("\3\2\2\2\u0335\u0336\3\2\2\2\u0336\u0347\3\2\2\2\u0337") + buf.write("\u0339\7\60\2\2\u0338\u033a\4\62;\2\u0339\u0338\3\2\2") + buf.write("\2\u033a\u033b\3\2\2\2\u033b\u0339\3\2\2\2\u033b\u033c") + buf.write("\3\2\2\2\u033c\u033e\3\2\2\2\u033d\u033f\5q9\2\u033e\u033d") + buf.write("\3\2\2\2\u033e\u033f\3\2\2\2\u033f\u0347\3\2\2\2\u0340") + buf.write("\u0342\4\62;\2\u0341\u0340\3\2\2\2\u0342\u0343\3\2\2\2") + buf.write("\u0343\u0341\3\2\2\2\u0343\u0344\3\2\2\2\u0344\u0345\3") + buf.write("\2\2\2\u0345\u0347\5q9\2\u0346\u0329\3\2\2\2\u0346\u0337") + buf.write("\3\2\2\2\u0346\u0341\3\2\2\2\u0347t\3\2\2\2\u0348\u034a") + buf.write("\5\u0083B\2\u0349\u0348\3\2\2\2\u0349\u034a\3\2\2\2\u034a") + buf.write("\u034c\3\2\2\2\u034b\u034d\4\62;\2\u034c\u034b\3\2\2\2") + buf.write("\u034d\u034e\3\2\2\2\u034e\u034c\3\2\2\2\u034e\u034f\3") + buf.write("\2\2\2\u034fv\3\2\2\2\u0350\u0351\7\62\2\2\u0351\u0353") + buf.write("\t\6\2\2\u0352\u0354\5y=\2\u0353\u0352\3\2\2\2\u0354\u0355") + buf.write("\3\2\2\2\u0355\u0353\3\2\2\2\u0355\u0356\3\2\2\2\u0356") + buf.write("x\3\2\2\2\u0357\u0358\t\7\2\2\u0358z\3\2\2\2\u0359\u035a") + buf.write("\7^\2\2\u035a\u035b\t\b\2\2\u035b|\3\2\2\2\u035c\u035d") + buf.write("\t\t\2\2\u035d\u035e\3\2\2\2\u035e\u035f\b?\2\2\u035f") + buf.write("~\3\2\2\2\u0360\u0361\7\61\2\2\u0361\u0362\7\61\2\2\u0362") + buf.write("\u0366\3\2\2\2\u0363\u0365\n\n\2\2\u0364\u0363\3\2\2\2") + buf.write("\u0365\u0368\3\2\2\2\u0366\u0364\3\2\2\2\u0366\u0367\3") + buf.write("\2\2\2\u0367\u036a\3\2\2\2\u0368\u0366\3\2\2\2\u0369\u036b") + buf.write("\7\17\2\2\u036a\u0369\3\2\2\2\u036a\u036b\3\2\2\2\u036b") + buf.write("\u036c\3\2\2\2\u036c\u0379\7\f\2\2\u036d\u036e\7\61\2") + buf.write("\2\u036e\u036f\7,\2\2\u036f\u0373\3\2\2\2\u0370\u0372") + buf.write("\13\2\2\2\u0371\u0370\3\2\2\2\u0372\u0375\3\2\2\2\u0373") + buf.write("\u0374\3\2\2\2\u0373\u0371\3\2\2\2\u0374\u0376\3\2\2\2") + buf.write("\u0375\u0373\3\2\2\2\u0376\u0377\7,\2\2\u0377\u0379\7") + buf.write("\61\2\2\u0378\u0360\3\2\2\2\u0378\u036d\3\2\2\2\u0379") + buf.write("\u037a\3\2\2\2\u037a\u037b\b@\2\2\u037b\u0080\3\2\2\2") + buf.write("\u037c\u0381\7$\2\2\u037d\u0380\5{>\2\u037e\u0380\n\13") + buf.write("\2\2\u037f\u037d\3\2\2\2\u037f\u037e\3\2\2\2\u0380\u0383") + buf.write("\3\2\2\2\u0381\u037f\3\2\2\2\u0381\u0382\3\2\2\2\u0382") + buf.write("\u0384\3\2\2\2\u0383\u0381\3\2\2\2\u0384\u0385\7$\2\2") + buf.write("\u0385\u0082\3\2\2\2\u0386\u0387\t\5\2\2\u0387\u0084\3") + buf.write("\2\2\2\27\2\u0319\u031e\u0323\u0326\u032b\u0331\u0335") + buf.write("\u033b\u033e\u0343\u0346\u0349\u034e\u0355\u0366\u036a") + buf.write("\u0373\u0378\u037f\u0381\3\2\3\2") return buf.getvalue() @@ -449,10 +456,11 @@ class ldfLexer(Lexer): C_IDENTIFIER = 55 FLOAT = 56 INT = 57 - WS = 58 - COMMENT = 59 - STRING = 60 - SIGN = 61 + HEX = 58 + WS = 59 + COMMENT = 60 + STRING = 61 + SIGN = 62 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] @@ -475,7 +483,8 @@ class ldfLexer(Lexer): "'Signal_representation'" ] symbolicNames = [ "", - "C_IDENTIFIER", "FLOAT", "INT", "WS", "COMMENT", "STRING", "SIGN" ] + "C_IDENTIFIER", "FLOAT", "INT", "HEX", "WS", "COMMENT", "STRING", + "SIGN" ] ruleNames = [ "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", "T__7", "T__8", "T__9", "T__10", "T__11", "T__12", "T__13", @@ -486,8 +495,8 @@ class ldfLexer(Lexer): "T__38", "T__39", "T__40", "T__41", "T__42", "T__43", "T__44", "T__45", "T__46", "T__47", "T__48", "T__49", "T__50", "T__51", "T__52", "T__53", "C_IDENTIFIER", "EXPONENT", - "FLOAT", "INT", "ESC_SEQ", "WS", "COMMENT", "STRING", - "SIGN" ] + "FLOAT", "INT", "HEX", "HEX_DIGIT", "ESC_SEQ", "WS", "COMMENT", + "STRING", "SIGN" ] grammarFileName = "ldf.g4" diff --git a/pydbc/py3/ldfParser.py b/pydbc/py3/ldfParser.py index 7cdf6d9..4efd271 100644 --- a/pydbc/py3/ldfParser.py +++ b/pydbc/py3/ldfParser.py @@ -8,8 +8,8 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3?") - buf.write("\u034a\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3@") + buf.write("\u034f\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16") buf.write("\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23\t\23") buf.write("\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31") @@ -19,381 +19,381 @@ def serializedATN(): buf.write("/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64\t\64") buf.write("\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:\4;\t") buf.write(";\4<\t<\4=\t=\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\tC\4D\t") - buf.write("D\4E\tE\4F\tF\4G\tG\4H\tH\3\2\3\2\3\2\3\2\3\2\3\2\5\2") - buf.write("\u0097\n\2\3\2\3\2\5\2\u009b\n\2\3\2\3\2\5\2\u009f\n\2") - buf.write("\3\2\3\2\5\2\u00a3\n\2\3\2\5\2\u00a6\n\2\3\2\5\2\u00a9") - buf.write("\n\2\3\2\3\2\3\2\5\2\u00ae\n\2\3\2\5\2\u00b1\n\2\3\2\5") - buf.write("\2\u00b4\n\2\3\3\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3") + buf.write("D\4E\tE\4F\tF\4G\tG\4H\tH\4I\tI\3\2\3\2\3\2\3\2\3\2\3") + buf.write("\2\5\2\u0099\n\2\3\2\3\2\5\2\u009d\n\2\3\2\3\2\5\2\u00a1") + buf.write("\n\2\3\2\3\2\5\2\u00a5\n\2\3\2\5\2\u00a8\n\2\3\2\5\2\u00ab") + buf.write("\n\2\3\2\3\2\3\2\5\2\u00b0\n\2\3\2\5\2\u00b3\n\2\3\2\5") + buf.write("\2\u00b6\n\2\3\3\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3") buf.write("\5\3\5\3\5\3\5\3\5\3\5\3\6\3\6\3\6\3\6\3\6\3\7\3\7\3\7") buf.write("\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3") - buf.write("\7\7\7\u00dc\n\7\f\7\16\7\u00df\13\7\3\7\3\7\3\7\3\b\3") - buf.write("\b\3\t\3\t\3\n\3\n\3\13\3\13\3\13\3\13\3\13\3\13\3\13") - buf.write("\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\5\13") - buf.write("\u00fb\n\13\3\13\3\13\3\13\3\13\7\13\u0101\n\13\f\13\16") - buf.write("\13\u0104\13\13\3\13\3\13\3\f\3\f\3\r\3\r\3\16\3\16\3") - buf.write("\16\3\16\3\16\3\16\3\16\5\16\u0113\n\16\3\16\3\16\3\16") - buf.write("\3\16\3\16\3\16\3\16\3\16\3\16\3\16\7\16\u011f\n\16\f") - buf.write("\16\16\16\u0122\13\16\3\16\3\16\5\16\u0126\n\16\3\16\3") - buf.write("\16\3\16\3\16\3\16\3\16\5\16\u012e\n\16\3\16\3\16\3\16") - buf.write("\3\16\3\16\3\16\5\16\u0136\n\16\3\16\3\16\3\16\3\16\3") - buf.write("\16\3\16\5\16\u013e\n\16\3\16\3\16\3\16\3\16\3\16\3\16") - buf.write("\5\16\u0146\n\16\3\16\3\16\3\16\5\16\u014b\n\16\3\17\3") - buf.write("\17\3\20\3\20\3\21\3\21\3\22\3\22\3\23\3\23\3\23\3\23") - buf.write("\3\23\3\23\3\23\7\23\u015c\n\23\f\23\16\23\u015f\13\23") - buf.write("\3\23\3\23\3\24\3\24\3\25\3\25\3\25\3\25\3\25\7\25\u016a") - buf.write("\n\25\f\25\16\25\u016d\13\25\3\25\3\25\3\26\3\26\3\26") - buf.write("\3\26\3\26\3\26\3\26\3\26\3\26\3\26\7\26\u017b\n\26\f") - buf.write("\26\16\26\u017e\13\26\3\26\3\26\7\26\u0182\n\26\f\26\16") - buf.write("\26\u0185\13\26\3\26\3\26\7\26\u0189\n\26\f\26\16\26\u018c") - buf.write("\13\26\3\26\3\26\3\27\3\27\3\30\3\30\3\31\3\31\3\32\3") - buf.write("\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32\7\32") - buf.write("\u01a1\n\32\f\32\16\32\u01a4\13\32\3\32\3\32\7\32\u01a8") - buf.write("\n\32\f\32\16\32\u01ab\13\32\3\32\3\32\3\33\3\33\3\34") - buf.write("\3\34\5\34\u01b3\n\34\3\35\3\35\3\36\3\36\3\36\3\36\7") - buf.write("\36\u01bb\n\36\f\36\16\36\u01be\13\36\3\36\3\36\3\37\3") - buf.write("\37\3 \3 \3!\3!\3!\3!\3!\3!\3!\3!\3!\7!\u01cf\n!\f!\16") - buf.write("!\u01d2\13!\3!\3!\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"") - buf.write("\3\"\3\"\7\"\u01e1\n\"\f\"\16\"\u01e4\13\"\3\"\3\"\7\"") - buf.write("\u01e8\n\"\f\"\16\"\u01eb\13\"\3\"\3\"\3#\3#\3$\3$\3%") - buf.write("\3%\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\7&\u0204") - buf.write("\n&\f&\16&\u0207\13&\3&\3&\7&\u020b\n&\f&\16&\u020e\13") - buf.write("&\3&\3&\3\'\3\'\3(\3(\3)\3)\3*\3*\3+\3+\3+\3+\3+\3+\3") - buf.write("+\7+\u0221\n+\f+\16+\u0224\13+\3+\3+\7+\u0228\n+\f+\16") - buf.write("+\u022b\13+\3+\3+\3,\3,\3-\3-\3-\3-\3-\3-\3-\3-\3-\3-") - buf.write("\3-\7-\u023c\n-\f-\16-\u023f\13-\7-\u0241\n-\f-\16-\u0244") - buf.write("\13-\3-\3-\3.\3.\3/\3/\3\60\3\60\3\60\3\60\3\60\3\60\3") - buf.write("\60\3\60\3\60\3\60\3\60\7\60\u0257\n\60\f\60\16\60\u025a") - buf.write("\13\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3") - buf.write("\60\7\60\u0266\n\60\f\60\16\60\u0269\13\60\3\60\3\60\3") - buf.write("\60\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61") - buf.write("\7\61\u0278\n\61\f\61\16\61\u027b\13\61\3\61\3\61\7\61") - buf.write("\u027f\n\61\f\61\16\61\u0282\13\61\3\61\3\61\3\62\3\62") - buf.write("\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63") - buf.write("\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63") - buf.write("\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63") - buf.write("\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63") - buf.write("\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63") - buf.write("\3\63\3\63\5\63\u02c1\n\63\3\63\3\63\3\63\3\63\3\63\3") - buf.write("\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63") - buf.write("\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63") - buf.write("\3\63\5\63\u02df\n\63\3\64\3\64\3\65\3\65\3\66\3\66\3") - buf.write("\67\3\67\3\67\3\67\3\67\3\67\3\67\3\67\7\67\u02ef\n\67") - buf.write("\f\67\16\67\u02f2\13\67\3\67\3\67\7\67\u02f6\n\67\f\67") - buf.write("\16\67\u02f9\13\67\3\67\3\67\38\38\39\39\39\39\39\59\u0304") - buf.write("\n9\39\39\3:\3:\3:\3:\3:\3:\3:\3:\3:\3:\3:\5:\u0313\n") - buf.write(":\3:\3:\3;\3;\3;\3<\3<\3<\3=\3=\3>\3>\3?\3?\3@\3@\3A\3") - buf.write("A\3B\3B\3C\3C\3C\3C\3C\3C\3C\7C\u0330\nC\fC\16C\u0333") - buf.write("\13C\3C\3C\7C\u0337\nC\fC\16C\u033a\13C\3C\3C\3D\3D\3") - buf.write("E\3E\3F\3F\5F\u0344\nF\3G\3G\3H\3H\3H\2\2I\2\4\6\b\n\f") - buf.write("\16\20\22\24\26\30\32\34\36 \"$&(*,.\60\62\64\668:<>@") - buf.write("BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~\u0080\u0082\u0084\u0086") - buf.write("\u0088\u008a\u008c\u008e\2\2\2\u0340\2\u0090\3\2\2\2\4") - buf.write("\u00b5\3\2\2\2\6\u00ba\3\2\2\2\b\u00bf\3\2\2\2\n\u00c5") - buf.write("\3\2\2\2\f\u00ca\3\2\2\2\16\u00e3\3\2\2\2\20\u00e5\3\2") - buf.write("\2\2\22\u00e7\3\2\2\2\24\u00e9\3\2\2\2\26\u0107\3\2\2") - buf.write("\2\30\u0109\3\2\2\2\32\u014a\3\2\2\2\34\u014c\3\2\2\2") - buf.write("\36\u014e\3\2\2\2 \u0150\3\2\2\2\"\u0152\3\2\2\2$\u0154") - buf.write("\3\2\2\2&\u0162\3\2\2\2(\u0164\3\2\2\2*\u0170\3\2\2\2") - buf.write(",\u018f\3\2\2\2.\u0191\3\2\2\2\60\u0193\3\2\2\2\62\u0195") - buf.write("\3\2\2\2\64\u01ae\3\2\2\2\66\u01b2\3\2\2\28\u01b4\3\2") - buf.write("\2\2:\u01b6\3\2\2\2<\u01c1\3\2\2\2>\u01c3\3\2\2\2@\u01c5") - buf.write("\3\2\2\2B\u01d5\3\2\2\2D\u01ee\3\2\2\2F\u01f0\3\2\2\2") - buf.write("H\u01f2\3\2\2\2J\u01f4\3\2\2\2L\u0211\3\2\2\2N\u0213\3") - buf.write("\2\2\2P\u0215\3\2\2\2R\u0217\3\2\2\2T\u0219\3\2\2\2V\u022e") - buf.write("\3\2\2\2X\u0230\3\2\2\2Z\u0247\3\2\2\2\\\u0249\3\2\2\2") - buf.write("^\u024b\3\2\2\2`\u026d\3\2\2\2b\u0285\3\2\2\2d\u02de\3") - buf.write("\2\2\2f\u02e0\3\2\2\2h\u02e2\3\2\2\2j\u02e4\3\2\2\2l\u02e6") - buf.write("\3\2\2\2n\u02fc\3\2\2\2p\u02fe\3\2\2\2r\u0307\3\2\2\2") - buf.write("t\u0316\3\2\2\2v\u0319\3\2\2\2x\u031c\3\2\2\2z\u031e\3") - buf.write("\2\2\2|\u0320\3\2\2\2~\u0322\3\2\2\2\u0080\u0324\3\2\2") - buf.write("\2\u0082\u0326\3\2\2\2\u0084\u0328\3\2\2\2\u0086\u033d") - buf.write("\3\2\2\2\u0088\u033f\3\2\2\2\u008a\u0343\3\2\2\2\u008c") - buf.write("\u0345\3\2\2\2\u008e\u0347\3\2\2\2\u0090\u0091\7\3\2\2") - buf.write("\u0091\u0092\7\4\2\2\u0092\u0093\5\4\3\2\u0093\u0094\5") - buf.write("\6\4\2\u0094\u0096\5\b\5\2\u0095\u0097\5\n\6\2\u0096\u0095") - buf.write("\3\2\2\2\u0096\u0097\3\2\2\2\u0097\u0098\3\2\2\2\u0098") - buf.write("\u009a\5\f\7\2\u0099\u009b\5*\26\2\u009a\u0099\3\2\2\2") - buf.write("\u009a\u009b\3\2\2\2\u009b\u009c\3\2\2\2\u009c\u009e\5") - buf.write("\62\32\2\u009d\u009f\5@!\2\u009e\u009d\3\2\2\2\u009e\u009f") - buf.write("\3\2\2\2\u009f\u00a0\3\2\2\2\u00a0\u00a2\5J&\2\u00a1\u00a3") - buf.write("\5T+\2\u00a2\u00a1\3\2\2\2\u00a2\u00a3\3\2\2\2\u00a3\u00a5") - buf.write("\3\2\2\2\u00a4\u00a6\5X-\2\u00a5\u00a4\3\2\2\2\u00a5\u00a6") - buf.write("\3\2\2\2\u00a6\u00a8\3\2\2\2\u00a7\u00a9\5^\60\2\u00a8") - buf.write("\u00a7\3\2\2\2\u00a8\u00a9\3\2\2\2\u00a9\u00aa\3\2\2\2") - buf.write("\u00aa\u00ab\5\24\13\2\u00ab\u00ad\5`\61\2\u00ac\u00ae") - buf.write("\5B\"\2\u00ad\u00ac\3\2\2\2\u00ad\u00ae\3\2\2\2\u00ae") - buf.write("\u00b0\3\2\2\2\u00af\u00b1\5l\67\2\u00b0\u00af\3\2\2\2") - buf.write("\u00b0\u00b1\3\2\2\2\u00b1\u00b3\3\2\2\2\u00b2\u00b4\5") - buf.write("\u0084C\2\u00b3\u00b2\3\2\2\2\u00b3\u00b4\3\2\2\2\u00b4") - buf.write("\3\3\2\2\2\u00b5\u00b6\7\5\2\2\u00b6\u00b7\7\6\2\2\u00b7") - buf.write("\u00b8\5\u008cG\2\u00b8\u00b9\7\4\2\2\u00b9\5\3\2\2\2") - buf.write("\u00ba\u00bb\7\7\2\2\u00bb\u00bc\7\6\2\2\u00bc\u00bd\5") - buf.write("\u008cG\2\u00bd\u00be\7\4\2\2\u00be\7\3\2\2\2\u00bf\u00c0") - buf.write("\7\b\2\2\u00c0\u00c1\7\6\2\2\u00c1\u00c2\5\u008aF\2\u00c2") - buf.write("\u00c3\7\t\2\2\u00c3\u00c4\7\4\2\2\u00c4\t\3\2\2\2\u00c5") - buf.write("\u00c6\7\n\2\2\u00c6\u00c7\7\6\2\2\u00c7\u00c8\5\u008e") - buf.write("H\2\u00c8\u00c9\7\4\2\2\u00c9\13\3\2\2\2\u00ca\u00cb\7") - buf.write("\13\2\2\u00cb\u00cc\7\f\2\2\u00cc\u00cd\7\r\2\2\u00cd") - buf.write("\u00ce\7\16\2\2\u00ce\u00cf\5\16\b\2\u00cf\u00d0\7\17") - buf.write("\2\2\u00d0\u00d1\5\20\t\2\u00d1\u00d2\7\20\2\2\u00d2\u00d3") - buf.write("\7\17\2\2\u00d3\u00d4\5\22\n\2\u00d4\u00d5\7\20\2\2\u00d5") - buf.write("\u00d6\7\4\2\2\u00d6\u00d7\7\21\2\2\u00d7\u00d8\7\16\2") - buf.write("\2\u00d8\u00dd\5\16\b\2\u00d9\u00da\7\17\2\2\u00da\u00dc") - buf.write("\5\16\b\2\u00db\u00d9\3\2\2\2\u00dc\u00df\3\2\2\2\u00dd") - buf.write("\u00db\3\2\2\2\u00dd\u00de\3\2\2\2\u00de\u00e0\3\2\2\2") - buf.write("\u00df\u00dd\3\2\2\2\u00e0\u00e1\7\4\2\2\u00e1\u00e2\7") - buf.write("\22\2\2\u00e2\r\3\2\2\2\u00e3\u00e4\5\u008eH\2\u00e4\17") - buf.write("\3\2\2\2\u00e5\u00e6\5\u008aF\2\u00e6\21\3\2\2\2\u00e7") - buf.write("\u00e8\5\u008aF\2\u00e8\23\3\2\2\2\u00e9\u00ea\7\23\2") - buf.write("\2\u00ea\u0102\7\f\2\2\u00eb\u00ec\5\16\b\2\u00ec\u00ed") - buf.write("\7\f\2\2\u00ed\u00ee\7\24\2\2\u00ee\u00ef\7\6\2\2\u00ef") - buf.write("\u00f0\5\26\f\2\u00f0\u00f1\7\4\2\2\u00f1\u00f2\7\25\2") - buf.write("\2\u00f2\u00f3\7\6\2\2\u00f3\u00f4\5\30\r\2\u00f4\u00fa") - buf.write("\7\4\2\2\u00f5\u00f6\7\26\2\2\u00f6\u00f7\7\6\2\2\u00f7") - buf.write("\u00f8\5\30\r\2\u00f8\u00f9\7\4\2\2\u00f9\u00fb\3\2\2") - buf.write("\2\u00fa\u00f5\3\2\2\2\u00fa\u00fb\3\2\2\2\u00fb\u00fc") - buf.write("\3\2\2\2\u00fc\u00fd\5\32\16\2\u00fd\u00fe\7\4\2\2\u00fe") - buf.write("\u00ff\7\22\2\2\u00ff\u0101\3\2\2\2\u0100\u00eb\3\2\2") - buf.write("\2\u0101\u0104\3\2\2\2\u0102\u0100\3\2\2\2\u0102\u0103") - buf.write("\3\2\2\2\u0103\u0105\3\2\2\2\u0104\u0102\3\2\2\2\u0105") - buf.write("\u0106\7\22\2\2\u0106\25\3\2\2\2\u0107\u0108\5\u008cG") - buf.write("\2\u0108\27\3\2\2\2\u0109\u010a\5\u0086D\2\u010a\31\3") - buf.write("\2\2\2\u010b\u010c\7\27\2\2\u010c\u010d\7\6\2\2\u010d") - buf.write("\u010e\5\34\17\2\u010e\u010f\7\17\2\2\u010f\u0112\5\36") - buf.write("\20\2\u0110\u0111\7\17\2\2\u0111\u0113\5 \21\2\u0112\u0110") - buf.write("\3\2\2\2\u0112\u0113\3\2\2\2\u0113\u0114\3\2\2\2\u0114") - buf.write("\u0115\7\4\2\2\u0115\u0116\7\30\2\2\u0116\u0117\7\6\2") - buf.write("\2\u0117\u0118\5\"\22\2\u0118\u0125\7\4\2\2\u0119\u011a") - buf.write("\7\31\2\2\u011a\u011b\7\6\2\2\u011b\u0120\5\"\22\2\u011c") - buf.write("\u011d\7\17\2\2\u011d\u011f\5\"\22\2\u011e\u011c\3\2\2") - buf.write("\2\u011f\u0122\3\2\2\2\u0120\u011e\3\2\2\2\u0120\u0121") - buf.write("\3\2\2\2\u0121\u0123\3\2\2\2\u0122\u0120\3\2\2\2\u0123") - buf.write("\u0124\7\4\2\2\u0124\u0126\3\2\2\2\u0125\u0119\3\2\2\2") - buf.write("\u0125\u0126\3\2\2\2\u0126\u012d\3\2\2\2\u0127\u0128\7") - buf.write("\32\2\2\u0128\u0129\7\6\2\2\u0129\u012a\5\u008aF\2\u012a") - buf.write("\u012b\7\20\2\2\u012b\u012c\7\4\2\2\u012c\u012e\3\2\2") - buf.write("\2\u012d\u0127\3\2\2\2\u012d\u012e\3\2\2\2\u012e\u0135") - buf.write("\3\2\2\2\u012f\u0130\7\33\2\2\u0130\u0131\7\6\2\2\u0131") - buf.write("\u0132\5\u008aF\2\u0132\u0133\7\20\2\2\u0133\u0134\7\4") - buf.write("\2\2\u0134\u0136\3\2\2\2\u0135\u012f\3\2\2\2\u0135\u0136") - buf.write("\3\2\2\2\u0136\u013d\3\2\2\2\u0137\u0138\7\34\2\2\u0138") - buf.write("\u0139\7\6\2\2\u0139\u013a\5\u008aF\2\u013a\u013b\7\20") - buf.write("\2\2\u013b\u013c\7\4\2\2\u013c\u013e\3\2\2\2\u013d\u0137") - buf.write("\3\2\2\2\u013d\u013e\3\2\2\2\u013e\u0145\3\2\2\2\u013f") - buf.write("\u0140\7\35\2\2\u0140\u0141\7\6\2\2\u0141\u0142\5\u008a") - buf.write("F\2\u0142\u0143\7\20\2\2\u0143\u0144\7\4\2\2\u0144\u0146") - buf.write("\3\2\2\2\u0145\u013f\3\2\2\2\u0145\u0146\3\2\2\2\u0146") - buf.write("\u0147\3\2\2\2\u0147\u0148\5$\23\2\u0148\u014b\3\2\2\2") - buf.write("\u0149\u014b\5(\25\2\u014a\u010b\3\2\2\2\u014a\u0149\3") - buf.write("\2\2\2\u014b\33\3\2\2\2\u014c\u014d\5\u0086D\2\u014d\35") - buf.write("\3\2\2\2\u014e\u014f\5\u0086D\2\u014f\37\3\2\2\2\u0150") - buf.write("\u0151\5\u0086D\2\u0151!\3\2\2\2\u0152\u0153\5\u008eH") - buf.write("\2\u0153#\3\2\2\2\u0154\u0155\7\36\2\2\u0155\u015d\7\f") - buf.write("\2\2\u0156\u0157\5L\'\2\u0157\u0158\7\6\2\2\u0158\u0159") - buf.write("\5&\24\2\u0159\u015a\7\4\2\2\u015a\u015c\3\2\2\2\u015b") - buf.write("\u0156\3\2\2\2\u015c\u015f\3\2\2\2\u015d\u015b\3\2\2\2") - buf.write("\u015d\u015e\3\2\2\2\u015e\u0160\3\2\2\2\u015f\u015d\3") - buf.write("\2\2\2\u0160\u0161\7\22\2\2\u0161%\3\2\2\2\u0162\u0163") - buf.write("\5\u0086D\2\u0163\'\3\2\2\2\u0164\u0165\7\36\2\2\u0165") - buf.write("\u016b\7\f\2\2\u0166\u0167\5L\'\2\u0167\u0168\7\4\2\2") - buf.write("\u0168\u016a\3\2\2\2\u0169\u0166\3\2\2\2\u016a\u016d\3") - buf.write("\2\2\2\u016b\u0169\3\2\2\2\u016b\u016c\3\2\2\2\u016c\u016e") - buf.write("\3\2\2\2\u016d\u016b\3\2\2\2\u016e\u016f\7\22\2\2\u016f") - buf.write(")\3\2\2\2\u0170\u0171\7\37\2\2\u0171\u018a\7\f\2\2\u0172") - buf.write("\u0173\7 \2\2\u0173\u0174\5,\27\2\u0174\u0183\7\f\2\2") - buf.write("\u0175\u0176\5.\30\2\u0176\u0177\7\f\2\2\u0177\u017c\5") - buf.write("\60\31\2\u0178\u0179\7\17\2\2\u0179\u017b\5\60\31\2\u017a") - buf.write("\u0178\3\2\2\2\u017b\u017e\3\2\2\2\u017c\u017a\3\2\2\2") - buf.write("\u017c\u017d\3\2\2\2\u017d\u017f\3\2\2\2\u017e\u017c\3") - buf.write("\2\2\2\u017f\u0180\7\4\2\2\u0180\u0182\3\2\2\2\u0181\u0175") - buf.write("\3\2\2\2\u0182\u0185\3\2\2\2\u0183\u0181\3\2\2\2\u0183") - buf.write("\u0184\3\2\2\2\u0184\u0186\3\2\2\2\u0185\u0183\3\2\2\2") - buf.write("\u0186\u0187\7\22\2\2\u0187\u0189\3\2\2\2\u0188\u0172") - buf.write("\3\2\2\2\u0189\u018c\3\2\2\2\u018a\u0188\3\2\2\2\u018a") - buf.write("\u018b\3\2\2\2\u018b\u018d\3\2\2\2\u018c\u018a\3\2\2\2") - buf.write("\u018d\u018e\7\22\2\2\u018e+\3\2\2\2\u018f\u0190\5\u008e") - buf.write("H\2\u0190-\3\2\2\2\u0191\u0192\5\u008eH\2\u0192/\3\2\2") - buf.write("\2\u0193\u0194\5\u008eH\2\u0194\61\3\2\2\2\u0195\u0196") - buf.write("\7!\2\2\u0196\u01a9\7\f\2\2\u0197\u0198\5\"\22\2\u0198") - buf.write("\u0199\7\16\2\2\u0199\u019a\5\64\33\2\u019a\u019b\7\17") - buf.write("\2\2\u019b\u019c\5\66\34\2\u019c\u019d\7\17\2\2\u019d") - buf.write("\u01a2\5<\37\2\u019e\u019f\7\17\2\2\u019f\u01a1\5> \2") - buf.write("\u01a0\u019e\3\2\2\2\u01a1\u01a4\3\2\2\2\u01a2\u01a0\3") - buf.write("\2\2\2\u01a2\u01a3\3\2\2\2\u01a3\u01a5\3\2\2\2\u01a4\u01a2") - buf.write("\3\2\2\2\u01a5\u01a6\7\4\2\2\u01a6\u01a8\3\2\2\2\u01a7") - buf.write("\u0197\3\2\2\2\u01a8\u01ab\3\2\2\2\u01a9\u01a7\3\2\2\2") - buf.write("\u01a9\u01aa\3\2\2\2\u01aa\u01ac\3\2\2\2\u01ab\u01a9\3") - buf.write("\2\2\2\u01ac\u01ad\7\22\2\2\u01ad\63\3\2\2\2\u01ae\u01af") - buf.write("\5\u0086D\2\u01af\65\3\2\2\2\u01b0\u01b3\58\35\2\u01b1") - buf.write("\u01b3\5:\36\2\u01b2\u01b0\3\2\2\2\u01b2\u01b1\3\2\2\2") - buf.write("\u01b3\67\3\2\2\2\u01b4\u01b5\5\u0086D\2\u01b59\3\2\2") - buf.write("\2\u01b6\u01b7\7\f\2\2\u01b7\u01bc\5\u0086D\2\u01b8\u01b9") - buf.write("\7\17\2\2\u01b9\u01bb\5\u0086D\2\u01ba\u01b8\3\2\2\2\u01bb") - buf.write("\u01be\3\2\2\2\u01bc\u01ba\3\2\2\2\u01bc\u01bd\3\2\2\2") - buf.write("\u01bd\u01bf\3\2\2\2\u01be\u01bc\3\2\2\2\u01bf\u01c0\7") - buf.write("\22\2\2\u01c0;\3\2\2\2\u01c1\u01c2\5\u008eH\2\u01c2=\3") - buf.write("\2\2\2\u01c3\u01c4\5\u008eH\2\u01c4?\3\2\2\2\u01c5\u01c6") - buf.write("\7\"\2\2\u01c6\u01d0\7\f\2\2\u01c7\u01c8\5\u008eH\2\u01c8") - buf.write("\u01c9\7\16\2\2\u01c9\u01ca\5\u0086D\2\u01ca\u01cb\7\17") - buf.write("\2\2\u01cb\u01cc\5\u0086D\2\u01cc\u01cd\7\4\2\2\u01cd") - buf.write("\u01cf\3\2\2\2\u01ce\u01c7\3\2\2\2\u01cf\u01d2\3\2\2\2") - buf.write("\u01d0\u01ce\3\2\2\2\u01d0\u01d1\3\2\2\2\u01d1\u01d3\3") - buf.write("\2\2\2\u01d2\u01d0\3\2\2\2\u01d3\u01d4\7\22\2\2\u01d4") - buf.write("A\3\2\2\2\u01d5\u01d6\7#\2\2\u01d6\u01e9\7\f\2\2\u01d7") - buf.write("\u01d8\5D#\2\u01d8\u01d9\7\16\2\2\u01d9\u01da\5F$\2\u01da") - buf.write("\u01e2\7\f\2\2\u01db\u01dc\5\"\22\2\u01dc\u01dd\7\17\2") - buf.write("\2\u01dd\u01de\5H%\2\u01de\u01df\7\4\2\2\u01df\u01e1\3") - buf.write("\2\2\2\u01e0\u01db\3\2\2\2\u01e1\u01e4\3\2\2\2\u01e2\u01e0") - buf.write("\3\2\2\2\u01e2\u01e3\3\2\2\2\u01e3\u01e5\3\2\2\2\u01e4") - buf.write("\u01e2\3\2\2\2\u01e5\u01e6\7\22\2\2\u01e6\u01e8\3\2\2") - buf.write("\2\u01e7\u01d7\3\2\2\2\u01e8\u01eb\3\2\2\2\u01e9\u01e7") - buf.write("\3\2\2\2\u01e9\u01ea\3\2\2\2\u01ea\u01ec\3\2\2\2\u01eb") - buf.write("\u01e9\3\2\2\2\u01ec\u01ed\7\22\2\2\u01edC\3\2\2\2\u01ee") - buf.write("\u01ef\5\u008eH\2\u01efE\3\2\2\2\u01f0\u01f1\5\u0086D") - buf.write("\2\u01f1G\3\2\2\2\u01f2\u01f3\5\u0086D\2\u01f3I\3\2\2") - buf.write("\2\u01f4\u01f5\7$\2\2\u01f5\u020c\7\f\2\2\u01f6\u01f7") - buf.write("\5L\'\2\u01f7\u01f8\7\16\2\2\u01f8\u01f9\5N(\2\u01f9\u01fa") - buf.write("\7\17\2\2\u01fa\u01fb\5<\37\2\u01fb\u01fc\7\17\2\2\u01fc") - buf.write("\u01fd\5P)\2\u01fd\u0205\7\f\2\2\u01fe\u01ff\5\"\22\2") - buf.write("\u01ff\u0200\7\17\2\2\u0200\u0201\5R*\2\u0201\u0202\7") - buf.write("\4\2\2\u0202\u0204\3\2\2\2\u0203\u01fe\3\2\2\2\u0204\u0207") - buf.write("\3\2\2\2\u0205\u0203\3\2\2\2\u0205\u0206\3\2\2\2\u0206") - buf.write("\u0208\3\2\2\2\u0207\u0205\3\2\2\2\u0208\u0209\7\22\2") - buf.write("\2\u0209\u020b\3\2\2\2\u020a\u01f6\3\2\2\2\u020b\u020e") - buf.write("\3\2\2\2\u020c\u020a\3\2\2\2\u020c\u020d\3\2\2\2\u020d") - buf.write("\u020f\3\2\2\2\u020e\u020c\3\2\2\2\u020f\u0210\7\22\2") - buf.write("\2\u0210K\3\2\2\2\u0211\u0212\5\u008eH\2\u0212M\3\2\2") - buf.write("\2\u0213\u0214\5\u0086D\2\u0214O\3\2\2\2\u0215\u0216\5") - buf.write("\u0086D\2\u0216Q\3\2\2\2\u0217\u0218\5\u0086D\2\u0218") - buf.write("S\3\2\2\2\u0219\u021a\7%\2\2\u021a\u0229\7\f\2\2\u021b") - buf.write("\u021c\5V,\2\u021c\u021d\7\16\2\2\u021d\u0222\5L\'\2\u021e") - buf.write("\u021f\7\17\2\2\u021f\u0221\5L\'\2\u0220\u021e\3\2\2\2") - buf.write("\u0221\u0224\3\2\2\2\u0222\u0220\3\2\2\2\u0222\u0223\3") - buf.write("\2\2\2\u0223\u0225\3\2\2\2\u0224\u0222\3\2\2\2\u0225\u0226") - buf.write("\7\4\2\2\u0226\u0228\3\2\2\2\u0227\u021b\3\2\2\2\u0228") - buf.write("\u022b\3\2\2\2\u0229\u0227\3\2\2\2\u0229\u022a\3\2\2\2") - buf.write("\u022a\u022c\3\2\2\2\u022b\u0229\3\2\2\2\u022c\u022d\7") - buf.write("\22\2\2\u022dU\3\2\2\2\u022e\u022f\5\u008eH\2\u022fW\3") - buf.write("\2\2\2\u0230\u0231\7&\2\2\u0231\u0242\7\f\2\2\u0232\u0233") - buf.write("\5Z.\2\u0233\u0234\7\16\2\2\u0234\u0235\5\\/\2\u0235\u0236") - buf.write("\7\17\2\2\u0236\u023d\5N(\2\u0237\u0238\7\17\2\2\u0238") - buf.write("\u0239\5L\'\2\u0239\u023a\7\4\2\2\u023a\u023c\3\2\2\2") - buf.write("\u023b\u0237\3\2\2\2\u023c\u023f\3\2\2\2\u023d\u023b\3") - buf.write("\2\2\2\u023d\u023e\3\2\2\2\u023e\u0241\3\2\2\2\u023f\u023d") - buf.write("\3\2\2\2\u0240\u0232\3\2\2\2\u0241\u0244\3\2\2\2\u0242") - buf.write("\u0240\3\2\2\2\u0242\u0243\3\2\2\2\u0243\u0245\3\2\2\2") - buf.write("\u0244\u0242\3\2\2\2\u0245\u0246\7\22\2\2\u0246Y\3\2\2") - buf.write("\2\u0247\u0248\5\u008eH\2\u0248[\3\2\2\2\u0249\u024a\5") - buf.write("\u008eH\2\u024a]\3\2\2\2\u024b\u024c\7\'\2\2\u024c\u024d") - buf.write("\7\f\2\2\u024d\u024e\7(\2\2\u024e\u024f\7\16\2\2\u024f") - buf.write("\u0250\5\u0086D\2\u0250\u0258\7\f\2\2\u0251\u0252\5\u008e") - buf.write("H\2\u0252\u0253\7\17\2\2\u0253\u0254\5\u0086D\2\u0254") - buf.write("\u0255\7\4\2\2\u0255\u0257\3\2\2\2\u0256\u0251\3\2\2\2") - buf.write("\u0257\u025a\3\2\2\2\u0258\u0256\3\2\2\2\u0258\u0259\3") - buf.write("\2\2\2\u0259\u025b\3\2\2\2\u025a\u0258\3\2\2\2\u025b\u025c") - buf.write("\7\22\2\2\u025c\u025d\7)\2\2\u025d\u025e\7\16\2\2\u025e") - buf.write("\u025f\5\u0086D\2\u025f\u0267\7\f\2\2\u0260\u0261\5\u008e") - buf.write("H\2\u0261\u0262\7\17\2\2\u0262\u0263\5\u0086D\2\u0263") - buf.write("\u0264\7\4\2\2\u0264\u0266\3\2\2\2\u0265\u0260\3\2\2\2") - buf.write("\u0266\u0269\3\2\2\2\u0267\u0265\3\2\2\2\u0267\u0268\3") - buf.write("\2\2\2\u0268\u026a\3\2\2\2\u0269\u0267\3\2\2\2\u026a\u026b") - buf.write("\7\22\2\2\u026b\u026c\7\22\2\2\u026c_\3\2\2\2\u026d\u026e") - buf.write("\7*\2\2\u026e\u0280\7\f\2\2\u026f\u0270\5b\62\2\u0270") - buf.write("\u0279\7\f\2\2\u0271\u0272\5d\63\2\u0272\u0273\7+\2\2") - buf.write("\u0273\u0274\5j\66\2\u0274\u0275\7\20\2\2\u0275\u0276") - buf.write("\7\4\2\2\u0276\u0278\3\2\2\2\u0277\u0271\3\2\2\2\u0278") - buf.write("\u027b\3\2\2\2\u0279\u0277\3\2\2\2\u0279\u027a\3\2\2\2") - buf.write("\u027a\u027c\3\2\2\2\u027b\u0279\3\2\2\2\u027c\u027d\7") - buf.write("\22\2\2\u027d\u027f\3\2\2\2\u027e\u026f\3\2\2\2\u027f") - buf.write("\u0282\3\2\2\2\u0280\u027e\3\2\2\2\u0280\u0281\3\2\2\2") - buf.write("\u0281\u0283\3\2\2\2\u0282\u0280\3\2\2\2\u0283\u0284\7") - buf.write("\22\2\2\u0284a\3\2\2\2\u0285\u0286\5\u008eH\2\u0286c\3") - buf.write("\2\2\2\u0287\u02df\5L\'\2\u0288\u02df\7(\2\2\u0289\u02df") - buf.write("\7)\2\2\u028a\u028b\7,\2\2\u028b\u028c\7\f\2\2\u028c\u028d") - buf.write("\5\16\b\2\u028d\u028e\7\22\2\2\u028e\u02df\3\2\2\2\u028f") - buf.write("\u0290\7-\2\2\u0290\u0291\7\f\2\2\u0291\u0292\5\u0086") - buf.write("D\2\u0292\u0293\7\17\2\2\u0293\u0294\5\u0086D\2\u0294") - buf.write("\u0295\7\17\2\2\u0295\u0296\5\u0086D\2\u0296\u0297\7\17") - buf.write("\2\2\u0297\u0298\5\u0086D\2\u0298\u0299\7\17\2\2\u0299") - buf.write("\u029a\5\u0086D\2\u029a\u029b\7\17\2\2\u029b\u029c\5\u0086") - buf.write("D\2\u029c\u029d\7\22\2\2\u029d\u02df\3\2\2\2\u029e\u029f") - buf.write("\7.\2\2\u029f\u02a0\7\f\2\2\u02a0\u02a1\5\16\b\2\u02a1") - buf.write("\u02a2\7\17\2\2\u02a2\u02a3\5\u0086D\2\u02a3\u02a4\7\17") - buf.write("\2\2\u02a4\u02a5\5\u0086D\2\u02a5\u02a6\7\17\2\2\u02a6") - buf.write("\u02a7\5\u0086D\2\u02a7\u02a8\7\17\2\2\u02a8\u02a9\5\u0086") - buf.write("D\2\u02a9\u02aa\7\17\2\2\u02aa\u02ab\5\u0086D\2\u02ab") - buf.write("\u02ac\7\22\2\2\u02ac\u02df\3\2\2\2\u02ad\u02ae\7/\2\2") - buf.write("\u02ae\u02af\7\f\2\2\u02af\u02b0\5\16\b\2\u02b0\u02b1") - buf.write("\7\22\2\2\u02b1\u02df\3\2\2\2\u02b2\u02b3\7\60\2\2\u02b3") - buf.write("\u02b4\7\f\2\2\u02b4\u02b5\5\16\b\2\u02b5\u02b6\7\17\2") - buf.write("\2\u02b6\u02c0\5f\64\2\u02b7\u02b8\7\17\2\2\u02b8\u02b9") - buf.write("\5h\65\2\u02b9\u02ba\7\17\2\2\u02ba\u02bb\5h\65\2\u02bb") - buf.write("\u02bc\7\17\2\2\u02bc\u02bd\5h\65\2\u02bd\u02be\7\17\2") - buf.write("\2\u02be\u02bf\5h\65\2\u02bf\u02c1\3\2\2\2\u02c0\u02b7") - buf.write("\3\2\2\2\u02c0\u02c1\3\2\2\2\u02c1\u02c2\3\2\2\2\u02c2") - buf.write("\u02c3\7\22\2\2\u02c3\u02df\3\2\2\2\u02c4\u02c5\7\61\2") - buf.write("\2\u02c5\u02c6\7\f\2\2\u02c6\u02c7\5\u0086D\2\u02c7\u02c8") - buf.write("\7\17\2\2\u02c8\u02c9\5\u0086D\2\u02c9\u02ca\7\17\2\2") - buf.write("\u02ca\u02cb\5\u0086D\2\u02cb\u02cc\7\17\2\2\u02cc\u02cd") - buf.write("\5\u0086D\2\u02cd\u02ce\7\17\2\2\u02ce\u02cf\5\u0086D") - buf.write("\2\u02cf\u02d0\7\17\2\2\u02d0\u02d1\5\u0086D\2\u02d1\u02d2") - buf.write("\7\17\2\2\u02d2\u02d3\5\u0086D\2\u02d3\u02d4\7\17\2\2") - buf.write("\u02d4\u02d5\5\u0086D\2\u02d5\u02d6\7\22\2\2\u02d6\u02df") - buf.write("\3\2\2\2\u02d7\u02d8\7\62\2\2\u02d8\u02d9\7\f\2\2\u02d9") - buf.write("\u02da\5\16\b\2\u02da\u02db\7\17\2\2\u02db\u02dc\5L\'") - buf.write("\2\u02dc\u02dd\7\22\2\2\u02dd\u02df\3\2\2\2\u02de\u0287") - buf.write("\3\2\2\2\u02de\u0288\3\2\2\2\u02de\u0289\3\2\2\2\u02de") - buf.write("\u028a\3\2\2\2\u02de\u028f\3\2\2\2\u02de\u029e\3\2\2\2") - buf.write("\u02de\u02ad\3\2\2\2\u02de\u02b2\3\2\2\2\u02de\u02c4\3") - buf.write("\2\2\2\u02de\u02d7\3\2\2\2\u02dfe\3\2\2\2\u02e0\u02e1") - buf.write("\5\u0086D\2\u02e1g\3\2\2\2\u02e2\u02e3\5\u0086D\2\u02e3") - buf.write("i\3\2\2\2\u02e4\u02e5\5\u008aF\2\u02e5k\3\2\2\2\u02e6") - buf.write("\u02e7\7\63\2\2\u02e7\u02f7\7\f\2\2\u02e8\u02e9\5n8\2") - buf.write("\u02e9\u02f0\7\f\2\2\u02ea\u02ef\5p9\2\u02eb\u02ef\5r") - buf.write(":\2\u02ec\u02ef\5t;\2\u02ed\u02ef\5v<\2\u02ee\u02ea\3") - buf.write("\2\2\2\u02ee\u02eb\3\2\2\2\u02ee\u02ec\3\2\2\2\u02ee\u02ed") - buf.write("\3\2\2\2\u02ef\u02f2\3\2\2\2\u02f0\u02ee\3\2\2\2\u02f0") - buf.write("\u02f1\3\2\2\2\u02f1\u02f3\3\2\2\2\u02f2\u02f0\3\2\2\2") - buf.write("\u02f3\u02f4\7\22\2\2\u02f4\u02f6\3\2\2\2\u02f5\u02e8") - buf.write("\3\2\2\2\u02f6\u02f9\3\2\2\2\u02f7\u02f5\3\2\2\2\u02f7") - buf.write("\u02f8\3\2\2\2\u02f8\u02fa\3\2\2\2\u02f9\u02f7\3\2\2\2") - buf.write("\u02fa\u02fb\7\22\2\2\u02fbm\3\2\2\2\u02fc\u02fd\5\u008e") - buf.write("H\2\u02fdo\3\2\2\2\u02fe\u02ff\7\64\2\2\u02ff\u0300\7") - buf.write("\17\2\2\u0300\u0303\5x=\2\u0301\u0302\7\17\2\2\u0302\u0304") - buf.write("\5\u0082B\2\u0303\u0301\3\2\2\2\u0303\u0304\3\2\2\2\u0304") - buf.write("\u0305\3\2\2\2\u0305\u0306\7\4\2\2\u0306q\3\2\2\2\u0307") - buf.write("\u0308\7\65\2\2\u0308\u0309\7\17\2\2\u0309\u030a\5z>\2") - buf.write("\u030a\u030b\7\17\2\2\u030b\u030c\5|?\2\u030c\u030d\7") - buf.write("\17\2\2\u030d\u030e\5~@\2\u030e\u030f\7\17\2\2\u030f\u0312") - buf.write("\5\u0080A\2\u0310\u0311\7\17\2\2\u0311\u0313\5\u0082B") - buf.write("\2\u0312\u0310\3\2\2\2\u0312\u0313\3\2\2\2\u0313\u0314") - buf.write("\3\2\2\2\u0314\u0315\7\4\2\2\u0315s\3\2\2\2\u0316\u0317") - buf.write("\7\66\2\2\u0317\u0318\7\4\2\2\u0318u\3\2\2\2\u0319\u031a") - buf.write("\7\67\2\2\u031a\u031b\7\4\2\2\u031bw\3\2\2\2\u031c\u031d") - buf.write("\5\u0086D\2\u031dy\3\2\2\2\u031e\u031f\5\u0086D\2\u031f") - buf.write("{\3\2\2\2\u0320\u0321\5\u0086D\2\u0321}\3\2\2\2\u0322") - buf.write("\u0323\5\u008aF\2\u0323\177\3\2\2\2\u0324\u0325\5\u008a") - buf.write("F\2\u0325\u0081\3\2\2\2\u0326\u0327\5\u008cG\2\u0327\u0083") - buf.write("\3\2\2\2\u0328\u0329\78\2\2\u0329\u0338\7\f\2\2\u032a") - buf.write("\u032b\5n8\2\u032b\u032c\7\16\2\2\u032c\u0331\5\"\22\2") - buf.write("\u032d\u032e\7\17\2\2\u032e\u0330\5\"\22\2\u032f\u032d") - buf.write("\3\2\2\2\u0330\u0333\3\2\2\2\u0331\u032f\3\2\2\2\u0331") - buf.write("\u0332\3\2\2\2\u0332\u0334\3\2\2\2\u0333\u0331\3\2\2\2") - buf.write("\u0334\u0335\7\4\2\2\u0335\u0337\3\2\2\2\u0336\u032a\3") - buf.write("\2\2\2\u0337\u033a\3\2\2\2\u0338\u0336\3\2\2\2\u0338\u0339") - buf.write("\3\2\2\2\u0339\u033b\3\2\2\2\u033a\u0338\3\2\2\2\u033b") - buf.write("\u033c\7\22\2\2\u033c\u0085\3\2\2\2\u033d\u033e\7;\2\2") - buf.write("\u033e\u0087\3\2\2\2\u033f\u0340\7:\2\2\u0340\u0089\3") - buf.write("\2\2\2\u0341\u0344\5\u0086D\2\u0342\u0344\5\u0088E\2\u0343") - buf.write("\u0341\3\2\2\2\u0343\u0342\3\2\2\2\u0344\u008b\3\2\2\2") - buf.write("\u0345\u0346\7>\2\2\u0346\u008d\3\2\2\2\u0347\u0348\7") - buf.write("9\2\2\u0348\u008f\3\2\2\2\66\u0096\u009a\u009e\u00a2\u00a5") - buf.write("\u00a8\u00ad\u00b0\u00b3\u00dd\u00fa\u0102\u0112\u0120") - buf.write("\u0125\u012d\u0135\u013d\u0145\u014a\u015d\u016b\u017c") - buf.write("\u0183\u018a\u01a2\u01a9\u01b2\u01bc\u01d0\u01e2\u01e9") - buf.write("\u0205\u020c\u0222\u0229\u023d\u0242\u0258\u0267\u0279") - buf.write("\u0280\u02c0\u02de\u02ee\u02f0\u02f7\u0303\u0312\u0331") - buf.write("\u0338\u0343") + buf.write("\7\7\7\u00de\n\7\f\7\16\7\u00e1\13\7\3\7\3\7\3\7\3\b\3") + buf.write("\b\3\t\3\t\3\n\3\n\3\13\3\13\3\13\7\13\u00ef\n\13\f\13") + buf.write("\16\13\u00f2\13\13\3\13\3\13\3\f\3\f\3\f\3\f\3\f\3\f\3") + buf.write("\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\5\f\u0105\n\f\3\f\3") + buf.write("\f\3\f\3\f\3\r\3\r\3\16\3\16\3\17\3\17\3\17\3\17\3\17") + buf.write("\3\17\3\17\5\17\u0116\n\17\3\17\3\17\3\17\3\17\3\17\3") + buf.write("\17\3\17\3\17\3\17\3\17\7\17\u0122\n\17\f\17\16\17\u0125") + buf.write("\13\17\3\17\3\17\5\17\u0129\n\17\3\17\3\17\3\17\3\17\3") + buf.write("\17\3\17\5\17\u0131\n\17\3\17\3\17\3\17\3\17\3\17\3\17") + buf.write("\5\17\u0139\n\17\3\17\3\17\3\17\3\17\3\17\3\17\5\17\u0141") + buf.write("\n\17\3\17\3\17\3\17\3\17\3\17\3\17\5\17\u0149\n\17\3") + buf.write("\17\3\17\3\17\5\17\u014e\n\17\3\20\3\20\3\21\3\21\3\22") + buf.write("\3\22\3\23\3\23\3\24\3\24\3\24\3\24\3\24\3\24\3\24\7\24") + buf.write("\u015f\n\24\f\24\16\24\u0162\13\24\3\24\3\24\3\25\3\25") + buf.write("\3\26\3\26\3\26\3\26\3\26\7\26\u016d\n\26\f\26\16\26\u0170") + buf.write("\13\26\3\26\3\26\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3") + buf.write("\27\3\27\3\27\7\27\u017e\n\27\f\27\16\27\u0181\13\27\3") + buf.write("\27\3\27\7\27\u0185\n\27\f\27\16\27\u0188\13\27\3\27\3") + buf.write("\27\7\27\u018c\n\27\f\27\16\27\u018f\13\27\3\27\3\27\3") + buf.write("\30\3\30\3\31\3\31\3\32\3\32\3\33\3\33\3\33\3\33\3\33") + buf.write("\3\33\3\33\3\33\3\33\3\33\3\33\7\33\u01a4\n\33\f\33\16") + buf.write("\33\u01a7\13\33\3\33\3\33\7\33\u01ab\n\33\f\33\16\33\u01ae") + buf.write("\13\33\3\33\3\33\3\34\3\34\3\35\3\35\5\35\u01b6\n\35\3") + buf.write("\36\3\36\3\37\3\37\3\37\3\37\7\37\u01be\n\37\f\37\16\37") + buf.write("\u01c1\13\37\3\37\3\37\3 \3 \3!\3!\3\"\3\"\3\"\3\"\3\"") + buf.write("\3\"\3\"\3\"\3\"\7\"\u01d2\n\"\f\"\16\"\u01d5\13\"\3\"") + buf.write("\3\"\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#\7#\u01e4\n#\f#\16") + buf.write("#\u01e7\13#\3#\3#\7#\u01eb\n#\f#\16#\u01ee\13#\3#\3#\3") + buf.write("$\3$\3%\3%\3&\3&\3\'\3\'\3\'\3\'\3\'\3\'\3\'\3\'\3\'\3") + buf.write("\'\3\'\3\'\3\'\3\'\3\'\7\'\u0207\n\'\f\'\16\'\u020a\13") + buf.write("\'\3\'\3\'\7\'\u020e\n\'\f\'\16\'\u0211\13\'\3\'\3\'\3") + buf.write("(\3(\3)\3)\3*\3*\3+\3+\3,\3,\3,\3,\3,\3,\3,\7,\u0224\n") + buf.write(",\f,\16,\u0227\13,\3,\3,\7,\u022b\n,\f,\16,\u022e\13,") + buf.write("\3,\3,\3-\3-\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\7.\u023f") + buf.write("\n.\f.\16.\u0242\13.\7.\u0244\n.\f.\16.\u0247\13.\3.\3") + buf.write(".\3/\3/\3\60\3\60\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3") + buf.write("\61\3\61\3\61\3\61\7\61\u025a\n\61\f\61\16\61\u025d\13") + buf.write("\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61") + buf.write("\7\61\u0269\n\61\f\61\16\61\u026c\13\61\3\61\3\61\3\61") + buf.write("\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\7\62") + buf.write("\u027b\n\62\f\62\16\62\u027e\13\62\3\62\3\62\7\62\u0282") + buf.write("\n\62\f\62\16\62\u0285\13\62\3\62\3\62\3\63\3\63\3\64") + buf.write("\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64") + buf.write("\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64") + buf.write("\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64") + buf.write("\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64") + buf.write("\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64") + buf.write("\3\64\5\64\u02c4\n\64\3\64\3\64\3\64\3\64\3\64\3\64\3") + buf.write("\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64") + buf.write("\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64") + buf.write("\5\64\u02e2\n\64\3\65\3\65\3\66\3\66\3\67\3\67\38\38\3") + buf.write("8\38\38\38\38\38\78\u02f2\n8\f8\168\u02f5\138\38\38\7") + buf.write("8\u02f9\n8\f8\168\u02fc\138\38\38\39\39\3:\3:\3:\3:\3") + buf.write(":\5:\u0307\n:\3:\3:\3;\3;\3;\3;\3;\3;\3;\3;\3;\3;\3;\5") + buf.write(";\u0316\n;\3;\3;\3<\3<\3<\3=\3=\3=\3>\3>\3?\3?\3@\3@\3") + buf.write("A\3A\3B\3B\3C\3C\3D\3D\3D\3D\3D\3D\3D\7D\u0333\nD\fD\16") + buf.write("D\u0336\13D\3D\3D\7D\u033a\nD\fD\16D\u033d\13D\3D\3D\3") + buf.write("E\3E\5E\u0343\nE\3F\3F\3G\3G\5G\u0349\nG\3H\3H\3I\3I\3") + buf.write("I\2\2J\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \"$&(*,") + buf.write(".\60\62\64\668:<>@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~\u0080") + buf.write("\u0082\u0084\u0086\u0088\u008a\u008c\u008e\u0090\2\2\2") + buf.write("\u0345\2\u0092\3\2\2\2\4\u00b7\3\2\2\2\6\u00bc\3\2\2\2") + buf.write("\b\u00c1\3\2\2\2\n\u00c7\3\2\2\2\f\u00cc\3\2\2\2\16\u00e5") + buf.write("\3\2\2\2\20\u00e7\3\2\2\2\22\u00e9\3\2\2\2\24\u00eb\3") + buf.write("\2\2\2\26\u00f5\3\2\2\2\30\u010a\3\2\2\2\32\u010c\3\2") + buf.write("\2\2\34\u014d\3\2\2\2\36\u014f\3\2\2\2 \u0151\3\2\2\2") + buf.write("\"\u0153\3\2\2\2$\u0155\3\2\2\2&\u0157\3\2\2\2(\u0165") + buf.write("\3\2\2\2*\u0167\3\2\2\2,\u0173\3\2\2\2.\u0192\3\2\2\2") + buf.write("\60\u0194\3\2\2\2\62\u0196\3\2\2\2\64\u0198\3\2\2\2\66") + buf.write("\u01b1\3\2\2\28\u01b5\3\2\2\2:\u01b7\3\2\2\2<\u01b9\3") + buf.write("\2\2\2>\u01c4\3\2\2\2@\u01c6\3\2\2\2B\u01c8\3\2\2\2D\u01d8") + buf.write("\3\2\2\2F\u01f1\3\2\2\2H\u01f3\3\2\2\2J\u01f5\3\2\2\2") + buf.write("L\u01f7\3\2\2\2N\u0214\3\2\2\2P\u0216\3\2\2\2R\u0218\3") + buf.write("\2\2\2T\u021a\3\2\2\2V\u021c\3\2\2\2X\u0231\3\2\2\2Z\u0233") + buf.write("\3\2\2\2\\\u024a\3\2\2\2^\u024c\3\2\2\2`\u024e\3\2\2\2") + buf.write("b\u0270\3\2\2\2d\u0288\3\2\2\2f\u02e1\3\2\2\2h\u02e3\3") + buf.write("\2\2\2j\u02e5\3\2\2\2l\u02e7\3\2\2\2n\u02e9\3\2\2\2p\u02ff") + buf.write("\3\2\2\2r\u0301\3\2\2\2t\u030a\3\2\2\2v\u0319\3\2\2\2") + buf.write("x\u031c\3\2\2\2z\u031f\3\2\2\2|\u0321\3\2\2\2~\u0323\3") + buf.write("\2\2\2\u0080\u0325\3\2\2\2\u0082\u0327\3\2\2\2\u0084\u0329") + buf.write("\3\2\2\2\u0086\u032b\3\2\2\2\u0088\u0342\3\2\2\2\u008a") + buf.write("\u0344\3\2\2\2\u008c\u0348\3\2\2\2\u008e\u034a\3\2\2\2") + buf.write("\u0090\u034c\3\2\2\2\u0092\u0093\7\3\2\2\u0093\u0094\7") + buf.write("\4\2\2\u0094\u0095\5\4\3\2\u0095\u0096\5\6\4\2\u0096\u0098") + buf.write("\5\b\5\2\u0097\u0099\5\n\6\2\u0098\u0097\3\2\2\2\u0098") + buf.write("\u0099\3\2\2\2\u0099\u009a\3\2\2\2\u009a\u009c\5\f\7\2") + buf.write("\u009b\u009d\5,\27\2\u009c\u009b\3\2\2\2\u009c\u009d\3") + buf.write("\2\2\2\u009d\u009e\3\2\2\2\u009e\u00a0\5\64\33\2\u009f") + buf.write("\u00a1\5B\"\2\u00a0\u009f\3\2\2\2\u00a0\u00a1\3\2\2\2") + buf.write("\u00a1\u00a2\3\2\2\2\u00a2\u00a4\5L\'\2\u00a3\u00a5\5") + buf.write("V,\2\u00a4\u00a3\3\2\2\2\u00a4\u00a5\3\2\2\2\u00a5\u00a7") + buf.write("\3\2\2\2\u00a6\u00a8\5Z.\2\u00a7\u00a6\3\2\2\2\u00a7\u00a8") + buf.write("\3\2\2\2\u00a8\u00aa\3\2\2\2\u00a9\u00ab\5`\61\2\u00aa") + buf.write("\u00a9\3\2\2\2\u00aa\u00ab\3\2\2\2\u00ab\u00ac\3\2\2\2") + buf.write("\u00ac\u00ad\5\24\13\2\u00ad\u00af\5b\62\2\u00ae\u00b0") + buf.write("\5D#\2\u00af\u00ae\3\2\2\2\u00af\u00b0\3\2\2\2\u00b0\u00b2") + buf.write("\3\2\2\2\u00b1\u00b3\5n8\2\u00b2\u00b1\3\2\2\2\u00b2\u00b3") + buf.write("\3\2\2\2\u00b3\u00b5\3\2\2\2\u00b4\u00b6\5\u0086D\2\u00b5") + buf.write("\u00b4\3\2\2\2\u00b5\u00b6\3\2\2\2\u00b6\3\3\2\2\2\u00b7") + buf.write("\u00b8\7\5\2\2\u00b8\u00b9\7\6\2\2\u00b9\u00ba\5\u008e") + buf.write("H\2\u00ba\u00bb\7\4\2\2\u00bb\5\3\2\2\2\u00bc\u00bd\7") + buf.write("\7\2\2\u00bd\u00be\7\6\2\2\u00be\u00bf\5\u008eH\2\u00bf") + buf.write("\u00c0\7\4\2\2\u00c0\7\3\2\2\2\u00c1\u00c2\7\b\2\2\u00c2") + buf.write("\u00c3\7\6\2\2\u00c3\u00c4\5\u008cG\2\u00c4\u00c5\7\t") + buf.write("\2\2\u00c5\u00c6\7\4\2\2\u00c6\t\3\2\2\2\u00c7\u00c8\7") + buf.write("\n\2\2\u00c8\u00c9\7\6\2\2\u00c9\u00ca\5\u0090I\2\u00ca") + buf.write("\u00cb\7\4\2\2\u00cb\13\3\2\2\2\u00cc\u00cd\7\13\2\2\u00cd") + buf.write("\u00ce\7\f\2\2\u00ce\u00cf\7\r\2\2\u00cf\u00d0\7\16\2") + buf.write("\2\u00d0\u00d1\5\16\b\2\u00d1\u00d2\7\17\2\2\u00d2\u00d3") + buf.write("\5\20\t\2\u00d3\u00d4\7\20\2\2\u00d4\u00d5\7\17\2\2\u00d5") + buf.write("\u00d6\5\22\n\2\u00d6\u00d7\7\20\2\2\u00d7\u00d8\7\4\2") + buf.write("\2\u00d8\u00d9\7\21\2\2\u00d9\u00da\7\16\2\2\u00da\u00df") + buf.write("\5\16\b\2\u00db\u00dc\7\17\2\2\u00dc\u00de\5\16\b\2\u00dd") + buf.write("\u00db\3\2\2\2\u00de\u00e1\3\2\2\2\u00df\u00dd\3\2\2\2") + buf.write("\u00df\u00e0\3\2\2\2\u00e0\u00e2\3\2\2\2\u00e1\u00df\3") + buf.write("\2\2\2\u00e2\u00e3\7\4\2\2\u00e3\u00e4\7\22\2\2\u00e4") + buf.write("\r\3\2\2\2\u00e5\u00e6\5\u0090I\2\u00e6\17\3\2\2\2\u00e7") + buf.write("\u00e8\5\u008cG\2\u00e8\21\3\2\2\2\u00e9\u00ea\5\u008c") + buf.write("G\2\u00ea\23\3\2\2\2\u00eb\u00ec\7\23\2\2\u00ec\u00f0") + buf.write("\7\f\2\2\u00ed\u00ef\5\26\f\2\u00ee\u00ed\3\2\2\2\u00ef") + buf.write("\u00f2\3\2\2\2\u00f0\u00ee\3\2\2\2\u00f0\u00f1\3\2\2\2") + buf.write("\u00f1\u00f3\3\2\2\2\u00f2\u00f0\3\2\2\2\u00f3\u00f4\7") + buf.write("\22\2\2\u00f4\25\3\2\2\2\u00f5\u00f6\5\16\b\2\u00f6\u00f7") + buf.write("\7\f\2\2\u00f7\u00f8\7\24\2\2\u00f8\u00f9\7\6\2\2\u00f9") + buf.write("\u00fa\5\30\r\2\u00fa\u00fb\7\4\2\2\u00fb\u00fc\7\25\2") + buf.write("\2\u00fc\u00fd\7\6\2\2\u00fd\u00fe\5\32\16\2\u00fe\u0104") + buf.write("\7\4\2\2\u00ff\u0100\7\26\2\2\u0100\u0101\7\6\2\2\u0101") + buf.write("\u0102\5\32\16\2\u0102\u0103\7\4\2\2\u0103\u0105\3\2\2") + buf.write("\2\u0104\u00ff\3\2\2\2\u0104\u0105\3\2\2\2\u0105\u0106") + buf.write("\3\2\2\2\u0106\u0107\5\34\17\2\u0107\u0108\7\4\2\2\u0108") + buf.write("\u0109\7\22\2\2\u0109\27\3\2\2\2\u010a\u010b\5\u008eH") + buf.write("\2\u010b\31\3\2\2\2\u010c\u010d\5\u0088E\2\u010d\33\3") + buf.write("\2\2\2\u010e\u010f\7\27\2\2\u010f\u0110\7\6\2\2\u0110") + buf.write("\u0111\5\36\20\2\u0111\u0112\7\17\2\2\u0112\u0115\5 \21") + buf.write("\2\u0113\u0114\7\17\2\2\u0114\u0116\5\"\22\2\u0115\u0113") + buf.write("\3\2\2\2\u0115\u0116\3\2\2\2\u0116\u0117\3\2\2\2\u0117") + buf.write("\u0118\7\4\2\2\u0118\u0119\7\30\2\2\u0119\u011a\7\6\2") + buf.write("\2\u011a\u011b\5$\23\2\u011b\u0128\7\4\2\2\u011c\u011d") + buf.write("\7\31\2\2\u011d\u011e\7\6\2\2\u011e\u0123\5$\23\2\u011f") + buf.write("\u0120\7\17\2\2\u0120\u0122\5$\23\2\u0121\u011f\3\2\2") + buf.write("\2\u0122\u0125\3\2\2\2\u0123\u0121\3\2\2\2\u0123\u0124") + buf.write("\3\2\2\2\u0124\u0126\3\2\2\2\u0125\u0123\3\2\2\2\u0126") + buf.write("\u0127\7\4\2\2\u0127\u0129\3\2\2\2\u0128\u011c\3\2\2\2") + buf.write("\u0128\u0129\3\2\2\2\u0129\u0130\3\2\2\2\u012a\u012b\7") + buf.write("\32\2\2\u012b\u012c\7\6\2\2\u012c\u012d\5\u008cG\2\u012d") + buf.write("\u012e\7\20\2\2\u012e\u012f\7\4\2\2\u012f\u0131\3\2\2") + buf.write("\2\u0130\u012a\3\2\2\2\u0130\u0131\3\2\2\2\u0131\u0138") + buf.write("\3\2\2\2\u0132\u0133\7\33\2\2\u0133\u0134\7\6\2\2\u0134") + buf.write("\u0135\5\u008cG\2\u0135\u0136\7\20\2\2\u0136\u0137\7\4") + buf.write("\2\2\u0137\u0139\3\2\2\2\u0138\u0132\3\2\2\2\u0138\u0139") + buf.write("\3\2\2\2\u0139\u0140\3\2\2\2\u013a\u013b\7\34\2\2\u013b") + buf.write("\u013c\7\6\2\2\u013c\u013d\5\u008cG\2\u013d\u013e\7\20") + buf.write("\2\2\u013e\u013f\7\4\2\2\u013f\u0141\3\2\2\2\u0140\u013a") + buf.write("\3\2\2\2\u0140\u0141\3\2\2\2\u0141\u0148\3\2\2\2\u0142") + buf.write("\u0143\7\35\2\2\u0143\u0144\7\6\2\2\u0144\u0145\5\u008c") + buf.write("G\2\u0145\u0146\7\20\2\2\u0146\u0147\7\4\2\2\u0147\u0149") + buf.write("\3\2\2\2\u0148\u0142\3\2\2\2\u0148\u0149\3\2\2\2\u0149") + buf.write("\u014a\3\2\2\2\u014a\u014b\5&\24\2\u014b\u014e\3\2\2\2") + buf.write("\u014c\u014e\5*\26\2\u014d\u010e\3\2\2\2\u014d\u014c\3") + buf.write("\2\2\2\u014e\35\3\2\2\2\u014f\u0150\5\u0088E\2\u0150\37") + buf.write("\3\2\2\2\u0151\u0152\5\u0088E\2\u0152!\3\2\2\2\u0153\u0154") + buf.write("\5\u0088E\2\u0154#\3\2\2\2\u0155\u0156\5\u0090I\2\u0156") + buf.write("%\3\2\2\2\u0157\u0158\7\36\2\2\u0158\u0160\7\f\2\2\u0159") + buf.write("\u015a\5N(\2\u015a\u015b\7\6\2\2\u015b\u015c\5(\25\2\u015c") + buf.write("\u015d\7\4\2\2\u015d\u015f\3\2\2\2\u015e\u0159\3\2\2\2") + buf.write("\u015f\u0162\3\2\2\2\u0160\u015e\3\2\2\2\u0160\u0161\3") + buf.write("\2\2\2\u0161\u0163\3\2\2\2\u0162\u0160\3\2\2\2\u0163\u0164") + buf.write("\7\22\2\2\u0164\'\3\2\2\2\u0165\u0166\5\u0088E\2\u0166") + buf.write(")\3\2\2\2\u0167\u0168\7\36\2\2\u0168\u016e\7\f\2\2\u0169") + buf.write("\u016a\5N(\2\u016a\u016b\7\4\2\2\u016b\u016d\3\2\2\2\u016c") + buf.write("\u0169\3\2\2\2\u016d\u0170\3\2\2\2\u016e\u016c\3\2\2\2") + buf.write("\u016e\u016f\3\2\2\2\u016f\u0171\3\2\2\2\u0170\u016e\3") + buf.write("\2\2\2\u0171\u0172\7\22\2\2\u0172+\3\2\2\2\u0173\u0174") + buf.write("\7\37\2\2\u0174\u018d\7\f\2\2\u0175\u0176\7 \2\2\u0176") + buf.write("\u0177\5.\30\2\u0177\u0186\7\f\2\2\u0178\u0179\5\60\31") + buf.write("\2\u0179\u017a\7\f\2\2\u017a\u017f\5\62\32\2\u017b\u017c") + buf.write("\7\17\2\2\u017c\u017e\5\62\32\2\u017d\u017b\3\2\2\2\u017e") + buf.write("\u0181\3\2\2\2\u017f\u017d\3\2\2\2\u017f\u0180\3\2\2\2") + buf.write("\u0180\u0182\3\2\2\2\u0181\u017f\3\2\2\2\u0182\u0183\7") + buf.write("\4\2\2\u0183\u0185\3\2\2\2\u0184\u0178\3\2\2\2\u0185\u0188") + buf.write("\3\2\2\2\u0186\u0184\3\2\2\2\u0186\u0187\3\2\2\2\u0187") + buf.write("\u0189\3\2\2\2\u0188\u0186\3\2\2\2\u0189\u018a\7\22\2") + buf.write("\2\u018a\u018c\3\2\2\2\u018b\u0175\3\2\2\2\u018c\u018f") + buf.write("\3\2\2\2\u018d\u018b\3\2\2\2\u018d\u018e\3\2\2\2\u018e") + buf.write("\u0190\3\2\2\2\u018f\u018d\3\2\2\2\u0190\u0191\7\22\2") + buf.write("\2\u0191-\3\2\2\2\u0192\u0193\5\u0090I\2\u0193/\3\2\2") + buf.write("\2\u0194\u0195\5\u0090I\2\u0195\61\3\2\2\2\u0196\u0197") + buf.write("\5\u0090I\2\u0197\63\3\2\2\2\u0198\u0199\7!\2\2\u0199") + buf.write("\u01ac\7\f\2\2\u019a\u019b\5$\23\2\u019b\u019c\7\16\2") + buf.write("\2\u019c\u019d\5\66\34\2\u019d\u019e\7\17\2\2\u019e\u019f") + buf.write("\58\35\2\u019f\u01a0\7\17\2\2\u01a0\u01a5\5> \2\u01a1") + buf.write("\u01a2\7\17\2\2\u01a2\u01a4\5@!\2\u01a3\u01a1\3\2\2\2") + buf.write("\u01a4\u01a7\3\2\2\2\u01a5\u01a3\3\2\2\2\u01a5\u01a6\3") + buf.write("\2\2\2\u01a6\u01a8\3\2\2\2\u01a7\u01a5\3\2\2\2\u01a8\u01a9") + buf.write("\7\4\2\2\u01a9\u01ab\3\2\2\2\u01aa\u019a\3\2\2\2\u01ab") + buf.write("\u01ae\3\2\2\2\u01ac\u01aa\3\2\2\2\u01ac\u01ad\3\2\2\2") + buf.write("\u01ad\u01af\3\2\2\2\u01ae\u01ac\3\2\2\2\u01af\u01b0\7") + buf.write("\22\2\2\u01b0\65\3\2\2\2\u01b1\u01b2\5\u0088E\2\u01b2") + buf.write("\67\3\2\2\2\u01b3\u01b6\5:\36\2\u01b4\u01b6\5<\37\2\u01b5") + buf.write("\u01b3\3\2\2\2\u01b5\u01b4\3\2\2\2\u01b69\3\2\2\2\u01b7") + buf.write("\u01b8\5\u0088E\2\u01b8;\3\2\2\2\u01b9\u01ba\7\f\2\2\u01ba") + buf.write("\u01bf\5\u0088E\2\u01bb\u01bc\7\17\2\2\u01bc\u01be\5\u0088") + buf.write("E\2\u01bd\u01bb\3\2\2\2\u01be\u01c1\3\2\2\2\u01bf\u01bd") + buf.write("\3\2\2\2\u01bf\u01c0\3\2\2\2\u01c0\u01c2\3\2\2\2\u01c1") + buf.write("\u01bf\3\2\2\2\u01c2\u01c3\7\22\2\2\u01c3=\3\2\2\2\u01c4") + buf.write("\u01c5\5\u0090I\2\u01c5?\3\2\2\2\u01c6\u01c7\5\u0090I") + buf.write("\2\u01c7A\3\2\2\2\u01c8\u01c9\7\"\2\2\u01c9\u01d3\7\f") + buf.write("\2\2\u01ca\u01cb\5\u0090I\2\u01cb\u01cc\7\16\2\2\u01cc") + buf.write("\u01cd\5\u0088E\2\u01cd\u01ce\7\17\2\2\u01ce\u01cf\5\u0088") + buf.write("E\2\u01cf\u01d0\7\4\2\2\u01d0\u01d2\3\2\2\2\u01d1\u01ca") + buf.write("\3\2\2\2\u01d2\u01d5\3\2\2\2\u01d3\u01d1\3\2\2\2\u01d3") + buf.write("\u01d4\3\2\2\2\u01d4\u01d6\3\2\2\2\u01d5\u01d3\3\2\2\2") + buf.write("\u01d6\u01d7\7\22\2\2\u01d7C\3\2\2\2\u01d8\u01d9\7#\2") + buf.write("\2\u01d9\u01ec\7\f\2\2\u01da\u01db\5F$\2\u01db\u01dc\7") + buf.write("\16\2\2\u01dc\u01dd\5H%\2\u01dd\u01e5\7\f\2\2\u01de\u01df") + buf.write("\5$\23\2\u01df\u01e0\7\17\2\2\u01e0\u01e1\5J&\2\u01e1") + buf.write("\u01e2\7\4\2\2\u01e2\u01e4\3\2\2\2\u01e3\u01de\3\2\2\2") + buf.write("\u01e4\u01e7\3\2\2\2\u01e5\u01e3\3\2\2\2\u01e5\u01e6\3") + buf.write("\2\2\2\u01e6\u01e8\3\2\2\2\u01e7\u01e5\3\2\2\2\u01e8\u01e9") + buf.write("\7\22\2\2\u01e9\u01eb\3\2\2\2\u01ea\u01da\3\2\2\2\u01eb") + buf.write("\u01ee\3\2\2\2\u01ec\u01ea\3\2\2\2\u01ec\u01ed\3\2\2\2") + buf.write("\u01ed\u01ef\3\2\2\2\u01ee\u01ec\3\2\2\2\u01ef\u01f0\7") + buf.write("\22\2\2\u01f0E\3\2\2\2\u01f1\u01f2\5\u0090I\2\u01f2G\3") + buf.write("\2\2\2\u01f3\u01f4\5\u0088E\2\u01f4I\3\2\2\2\u01f5\u01f6") + buf.write("\5\u0088E\2\u01f6K\3\2\2\2\u01f7\u01f8\7$\2\2\u01f8\u020f") + buf.write("\7\f\2\2\u01f9\u01fa\5N(\2\u01fa\u01fb\7\16\2\2\u01fb") + buf.write("\u01fc\5P)\2\u01fc\u01fd\7\17\2\2\u01fd\u01fe\5> \2\u01fe") + buf.write("\u01ff\7\17\2\2\u01ff\u0200\5R*\2\u0200\u0208\7\f\2\2") + buf.write("\u0201\u0202\5$\23\2\u0202\u0203\7\17\2\2\u0203\u0204") + buf.write("\5T+\2\u0204\u0205\7\4\2\2\u0205\u0207\3\2\2\2\u0206\u0201") + buf.write("\3\2\2\2\u0207\u020a\3\2\2\2\u0208\u0206\3\2\2\2\u0208") + buf.write("\u0209\3\2\2\2\u0209\u020b\3\2\2\2\u020a\u0208\3\2\2\2") + buf.write("\u020b\u020c\7\22\2\2\u020c\u020e\3\2\2\2\u020d\u01f9") + buf.write("\3\2\2\2\u020e\u0211\3\2\2\2\u020f\u020d\3\2\2\2\u020f") + buf.write("\u0210\3\2\2\2\u0210\u0212\3\2\2\2\u0211\u020f\3\2\2\2") + buf.write("\u0212\u0213\7\22\2\2\u0213M\3\2\2\2\u0214\u0215\5\u0090") + buf.write("I\2\u0215O\3\2\2\2\u0216\u0217\5\u0088E\2\u0217Q\3\2\2") + buf.write("\2\u0218\u0219\5\u0088E\2\u0219S\3\2\2\2\u021a\u021b\5") + buf.write("\u0088E\2\u021bU\3\2\2\2\u021c\u021d\7%\2\2\u021d\u022c") + buf.write("\7\f\2\2\u021e\u021f\5X-\2\u021f\u0220\7\16\2\2\u0220") + buf.write("\u0225\5N(\2\u0221\u0222\7\17\2\2\u0222\u0224\5N(\2\u0223") + buf.write("\u0221\3\2\2\2\u0224\u0227\3\2\2\2\u0225\u0223\3\2\2\2") + buf.write("\u0225\u0226\3\2\2\2\u0226\u0228\3\2\2\2\u0227\u0225\3") + buf.write("\2\2\2\u0228\u0229\7\4\2\2\u0229\u022b\3\2\2\2\u022a\u021e") + buf.write("\3\2\2\2\u022b\u022e\3\2\2\2\u022c\u022a\3\2\2\2\u022c") + buf.write("\u022d\3\2\2\2\u022d\u022f\3\2\2\2\u022e\u022c\3\2\2\2") + buf.write("\u022f\u0230\7\22\2\2\u0230W\3\2\2\2\u0231\u0232\5\u0090") + buf.write("I\2\u0232Y\3\2\2\2\u0233\u0234\7&\2\2\u0234\u0245\7\f") + buf.write("\2\2\u0235\u0236\5\\/\2\u0236\u0237\7\16\2\2\u0237\u0238") + buf.write("\5^\60\2\u0238\u0239\7\17\2\2\u0239\u0240\5P)\2\u023a") + buf.write("\u023b\7\17\2\2\u023b\u023c\5N(\2\u023c\u023d\7\4\2\2") + buf.write("\u023d\u023f\3\2\2\2\u023e\u023a\3\2\2\2\u023f\u0242\3") + buf.write("\2\2\2\u0240\u023e\3\2\2\2\u0240\u0241\3\2\2\2\u0241\u0244") + buf.write("\3\2\2\2\u0242\u0240\3\2\2\2\u0243\u0235\3\2\2\2\u0244") + buf.write("\u0247\3\2\2\2\u0245\u0243\3\2\2\2\u0245\u0246\3\2\2\2") + buf.write("\u0246\u0248\3\2\2\2\u0247\u0245\3\2\2\2\u0248\u0249\7") + buf.write("\22\2\2\u0249[\3\2\2\2\u024a\u024b\5\u0090I\2\u024b]\3") + buf.write("\2\2\2\u024c\u024d\5\u0090I\2\u024d_\3\2\2\2\u024e\u024f") + buf.write("\7\'\2\2\u024f\u0250\7\f\2\2\u0250\u0251\7(\2\2\u0251") + buf.write("\u0252\7\16\2\2\u0252\u0253\5\u0088E\2\u0253\u025b\7\f") + buf.write("\2\2\u0254\u0255\5\u0090I\2\u0255\u0256\7\17\2\2\u0256") + buf.write("\u0257\5\u0088E\2\u0257\u0258\7\4\2\2\u0258\u025a\3\2") + buf.write("\2\2\u0259\u0254\3\2\2\2\u025a\u025d\3\2\2\2\u025b\u0259") + buf.write("\3\2\2\2\u025b\u025c\3\2\2\2\u025c\u025e\3\2\2\2\u025d") + buf.write("\u025b\3\2\2\2\u025e\u025f\7\22\2\2\u025f\u0260\7)\2\2") + buf.write("\u0260\u0261\7\16\2\2\u0261\u0262\5\u0088E\2\u0262\u026a") + buf.write("\7\f\2\2\u0263\u0264\5\u0090I\2\u0264\u0265\7\17\2\2\u0265") + buf.write("\u0266\5\u0088E\2\u0266\u0267\7\4\2\2\u0267\u0269\3\2") + buf.write("\2\2\u0268\u0263\3\2\2\2\u0269\u026c\3\2\2\2\u026a\u0268") + buf.write("\3\2\2\2\u026a\u026b\3\2\2\2\u026b\u026d\3\2\2\2\u026c") + buf.write("\u026a\3\2\2\2\u026d\u026e\7\22\2\2\u026e\u026f\7\22\2") + buf.write("\2\u026fa\3\2\2\2\u0270\u0271\7*\2\2\u0271\u0283\7\f\2") + buf.write("\2\u0272\u0273\5d\63\2\u0273\u027c\7\f\2\2\u0274\u0275") + buf.write("\5f\64\2\u0275\u0276\7+\2\2\u0276\u0277\5l\67\2\u0277") + buf.write("\u0278\7\20\2\2\u0278\u0279\7\4\2\2\u0279\u027b\3\2\2") + buf.write("\2\u027a\u0274\3\2\2\2\u027b\u027e\3\2\2\2\u027c\u027a") + buf.write("\3\2\2\2\u027c\u027d\3\2\2\2\u027d\u027f\3\2\2\2\u027e") + buf.write("\u027c\3\2\2\2\u027f\u0280\7\22\2\2\u0280\u0282\3\2\2") + buf.write("\2\u0281\u0272\3\2\2\2\u0282\u0285\3\2\2\2\u0283\u0281") + buf.write("\3\2\2\2\u0283\u0284\3\2\2\2\u0284\u0286\3\2\2\2\u0285") + buf.write("\u0283\3\2\2\2\u0286\u0287\7\22\2\2\u0287c\3\2\2\2\u0288") + buf.write("\u0289\5\u0090I\2\u0289e\3\2\2\2\u028a\u02e2\5N(\2\u028b") + buf.write("\u02e2\7(\2\2\u028c\u02e2\7)\2\2\u028d\u028e\7,\2\2\u028e") + buf.write("\u028f\7\f\2\2\u028f\u0290\5\16\b\2\u0290\u0291\7\22\2") + buf.write("\2\u0291\u02e2\3\2\2\2\u0292\u0293\7-\2\2\u0293\u0294") + buf.write("\7\f\2\2\u0294\u0295\5\u0088E\2\u0295\u0296\7\17\2\2\u0296") + buf.write("\u0297\5\u0088E\2\u0297\u0298\7\17\2\2\u0298\u0299\5\u0088") + buf.write("E\2\u0299\u029a\7\17\2\2\u029a\u029b\5\u0088E\2\u029b") + buf.write("\u029c\7\17\2\2\u029c\u029d\5\u0088E\2\u029d\u029e\7\17") + buf.write("\2\2\u029e\u029f\5\u0088E\2\u029f\u02a0\7\22\2\2\u02a0") + buf.write("\u02e2\3\2\2\2\u02a1\u02a2\7.\2\2\u02a2\u02a3\7\f\2\2") + buf.write("\u02a3\u02a4\5\16\b\2\u02a4\u02a5\7\17\2\2\u02a5\u02a6") + buf.write("\5\u0088E\2\u02a6\u02a7\7\17\2\2\u02a7\u02a8\5\u0088E") + buf.write("\2\u02a8\u02a9\7\17\2\2\u02a9\u02aa\5\u0088E\2\u02aa\u02ab") + buf.write("\7\17\2\2\u02ab\u02ac\5\u0088E\2\u02ac\u02ad\7\17\2\2") + buf.write("\u02ad\u02ae\5\u0088E\2\u02ae\u02af\7\22\2\2\u02af\u02e2") + buf.write("\3\2\2\2\u02b0\u02b1\7/\2\2\u02b1\u02b2\7\f\2\2\u02b2") + buf.write("\u02b3\5\16\b\2\u02b3\u02b4\7\22\2\2\u02b4\u02e2\3\2\2") + buf.write("\2\u02b5\u02b6\7\60\2\2\u02b6\u02b7\7\f\2\2\u02b7\u02b8") + buf.write("\5\16\b\2\u02b8\u02b9\7\17\2\2\u02b9\u02c3\5h\65\2\u02ba") + buf.write("\u02bb\7\17\2\2\u02bb\u02bc\5j\66\2\u02bc\u02bd\7\17\2") + buf.write("\2\u02bd\u02be\5j\66\2\u02be\u02bf\7\17\2\2\u02bf\u02c0") + buf.write("\5j\66\2\u02c0\u02c1\7\17\2\2\u02c1\u02c2\5j\66\2\u02c2") + buf.write("\u02c4\3\2\2\2\u02c3\u02ba\3\2\2\2\u02c3\u02c4\3\2\2\2") + buf.write("\u02c4\u02c5\3\2\2\2\u02c5\u02c6\7\22\2\2\u02c6\u02e2") + buf.write("\3\2\2\2\u02c7\u02c8\7\61\2\2\u02c8\u02c9\7\f\2\2\u02c9") + buf.write("\u02ca\5\u0088E\2\u02ca\u02cb\7\17\2\2\u02cb\u02cc\5\u0088") + buf.write("E\2\u02cc\u02cd\7\17\2\2\u02cd\u02ce\5\u0088E\2\u02ce") + buf.write("\u02cf\7\17\2\2\u02cf\u02d0\5\u0088E\2\u02d0\u02d1\7\17") + buf.write("\2\2\u02d1\u02d2\5\u0088E\2\u02d2\u02d3\7\17\2\2\u02d3") + buf.write("\u02d4\5\u0088E\2\u02d4\u02d5\7\17\2\2\u02d5\u02d6\5\u0088") + buf.write("E\2\u02d6\u02d7\7\17\2\2\u02d7\u02d8\5\u0088E\2\u02d8") + buf.write("\u02d9\7\22\2\2\u02d9\u02e2\3\2\2\2\u02da\u02db\7\62\2") + buf.write("\2\u02db\u02dc\7\f\2\2\u02dc\u02dd\5\16\b\2\u02dd\u02de") + buf.write("\7\17\2\2\u02de\u02df\5N(\2\u02df\u02e0\7\22\2\2\u02e0") + buf.write("\u02e2\3\2\2\2\u02e1\u028a\3\2\2\2\u02e1\u028b\3\2\2\2") + buf.write("\u02e1\u028c\3\2\2\2\u02e1\u028d\3\2\2\2\u02e1\u0292\3") + buf.write("\2\2\2\u02e1\u02a1\3\2\2\2\u02e1\u02b0\3\2\2\2\u02e1\u02b5") + buf.write("\3\2\2\2\u02e1\u02c7\3\2\2\2\u02e1\u02da\3\2\2\2\u02e2") + buf.write("g\3\2\2\2\u02e3\u02e4\5\u0088E\2\u02e4i\3\2\2\2\u02e5") + buf.write("\u02e6\5\u0088E\2\u02e6k\3\2\2\2\u02e7\u02e8\5\u008cG") + buf.write("\2\u02e8m\3\2\2\2\u02e9\u02ea\7\63\2\2\u02ea\u02fa\7\f") + buf.write("\2\2\u02eb\u02ec\5p9\2\u02ec\u02f3\7\f\2\2\u02ed\u02f2") + buf.write("\5r:\2\u02ee\u02f2\5t;\2\u02ef\u02f2\5v<\2\u02f0\u02f2") + buf.write("\5x=\2\u02f1\u02ed\3\2\2\2\u02f1\u02ee\3\2\2\2\u02f1\u02ef") + buf.write("\3\2\2\2\u02f1\u02f0\3\2\2\2\u02f2\u02f5\3\2\2\2\u02f3") + buf.write("\u02f1\3\2\2\2\u02f3\u02f4\3\2\2\2\u02f4\u02f6\3\2\2\2") + buf.write("\u02f5\u02f3\3\2\2\2\u02f6\u02f7\7\22\2\2\u02f7\u02f9") + buf.write("\3\2\2\2\u02f8\u02eb\3\2\2\2\u02f9\u02fc\3\2\2\2\u02fa") + buf.write("\u02f8\3\2\2\2\u02fa\u02fb\3\2\2\2\u02fb\u02fd\3\2\2\2") + buf.write("\u02fc\u02fa\3\2\2\2\u02fd\u02fe\7\22\2\2\u02feo\3\2\2") + buf.write("\2\u02ff\u0300\5\u0090I\2\u0300q\3\2\2\2\u0301\u0302\7") + buf.write("\64\2\2\u0302\u0303\7\17\2\2\u0303\u0306\5z>\2\u0304\u0305") + buf.write("\7\17\2\2\u0305\u0307\5\u0084C\2\u0306\u0304\3\2\2\2\u0306") + buf.write("\u0307\3\2\2\2\u0307\u0308\3\2\2\2\u0308\u0309\7\4\2\2") + buf.write("\u0309s\3\2\2\2\u030a\u030b\7\65\2\2\u030b\u030c\7\17") + buf.write("\2\2\u030c\u030d\5|?\2\u030d\u030e\7\17\2\2\u030e\u030f") + buf.write("\5~@\2\u030f\u0310\7\17\2\2\u0310\u0311\5\u0080A\2\u0311") + buf.write("\u0312\7\17\2\2\u0312\u0315\5\u0082B\2\u0313\u0314\7\17") + buf.write("\2\2\u0314\u0316\5\u0084C\2\u0315\u0313\3\2\2\2\u0315") + buf.write("\u0316\3\2\2\2\u0316\u0317\3\2\2\2\u0317\u0318\7\4\2\2") + buf.write("\u0318u\3\2\2\2\u0319\u031a\7\66\2\2\u031a\u031b\7\4\2") + buf.write("\2\u031bw\3\2\2\2\u031c\u031d\7\67\2\2\u031d\u031e\7\4") + buf.write("\2\2\u031ey\3\2\2\2\u031f\u0320\5\u0088E\2\u0320{\3\2") + buf.write("\2\2\u0321\u0322\5\u0088E\2\u0322}\3\2\2\2\u0323\u0324") + buf.write("\5\u0088E\2\u0324\177\3\2\2\2\u0325\u0326\5\u008cG\2\u0326") + buf.write("\u0081\3\2\2\2\u0327\u0328\5\u008cG\2\u0328\u0083\3\2") + buf.write("\2\2\u0329\u032a\5\u008eH\2\u032a\u0085\3\2\2\2\u032b") + buf.write("\u032c\78\2\2\u032c\u033b\7\f\2\2\u032d\u032e\5p9\2\u032e") + buf.write("\u032f\7\16\2\2\u032f\u0334\5$\23\2\u0330\u0331\7\17\2") + buf.write("\2\u0331\u0333\5$\23\2\u0332\u0330\3\2\2\2\u0333\u0336") + buf.write("\3\2\2\2\u0334\u0332\3\2\2\2\u0334\u0335\3\2\2\2\u0335") + buf.write("\u0337\3\2\2\2\u0336\u0334\3\2\2\2\u0337\u0338\7\4\2\2") + buf.write("\u0338\u033a\3\2\2\2\u0339\u032d\3\2\2\2\u033a\u033d\3") + buf.write("\2\2\2\u033b\u0339\3\2\2\2\u033b\u033c\3\2\2\2\u033c\u033e") + buf.write("\3\2\2\2\u033d\u033b\3\2\2\2\u033e\u033f\7\22\2\2\u033f") + buf.write("\u0087\3\2\2\2\u0340\u0343\7;\2\2\u0341\u0343\7<\2\2\u0342") + buf.write("\u0340\3\2\2\2\u0342\u0341\3\2\2\2\u0343\u0089\3\2\2\2") + buf.write("\u0344\u0345\7:\2\2\u0345\u008b\3\2\2\2\u0346\u0349\5") + buf.write("\u0088E\2\u0347\u0349\5\u008aF\2\u0348\u0346\3\2\2\2\u0348") + buf.write("\u0347\3\2\2\2\u0349\u008d\3\2\2\2\u034a\u034b\7?\2\2") + buf.write("\u034b\u008f\3\2\2\2\u034c\u034d\79\2\2\u034d\u0091\3") + buf.write("\2\2\2\67\u0098\u009c\u00a0\u00a4\u00a7\u00aa\u00af\u00b2") + buf.write("\u00b5\u00df\u00f0\u0104\u0115\u0123\u0128\u0130\u0138") + buf.write("\u0140\u0148\u014d\u0160\u016e\u017f\u0186\u018d\u01a5") + buf.write("\u01ac\u01b5\u01bf\u01d3\u01e5\u01ec\u0208\u020f\u0225") + buf.write("\u022c\u0240\u0245\u025b\u026a\u027c\u0283\u02c3\u02e1") + buf.write("\u02f1\u02f3\u02fa\u0306\u0315\u0334\u033b\u0342\u0348") return buf.getvalue() @@ -438,7 +438,8 @@ class ldfParser ( Parser ): "", "", "", "", "", "", "", "", "", "", "", "C_IDENTIFIER", - "FLOAT", "INT", "WS", "COMMENT", "STRING", "SIGN" ] + "FLOAT", "INT", "HEX", "WS", "COMMENT", "STRING", + "SIGN" ] RULE_lin_description_file = 0 RULE_lin_protocol_version_def = 1 @@ -450,88 +451,90 @@ class ldfParser ( Parser ): RULE_time_base = 7 RULE_jitter = 8 RULE_node_attributes_def = 9 - RULE_protocol_version = 10 - RULE_diag_address = 11 - RULE_attributes_def = 12 - RULE_supplier_id = 13 - RULE_function_id = 14 - RULE_variant = 15 - RULE_signal_name = 16 - RULE_configurable_frames_20_def = 17 - RULE_message_id = 18 - RULE_configurable_frames_21_def = 19 - RULE_node_composition_def = 20 - RULE_configuration_name = 21 - RULE_composite_node = 22 - RULE_logical_node = 23 - RULE_signal_def = 24 - RULE_signal_size = 25 - RULE_init_value = 26 - RULE_init_value_scalar = 27 - RULE_init_value_array = 28 - RULE_published_by = 29 - RULE_subscribed_by = 30 - RULE_diagnostic_signal_def = 31 - RULE_signal_groups_def = 32 - RULE_signal_group_name = 33 - RULE_group_size = 34 - RULE_group_offset = 35 - RULE_frame_def = 36 - RULE_frame_name = 37 - RULE_frame_id = 38 - RULE_frame_size = 39 - RULE_signal_offset = 40 - RULE_sporadic_frame_def = 41 - RULE_sporadic_frame_name = 42 - RULE_event_triggered_frame_def = 43 - RULE_event_trig_frm_name = 44 - RULE_collision_resolving_schedule_table = 45 - RULE_diag_frame_def = 46 - RULE_schedule_table_def = 47 - RULE_schedule_table_name = 48 - RULE_command = 49 - RULE_frame_index = 50 - RULE_frame_PID = 51 - RULE_frame_time = 52 - RULE_signal_encoding_type_def = 53 - RULE_signal_encoding_type_name = 54 - RULE_logical_value = 55 - RULE_physical_range = 56 - RULE_bcd_value = 57 - RULE_ascii_value = 58 - RULE_signal_value = 59 - RULE_min_value = 60 - RULE_max_value = 61 - RULE_scale = 62 - RULE_offset = 63 - RULE_text_info = 64 - RULE_signal_representation_def = 65 - RULE_intValue = 66 - RULE_floatValue = 67 - RULE_number = 68 - RULE_stringValue = 69 - RULE_identifierValue = 70 + RULE_node_attribute = 10 + RULE_protocol_version = 11 + RULE_diag_address = 12 + RULE_attributes_def = 13 + RULE_supplier_id = 14 + RULE_function_id = 15 + RULE_variant = 16 + RULE_signal_name = 17 + RULE_configurable_frames_20_def = 18 + RULE_message_id = 19 + RULE_configurable_frames_21_def = 20 + RULE_node_composition_def = 21 + RULE_configuration_name = 22 + RULE_composite_node = 23 + RULE_logical_node = 24 + RULE_signal_def = 25 + RULE_signal_size = 26 + RULE_init_value = 27 + RULE_init_value_scalar = 28 + RULE_init_value_array = 29 + RULE_published_by = 30 + RULE_subscribed_by = 31 + RULE_diagnostic_signal_def = 32 + RULE_signal_groups_def = 33 + RULE_signal_group_name = 34 + RULE_group_size = 35 + RULE_group_offset = 36 + RULE_frame_def = 37 + RULE_frame_name = 38 + RULE_frame_id = 39 + RULE_frame_size = 40 + RULE_signal_offset = 41 + RULE_sporadic_frame_def = 42 + RULE_sporadic_frame_name = 43 + RULE_event_triggered_frame_def = 44 + RULE_event_trig_frm_name = 45 + RULE_collision_resolving_schedule_table = 46 + RULE_diag_frame_def = 47 + RULE_schedule_table_def = 48 + RULE_schedule_table_name = 49 + RULE_command = 50 + RULE_frame_index = 51 + RULE_frame_PID = 52 + RULE_frame_time = 53 + RULE_signal_encoding_type_def = 54 + RULE_signal_encoding_type_name = 55 + RULE_logical_value = 56 + RULE_physical_range = 57 + RULE_bcd_value = 58 + RULE_ascii_value = 59 + RULE_signal_value = 60 + RULE_min_value = 61 + RULE_max_value = 62 + RULE_scale = 63 + RULE_offset = 64 + RULE_text_info = 65 + RULE_signal_representation_def = 66 + RULE_intValue = 67 + RULE_floatValue = 68 + RULE_number = 69 + RULE_stringValue = 70 + RULE_identifierValue = 71 ruleNames = [ "lin_description_file", "lin_protocol_version_def", "lin_language_version_def", "lin_speed_def", "channel_name_def", "node_def", "node_name", - "time_base", "jitter", "node_attributes_def", "protocol_version", - "diag_address", "attributes_def", "supplier_id", "function_id", - "variant", "signal_name", "configurable_frames_20_def", - "message_id", "configurable_frames_21_def", "node_composition_def", - "configuration_name", "composite_node", "logical_node", - "signal_def", "signal_size", "init_value", "init_value_scalar", - "init_value_array", "published_by", "subscribed_by", - "diagnostic_signal_def", "signal_groups_def", "signal_group_name", - "group_size", "group_offset", "frame_def", "frame_name", - "frame_id", "frame_size", "signal_offset", "sporadic_frame_def", - "sporadic_frame_name", "event_triggered_frame_def", "event_trig_frm_name", - "collision_resolving_schedule_table", "diag_frame_def", - "schedule_table_def", "schedule_table_name", "command", - "frame_index", "frame_PID", "frame_time", "signal_encoding_type_def", - "signal_encoding_type_name", "logical_value", "physical_range", - "bcd_value", "ascii_value", "signal_value", "min_value", - "max_value", "scale", "offset", "text_info", "signal_representation_def", - "intValue", "floatValue", "number", "stringValue", "identifierValue" ] + "time_base", "jitter", "node_attributes_def", "node_attribute", + "protocol_version", "diag_address", "attributes_def", + "supplier_id", "function_id", "variant", "signal_name", + "configurable_frames_20_def", "message_id", "configurable_frames_21_def", + "node_composition_def", "configuration_name", "composite_node", + "logical_node", "signal_def", "signal_size", "init_value", + "init_value_scalar", "init_value_array", "published_by", + "subscribed_by", "diagnostic_signal_def", "signal_groups_def", + "signal_group_name", "group_size", "group_offset", "frame_def", + "frame_name", "frame_id", "frame_size", "signal_offset", + "sporadic_frame_def", "sporadic_frame_name", "event_triggered_frame_def", + "event_trig_frm_name", "collision_resolving_schedule_table", + "diag_frame_def", "schedule_table_def", "schedule_table_name", + "command", "frame_index", "frame_PID", "frame_time", + "signal_encoding_type_def", "signal_encoding_type_name", + "logical_value", "physical_range", "bcd_value", "ascii_value", + "signal_value", "min_value", "max_value", "scale", "offset", + "text_info", "signal_representation_def", "intValue", + "floatValue", "number", "stringValue", "identifierValue" ] EOF = Token.EOF T__0=1 @@ -591,10 +594,11 @@ class ldfParser ( Parser ): C_IDENTIFIER=55 FLOAT=56 INT=57 - WS=58 - COMMENT=59 - STRING=60 - SIGN=61 + HEX=58 + WS=59 + COMMENT=60 + STRING=61 + SIGN=62 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) @@ -723,95 +727,95 @@ def lin_description_file(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 142 + self.state = 144 self.match(ldfParser.T__0) - self.state = 143 + self.state = 145 self.match(ldfParser.T__1) - self.state = 144 + self.state = 146 localctx.pv = self.lin_protocol_version_def() - self.state = 145 + self.state = 147 localctx.lv = self.lin_language_version_def() - self.state = 146 - localctx.ls = self.lin_speed_def() self.state = 148 + localctx.ls = self.lin_speed_def() + self.state = 150 self._errHandler.sync(self) _la = self._input.LA(1) if _la==ldfParser.T__7: - self.state = 147 + self.state = 149 localctx.cn = self.channel_name_def() - self.state = 150 - localctx.ndef = self.node_def() self.state = 152 + localctx.ndef = self.node_def() + self.state = 154 self._errHandler.sync(self) _la = self._input.LA(1) if _la==ldfParser.T__28: - self.state = 151 + self.state = 153 localctx.ncdef = self.node_composition_def() - self.state = 154 - localctx.sdef = self.signal_def() self.state = 156 + localctx.sdef = self.signal_def() + self.state = 158 self._errHandler.sync(self) _la = self._input.LA(1) if _la==ldfParser.T__31: - self.state = 155 + self.state = 157 localctx.dsdef = self.diagnostic_signal_def() - self.state = 158 - localctx.fdef = self.frame_def() self.state = 160 + localctx.fdef = self.frame_def() + self.state = 162 self._errHandler.sync(self) _la = self._input.LA(1) if _la==ldfParser.T__34: - self.state = 159 + self.state = 161 localctx.sfdef = self.sporadic_frame_def() - self.state = 163 + self.state = 165 self._errHandler.sync(self) _la = self._input.LA(1) if _la==ldfParser.T__35: - self.state = 162 + self.state = 164 localctx.etfdef = self.event_triggered_frame_def() - self.state = 166 + self.state = 168 self._errHandler.sync(self) _la = self._input.LA(1) if _la==ldfParser.T__36: - self.state = 165 + self.state = 167 localctx.dffdef = self.diag_frame_def() - self.state = 168 + self.state = 170 localctx.nadef = self.node_attributes_def() - self.state = 169 - localctx.stdef = self.schedule_table_def() self.state = 171 + localctx.stdef = self.schedule_table_def() + self.state = 173 self._errHandler.sync(self) _la = self._input.LA(1) if _la==ldfParser.T__32: - self.state = 170 + self.state = 172 localctx.sgdef = self.signal_groups_def() - self.state = 174 + self.state = 176 self._errHandler.sync(self) _la = self._input.LA(1) if _la==ldfParser.T__48: - self.state = 173 + self.state = 175 localctx.setdef = self.signal_encoding_type_def() - self.state = 177 + self.state = 179 self._errHandler.sync(self) _la = self._input.LA(1) if _la==ldfParser.T__53: - self.state = 176 + self.state = 178 localctx.srdef = self.signal_representation_def() @@ -861,13 +865,13 @@ def lin_protocol_version_def(self): self.enterRule(localctx, 2, self.RULE_lin_protocol_version_def) try: self.enterOuterAlt(localctx, 1) - self.state = 179 + self.state = 181 self.match(ldfParser.T__2) - self.state = 180 + self.state = 182 self.match(ldfParser.T__3) - self.state = 181 + self.state = 183 localctx.s = self.stringValue() - self.state = 182 + self.state = 184 self.match(ldfParser.T__1) except RecognitionException as re: localctx.exception = re @@ -915,13 +919,13 @@ def lin_language_version_def(self): self.enterRule(localctx, 4, self.RULE_lin_language_version_def) try: self.enterOuterAlt(localctx, 1) - self.state = 184 + self.state = 186 self.match(ldfParser.T__4) - self.state = 185 + self.state = 187 self.match(ldfParser.T__3) - self.state = 186 + self.state = 188 localctx.s = self.stringValue() - self.state = 187 + self.state = 189 self.match(ldfParser.T__1) except RecognitionException as re: localctx.exception = re @@ -969,15 +973,15 @@ def lin_speed_def(self): self.enterRule(localctx, 6, self.RULE_lin_speed_def) try: self.enterOuterAlt(localctx, 1) - self.state = 189 + self.state = 191 self.match(ldfParser.T__5) - self.state = 190 + self.state = 192 self.match(ldfParser.T__3) - self.state = 191 + self.state = 193 localctx.n = self.number() - self.state = 192 + self.state = 194 self.match(ldfParser.T__6) - self.state = 193 + self.state = 195 self.match(ldfParser.T__1) except RecognitionException as re: localctx.exception = re @@ -1025,13 +1029,13 @@ def channel_name_def(self): self.enterRule(localctx, 8, self.RULE_channel_name_def) try: self.enterOuterAlt(localctx, 1) - self.state = 195 + self.state = 197 self.match(ldfParser.T__7) - self.state = 196 + self.state = 198 self.match(ldfParser.T__3) - self.state = 197 + self.state = 199 localctx.i = self.identifierValue() - self.state = 198 + self.state = 200 self.match(ldfParser.T__1) except RecognitionException as re: localctx.exception = re @@ -1095,53 +1099,53 @@ def node_def(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 200 + self.state = 202 self.match(ldfParser.T__8) - self.state = 201 + self.state = 203 self.match(ldfParser.T__9) - self.state = 202 + self.state = 204 self.match(ldfParser.T__10) - self.state = 203 + self.state = 205 self.match(ldfParser.T__11) - self.state = 204 + self.state = 206 localctx.mname = self.node_name() - self.state = 205 + self.state = 207 self.match(ldfParser.T__12) - self.state = 206 + self.state = 208 localctx.tb = self.time_base() - self.state = 207 + self.state = 209 self.match(ldfParser.T__13) - self.state = 208 + self.state = 210 self.match(ldfParser.T__12) - self.state = 209 + self.state = 211 localctx.j = self.jitter() - self.state = 210 + self.state = 212 self.match(ldfParser.T__13) - self.state = 211 + self.state = 213 self.match(ldfParser.T__1) - self.state = 212 + self.state = 214 self.match(ldfParser.T__14) - self.state = 213 + self.state = 215 self.match(ldfParser.T__11) - self.state = 214 + self.state = 216 localctx._node_name = self.node_name() localctx.snames.append(localctx._node_name) - self.state = 219 + self.state = 221 self._errHandler.sync(self) _la = self._input.LA(1) while _la==ldfParser.T__12: - self.state = 215 + self.state = 217 self.match(ldfParser.T__12) - self.state = 216 + self.state = 218 localctx._node_name = self.node_name() localctx.snames.append(localctx._node_name) - self.state = 221 + self.state = 223 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 222 + self.state = 224 self.match(ldfParser.T__1) - self.state = 223 + self.state = 225 self.match(ldfParser.T__15) except RecognitionException as re: localctx.exception = re @@ -1189,7 +1193,7 @@ def node_name(self): self.enterRule(localctx, 12, self.RULE_node_name) try: self.enterOuterAlt(localctx, 1) - self.state = 225 + self.state = 227 localctx.i = self.identifierValue() except RecognitionException as re: localctx.exception = re @@ -1237,7 +1241,7 @@ def time_base(self): self.enterRule(localctx, 14, self.RULE_time_base) try: self.enterOuterAlt(localctx, 1) - self.state = 227 + self.state = 229 localctx.n = self.number() except RecognitionException as re: localctx.exception = re @@ -1285,7 +1289,7 @@ def jitter(self): self.enterRule(localctx, 16, self.RULE_jitter) try: self.enterOuterAlt(localctx, 1) - self.state = 229 + self.state = 231 localctx.n = self.number() except RecognitionException as re: localctx.exception = re @@ -1301,38 +1305,14 @@ class Node_attributes_defContext(ParserRuleContext): def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) self.parser = parser - self.name = None # Node_nameContext - self.version = None # Protocol_versionContext - self.n0 = None # Diag_addressContext - self.n1 = None # Diag_addressContext - self.attrs = None # Attributes_defContext + self._node_attribute = None # Node_attributeContext + self.items = list() # of Node_attributeContexts - def node_name(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(ldfParser.Node_nameContext) - else: - return self.getTypedRuleContext(ldfParser.Node_nameContext,i) - - - def protocol_version(self, i:int=None): + def node_attribute(self, i:int=None): if i is None: - return self.getTypedRuleContexts(ldfParser.Protocol_versionContext) + return self.getTypedRuleContexts(ldfParser.Node_attributeContext) else: - return self.getTypedRuleContext(ldfParser.Protocol_versionContext,i) - - - def diag_address(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(ldfParser.Diag_addressContext) - else: - return self.getTypedRuleContext(ldfParser.Diag_addressContext,i) - - - def attributes_def(self, i:int=None): - if i is None: - return self.getTypedRuleContexts(ldfParser.Attributes_defContext) - else: - return self.getTypedRuleContext(ldfParser.Attributes_defContext,i) + return self.getTypedRuleContext(ldfParser.Node_attributeContext,i) def getRuleIndex(self): @@ -1362,59 +1342,128 @@ def node_attributes_def(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 231 + self.state = 233 self.match(ldfParser.T__16) - self.state = 232 + self.state = 234 self.match(ldfParser.T__9) - self.state = 256 + self.state = 238 self._errHandler.sync(self) _la = self._input.LA(1) while _la==ldfParser.C_IDENTIFIER: - self.state = 233 - localctx.name = self.node_name() - self.state = 234 - self.match(ldfParser.T__9) self.state = 235 - self.match(ldfParser.T__17) - self.state = 236 - self.match(ldfParser.T__3) - self.state = 237 - localctx.version = self.protocol_version() - self.state = 238 - self.match(ldfParser.T__1) - self.state = 239 - self.match(ldfParser.T__18) + localctx._node_attribute = self.node_attribute() + localctx.items.append(localctx._node_attribute) self.state = 240 - self.match(ldfParser.T__3) - self.state = 241 - localctx.n0 = self.diag_address() - self.state = 242 - self.match(ldfParser.T__1) - self.state = 248 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==ldfParser.T__19: - self.state = 243 - self.match(ldfParser.T__19) - self.state = 244 - self.match(ldfParser.T__3) - self.state = 245 - localctx.n1 = self.diag_address() - self.state = 246 - self.match(ldfParser.T__1) + + self.state = 241 + self.match(ldfParser.T__15) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class Node_attributeContext(ParserRuleContext): + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + self.name = None # Node_nameContext + self.version = None # Protocol_versionContext + self.n0 = None # Diag_addressContext + self.n1 = None # Diag_addressContext + self.attrs = None # Attributes_defContext + + def node_name(self): + return self.getTypedRuleContext(ldfParser.Node_nameContext,0) + + + def protocol_version(self): + return self.getTypedRuleContext(ldfParser.Protocol_versionContext,0) + + + def diag_address(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(ldfParser.Diag_addressContext) + else: + return self.getTypedRuleContext(ldfParser.Diag_addressContext,i) + + + def attributes_def(self): + return self.getTypedRuleContext(ldfParser.Attributes_defContext,0) + + + def getRuleIndex(self): + return ldfParser.RULE_node_attribute + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterNode_attribute" ): + listener.enterNode_attribute(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitNode_attribute" ): + listener.exitNode_attribute(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitNode_attribute" ): + return visitor.visitNode_attribute(self) + else: + return visitor.visitChildren(self) + + - self.state = 250 - localctx.attrs = self.attributes_def() - self.state = 251 + def node_attribute(self): + + localctx = ldfParser.Node_attributeContext(self, self._ctx, self.state) + self.enterRule(localctx, 20, self.RULE_node_attribute) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 243 + localctx.name = self.node_name() + self.state = 244 + self.match(ldfParser.T__9) + self.state = 245 + self.match(ldfParser.T__17) + self.state = 246 + self.match(ldfParser.T__3) + self.state = 247 + localctx.version = self.protocol_version() + self.state = 248 + self.match(ldfParser.T__1) + self.state = 249 + self.match(ldfParser.T__18) + self.state = 250 + self.match(ldfParser.T__3) + self.state = 251 + localctx.n0 = self.diag_address() + self.state = 252 + self.match(ldfParser.T__1) + self.state = 258 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==ldfParser.T__19: + self.state = 253 + self.match(ldfParser.T__19) + self.state = 254 + self.match(ldfParser.T__3) + self.state = 255 + localctx.n1 = self.diag_address() + self.state = 256 self.match(ldfParser.T__1) - self.state = 252 - self.match(ldfParser.T__15) - self.state = 258 - self._errHandler.sync(self) - _la = self._input.LA(1) - self.state = 259 + + self.state = 260 + localctx.attrs = self.attributes_def() + self.state = 261 + self.match(ldfParser.T__1) + self.state = 262 self.match(ldfParser.T__15) except RecognitionException as re: localctx.exception = re @@ -1459,10 +1508,10 @@ def accept(self, visitor:ParseTreeVisitor): def protocol_version(self): localctx = ldfParser.Protocol_versionContext(self, self._ctx, self.state) - self.enterRule(localctx, 20, self.RULE_protocol_version) + self.enterRule(localctx, 22, self.RULE_protocol_version) try: self.enterOuterAlt(localctx, 1) - self.state = 261 + self.state = 264 localctx.s = self.stringValue() except RecognitionException as re: localctx.exception = re @@ -1507,10 +1556,10 @@ def accept(self, visitor:ParseTreeVisitor): def diag_address(self): localctx = ldfParser.Diag_addressContext(self, self._ctx, self.state) - self.enterRule(localctx, 22, self.RULE_diag_address) + self.enterRule(localctx, 24, self.RULE_diag_address) try: self.enterOuterAlt(localctx, 1) - self.state = 263 + self.state = 266 localctx.i = self.intValue() except RecognitionException as re: localctx.exception = re @@ -1596,142 +1645,142 @@ def accept(self, visitor:ParseTreeVisitor): def attributes_def(self): localctx = ldfParser.Attributes_defContext(self, self._ctx, self.state) - self.enterRule(localctx, 24, self.RULE_attributes_def) + self.enterRule(localctx, 26, self.RULE_attributes_def) self._la = 0 # Token type try: - self.state = 328 + self.state = 331 self._errHandler.sync(self) token = self._input.LA(1) if token in [ldfParser.T__20]: self.enterOuterAlt(localctx, 1) - self.state = 265 + self.state = 268 self.match(ldfParser.T__20) - self.state = 266 + self.state = 269 self.match(ldfParser.T__3) - self.state = 267 + self.state = 270 localctx.sid = self.supplier_id() - self.state = 268 + self.state = 271 self.match(ldfParser.T__12) - self.state = 269 - localctx.fid = self.function_id() self.state = 272 + localctx.fid = self.function_id() + self.state = 275 self._errHandler.sync(self) _la = self._input.LA(1) if _la==ldfParser.T__12: - self.state = 270 + self.state = 273 self.match(ldfParser.T__12) - self.state = 271 + self.state = 274 localctx.v = self.variant() - self.state = 274 + self.state = 277 self.match(ldfParser.T__1) - self.state = 275 + self.state = 278 self.match(ldfParser.T__21) - self.state = 276 + self.state = 279 self.match(ldfParser.T__3) - self.state = 277 + self.state = 280 localctx.sn0 = self.signal_name() - self.state = 278 + self.state = 281 self.match(ldfParser.T__1) - self.state = 291 + self.state = 294 self._errHandler.sync(self) _la = self._input.LA(1) if _la==ldfParser.T__22: - self.state = 279 + self.state = 282 self.match(ldfParser.T__22) - self.state = 280 + self.state = 283 self.match(ldfParser.T__3) - self.state = 281 + self.state = 284 localctx._signal_name = self.signal_name() localctx.sn1s.append(localctx._signal_name) - self.state = 286 + self.state = 289 self._errHandler.sync(self) _la = self._input.LA(1) while _la==ldfParser.T__12: - self.state = 282 + self.state = 285 self.match(ldfParser.T__12) - self.state = 283 + self.state = 286 localctx._signal_name = self.signal_name() localctx.sn1s.append(localctx._signal_name) - self.state = 288 + self.state = 291 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 289 + self.state = 292 self.match(ldfParser.T__1) - self.state = 299 + self.state = 302 self._errHandler.sync(self) _la = self._input.LA(1) if _la==ldfParser.T__23: - self.state = 293 + self.state = 296 self.match(ldfParser.T__23) - self.state = 294 + self.state = 297 self.match(ldfParser.T__3) - self.state = 295 + self.state = 298 localctx.p2Min = self.number() - self.state = 296 + self.state = 299 self.match(ldfParser.T__13) - self.state = 297 + self.state = 300 self.match(ldfParser.T__1) - self.state = 307 + self.state = 310 self._errHandler.sync(self) _la = self._input.LA(1) if _la==ldfParser.T__24: - self.state = 301 + self.state = 304 self.match(ldfParser.T__24) - self.state = 302 + self.state = 305 self.match(ldfParser.T__3) - self.state = 303 + self.state = 306 localctx.stMin = self.number() - self.state = 304 + self.state = 307 self.match(ldfParser.T__13) - self.state = 305 + self.state = 308 self.match(ldfParser.T__1) - self.state = 315 + self.state = 318 self._errHandler.sync(self) _la = self._input.LA(1) if _la==ldfParser.T__25: - self.state = 309 + self.state = 312 self.match(ldfParser.T__25) - self.state = 310 + self.state = 313 self.match(ldfParser.T__3) - self.state = 311 + self.state = 314 localctx.nAs = self.number() - self.state = 312 + self.state = 315 self.match(ldfParser.T__13) - self.state = 313 + self.state = 316 self.match(ldfParser.T__1) - self.state = 323 + self.state = 326 self._errHandler.sync(self) _la = self._input.LA(1) if _la==ldfParser.T__26: - self.state = 317 + self.state = 320 self.match(ldfParser.T__26) - self.state = 318 + self.state = 321 self.match(ldfParser.T__3) - self.state = 319 + self.state = 322 localctx.nCr = self.number() - self.state = 320 + self.state = 323 self.match(ldfParser.T__13) - self.state = 321 + self.state = 324 self.match(ldfParser.T__1) - self.state = 325 + self.state = 328 localctx.cf20 = self.configurable_frames_20_def() pass elif token in [ldfParser.T__27]: self.enterOuterAlt(localctx, 2) - self.state = 327 + self.state = 330 localctx.cf21 = self.configurable_frames_21_def() pass else: @@ -1780,10 +1829,10 @@ def accept(self, visitor:ParseTreeVisitor): def supplier_id(self): localctx = ldfParser.Supplier_idContext(self, self._ctx, self.state) - self.enterRule(localctx, 26, self.RULE_supplier_id) + self.enterRule(localctx, 28, self.RULE_supplier_id) try: self.enterOuterAlt(localctx, 1) - self.state = 330 + self.state = 333 localctx.i = self.intValue() except RecognitionException as re: localctx.exception = re @@ -1828,10 +1877,10 @@ def accept(self, visitor:ParseTreeVisitor): def function_id(self): localctx = ldfParser.Function_idContext(self, self._ctx, self.state) - self.enterRule(localctx, 28, self.RULE_function_id) + self.enterRule(localctx, 30, self.RULE_function_id) try: self.enterOuterAlt(localctx, 1) - self.state = 332 + self.state = 335 localctx.i = self.intValue() except RecognitionException as re: localctx.exception = re @@ -1876,10 +1925,10 @@ def accept(self, visitor:ParseTreeVisitor): def variant(self): localctx = ldfParser.VariantContext(self, self._ctx, self.state) - self.enterRule(localctx, 30, self.RULE_variant) + self.enterRule(localctx, 32, self.RULE_variant) try: self.enterOuterAlt(localctx, 1) - self.state = 334 + self.state = 337 localctx.i = self.intValue() except RecognitionException as re: localctx.exception = re @@ -1924,10 +1973,10 @@ def accept(self, visitor:ParseTreeVisitor): def signal_name(self): localctx = ldfParser.Signal_nameContext(self, self._ctx, self.state) - self.enterRule(localctx, 32, self.RULE_signal_name) + self.enterRule(localctx, 34, self.RULE_signal_name) try: self.enterOuterAlt(localctx, 1) - self.state = 336 + self.state = 339 localctx.i = self.identifierValue() except RecognitionException as re: localctx.exception = re @@ -1983,31 +2032,31 @@ def accept(self, visitor:ParseTreeVisitor): def configurable_frames_20_def(self): localctx = ldfParser.Configurable_frames_20_defContext(self, self._ctx, self.state) - self.enterRule(localctx, 34, self.RULE_configurable_frames_20_def) + self.enterRule(localctx, 36, self.RULE_configurable_frames_20_def) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 338 + self.state = 341 self.match(ldfParser.T__27) - self.state = 339 + self.state = 342 self.match(ldfParser.T__9) - self.state = 347 + self.state = 350 self._errHandler.sync(self) _la = self._input.LA(1) while _la==ldfParser.C_IDENTIFIER: - self.state = 340 + self.state = 343 localctx.fname = self.frame_name() - self.state = 341 + self.state = 344 self.match(ldfParser.T__3) - self.state = 342 + self.state = 345 localctx.mid = self.message_id() - self.state = 343 + self.state = 346 self.match(ldfParser.T__1) - self.state = 349 + self.state = 352 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 350 + self.state = 353 self.match(ldfParser.T__15) except RecognitionException as re: localctx.exception = re @@ -2052,10 +2101,10 @@ def accept(self, visitor:ParseTreeVisitor): def message_id(self): localctx = ldfParser.Message_idContext(self, self._ctx, self.state) - self.enterRule(localctx, 36, self.RULE_message_id) + self.enterRule(localctx, 38, self.RULE_message_id) try: self.enterOuterAlt(localctx, 1) - self.state = 352 + self.state = 355 localctx.i = self.intValue() except RecognitionException as re: localctx.exception = re @@ -2104,28 +2153,28 @@ def accept(self, visitor:ParseTreeVisitor): def configurable_frames_21_def(self): localctx = ldfParser.Configurable_frames_21_defContext(self, self._ctx, self.state) - self.enterRule(localctx, 38, self.RULE_configurable_frames_21_def) + self.enterRule(localctx, 40, self.RULE_configurable_frames_21_def) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 354 + self.state = 357 self.match(ldfParser.T__27) - self.state = 355 + self.state = 358 self.match(ldfParser.T__9) - self.state = 361 + self.state = 364 self._errHandler.sync(self) _la = self._input.LA(1) while _la==ldfParser.C_IDENTIFIER: - self.state = 356 + self.state = 359 localctx._frame_name = self.frame_name() localctx.fnames.append(localctx._frame_name) - self.state = 357 + self.state = 360 self.match(ldfParser.T__1) - self.state = 363 + self.state = 366 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 364 + self.state = 367 self.match(ldfParser.T__15) except RecognitionException as re: localctx.exception = re @@ -2190,61 +2239,61 @@ def accept(self, visitor:ParseTreeVisitor): def node_composition_def(self): localctx = ldfParser.Node_composition_defContext(self, self._ctx, self.state) - self.enterRule(localctx, 40, self.RULE_node_composition_def) + self.enterRule(localctx, 42, self.RULE_node_composition_def) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 366 + self.state = 369 self.match(ldfParser.T__28) - self.state = 367 + self.state = 370 self.match(ldfParser.T__9) - self.state = 392 + self.state = 395 self._errHandler.sync(self) _la = self._input.LA(1) while _la==ldfParser.T__29: - self.state = 368 + self.state = 371 self.match(ldfParser.T__29) - self.state = 369 + self.state = 372 localctx.cname = self.configuration_name() - self.state = 370 + self.state = 373 self.match(ldfParser.T__9) - self.state = 385 + self.state = 388 self._errHandler.sync(self) _la = self._input.LA(1) while _la==ldfParser.C_IDENTIFIER: - self.state = 371 + self.state = 374 localctx.cnode = self.composite_node() - self.state = 372 + self.state = 375 self.match(ldfParser.T__9) - self.state = 373 + self.state = 376 localctx._logical_node = self.logical_node() localctx.lnodes.append(localctx._logical_node) - self.state = 378 + self.state = 381 self._errHandler.sync(self) _la = self._input.LA(1) while _la==ldfParser.T__12: - self.state = 374 + self.state = 377 self.match(ldfParser.T__12) - self.state = 375 + self.state = 378 localctx._logical_node = self.logical_node() localctx.lnodes.append(localctx._logical_node) - self.state = 380 + self.state = 383 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 381 + self.state = 384 self.match(ldfParser.T__1) - self.state = 387 + self.state = 390 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 388 + self.state = 391 self.match(ldfParser.T__15) - self.state = 394 + self.state = 397 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 395 + self.state = 398 self.match(ldfParser.T__15) except RecognitionException as re: localctx.exception = re @@ -2289,10 +2338,10 @@ def accept(self, visitor:ParseTreeVisitor): def configuration_name(self): localctx = ldfParser.Configuration_nameContext(self, self._ctx, self.state) - self.enterRule(localctx, 42, self.RULE_configuration_name) + self.enterRule(localctx, 44, self.RULE_configuration_name) try: self.enterOuterAlt(localctx, 1) - self.state = 397 + self.state = 400 localctx.i = self.identifierValue() except RecognitionException as re: localctx.exception = re @@ -2337,10 +2386,10 @@ def accept(self, visitor:ParseTreeVisitor): def composite_node(self): localctx = ldfParser.Composite_nodeContext(self, self._ctx, self.state) - self.enterRule(localctx, 44, self.RULE_composite_node) + self.enterRule(localctx, 46, self.RULE_composite_node) try: self.enterOuterAlt(localctx, 1) - self.state = 399 + self.state = 402 localctx.i = self.identifierValue() except RecognitionException as re: localctx.exception = re @@ -2385,10 +2434,10 @@ def accept(self, visitor:ParseTreeVisitor): def logical_node(self): localctx = ldfParser.Logical_nodeContext(self, self._ctx, self.state) - self.enterRule(localctx, 46, self.RULE_logical_node) + self.enterRule(localctx, 48, self.RULE_logical_node) try: self.enterOuterAlt(localctx, 1) - self.state = 401 + self.state = 404 localctx.i = self.identifierValue() except RecognitionException as re: localctx.exception = re @@ -2469,52 +2518,52 @@ def accept(self, visitor:ParseTreeVisitor): def signal_def(self): localctx = ldfParser.Signal_defContext(self, self._ctx, self.state) - self.enterRule(localctx, 48, self.RULE_signal_def) + self.enterRule(localctx, 50, self.RULE_signal_def) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 403 + self.state = 406 self.match(ldfParser.T__30) - self.state = 404 + self.state = 407 self.match(ldfParser.T__9) - self.state = 423 + self.state = 426 self._errHandler.sync(self) _la = self._input.LA(1) while _la==ldfParser.C_IDENTIFIER: - self.state = 405 + self.state = 408 localctx.sname = self.signal_name() - self.state = 406 + self.state = 409 self.match(ldfParser.T__11) - self.state = 407 + self.state = 410 localctx.ssize = self.signal_size() - self.state = 408 + self.state = 411 self.match(ldfParser.T__12) - self.state = 409 + self.state = 412 localctx.initValue = self.init_value() - self.state = 410 + self.state = 413 self.match(ldfParser.T__12) - self.state = 411 + self.state = 414 localctx.pub = self.published_by() - self.state = 416 + self.state = 419 self._errHandler.sync(self) _la = self._input.LA(1) while _la==ldfParser.T__12: - self.state = 412 + self.state = 415 self.match(ldfParser.T__12) - self.state = 413 + self.state = 416 localctx._subscribed_by = self.subscribed_by() localctx.sub.append(localctx._subscribed_by) - self.state = 418 + self.state = 421 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 419 + self.state = 422 self.match(ldfParser.T__1) - self.state = 425 + self.state = 428 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 426 + self.state = 429 self.match(ldfParser.T__15) except RecognitionException as re: localctx.exception = re @@ -2559,10 +2608,10 @@ def accept(self, visitor:ParseTreeVisitor): def signal_size(self): localctx = ldfParser.Signal_sizeContext(self, self._ctx, self.state) - self.enterRule(localctx, 50, self.RULE_signal_size) + self.enterRule(localctx, 52, self.RULE_signal_size) try: self.enterOuterAlt(localctx, 1) - self.state = 428 + self.state = 431 localctx.i = self.intValue() except RecognitionException as re: localctx.exception = re @@ -2612,19 +2661,19 @@ def accept(self, visitor:ParseTreeVisitor): def init_value(self): localctx = ldfParser.Init_valueContext(self, self._ctx, self.state) - self.enterRule(localctx, 52, self.RULE_init_value) + self.enterRule(localctx, 54, self.RULE_init_value) try: - self.state = 432 + self.state = 435 self._errHandler.sync(self) token = self._input.LA(1) - if token in [ldfParser.INT]: + if token in [ldfParser.INT, ldfParser.HEX]: self.enterOuterAlt(localctx, 1) - self.state = 430 + self.state = 433 localctx.s = self.init_value_scalar() pass elif token in [ldfParser.T__9]: self.enterOuterAlt(localctx, 2) - self.state = 431 + self.state = 434 localctx.a = self.init_value_array() pass else: @@ -2673,10 +2722,10 @@ def accept(self, visitor:ParseTreeVisitor): def init_value_scalar(self): localctx = ldfParser.Init_value_scalarContext(self, self._ctx, self.state) - self.enterRule(localctx, 54, self.RULE_init_value_scalar) + self.enterRule(localctx, 56, self.RULE_init_value_scalar) try: self.enterOuterAlt(localctx, 1) - self.state = 434 + self.state = 437 localctx.i = self.intValue() except RecognitionException as re: localctx.exception = re @@ -2725,29 +2774,29 @@ def accept(self, visitor:ParseTreeVisitor): def init_value_array(self): localctx = ldfParser.Init_value_arrayContext(self, self._ctx, self.state) - self.enterRule(localctx, 56, self.RULE_init_value_array) + self.enterRule(localctx, 58, self.RULE_init_value_array) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 436 + self.state = 439 self.match(ldfParser.T__9) - self.state = 437 + self.state = 440 localctx._intValue = self.intValue() localctx.vs.append(localctx._intValue) - self.state = 442 + self.state = 445 self._errHandler.sync(self) _la = self._input.LA(1) while _la==ldfParser.T__12: - self.state = 438 + self.state = 441 self.match(ldfParser.T__12) - self.state = 439 + self.state = 442 localctx._intValue = self.intValue() localctx.vs.append(localctx._intValue) - self.state = 444 + self.state = 447 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 445 + self.state = 448 self.match(ldfParser.T__15) except RecognitionException as re: localctx.exception = re @@ -2792,10 +2841,10 @@ def accept(self, visitor:ParseTreeVisitor): def published_by(self): localctx = ldfParser.Published_byContext(self, self._ctx, self.state) - self.enterRule(localctx, 58, self.RULE_published_by) + self.enterRule(localctx, 60, self.RULE_published_by) try: self.enterOuterAlt(localctx, 1) - self.state = 447 + self.state = 450 localctx.i = self.identifierValue() except RecognitionException as re: localctx.exception = re @@ -2840,10 +2889,10 @@ def accept(self, visitor:ParseTreeVisitor): def subscribed_by(self): localctx = ldfParser.Subscribed_byContext(self, self._ctx, self.state) - self.enterRule(localctx, 60, self.RULE_subscribed_by) + self.enterRule(localctx, 62, self.RULE_subscribed_by) try: self.enterOuterAlt(localctx, 1) - self.state = 449 + self.state = 452 localctx.i = self.identifierValue() except RecognitionException as re: localctx.exception = re @@ -2900,35 +2949,35 @@ def accept(self, visitor:ParseTreeVisitor): def diagnostic_signal_def(self): localctx = ldfParser.Diagnostic_signal_defContext(self, self._ctx, self.state) - self.enterRule(localctx, 62, self.RULE_diagnostic_signal_def) + self.enterRule(localctx, 64, self.RULE_diagnostic_signal_def) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 451 + self.state = 454 self.match(ldfParser.T__31) - self.state = 452 + self.state = 455 self.match(ldfParser.T__9) - self.state = 462 + self.state = 465 self._errHandler.sync(self) _la = self._input.LA(1) while _la==ldfParser.C_IDENTIFIER: - self.state = 453 + self.state = 456 localctx.i10 = self.identifierValue() - self.state = 454 + self.state = 457 self.match(ldfParser.T__11) - self.state = 455 + self.state = 458 localctx.i11 = self.intValue() - self.state = 456 + self.state = 459 self.match(ldfParser.T__12) - self.state = 457 + self.state = 460 localctx.i12 = self.intValue() - self.state = 458 + self.state = 461 self.match(ldfParser.T__1) - self.state = 464 + self.state = 467 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 465 + self.state = 468 self.match(ldfParser.T__15) except RecognitionException as re: localctx.exception = re @@ -3000,49 +3049,49 @@ def accept(self, visitor:ParseTreeVisitor): def signal_groups_def(self): localctx = ldfParser.Signal_groups_defContext(self, self._ctx, self.state) - self.enterRule(localctx, 64, self.RULE_signal_groups_def) + self.enterRule(localctx, 66, self.RULE_signal_groups_def) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 467 + self.state = 470 self.match(ldfParser.T__32) - self.state = 468 + self.state = 471 self.match(ldfParser.T__9) - self.state = 487 + self.state = 490 self._errHandler.sync(self) _la = self._input.LA(1) while _la==ldfParser.C_IDENTIFIER: - self.state = 469 + self.state = 472 localctx.sgname = self.signal_group_name() - self.state = 470 + self.state = 473 self.match(ldfParser.T__11) - self.state = 471 + self.state = 474 localctx.gsize = self.group_size() - self.state = 472 + self.state = 475 self.match(ldfParser.T__9) - self.state = 480 + self.state = 483 self._errHandler.sync(self) _la = self._input.LA(1) while _la==ldfParser.C_IDENTIFIER: - self.state = 473 + self.state = 476 localctx.sname = self.signal_name() - self.state = 474 + self.state = 477 self.match(ldfParser.T__12) - self.state = 475 + self.state = 478 localctx.goffs = self.group_offset() - self.state = 476 + self.state = 479 self.match(ldfParser.T__1) - self.state = 482 + self.state = 485 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 483 + self.state = 486 self.match(ldfParser.T__15) - self.state = 489 + self.state = 492 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 490 + self.state = 493 self.match(ldfParser.T__15) except RecognitionException as re: localctx.exception = re @@ -3087,10 +3136,10 @@ def accept(self, visitor:ParseTreeVisitor): def signal_group_name(self): localctx = ldfParser.Signal_group_nameContext(self, self._ctx, self.state) - self.enterRule(localctx, 66, self.RULE_signal_group_name) + self.enterRule(localctx, 68, self.RULE_signal_group_name) try: self.enterOuterAlt(localctx, 1) - self.state = 492 + self.state = 495 localctx.i = self.identifierValue() except RecognitionException as re: localctx.exception = re @@ -3135,10 +3184,10 @@ def accept(self, visitor:ParseTreeVisitor): def group_size(self): localctx = ldfParser.Group_sizeContext(self, self._ctx, self.state) - self.enterRule(localctx, 68, self.RULE_group_size) + self.enterRule(localctx, 70, self.RULE_group_size) try: self.enterOuterAlt(localctx, 1) - self.state = 494 + self.state = 497 localctx.i = self.intValue() except RecognitionException as re: localctx.exception = re @@ -3183,10 +3232,10 @@ def accept(self, visitor:ParseTreeVisitor): def group_offset(self): localctx = ldfParser.Group_offsetContext(self, self._ctx, self.state) - self.enterRule(localctx, 70, self.RULE_group_offset) + self.enterRule(localctx, 72, self.RULE_group_offset) try: self.enterOuterAlt(localctx, 1) - self.state = 496 + self.state = 499 localctx.i = self.intValue() except RecognitionException as re: localctx.exception = re @@ -3274,57 +3323,57 @@ def accept(self, visitor:ParseTreeVisitor): def frame_def(self): localctx = ldfParser.Frame_defContext(self, self._ctx, self.state) - self.enterRule(localctx, 72, self.RULE_frame_def) + self.enterRule(localctx, 74, self.RULE_frame_def) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 498 + self.state = 501 self.match(ldfParser.T__33) - self.state = 499 + self.state = 502 self.match(ldfParser.T__9) - self.state = 522 + self.state = 525 self._errHandler.sync(self) _la = self._input.LA(1) while _la==ldfParser.C_IDENTIFIER: - self.state = 500 + self.state = 503 localctx.fname = self.frame_name() - self.state = 501 + self.state = 504 self.match(ldfParser.T__11) - self.state = 502 + self.state = 505 localctx.fid = self.frame_id() - self.state = 503 + self.state = 506 self.match(ldfParser.T__12) - self.state = 504 + self.state = 507 localctx.p = self.published_by() - self.state = 505 + self.state = 508 self.match(ldfParser.T__12) - self.state = 506 + self.state = 509 localctx.fsize = self.frame_size() - self.state = 507 + self.state = 510 self.match(ldfParser.T__9) - self.state = 515 + self.state = 518 self._errHandler.sync(self) _la = self._input.LA(1) while _la==ldfParser.C_IDENTIFIER: - self.state = 508 + self.state = 511 localctx.sname = self.signal_name() - self.state = 509 + self.state = 512 self.match(ldfParser.T__12) - self.state = 510 + self.state = 513 localctx.soffs = self.signal_offset() - self.state = 511 + self.state = 514 self.match(ldfParser.T__1) - self.state = 517 + self.state = 520 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 518 + self.state = 521 self.match(ldfParser.T__15) - self.state = 524 + self.state = 527 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 525 + self.state = 528 self.match(ldfParser.T__15) except RecognitionException as re: localctx.exception = re @@ -3369,10 +3418,10 @@ def accept(self, visitor:ParseTreeVisitor): def frame_name(self): localctx = ldfParser.Frame_nameContext(self, self._ctx, self.state) - self.enterRule(localctx, 74, self.RULE_frame_name) + self.enterRule(localctx, 76, self.RULE_frame_name) try: self.enterOuterAlt(localctx, 1) - self.state = 527 + self.state = 530 localctx.i = self.identifierValue() except RecognitionException as re: localctx.exception = re @@ -3417,10 +3466,10 @@ def accept(self, visitor:ParseTreeVisitor): def frame_id(self): localctx = ldfParser.Frame_idContext(self, self._ctx, self.state) - self.enterRule(localctx, 76, self.RULE_frame_id) + self.enterRule(localctx, 78, self.RULE_frame_id) try: self.enterOuterAlt(localctx, 1) - self.state = 529 + self.state = 532 localctx.i = self.intValue() except RecognitionException as re: localctx.exception = re @@ -3465,10 +3514,10 @@ def accept(self, visitor:ParseTreeVisitor): def frame_size(self): localctx = ldfParser.Frame_sizeContext(self, self._ctx, self.state) - self.enterRule(localctx, 78, self.RULE_frame_size) + self.enterRule(localctx, 80, self.RULE_frame_size) try: self.enterOuterAlt(localctx, 1) - self.state = 531 + self.state = 534 localctx.i = self.intValue() except RecognitionException as re: localctx.exception = re @@ -3513,10 +3562,10 @@ def accept(self, visitor:ParseTreeVisitor): def signal_offset(self): localctx = ldfParser.Signal_offsetContext(self, self._ctx, self.state) - self.enterRule(localctx, 80, self.RULE_signal_offset) + self.enterRule(localctx, 82, self.RULE_signal_offset) try: self.enterOuterAlt(localctx, 1) - self.state = 533 + self.state = 536 localctx.i = self.intValue() except RecognitionException as re: localctx.exception = re @@ -3573,45 +3622,45 @@ def accept(self, visitor:ParseTreeVisitor): def sporadic_frame_def(self): localctx = ldfParser.Sporadic_frame_defContext(self, self._ctx, self.state) - self.enterRule(localctx, 82, self.RULE_sporadic_frame_def) + self.enterRule(localctx, 84, self.RULE_sporadic_frame_def) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 535 + self.state = 538 self.match(ldfParser.T__34) - self.state = 536 + self.state = 539 self.match(ldfParser.T__9) - self.state = 551 + self.state = 554 self._errHandler.sync(self) _la = self._input.LA(1) while _la==ldfParser.C_IDENTIFIER: - self.state = 537 + self.state = 540 localctx.sfn = self.sporadic_frame_name() - self.state = 538 + self.state = 541 self.match(ldfParser.T__11) - self.state = 539 + self.state = 542 localctx._frame_name = self.frame_name() localctx.names.append(localctx._frame_name) - self.state = 544 + self.state = 547 self._errHandler.sync(self) _la = self._input.LA(1) while _la==ldfParser.T__12: - self.state = 540 + self.state = 543 self.match(ldfParser.T__12) - self.state = 541 + self.state = 544 localctx._frame_name = self.frame_name() localctx.names.append(localctx._frame_name) - self.state = 546 + self.state = 549 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 547 + self.state = 550 self.match(ldfParser.T__1) - self.state = 553 + self.state = 556 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 554 + self.state = 557 self.match(ldfParser.T__15) except RecognitionException as re: localctx.exception = re @@ -3656,10 +3705,10 @@ def accept(self, visitor:ParseTreeVisitor): def sporadic_frame_name(self): localctx = ldfParser.Sporadic_frame_nameContext(self, self._ctx, self.state) - self.enterRule(localctx, 84, self.RULE_sporadic_frame_name) + self.enterRule(localctx, 86, self.RULE_sporadic_frame_name) try: self.enterOuterAlt(localctx, 1) - self.state = 556 + self.state = 559 localctx.i = self.identifierValue() except RecognitionException as re: localctx.exception = re @@ -3730,47 +3779,47 @@ def accept(self, visitor:ParseTreeVisitor): def event_triggered_frame_def(self): localctx = ldfParser.Event_triggered_frame_defContext(self, self._ctx, self.state) - self.enterRule(localctx, 86, self.RULE_event_triggered_frame_def) + self.enterRule(localctx, 88, self.RULE_event_triggered_frame_def) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 558 + self.state = 561 self.match(ldfParser.T__35) - self.state = 559 + self.state = 562 self.match(ldfParser.T__9) - self.state = 576 + self.state = 579 self._errHandler.sync(self) _la = self._input.LA(1) while _la==ldfParser.C_IDENTIFIER: - self.state = 560 + self.state = 563 localctx.e = self.event_trig_frm_name() - self.state = 561 + self.state = 564 self.match(ldfParser.T__11) - self.state = 562 + self.state = 565 localctx.c = self.collision_resolving_schedule_table() - self.state = 563 + self.state = 566 self.match(ldfParser.T__12) - self.state = 564 + self.state = 567 localctx.fid = self.frame_id() - self.state = 571 + self.state = 574 self._errHandler.sync(self) _la = self._input.LA(1) while _la==ldfParser.T__12: - self.state = 565 + self.state = 568 self.match(ldfParser.T__12) - self.state = 566 + self.state = 569 self.frame_name() - self.state = 567 + self.state = 570 self.match(ldfParser.T__1) - self.state = 573 + self.state = 576 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 578 + self.state = 581 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 579 + self.state = 582 self.match(ldfParser.T__15) except RecognitionException as re: localctx.exception = re @@ -3815,10 +3864,10 @@ def accept(self, visitor:ParseTreeVisitor): def event_trig_frm_name(self): localctx = ldfParser.Event_trig_frm_nameContext(self, self._ctx, self.state) - self.enterRule(localctx, 88, self.RULE_event_trig_frm_name) + self.enterRule(localctx, 90, self.RULE_event_trig_frm_name) try: self.enterOuterAlt(localctx, 1) - self.state = 581 + self.state = 584 localctx.i = self.identifierValue() except RecognitionException as re: localctx.exception = re @@ -3863,10 +3912,10 @@ def accept(self, visitor:ParseTreeVisitor): def collision_resolving_schedule_table(self): localctx = ldfParser.Collision_resolving_schedule_tableContext(self, self._ctx, self.state) - self.enterRule(localctx, 90, self.RULE_collision_resolving_schedule_table) + self.enterRule(localctx, 92, self.RULE_collision_resolving_schedule_table) try: self.enterOuterAlt(localctx, 1) - self.state = 583 + self.state = 586 localctx.i = self.identifierValue() except RecognitionException as re: localctx.exception = re @@ -3926,67 +3975,67 @@ def accept(self, visitor:ParseTreeVisitor): def diag_frame_def(self): localctx = ldfParser.Diag_frame_defContext(self, self._ctx, self.state) - self.enterRule(localctx, 92, self.RULE_diag_frame_def) + self.enterRule(localctx, 94, self.RULE_diag_frame_def) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 585 + self.state = 588 self.match(ldfParser.T__36) - self.state = 586 + self.state = 589 self.match(ldfParser.T__9) - self.state = 587 + self.state = 590 self.match(ldfParser.T__37) - self.state = 588 + self.state = 591 self.match(ldfParser.T__11) - self.state = 589 + self.state = 592 localctx.m = self.intValue() - self.state = 590 + self.state = 593 self.match(ldfParser.T__9) - self.state = 598 + self.state = 601 self._errHandler.sync(self) _la = self._input.LA(1) while _la==ldfParser.C_IDENTIFIER: - self.state = 591 + self.state = 594 localctx.i10 = self.identifierValue() - self.state = 592 + self.state = 595 self.match(ldfParser.T__12) - self.state = 593 + self.state = 596 localctx.i11 = self.intValue() - self.state = 594 + self.state = 597 self.match(ldfParser.T__1) - self.state = 600 + self.state = 603 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 601 + self.state = 604 self.match(ldfParser.T__15) - self.state = 602 + self.state = 605 self.match(ldfParser.T__38) - self.state = 603 + self.state = 606 self.match(ldfParser.T__11) - self.state = 604 + self.state = 607 localctx.s = self.intValue() - self.state = 605 + self.state = 608 self.match(ldfParser.T__9) - self.state = 613 + self.state = 616 self._errHandler.sync(self) _la = self._input.LA(1) while _la==ldfParser.C_IDENTIFIER: - self.state = 606 + self.state = 609 localctx.i20 = self.identifierValue() - self.state = 607 + self.state = 610 self.match(ldfParser.T__12) - self.state = 608 + self.state = 611 localctx.i21 = self.intValue() - self.state = 609 + self.state = 612 self.match(ldfParser.T__1) - self.state = 615 + self.state = 618 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 616 + self.state = 619 self.match(ldfParser.T__15) - self.state = 617 + self.state = 620 self.match(ldfParser.T__15) except RecognitionException as re: localctx.exception = re @@ -4050,47 +4099,47 @@ def accept(self, visitor:ParseTreeVisitor): def schedule_table_def(self): localctx = ldfParser.Schedule_table_defContext(self, self._ctx, self.state) - self.enterRule(localctx, 94, self.RULE_schedule_table_def) + self.enterRule(localctx, 96, self.RULE_schedule_table_def) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 619 + self.state = 622 self.match(ldfParser.T__39) - self.state = 620 + self.state = 623 self.match(ldfParser.T__9) - self.state = 638 + self.state = 641 self._errHandler.sync(self) _la = self._input.LA(1) while _la==ldfParser.C_IDENTIFIER: - self.state = 621 + self.state = 624 localctx.s = self.schedule_table_name() - self.state = 622 + self.state = 625 self.match(ldfParser.T__9) - self.state = 631 + self.state = 634 self._errHandler.sync(self) _la = self._input.LA(1) while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << ldfParser.T__37) | (1 << ldfParser.T__38) | (1 << ldfParser.T__41) | (1 << ldfParser.T__42) | (1 << ldfParser.T__43) | (1 << ldfParser.T__44) | (1 << ldfParser.T__45) | (1 << ldfParser.T__46) | (1 << ldfParser.T__47) | (1 << ldfParser.C_IDENTIFIER))) != 0): - self.state = 623 + self.state = 626 localctx.c = self.command() - self.state = 624 + self.state = 627 self.match(ldfParser.T__40) - self.state = 625 + self.state = 628 localctx.f = self.frame_time() - self.state = 626 + self.state = 629 self.match(ldfParser.T__13) - self.state = 627 + self.state = 630 self.match(ldfParser.T__1) - self.state = 633 + self.state = 636 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 634 + self.state = 637 self.match(ldfParser.T__15) - self.state = 640 + self.state = 643 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 641 + self.state = 644 self.match(ldfParser.T__15) except RecognitionException as re: localctx.exception = re @@ -4135,10 +4184,10 @@ def accept(self, visitor:ParseTreeVisitor): def schedule_table_name(self): localctx = ldfParser.Schedule_table_nameContext(self, self._ctx, self.state) - self.enterRule(localctx, 96, self.RULE_schedule_table_name) + self.enterRule(localctx, 98, self.RULE_schedule_table_name) try: self.enterOuterAlt(localctx, 1) - self.state = 643 + self.state = 646 localctx.i = self.identifierValue() except RecognitionException as re: localctx.exception = re @@ -4224,204 +4273,204 @@ def accept(self, visitor:ParseTreeVisitor): def command(self): localctx = ldfParser.CommandContext(self, self._ctx, self.state) - self.enterRule(localctx, 98, self.RULE_command) + self.enterRule(localctx, 100, self.RULE_command) self._la = 0 # Token type try: - self.state = 732 + self.state = 735 self._errHandler.sync(self) token = self._input.LA(1) if token in [ldfParser.C_IDENTIFIER]: self.enterOuterAlt(localctx, 1) - self.state = 645 + self.state = 648 localctx.frameName = self.frame_name() pass elif token in [ldfParser.T__37]: self.enterOuterAlt(localctx, 2) - self.state = 646 + self.state = 649 localctx.c = self.match(ldfParser.T__37) pass elif token in [ldfParser.T__38]: self.enterOuterAlt(localctx, 3) - self.state = 647 + self.state = 650 localctx.c = self.match(ldfParser.T__38) pass elif token in [ldfParser.T__41]: self.enterOuterAlt(localctx, 4) - self.state = 648 + self.state = 651 localctx.c = self.match(ldfParser.T__41) - self.state = 649 + self.state = 652 self.match(ldfParser.T__9) - self.state = 650 + self.state = 653 localctx.nodeName = self.node_name() - self.state = 651 + self.state = 654 self.match(ldfParser.T__15) pass elif token in [ldfParser.T__42]: self.enterOuterAlt(localctx, 5) - self.state = 653 + self.state = 656 localctx.c = self.match(ldfParser.T__42) - self.state = 654 + self.state = 657 self.match(ldfParser.T__9) - self.state = 655 + self.state = 658 localctx.nad = self.intValue() - self.state = 656 + self.state = 659 self.match(ldfParser.T__12) - self.state = 657 + self.state = 660 localctx.id_ = self.intValue() - self.state = 658 + self.state = 661 self.match(ldfParser.T__12) - self.state = 659 + self.state = 662 localctx.byte_ = self.intValue() - self.state = 660 + self.state = 663 self.match(ldfParser.T__12) - self.state = 661 + self.state = 664 localctx.mask = self.intValue() - self.state = 662 + self.state = 665 self.match(ldfParser.T__12) - self.state = 663 + self.state = 666 localctx.inv = self.intValue() - self.state = 664 + self.state = 667 self.match(ldfParser.T__12) - self.state = 665 + self.state = 668 localctx.new_NAD = self.intValue() - self.state = 666 + self.state = 669 self.match(ldfParser.T__15) pass elif token in [ldfParser.T__43]: self.enterOuterAlt(localctx, 6) - self.state = 668 + self.state = 671 localctx.c = self.match(ldfParser.T__43) - self.state = 669 + self.state = 672 self.match(ldfParser.T__9) - self.state = 670 + self.state = 673 localctx.nodeName = self.node_name() - self.state = 671 + self.state = 674 self.match(ldfParser.T__12) - self.state = 672 + self.state = 675 localctx.d1 = self.intValue() - self.state = 673 + self.state = 676 self.match(ldfParser.T__12) - self.state = 674 + self.state = 677 localctx.d2 = self.intValue() - self.state = 675 + self.state = 678 self.match(ldfParser.T__12) - self.state = 676 + self.state = 679 localctx.d3 = self.intValue() - self.state = 677 + self.state = 680 self.match(ldfParser.T__12) - self.state = 678 + self.state = 681 localctx.d4 = self.intValue() - self.state = 679 + self.state = 682 self.match(ldfParser.T__12) - self.state = 680 + self.state = 683 localctx.d5 = self.intValue() - self.state = 681 + self.state = 684 self.match(ldfParser.T__15) pass elif token in [ldfParser.T__44]: self.enterOuterAlt(localctx, 7) - self.state = 683 + self.state = 686 localctx.c = self.match(ldfParser.T__44) - self.state = 684 + self.state = 687 self.match(ldfParser.T__9) - self.state = 685 + self.state = 688 localctx.nodeName = self.node_name() - self.state = 686 + self.state = 689 self.match(ldfParser.T__15) pass elif token in [ldfParser.T__45]: self.enterOuterAlt(localctx, 8) - self.state = 688 + self.state = 691 localctx.c = self.match(ldfParser.T__45) - self.state = 689 + self.state = 692 self.match(ldfParser.T__9) - self.state = 690 + self.state = 693 localctx.nodeName = self.node_name() - self.state = 691 + self.state = 694 self.match(ldfParser.T__12) - self.state = 692 + self.state = 695 localctx.frameIndex = self.frame_index() - self.state = 702 + self.state = 705 self._errHandler.sync(self) _la = self._input.LA(1) if _la==ldfParser.T__12: - self.state = 693 + self.state = 696 self.match(ldfParser.T__12) - self.state = 694 + self.state = 697 localctx._frame_PID = self.frame_PID() localctx.pids.append(localctx._frame_PID) - self.state = 695 + self.state = 698 self.match(ldfParser.T__12) - self.state = 696 + self.state = 699 localctx._frame_PID = self.frame_PID() localctx.pids.append(localctx._frame_PID) - self.state = 697 + self.state = 700 self.match(ldfParser.T__12) - self.state = 698 + self.state = 701 localctx._frame_PID = self.frame_PID() localctx.pids.append(localctx._frame_PID) - self.state = 699 + self.state = 702 self.match(ldfParser.T__12) - self.state = 700 + self.state = 703 localctx._frame_PID = self.frame_PID() localctx.pids.append(localctx._frame_PID) - self.state = 704 + self.state = 707 self.match(ldfParser.T__15) pass elif token in [ldfParser.T__46]: self.enterOuterAlt(localctx, 9) - self.state = 706 + self.state = 709 localctx.c = self.match(ldfParser.T__46) - self.state = 707 + self.state = 710 self.match(ldfParser.T__9) - self.state = 708 + self.state = 711 localctx.d1 = self.intValue() - self.state = 709 + self.state = 712 self.match(ldfParser.T__12) - self.state = 710 + self.state = 713 localctx.d2 = self.intValue() - self.state = 711 + self.state = 714 self.match(ldfParser.T__12) - self.state = 712 + self.state = 715 localctx.d3 = self.intValue() - self.state = 713 + self.state = 716 self.match(ldfParser.T__12) - self.state = 714 + self.state = 717 localctx.d4 = self.intValue() - self.state = 715 + self.state = 718 self.match(ldfParser.T__12) - self.state = 716 + self.state = 719 localctx.d5 = self.intValue() - self.state = 717 + self.state = 720 self.match(ldfParser.T__12) - self.state = 718 + self.state = 721 localctx.d6 = self.intValue() - self.state = 719 + self.state = 722 self.match(ldfParser.T__12) - self.state = 720 + self.state = 723 localctx.d7 = self.intValue() - self.state = 721 + self.state = 724 self.match(ldfParser.T__12) - self.state = 722 + self.state = 725 localctx.d8 = self.intValue() - self.state = 723 + self.state = 726 self.match(ldfParser.T__15) pass elif token in [ldfParser.T__47]: self.enterOuterAlt(localctx, 10) - self.state = 725 + self.state = 728 localctx.c = self.match(ldfParser.T__47) - self.state = 726 + self.state = 729 self.match(ldfParser.T__9) - self.state = 727 + self.state = 730 localctx.nodeName = self.node_name() - self.state = 728 + self.state = 731 self.match(ldfParser.T__12) - self.state = 729 + self.state = 732 localctx.frameName = self.frame_name() - self.state = 730 + self.state = 733 self.match(ldfParser.T__15) pass else: @@ -4470,10 +4519,10 @@ def accept(self, visitor:ParseTreeVisitor): def frame_index(self): localctx = ldfParser.Frame_indexContext(self, self._ctx, self.state) - self.enterRule(localctx, 100, self.RULE_frame_index) + self.enterRule(localctx, 102, self.RULE_frame_index) try: self.enterOuterAlt(localctx, 1) - self.state = 734 + self.state = 737 localctx.i = self.intValue() except RecognitionException as re: localctx.exception = re @@ -4518,10 +4567,10 @@ def accept(self, visitor:ParseTreeVisitor): def frame_PID(self): localctx = ldfParser.Frame_PIDContext(self, self._ctx, self.state) - self.enterRule(localctx, 102, self.RULE_frame_PID) + self.enterRule(localctx, 104, self.RULE_frame_PID) try: self.enterOuterAlt(localctx, 1) - self.state = 736 + self.state = 739 localctx.i = self.intValue() except RecognitionException as re: localctx.exception = re @@ -4566,10 +4615,10 @@ def accept(self, visitor:ParseTreeVisitor): def frame_time(self): localctx = ldfParser.Frame_timeContext(self, self._ctx, self.state) - self.enterRule(localctx, 104, self.RULE_frame_time) + self.enterRule(localctx, 106, self.RULE_frame_time) try: self.enterOuterAlt(localctx, 1) - self.state = 738 + self.state = 741 localctx.n = self.number() except RecognitionException as re: localctx.exception = re @@ -4649,59 +4698,59 @@ def accept(self, visitor:ParseTreeVisitor): def signal_encoding_type_def(self): localctx = ldfParser.Signal_encoding_type_defContext(self, self._ctx, self.state) - self.enterRule(localctx, 106, self.RULE_signal_encoding_type_def) + self.enterRule(localctx, 108, self.RULE_signal_encoding_type_def) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 740 + self.state = 743 self.match(ldfParser.T__48) - self.state = 741 + self.state = 744 self.match(ldfParser.T__9) - self.state = 757 + self.state = 760 self._errHandler.sync(self) _la = self._input.LA(1) while _la==ldfParser.C_IDENTIFIER: - self.state = 742 + self.state = 745 localctx.s = self.signal_encoding_type_name() - self.state = 743 + self.state = 746 self.match(ldfParser.T__9) - self.state = 750 + self.state = 753 self._errHandler.sync(self) _la = self._input.LA(1) while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << ldfParser.T__49) | (1 << ldfParser.T__50) | (1 << ldfParser.T__51) | (1 << ldfParser.T__52))) != 0): - self.state = 748 + self.state = 751 self._errHandler.sync(self) token = self._input.LA(1) if token in [ldfParser.T__49]: - self.state = 744 + self.state = 747 localctx.l = self.logical_value() pass elif token in [ldfParser.T__50]: - self.state = 745 + self.state = 748 localctx.p = self.physical_range() pass elif token in [ldfParser.T__51]: - self.state = 746 + self.state = 749 localctx.b = self.bcd_value() pass elif token in [ldfParser.T__52]: - self.state = 747 + self.state = 750 localctx.a = self.ascii_value() pass else: raise NoViableAltException(self) - self.state = 752 + self.state = 755 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 753 + self.state = 756 self.match(ldfParser.T__15) - self.state = 759 + self.state = 762 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 760 + self.state = 763 self.match(ldfParser.T__15) except RecognitionException as re: localctx.exception = re @@ -4746,10 +4795,10 @@ def accept(self, visitor:ParseTreeVisitor): def signal_encoding_type_name(self): localctx = ldfParser.Signal_encoding_type_nameContext(self, self._ctx, self.state) - self.enterRule(localctx, 108, self.RULE_signal_encoding_type_name) + self.enterRule(localctx, 110, self.RULE_signal_encoding_type_name) try: self.enterOuterAlt(localctx, 1) - self.state = 762 + self.state = 765 localctx.i = self.identifierValue() except RecognitionException as re: localctx.exception = re @@ -4799,27 +4848,27 @@ def accept(self, visitor:ParseTreeVisitor): def logical_value(self): localctx = ldfParser.Logical_valueContext(self, self._ctx, self.state) - self.enterRule(localctx, 110, self.RULE_logical_value) + self.enterRule(localctx, 112, self.RULE_logical_value) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 764 + self.state = 767 self.match(ldfParser.T__49) - self.state = 765 + self.state = 768 self.match(ldfParser.T__12) - self.state = 766 - localctx.s = self.signal_value() self.state = 769 + localctx.s = self.signal_value() + self.state = 772 self._errHandler.sync(self) _la = self._input.LA(1) if _la==ldfParser.T__12: - self.state = 767 + self.state = 770 self.match(ldfParser.T__12) - self.state = 768 + self.state = 771 localctx.t = self.text_info() - self.state = 771 + self.state = 774 self.match(ldfParser.T__1) except RecognitionException as re: localctx.exception = re @@ -4884,39 +4933,39 @@ def accept(self, visitor:ParseTreeVisitor): def physical_range(self): localctx = ldfParser.Physical_rangeContext(self, self._ctx, self.state) - self.enterRule(localctx, 112, self.RULE_physical_range) + self.enterRule(localctx, 114, self.RULE_physical_range) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 773 + self.state = 776 self.match(ldfParser.T__50) - self.state = 774 + self.state = 777 self.match(ldfParser.T__12) - self.state = 775 + self.state = 778 localctx.minValue = self.min_value() - self.state = 776 + self.state = 779 self.match(ldfParser.T__12) - self.state = 777 + self.state = 780 localctx.maxValue = self.max_value() - self.state = 778 + self.state = 781 self.match(ldfParser.T__12) - self.state = 779 + self.state = 782 localctx.s = self.scale() - self.state = 780 + self.state = 783 self.match(ldfParser.T__12) - self.state = 781 - localctx.o = self.offset() self.state = 784 + localctx.o = self.offset() + self.state = 787 self._errHandler.sync(self) _la = self._input.LA(1) if _la==ldfParser.T__12: - self.state = 782 + self.state = 785 self.match(ldfParser.T__12) - self.state = 783 + self.state = 786 localctx.t = self.text_info() - self.state = 786 + self.state = 789 self.match(ldfParser.T__1) except RecognitionException as re: localctx.exception = re @@ -4957,12 +5006,12 @@ def accept(self, visitor:ParseTreeVisitor): def bcd_value(self): localctx = ldfParser.Bcd_valueContext(self, self._ctx, self.state) - self.enterRule(localctx, 114, self.RULE_bcd_value) + self.enterRule(localctx, 116, self.RULE_bcd_value) try: self.enterOuterAlt(localctx, 1) - self.state = 788 + self.state = 791 self.match(ldfParser.T__51) - self.state = 789 + self.state = 792 self.match(ldfParser.T__1) except RecognitionException as re: localctx.exception = re @@ -5003,12 +5052,12 @@ def accept(self, visitor:ParseTreeVisitor): def ascii_value(self): localctx = ldfParser.Ascii_valueContext(self, self._ctx, self.state) - self.enterRule(localctx, 116, self.RULE_ascii_value) + self.enterRule(localctx, 118, self.RULE_ascii_value) try: self.enterOuterAlt(localctx, 1) - self.state = 791 + self.state = 794 self.match(ldfParser.T__52) - self.state = 792 + self.state = 795 self.match(ldfParser.T__1) except RecognitionException as re: localctx.exception = re @@ -5053,10 +5102,10 @@ def accept(self, visitor:ParseTreeVisitor): def signal_value(self): localctx = ldfParser.Signal_valueContext(self, self._ctx, self.state) - self.enterRule(localctx, 118, self.RULE_signal_value) + self.enterRule(localctx, 120, self.RULE_signal_value) try: self.enterOuterAlt(localctx, 1) - self.state = 794 + self.state = 797 localctx.i = self.intValue() except RecognitionException as re: localctx.exception = re @@ -5101,10 +5150,10 @@ def accept(self, visitor:ParseTreeVisitor): def min_value(self): localctx = ldfParser.Min_valueContext(self, self._ctx, self.state) - self.enterRule(localctx, 120, self.RULE_min_value) + self.enterRule(localctx, 122, self.RULE_min_value) try: self.enterOuterAlt(localctx, 1) - self.state = 796 + self.state = 799 localctx.i = self.intValue() except RecognitionException as re: localctx.exception = re @@ -5149,10 +5198,10 @@ def accept(self, visitor:ParseTreeVisitor): def max_value(self): localctx = ldfParser.Max_valueContext(self, self._ctx, self.state) - self.enterRule(localctx, 122, self.RULE_max_value) + self.enterRule(localctx, 124, self.RULE_max_value) try: self.enterOuterAlt(localctx, 1) - self.state = 798 + self.state = 801 localctx.i = self.intValue() except RecognitionException as re: localctx.exception = re @@ -5197,10 +5246,10 @@ def accept(self, visitor:ParseTreeVisitor): def scale(self): localctx = ldfParser.ScaleContext(self, self._ctx, self.state) - self.enterRule(localctx, 124, self.RULE_scale) + self.enterRule(localctx, 126, self.RULE_scale) try: self.enterOuterAlt(localctx, 1) - self.state = 800 + self.state = 803 localctx.n = self.number() except RecognitionException as re: localctx.exception = re @@ -5245,10 +5294,10 @@ def accept(self, visitor:ParseTreeVisitor): def offset(self): localctx = ldfParser.OffsetContext(self, self._ctx, self.state) - self.enterRule(localctx, 126, self.RULE_offset) + self.enterRule(localctx, 128, self.RULE_offset) try: self.enterOuterAlt(localctx, 1) - self.state = 802 + self.state = 805 localctx.n = self.number() except RecognitionException as re: localctx.exception = re @@ -5293,10 +5342,10 @@ def accept(self, visitor:ParseTreeVisitor): def text_info(self): localctx = ldfParser.Text_infoContext(self, self._ctx, self.state) - self.enterRule(localctx, 128, self.RULE_text_info) + self.enterRule(localctx, 130, self.RULE_text_info) try: self.enterOuterAlt(localctx, 1) - self.state = 804 + self.state = 807 localctx.s = self.stringValue() except RecognitionException as re: localctx.exception = re @@ -5353,45 +5402,45 @@ def accept(self, visitor:ParseTreeVisitor): def signal_representation_def(self): localctx = ldfParser.Signal_representation_defContext(self, self._ctx, self.state) - self.enterRule(localctx, 130, self.RULE_signal_representation_def) + self.enterRule(localctx, 132, self.RULE_signal_representation_def) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 806 + self.state = 809 self.match(ldfParser.T__53) - self.state = 807 + self.state = 810 self.match(ldfParser.T__9) - self.state = 822 + self.state = 825 self._errHandler.sync(self) _la = self._input.LA(1) while _la==ldfParser.C_IDENTIFIER: - self.state = 808 + self.state = 811 localctx.enc = self.signal_encoding_type_name() - self.state = 809 + self.state = 812 self.match(ldfParser.T__11) - self.state = 810 + self.state = 813 localctx._signal_name = self.signal_name() localctx.names.append(localctx._signal_name) - self.state = 815 + self.state = 818 self._errHandler.sync(self) _la = self._input.LA(1) while _la==ldfParser.T__12: - self.state = 811 + self.state = 814 self.match(ldfParser.T__12) - self.state = 812 + self.state = 815 localctx._signal_name = self.signal_name() localctx.names.append(localctx._signal_name) - self.state = 817 + self.state = 820 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 818 + self.state = 821 self.match(ldfParser.T__1) - self.state = 824 + self.state = 827 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 825 + self.state = 828 self.match(ldfParser.T__15) except RecognitionException as re: localctx.exception = re @@ -5408,10 +5457,14 @@ def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) self.parser = parser self.i = None # Token + self.h = None # Token def INT(self): return self.getToken(ldfParser.INT, 0) + def HEX(self): + return self.getToken(ldfParser.HEX, 0) + def getRuleIndex(self): return ldfParser.RULE_intValue @@ -5435,11 +5488,24 @@ def accept(self, visitor:ParseTreeVisitor): def intValue(self): localctx = ldfParser.IntValueContext(self, self._ctx, self.state) - self.enterRule(localctx, 132, self.RULE_intValue) + self.enterRule(localctx, 134, self.RULE_intValue) try: - self.enterOuterAlt(localctx, 1) - self.state = 827 - localctx.i = self.match(ldfParser.INT) + self.state = 832 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [ldfParser.INT]: + self.enterOuterAlt(localctx, 1) + self.state = 830 + localctx.i = self.match(ldfParser.INT) + pass + elif token in [ldfParser.HEX]: + self.enterOuterAlt(localctx, 2) + self.state = 831 + localctx.h = self.match(ldfParser.HEX) + pass + else: + raise NoViableAltException(self) + except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -5482,10 +5548,10 @@ def accept(self, visitor:ParseTreeVisitor): def floatValue(self): localctx = ldfParser.FloatValueContext(self, self._ctx, self.state) - self.enterRule(localctx, 134, self.RULE_floatValue) + self.enterRule(localctx, 136, self.RULE_floatValue) try: self.enterOuterAlt(localctx, 1) - self.state = 829 + self.state = 834 localctx.f = self.match(ldfParser.FLOAT) except RecognitionException as re: localctx.exception = re @@ -5535,19 +5601,19 @@ def accept(self, visitor:ParseTreeVisitor): def number(self): localctx = ldfParser.NumberContext(self, self._ctx, self.state) - self.enterRule(localctx, 136, self.RULE_number) + self.enterRule(localctx, 138, self.RULE_number) try: - self.state = 833 + self.state = 838 self._errHandler.sync(self) token = self._input.LA(1) - if token in [ldfParser.INT]: + if token in [ldfParser.INT, ldfParser.HEX]: self.enterOuterAlt(localctx, 1) - self.state = 831 + self.state = 836 localctx.i = self.intValue() pass elif token in [ldfParser.FLOAT]: self.enterOuterAlt(localctx, 2) - self.state = 832 + self.state = 837 localctx.f = self.floatValue() pass else: @@ -5595,10 +5661,10 @@ def accept(self, visitor:ParseTreeVisitor): def stringValue(self): localctx = ldfParser.StringValueContext(self, self._ctx, self.state) - self.enterRule(localctx, 138, self.RULE_stringValue) + self.enterRule(localctx, 140, self.RULE_stringValue) try: self.enterOuterAlt(localctx, 1) - self.state = 835 + self.state = 840 localctx.s = self.match(ldfParser.STRING) except RecognitionException as re: localctx.exception = re @@ -5642,10 +5708,10 @@ def accept(self, visitor:ParseTreeVisitor): def identifierValue(self): localctx = ldfParser.IdentifierValueContext(self, self._ctx, self.state) - self.enterRule(localctx, 140, self.RULE_identifierValue) + self.enterRule(localctx, 142, self.RULE_identifierValue) try: self.enterOuterAlt(localctx, 1) - self.state = 837 + self.state = 842 localctx.i = self.match(ldfParser.C_IDENTIFIER) except RecognitionException as re: localctx.exception = re diff --git a/pydbc/py3/ldfVisitor.py b/pydbc/py3/ldfVisitor.py index dac849f..70fe9d1 100644 --- a/pydbc/py3/ldfVisitor.py +++ b/pydbc/py3/ldfVisitor.py @@ -59,6 +59,11 @@ def visitNode_attributes_def(self, ctx:ldfParser.Node_attributes_defContext): return self.visitChildren(ctx) + # Visit a parse tree produced by ldfParser#node_attribute. + def visitNode_attribute(self, ctx:ldfParser.Node_attributeContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by ldfParser#protocol_version. def visitProtocol_version(self, ctx:ldfParser.Protocol_versionContext): return self.visitChildren(ctx)