mail 2.7.0.rc1 → 2.7.0.rc2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (112) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +71 -98
  3. data/lib/mail.rb +1 -6
  4. data/lib/mail/attachments_list.rb +5 -2
  5. data/lib/mail/body.rb +39 -33
  6. data/lib/mail/check_delivery_params.rb +8 -6
  7. data/lib/mail/configuration.rb +2 -0
  8. data/lib/mail/elements/address.rb +19 -18
  9. data/lib/mail/encodings.rb +89 -31
  10. data/lib/mail/encodings/7bit.rb +5 -15
  11. data/lib/mail/encodings/8bit.rb +2 -21
  12. data/lib/mail/encodings/base64.rb +11 -12
  13. data/lib/mail/encodings/binary.rb +3 -22
  14. data/lib/mail/encodings/identity.rb +24 -0
  15. data/lib/mail/encodings/quoted_printable.rb +6 -6
  16. data/lib/mail/encodings/transfer_encoding.rb +38 -29
  17. data/lib/mail/encodings/unix_to_unix.rb +2 -1
  18. data/lib/mail/envelope.rb +1 -1
  19. data/lib/mail/field.rb +93 -61
  20. data/lib/mail/fields/bcc_field.rb +2 -2
  21. data/lib/mail/fields/cc_field.rb +1 -1
  22. data/lib/mail/fields/comments_field.rb +1 -1
  23. data/lib/mail/fields/common/common_address.rb +32 -7
  24. data/lib/mail/fields/common/common_field.rb +1 -10
  25. data/lib/mail/fields/content_description_field.rb +1 -1
  26. data/lib/mail/fields/content_disposition_field.rb +3 -3
  27. data/lib/mail/fields/content_id_field.rb +2 -2
  28. data/lib/mail/fields/content_location_field.rb +1 -1
  29. data/lib/mail/fields/content_transfer_encoding_field.rb +1 -1
  30. data/lib/mail/fields/content_type_field.rb +1 -1
  31. data/lib/mail/fields/date_field.rb +2 -3
  32. data/lib/mail/fields/from_field.rb +1 -1
  33. data/lib/mail/fields/in_reply_to_field.rb +1 -1
  34. data/lib/mail/fields/keywords_field.rb +1 -1
  35. data/lib/mail/fields/message_id_field.rb +1 -1
  36. data/lib/mail/fields/mime_version_field.rb +1 -1
  37. data/lib/mail/fields/optional_field.rb +4 -1
  38. data/lib/mail/fields/received_field.rb +1 -1
  39. data/lib/mail/fields/references_field.rb +1 -1
  40. data/lib/mail/fields/reply_to_field.rb +1 -1
  41. data/lib/mail/fields/resent_bcc_field.rb +1 -1
  42. data/lib/mail/fields/resent_cc_field.rb +1 -1
  43. data/lib/mail/fields/resent_date_field.rb +0 -1
  44. data/lib/mail/fields/resent_from_field.rb +1 -1
  45. data/lib/mail/fields/resent_message_id_field.rb +1 -1
  46. data/lib/mail/fields/resent_sender_field.rb +1 -1
  47. data/lib/mail/fields/resent_to_field.rb +1 -1
  48. data/lib/mail/fields/return_path_field.rb +1 -1
  49. data/lib/mail/fields/sender_field.rb +1 -1
  50. data/lib/mail/fields/subject_field.rb +1 -1
  51. data/lib/mail/fields/to_field.rb +1 -1
  52. data/lib/mail/fields/unstructured_field.rb +19 -2
  53. data/lib/mail/header.rb +9 -8
  54. data/lib/mail/mail.rb +2 -10
  55. data/lib/mail/matchers/has_sent_mail.rb +21 -1
  56. data/lib/mail/message.rb +64 -51
  57. data/lib/mail/multibyte.rb +14 -16
  58. data/lib/mail/multibyte/chars.rb +2 -1
  59. data/lib/mail/network.rb +1 -0
  60. data/lib/mail/network/delivery_methods/exim.rb +6 -10
  61. data/lib/mail/network/delivery_methods/logger_delivery.rb +37 -0
  62. data/lib/mail/network/delivery_methods/sendmail.rb +8 -4
  63. data/lib/mail/network/delivery_methods/smtp.rb +56 -55
  64. data/lib/mail/network/delivery_methods/smtp_connection.rb +9 -1
  65. data/lib/mail/network/retriever_methods/imap.rb +18 -5
  66. data/lib/mail/network/retriever_methods/pop3.rb +3 -1
  67. data/lib/mail/parser_tools.rb +15 -0
  68. data/lib/mail/parsers/address_lists_parser.rb +30462 -12597
  69. data/lib/mail/parsers/address_lists_parser.rl +18 -12
  70. data/lib/mail/parsers/content_disposition_parser.rb +405 -215
  71. data/lib/mail/parsers/content_disposition_parser.rl +11 -5
  72. data/lib/mail/parsers/content_location_parser.rb +443 -208
  73. data/lib/mail/parsers/content_location_parser.rl +9 -3
  74. data/lib/mail/parsers/content_transfer_encoding_parser.rb +180 -80
  75. data/lib/mail/parsers/content_transfer_encoding_parser.rl +8 -2
  76. data/lib/mail/parsers/content_type_parser.rb +436 -245
  77. data/lib/mail/parsers/content_type_parser.rl +12 -6
  78. data/lib/mail/parsers/date_time_parser.rb +172 -72
  79. data/lib/mail/parsers/date_time_parser.rl +10 -4
  80. data/lib/mail/parsers/envelope_from_parser.rb +2833 -1320
  81. data/lib/mail/parsers/envelope_from_parser.rl +9 -3
  82. data/lib/mail/parsers/message_ids_parser.rb +2325 -976
  83. data/lib/mail/parsers/message_ids_parser.rl +9 -3
  84. data/lib/mail/parsers/mime_version_parser.rb +164 -64
  85. data/lib/mail/parsers/mime_version_parser.rl +9 -3
  86. data/lib/mail/parsers/phrase_lists_parser.rb +582 -237
  87. data/lib/mail/parsers/phrase_lists_parser.rl +9 -3
  88. data/lib/mail/parsers/received_parser.rb +7036 -3004
  89. data/lib/mail/parsers/received_parser.rl +11 -5
  90. data/lib/mail/parsers/rfc2045_content_transfer_encoding.rl +1 -0
  91. data/lib/mail/parsers/rfc2045_content_type.rl +1 -0
  92. data/lib/mail/parsers/rfc2045_mime.rl +1 -0
  93. data/lib/mail/parsers/rfc2183_content_disposition.rl +1 -0
  94. data/lib/mail/parsers/rfc3629_utf8.rl +19 -0
  95. data/lib/mail/parsers/rfc5234_abnf_core_rules.rl +7 -1
  96. data/lib/mail/parsers/rfc5322.rl +3 -1
  97. data/lib/mail/parsers/rfc5322_address.rl +3 -1
  98. data/lib/mail/parsers/rfc5322_date_time.rl +1 -0
  99. data/lib/mail/parsers/rfc5322_lexical_tokens.rl +9 -5
  100. data/lib/mail/part.rb +1 -1
  101. data/lib/mail/utilities.rb +44 -15
  102. data/lib/mail/version.rb +1 -1
  103. data/lib/mail/version_specific/ruby_1_8.rb +12 -1
  104. data/lib/mail/version_specific/ruby_1_9.rb +13 -1
  105. metadata +7 -13
  106. data/CHANGELOG.rdoc +0 -822
  107. data/CONTRIBUTING.md +0 -60
  108. data/Dependencies.txt +0 -1
  109. data/Gemfile +0 -11
  110. data/Rakefile +0 -23
  111. data/TODO.rdoc +0 -9
  112. data/lib/mail/multibyte/exceptions.rb +0 -9
@@ -1,12 +1,15 @@
1
1
 
2
2
  # frozen_string_literal: true
3
3
  require 'mail/utilities'
4
+ require 'mail/parser_tools'
4
5
 
5
6
 
6
7
 
7
8
 
8
9
  module Mail::Parsers
9
10
  module ContentTypeParser
11
+ extend Mail::ParserTools
12
+
10
13
  ContentTypeStruct = Struct.new(:main_type, :sub_type, :parameters, :error)
11
14
 
12
15
 
