radius 0.6.1 → 0.7.0.prerelease

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. data/CHANGELOG +21 -12
  2. data/LICENSE +19 -0
  3. data/QUICKSTART.rdoc +7 -7
  4. data/README.rdoc +10 -28
  5. data/Rakefile +8 -31
  6. data/VERSION +1 -0
  7. data/lib/radius.rb +3 -2
  8. data/lib/radius/context.rb +21 -13
  9. data/lib/radius/delegating_open_struct.rb +6 -0
  10. data/lib/radius/ord_string.rb +13 -0
  11. data/lib/radius/parse_tag.rb +1 -1
  12. data/lib/radius/parser.rb +25 -11
  13. data/lib/radius/parser/JavaScanner$Flavor.class +0 -0
  14. data/lib/radius/parser/JavaScanner$Tag.class +0 -0
  15. data/lib/radius/parser/JavaScanner.class +0 -0
  16. data/lib/radius/parser/JavaScanner.java +634 -0
  17. data/lib/radius/parser/JavaScanner.rl +179 -0
  18. data/lib/radius/parser/java_scanner.jar +0 -0
  19. data/lib/radius/parser/scanner.rb +1255 -0
  20. data/lib/radius/parser/{scan.rl → scanner.rl} +6 -4
  21. data/lib/radius/parser/squiggle_scanner.rb +1238 -0
  22. data/lib/radius/parser/squiggle_scanner.rl +126 -0
  23. data/lib/radius/utility.rb +10 -0
  24. data/lib/radius/version.rb +6 -12
  25. data/tasks/jeweler.rake +22 -0
  26. data/tasks/rdoc.rake +13 -0
  27. data/tasks/rubinius.rake +4 -0
  28. data/tasks/scan.rake +64 -12
  29. data/tasks/test.rake +7 -0
  30. data/test/benchmarks.rb +35 -0
  31. data/test/context_test.rb +2 -2
  32. data/test/multithreaded_test.rb +63 -0
  33. data/test/ord_string_test.rb +18 -0
  34. data/test/parser_test.rb +21 -4
  35. data/test/quickstart_test.rb +9 -11
  36. data/test/squiggle_test.rb +281 -0
  37. data/test/test_helper.rb +10 -2
  38. data/test/utility_test.rb +30 -0
  39. metadata +67 -64
  40. data.tar.gz.sig +0 -0
  41. data/Manifest.txt +0 -21
  42. data/lib/radius/parser/scan.rb +0 -700
  43. metadata.gz.sig +0 -0
