mail 2.7.0.rc1 → 2.7.0.rc2

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 (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,20 +1,22 @@
1
1
  # frozen_string_literal: true
2
2
  require 'mail/utilities'
3
+ require 'mail/parser_tools'
3
4
 
4
5
  %%{
5
6
  machine content_disposition;
7
+ alphtype int;
6
8
 
7
9
  # Disposition Type
8
10
  action disp_type_s { disp_type_s = p }
9
- action disp_type_e { content_disposition.disposition_type = data[disp_type_s..(p-1)].downcase }
11
+ action disp_type_e { content_disposition.disposition_type = chars(data, disp_type_s, p-1).downcase }
10
12
 
11
13
  # Parameter Attribute
12
14
  action param_attr_s { param_attr_s = p }
13
- action param_attr_e { param_attr = data[param_attr_s..(p-1)] }
15
+ action param_attr_e { param_attr = chars(data, param_attr_s, p-1) }
14
16
 
15
17
  # Quoted String
16
18
  action qstr_s { qstr_s = p }
17
- action qstr_e { qstr = data[qstr_s..(p-1)] }
19
+ action qstr_e { qstr = chars(data, qstr_s, p-1) }
18
20
 
19
21
  # Parameter Value
20
22
  action param_val_s { param_val_s = p }
@@ -24,7 +26,7 @@ require 'mail/utilities'
24
26
  end
25
27
 
26
28
  # Use quoted string value if one exists, otherwise use parameter value
27
- value = qstr || data[param_val_s..(p-1)]
29
+ value = qstr || chars(data, param_val_s, p-1)
28
30
 
29
31
  content_disposition.parameters << { param_attr => value }
30
32
  param_attr = nil
@@ -47,11 +49,15 @@ require 'mail/utilities'
47
49
 
48
50
  module Mail::Parsers
49
51
  module ContentDispositionParser
52
+ extend Mail::ParserTools
53
+
50
54
  ContentDispositionStruct = Struct.new(:disposition_type, :parameters, :error)
51
55
 
52
56
  %%write data noprefix;
53
57
 
54
58
  def self.parse(data)
59
+ data = data.dup.force_encoding(Encoding::ASCII_8BIT) if data.respond_to?(:force_encoding)
60
+
55
61
  content_disposition = ContentDispositionStruct.new('', [])
56
62
  return content_disposition if Mail::Utilities.blank?(data)
57
63
 
@@ -67,7 +73,7 @@ module Mail::Parsers
67
73
  %%write exec;
68
74
 
69
75
  if p != eof || cs < %%{ write first_final; }%%
70
- raise Mail::Field::ParseError.new(Mail::ContentDispositionElement, data, "Only able to parse up to #{data[0..p]}")
76
+ raise Mail::Field::IncompleteParseError.new(Mail::ContentDispositionElement, data, p)
71
77
  end
72
78
 
73
79
  content_disposition
@@ -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 ContentLocationParser
11
+ extend Mail::ParserTools
12
+
10
13
  ContentLocationStruct = Struct.new(:location, :error)
11
14
 
12
15
 
@@ -17,15 +20,20 @@ end
17
20
  self._trans_keys = [
18
21
  0, 0, 9, 126, 10, 10,
19
22
  9, 32, 10, 10, 9,
20
- 32, 1, 127, 10, 10,
21
- 9, 32, 0, 127, 10, 10,
22
- 9, 32, 9, 126, 1,
23
- 127, 1, 127, 10, 10,
24
- 9, 32, 0, 127, 9, 126,
25
- 9, 40, 9, 40, 1,
26
- 127, 1, 127, 1, 127,
27
- 1, 127, 9, 126, 0, 0,
28
- 0
23
+ 32, 1, 244, 10, 10,
24
+ 9, 32, 0, 244, 128, 191,
25
+ 160, 191, 128, 191, 128,
26
+ 159, 144, 191, 128, 191,
27
+ 128, 143, 10, 10, 9, 32,
28
+ 9, 126, 1, 244, 1,
29
+ 244, 10, 10, 9, 32,
30
+ 0, 244, 128, 191, 160, 191,
31
+ 128, 191, 128, 159, 144,
32
+ 191, 128, 191, 128, 143,
33
+ 9, 126, 9, 40, 9, 40,
34
+ 1, 244, 1, 244, 1,
35
+ 244, 1, 244, 9, 126,
36
+ 0, 0, 0
29
37
  ]
30
38
 
31
39
  class << self
@@ -33,10 +41,12 @@ class << self
33
41
  private :_key_spans, :_key_spans=
34
42
  end
35
43
  self._key_spans = [
36
- 0, 118, 1, 24, 1, 24, 127, 1,
37
- 24, 128, 1, 24, 118, 127, 127, 1,
38
- 24, 128, 118, 32, 32, 127, 127, 127,
39
- 127, 118, 0
44
+ 0, 118, 1, 24, 1, 24, 244, 1,
45
+ 24, 245, 64, 32, 64, 32, 48, 64,
46
+ 16, 1, 24, 118, 244, 244, 1, 24,
47
+ 245, 64, 32, 64, 32, 48, 64, 16,
48
+ 118, 32, 32, 244, 244, 244, 244, 118,
49
+ 0
40
50
  ]
41
51
 
42
52
  class << self
@@ -44,10 +54,12 @@ class << self
44
54
  private :_index_offsets, :_index_offsets=
45
55
  end
46
56
  self._index_offsets = [
47
- 0, 0, 119, 121, 146, 148, 173, 301,
48
- 303, 328, 457, 459, 484, 603, 731, 859,
49
- 861, 886, 1015, 1134, 1167, 1200, 1328, 1456,
50
- 1584, 1712, 1831
57
+ 0, 0, 119, 121, 146, 148, 173, 418,
58
+ 420, 445, 691, 756, 789, 854, 887, 936,
59
+ 1001, 1018, 1020, 1045, 1164, 1409, 1654, 1656,
60
+ 1681, 1927, 1992, 2025, 2090, 2123, 2172, 2237,
61
+ 2254, 2373, 2406, 2439, 2684, 2929, 3174, 3419,
62
+ 3538
51
63
  ]
52
64
 
53
65
  class << self
@@ -92,10 +104,28 @@ self._indicies = [
92
104
  9, 9, 9, 9, 9, 9, 9, 9,
93
105
  9, 9, 9, 9, 9, 9, 9, 9,
94
106
  9, 9, 9, 9, 9, 9, 9, 9,
95
- 9, 9, 9, 9, 1, 13, 1, 9,
107
+ 9, 9, 9, 9, 1, 1, 1, 1,
108
+ 1, 1, 1, 1, 1, 1, 1, 1,
109
+ 1, 1, 1, 1, 1, 1, 1, 1,
110
+ 1, 1, 1, 1, 1, 1, 1, 1,
111
+ 1, 1, 1, 1, 1, 1, 1, 1,
96
112
  1, 1, 1, 1, 1, 1, 1, 1,
97
113
  1, 1, 1, 1, 1, 1, 1, 1,
98
- 1, 1, 1, 1, 1, 1, 9, 1,
114
+ 1, 1, 1, 1, 1, 1, 1, 1,
115
+ 1, 1, 1, 1, 1, 1, 13, 13,
116
+ 13, 13, 13, 13, 13, 13, 13, 13,
117
+ 13, 13, 13, 13, 13, 13, 13, 13,
118
+ 13, 13, 13, 13, 13, 13, 13, 13,
119
+ 13, 13, 13, 13, 14, 15, 15, 15,
120
+ 15, 15, 15, 15, 15, 15, 15, 15,
121
+ 15, 16, 15, 15, 17, 18, 18, 18,
122
+ 19, 1, 20, 1, 9, 1, 1, 1,
123
+ 1, 1, 1, 1, 1, 1, 1, 1,
124
+ 1, 1, 1, 1, 1, 1, 1, 1,
125
+ 1, 1, 1, 9, 1, 9, 9, 9,
126
+ 9, 9, 9, 9, 9, 9, 9, 9,
127
+ 9, 9, 9, 9, 9, 9, 9, 9,
128
+ 9, 9, 9, 9, 9, 9, 9, 9,
99
129
  9, 9, 9, 9, 9, 9, 9, 9,
100
130
  9, 9, 9, 9, 9, 9, 9, 9,
101
131
  9, 9, 9, 9, 9, 9, 9, 9,
@@ -108,183 +138,378 @@ self._indicies = [
108
138
  9, 9, 9, 9, 9, 9, 9, 9,
109
139
  9, 9, 9, 9, 9, 9, 9, 9,
110
140
  9, 9, 9, 9, 9, 9, 9, 9,
111
- 9, 9, 9, 9, 9, 9, 9, 9,
112
- 9, 9, 9, 9, 9, 9, 9, 9,
113
- 9, 9, 9, 9, 9, 9, 9, 9,
114
- 9, 9, 9, 9, 9, 9, 9, 9,
115
- 1, 14, 1, 15, 1, 1, 1, 1,
116
- 1, 1, 1, 1, 1, 1, 1, 1,
117
- 1, 1, 1, 1, 1, 1, 1, 1,
118
- 1, 1, 15, 1, 16, 1, 1, 1,
119
- 17, 1, 1, 1, 1, 1, 1, 1,
120
- 1, 1, 1, 1, 1, 1, 1, 1,
121
- 1, 1, 1, 16, 18, 19, 18, 18,
122
- 18, 18, 18, 20, 1, 18, 18, 18,
123
- 18, 18, 1, 18, 18, 18, 18, 18,
124
- 18, 18, 18, 18, 18, 1, 1, 1,
125
- 18, 1, 1, 1, 18, 18, 18, 18,
126
- 18, 18, 18, 18, 18, 18, 18, 18,
127
- 18, 18, 18, 18, 18, 18, 18, 18,
128
- 18, 18, 18, 18, 18, 18, 1, 1,
129
- 1, 18, 18, 18, 18, 18, 18, 18,
130
- 18, 18, 18, 18, 18, 18, 18, 18,
131
- 18, 18, 18, 18, 18, 18, 18, 18,
132
- 18, 18, 18, 18, 18, 18, 18, 18,
133
- 18, 18, 1, 21, 21, 21, 21, 21,
134
- 21, 21, 21, 21, 1, 21, 21, 22,
135
- 21, 21, 21, 21, 21, 21, 21, 21,
136
- 21, 21, 21, 21, 21, 21, 21, 21,
137
- 21, 21, 21, 21, 21, 21, 21, 21,
138
- 21, 21, 23, 24, 21, 21, 21, 21,
139
- 21, 21, 21, 21, 21, 21, 21, 21,
140
- 21, 21, 21, 21, 21, 21, 21, 21,
141
- 21, 21, 21, 21, 21, 21, 21, 21,
142
- 21, 21, 21, 21, 21, 21, 21, 21,
143
- 21, 21, 21, 21, 21, 21, 21, 21,
144
- 21, 21, 21, 21, 21, 21, 25, 21,
145
- 21, 21, 21, 21, 21, 21, 21, 21,
146
- 21, 21, 21, 21, 21, 21, 21, 21,
147
- 21, 21, 21, 21, 21, 21, 21, 21,
148
- 21, 21, 21, 21, 21, 21, 21, 21,
149
- 21, 21, 1, 26, 26, 26, 26, 26,
150
- 26, 26, 26, 26, 1, 26, 26, 27,
151
- 26, 26, 26, 26, 26, 26, 26, 26,
152
- 26, 26, 26, 26, 26, 26, 26, 26,
153
- 26, 26, 26, 26, 26, 26, 26, 26,
154
- 26, 26, 28, 29, 26, 26, 26, 26,
155
- 26, 26, 26, 26, 26, 26, 26, 26,
156
- 26, 26, 26, 26, 26, 26, 26, 26,
157
- 26, 26, 26, 26, 26, 26, 26, 26,
158
- 26, 26, 26, 26, 26, 26, 26, 26,
159
- 26, 26, 26, 26, 26, 26, 26, 26,
160
- 26, 26, 26, 26, 26, 26, 30, 26,
161
- 26, 26, 26, 26, 26, 26, 26, 26,
162
- 26, 26, 26, 26, 26, 26, 26, 26,
163
- 26, 26, 26, 26, 26, 26, 26, 26,
164
- 26, 26, 26, 26, 26, 26, 26, 26,
165
- 26, 26, 1, 31, 1, 26, 1, 1,
141
+ 9, 9, 9, 9, 9, 1, 1, 1,
142
+ 1, 1, 1, 1, 1, 1, 1, 1,
143
+ 1, 1, 1, 1, 1, 1, 1, 1,
144
+ 1, 1, 1, 1, 1, 1, 1, 1,
145
+ 1, 1, 1, 1, 1, 1, 1, 1,
146
+ 1, 1, 1, 1, 1, 1, 1, 1,
147
+ 1, 1, 1, 1, 1, 1, 1, 1,
148
+ 1, 1, 1, 1, 1, 1, 1, 1,
149
+ 1, 1, 1, 1, 1, 1, 1, 13,
150
+ 13, 13, 13, 13, 13, 13, 13, 13,
151
+ 13, 13, 13, 13, 13, 13, 13, 13,
152
+ 13, 13, 13, 13, 13, 13, 13, 13,
153
+ 13, 13, 13, 13, 13, 14, 15, 15,
154
+ 15, 15, 15, 15, 15, 15, 15, 15,
155
+ 15, 15, 16, 15, 15, 17, 18, 18,
156
+ 18, 19, 1, 9, 9, 9, 9, 9,
157
+ 9, 9, 9, 9, 9, 9, 9, 9,
158
+ 9, 9, 9, 9, 9, 9, 9, 9,
159
+ 9, 9, 9, 9, 9, 9, 9, 9,
160
+ 9, 9, 9, 9, 9, 9, 9, 9,
161
+ 9, 9, 9, 9, 9, 9, 9, 9,
162
+ 9, 9, 9, 9, 9, 9, 9, 9,
163
+ 9, 9, 9, 9, 9, 9, 9, 9,
164
+ 9, 9, 9, 1, 13, 13, 13, 13,
165
+ 13, 13, 13, 13, 13, 13, 13, 13,
166
+ 13, 13, 13, 13, 13, 13, 13, 13,
167
+ 13, 13, 13, 13, 13, 13, 13, 13,
168
+ 13, 13, 13, 13, 1, 13, 13, 13,
169
+ 13, 13, 13, 13, 13, 13, 13, 13,
170
+ 13, 13, 13, 13, 13, 13, 13, 13,
171
+ 13, 13, 13, 13, 13, 13, 13, 13,
172
+ 13, 13, 13, 13, 13, 13, 13, 13,
173
+ 13, 13, 13, 13, 13, 13, 13, 13,
174
+ 13, 13, 13, 13, 13, 13, 13, 13,
175
+ 13, 13, 13, 13, 13, 13, 13, 13,
176
+ 13, 13, 13, 13, 13, 1, 13, 13,
177
+ 13, 13, 13, 13, 13, 13, 13, 13,
178
+ 13, 13, 13, 13, 13, 13, 13, 13,
179
+ 13, 13, 13, 13, 13, 13, 13, 13,
180
+ 13, 13, 13, 13, 13, 13, 1, 15,
181
+ 15, 15, 15, 15, 15, 15, 15, 15,
182
+ 15, 15, 15, 15, 15, 15, 15, 15,
183
+ 15, 15, 15, 15, 15, 15, 15, 15,
184
+ 15, 15, 15, 15, 15, 15, 15, 15,
185
+ 15, 15, 15, 15, 15, 15, 15, 15,
186
+ 15, 15, 15, 15, 15, 15, 15, 1,
187
+ 15, 15, 15, 15, 15, 15, 15, 15,
188
+ 15, 15, 15, 15, 15, 15, 15, 15,
189
+ 15, 15, 15, 15, 15, 15, 15, 15,
190
+ 15, 15, 15, 15, 15, 15, 15, 15,
191
+ 15, 15, 15, 15, 15, 15, 15, 15,
192
+ 15, 15, 15, 15, 15, 15, 15, 15,
193
+ 15, 15, 15, 15, 15, 15, 15, 15,
194
+ 15, 15, 15, 15, 15, 15, 15, 15,
195
+ 1, 15, 15, 15, 15, 15, 15, 15,
196
+ 15, 15, 15, 15, 15, 15, 15, 15,
197
+ 15, 1, 21, 1, 22, 1, 1, 1,
198
+ 1, 1, 1, 1, 1, 1, 1, 1,
199
+ 1, 1, 1, 1, 1, 1, 1, 1,
200
+ 1, 1, 1, 22, 1, 23, 1, 1,
201
+ 1, 24, 1, 1, 1, 1, 1, 1,
202
+ 1, 1, 1, 1, 1, 1, 1, 1,
203
+ 1, 1, 1, 1, 23, 25, 26, 25,
204
+ 25, 25, 25, 25, 27, 1, 25, 25,
205
+ 25, 25, 25, 1, 25, 25, 25, 25,
206
+ 25, 25, 25, 25, 25, 25, 1, 1,
207
+ 1, 25, 1, 1, 1, 25, 25, 25,
208
+ 25, 25, 25, 25, 25, 25, 25, 25,
209
+ 25, 25, 25, 25, 25, 25, 25, 25,
210
+ 25, 25, 25, 25, 25, 25, 25, 1,
211
+ 1, 1, 25, 25, 25, 25, 25, 25,
212
+ 25, 25, 25, 25, 25, 25, 25, 25,
213
+ 25, 25, 25, 25, 25, 25, 25, 25,
214
+ 25, 25, 25, 25, 25, 25, 25, 25,
215
+ 25, 25, 25, 1, 28, 28, 28, 28,
216
+ 28, 28, 28, 28, 28, 1, 28, 28,
217
+ 29, 28, 28, 28, 28, 28, 28, 28,
218
+ 28, 28, 28, 28, 28, 28, 28, 28,
219
+ 28, 28, 28, 28, 28, 28, 28, 28,
220
+ 28, 28, 28, 30, 31, 28, 28, 28,
221
+ 28, 28, 28, 28, 28, 28, 28, 28,
222
+ 28, 28, 28, 28, 28, 28, 28, 28,
223
+ 28, 28, 28, 28, 28, 28, 28, 28,
224
+ 28, 28, 28, 28, 28, 28, 28, 28,
225
+ 28, 28, 28, 28, 28, 28, 28, 28,
226
+ 28, 28, 28, 28, 28, 28, 28, 32,
227
+ 28, 28, 28, 28, 28, 28, 28, 28,
228
+ 28, 28, 28, 28, 28, 28, 28, 28,
229
+ 28, 28, 28, 28, 28, 28, 28, 28,
230
+ 28, 28, 28, 28, 28, 28, 28, 28,
231
+ 28, 28, 28, 1, 1, 1, 1, 1,
232
+ 1, 1, 1, 1, 1, 1, 1, 1,
233
+ 1, 1, 1, 1, 1, 1, 1, 1,
234
+ 1, 1, 1, 1, 1, 1, 1, 1,
235
+ 1, 1, 1, 1, 1, 1, 1, 1,
236
+ 1, 1, 1, 1, 1, 1, 1, 1,
237
+ 1, 1, 1, 1, 1, 1, 1, 1,
238
+ 1, 1, 1, 1, 1, 1, 1, 1,
239
+ 1, 1, 1, 1, 1, 33, 33, 33,
240
+ 33, 33, 33, 33, 33, 33, 33, 33,
241
+ 33, 33, 33, 33, 33, 33, 33, 33,
242
+ 33, 33, 33, 33, 33, 33, 33, 33,
243
+ 33, 33, 33, 34, 35, 35, 35, 35,
244
+ 35, 35, 35, 35, 35, 35, 35, 35,
245
+ 36, 35, 35, 37, 38, 38, 38, 39,
246
+ 1, 40, 40, 40, 40, 40, 40, 40,
247
+ 40, 40, 1, 40, 40, 41, 40, 40,
248
+ 40, 40, 40, 40, 40, 40, 40, 40,
249
+ 40, 40, 40, 40, 40, 40, 40, 40,
250
+ 40, 40, 40, 40, 40, 40, 40, 40,
251
+ 42, 43, 40, 40, 40, 40, 40, 40,
252
+ 40, 40, 40, 40, 40, 40, 40, 40,
253
+ 40, 40, 40, 40, 40, 40, 40, 40,
254
+ 40, 40, 40, 40, 40, 40, 40, 40,
255
+ 40, 40, 40, 40, 40, 40, 40, 40,
256
+ 40, 40, 40, 40, 40, 40, 40, 40,
257
+ 40, 40, 40, 40, 44, 40, 40, 40,
258
+ 40, 40, 40, 40, 40, 40, 40, 40,
259
+ 40, 40, 40, 40, 40, 40, 40, 40,
260
+ 40, 40, 40, 40, 40, 40, 40, 40,
261
+ 40, 40, 40, 40, 40, 40, 40, 40,
262
+ 1, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1,
266
+ 1, 1, 1, 1, 1, 1, 1, 1,
267
+ 1, 1, 1, 1, 1, 1, 1, 1,
268
+ 1, 1, 1, 1, 1, 1, 1, 1,
269
+ 1, 1, 1, 1, 1, 1, 1, 1,
270
+ 1, 1, 45, 45, 45, 45, 45, 45,
271
+ 45, 45, 45, 45, 45, 45, 45, 45,
272
+ 45, 45, 45, 45, 45, 45, 45, 45,
273
+ 45, 45, 45, 45, 45, 45, 45, 45,
274
+ 46, 47, 47, 47, 47, 47, 47, 47,
275
+ 47, 47, 47, 47, 47, 48, 47, 47,
276
+ 49, 50, 50, 50, 51, 1, 52, 1,
277
+ 40, 1, 1, 1, 1, 1, 1, 1,
278
+ 1, 1, 1, 1, 1, 1, 1, 1,
279
+ 1, 1, 1, 1, 1, 1, 1, 40,
280
+ 1, 40, 40, 40, 40, 40, 40, 40,
281
+ 40, 40, 40, 40, 40, 40, 40, 40,
282
+ 40, 40, 40, 40, 40, 40, 40, 40,
283
+ 40, 40, 40, 40, 40, 40, 40, 40,
284
+ 40, 40, 40, 40, 40, 40, 40, 40,
285
+ 40, 40, 40, 40, 40, 40, 40, 40,
286
+ 40, 40, 40, 40, 40, 40, 40, 40,
287
+ 40, 40, 40, 40, 40, 40, 40, 40,
288
+ 40, 40, 40, 40, 40, 40, 40, 40,
289
+ 40, 40, 40, 40, 40, 40, 40, 40,
290
+ 40, 40, 40, 40, 40, 40, 40, 40,
291
+ 40, 40, 40, 40, 40, 40, 40, 40,
292
+ 40, 40, 40, 40, 40, 40, 40, 40,
293
+ 40, 40, 40, 40, 40, 40, 40, 40,
294
+ 40, 40, 40, 40, 40, 40, 40, 40,
295
+ 40, 40, 40, 40, 40, 40, 40, 40,
296
+ 40, 1, 1, 1, 1, 1, 1, 1,
297
+ 1, 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, 45, 45, 45, 45, 45,
305
+ 45, 45, 45, 45, 45, 45, 45, 45,
306
+ 45, 45, 45, 45, 45, 45, 45, 45,
307
+ 45, 45, 45, 45, 45, 45, 45, 45,
308
+ 45, 46, 47, 47, 47, 47, 47, 47,
309
+ 47, 47, 47, 47, 47, 47, 48, 47,
310
+ 47, 49, 50, 50, 50, 51, 1, 40,
311
+ 40, 40, 40, 40, 40, 40, 40, 40,
312
+ 40, 40, 40, 40, 40, 40, 40, 40,
313
+ 40, 40, 40, 40, 40, 40, 40, 40,
314
+ 40, 40, 40, 40, 40, 40, 40, 40,
315
+ 40, 40, 40, 40, 40, 40, 40, 40,
316
+ 40, 40, 40, 40, 40, 40, 40, 40,
317
+ 40, 40, 40, 40, 40, 40, 40, 40,
318
+ 40, 40, 40, 40, 40, 40, 40, 1,
319
+ 45, 45, 45, 45, 45, 45, 45, 45,
320
+ 45, 45, 45, 45, 45, 45, 45, 45,
321
+ 45, 45, 45, 45, 45, 45, 45, 45,
322
+ 45, 45, 45, 45, 45, 45, 45, 45,
323
+ 1, 45, 45, 45, 45, 45, 45, 45,
324
+ 45, 45, 45, 45, 45, 45, 45, 45,
325
+ 45, 45, 45, 45, 45, 45, 45, 45,
326
+ 45, 45, 45, 45, 45, 45, 45, 45,
327
+ 45, 45, 45, 45, 45, 45, 45, 45,
328
+ 45, 45, 45, 45, 45, 45, 45, 45,
329
+ 45, 45, 45, 45, 45, 45, 45, 45,
330
+ 45, 45, 45, 45, 45, 45, 45, 45,
331
+ 45, 1, 45, 45, 45, 45, 45, 45,
332
+ 45, 45, 45, 45, 45, 45, 45, 45,
333
+ 45, 45, 45, 45, 45, 45, 45, 45,
334
+ 45, 45, 45, 45, 45, 45, 45, 45,
335
+ 45, 45, 1, 47, 47, 47, 47, 47,
336
+ 47, 47, 47, 47, 47, 47, 47, 47,
337
+ 47, 47, 47, 47, 47, 47, 47, 47,
338
+ 47, 47, 47, 47, 47, 47, 47, 47,
339
+ 47, 47, 47, 47, 47, 47, 47, 47,
340
+ 47, 47, 47, 47, 47, 47, 47, 47,
341
+ 47, 47, 47, 1, 47, 47, 47, 47,
342
+ 47, 47, 47, 47, 47, 47, 47, 47,
343
+ 47, 47, 47, 47, 47, 47, 47, 47,
344
+ 47, 47, 47, 47, 47, 47, 47, 47,
345
+ 47, 47, 47, 47, 47, 47, 47, 47,
346
+ 47, 47, 47, 47, 47, 47, 47, 47,
347
+ 47, 47, 47, 47, 47, 47, 47, 47,
348
+ 47, 47, 47, 47, 47, 47, 47, 47,
349
+ 47, 47, 47, 47, 1, 47, 47, 47,
350
+ 47, 47, 47, 47, 47, 47, 47, 47,
351
+ 47, 47, 47, 47, 47, 1, 53, 1,
352
+ 1, 1, 54, 1, 1, 1, 1, 1,
353
+ 1, 1, 1, 1, 1, 1, 1, 1,
354
+ 1, 1, 1, 1, 1, 53, 55, 55,
355
+ 55, 55, 55, 55, 55, 56, 1, 55,
356
+ 55, 55, 55, 55, 1, 55, 55, 55,
357
+ 55, 55, 55, 55, 55, 55, 55, 1,
358
+ 1, 1, 55, 1, 1, 1, 55, 55,
359
+ 55, 55, 55, 55, 55, 55, 55, 55,
360
+ 55, 55, 55, 55, 55, 55, 55, 55,
361
+ 55, 55, 55, 55, 55, 55, 55, 55,
362
+ 1, 1, 1, 55, 55, 55, 55, 55,
363
+ 55, 55, 55, 55, 55, 55, 55, 55,
364
+ 55, 55, 55, 55, 55, 55, 55, 55,
365
+ 55, 55, 55, 55, 55, 55, 55, 55,
366
+ 55, 55, 55, 55, 1, 8, 1, 1,
367
+ 1, 57, 1, 1, 1, 1, 1, 1,
368
+ 1, 1, 1, 1, 1, 1, 1, 1,
369
+ 1, 1, 1, 1, 8, 1, 1, 1,
370
+ 1, 1, 1, 1, 58, 1, 59, 1,
371
+ 1, 1, 60, 1, 1, 1, 1, 1,
372
+ 1, 1, 1, 1, 1, 1, 1, 1,
373
+ 1, 1, 1, 1, 1, 59, 1, 1,
374
+ 1, 1, 1, 1, 1, 61, 1, 62,
375
+ 62, 62, 62, 62, 62, 62, 62, 63,
376
+ 1, 62, 62, 64, 62, 62, 62, 62,
377
+ 62, 62, 62, 62, 62, 62, 62, 62,
378
+ 62, 62, 62, 62, 62, 62, 63, 65,
379
+ 66, 65, 65, 65, 65, 65, 67, 62,
380
+ 65, 65, 65, 65, 65, 62, 65, 65,
381
+ 65, 65, 65, 65, 65, 65, 65, 65,
382
+ 62, 62, 62, 65, 62, 62, 62, 65,
383
+ 65, 65, 65, 65, 65, 65, 65, 65,
384
+ 65, 65, 65, 65, 65, 65, 65, 65,
385
+ 65, 65, 65, 65, 65, 65, 65, 65,
386
+ 65, 62, 68, 62, 65, 65, 65, 65,
387
+ 65, 65, 65, 65, 65, 65, 65, 65,
388
+ 65, 65, 65, 65, 65, 65, 65, 65,
389
+ 65, 65, 65, 65, 65, 65, 65, 65,
390
+ 65, 65, 65, 65, 65, 62, 1, 1,
391
+ 1, 1, 1, 1, 1, 1, 1, 1,
392
+ 1, 1, 1, 1, 1, 1, 1, 1,
393
+ 1, 1, 1, 1, 1, 1, 1, 1,
394
+ 1, 1, 1, 1, 1, 1, 1, 1,
395
+ 1, 1, 1, 1, 1, 1, 1, 1,
396
+ 1, 1, 1, 1, 1, 1, 1, 1,
397
+ 1, 1, 1, 1, 1, 1, 1, 1,
398
+ 1, 1, 1, 1, 1, 1, 1, 1,
399
+ 69, 69, 69, 69, 69, 69, 69, 69,
400
+ 69, 69, 69, 69, 69, 69, 69, 69,
401
+ 69, 69, 69, 69, 69, 69, 69, 69,
402
+ 69, 69, 69, 69, 69, 69, 70, 71,
403
+ 71, 71, 71, 71, 71, 71, 71, 71,
404
+ 71, 71, 71, 72, 71, 71, 73, 74,
405
+ 74, 74, 75, 1, 9, 9, 9, 9,
406
+ 9, 9, 9, 9, 22, 1, 9, 9,
407
+ 76, 9, 9, 9, 9, 9, 9, 9,
408
+ 9, 9, 9, 9, 9, 9, 9, 9,
409
+ 9, 9, 9, 22, 9, 11, 9, 9,
410
+ 9, 9, 9, 77, 9, 9, 9, 9,
411
+ 9, 9, 9, 9, 9, 9, 9, 9,
412
+ 9, 9, 9, 9, 9, 9, 9, 9,
413
+ 9, 9, 9, 9, 9, 9, 9, 9,
414
+ 9, 9, 9, 9, 9, 9, 9, 9,
415
+ 9, 9, 9, 9, 9, 9, 9, 9,
416
+ 9, 9, 9, 9, 9, 9, 9, 12,
417
+ 9, 9, 9, 9, 9, 9, 9, 9,
418
+ 9, 9, 9, 9, 9, 9, 9, 9,
419
+ 9, 9, 9, 9, 9, 9, 9, 9,
420
+ 9, 9, 9, 9, 9, 9, 9, 9,
421
+ 9, 9, 9, 1, 1, 1, 1, 1,
422
+ 1, 1, 1, 1, 1, 1, 1, 1,
166
423
  1, 1, 1, 1, 1, 1, 1, 1,
167
424
  1, 1, 1, 1, 1, 1, 1, 1,
168
- 1, 1, 1, 1, 26, 1, 26, 26,
169
- 26, 26, 26, 26, 26, 26, 26, 26,
170
- 26, 26, 26, 26, 26, 26, 26, 26,
171
- 26, 26, 26, 26, 26, 26, 26, 26,
172
- 26, 26, 26, 26, 26, 26, 26, 26,
173
- 26, 26, 26, 26, 26, 26, 26, 26,
174
- 26, 26, 26, 26, 26, 26, 26, 26,
175
- 26, 26, 26, 26, 26, 26, 26, 26,
176
- 26, 26, 26, 26, 26, 26, 26, 26,
177
- 26, 26, 26, 26, 26, 26, 26, 26,
178
- 26, 26, 26, 26, 26, 26, 26, 26,
179
- 26, 26, 26, 26, 26, 26, 26, 26,
180
- 26, 26, 26, 26, 26, 26, 26, 26,
181
- 26, 26, 26, 26, 26, 26, 26, 26,
182
- 26, 26, 26, 26, 26, 26, 26, 26,
183
- 26, 26, 26, 26, 26, 26, 26, 26,
184
- 26, 26, 26, 26, 26, 26, 1, 32,
185
- 1, 1, 1, 33, 1, 1, 1, 1,
186
425
  1, 1, 1, 1, 1, 1, 1, 1,
187
- 1, 1, 1, 1, 1, 1, 32, 34,
188
- 34, 34, 34, 34, 34, 34, 35, 1,
189
- 34, 34, 34, 34, 34, 1, 34, 34,
190
- 34, 34, 34, 34, 34, 34, 34, 34,
191
- 1, 1, 1, 34, 1, 1, 1, 34,
192
- 34, 34, 34, 34, 34, 34, 34, 34,
193
- 34, 34, 34, 34, 34, 34, 34, 34,
194
- 34, 34, 34, 34, 34, 34, 34, 34,
195
- 34, 1, 1, 1, 34, 34, 34, 34,
196
- 34, 34, 34, 34, 34, 34, 34, 34,
197
- 34, 34, 34, 34, 34, 34, 34, 34,
198
- 34, 34, 34, 34, 34, 34, 34, 34,
199
- 34, 34, 34, 34, 34, 1, 8, 1,
200
- 1, 1, 36, 1, 1, 1, 1, 1,
201
426
  1, 1, 1, 1, 1, 1, 1, 1,
202
- 1, 1, 1, 1, 1, 8, 1, 1,
203
- 1, 1, 1, 1, 1, 37, 1, 38,
204
- 1, 1, 1, 39, 1, 1, 1, 1,
205
427
  1, 1, 1, 1, 1, 1, 1, 1,
206
- 1, 1, 1, 1, 1, 1, 38, 1,
207
- 1, 1, 1, 1, 1, 1, 40, 1,
208
- 41, 41, 41, 41, 41, 41, 41, 41,
209
- 42, 1, 41, 41, 43, 41, 41, 41,
210
- 41, 41, 41, 41, 41, 41, 41, 41,
211
- 41, 41, 41, 41, 41, 41, 41, 42,
212
- 44, 45, 44, 44, 44, 44, 44, 46,
213
- 41, 44, 44, 44, 44, 44, 41, 44,
214
- 44, 44, 44, 44, 44, 44, 44, 44,
215
- 44, 41, 41, 41, 44, 41, 41, 41,
216
- 44, 44, 44, 44, 44, 44, 44, 44,
217
- 44, 44, 44, 44, 44, 44, 44, 44,
218
- 44, 44, 44, 44, 44, 44, 44, 44,
219
- 44, 44, 41, 47, 41, 44, 44, 44,
220
- 44, 44, 44, 44, 44, 44, 44, 44,
221
- 44, 44, 44, 44, 44, 44, 44, 44,
222
- 44, 44, 44, 44, 44, 44, 44, 44,
223
- 44, 44, 44, 44, 44, 44, 41, 1,
224
- 9, 9, 9, 9, 9, 9, 9, 9,
225
- 15, 1, 9, 9, 48, 9, 9, 9,
226
- 9, 9, 9, 9, 9, 9, 9, 9,
227
- 9, 9, 9, 9, 9, 9, 9, 15,
228
- 9, 11, 9, 9, 9, 9, 9, 49,
229
- 9, 9, 9, 9, 9, 9, 9, 9,
230
- 9, 9, 9, 9, 9, 9, 9, 9,
231
- 9, 9, 9, 9, 9, 9, 9, 9,
232
- 9, 9, 9, 9, 9, 9, 9, 9,
233
- 9, 9, 9, 9, 9, 9, 9, 9,
234
- 9, 9, 9, 9, 9, 9, 9, 9,
235
- 9, 9, 9, 12, 9, 9, 9, 9,
236
- 9, 9, 9, 9, 9, 9, 9, 9,
237
- 9, 9, 9, 9, 9, 9, 9, 9,
238
- 9, 9, 9, 9, 9, 9, 9, 9,
239
- 9, 9, 9, 9, 9, 9, 9, 1,
240
- 9, 9, 9, 9, 9, 9, 9, 9,
241
- 50, 1, 9, 9, 51, 9, 9, 9,
242
- 9, 9, 9, 9, 9, 9, 9, 9,
243
- 9, 9, 9, 9, 9, 9, 9, 50,
244
- 9, 11, 9, 9, 9, 9, 9, 52,
428
+ 1, 1, 1, 1, 1, 1, 1, 1,
429
+ 1, 1, 1, 1, 1, 13, 13, 13,
430
+ 13, 13, 13, 13, 13, 13, 13, 13,
431
+ 13, 13, 13, 13, 13, 13, 13, 13,
432
+ 13, 13, 13, 13, 13, 13, 13, 13,
433
+ 13, 13, 13, 14, 15, 15, 15, 15,
434
+ 15, 15, 15, 15, 15, 15, 15, 15,
435
+ 16, 15, 15, 17, 18, 18, 18, 19,
436
+ 1, 9, 9, 9, 9, 9, 9, 9,
437
+ 9, 78, 1, 9, 9, 79, 9, 9,
245
438
  9, 9, 9, 9, 9, 9, 9, 9,
246
439
  9, 9, 9, 9, 9, 9, 9, 9,
440
+ 78, 9, 11, 9, 9, 9, 9, 9,
441
+ 80, 9, 9, 9, 9, 9, 9, 9,
247
442
  9, 9, 9, 9, 9, 9, 9, 9,
248
443
  9, 9, 9, 9, 9, 9, 9, 9,
249
444
  9, 9, 9, 9, 9, 9, 9, 9,
250
445
  9, 9, 9, 9, 9, 9, 9, 9,
251
- 9, 9, 9, 12, 9, 9, 9, 9,
252
446
  9, 9, 9, 9, 9, 9, 9, 9,
447
+ 9, 9, 9, 9, 12, 9, 9, 9,
253
448
  9, 9, 9, 9, 9, 9, 9, 9,
254
449
  9, 9, 9, 9, 9, 9, 9, 9,
255
- 9, 9, 9, 9, 9, 9, 9, 1,
256
450
  9, 9, 9, 9, 9, 9, 9, 9,
257
- 53, 1, 9, 9, 54, 9, 9, 9,
258
451
  9, 9, 9, 9, 9, 9, 9, 9,
259
- 9, 9, 9, 9, 9, 9, 9, 53,
260
- 55, 56, 55, 55, 55, 55, 55, 57,
261
- 9, 55, 55, 55, 55, 55, 9, 55,
262
- 55, 55, 55, 55, 55, 55, 55, 55,
263
- 55, 9, 9, 9, 55, 9, 9, 9,
452
+ 1, 1, 1, 1, 1, 1, 1, 1,
453
+ 1, 1, 1, 1, 1, 1, 1, 1,
454
+ 1, 1, 1, 1, 1, 1, 1, 1,
455
+ 1, 1, 1, 1, 1, 1, 1, 1,
456
+ 1, 1, 1, 1, 1, 1, 1, 1,
457
+ 1, 1, 1, 1, 1, 1, 1, 1,
458
+ 1, 1, 1, 1, 1, 1, 1, 1,
459
+ 1, 1, 1, 1, 1, 1, 1, 1,
460
+ 1, 1, 13, 13, 13, 13, 13, 13,
461
+ 13, 13, 13, 13, 13, 13, 13, 13,
462
+ 13, 13, 13, 13, 13, 13, 13, 13,
463
+ 13, 13, 13, 13, 13, 13, 13, 13,
464
+ 14, 15, 15, 15, 15, 15, 15, 15,
465
+ 15, 15, 15, 15, 15, 16, 15, 15,
466
+ 17, 18, 18, 18, 19, 1, 9, 9,
467
+ 9, 9, 9, 9, 9, 9, 81, 1,
468
+ 9, 9, 82, 9, 9, 9, 9, 9,
469
+ 9, 9, 9, 9, 9, 9, 9, 9,
470
+ 9, 9, 9, 9, 9, 81, 83, 84,
471
+ 83, 83, 83, 83, 83, 85, 9, 83,
472
+ 83, 83, 83, 83, 9, 83, 83, 83,
473
+ 83, 83, 83, 83, 83, 83, 83, 9,
474
+ 9, 9, 83, 9, 9, 9, 83, 83,
475
+ 83, 83, 83, 83, 83, 83, 83, 83,
476
+ 83, 83, 83, 83, 83, 83, 83, 83,
477
+ 83, 83, 83, 83, 83, 83, 83, 83,
478
+ 9, 12, 9, 83, 83, 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, 9, 1, 1, 1,
483
+ 1, 1, 1, 1, 1, 1, 1, 1,
484
+ 1, 1, 1, 1, 1, 1, 1, 1,
485
+ 1, 1, 1, 1, 1, 1, 1, 1,
486
+ 1, 1, 1, 1, 1, 1, 1, 1,
487
+ 1, 1, 1, 1, 1, 1, 1, 1,
488
+ 1, 1, 1, 1, 1, 1, 1, 1,
489
+ 1, 1, 1, 1, 1, 1, 1, 1,
490
+ 1, 1, 1, 1, 1, 1, 1, 13,
491
+ 13, 13, 13, 13, 13, 13, 13, 13,
492
+ 13, 13, 13, 13, 13, 13, 13, 13,
493
+ 13, 13, 13, 13, 13, 13, 13, 13,
494
+ 13, 13, 13, 13, 13, 14, 15, 15,
495
+ 15, 15, 15, 15, 15, 15, 15, 15,
496
+ 15, 15, 16, 15, 15, 17, 18, 18,
497
+ 18, 19, 1, 53, 1, 1, 1, 54,
498
+ 1, 1, 1, 1, 1, 1, 1, 1,
499
+ 1, 1, 1, 1, 1, 1, 1, 1,
500
+ 1, 1, 53, 55, 55, 55, 55, 55,
501
+ 55, 55, 86, 1, 55, 55, 55, 55,
502
+ 55, 1, 55, 55, 55, 55, 55, 55,
503
+ 55, 55, 55, 55, 1, 1, 1, 55,
504
+ 1, 1, 1, 55, 55, 55, 55, 55,
264
505
  55, 55, 55, 55, 55, 55, 55, 55,
265
506
  55, 55, 55, 55, 55, 55, 55, 55,
507
+ 55, 55, 55, 55, 55, 1, 1, 1,
266
508
  55, 55, 55, 55, 55, 55, 55, 55,
267
- 55, 55, 9, 12, 9, 55, 55, 55,
268
509
  55, 55, 55, 55, 55, 55, 55, 55,
269
510
  55, 55, 55, 55, 55, 55, 55, 55,
270
511
  55, 55, 55, 55, 55, 55, 55, 55,
271
- 55, 55, 55, 55, 55, 55, 9, 1,
272
- 32, 1, 1, 1, 33, 1, 1, 1,
273
- 1, 1, 1, 1, 1, 1, 1, 1,
274
- 1, 1, 1, 1, 1, 1, 1, 32,
275
- 34, 34, 34, 34, 34, 34, 34, 58,
276
- 1, 34, 34, 34, 34, 34, 1, 34,
277
- 34, 34, 34, 34, 34, 34, 34, 34,
278
- 34, 1, 1, 1, 34, 1, 1, 1,
279
- 34, 34, 34, 34, 34, 34, 34, 34,
280
- 34, 34, 34, 34, 34, 34, 34, 34,
281
- 34, 34, 34, 34, 34, 34, 34, 34,
282
- 34, 34, 1, 1, 1, 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, 1, 1,
287
- 0
512
+ 55, 1, 1, 0
288
513
  ]
289
514
 
290
515
  class << self
@@ -292,14 +517,17 @@ class << self
292
517
  private :_trans_targs, :_trans_targs=
293
518
  end
294
519
  self._trans_targs = [
295
- 1, 0, 2, 18, 21, 12, 3, 5,
296
- 19, 6, 7, 19, 9, 8, 11, 22,
297
- 1, 2, 18, 21, 12, 14, 15, 14,
298
- 26, 17, 14, 15, 14, 26, 17, 16,
299
- 19, 4, 18, 20, 4, 20, 19, 4,
300
- 20, 6, 22, 10, 24, 25, 23, 9,
301
- 10, 23, 22, 10, 23, 22, 10, 24,
302
- 25, 23, 20
520
+ 1, 0, 2, 32, 35, 19, 3, 5,
521
+ 33, 6, 7, 33, 9, 10, 11, 12,
522
+ 13, 14, 15, 16, 8, 18, 36, 1,
523
+ 2, 32, 35, 19, 21, 22, 21, 40,
524
+ 24, 25, 26, 27, 28, 29, 30, 31,
525
+ 21, 22, 21, 40, 24, 25, 26, 27,
526
+ 28, 29, 30, 31, 23, 33, 4, 32,
527
+ 34, 4, 34, 33, 4, 34, 6, 36,
528
+ 17, 38, 39, 37, 9, 10, 11, 12,
529
+ 13, 14, 15, 16, 17, 37, 36, 17,
530
+ 37, 36, 17, 38, 39, 37, 34
303
531
  ]
304
532
 
305
533
  class << self
@@ -309,12 +537,15 @@ end
309
537
  self._trans_actions = [
310
538
  0, 0, 0, 1, 1, 2, 0, 0,
311
539
  0, 0, 0, 3, 0, 0, 0, 0,
312
- 4, 4, 5, 5, 6, 7, 7, 8,
313
- 9, 7, 0, 0, 2, 10, 0, 0,
314
- 11, 11, 0, 12, 0, 2, 4, 4,
315
- 6, 13, 14, 14, 13, 15, 16, 13,
316
- 0, 2, 4, 4, 6, 11, 11, 0,
317
- 3, 12, 17
540
+ 0, 0, 0, 0, 0, 0, 0, 4,
541
+ 4, 5, 5, 6, 7, 7, 8, 9,
542
+ 7, 7, 7, 7, 7, 7, 7, 7,
543
+ 0, 0, 2, 10, 0, 0, 0, 0,
544
+ 0, 0, 0, 0, 0, 11, 11, 0,
545
+ 12, 0, 2, 4, 4, 6, 13, 14,
546
+ 14, 13, 15, 16, 13, 13, 13, 13,
547
+ 13, 13, 13, 13, 0, 2, 4, 4,
548
+ 6, 11, 11, 0, 3, 12, 17
318
549
  ]
319
550
 
320
551
  class << self
@@ -324,8 +555,10 @@ end
324
555
  self._eof_actions = [
325
556
  0, 0, 0, 0, 0, 0, 0, 0,
326
557
  0, 0, 0, 0, 0, 0, 0, 0,
327
- 0, 0, 11, 0, 4, 11, 0, 4,
328
- 11, 11, 0
558
+ 0, 0, 0, 0, 0, 0, 0, 0,
559
+ 0, 0, 0, 0, 0, 0, 0, 0,
560
+ 11, 0, 4, 11, 0, 4, 11, 11,
561
+ 0
329
562
  ]
330
563
 
331
564
  class << self
@@ -335,7 +568,7 @@ self.start = 1;
335
568
  class << self
336
569
  attr_accessor :first_final
337
570
  end
338
- self.first_final = 18;
571
+ self.first_final = 32;
339
572
  class << self
340
573
  attr_accessor :error
341
574
  end
@@ -344,7 +577,7 @@ self.error = 0;
344
577
  class << self
345
578
  attr_accessor :en_comment_tail
346
579
  end
347
- self.en_comment_tail = 13;
580
+ self.en_comment_tail = 20;
348
581
  class << self
349
582
  attr_accessor :en_main
350
583
  end
@@ -353,6 +586,8 @@ self.en_main = 1;
353
586
 
354
587
 
355
588
  def self.parse(data)
589
+ data = data.dup.force_encoding(Encoding::ASCII_8BIT) if data.respond_to?(:force_encoding)
590
+
356
591
  content_location = ContentLocationStruct.new(nil)
357
592
  return content_location if Mail::Utilities.blank?(data)
358
593
 
@@ -414,13 +649,13 @@ begin
414
649
  qstr_s = p end
415
650
  when 3 then
416
651
  begin
417
- content_location.location = data[qstr_s..(p-1)] end
652
+ content_location.location = chars(data, qstr_s, p-1) end
418
653
  when 1 then
419
654
  begin
420
655
  token_string_s = p end
421
656
  when 11 then
422
657
  begin
423
- content_location.location = data[token_string_s..(p-1)] end
658
+ content_location.location = chars(data, token_string_s, p-1) end
424
659
  when 4 then
425
660
  begin
426
661
  end
@@ -432,7 +667,7 @@ begin
432
667
  begin
433
668
  stack[top] = cs
434
669
  top+= 1
435
- cs = 13
670
+ cs = 20
436
671
  _goto_level = _again
437
672
  next
438
673
  end
@@ -450,20 +685,20 @@ begin
450
685
  begin
451
686
  qstr_s = p end
452
687
  begin
453
- content_location.location = data[qstr_s..(p-1)] end
688
+ content_location.location = chars(data, qstr_s, p-1) end
454
689
  when 14 then
455
690
  begin
456
691
  qstr_s = p end
457
692
  begin
458
- content_location.location = data[token_string_s..(p-1)] end
693
+ content_location.location = chars(data, token_string_s, p-1) end
459
694
  when 12 then
460
695
  begin
461
- content_location.location = data[token_string_s..(p-1)] end
696
+ content_location.location = chars(data, token_string_s, p-1) end
462
697
  begin
463
698
  begin
464
699
  stack[top] = cs
465
700
  top+= 1
466
- cs = 13
701
+ cs = 20
467
702
  _goto_level = _again
468
703
  next
469
704
  end
@@ -480,7 +715,7 @@ begin
480
715
  begin
481
716
  stack[top] = cs
482
717
  top+= 1
483
- cs = 13
718
+ cs = 20
484
719
  _goto_level = _again
485
720
  next
486
721
  end
@@ -492,7 +727,7 @@ begin
492
727
  begin
493
728
  stack[top] = cs
494
729
  top+= 1
495
- cs = 13
730
+ cs = 20
496
731
  _goto_level = _again
497
732
  next
498
733
  end
@@ -513,23 +748,23 @@ begin
513
748
  begin
514
749
  stack[top] = cs
515
750
  top+= 1
516
- cs = 13
751
+ cs = 20
517
752
  _goto_level = _again
518
753
  next
519
754
  end
520
755
  end
521
756
  begin
522
- content_location.location = data[token_string_s..(p-1)] end
757
+ content_location.location = chars(data, token_string_s, p-1) end
523
758
  when 16 then
524
759
  begin
525
760
  qstr_s = p end
526
761
  begin
527
- content_location.location = data[token_string_s..(p-1)] end
762
+ content_location.location = chars(data, token_string_s, p-1) end
528
763
  begin
529
764
  begin
530
765
  stack[top] = cs
531
766
  top+= 1
532
- cs = 13
767
+ cs = 20
533
768
  _goto_level = _again
534
769
  next
535
770
  end
@@ -553,7 +788,7 @@ begin
553
788
  case _eof_actions[cs]
554
789
  when 11 then
555
790
  begin
556
- content_location.location = data[token_string_s..(p-1)] end
791
+ content_location.location = chars(data, token_string_s, p-1) end
557
792
  when 4 then
558
793
  begin
559
794
  end
@@ -568,8 +803,8 @@ end
568
803
  end
569
804
 
570
805
 
571
- if p != eof || cs < 18
572
- raise Mail::Field::ParseError.new(Mail::ContentLocationElement, data, "Only able to parse up to #{data[0..p]}")
806
+ if p != eof || cs < 32
807
+ raise Mail::Field::IncompleteParseError.new(Mail::ContentLocationElement, data, p)
573
808
  end
574
809
 
575
810
  content_location