@@ -19,18 +22,23 @@ self._trans_keys = [
19
22
  33, 126, 9, 126, 10,
20
23
  10, 9, 32, 33, 126,
21
24
  9, 126, 9, 40, 10, 10,
22
- 9, 32, 1, 127, 1,
23
- 127, 10, 10, 9, 32,
25
+ 9, 32, 1, 244, 1,
26
+ 244, 10, 10, 9, 32,
24
27
  10, 10, 9, 32, 9, 126,
25
28
  9, 126, 10, 10, 9,
26
- 32, 9, 126, 0, 127,
27
- 9, 40, 10, 10, 9, 32,
28
- 9, 126, 1, 127, 1,
29
- 127, 10, 10, 9, 32,
30
- -128, -1, 9, 126, 9, 59,
29
+ 32, 9, 126, 0, 244,
30
+ 128, 191, 160, 191, 128, 191,
31
+ 128, 159, 144, 191, 128,
32
+ 191, 128, 143, 9, 40,
33
+ 10, 10, 9, 32, 9, 126,
34
+ 1, 244, 1, 244, 10,
35
+ 10, 9, 32, 0, 244,
36
+ 128, 191, 160, 191, 128, 191,
37
+ 128, 159, 144, 191, 128,
38
+ 191, 128, 143, 9, 126,
39
+ 9, 59, 9, 126, 9, 126,
31
40
  9, 126, 9, 126, 9,
32
- 126, 9, 126, 9, 126,
33
- 0, 0, 0
41
+ 126, 0, 0, 0
34
42
  ]
35
43
 
36
44
  class << self
@@ -39,11 +47,12 @@ class << self
39
47
  end
40
48
  self._key_spans = [
41
49
  0, 94, 94, 94, 118, 1, 24, 94,
42
- 118, 32, 1, 24, 127, 127, 1, 24,
43
- 1, 24, 118, 118, 1, 24, 118, 128,
44
- 32, 1, 24, 118, 127, 127, 1, 24,
45
- 128, 118, 51, 118, 118, 118, 118, 118,
46
- 0
50
+ 118, 32, 1, 24, 244, 244, 1, 24,
51
+ 1, 24, 118, 118, 1, 24, 118, 245,
52
+ 64, 32, 64, 32, 48, 64, 16, 32,
53
+ 1, 24, 118, 244, 244, 1, 24, 245,
54
+ 64, 32, 64, 32, 48, 64, 16, 118,
55
+ 51, 118, 118, 118, 118, 118, 0
47
56
  ]
48
57
 
49
58
  class << self
@@ -52,11 +61,12 @@ class << self
52
61
  end
53
62
  self._index_offsets = [
54
63
  0, 0, 95, 190, 285, 404, 406, 431,
55
- 526, 645, 678, 680, 705, 833, 961, 963,
56
- 988, 990, 1015, 1134, 1253, 1255, 1280, 1399,
57
- 1528, 1561, 1563, 1588, 1707, 1835, 1963, 1965,
58
- 1990, 2119, 2238, 2290, 2409, 2528, 2647, 2766,
59
- 2885
64
+ 526, 645, 678, 680, 705, 950, 1195, 1197,
65
+ 1222, 1224, 1249, 1368, 1487, 1489, 1514, 1633,
66
+ 1879, 1944, 1977, 2042, 2075, 2124, 2189, 2206,
67
+ 2239, 2241, 2266, 2385, 2630, 2875, 2877, 2902,
68
+ 3148, 3213, 3246, 3311, 3344, 3393, 3458, 3475,
69
+ 3594, 3646, 3765, 3884, 4003, 4122, 4241
60
70
  ]
61
71
 
62
72
  class << self