@@ -0,0 +1,179 @@
1
+ %%{
2
+ machine parser;
3
+
4
+ action _prefix { mark_pfx = p; }
5
+ action prefix {
6
+ prefix = input.substring(mark_pfx, p);
7
+ }
8
+ action _check_prefix {
9
+ if ( !prefix.equals(tag_prefix) ) {
10
+ // have to manually add ':' / Sep
11
+ // pass the text through & reset state
12
+ pass_through(input.substring(tagstart, p) + ":");
13
+ prefix = "";
14
+ fgoto main;
15
+ }
16
+ }
17
+
18
+ action _starttag { mark_stg = p; }
19
+ action starttag { name = input.substring(mark_stg, p); }
20
+ action _attr { mark_attr = p; }
21
+ action attr {
22
+ attributes.op_aset(
23
+ runtime.getCurrentContext(),
24
+ RubyString.newString(runtime, nat),
25
+ RubyString.newString(runtime, vat)
26
+ );
27
+ }
28
+
29
+ action _nameattr { mark_nat = p; }
30
+ action nameattr { nat = input.substring(mark_nat, p); }
31
+ action _valattr { mark_vat = p; }
32
+ action valattr { vat = input.substring(mark_vat, p); }
33
+
34
+ action opentag { flavor = RubySymbol.newSymbol(runtime, "open".intern()); }
35
+ action selftag { flavor = RubySymbol.newSymbol(runtime, "self".intern()); }
36
+ action closetag { flavor = RubySymbol.newSymbol(runtime, "close".intern()); }
37
+
38
+ Closeout := empty;
39
+
40
+ # words
41
+ PrefixChar = [\-A-Za-z0-9._?] ;
42
+ NameChar = [\-A-Za-z0-9._:?] ;
43
+ TagName = NameChar+ >_starttag %starttag;
44
+ Prefix = PrefixChar+ >_prefix %prefix;
45
+ Open = "<";
46
+ Sep = ":" >_check_prefix;
47
+ End = "/";
48
+ Close = ">";
49
+
50
+ Name = Prefix Sep TagName;
51
+
52
+ NameAttr = NameChar+ >_nameattr %nameattr;
53
+ Q1Char = ( "\\\'" | [^'] ) ;
54
+ Q1Attr = Q1Char* >_valattr %valattr;
55
+ Q2Char = ( "\\\"" | [^"] ) ;
56
+ Q2Attr = Q2Char* >_valattr %valattr;
57
+
58
+ Attr = NameAttr space* "=" space* ('"' Q2Attr '"' | "'" Q1Attr "'") space* >_attr %attr;
59
+ Attrs = (space+ Attr* | empty);
60
+
61
+ CloseTrailer = End Close %selftag;
62
+ OpenTrailer = Close %opentag;
63
+
64
+ Trailer = (OpenTrailer | CloseTrailer);
65
+
66
+ OpenOrSelfTag = Name Attrs? Trailer;
67
+ CloseTag = End Name space* Close %closetag;
68
+
69
+ SomeTag = Open (OpenOrSelfTag | CloseTag);
70
+
71
+ main := |*
72
+ SomeTag => {
73
+ tag(prefix, name, attributes, flavor);
74
+ prefix = "";
75
+ name = "";
76
+ attributes = RubyHash.newHash(runtime);
77
+ flavor = RubySymbol.newSymbol(runtime, "tasteless".intern());
78
+ };
79
+ any => {
80
+ pass_through(input.substring(p, p + 1));
81
+ tagstart = p + 1;
82
+ };
83
+ *|;
84
+ }%%
85
+
86
+ package radius.parser;
87
+
88
+ import java.util.HashMap;
89
+ import java.util.LinkedList;
90
+ import org.jruby.Ruby; // runtime
91
+ import org.jruby.RubyObject;
92
+ import org.jruby.runtime.builtin.IRubyObject;
93
+ import org.jruby.RubyArray;
94
+ import org.jruby.RubyString;
95
+ import org.jruby.RubyHash;
96
+ import org.jruby.RubySymbol;
97
+
98
+ public class JavaScanner {
99
+
100
+ Ruby runtime = null;
101
+ RubyArray rv = null;
102
+
103
+ void pass_through(String str) {
104
+ RubyObject last = ((RubyObject)rv.last());
105
+ if ( rv.size() > 0 && last != null && (last instanceof RubyString) ){
106
+ // XXX concat changes for ruby 1.9
107
+ ((RubyString) last).concat(RubyString.newString(runtime, str));
108
+ } else {
109
+ rv.append(RubyString.newString(runtime, str));
110
+ }
111
+ }
112
+
113
+ void tag(String prefix, String name, RubyHash attr, RubySymbol flavor) {
114
+ RubyHash tag = RubyHash.newHash(runtime);
115
+ tag.op_aset(
116
+ runtime.getCurrentContext(),
117
+ RubySymbol.newSymbol(runtime, "prefix"),
118
+ RubyString.newString(runtime, prefix)
119
+ );
120
+ tag.op_aset(
121
+ runtime.getCurrentContext(),
122
+ RubySymbol.newSymbol(runtime, "name"),
123
+ RubyString.newString(runtime, name)
124
+ );
125
+ tag.op_aset(
126
+ runtime.getCurrentContext(),
127
+ RubySymbol.newSymbol(runtime, "attrs"),
128
+ attr
129
+ );
130
+ tag.op_aset(
131
+ runtime.getCurrentContext(),
132
+ RubySymbol.newSymbol(runtime, "flavor"),
133
+ flavor
134
+ );
135
+ rv.append(tag);
136
+ }
137
+
138
+ public JavaScanner(Ruby runtime) {
139
+ this.runtime = runtime;
140
+ }
141
+
142
+ %% write data;
143
+
144
+ public RubyArray operate(String tag_prefix, String input) {
145
+ char[] data = input.toCharArray();
146
+ String disposable_string;
147
+
148
+ String name = "";
149
+ String prefix = "";
150
+ RubySymbol flavor = RubySymbol.newSymbol(runtime, "tasteless".intern());
151
+ RubyHash attributes = RubyHash.newHash(runtime);
152
+
153
+ int tagstart = 0;
154
+ int mark_pfx = 0;
155
+ int mark_stg = 0;
156
+ int mark_attr = 0;
157
+ int mark_nat = 0;
158
+ int mark_vat = 0;
159
+
160
+ String nat = "";
161
+ String vat = "";
162
+
163
+ int cs;
164
+ int p = 0;
165
+ int pe = data.length;
166
+ int eof = pe;
167
+ int act;
168
+ int ts;
169
+ int te;
170
+
171
+ rv = RubyArray.newArray(runtime);
172
+ char[] remainder = data;
173
+
174
+ %% write init;
175
+ %% write exec;
176
+
177
+ return rv;
178
+ }
179
+ }
@@ -0,0 +1,1255 @@
1
+ # coding: utf-8
2
+
3
+ # line 1 "scanner.rl"
4
+
5
+ # line 84 "scanner.rl"
6
+
7
+
8
+ module Radius
9
+ class Scanner
10
+ def operate(prefix, data)
11
+ data = Radius::OrdString.new data
12
+ buf = ""
13
+ csel = ""
14
+ @prematch = ''
15
+ @starttag = nil
16
+ @attrs = {}
17
+ @flavor = :tasteless
18
+ @cursor = 0
19
+ @tagstart = 0
20
+ @nodes = ['']
21
+ remainder = data.dup
22
+
23
+ until remainder.length == 0
24
+ p = perform_parse(prefix, remainder)
25
+ remainder = remainder[p..-1]
26
+ end
27
+
28
+ return @nodes
29
+ end
30
+
31
+ private
32
+ def perform_parse(prefix, data)
33
+ stack = []
34
+ p = 0
35
+ ts = 0
36
+ te = 0
37
+ act = 0
38
+ eof = data.length
39
+
40
+ @prefix = prefix
41
+
42
+ # line 42 "scanner.rb"
43
+ class << self
44
+ attr_accessor :_parser_trans_keys
45
+ private :_parser_trans_keys, :_parser_trans_keys=
46
+ end
47
+ self._parser_trans_keys = [
48
+ 0, 0, 45, 122, 45, 122,
49
+ 9, 122, 9, 122, 9,
50
+ 122, 9, 61, 9, 39,
51
+ 34, 92, 34, 92, 9, 122,
52
+ 9, 122, 62, 62, 34,
53
+ 92, 9, 122, 9, 122,
54
+ 9, 122, 9, 92, 9, 92,
55
+ 9, 122, 34, 92, 34,
56
+ 92, 34, 92, 9, 122,
57
+ 39, 92, 39, 92, 9, 122,
58
+ 9, 122, 9, 92, 9,
59
+ 92, 34, 92, 34, 92,
60
+ 9, 122, 9, 122, 9, 122,
61
+ 9, 92, 9, 92, 9,
62
+ 122, 34, 92, 9, 122,
63
+ 9, 122, 39, 92, 39, 92,
64
+ 45, 122, 45, 122, 45,
65
+ 122, 9, 122, 9, 62,
66
+ 0, 0, 60, 60, 45, 122,
67
+ 0, 0, 0, 0, 34,
68
+ 92, 34, 92, 34, 92,
69
+ 34, 92, 39, 92, 39, 92,
70
+ 0, 0, 0
71
+ ]
72
+
73
+ class << self
74
+ attr_accessor :_parser_key_spans
75
+ private :_parser_key_spans, :_parser_key_spans=
76
+ end
77
+ self._parser_key_spans = [
78
+ 0, 78, 78, 114, 114, 114, 53, 31,
79
+ 59, 59, 114, 114, 1, 59, 114, 114,
80
+ 114, 84, 84, 114, 59, 59, 59, 114,
81
+ 54, 54, 114, 114, 84, 84, 59, 59,
82
+ 114, 114, 114, 84, 84, 114, 59, 114,
83
+ 114, 54, 54, 78, 78, 78, 114, 54,
84
+ 0, 1, 78, 0, 0, 59, 59, 59,
85
+ 59, 54, 54, 0
86
+ ]
87
+
88
+ class << self
89
+ attr_accessor :_parser_index_offsets
90
+ private :_parser_index_offsets, :_parser_index_offsets=
91
+ end
92
+ self._parser_index_offsets = [
93
+ 0, 0, 79, 158, 273, 388, 503, 557,
94
+ 589, 649, 709, 824, 939, 941, 1001, 1116,
95
+ 1231, 1346, 1431, 1516, 1631, 1691, 1751, 1811,
96
+ 1926, 1981, 2036, 2151, 2266, 2351, 2436, 2496,
97
+ 2556, 2671, 2786, 2901, 2986, 3071, 3186, 3246,
98
+ 3361, 3476, 3531, 3586, 3665, 3744, 3823, 3938,
99
+ 3993, 3994, 3996, 4075, 4076, 4077, 4137, 4197,
100
+ 4257, 4317, 4372, 4427
101
+ ]
102
+
103
+ class << self
104
+ attr_accessor :_parser_indicies
105
+ private :_parser_indicies, :_parser_indicies=
106
+ end
107
+ self._parser_indicies = [
108
+ 1, 1, 0, 1, 1, 1, 1, 1,
109
+ 1, 1, 1, 1, 1, 2, 0, 0,
110
+ 0, 0, 1, 0, 1, 1, 1, 1,
111
+ 1, 1, 1, 1, 1, 1, 1, 1,
112
+ 1, 1, 1, 1, 1, 1, 1, 1,
113
+ 1, 1, 1, 1, 1, 1, 0, 0,
114
+ 0, 0, 1, 0, 1, 1, 1, 1,
115
+ 1, 1, 1, 1, 1, 1, 1, 1,
116
+ 1, 1, 1, 1, 1, 1, 1, 1,
117
+ 1, 1, 1, 1, 1, 1, 0, 3,
118
+ 3, 0, 3, 3, 3, 3, 3, 3,
119
+ 3, 3, 3, 3, 3, 0, 0, 0,
120
+ 0, 3, 0, 3, 3, 3, 3, 3,
121
+ 3, 3, 3, 3, 3, 3, 3, 3,
122
+ 3, 3, 3, 3, 3, 3, 3, 3,
123
+ 3, 3, 3, 3, 3, 0, 0, 0,
124
+ 0, 3, 0, 3, 3, 3, 3, 3,
125
+ 3, 3, 3, 3, 3, 3, 3, 3,
126
+ 3, 3, 3, 3, 3, 3, 3, 3,
127
+ 3, 3, 3, 3, 3, 0, 4, 4,
128
+ 4, 4, 4, 0, 0, 0, 0, 0,
129
+ 0, 0, 0, 0, 0, 0, 0, 0,
130
+ 0, 0, 0, 0, 0, 4, 0, 0,
131
+ 0, 0, 0, 0, 0, 0, 0, 0,
132
+ 0, 0, 5, 5, 6, 5, 5, 5,
133
+ 5, 5, 5, 5, 5, 5, 5, 5,
134
+ 0, 0, 0, 7, 5, 0, 5, 5,
135
+ 5, 5, 5, 5, 5, 5, 5, 5,
136
+ 5, 5, 5, 5, 5, 5, 5, 5,
137
+ 5, 5, 5, 5, 5, 5, 5, 5,
138
+ 0, 0, 0, 0, 5, 0, 5, 5,
139
+ 5, 5, 5, 5, 5, 5, 5, 5,
140
+ 5, 5, 5, 5, 5, 5, 5, 5,
141
+ 5, 5, 5, 5, 5, 5, 5, 5,
142
+ 0, 8, 8, 8, 8, 8, 0, 0,
143
+ 0, 0, 0, 0, 0, 0, 0, 0,
144
+ 0, 0, 0, 0, 0, 0, 0, 0,
145
+ 8, 0, 0, 0, 0, 0, 0, 0,
146
+ 0, 0, 0, 0, 0, 9, 9, 10,
147
+ 9, 9, 9, 9, 9, 9, 9, 9,
148
+ 9, 9, 9, 0, 0, 0, 11, 9,
149
+ 0, 9, 9, 9, 9, 9, 9, 9,
150
+ 9, 9, 9, 9, 9, 9, 9, 9,
151
+ 9, 9, 9, 9, 9, 9, 9, 9,
152
+ 9, 9, 9, 0, 0, 0, 0, 9,
153
+ 0, 9, 9, 9, 9, 9, 9, 9,
154
+ 9, 9, 9, 9, 9, 9, 9, 9,
155
+ 9, 9, 9, 9, 9, 9, 9, 9,
156
+ 9, 9, 9, 0, 13, 13, 13, 13,
157
+ 13, 12, 12, 12, 12, 12, 12, 12,
158
+ 12, 12, 12, 12, 12, 12, 12, 12,
159
+ 12, 12, 12, 13, 12, 12, 12, 12,
160
+ 12, 12, 12, 12, 12, 12, 12, 12,
161
+ 14, 14, 12, 14, 14, 14, 14, 14,
162
+ 14, 14, 14, 14, 14, 14, 12, 12,
163
+ 15, 12, 14, 12, 14, 14, 14, 14,
164
+ 14, 14, 14, 14, 14, 14, 14, 14,
165
+ 14, 14, 14, 14, 14, 14, 14, 14,
166
+ 14, 14, 14, 14, 14, 14, 12, 12,
167
+ 12, 12, 14, 12, 14, 14, 14, 14,
168
+ 14, 14, 14, 14, 14, 14, 14, 14,
169
+ 14, 14, 14, 14, 14, 14, 14, 14,
170
+ 14, 14, 14, 14, 14, 14, 12, 16,
171
+ 16, 16, 16, 16, 12, 12, 12, 12,
172
+ 12, 12, 12, 12, 12, 12, 12, 12,
173
+ 12, 12, 12, 12, 12, 12, 16, 12,
174
+ 12, 12, 12, 12, 12, 12, 12, 12,
175
+ 12, 12, 12, 12, 12, 12, 12, 12,
176
+ 12, 12, 12, 12, 12, 12, 12, 12,
177
+ 12, 12, 12, 17, 12, 17, 17, 17,
178
+ 17, 17, 12, 12, 12, 12, 12, 12,
179
+ 12, 12, 12, 12, 12, 12, 12, 12,
180
+ 12, 12, 12, 12, 17, 12, 18, 12,
181
+ 12, 12, 12, 19, 12, 21, 20, 20,
182
+ 20, 20, 20, 20, 20, 20, 20, 20,
183
+ 20, 20, 20, 20, 20, 20, 20, 20,
184
+ 20, 20, 20, 20, 20, 20, 20, 20,
185
+ 20, 20, 20, 20, 20, 20, 20, 20,
186
+ 20, 20, 20, 20, 20, 20, 20, 20,
187
+ 20, 20, 20, 20, 20, 20, 20, 20,
188
+ 20, 20, 20, 20, 20, 20, 20, 22,
189
+ 20, 24, 23, 23, 23, 23, 23, 23,
190
+ 23, 23, 23, 23, 23, 23, 23, 23,
191
+ 23, 23, 23, 23, 23, 23, 23, 23,
192
+ 23, 23, 23, 23, 23, 23, 23, 23,
193
+ 23, 23, 23, 23, 23, 23, 23, 23,
194
+ 23, 23, 23, 23, 23, 23, 23, 23,
195
+ 23, 23, 23, 23, 23, 23, 23, 23,
196
+ 23, 23, 23, 25, 23, 26, 26, 26,
197
+ 26, 26, 12, 12, 12, 12, 12, 12,
198
+ 12, 12, 12, 12, 12, 12, 12, 12,
199
+ 12, 12, 12, 12, 26, 12, 12, 12,
200
+ 12, 12, 12, 12, 12, 12, 12, 12,
201
+ 12, 27, 27, 28, 27, 27, 27, 27,
202
+ 27, 27, 27, 27, 27, 27, 27, 12,
203
+ 12, 12, 29, 27, 12, 27, 27, 27,
204
+ 27, 27, 27, 27, 27, 27, 27, 27,
205
+ 27, 27, 27, 27, 27, 27, 27, 27,
206
+ 27, 27, 27, 27, 27, 27, 27, 12,
207
+ 12, 12, 12, 27, 12, 27, 27, 27,
208
+ 27, 27, 27, 27, 27, 27, 27, 27,
209
+ 27, 27, 27, 27, 27, 27, 27, 27,
210
+ 27, 27, 27, 27, 27, 27, 27, 12,
211
+ 30, 30, 30, 30, 30, 12, 12, 12,
212
+ 12, 12, 12, 12, 12, 12, 12, 12,
213
+ 12, 12, 12, 12, 12, 12, 12, 30,
214
+ 12, 12, 12, 12, 12, 12, 12, 12,
215
+ 12, 12, 12, 12, 31, 31, 32, 31,
216
+ 31, 31, 31, 31, 31, 31, 31, 31,
217
+ 31, 31, 12, 12, 12, 33, 31, 12,
218
+ 31, 31, 31, 31, 31, 31, 31, 31,
219
+ 31, 31, 31, 31, 31, 31, 31, 31,
220
+ 31, 31, 31, 31, 31, 31, 31, 31,
221
+ 31, 31, 12, 12, 12, 12, 31, 12,
222
+ 31, 31, 31, 31, 31, 31, 31, 31,
223
+ 31, 31, 31, 31, 31, 31, 31, 31,
224
+ 31, 31, 31, 31, 31, 31, 31, 31,
225
+ 31, 31, 12, 34, 12, 35, 23, 23,
226
+ 23, 23, 23, 23, 23, 23, 23, 23,
227
+ 23, 23, 23, 23, 23, 23, 23, 23,
228
+ 23, 23, 23, 23, 23, 23, 23, 23,
229
+ 23, 23, 23, 23, 23, 23, 23, 23,
230
+ 23, 23, 23, 23, 23, 23, 23, 23,
231
+ 23, 23, 23, 23, 23, 23, 23, 23,
232
+ 23, 23, 23, 23, 23, 23, 23, 25,
233
+ 23, 36, 36, 36, 36, 36, 23, 23,
234
+ 23, 23, 23, 23, 23, 23, 23, 23,
235
+ 23, 23, 23, 23, 23, 23, 23, 23,
236
+ 36, 23, 24, 23, 23, 23, 23, 23,
237
+ 23, 23, 23, 23, 23, 37, 37, 38,
238
+ 37, 37, 37, 37, 37, 37, 37, 37,
239
+ 37, 37, 37, 23, 23, 23, 39, 37,
240
+ 23, 37, 37, 37, 37, 37, 37, 37,
241
+ 37, 37, 37, 37, 37, 37, 37, 37,
242
+ 37, 37, 37, 37, 37, 37, 37, 37,
243
+ 37, 37, 37, 23, 25, 23, 23, 37,
244
+ 23, 37, 37, 37, 37, 37, 37, 37,
245
+ 37, 37, 37, 37, 37, 37, 37, 37,
246
+ 37, 37, 37, 37, 37, 37, 37, 37,
247
+ 37, 37, 37, 23, 40, 40, 40, 40,
248
+ 40, 23, 23, 23, 23, 23, 23, 23,
249
+ 23, 23, 23, 23, 23, 23, 23, 23,
250
+ 23, 23, 23, 40, 23, 24, 23, 23,
251
+ 23, 23, 23, 23, 23, 23, 23, 23,
252
+ 41, 41, 42, 41, 41, 41, 41, 41,
253
+ 41, 41, 41, 41, 41, 41, 23, 23,
254
+ 23, 43, 41, 23, 41, 41, 41, 41,
255
+ 41, 41, 41, 41, 41, 41, 41, 41,
256
+ 41, 41, 41, 41, 41, 41, 41, 41,
257
+ 41, 41, 41, 41, 41, 41, 23, 25,
258
+ 23, 23, 41, 23, 41, 41, 41, 41,
259
+ 41, 41, 41, 41, 41, 41, 41, 41,
260
+ 41, 41, 41, 41, 41, 41, 41, 41,
261
+ 41, 41, 41, 41, 41, 41, 23, 44,
262
+ 44, 44, 44, 44, 23, 23, 23, 23,
263
+ 23, 23, 23, 23, 23, 23, 23, 23,
264
+ 23, 23, 23, 23, 23, 23, 44, 23,
265
+ 24, 23, 23, 23, 23, 23, 23, 23,
266
+ 23, 23, 23, 45, 45, 23, 45, 45,
267
+ 45, 45, 45, 45, 45, 45, 45, 45,
268
+ 45, 23, 23, 46, 23, 45, 23, 45,
269
+ 45, 45, 45, 45, 45, 45, 45, 45,
270
+ 45, 45, 45, 45, 45, 45, 45, 45,
271
+ 45, 45, 45, 45, 45, 45, 45, 45,
272
+ 45, 23, 25, 23, 23, 45, 23, 45,
273
+ 45, 45, 45, 45, 45, 45, 45, 45,
274
+ 45, 45, 45, 45, 45, 45, 45, 45,
275
+ 45, 45, 45, 45, 45, 45, 45, 45,
276
+ 45, 23, 47, 47, 47, 47, 47, 23,
277
+ 23, 23, 23, 23, 23, 23, 23, 23,
278
+ 23, 23, 23, 23, 23, 23, 23, 23,
279
+ 23, 47, 23, 24, 23, 23, 23, 23,
280
+ 23, 23, 23, 23, 23, 23, 23, 23,
281
+ 23, 23, 23, 23, 23, 23, 23, 23,
282
+ 23, 23, 23, 23, 23, 23, 48, 23,
283
+ 23, 23, 23, 23, 23, 23, 23, 23,
284
+ 23, 23, 23, 23, 23, 23, 23, 23,
285
+ 23, 23, 23, 23, 23, 23, 23, 23,
286
+ 23, 23, 23, 23, 23, 25, 23, 48,
287
+ 48, 48, 48, 48, 23, 23, 23, 23,
288
+ 23, 23, 23, 23, 23, 23, 23, 23,
289
+ 23, 23, 23, 23, 23, 23, 48, 23,
290
+ 49, 23, 23, 23, 23, 50, 23, 23,
291
+ 23, 23, 23, 23, 23, 23, 23, 23,
292
+ 23, 23, 23, 23, 23, 23, 23, 23,
293
+ 23, 23, 23, 23, 23, 23, 23, 23,
294
+ 23, 23, 23, 23, 23, 23, 23, 23,
295
+ 23, 23, 23, 23, 23, 23, 23, 23,
296
+ 23, 23, 23, 23, 23, 23, 23, 23,
297
+ 23, 23, 25, 23, 51, 51, 51, 51,
298
+ 51, 20, 20, 20, 20, 20, 20, 20,
299
+ 20, 20, 20, 20, 20, 20, 20, 20,
300
+ 20, 20, 20, 51, 20, 21, 20, 20,
301
+ 20, 20, 20, 20, 20, 20, 20, 20,
302
+ 52, 52, 53, 52, 52, 52, 52, 52,
303
+ 52, 52, 52, 52, 52, 52, 20, 20,
304
+ 20, 54, 52, 20, 52, 52, 52, 52,
305
+ 52, 52, 52, 52, 52, 52, 52, 52,
306
+ 52, 52, 52, 52, 52, 52, 52, 52,
307
+ 52, 52, 52, 52, 52, 52, 20, 22,
308
+ 20, 20, 52, 20, 52, 52, 52, 52,
309
+ 52, 52, 52, 52, 52, 52, 52, 52,
310
+ 52, 52, 52, 52, 52, 52, 52, 52,
311
+ 52, 52, 52, 52, 52, 52, 20, 24,
312
+ 23, 23, 23, 23, 23, 23, 23, 23,
313
+ 23, 23, 23, 23, 23, 23, 23, 23,
314
+ 23, 23, 23, 23, 23, 23, 23, 23,
315
+ 23, 23, 23, 55, 23, 23, 23, 23,
316
+ 23, 23, 23, 23, 23, 23, 23, 23,
317
+ 23, 23, 23, 23, 23, 23, 23, 23,
318
+ 23, 23, 23, 23, 23, 23, 23, 23,
319
+ 23, 25, 23, 57, 56, 56, 56, 56,
320
+ 58, 56, 56, 56, 56, 56, 56, 56,
321
+ 56, 56, 56, 56, 56, 56, 56, 56,
322
+ 56, 56, 56, 56, 56, 56, 56, 56,
323
+ 56, 56, 56, 56, 56, 56, 56, 56,
324
+ 56, 56, 56, 56, 56, 56, 56, 56,
325
+ 56, 56, 56, 56, 56, 56, 56, 56,
326
+ 56, 56, 56, 56, 56, 59, 56, 61,
327
+ 60, 60, 60, 60, 35, 60, 60, 60,
328
+ 60, 60, 60, 60, 60, 60, 60, 60,
329
+ 60, 60, 60, 60, 60, 60, 60, 60,
330
+ 60, 60, 60, 60, 60, 60, 60, 60,
331
+ 60, 60, 60, 60, 60, 60, 60, 60,
332
+ 60, 60, 60, 60, 60, 60, 60, 60,
333
+ 60, 60, 60, 60, 60, 60, 60, 60,
334
+ 60, 62, 60, 64, 64, 64, 64, 64,
335
+ 63, 63, 63, 63, 63, 63, 63, 63,
336
+ 63, 63, 63, 63, 63, 63, 63, 63,
337
+ 63, 63, 64, 63, 63, 63, 63, 63,
338
+ 63, 24, 63, 63, 63, 63, 63, 65,
339
+ 65, 66, 65, 65, 65, 65, 65, 65,
340
+ 65, 65, 65, 65, 65, 63, 63, 63,
341
+ 67, 65, 63, 65, 65, 65, 65, 65,
342
+ 65, 65, 65, 65, 65, 65, 65, 65,
343
+ 65, 65, 65, 65, 65, 65, 65, 65,
344
+ 65, 65, 65, 65, 65, 63, 68, 63,
345
+ 63, 65, 63, 65, 65, 65, 65, 65,
346
+ 65, 65, 65, 65, 65, 65, 65, 65,
347
+ 65, 65, 65, 65, 65, 65, 65, 65,
348
+ 65, 65, 65, 65, 65, 63, 24, 63,
349
+ 63, 63, 63, 63, 63, 63, 63, 63,
350
+ 63, 63, 63, 63, 63, 63, 63, 63,
351
+ 63, 63, 63, 63, 63, 63, 63, 63,
352
+ 63, 63, 63, 63, 63, 63, 63, 63,
353
+ 63, 63, 63, 63, 63, 63, 63, 63,
354
+ 63, 63, 63, 63, 63, 63, 63, 63,
355
+ 63, 63, 63, 68, 63, 61, 63, 63,
356
+ 63, 63, 63, 63, 63, 63, 63, 63,
357
+ 63, 63, 63, 63, 63, 63, 63, 63,
358
+ 63, 63, 63, 63, 63, 63, 63, 63,
359
+ 63, 63, 63, 63, 63, 63, 63, 63,
360
+ 63, 63, 63, 63, 63, 63, 63, 63,
361
+ 63, 63, 63, 63, 63, 63, 63, 63,
362
+ 63, 63, 68, 63, 69, 69, 69, 69,
363
+ 69, 63, 63, 63, 63, 63, 63, 63,
364
+ 63, 63, 63, 63, 63, 63, 63, 63,
365
+ 63, 63, 63, 69, 63, 63, 63, 63,
366
+ 63, 63, 24, 63, 63, 63, 63, 63,
367
+ 70, 70, 71, 70, 70, 70, 70, 70,
368
+ 70, 70, 70, 70, 70, 70, 63, 63,
369
+ 63, 72, 70, 63, 70, 70, 70, 70,
370
+ 70, 70, 70, 70, 70, 70, 70, 70,
371
+ 70, 70, 70, 70, 70, 70, 70, 70,
372
+ 70, 70, 70, 70, 70, 70, 63, 68,
373
+ 63, 63, 70, 63, 70, 70, 70, 70,
374
+ 70, 70, 70, 70, 70, 70, 70, 70,
375
+ 70, 70, 70, 70, 70, 70, 70, 70,
376
+ 70, 70, 70, 70, 70, 70, 63, 73,
377
+ 73, 73, 73, 73, 63, 63, 63, 63,
378
+ 63, 63, 63, 63, 63, 63, 63, 63,
379
+ 63, 63, 63, 63, 63, 63, 73, 63,
380
+ 63, 63, 63, 63, 63, 24, 63, 63,
381
+ 63, 63, 63, 74, 74, 63, 74, 74,
382
+ 74, 74, 74, 74, 74, 74, 74, 74,
383
+ 74, 63, 63, 75, 63, 74, 63, 74,
384
+ 74, 74, 74, 74, 74, 74, 74, 74,
385
+ 74, 74, 74, 74, 74, 74, 74, 74,
386
+ 74, 74, 74, 74, 74, 74, 74, 74,
387
+ 74, 63, 68, 63, 63, 74, 63, 74,
388
+ 74, 74, 74, 74, 74, 74, 74, 74,
389
+ 74, 74, 74, 74, 74, 74, 74, 74,
390
+ 74, 74, 74, 74, 74, 74, 74, 74,
391
+ 74, 63, 76, 76, 76, 76, 76, 63,
392
+ 63, 63, 63, 63, 63, 63, 63, 63,
393
+ 63, 63, 63, 63, 63, 63, 63, 63,
394
+ 63, 76, 63, 63, 63, 63, 63, 63,
395
+ 24, 63, 63, 63, 63, 63, 63, 63,
396
+ 63, 63, 63, 63, 63, 63, 63, 63,
397
+ 63, 63, 63, 63, 63, 63, 77, 63,
398
+ 63, 63, 63, 63, 63, 63, 63, 63,
399
+ 63, 63, 63, 63, 63, 63, 63, 63,
400
+ 63, 63, 63, 63, 63, 63, 63, 63,
401
+ 63, 63, 63, 63, 63, 68, 63, 77,
402
+ 77, 77, 77, 77, 63, 63, 63, 63,
403
+ 63, 63, 63, 63, 63, 63, 63, 63,
404
+ 63, 63, 63, 63, 63, 63, 77, 63,
405
+ 78, 63, 63, 63, 63, 79, 63, 63,
406
+ 63, 63, 63, 63, 63, 63, 63, 63,
407
+ 63, 63, 63, 63, 63, 63, 63, 63,
408
+ 63, 63, 63, 63, 63, 63, 63, 63,
409
+ 63, 63, 63, 63, 63, 63, 63, 63,
410
+ 63, 63, 63, 63, 63, 63, 63, 63,
411
+ 63, 63, 63, 63, 63, 63, 63, 63,
412
+ 63, 63, 68, 63, 80, 56, 56, 56,
413
+ 56, 58, 56, 56, 56, 56, 56, 56,
414
+ 56, 56, 56, 56, 56, 56, 56, 56,
415
+ 56, 56, 56, 56, 56, 56, 56, 56,
416
+ 56, 56, 56, 56, 56, 56, 56, 56,
417
+ 56, 56, 56, 56, 56, 56, 56, 56,
418
+ 56, 56, 56, 56, 56, 56, 56, 56,
419
+ 56, 56, 56, 56, 56, 56, 59, 56,
420
+ 81, 60, 60, 60, 60, 81, 60, 60,
421
+ 60, 60, 60, 60, 60, 60, 60, 60,
422
+ 60, 60, 60, 60, 60, 60, 60, 60,
423
+ 60, 60, 60, 60, 60, 60, 60, 60,
424
+ 60, 60, 60, 60, 60, 60, 60, 60,
425
+ 60, 60, 60, 60, 60, 60, 60, 60,
426
+ 60, 60, 60, 60, 60, 60, 60, 60,
427
+ 60, 60, 62, 60, 82, 82, 82, 82,
428
+ 82, 60, 60, 60, 60, 60, 60, 60,
429
+ 60, 60, 60, 60, 60, 60, 60, 60,
430
+ 60, 60, 60, 82, 60, 61, 60, 60,
431
+ 60, 60, 35, 60, 60, 60, 60, 60,
432
+ 83, 83, 84, 83, 83, 83, 83, 83,
433
+ 83, 83, 83, 83, 83, 83, 60, 60,
434
+ 60, 85, 83, 60, 83, 83, 83, 83,
435
+ 83, 83, 83, 83, 83, 83, 83, 83,
436
+ 83, 83, 83, 83, 83, 83, 83, 83,
437
+ 83, 83, 83, 83, 83, 83, 60, 62,
438
+ 60, 60, 83, 60, 83, 83, 83, 83,
439
+ 83, 83, 83, 83, 83, 83, 83, 83,
440
+ 83, 83, 83, 83, 83, 83, 83, 83,
441
+ 83, 83, 83, 83, 83, 83, 60, 86,
442
+ 86, 86, 86, 86, 60, 60, 60, 60,
443
+ 60, 60, 60, 60, 60, 60, 60, 60,
444
+ 60, 60, 60, 60, 60, 60, 86, 60,
445
+ 61, 60, 60, 60, 60, 35, 60, 60,
446
+ 60, 60, 60, 87, 87, 88, 87, 87,
447
+ 87, 87, 87, 87, 87, 87, 87, 87,
448
+ 87, 60, 60, 60, 89, 87, 60, 87,
449
+ 87, 87, 87, 87, 87, 87, 87, 87,
450
+ 87, 87, 87, 87, 87, 87, 87, 87,
451
+ 87, 87, 87, 87, 87, 87, 87, 87,
452
+ 87, 60, 62, 60, 60, 87, 60, 87,
453
+ 87, 87, 87, 87, 87, 87, 87, 87,
454
+ 87, 87, 87, 87, 87, 87, 87, 87,
455
+ 87, 87, 87, 87, 87, 87, 87, 87,
456
+ 87, 60, 90, 90, 90, 90, 90, 60,
457
+ 60, 60, 60, 60, 60, 60, 60, 60,
458
+ 60, 60, 60, 60, 60, 60, 60, 60,
459
+ 60, 90, 60, 61, 60, 60, 60, 60,
460
+ 35, 60, 60, 60, 60, 60, 91, 91,
461
+ 60, 91, 91, 91, 91, 91, 91, 91,
462
+ 91, 91, 91, 91, 60, 60, 92, 60,
463
+ 91, 60, 91, 91, 91, 91, 91, 91,
464
+ 91, 91, 91, 91, 91, 91, 91, 91,
465
+ 91, 91, 91, 91, 91, 91, 91, 91,
466
+ 91, 91, 91, 91, 60, 62, 60, 60,
467
+ 91, 60, 91, 91, 91, 91, 91, 91,
468
+ 91, 91, 91, 91, 91, 91, 91, 91,
469
+ 91, 91, 91, 91, 91, 91, 91, 91,
470
+ 91, 91, 91, 91, 60, 93, 93, 93,
471
+ 93, 93, 60, 60, 60, 60, 60, 60,
472
+ 60, 60, 60, 60, 60, 60, 60, 60,
473
+ 60, 60, 60, 60, 93, 60, 61, 60,
474
+ 60, 60, 60, 35, 60, 60, 60, 60,
475
+ 60, 60, 60, 60, 60, 60, 60, 60,
476
+ 60, 60, 60, 60, 60, 60, 60, 60,
477
+ 60, 94, 60, 60, 60, 60, 60, 60,
478
+ 60, 60, 60, 60, 60, 60, 60, 60,
479
+ 60, 60, 60, 60, 60, 60, 60, 60,
480
+ 60, 60, 60, 60, 60, 60, 60, 60,
481
+ 62, 60, 94, 94, 94, 94, 94, 60,
482
+ 60, 60, 60, 60, 60, 60, 60, 60,
483
+ 60, 60, 60, 60, 60, 60, 60, 60,
484
+ 60, 94, 60, 95, 60, 60, 60, 60,
485
+ 96, 60, 60, 60, 60, 60, 60, 60,
486
+ 60, 60, 60, 60, 60, 60, 60, 60,
487
+ 60, 60, 60, 60, 60, 60, 60, 60,
488
+ 60, 60, 60, 60, 60, 60, 60, 60,
489
+ 60, 60, 60, 60, 60, 60, 60, 60,
490
+ 60, 60, 60, 60, 60, 60, 60, 60,
491
+ 60, 60, 60, 60, 60, 62, 60, 97,
492
+ 97, 97, 97, 97, 56, 56, 56, 56,
493
+ 56, 56, 56, 56, 56, 56, 56, 56,
494
+ 56, 56, 56, 56, 56, 56, 97, 56,
495
+ 80, 56, 56, 56, 56, 58, 56, 56,
496
+ 56, 56, 56, 98, 98, 99, 98, 98,
497
+ 98, 98, 98, 98, 98, 98, 98, 98,
498
+ 98, 56, 56, 56, 100, 98, 56, 98,
499
+ 98, 98, 98, 98, 98, 98, 98, 98,
500
+ 98, 98, 98, 98, 98, 98, 98, 98,
501
+ 98, 98, 98, 98, 98, 98, 98, 98,
502
+ 98, 56, 59, 56, 56, 98, 56, 98,
503
+ 98, 98, 98, 98, 98, 98, 98, 98,
504
+ 98, 98, 98, 98, 98, 98, 98, 98,
505
+ 98, 98, 98, 98, 98, 98, 98, 98,
506
+ 98, 56, 61, 60, 60, 60, 60, 35,
507
+ 60, 60, 60, 60, 60, 60, 60, 60,
508
+ 60, 60, 60, 60, 60, 60, 60, 60,
509
+ 60, 60, 60, 60, 60, 60, 101, 60,
510
+ 60, 60, 60, 60, 60, 60, 60, 60,
511
+ 60, 60, 60, 60, 60, 60, 60, 60,
512
+ 60, 60, 60, 60, 60, 60, 60, 60,
513
+ 60, 60, 60, 60, 62, 60, 97, 97,
514
+ 97, 97, 97, 56, 56, 56, 56, 56,
515
+ 56, 56, 56, 56, 56, 56, 56, 56,
516
+ 56, 56, 56, 56, 56, 97, 56, 57,
517
+ 56, 56, 56, 56, 58, 56, 56, 56,
518
+ 56, 56, 98, 98, 99, 98, 98, 98,
519
+ 98, 98, 98, 98, 98, 98, 98, 98,
520
+ 56, 56, 56, 100, 98, 56, 98, 98,
521
+ 98, 98, 98, 98, 98, 98, 98, 98,
522
+ 98, 98, 98, 98, 98, 98, 98, 98,
523
+ 98, 98, 98, 98, 98, 98, 98, 98,
524
+ 56, 59, 56, 56, 98, 56, 98, 98,
525
+ 98, 98, 98, 98, 98, 98, 98, 98,
526
+ 98, 98, 98, 98, 98, 98, 98, 98,
527
+ 98, 98, 98, 98, 98, 98, 98, 98,
528
+ 56, 103, 103, 103, 103, 103, 102, 102,
529
+ 102, 102, 102, 102, 102, 102, 102, 102,
530
+ 102, 102, 102, 102, 102, 102, 102, 102,
531
+ 103, 102, 102, 102, 102, 102, 102, 21,
532
+ 102, 102, 102, 102, 102, 104, 104, 105,
533
+ 104, 104, 104, 104, 104, 104, 104, 104,
534
+ 104, 104, 104, 102, 102, 102, 106, 104,
535
+ 102, 104, 104, 104, 104, 104, 104, 104,
536
+ 104, 104, 104, 104, 104, 104, 104, 104,
537
+ 104, 104, 104, 104, 104, 104, 104, 104,
538
+ 104, 104, 104, 102, 107, 102, 102, 104,
539
+ 102, 104, 104, 104, 104, 104, 104, 104,
540
+ 104, 104, 104, 104, 104, 104, 104, 104,
541
+ 104, 104, 104, 104, 104, 104, 104, 104,
542
+ 104, 104, 104, 102, 24, 63, 63, 63,
543
+ 63, 63, 63, 63, 63, 63, 63, 63,
544
+ 63, 63, 63, 63, 63, 63, 63, 63,
545
+ 63, 63, 63, 108, 63, 63, 63, 63,
546
+ 63, 63, 63, 63, 63, 63, 63, 63,
547
+ 63, 63, 63, 63, 63, 63, 63, 63,
548
+ 63, 63, 63, 63, 63, 63, 63, 63,
549
+ 63, 68, 63, 21, 102, 102, 102, 102,
550
+ 102, 102, 102, 102, 102, 102, 102, 102,
551
+ 102, 102, 102, 102, 102, 102, 102, 102,
552
+ 102, 102, 102, 102, 102, 102, 102, 102,
553
+ 102, 102, 102, 102, 102, 102, 102, 102,
554
+ 102, 102, 102, 102, 102, 102, 102, 102,
555
+ 102, 102, 102, 102, 102, 102, 102, 102,
556
+ 107, 102, 109, 109, 0, 109, 109, 109,
557
+ 109, 109, 109, 109, 109, 109, 109, 0,
558
+ 0, 0, 0, 0, 109, 0, 109, 109,
559
+ 109, 109, 109, 109, 109, 109, 109, 109,
560
+ 109, 109, 109, 109, 109, 109, 109, 109,
561
+ 109, 109, 109, 109, 109, 109, 109, 109,
562
+ 0, 0, 0, 0, 109, 0, 109, 109,
563
+ 109, 109, 109, 109, 109, 109, 109, 109,
564
+ 109, 109, 109, 109, 109, 109, 109, 109,
565
+ 109, 109, 109, 109, 109, 109, 109, 109,
566
+ 0, 110, 110, 0, 110, 110, 110, 110,
567
+ 110, 110, 110, 110, 110, 110, 111, 0,
568
+ 0, 0, 0, 110, 0, 110, 110, 110,
569
+ 110, 110, 110, 110, 110, 110, 110, 110,
570
+ 110, 110, 110, 110, 110, 110, 110, 110,
571
+ 110, 110, 110, 110, 110, 110, 110, 0,
572
+ 0, 0, 0, 110, 0, 110, 110, 110,
573
+ 110, 110, 110, 110, 110, 110, 110, 110,
574
+ 110, 110, 110, 110, 110, 110, 110, 110,
575
+ 110, 110, 110, 110, 110, 110, 110, 0,
576
+ 112, 112, 0, 112, 112, 112, 112, 112,
577
+ 112, 112, 112, 112, 112, 112, 0, 0,
578
+ 0, 0, 112, 0, 112, 112, 112, 112,
579
+ 112, 112, 112, 112, 112, 112, 112, 112,
580
+ 112, 112, 112, 112, 112, 112, 112, 112,
581
+ 112, 112, 112, 112, 112, 112, 0, 0,
582
+ 0, 0, 112, 0, 112, 112, 112, 112,
583
+ 112, 112, 112, 112, 112, 112, 112, 112,
584
+ 112, 112, 112, 112, 112, 112, 112, 112,
585
+ 112, 112, 112, 112, 112, 112, 0, 113,
586
+ 113, 113, 113, 113, 0, 0, 0, 0,
587
+ 0, 0, 0, 0, 0, 0, 0, 0,
588
+ 0, 0, 0, 0, 0, 0, 113, 0,
589
+ 0, 0, 0, 0, 0, 0, 0, 0,
590
+ 0, 0, 0, 114, 114, 0, 114, 114,
591
+ 114, 114, 114, 114, 114, 114, 114, 114,
592
+ 114, 0, 0, 0, 115, 114, 0, 114,
593
+ 114, 114, 114, 114, 114, 114, 114, 114,
594
+ 114, 114, 114, 114, 114, 114, 114, 114,
595
+ 114, 114, 114, 114, 114, 114, 114, 114,
596
+ 114, 0, 0, 0, 0, 114, 0, 114,
597
+ 114, 114, 114, 114, 114, 114, 114, 114,
598
+ 114, 114, 114, 114, 114, 114, 114, 114,
599
+ 114, 114, 114, 114, 114, 114, 114, 114,
600
+ 114, 0, 116, 116, 116, 116, 116, 0,
601
+ 0, 0, 0, 0, 0, 0, 0, 0,
602
+ 0, 0, 0, 0, 0, 0, 0, 0,
603
+ 0, 116, 0, 0, 0, 0, 0, 0,
604
+ 0, 0, 0, 0, 0, 0, 0, 0,
605
+ 0, 0, 0, 0, 0, 0, 0, 0,
606
+ 0, 0, 0, 0, 0, 0, 0, 117,
607
+ 0, 118, 120, 119, 122, 122, 123, 122,
608
+ 122, 122, 122, 122, 122, 122, 122, 122,
609
+ 122, 121, 121, 121, 121, 121, 122, 121,
610
+ 122, 122, 122, 122, 122, 122, 122, 122,
611
+ 122, 122, 122, 122, 122, 122, 122, 122,
612
+ 122, 122, 122, 122, 122, 122, 122, 122,
613
+ 122, 122, 121, 121, 121, 121, 122, 121,
614
+ 122, 122, 122, 122, 122, 122, 122, 122,
615
+ 122, 122, 122, 122, 122, 122, 122, 122,
616
+ 122, 122, 122, 122, 122, 122, 122, 122,
617
+ 122, 122, 121, 124, 125, 24, 23, 23,
618
+ 23, 23, 23, 23, 23, 23, 23, 23,
619
+ 23, 23, 23, 23, 23, 23, 23, 23,
620
+ 23, 23, 23, 23, 23, 23, 23, 23,
621
+ 23, 23, 23, 23, 23, 23, 23, 23,
622
+ 23, 23, 23, 23, 23, 23, 23, 23,
623
+ 23, 23, 23, 23, 23, 23, 23, 23,
624
+ 23, 23, 23, 23, 23, 23, 23, 25,
625
+ 23, 24, 23, 23, 23, 23, 23, 23,
626
+ 23, 23, 23, 23, 23, 23, 23, 23,
627
+ 23, 23, 23, 23, 23, 23, 23, 23,
628
+ 23, 23, 23, 23, 23, 23, 23, 23,
629
+ 23, 23, 23, 23, 23, 23, 23, 23,
630
+ 23, 23, 23, 23, 23, 23, 23, 23,
631
+ 23, 23, 23, 23, 23, 23, 23, 23,
632
+ 23, 23, 23, 25, 23, 61, 60, 60,
633
+ 60, 60, 35, 60, 60, 60, 60, 60,
634
+ 60, 60, 60, 60, 60, 60, 60, 60,
635
+ 60, 60, 60, 60, 60, 60, 60, 60,
636
+ 60, 60, 60, 60, 60, 60, 60, 60,
637
+ 60, 60, 60, 60, 60, 60, 60, 60,
638
+ 60, 60, 60, 60, 60, 60, 60, 60,
639
+ 60, 60, 60, 60, 60, 60, 60, 62,
640
+ 60, 61, 60, 60, 60, 60, 35, 60,
641
+ 60, 60, 60, 60, 60, 60, 60, 60,
642
+ 60, 60, 60, 60, 60, 60, 60, 60,
643
+ 60, 60, 60, 60, 60, 60, 60, 60,
644
+ 60, 60, 60, 60, 60, 60, 60, 60,
645
+ 60, 60, 60, 60, 60, 60, 60, 60,
646
+ 60, 60, 60, 60, 60, 60, 60, 60,
647
+ 60, 60, 60, 62, 60, 24, 63, 63,
648
+ 63, 63, 63, 63, 63, 63, 63, 63,
649
+ 63, 63, 63, 63, 63, 63, 63, 63,
650
+ 63, 63, 63, 63, 63, 63, 63, 63,
651
+ 63, 63, 63, 63, 63, 63, 63, 63,
652
+ 63, 63, 63, 63, 63, 63, 63, 63,
653
+ 63, 63, 63, 63, 63, 63, 63, 63,
654
+ 63, 63, 68, 63, 24, 63, 63, 63,
655
+ 63, 63, 63, 63, 63, 63, 63, 63,
656
+ 63, 63, 63, 63, 63, 63, 63, 63,
657
+ 63, 63, 63, 63, 63, 63, 63, 63,
658
+ 63, 63, 63, 63, 63, 63, 63, 63,
659
+ 63, 63, 63, 63, 63, 63, 63, 63,
660
+ 63, 63, 63, 63, 63, 63, 63, 63,
661
+ 63, 68, 63, 126, 0
662
+ ]
663
+
664
+ class << self
665
+ attr_accessor :_parser_trans_targs
666
+ private :_parser_trans_targs, :_parser_trans_targs=
667
+ end
668
+ self._parser_trans_targs = [
669
+ 49, 1, 2, 3, 4, 3, 12, 52,
670
+ 4, 5, 12, 52, 49, 6, 5, 7,
671
+ 6, 7, 8, 42, 9, 10, 13, 9,
672
+ 10, 13, 11, 5, 12, 52, 11, 5,
673
+ 12, 52, 51, 14, 15, 16, 20, 54,
674
+ 15, 16, 20, 54, 17, 16, 18, 17,
675
+ 18, 19, 21, 15, 16, 20, 54, 53,
676
+ 22, 23, 14, 31, 22, 23, 31, 24,
677
+ 26, 27, 41, 58, 25, 26, 27, 41,
678
+ 58, 28, 27, 29, 28, 29, 30, 40,
679
+ 23, 32, 33, 34, 38, 56, 33, 34,
680
+ 38, 56, 35, 34, 36, 35, 36, 37,
681
+ 39, 33, 34, 38, 56, 55, 24, 26,
682
+ 27, 41, 58, 25, 57, 44, 44, 45,
683
+ 46, 47, 46, 59, 47, 59, 0, 49,
684
+ 50, 49, 1, 43, 49, 49, 49
685
+ ]
686
+
687
+ class << self
688
+ attr_accessor :_parser_trans_actions
689
+ private :_parser_trans_actions, :_parser_trans_actions=
690
+ end
691
+ self._parser_trans_actions = [
692
+ 1, 0, 2, 3, 4, 0, 4, 4,
693
+ 0, 5, 0, 0, 6, 7, 0, 7,
694
+ 0, 0, 0, 0, 8, 9, 8, 0,
695
+ 10, 0, 11, 12, 13, 13, 0, 14,
696
+ 15, 15, 0, 10, 11, 12, 13, 16,
697
+ 0, 14, 15, 17, 7, 0, 7, 0,
698
+ 0, 10, 0, 18, 19, 20, 21, 22,
699
+ 8, 23, 9, 8, 0, 10, 0, 0,
700
+ 11, 12, 13, 16, 0, 0, 14, 15,
701
+ 17, 7, 0, 7, 0, 0, 0, 10,
702
+ 9, 10, 11, 12, 13, 16, 0, 14,
703
+ 15, 17, 7, 0, 7, 0, 0, 10,
704
+ 10, 18, 19, 20, 21, 22, 8, 18,
705
+ 19, 20, 21, 8, 22, 24, 0, 2,
706
+ 3, 4, 0, 4, 0, 0, 0, 27,
707
+ 28, 29, 24, 0, 30, 31, 32
708
+ ]
709
+
710
+ class << self
711
+ attr_accessor :_parser_to_state_actions
712
+ private :_parser_to_state_actions, :_parser_to_state_actions=
713
+ end
714
+ self._parser_to_state_actions = [
715
+ 0, 0, 0, 0, 0, 0, 0, 0,
716
+ 0, 0, 0, 0, 0, 0, 0, 0,
717
+ 0, 0, 0, 0, 0, 0, 0, 0,
718
+ 0, 0, 0, 0, 0, 0, 0, 0,
719
+ 0, 0, 0, 0, 0, 0, 0, 0,
720
+ 0, 0, 0, 0, 0, 0, 0, 0,
721
+ 25, 25, 0, 0, 0, 0, 0, 0,
722
+ 0, 0, 0, 0
723
+ ]
724
+
725
+ class << self
726
+ attr_accessor :_parser_from_state_actions
727
+ private :_parser_from_state_actions, :_parser_from_state_actions=
728
+ end
729
+ self._parser_from_state_actions = [
730
+ 0, 0, 0, 0, 0, 0, 0, 0,
731
+ 0, 0, 0, 0, 0, 0, 0, 0,
732
+ 0, 0, 0, 0, 0, 0, 0, 0,
733
+ 0, 0, 0, 0, 0, 0, 0, 0,
734
+ 0, 0, 0, 0, 0, 0, 0, 0,
735
+ 0, 0, 0, 0, 0, 0, 0, 0,
736
+ 0, 26, 0, 0, 0, 0, 0, 0,
737
+ 0, 0, 0, 0
738
+ ]
739
+
740
+ class << self
741
+ attr_accessor :_parser_eof_trans
742
+ private :_parser_eof_trans, :_parser_eof_trans=
743
+ end
744
+ self._parser_eof_trans = [
745
+ 0, 1, 1, 1, 1, 13, 13, 13,
746
+ 13, 13, 13, 13, 13, 13, 13, 13,
747
+ 13, 13, 13, 13, 13, 13, 13, 13,
748
+ 13, 13, 13, 13, 13, 13, 13, 13,
749
+ 13, 13, 13, 13, 13, 13, 13, 13,
750
+ 13, 13, 13, 1, 1, 1, 1, 1,
751
+ 0, 0, 122, 125, 126, 125, 126, 125,
752
+ 126, 125, 126, 127
753
+ ]
754
+
755
+ class << self
756
+ attr_accessor :parser_start
757
+ end
758
+ self.parser_start = 49;
759
+ class << self
760
+ attr_accessor :parser_first_final
761
+ end
762
+ self.parser_first_final = 49;
763
+ class << self
764
+ attr_accessor :parser_error
765
+ end
766
+ self.parser_error = 0;
767
+
768
+ class << self
769
+ attr_accessor :parser_en_Closeout
770
+ end
771
+ self.parser_en_Closeout = 48;
772
+ class << self
773
+ attr_accessor :parser_en_main
774
+ end
775
+ self.parser_en_main = 49;
776
+
777
+
778
+ # line 120 "scanner.rl"
779
+
780
+ # line 780 "scanner.rb"
781
+ begin
782
+ p ||= 0
783
+ pe ||= data.length
784
+ cs = parser_start
785
+ ts = nil
786
+ te = nil
787
+ act = 0
788
+ end
789
+
790
+ # line 121 "scanner.rl"
791
+
792
+ # line 792 "scanner.rb"
793
+ begin
794
+ testEof = false
795
+ _slen, _trans, _keys, _inds, _acts, _nacts = nil
796
+ _goto_level = 0
797
+ _resume = 10
798
+ _eof_trans = 15
799
+ _again = 20
800
+ _test_eof = 30
801
+ _out = 40
802
+ while true
803
+ if _goto_level <= 0
804
+ if p == pe
805
+ _goto_level = _test_eof
806
+ next
807
+ end
808
+ if cs == 0
809
+ _goto_level = _out
810
+ next
811
+ end
812
+ end
813
+ if _goto_level <= _resume
814
+ case _parser_from_state_actions[cs]
815
+ when 26 then
816
+ # line 1 "scanner.rl"
817
+ begin
818
+ ts = p
819
+ end
820
+ # line 1 "scanner.rl"
821
+ # line 821 "scanner.rb"
822
+ end
823
+ _keys = cs << 1
824
+ _inds = _parser_index_offsets[cs]
825
+ _slen = _parser_key_spans[cs]
826
+ _trans = if ( _slen > 0 &&
827
+ _parser_trans_keys[_keys] <= data[p] &&
828
+ data[p] <= _parser_trans_keys[_keys + 1]
829
+ ) then
830
+ _parser_indicies[ _inds + data[p] - _parser_trans_keys[_keys] ]
831
+ else
832
+ _parser_indicies[ _inds + _slen ]
833
+ end
834
+ end
835
+ if _goto_level <= _eof_trans
836
+ cs = _parser_trans_targs[_trans]
837
+ if _parser_trans_actions[_trans] != 0
838
+ case _parser_trans_actions[_trans]
839
+ when 24 then
840
+ # line 5 "scanner.rl"
841
+ begin
842
+ mark_pfx = p end
843
+ # line 5 "scanner.rl"
844
+ when 2 then
845
+ # line 6 "scanner.rl"
846
+ begin
847
+
848
+ if data[mark_pfx..p-1] != @prefix
849
+ closing = data[mark_pfx-1,1] == '/'
850
+ @nodes.last << data[mark_pfx-(closing ? 2 : 1)..p]
851
+ begin
852
+ p += 1
853
+ _goto_level = _out
854
+ next
855
+ end
856
+
857
+ end
858
+ end
859
+ # line 6 "scanner.rl"
860
+ when 3 then
861
+ # line 13 "scanner.rl"
862
+ begin
863
+ mark_stg = p end
864
+ # line 13 "scanner.rl"
865
+ when 4 then
866
+ # line 14 "scanner.rl"
867
+ begin
868
+ @starttag = data[mark_stg..p-1] end
869
+ # line 14 "scanner.rl"
870
+ when 11 then
871
+ # line 15 "scanner.rl"
872
+ begin
873
+ mark_attr = p end
874
+ # line 15 "scanner.rl"
875
+ when 15 then
876
+ # line 16 "scanner.rl"
877
+ begin
878
+
879
+ @attrs[@nat] = @vat
880
+ end
881
+ # line 16 "scanner.rl"
882
+ when 5 then
883
+ # line 25 "scanner.rl"
884
+ begin
885
+ mark_nat = p end
886
+ # line 25 "scanner.rl"
887
+ when 7 then
888
+ # line 26 "scanner.rl"
889
+ begin
890
+ @nat = data[mark_nat..p-1] end
891
+ # line 26 "scanner.rl"
892
+ when 8 then
893
+ # line 27 "scanner.rl"
894
+ begin
895
+ mark_vat = p end
896
+ # line 27 "scanner.rl"
897
+ when 10 then
898
+ # line 28 "scanner.rl"
899
+ begin
900
+ @vat = data[mark_vat..p-1] end
901
+ # line 28 "scanner.rl"
902
+ when 27 then
903
+ # line 79 "scanner.rl"
904
+ begin
905
+ te = p+1
906
+ begin
907
+ @nodes.last << data[p]
908
+ @tagstart = p
909
+ end
910
+ end
911
+ # line 79 "scanner.rl"
912
+ when 29 then
913
+ # line 79 "scanner.rl"
914
+ begin
915
+ te = p
916
+ p = p - 1; begin
917
+ @nodes.last << data[p]
918
+ @tagstart = p
919
+ end
920
+ end
921
+ # line 79 "scanner.rl"
922
+ when 1 then
923
+ # line 79 "scanner.rl"
924
+ begin
925
+ begin p = ((te))-1; end
926
+ begin
927
+ @nodes.last << data[p]
928
+ @tagstart = p
929
+ end
930
+ end
931
+ # line 79 "scanner.rl"
932
+ when 6 then
933
+ # line 1 "scanner.rl"
934
+ begin
935
+ case act
936
+ when 1 then
937
+ begin begin p = ((te))-1; end
938
+
939
+ tag = {:prefix=>@prefix, :name=>@starttag, :flavor => @flavor, :attrs => @attrs}
940
+ @prefix = nil
941
+ @name = nil
942
+ @flavor = :tasteless
943
+ @attrs = {}
944
+ @nodes << tag << ''
945
+ begin
946
+ p += 1
947
+ _goto_level = _out
948
+ next
949
+ end
950
+
951
+ end
952
+ when 2 then
953
+ begin begin p = ((te))-1; end
954
+
955
+ @nodes.last << data[p]
956
+ @tagstart = p
957
+ end
958
+ end
959
+ end
960
+ # line 1 "scanner.rl"
961
+ when 13 then
962
+ # line 15 "scanner.rl"
963
+ begin
964
+ mark_attr = p end
965
+ # line 15 "scanner.rl"
966
+ # line 16 "scanner.rl"
967
+ begin
968
+
969
+ @attrs[@nat] = @vat
970
+ end
971
+ # line 16 "scanner.rl"
972
+ when 14 then
973
+ # line 16 "scanner.rl"
974
+ begin
975
+
976
+ @attrs[@nat] = @vat
977
+ end
978
+ # line 16 "scanner.rl"
979
+ # line 25 "scanner.rl"
980
+ begin
981
+ mark_nat = p end
982
+ # line 25 "scanner.rl"
983
+ when 18 then
984
+ # line 27 "scanner.rl"
985
+ begin
986
+ mark_vat = p end
987
+ # line 27 "scanner.rl"
988
+ # line 15 "scanner.rl"
989
+ begin
990
+ mark_attr = p end
991
+ # line 15 "scanner.rl"
992
+ when 9 then
993
+ # line 27 "scanner.rl"
994
+ begin
995
+ mark_vat = p end
996
+ # line 27 "scanner.rl"
997
+ # line 28 "scanner.rl"
998
+ begin
999
+ @vat = data[mark_vat..p-1] end
1000
+ # line 28 "scanner.rl"
1001
+ when 23 then
1002
+ # line 28 "scanner.rl"
1003
+ begin
1004
+ @vat = data[mark_vat..p-1] end
1005
+ # line 28 "scanner.rl"
1006
+ # line 27 "scanner.rl"
1007
+ begin
1008
+ mark_vat = p end
1009
+ # line 27 "scanner.rl"
1010
+ when 31 then
1011
+ # line 30 "scanner.rl"
1012
+ begin
1013
+ @flavor = :open end
1014
+ # line 30 "scanner.rl"
1015
+ # line 70 "scanner.rl"
1016
+ begin
1017
+ te = p
1018
+ p = p - 1; begin
1019
+ tag = {:prefix=>@prefix, :name=>@starttag, :flavor => @flavor, :attrs => @attrs}
1020
+ @prefix = nil
1021
+ @name = nil
1022
+ @flavor = :tasteless
1023
+ @attrs = {}
1024
+ @nodes << tag << ''
1025
+ begin
1026
+ p += 1
1027
+ _goto_level = _out
1028
+ next
1029
+ end
1030
+
1031
+ end
1032
+ end
1033
+ # line 70 "scanner.rl"
1034
+ when 30 then
1035
+ # line 31 "scanner.rl"
1036
+ begin
1037
+ @flavor = :self end
1038
+ # line 31 "scanner.rl"
1039
+ # line 70 "scanner.rl"
1040
+ begin
1041
+ te = p
1042
+ p = p - 1; begin
1043
+ tag = {:prefix=>@prefix, :name=>@starttag, :flavor => @flavor, :attrs => @attrs}
1044
+ @prefix = nil
1045
+ @name = nil
1046
+ @flavor = :tasteless
1047
+ @attrs = {}
1048
+ @nodes << tag << ''
1049
+ begin
1050
+ p += 1
1051
+ _goto_level = _out
1052
+ next
1053
+ end
1054
+
1055
+ end
1056
+ end
1057
+ # line 70 "scanner.rl"
1058
+ when 32 then
1059
+ # line 32 "scanner.rl"
1060
+ begin
1061
+ @flavor = :close end
1062
+ # line 32 "scanner.rl"
1063
+ # line 70 "scanner.rl"
1064
+ begin
1065
+ te = p
1066
+ p = p - 1; begin
1067
+ tag = {:prefix=>@prefix, :name=>@starttag, :flavor => @flavor, :attrs => @attrs}
1068
+ @prefix = nil
1069
+ @name = nil
1070
+ @flavor = :tasteless
1071
+ @attrs = {}
1072
+ @nodes << tag << ''
1073
+ begin
1074
+ p += 1
1075
+ _goto_level = _out
1076
+ next
1077
+ end
1078
+
1079
+ end
1080
+ end
1081
+ # line 70 "scanner.rl"
1082
+ when 22 then
1083
+ # line 1 "scanner.rl"
1084
+ begin
1085
+ te = p+1
1086
+ end
1087
+ # line 1 "scanner.rl"
1088
+ # line 70 "scanner.rl"
1089
+ begin
1090
+ act = 1; end
1091
+ # line 70 "scanner.rl"
1092
+ when 28 then
1093
+ # line 1 "scanner.rl"
1094
+ begin
1095
+ te = p+1
1096
+ end
1097
+ # line 1 "scanner.rl"
1098
+ # line 79 "scanner.rl"
1099
+ begin
1100
+ act = 2; end
1101
+ # line 79 "scanner.rl"
1102
+ when 12 then
1103
+ # line 15 "scanner.rl"
1104
+ begin
1105
+ mark_attr = p end
1106
+ # line 15 "scanner.rl"
1107
+ # line 16 "scanner.rl"
1108
+ begin
1109
+
1110
+ @attrs[@nat] = @vat
1111
+ end
1112
+ # line 16 "scanner.rl"
1113
+ # line 25 "scanner.rl"
1114
+ begin
1115
+ mark_nat = p end
1116
+ # line 25 "scanner.rl"
1117
+ when 20 then
1118
+ # line 27 "scanner.rl"
1119
+ begin
1120
+ mark_vat = p end
1121
+ # line 27 "scanner.rl"
1122
+ # line 15 "scanner.rl"
1123
+ begin
1124
+ mark_attr = p end
1125
+ # line 15 "scanner.rl"
1126
+ # line 16 "scanner.rl"
1127
+ begin
1128
+
1129
+ @attrs[@nat] = @vat
1130
+ end
1131
+ # line 16 "scanner.rl"
1132
+ when 17 then
1133
+ # line 1 "scanner.rl"
1134
+ begin
1135
+ te = p+1
1136
+ end
1137
+ # line 1 "scanner.rl"
1138
+ # line 16 "scanner.rl"
1139
+ begin
1140
+
1141
+ @attrs[@nat] = @vat
1142
+ end
1143
+ # line 16 "scanner.rl"
1144
+ # line 70 "scanner.rl"
1145
+ begin
1146
+ act = 1; end
1147
+ # line 70 "scanner.rl"
1148
+ when 19 then
1149
+ # line 27 "scanner.rl"
1150
+ begin
1151
+ mark_vat = p end
1152
+ # line 27 "scanner.rl"
1153
+ # line 15 "scanner.rl"
1154
+ begin
1155
+ mark_attr = p end
1156
+ # line 15 "scanner.rl"
1157
+ # line 16 "scanner.rl"
1158
+ begin
1159
+
1160
+ @attrs[@nat] = @vat
1161
+ end
1162
+ # line 16 "scanner.rl"
1163
+ # line 25 "scanner.rl"
1164
+ begin
1165
+ mark_nat = p end
1166
+ # line 25 "scanner.rl"
1167
+ when 16 then
1168
+ # line 1 "scanner.rl"
1169
+ begin
1170
+ te = p+1
1171
+ end
1172
+ # line 1 "scanner.rl"
1173
+ # line 15 "scanner.rl"
1174
+ begin
1175
+ mark_attr = p end
1176
+ # line 15 "scanner.rl"
1177
+ # line 16 "scanner.rl"
1178
+ begin
1179
+
1180
+ @attrs[@nat] = @vat
1181
+ end
1182
+ # line 16 "scanner.rl"
1183
+ # line 70 "scanner.rl"
1184
+ begin
1185
+ act = 1; end
1186
+ # line 70 "scanner.rl"
1187
+ when 21 then
1188
+ # line 1 "scanner.rl"
1189
+ begin
1190
+ te = p+1
1191
+ end
1192
+ # line 1 "scanner.rl"
1193
+ # line 27 "scanner.rl"
1194
+ begin
1195
+ mark_vat = p end
1196
+ # line 27 "scanner.rl"
1197
+ # line 15 "scanner.rl"
1198
+ begin
1199
+ mark_attr = p end
1200
+ # line 15 "scanner.rl"
1201
+ # line 16 "scanner.rl"
1202
+ begin
1203
+
1204
+ @attrs[@nat] = @vat
1205
+ end
1206
+ # line 16 "scanner.rl"
1207
+ # line 70 "scanner.rl"
1208
+ begin
1209
+ act = 1; end
1210
+ # line 70 "scanner.rl"
1211
+ # line 1211 "scanner.rb"
1212
+ end
1213
+ end
1214
+ end
1215
+ if _goto_level <= _again
1216
+ case _parser_to_state_actions[cs]
1217
+ when 25 then
1218
+ # line 1 "scanner.rl"
1219
+ begin
1220
+ ts = nil; end
1221
+ # line 1 "scanner.rl"
1222
+ # line 1222 "scanner.rb"
1223
+ end
1224
+
1225
+ if cs == 0
1226
+ _goto_level = _out
1227
+ next
1228
+ end
1229
+ p += 1
1230
+ if p != pe
1231
+ _goto_level = _resume
1232
+ next
1233
+ end
1234
+ end
1235
+ if _goto_level <= _test_eof
1236
+ if p == eof
1237
+ if _parser_eof_trans[cs] > 0
1238
+ _trans = _parser_eof_trans[cs] - 1;
1239
+ _goto_level = _eof_trans
1240
+ next;
1241
+ end
1242
+ end
1243
+
1244
+ end
1245
+ if _goto_level <= _out
1246
+ break
1247
+ end
1248
+ end
1249
+ end
1250
+
1251
+ # line 122 "scanner.rl"
1252
+ return p
1253
+ end
1254
+ end
1255
+ end