@@ -168,151 +178,217 @@ self._indicies = [
168
178
  23, 23, 23, 23, 23, 23, 23, 23,
169
179
  23, 23, 23, 23, 23, 23, 23, 23,
170
180
  23, 23, 23, 23, 23, 23, 23, 23,
171
- 1, 27, 27, 27, 27, 27, 27, 27,
172
- 27, 27, 1, 27, 27, 28, 27, 27,
173
- 27, 27, 27, 27, 27, 27, 27, 27,
174
- 27, 27, 27, 27, 27, 27, 27, 27,
175
- 27, 27, 29, 27, 27, 27, 27, 27,
176
- 27, 27, 27, 27, 27, 27, 27, 27,
177
- 27, 27, 27, 27, 27, 27, 27, 27,
178
- 27, 27, 27, 27, 27, 27, 27, 27,
179
- 27, 27, 27, 27, 27, 27, 27, 27,
180
- 27, 27, 27, 27, 27, 27, 27, 27,
181
- 27, 27, 27, 27, 27, 27, 27, 27,
182
- 27, 27, 27, 27, 30, 27, 27, 27,
183
- 27, 27, 27, 27, 27, 27, 27, 27,
181
+ 1, 1, 1, 1, 1, 1, 1, 1,
182
+ 1, 1, 1, 1, 1, 1, 1, 1,
183
+ 1, 1, 1, 1, 1, 1, 1, 1,
184
+ 1, 1, 1, 1, 1, 1, 1, 1,
185
+ 1, 1, 1, 1, 1, 1, 1, 1,
186
+ 1, 1, 1, 1, 1, 1, 1, 1,
187
+ 1, 1, 1, 1, 1, 1, 1, 1,
188
+ 1, 1, 1, 1, 1, 1, 1, 1,
189
+ 1, 1, 27, 27, 27, 27, 27, 27,
184
190
  27, 27, 27, 27, 27, 27, 27, 27,
185
191
  27, 27, 27, 27, 27, 27, 27, 27,
186
192
  27, 27, 27, 27, 27, 27, 27, 27,
187
- 1, 31, 1, 27, 1, 1, 1, 1,
193
+ 28, 29, 29, 29, 29, 29, 29, 29,
194
+ 29, 29, 29, 29, 29, 30, 29, 29,
195
+ 31, 32, 32, 32, 33, 1, 34, 34,
196
+ 34, 34, 34, 34, 34, 34, 34, 1,
197
+ 34, 34, 35, 34, 34, 34, 34, 34,
198
+ 34, 34, 34, 34, 34, 34, 34, 34,
199
+ 34, 34, 34, 34, 34, 34, 34, 36,
200
+ 34, 34, 34, 34, 34, 34, 34, 34,
201
+ 34, 34, 34, 34, 34, 34, 34, 34,
202
+ 34, 34, 34, 34, 34, 34, 34, 34,
203
+ 34, 34, 34, 34, 34, 34, 34, 34,
204
+ 34, 34, 34, 34, 34, 34, 34, 34,
205
+ 34, 34, 34, 34, 34, 34, 34, 34,
206
+ 34, 34, 34, 34, 34, 34, 34, 34,
207
+ 34, 37, 34, 34, 34, 34, 34, 34,
208
+ 34, 34, 34, 34, 34, 34, 34, 34,
209
+ 34, 34, 34, 34, 34, 34, 34, 34,
210
+ 34, 34, 34, 34, 34, 34, 34, 34,
211
+ 34, 34, 34, 34, 34, 1, 1, 1,
188
212
  1, 1, 1, 1, 1, 1, 1, 1,
189
213
  1, 1, 1, 1, 1, 1, 1, 1,
190
- 1, 1, 27, 1, 32, 1, 33, 1,
191
214
  1, 1, 1, 1, 1, 1, 1, 1,
192
215
  1, 1, 1, 1, 1, 1, 1, 1,
193
- 1, 1, 1, 1, 1, 33, 1, 34,
194
- 1, 1, 1, 35, 1, 1, 1, 1,
195
216
  1, 1, 1, 1, 1, 1, 1, 1,
196
- 1, 1, 1, 1, 1, 1, 34, 7,
197
- 7, 7, 7, 7, 7, 7, 36, 1,
198
- 7, 7, 7, 7, 7, 1, 7, 7,
199
- 7, 7, 7, 7, 7, 7, 7, 7,
200
- 1, 9, 1, 1, 1, 1, 1, 7,
217
+ 1, 1, 1, 1, 1, 1, 1, 1,
218
+ 1, 1, 1, 1, 1, 1, 1, 1,
219
+ 1, 1, 1, 1, 1, 1, 1, 38,
220
+ 38, 38, 38, 38, 38, 38, 38, 38,
221
+ 38, 38, 38, 38, 38, 38, 38, 38,
222
+ 38, 38, 38, 38, 38, 38, 38, 38,
223
+ 38, 38, 38, 38, 38, 39, 40, 40,
224
+ 40, 40, 40, 40, 40, 40, 40, 40,
225
+ 40, 40, 41, 40, 40, 42, 43, 43,
226
+ 43, 44, 1, 45, 1, 34, 1, 1,
227
+ 1, 1, 1, 1, 1, 1, 1, 1,
228
+ 1, 1, 1, 1, 1, 1, 1, 1,
229
+ 1, 1, 1, 1, 34, 1, 46, 1,
230
+ 47, 1, 1, 1, 1, 1, 1, 1,
231
+ 1, 1, 1, 1, 1, 1, 1, 1,
232
+ 1, 1, 1, 1, 1, 1, 1, 47,
233
+ 1, 48, 1, 1, 1, 49, 1, 1,
234
+ 1, 1, 1, 1, 1, 1, 1, 1,
235
+ 1, 1, 1, 1, 1, 1, 1, 1,
236
+ 48, 7, 7, 7, 7, 7, 7, 7,
237
+ 50, 1, 7, 7, 7, 7, 7, 1,
201
238
  7, 7, 7, 7, 7, 7, 7, 7,
239
+ 7, 7, 1, 9, 1, 1, 1, 1,
240
+ 1, 7, 7, 7, 7, 7, 7, 7,
202
241
  7, 7, 7, 7, 7, 7, 7, 7,
203
242
  7, 7, 7, 7, 7, 7, 7, 7,
204
- 7, 1, 1, 1, 7, 7, 7, 7,
243
+ 7, 7, 7, 1, 1, 1, 7, 7,
205
244
  7, 7, 7, 7, 7, 7, 7, 7,
206
245
  7, 7, 7, 7, 7, 7, 7, 7,
207
246
  7, 7, 7, 7, 7, 7, 7, 7,
208
- 7, 7, 7, 7, 7, 1, 34, 1,
209
- 1, 1, 35, 1, 1, 1, 1, 1,
210
- 1, 1, 1, 1, 1, 1, 1, 1,
211
- 1, 1, 1, 1, 1, 34, 7, 7,
212
- 7, 7, 7, 7, 7, 36, 1, 7,
213
- 7, 7, 7, 7, 1, 7, 7, 7,
214
247
  7, 7, 7, 7, 7, 7, 7, 1,
215
- 1, 1, 1, 1, 1, 1, 7, 7,
248
+ 48, 1, 1, 1, 49, 1, 1, 1,
249
+ 1, 1, 1, 1, 1, 1, 1, 1,
250
+ 1, 1, 1, 1, 1, 1, 1, 48,
251
+ 7, 7, 7, 7, 7, 7, 7, 50,
252
+ 1, 7, 7, 7, 7, 7, 1, 7,
216
253
  7, 7, 7, 7, 7, 7, 7, 7,
254
+ 7, 1, 1, 1, 1, 1, 1, 1,
217
255
  7, 7, 7, 7, 7, 7, 7, 7,
218
256
  7, 7, 7, 7, 7, 7, 7, 7,
219
- 1, 1, 1, 7, 7, 7, 7, 7,
257
+ 7, 7, 7, 7, 7, 7, 7, 7,
258
+ 7, 7, 1, 1, 1, 7, 7, 7,
220
259
  7, 7, 7, 7, 7, 7, 7, 7,
221
260
  7, 7, 7, 7, 7, 7, 7, 7,
222
261
  7, 7, 7, 7, 7, 7, 7, 7,
223
- 7, 7, 7, 7, 1, 37, 1, 34,
262
+ 7, 7, 7, 7, 7, 7, 1, 51,
263
+ 1, 48, 1, 1, 1, 1, 1, 1,
224
264
  1, 1, 1, 1, 1, 1, 1, 1,
225
265
  1, 1, 1, 1, 1, 1, 1, 1,
226
- 1, 1, 1, 1, 1, 1, 34, 1,
227
- 38, 1, 1, 1, 39, 1, 1, 1,
266
+ 48, 1, 52, 1, 1, 1, 53, 1,
228
267
  1, 1, 1, 1, 1, 1, 1, 1,
229
- 1, 1, 1, 1, 1, 1, 1, 38,
230
- 40, 40, 40, 40, 40, 40, 40, 41,
231
- 1, 40, 40, 40, 40, 40, 1, 40,
268
+ 1, 1, 1, 1, 1, 1, 1, 1,
269
+ 1, 52, 54, 54, 54, 54, 54, 54,
270
+ 54, 55, 1, 54, 54, 54, 54, 54,
271
+ 1, 54, 54, 54, 54, 54, 54, 54,
272
+ 54, 54, 54, 1, 1, 1, 1, 1,
273
+ 1, 1, 54, 54, 54, 54, 54, 54,
274
+ 54, 54, 54, 54, 54, 54, 54, 54,
275
+ 54, 54, 54, 54, 54, 54, 54, 54,
276
+ 54, 54, 54, 54, 1, 1, 1, 54,
277
+ 54, 54, 54, 54, 54, 54, 54, 54,
278
+ 54, 54, 54, 54, 54, 54, 54, 54,
279
+ 54, 54, 54, 54, 54, 54, 54, 54,
280
+ 54, 54, 54, 54, 54, 54, 54, 54,
281
+ 1, 34, 34, 34, 34, 34, 34, 34,
282
+ 34, 34, 34, 34, 34, 34, 34, 34,
283
+ 34, 34, 34, 34, 34, 34, 34, 34,
284
+ 34, 34, 34, 34, 34, 34, 34, 34,
285
+ 34, 34, 34, 34, 34, 34, 34, 34,
286
+ 34, 34, 34, 34, 34, 34, 34, 34,
287
+ 34, 34, 34, 34, 34, 34, 34, 34,
288
+ 34, 34, 34, 34, 34, 34, 34, 34,
289
+ 34, 34, 34, 34, 34, 34, 34, 34,
290
+ 34, 34, 34, 34, 34, 34, 34, 34,
291
+ 34, 34, 34, 34, 34, 34, 34, 34,
292
+ 34, 34, 34, 34, 34, 34, 34, 34,
293
+ 34, 34, 34, 34, 34, 34, 34, 34,
294
+ 34, 34, 34, 34, 34, 34, 34, 34,
295
+ 34, 34, 34, 34, 34, 34, 34, 34,
296
+ 34, 34, 34, 34, 34, 34, 34, 34,
297
+ 34, 1, 1, 1, 1, 1, 1, 1,
298
+ 1, 1, 1, 1, 1, 1, 1, 1,
299
+ 1, 1, 1, 1, 1, 1, 1, 1,
300
+ 1, 1, 1, 1, 1, 1, 1, 1,
301
+ 1, 1, 1, 1, 1, 1, 1, 1,
302
+ 1, 1, 1, 1, 1, 1, 1, 1,
303
+ 1, 1, 1, 1, 1, 1, 1, 1,
304
+ 1, 1, 1, 1, 1, 1, 1, 1,
305
+ 1, 1, 1, 38, 38, 38, 38, 38,
306
+ 38, 38, 38, 38, 38, 38, 38, 38,
307
+ 38, 38, 38, 38, 38, 38, 38, 38,
308
+ 38, 38, 38, 38, 38, 38, 38, 38,
309
+ 38, 39, 40, 40, 40, 40, 40, 40,
310
+ 40, 40, 40, 40, 40, 40, 41, 40,
311
+ 40, 42, 43, 43, 43, 44, 1, 34,
312
+ 34, 34, 34, 34, 34, 34, 34, 34,
313
+ 34, 34, 34, 34, 34, 34, 34, 34,
314
+ 34, 34, 34, 34, 34, 34, 34, 34,
315
+ 34, 34, 34, 34, 34, 34, 34, 34,
316
+ 34, 34, 34, 34, 34, 34, 34, 34,
317
+ 34, 34, 34, 34, 34, 34, 34, 34,
318
+ 34, 34, 34, 34, 34, 34, 34, 34,
319
+ 34, 34, 34, 34, 34, 34, 34, 1,
320
+ 38, 38, 38, 38, 38, 38, 38, 38,
321
+ 38, 38, 38, 38, 38, 38, 38, 38,
322
+ 38, 38, 38, 38, 38, 38, 38, 38,
323
+ 38, 38, 38, 38, 38, 38, 38, 38,
324
+ 1, 38, 38, 38, 38, 38, 38, 38,
325
+ 38, 38, 38, 38, 38, 38, 38, 38,
326
+ 38, 38, 38, 38, 38, 38, 38, 38,
327
+ 38, 38, 38, 38, 38, 38, 38, 38,
328
+ 38, 38, 38, 38, 38, 38, 38, 38,
329
+ 38, 38, 38, 38, 38, 38, 38, 38,
330
+ 38, 38, 38, 38, 38, 38, 38, 38,
331
+ 38, 38, 38, 38, 38, 38, 38, 38,
332
+ 38, 1, 38, 38, 38, 38, 38, 38,
333
+ 38, 38, 38, 38, 38, 38, 38, 38,
334
+ 38, 38, 38, 38, 38, 38, 38, 38,
335
+ 38, 38, 38, 38, 38, 38, 38, 38,
336
+ 38, 38, 1, 40, 40, 40, 40, 40,
232
337
  40, 40, 40, 40, 40, 40, 40, 40,
233
- 40, 1, 1, 1, 1, 1, 1, 1,
234
338
  40, 40, 40, 40, 40, 40, 40, 40,
235
339
  40, 40, 40, 40, 40, 40, 40, 40,
236
340
  40, 40, 40, 40, 40, 40, 40, 40,
237
- 40, 40, 1, 1, 1, 40, 40, 40,
238
341
  40, 40, 40, 40, 40, 40, 40, 40,
342
+ 40, 40, 40, 1, 40, 40, 40, 40,
239
343
  40, 40, 40, 40, 40, 40, 40, 40,
240
344
  40, 40, 40, 40, 40, 40, 40, 40,
241
- 40, 40, 40, 40, 40, 40, 1, 27,
242
- 27, 27, 27, 27, 27, 27, 27, 27,
243
- 27, 27, 27, 27, 27, 27, 27, 27,
244
- 27, 27, 27, 27, 27, 27, 27, 27,
245
- 27, 27, 27, 27, 27, 27, 27, 27,
246
- 27, 27, 27, 27, 27, 27, 27, 27,
247
- 27, 27, 27, 27, 27, 27, 27, 27,
248
- 27, 27, 27, 27, 27, 27, 27, 27,
249
- 27, 27, 27, 27, 27, 27, 27, 27,
250
- 27, 27, 27, 27, 27, 27, 27, 27,
251
- 27, 27, 27, 27, 27, 27, 27, 27,
252
- 27, 27, 27, 27, 27, 27, 27, 27,
253
- 27, 27, 27, 27, 27, 27, 27, 27,
254
- 27, 27, 27, 27, 27, 27, 27, 27,
255
- 27, 27, 27, 27, 27, 27, 27, 27,
256
- 27, 27, 27, 27, 27, 27, 27, 27,
257
- 27, 27, 27, 27, 27, 27, 27, 1,
258
- 42, 1, 1, 1, 43, 1, 1, 1,
259
- 1, 1, 1, 1, 1, 1, 1, 1,
260
- 1, 1, 1, 1, 1, 1, 1, 42,
261
- 1, 44, 1, 1, 1, 1, 1, 45,
262
- 1, 46, 1, 47, 1, 1, 1, 1,
263
- 1, 1, 1, 1, 1, 1, 1, 1,
264
- 1, 1, 1, 1, 1, 1, 1, 1,
265
- 1, 1, 47, 1, 48, 1, 1, 1,
266
- 49, 1, 1, 1, 1, 1, 1, 1,
267
- 1, 1, 1, 1, 1, 1, 1, 1,
268
- 1, 1, 1, 48, 40, 40, 40, 40,
269
- 40, 40, 40, 50, 1, 40, 40, 40,
270
- 40, 40, 1, 40, 40, 40, 40, 40,
271
- 40, 40, 40, 40, 40, 1, 51, 1,
272
- 1, 1, 1, 1, 40, 40, 40, 40,
273
345
  40, 40, 40, 40, 40, 40, 40, 40,
274
346
  40, 40, 40, 40, 40, 40, 40, 40,
275
- 40, 40, 40, 40, 40, 40, 1, 1,
276
- 1, 40, 40, 40, 40, 40, 40, 40,
277
347
  40, 40, 40, 40, 40, 40, 40, 40,
278
348
  40, 40, 40, 40, 40, 40, 40, 40,
279
349
  40, 40, 40, 40, 40, 40, 40, 40,
280
- 40, 40, 1, 52, 52, 52, 52, 52,
281
- 52, 52, 52, 52, 1, 52, 52, 53,
282
- 52, 52, 52, 52, 52, 52, 52, 52,
283
- 52, 52, 52, 52, 52, 52, 52, 52,
284
- 52, 52, 52, 52, 52, 52, 52, 52,
285
- 52, 52, 54, 55, 52, 52, 52, 52,
286
- 52, 52, 52, 52, 52, 52, 52, 52,
287
- 52, 52, 52, 52, 52, 52, 52, 52,
288
- 52, 52, 52, 52, 52, 52, 52, 52,
289
- 52, 52, 52, 52, 52, 52, 52, 52,
290
- 52, 52, 52, 52, 52, 52, 52, 52,
291
- 52, 52, 52, 52, 52, 52, 56, 52,
292
- 52, 52, 52, 52, 52, 52, 52, 52,
293
- 52, 52, 52, 52, 52, 52, 52, 52,
294
- 52, 52, 52, 52, 52, 52, 52, 52,
295
- 52, 52, 52, 52, 52, 52, 52, 52,
296
- 52, 52, 1, 57, 57, 57, 57, 57,
297
- 57, 57, 57, 57, 1, 57, 57, 58,
298
- 57, 57, 57, 57, 57, 57, 57, 57,
299
- 57, 57, 57, 57, 57, 57, 57, 57,
300
- 57, 57, 57, 57, 57, 57, 57, 57,
301
- 57, 57, 59, 60, 57, 57, 57, 57,
302
- 57, 57, 57, 57, 57, 57, 57, 57,
303
- 57, 57, 57, 57, 57, 57, 57, 57,
304
- 57, 57, 57, 57, 57, 57, 57, 57,
305
- 57, 57, 57, 57, 57, 57, 57, 57,
306
- 57, 57, 57, 57, 57, 57, 57, 57,
307
- 57, 57, 57, 57, 57, 57, 61, 57,
308
- 57, 57, 57, 57, 57, 57, 57, 57,
309
- 57, 57, 57, 57, 57, 57, 57, 57,
310
- 57, 57, 57, 57, 57, 57, 57, 57,
311
- 57, 57, 57, 57, 57, 57, 57, 57,
312
- 57, 57, 1, 62, 1, 57, 1, 1,
350
+ 40, 40, 40, 40, 1, 40, 40, 40,
351
+ 40, 40, 40, 40, 40, 40, 40, 40,
352
+ 40, 40, 40, 40, 40, 1, 56, 1,
353
+ 1, 1, 57, 1, 1, 1, 1, 1,
354
+ 1, 1, 1, 1, 1, 1, 1, 1,
355
+ 1, 1, 1, 1, 1, 56, 1, 58,
356
+ 1, 1, 1, 1, 1, 59, 1, 60,
357
+ 1, 61, 1, 1, 1, 1, 1, 1,
358
+ 1, 1, 1, 1, 1, 1, 1, 1,
359
+ 1, 1, 1, 1, 1, 1, 1, 1,
360
+ 61, 1, 62, 1, 1, 1, 63, 1,
361
+ 1, 1, 1, 1, 1, 1, 1, 1,
313
362
  1, 1, 1, 1, 1, 1, 1, 1,
363
+ 1, 62, 54, 54, 54, 54, 54, 54,
364
+ 54, 64, 1, 54, 54, 54, 54, 54,
365
+ 1, 54, 54, 54, 54, 54, 54, 54,
366
+ 54, 54, 54, 1, 65, 1, 1, 1,
367
+ 1, 1, 54, 54, 54, 54, 54, 54,
368
+ 54, 54, 54, 54, 54, 54, 54, 54,
369
+ 54, 54, 54, 54, 54, 54, 54, 54,
370
+ 54, 54, 54, 54, 1, 1, 1, 54,
371
+ 54, 54, 54, 54, 54, 54, 54, 54,
372
+ 54, 54, 54, 54, 54, 54, 54, 54,
373
+ 54, 54, 54, 54, 54, 54, 54, 54,
374
+ 54, 54, 54, 54, 54, 54, 54, 54,
375
+ 1, 66, 66, 66, 66, 66, 66, 66,
376
+ 66, 66, 1, 66, 66, 67, 66, 66,
377
+ 66, 66, 66, 66, 66, 66, 66, 66,
378
+ 66, 66, 66, 66, 66, 66, 66, 66,
379
+ 66, 66, 66, 66, 66, 66, 66, 66,
380
+ 68, 69, 66, 66, 66, 66, 66, 66,
381
+ 66, 66, 66, 66, 66, 66, 66, 66,
382
+ 66, 66, 66, 66, 66, 66, 66, 66,
383
+ 66, 66, 66, 66, 66, 66, 66, 66,
384
+ 66, 66, 66, 66, 66, 66, 66, 66,
385
+ 66, 66, 66, 66, 66, 66, 66, 66,
386
+ 66, 66, 66, 66, 70, 66, 66, 66,
387
+ 66, 66, 66, 66, 66, 66, 66, 66,
388
+ 66, 66, 66, 66, 66, 66, 66, 66,
389
+ 66, 66, 66, 66, 66, 66, 66, 66,
390
+ 66, 66, 66, 66, 66, 66, 66, 66,
314
391
  1, 1, 1, 1, 1, 1, 1, 1,
315
- 1, 1, 1, 1, 57, 1, 1, 1,
316
392
  1, 1, 1, 1, 1, 1, 1, 1,
317
393
  1, 1, 1, 1, 1, 1, 1, 1,
318
394
  1, 1, 1, 1, 1, 1, 1, 1,
@@ -320,6 +396,29 @@ self._indicies = [
320
396
  1, 1, 1, 1, 1, 1, 1, 1,
321
397
  1, 1, 1, 1, 1, 1, 1, 1,
322
398
  1, 1, 1, 1, 1, 1, 1, 1,
399
+ 1, 1, 71, 71, 71, 71, 71, 71,
400
+ 71, 71, 71, 71, 71, 71, 71, 71,
401
+ 71, 71, 71, 71, 71, 71, 71, 71,
402
+ 71, 71, 71, 71, 71, 71, 71, 71,
403
+ 72, 73, 73, 73, 73, 73, 73, 73,
404
+ 73, 73, 73, 73, 73, 74, 73, 73,
405
+ 75, 76, 76, 76, 77, 1, 78, 78,
406
+ 78, 78, 78, 78, 78, 78, 78, 1,
407
+ 78, 78, 79, 78, 78, 78, 78, 78,
408
+ 78, 78, 78, 78, 78, 78, 78, 78,
409
+ 78, 78, 78, 78, 78, 78, 78, 78,
410
+ 78, 78, 78, 78, 78, 80, 81, 78,
411
+ 78, 78, 78, 78, 78, 78, 78, 78,
412
+ 78, 78, 78, 78, 78, 78, 78, 78,
413
+ 78, 78, 78, 78, 78, 78, 78, 78,
414
+ 78, 78, 78, 78, 78, 78, 78, 78,
415
+ 78, 78, 78, 78, 78, 78, 78, 78,
416
+ 78, 78, 78, 78, 78, 78, 78, 78,
417
+ 78, 82, 78, 78, 78, 78, 78, 78,
418
+ 78, 78, 78, 78, 78, 78, 78, 78,
419
+ 78, 78, 78, 78, 78, 78, 78, 78,
420
+ 78, 78, 78, 78, 78, 78, 78, 78,
421
+ 78, 78, 78, 78, 78, 1, 1, 1,
323
422
  1, 1, 1, 1, 1, 1, 1, 1,
324
423
  1, 1, 1, 1, 1, 1, 1, 1,
325
424
  1, 1, 1, 1, 1, 1, 1, 1,
@@ -327,104 +426,185 @@ self._indicies = [
327
426
  1, 1, 1, 1, 1, 1, 1, 1,
328
427
  1, 1, 1, 1, 1, 1, 1, 1,
329
428
  1, 1, 1, 1, 1, 1, 1, 1,
429
+ 1, 1, 1, 1, 1, 1, 1, 83,
430
+ 83, 83, 83, 83, 83, 83, 83, 83,
431
+ 83, 83, 83, 83, 83, 83, 83, 83,
432
+ 83, 83, 83, 83, 83, 83, 83, 83,
433
+ 83, 83, 83, 83, 83, 84, 85, 85,
434
+ 85, 85, 85, 85, 85, 85, 85, 85,
435
+ 85, 85, 86, 85, 85, 87, 88, 88,
436
+ 88, 89, 1, 90, 1, 78, 1, 1,
330
437
  1, 1, 1, 1, 1, 1, 1, 1,
331
- 1, 1, 1, 1, 1, 1, 57, 63,
332
- 1, 1, 1, 64, 1, 1, 1, 1,
333
438
  1, 1, 1, 1, 1, 1, 1, 1,
334
- 1, 1, 1, 1, 1, 1, 63, 65,
335
- 65, 65, 65, 65, 65, 65, 66, 1,
336
- 65, 65, 65, 65, 65, 1, 65, 65,
337
- 65, 65, 65, 65, 65, 65, 65, 65,
338
- 1, 67, 1, 1, 1, 1, 1, 65,
339
- 65, 65, 65, 65, 65, 65, 65, 65,
340
- 65, 65, 65, 65, 65, 65, 65, 65,
341
- 65, 65, 65, 65, 65, 65, 65, 65,
342
- 65, 1, 1, 1, 65, 65, 65, 65,
343
- 65, 65, 65, 65, 65, 65, 65, 65,
344
- 65, 65, 65, 65, 65, 65, 65, 65,
345
- 65, 65, 65, 65, 65, 65, 65, 65,
346
- 65, 65, 65, 65, 65, 1, 68, 1,
347
- 1, 1, 69, 1, 1, 1, 1, 1,
439
+ 1, 1, 1, 1, 78, 1, 78, 78,
440
+ 78, 78, 78, 78, 78, 78, 78, 78,
441
+ 78, 78, 78, 78, 78, 78, 78, 78,
442
+ 78, 78, 78, 78, 78, 78, 78, 78,
443
+ 78, 78, 78, 78, 78, 78, 78, 78,
444
+ 78, 78, 78, 78, 78, 78, 78, 78,
445
+ 78, 78, 78, 78, 78, 78, 78, 78,
446
+ 78, 78, 78, 78, 78, 78, 78, 78,
447
+ 78, 78, 78, 78, 78, 78, 78, 78,
448
+ 78, 78, 78, 78, 78, 78, 78, 78,
449
+ 78, 78, 78, 78, 78, 78, 78, 78,
450
+ 78, 78, 78, 78, 78, 78, 78, 78,
451
+ 78, 78, 78, 78, 78, 78, 78, 78,
452
+ 78, 78, 78, 78, 78, 78, 78, 78,
453
+ 78, 78, 78, 78, 78, 78, 78, 78,
454
+ 78, 78, 78, 78, 78, 78, 78, 78,
455
+ 78, 78, 78, 78, 78, 78, 1, 1,
348
456
  1, 1, 1, 1, 1, 1, 1, 1,
349
- 1, 1, 1, 1, 1, 68, 1, 1,
350
- 1, 1, 1, 1, 1, 70, 1, 1,
351
457
  1, 1, 1, 1, 1, 1, 1, 1,
352
458
  1, 1, 1, 1, 1, 1, 1, 1,
353
- 71, 1, 68, 1, 1, 1, 69, 1,
354
459
  1, 1, 1, 1, 1, 1, 1, 1,
355
460
  1, 1, 1, 1, 1, 1, 1, 1,
356
- 1, 68, 7, 7, 7, 7, 7, 7,
357
- 7, 70, 1, 7, 7, 7, 7, 7,
358
- 1, 7, 7, 7, 7, 7, 7, 7,
359
- 7, 7, 7, 1, 71, 1, 1, 1,
360
- 1, 1, 7, 7, 7, 7, 7, 7,
361
- 7, 7, 7, 7, 7, 7, 7, 7,
362
- 7, 7, 7, 7, 7, 7, 7, 7,
363
- 7, 7, 7, 7, 1, 1, 1, 7,
364
- 7, 7, 7, 7, 7, 7, 7, 7,
365
- 7, 7, 7, 7, 7, 7, 7, 7,
366
- 7, 7, 7, 7, 7, 7, 7, 7,
367
- 7, 7, 7, 7, 7, 7, 7, 7,
368
- 1, 72, 1, 1, 1, 73, 1, 1,
369
461
  1, 1, 1, 1, 1, 1, 1, 1,
370
462
  1, 1, 1, 1, 1, 1, 1, 1,
371
- 72, 40, 40, 40, 40, 40, 40, 40,
372
- 74, 1, 40, 40, 40, 40, 40, 1,
373
- 40, 40, 40, 40, 40, 40, 40, 40,
374
- 40, 40, 1, 75, 1, 1, 1, 1,
375
- 1, 40, 40, 40, 40, 40, 40, 40,
376
- 40, 40, 40, 40, 40, 40, 40, 40,
377
- 40, 40, 40, 40, 40, 40, 40, 40,
378
- 40, 40, 40, 1, 1, 1, 40, 40,
379
- 40, 40, 40, 40, 40, 40, 40, 40,
380
- 40, 40, 40, 40, 40, 40, 40, 40,
381
- 40, 40, 40, 40, 40, 40, 40, 40,
382
- 40, 40, 40, 40, 40, 40, 40, 1,
383
- 76, 1, 1, 1, 77, 1, 1, 1,
384
463
  1, 1, 1, 1, 1, 1, 1, 1,
385
- 1, 1, 1, 1, 1, 1, 1, 76,
386
- 78, 1, 78, 78, 78, 78, 78, 79,
387
- 1, 78, 78, 78, 78, 78, 1, 78,
464
+ 83, 83, 83, 83, 83, 83, 83, 83,
465
+ 83, 83, 83, 83, 83, 83, 83, 83,
466
+ 83, 83, 83, 83, 83, 83, 83, 83,
467
+ 83, 83, 83, 83, 83, 83, 84, 85,
468
+ 85, 85, 85, 85, 85, 85, 85, 85,
469
+ 85, 85, 85, 86, 85, 85, 87, 88,
470
+ 88, 88, 89, 1, 78, 78, 78, 78,
388
471
  78, 78, 78, 78, 78, 78, 78, 78,
389
- 78, 1, 71, 1, 78, 1, 1, 1,
390
472
  78, 78, 78, 78, 78, 78, 78, 78,
391
473
  78, 78, 78, 78, 78, 78, 78, 78,
392
474
  78, 78, 78, 78, 78, 78, 78, 78,
393
- 78, 78, 1, 1, 1, 78, 78, 78,
394
475
  78, 78, 78, 78, 78, 78, 78, 78,
395
476
  78, 78, 78, 78, 78, 78, 78, 78,
396
477
  78, 78, 78, 78, 78, 78, 78, 78,
397
- 78, 78, 78, 78, 78, 78, 1, 47,
398
- 1, 1, 1, 80, 1, 1, 1, 1,
478
+ 78, 78, 78, 78, 1, 83, 83, 83,
479
+ 83, 83, 83, 83, 83, 83, 83, 83,
480
+ 83, 83, 83, 83, 83, 83, 83, 83,
481
+ 83, 83, 83, 83, 83, 83, 83, 83,
482
+ 83, 83, 83, 83, 83, 1, 83, 83,
483
+ 83, 83, 83, 83, 83, 83, 83, 83,
484
+ 83, 83, 83, 83, 83, 83, 83, 83,
485
+ 83, 83, 83, 83, 83, 83, 83, 83,
486
+ 83, 83, 83, 83, 83, 83, 83, 83,
487
+ 83, 83, 83, 83, 83, 83, 83, 83,
488
+ 83, 83, 83, 83, 83, 83, 83, 83,
489
+ 83, 83, 83, 83, 83, 83, 83, 83,
490
+ 83, 83, 83, 83, 83, 83, 1, 83,
491
+ 83, 83, 83, 83, 83, 83, 83, 83,
492
+ 83, 83, 83, 83, 83, 83, 83, 83,
493
+ 83, 83, 83, 83, 83, 83, 83, 83,
494
+ 83, 83, 83, 83, 83, 83, 83, 1,
495
+ 85, 85, 85, 85, 85, 85, 85, 85,
496
+ 85, 85, 85, 85, 85, 85, 85, 85,
497
+ 85, 85, 85, 85, 85, 85, 85, 85,
498
+ 85, 85, 85, 85, 85, 85, 85, 85,
499
+ 85, 85, 85, 85, 85, 85, 85, 85,
500
+ 85, 85, 85, 85, 85, 85, 85, 85,
501
+ 1, 85, 85, 85, 85, 85, 85, 85,
502
+ 85, 85, 85, 85, 85, 85, 85, 85,
503
+ 85, 85, 85, 85, 85, 85, 85, 85,
504
+ 85, 85, 85, 85, 85, 85, 85, 85,
505
+ 85, 85, 85, 85, 85, 85, 85, 85,
506
+ 85, 85, 85, 85, 85, 85, 85, 85,
507
+ 85, 85, 85, 85, 85, 85, 85, 85,
508
+ 85, 85, 85, 85, 85, 85, 85, 85,
509
+ 85, 1, 85, 85, 85, 85, 85, 85,
510
+ 85, 85, 85, 85, 85, 85, 85, 85,
511
+ 85, 85, 1, 91, 1, 1, 1, 92,
512
+ 1, 1, 1, 1, 1, 1, 1, 1,
513
+ 1, 1, 1, 1, 1, 1, 1, 1,
514
+ 1, 1, 91, 93, 93, 93, 93, 93,
515
+ 93, 93, 94, 1, 93, 93, 93, 93,
516
+ 93, 1, 93, 93, 93, 93, 93, 93,
517
+ 93, 93, 93, 93, 1, 95, 1, 1,
518
+ 1, 1, 1, 93, 93, 93, 93, 93,
519
+ 93, 93, 93, 93, 93, 93, 93, 93,
520
+ 93, 93, 93, 93, 93, 93, 93, 93,
521
+ 93, 93, 93, 93, 93, 1, 1, 1,
522
+ 93, 93, 93, 93, 93, 93, 93, 93,
523
+ 93, 93, 93, 93, 93, 93, 93, 93,
524
+ 93, 93, 93, 93, 93, 93, 93, 93,
525
+ 93, 93, 93, 93, 93, 93, 93, 93,
526
+ 93, 1, 96, 1, 1, 1, 97, 1,
527
+ 1, 1, 1, 1, 1, 1, 1, 1,
528
+ 1, 1, 1, 1, 1, 1, 1, 1,
529
+ 1, 96, 1, 1, 1, 1, 1, 1,
530
+ 1, 98, 1, 1, 1, 1, 1, 1,
399
531
  1, 1, 1, 1, 1, 1, 1, 1,
400
- 1, 1, 1, 1, 1, 1, 47, 7,
401
- 7, 7, 7, 7, 7, 7, 81, 1,
402
- 7, 7, 7, 7, 7, 1, 7, 7,
532
+ 1, 1, 1, 1, 99, 1, 96, 1,
533
+ 1, 1, 97, 1, 1, 1, 1, 1,
534
+ 1, 1, 1, 1, 1, 1, 1, 1,
535
+ 1, 1, 1, 1, 1, 96, 7, 7,
536
+ 7, 7, 7, 7, 7, 98, 1, 7,
537
+ 7, 7, 7, 7, 1, 7, 7, 7,
538
+ 7, 7, 7, 7, 7, 7, 7, 1,
539
+ 99, 1, 1, 1, 1, 1, 7, 7,
540
+ 7, 7, 7, 7, 7, 7, 7, 7,
541
+ 7, 7, 7, 7, 7, 7, 7, 7,
542
+ 7, 7, 7, 7, 7, 7, 7, 7,
543
+ 1, 1, 1, 7, 7, 7, 7, 7,
544
+ 7, 7, 7, 7, 7, 7, 7, 7,
403
545
  7, 7, 7, 7, 7, 7, 7, 7,
404
- 1, 9, 1, 1, 1, 1, 1, 7,
405
546
  7, 7, 7, 7, 7, 7, 7, 7,
547
+ 7, 7, 7, 7, 1, 100, 1, 1,
548
+ 1, 101, 1, 1, 1, 1, 1, 1,
549
+ 1, 1, 1, 1, 1, 1, 1, 1,
550
+ 1, 1, 1, 1, 100, 54, 54, 54,
551
+ 54, 54, 54, 54, 102, 1, 54, 54,
552
+ 54, 54, 54, 1, 54, 54, 54, 54,
553
+ 54, 54, 54, 54, 54, 54, 1, 103,
554
+ 1, 1, 1, 1, 1, 54, 54, 54,
555
+ 54, 54, 54, 54, 54, 54, 54, 54,
556
+ 54, 54, 54, 54, 54, 54, 54, 54,
557
+ 54, 54, 54, 54, 54, 54, 54, 1,
558
+ 1, 1, 54, 54, 54, 54, 54, 54,
559
+ 54, 54, 54, 54, 54, 54, 54, 54,
560
+ 54, 54, 54, 54, 54, 54, 54, 54,
561
+ 54, 54, 54, 54, 54, 54, 54, 54,
562
+ 54, 54, 54, 1, 104, 1, 1, 1,
563
+ 105, 1, 1, 1, 1, 1, 1, 1,
564
+ 1, 1, 1, 1, 1, 1, 1, 1,
565
+ 1, 1, 1, 104, 106, 1, 106, 106,
566
+ 106, 106, 106, 107, 1, 106, 106, 106,
567
+ 106, 106, 1, 106, 106, 106, 106, 106,
568
+ 106, 106, 106, 106, 106, 1, 99, 1,
569
+ 106, 1, 1, 1, 106, 106, 106, 106,
570
+ 106, 106, 106, 106, 106, 106, 106, 106,
571
+ 106, 106, 106, 106, 106, 106, 106, 106,
572
+ 106, 106, 106, 106, 106, 106, 1, 1,
573
+ 1, 106, 106, 106, 106, 106, 106, 106,
574
+ 106, 106, 106, 106, 106, 106, 106, 106,
575
+ 106, 106, 106, 106, 106, 106, 106, 106,
576
+ 106, 106, 106, 106, 106, 106, 106, 106,
577
+ 106, 106, 1, 61, 1, 1, 1, 108,
578
+ 1, 1, 1, 1, 1, 1, 1, 1,
579
+ 1, 1, 1, 1, 1, 1, 1, 1,
580
+ 1, 1, 61, 7, 7, 7, 7, 7,
581
+ 7, 7, 109, 1, 7, 7, 7, 7,
582
+ 7, 1, 7, 7, 7, 7, 7, 7,
583
+ 7, 7, 7, 7, 1, 9, 1, 1,
584
+ 1, 1, 1, 7, 7, 7, 7, 7,
406
585
  7, 7, 7, 7, 7, 7, 7, 7,
407
586
  7, 7, 7, 7, 7, 7, 7, 7,
408
- 7, 1, 1, 1, 7, 7, 7, 7,
587
+ 7, 7, 7, 7, 7, 1, 1, 1,
409
588
  7, 7, 7, 7, 7, 7, 7, 7,
410
589
  7, 7, 7, 7, 7, 7, 7, 7,
411
590
  7, 7, 7, 7, 7, 7, 7, 7,
412
- 7, 7, 7, 7, 7, 1, 82, 1,
413
- 1, 1, 83, 1, 1, 1, 1, 1,
591
+ 7, 7, 7, 7, 7, 7, 7, 7,
592
+ 7, 1, 110, 1, 1, 1, 111, 1,
414
593
  1, 1, 1, 1, 1, 1, 1, 1,
415
- 1, 1, 1, 1, 1, 82, 40, 40,
416
- 40, 40, 40, 40, 40, 84, 1, 40,
417
- 40, 40, 40, 40, 1, 40, 40, 40,
418
- 40, 40, 40, 40, 40, 40, 40, 1,
419
- 51, 1, 1, 1, 1, 1, 40, 40,
420
- 40, 40, 40, 40, 40, 40, 40, 40,
421
- 40, 40, 40, 40, 40, 40, 40, 40,
422
- 40, 40, 40, 40, 40, 40, 40, 40,
423
- 1, 1, 1, 40, 40, 40, 40, 40,
424
- 40, 40, 40, 40, 40, 40, 40, 40,
425
- 40, 40, 40, 40, 40, 40, 40, 40,
426
- 40, 40, 40, 40, 40, 40, 40, 40,
427
- 40, 40, 40, 40, 1, 1, 0
594
+ 1, 1, 1, 1, 1, 1, 1, 1,
595
+ 1, 110, 54, 54, 54, 54, 54, 54,
596
+ 54, 112, 1, 54, 54, 54, 54, 54,
597
+ 1, 54, 54, 54, 54, 54, 54, 54,
598
+ 54, 54, 54, 1, 65, 1, 1, 1,
599
+ 1, 1, 54, 54, 54, 54, 54, 54,
600
+ 54, 54, 54, 54, 54, 54, 54, 54,
601
+ 54, 54, 54, 54, 54, 54, 54, 54,
602
+ 54, 54, 54, 54, 1, 1, 1, 54,
603
+ 54, 54, 54, 54, 54, 54, 54, 54,
604
+ 54, 54, 54, 54, 54, 54, 54, 54,
605
+ 54, 54, 54, 54, 54, 54, 54, 54,
606
+ 54, 54, 54, 54, 54, 54, 54, 54,
607
+ 1, 1, 0
428
608
  ]
429
609
 
430
610
  class << self
@@ -432,17 +612,21 @@ class << self
432
612
  private :_trans_targs, :_trans_targs=
433
613
  end
434
614
  self._trans_targs = [
435
- 2, 0, 2, 3, 33, 4, 5, 7,
436
- 27, 18, 6, 7, 8, 9, 10, 37,
437
- 12, 24, 9, 10, 12, 24, 11, 13,
438
- 14, 34, 23, 13, 14, 34, 23, 15,
439
- 17, 35, 19, 20, 22, 21, 19, 20,
440
- 7, 22, 9, 10, 12, 24, 26, 38,
441
- 4, 5, 27, 18, 29, 30, 29, 40,
442
- 32, 29, 30, 29, 40, 32, 31, 4,
443
- 5, 33, 27, 18, 35, 16, 36, 18,
444
- 35, 16, 36, 18, 38, 25, 37, 39,
445
- 25, 39, 38, 25, 39
615
+ 2, 0, 2, 3, 47, 4, 5, 7,
616
+ 34, 18, 6, 7, 8, 9, 10, 51,
617
+ 12, 31, 9, 10, 12, 31, 11, 13,
618
+ 14, 48, 23, 24, 25, 26, 27, 28,
619
+ 29, 30, 13, 14, 48, 23, 24, 25,
620
+ 26, 27, 28, 29, 30, 15, 17, 49,
621
+ 19, 20, 22, 21, 19, 20, 7, 22,
622
+ 9, 10, 12, 31, 33, 52, 4, 5,
623
+ 34, 18, 36, 37, 36, 54, 39, 40,
624
+ 41, 42, 43, 44, 45, 46, 36, 37,
625
+ 36, 54, 39, 40, 41, 42, 43, 44,
626
+ 45, 46, 38, 4, 5, 47, 34, 18,
627
+ 49, 16, 50, 18, 49, 16, 50, 18,
628
+ 52, 32, 51, 53, 32, 53, 52, 32,
629
+ 53
446
630
  ]
447
631
 
448
632
  class << self
@@ -453,14 +637,18 @@ self._trans_actions = [
453
637
  1, 0, 0, 2, 3, 0, 0, 4,
454
638
  5, 0, 0, 0, 6, 7, 7, 7,
455
639
  7, 8, 0, 0, 0, 5, 0, 9,
456
- 9, 10, 9, 0, 0, 11, 0, 0,
457
- 0, 0, 0, 0, 5, 0, 12, 12,
458
- 13, 14, 12, 12, 12, 14, 0, 0,
459
- 12, 12, 14, 12, 15, 15, 16, 17,
460
- 15, 0, 0, 5, 18, 0, 0, 19,
461
- 19, 0, 20, 19, 21, 21, 22, 21,
462
- 23, 23, 24, 23, 21, 21, 0, 25,
463
- 0, 5, 12, 12, 14
640
+ 9, 10, 9, 9, 9, 9, 9, 9,
641
+ 9, 9, 0, 0, 11, 0, 0, 0,
642
+ 0, 0, 0, 0, 0, 0, 0, 0,
643
+ 0, 0, 5, 0, 12, 12, 13, 14,
644
+ 12, 12, 12, 14, 0, 0, 12, 12,
645
+ 14, 12, 15, 15, 16, 17, 15, 15,
646
+ 15, 15, 15, 15, 15, 15, 0, 0,
647
+ 5, 18, 0, 0, 0, 0, 0, 0,
648
+ 0, 0, 0, 19, 19, 0, 20, 19,
649
+ 21, 21, 22, 21, 23, 23, 24, 23,
650
+ 21, 21, 0, 25, 0, 5, 12, 12,
651
+ 14
464
652
  ]
465
653
 
466
654
  class << self
@@ -472,8 +660,9 @@ self._eof_actions = [
472
660
  0, 0, 0, 0, 0, 0, 0, 0,
473
661
  0, 0, 0, 0, 0, 0, 0, 0,
474
662
  0, 0, 0, 0, 0, 0, 0, 0,
475
- 0, 19, 21, 21, 23, 21, 0, 12,
476
- 0
663
+ 0, 0, 0, 0, 0, 0, 0, 0,
664
+ 0, 0, 0, 0, 0, 0, 0, 19,
665
+ 21, 21, 23, 21, 0, 12, 0
477
666
  ]
478
667
 
479
668
  class << self
@@ -483,7 +672,7 @@ self.start = 1;
483
672
  class << self
484
673
  attr_accessor :first_final
485
674
  end
486
- self.first_final = 33;
675
+ self.first_final = 47;
487
676
  class << self
488
677
  attr_accessor :error
489
678
  end
@@ -492,7 +681,7 @@ self.error = 0;
492
681
  class << self
493
682
  attr_accessor :en_comment_tail
494
683
  end
495
- self.en_comment_tail = 28;
684
+ self.en_comment_tail = 35;
496
685
  class << self
497
686
  attr_accessor :en_main
498
687
  end
@@ -501,6 +690,8 @@ self.en_main = 1;
501
690
 
502
691
 
503
692
  def self.parse(data)
693
+ data = data.dup.force_encoding(Encoding::ASCII_8BIT) if data.respond_to?(:force_encoding)
694
+
504
695
  return ContentTypeStruct.new('text', 'plain', []) if Mail::Utilities.blank?(data)
505
696
  content_type = ContentTypeStruct.new(nil, nil, [])
506
697
 
@@ -563,25 +754,25 @@ begin
563
754
  main_type_s = p end
564
755
  when 2 then
565
756
  begin
566
- content_type.main_type = data[main_type_s..(p-1)].downcase end
757
+ content_type.main_type = chars(data, main_type_s, p-1).downcase end
567
758
  when 3 then
568
759
  begin
569
760
  sub_type_s = p end
570
761
  when 19 then
571
762
  begin
572
- content_type.sub_type = data[sub_type_s..(p-1)].downcase end
763
+ content_type.sub_type = chars(data, sub_type_s, p-1).downcase end
573
764
  when 4 then
574
765
  begin
575
766
  param_attr_s = p end
576
767
  when 6 then
577
768
  begin
578
- param_attr = data[param_attr_s..(p-1)] end
769
+ param_attr = chars(data, param_attr_s, p-1) end
579
770
  when 9 then
580
771
  begin
581
772
  qstr_s = p end
582
773
  when 11 then
583
774
  begin
584
- qstr = data[qstr_s..(p-1)] end
775
+ qstr = chars(data, qstr_s, p-1) end
585
776
  when 7 then
586
777
  begin
587
778
  param_val_s = p end
@@ -593,7 +784,7 @@ begin
593
784
  end
594
785
 
595
786
  # Use quoted s value if one exists, otherwise use parameter value
596
- value = qstr || data[param_val_s..(p-1)]
787
+ value = qstr || chars(data, param_val_s, p-1)
597
788
 
598
789
  content_type.parameters << { param_attr => value }
599
790
  param_attr = nil
@@ -610,7 +801,7 @@ begin
610
801
  begin
611
802
  stack[top] = cs
612
803
  top+= 1
613
- cs = 28
804
+ cs = 35
614
805
  _goto_level = _again
615
806
  next
616
807
  end
@@ -626,12 +817,12 @@ begin
626
817
  end
627
818
  when 20 then
628
819
  begin
629
- content_type.sub_type = data[sub_type_s..(p-1)].downcase end
820
+ content_type.sub_type = chars(data, sub_type_s, p-1).downcase end
630
821
  begin
631
822
  begin
632
823
  stack[top] = cs
633
824
  top+= 1
634
- cs = 28
825
+ cs = 35
635
826
  _goto_level = _again
636
827
  next
637
828
  end
@@ -640,7 +831,7 @@ begin
640
831
  begin
641
832
  qstr_s = p end
642
833
  begin
643
- qstr = data[qstr_s..(p-1)] end
834
+ qstr = chars(data, qstr_s, p-1) end
644
835
  when 8 then
645
836
  begin
646
837
  param_val_s = p end
@@ -648,7 +839,7 @@ begin
648
839
  begin
649
840
  stack[top] = cs
650
841
  top+= 1
651
- cs = 28
842
+ cs = 35
652
843
  _goto_level = _again
653
844
  next
654
845
  end
@@ -661,7 +852,7 @@ begin
661
852
  end
662
853
 
663
854
  # Use quoted s value if one exists, otherwise use parameter value
664
- value = qstr || data[param_val_s..(p-1)]
855
+ value = qstr || chars(data, param_val_s, p-1)
665
856
 
666
857
  content_type.parameters << { param_attr => value }
667
858
  param_attr = nil
@@ -671,7 +862,7 @@ begin
671
862
  begin
672
863
  stack[top] = cs
673
864
  top+= 1
674
- cs = 28
865
+ cs = 35
675
866
  _goto_level = _again
676
867
  next
677
868
  end
@@ -691,7 +882,7 @@ begin
691
882
  end
692
883
 
693
884
  # Use quoted s value if one exists, otherwise use parameter value
694
- value = qstr || data[param_val_s..(p-1)]
885
+ value = qstr || chars(data, param_val_s, p-1)
695
886
 
696
887
  content_type.parameters << { param_attr => value }
697
888
  param_attr = nil
@@ -704,7 +895,7 @@ begin
704
895
  begin
705
896
  stack[top] = cs
706
897
  top+= 1
707
- cs = 28
898
+ cs = 35
708
899
  _goto_level = _again
709
900
  next
710
901
  end
@@ -716,7 +907,7 @@ begin
716
907
  begin
717
908
  stack[top] = cs
718
909
  top+= 1
719
- cs = 28
910
+ cs = 35
720
911
  _goto_level = _again
721
912
  next
722
913
  end
@@ -737,7 +928,7 @@ begin
737
928
  begin
738
929
  stack[top] = cs
739
930
  top+= 1
740
- cs = 28
931
+ cs = 35
741
932
  _goto_level = _again
742
933
  next
743
934
  end
@@ -749,7 +940,7 @@ begin
749
940
  end
750
941
 
751
942
  # Use quoted s value if one exists, otherwise use parameter value
752
- value = qstr || data[param_val_s..(p-1)]
943
+ value = qstr || chars(data, param_val_s, p-1)
753
944
 
754
945
  content_type.parameters << { param_attr => value }
755
946
  param_attr = nil
@@ -762,7 +953,7 @@ begin
762
953
  begin
763
954
  stack[top] = cs
764
955
  top+= 1
765
- cs = 28
956
+ cs = 35
766
957
  _goto_level = _again
767
958
  next
768
959
  end
@@ -774,7 +965,7 @@ begin
774
965
  end
775
966
 
776
967
  # Use quoted s value if one exists, otherwise use parameter value
777
- value = qstr || data[param_val_s..(p-1)]
968
+ value = qstr || chars(data, param_val_s, p-1)
778
969
 
779
970
  content_type.parameters << { param_attr => value }
780
971
  param_attr = nil
@@ -799,7 +990,7 @@ begin
799
990
  case _eof_actions[cs]
800
991
  when 19 then
801
992
  begin
802
- content_type.sub_type = data[sub_type_s..(p-1)].downcase end
993
+ content_type.sub_type = chars(data, sub_type_s, p-1).downcase end
803
994
  when 21 then
804
995
  begin
805
996
 
@@ -808,7 +999,7 @@ begin
808
999
  end
809
1000
 
810
1001
  # Use quoted s value if one exists, otherwise use parameter value
811
- value = qstr || data[param_val_s..(p-1)]
1002
+ value = qstr || chars(data, param_val_s, p-1)
812
1003
 
813
1004
  content_type.parameters << { param_attr => value }
814
1005
  param_attr = nil
@@ -827,7 +1018,7 @@ begin
827
1018
  end
828
1019
 
829
1020
  # Use quoted s value if one exists, otherwise use parameter value
830
- value = qstr || data[param_val_s..(p-1)]
1021
+ value = qstr || chars(data, param_val_s, p-1)
831
1022
 
832
1023
  content_type.parameters << { param_attr => value }
833
1024
  param_attr = nil
@@ -844,8 +1035,8 @@ end
844
1035
  end
845
1036
 
846
1037
 
847
- if p != eof || cs < 33
848
- raise Mail::Field::ParseError.new(Mail::ContentTypeElement, data, "Only able to parse up to #{data[0..p]}")
1038
+ if p != eof || cs < 47
1039
+ raise Mail::Field::IncompleteParseError.new(Mail::ContentTypeElement, data, p)
849
1040
  end
850
1041
 
851
1042
  content_type