fireinc-pdf-reader 0.11.0.alpha
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.
- data/CHANGELOG +168 -0
- data/MIT-LICENSE +21 -0
- data/README.rdoc +137 -0
- data/Rakefile +34 -0
- data/TODO +45 -0
- data/bin/pdf_list_callbacks +15 -0
- data/bin/pdf_object +48 -0
- data/bin/pdf_text +15 -0
- data/examples/callbacks.rb +21 -0
- data/examples/extract_bates.rb +49 -0
- data/examples/extract_images.rb +108 -0
- data/examples/hash.rb +12 -0
- data/examples/metadata.rb +25 -0
- data/examples/page_counter_improved.rb +23 -0
- data/examples/page_counter_naive.rb +24 -0
- data/examples/rspec.rb +57 -0
- data/examples/text.rb +40 -0
- data/examples/version.rb +25 -0
- data/lib/pdf/hash.rb +15 -0
- data/lib/pdf/reader/abstract_strategy.rb +81 -0
- data/lib/pdf/reader/buffer.rb +346 -0
- data/lib/pdf/reader/cmap.rb +138 -0
- data/lib/pdf/reader/encoding.rb +190 -0
- data/lib/pdf/reader/encodings/mac_expert.txt +159 -0
- data/lib/pdf/reader/encodings/mac_roman.txt +128 -0
- data/lib/pdf/reader/encodings/pdf_doc.txt +40 -0
- data/lib/pdf/reader/encodings/standard.txt +47 -0
- data/lib/pdf/reader/encodings/symbol.txt +154 -0
- data/lib/pdf/reader/encodings/win_ansi.txt +29 -0
- data/lib/pdf/reader/encodings/zapf_dingbats.txt +201 -0
- data/lib/pdf/reader/error.rb +53 -0
- data/lib/pdf/reader/filter.rb +219 -0
- data/lib/pdf/reader/font.rb +133 -0
- data/lib/pdf/reader/form_xobject.rb +83 -0
- data/lib/pdf/reader/glyphlist.txt +4322 -0
- data/lib/pdf/reader/lzw.rb +123 -0
- data/lib/pdf/reader/metadata_strategy.rb +56 -0
- data/lib/pdf/reader/object_cache.rb +85 -0
- data/lib/pdf/reader/object_hash.rb +289 -0
- data/lib/pdf/reader/object_stream.rb +51 -0
- data/lib/pdf/reader/page.rb +185 -0
- data/lib/pdf/reader/page_text_receiver.rb +278 -0
- data/lib/pdf/reader/pages_strategy.rb +475 -0
- data/lib/pdf/reader/parser.rb +225 -0
- data/lib/pdf/reader/print_receiver.rb +18 -0
- data/lib/pdf/reader/reference.rb +66 -0
- data/lib/pdf/reader/register_receiver.rb +95 -0
- data/lib/pdf/reader/stream.rb +69 -0
- data/lib/pdf/reader/text_receiver.rb +264 -0
- data/lib/pdf/reader/token.rb +41 -0
- data/lib/pdf/reader/xref.rb +220 -0
- data/lib/pdf/reader.rb +296 -0
- data/lib/pdf-reader.rb +1 -0
- metadata +211 -0
@@ -0,0 +1,138 @@
|
|
1
|
+
################################################################################
|
2
|
+
#
|
3
|
+
# Copyright (C) 2008 James Healy (jimmy@deefa.com)
|
4
|
+
#
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
# a copy of this software and associated documentation files (the
|
7
|
+
# "Software"), to deal in the Software without restriction, including
|
8
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
# the following conditions:
|
12
|
+
#
|
13
|
+
# The above copyright notice and this permission notice shall be
|
14
|
+
# included in all copies or substantial portions of the Software.
|
15
|
+
#
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
23
|
+
#
|
24
|
+
################################################################################
|
25
|
+
|
26
|
+
class PDF::Reader
|
27
|
+
class CMap # :nodoc:
|
28
|
+
|
29
|
+
def initialize(data)
|
30
|
+
@map = {}
|
31
|
+
process_data(data)
|
32
|
+
end
|
33
|
+
|
34
|
+
def process_data(data)
|
35
|
+
mode = nil
|
36
|
+
instructions = ""
|
37
|
+
|
38
|
+
data.each_line do |l|
|
39
|
+
if l.include?("beginbfchar")
|
40
|
+
mode = :char
|
41
|
+
elsif l.include?("endbfchar")
|
42
|
+
process_bfchar_instructions(instructions)
|
43
|
+
instructions = ""
|
44
|
+
mode = nil
|
45
|
+
elsif l.include?("beginbfrange")
|
46
|
+
mode = :range
|
47
|
+
elsif l.include?("endbfrange")
|
48
|
+
process_bfrange_instructions(instructions)
|
49
|
+
instructions = ""
|
50
|
+
mode = nil
|
51
|
+
elsif mode == :char || mode == :range
|
52
|
+
instructions << l
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def size
|
58
|
+
@map.size
|
59
|
+
end
|
60
|
+
|
61
|
+
def decode(c)
|
62
|
+
# TODO: implement the conversion
|
63
|
+
return c unless c.class == Fixnum
|
64
|
+
@map[c]
|
65
|
+
end
|
66
|
+
|
67
|
+
private
|
68
|
+
|
69
|
+
def build_parser(instructions)
|
70
|
+
buffer = Buffer.new(StringIO.new(instructions))
|
71
|
+
Parser.new(buffer)
|
72
|
+
end
|
73
|
+
|
74
|
+
def str_to_int(str)
|
75
|
+
return nil if str.nil? || str.size == 0 || str.size >= 3
|
76
|
+
|
77
|
+
if str.size == 1
|
78
|
+
str.unpack("C*")[0]
|
79
|
+
else
|
80
|
+
str.unpack("n*")[0]
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def process_bfchar_instructions(instructions)
|
85
|
+
parser = build_parser(instructions)
|
86
|
+
find = str_to_int(parser.parse_token)
|
87
|
+
replace = str_to_int(parser.parse_token)
|
88
|
+
while find && replace
|
89
|
+
@map[find] = replace
|
90
|
+
find = str_to_int(parser.parse_token)
|
91
|
+
replace = str_to_int(parser.parse_token)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def process_bfrange_instructions(instructions)
|
96
|
+
parser = build_parser(instructions)
|
97
|
+
start = parser.parse_token
|
98
|
+
finish = parser.parse_token
|
99
|
+
to = parser.parse_token
|
100
|
+
while start && finish && to
|
101
|
+
if start.kind_of?(String) && finish.kind_of?(String) && to.kind_of?(String)
|
102
|
+
bfrange_type_one(start, finish, to)
|
103
|
+
elsif start.kind_of?(String) && finish.kind_of?(String) && to.kind_of?(Array)
|
104
|
+
bfrange_type_two(start, finish, to)
|
105
|
+
else
|
106
|
+
raise "invalid bfrange section"
|
107
|
+
end
|
108
|
+
start = parser.parse_token
|
109
|
+
finish = parser.parse_token
|
110
|
+
to = parser.parse_token
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
def bfrange_type_one(start_code, end_code, dst)
|
115
|
+
start_code = str_to_int(start_code)
|
116
|
+
end_code = str_to_int(end_code)
|
117
|
+
dst = str_to_int(dst)
|
118
|
+
|
119
|
+
# add all values in the range to our mapping
|
120
|
+
(start_code..end_code).each_with_index do |val, idx|
|
121
|
+
@map[val] = dst + idx
|
122
|
+
# ensure a single range does not exceed 255 chars
|
123
|
+
raise PDF::Reader::MalformedPDFError, "a CMap bfrange cann't exceed 255 chars" if idx > 255
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
def bfrange_type_two(start_code, end_code, dst)
|
128
|
+
start_code = str_to_int(start_code)
|
129
|
+
end_code = str_to_int(end_code)
|
130
|
+
from_range = (start_code..end_code)
|
131
|
+
|
132
|
+
# add all values in the range to our mapping
|
133
|
+
from_range.each_with_index do |val, idx|
|
134
|
+
@map[val] = str_to_int(dst[idx])
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
@@ -0,0 +1,190 @@
|
|
1
|
+
################################################################################
|
2
|
+
#
|
3
|
+
# Copyright (C) 2008 James Healy (jimmy@deefa.com)
|
4
|
+
#
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
# a copy of this software and associated documentation files (the
|
7
|
+
# "Software"), to deal in the Software without restriction, including
|
8
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
# the following conditions:
|
12
|
+
#
|
13
|
+
# The above copyright notice and this permission notice shall be
|
14
|
+
# included in all copies or substantial portions of the Software.
|
15
|
+
#
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
23
|
+
#
|
24
|
+
################################################################################
|
25
|
+
|
26
|
+
class PDF::Reader
|
27
|
+
class Encoding # :nodoc:
|
28
|
+
CONTROL_CHARS = [0,1,2,3,4,5,6,7,8,11,12,14,15,16,17,18,19,20,21,22,23,
|
29
|
+
24,25,26,27,28,29,30,31]
|
30
|
+
UNKNOWN_CHAR = 0x25AF # ▯
|
31
|
+
|
32
|
+
attr_reader :unpack
|
33
|
+
|
34
|
+
def initialize(enc)
|
35
|
+
if enc.kind_of?(Hash)
|
36
|
+
self.differences = enc[:Differences] if enc[:Differences]
|
37
|
+
enc = enc[:Encoding] || enc[:BaseEncoding]
|
38
|
+
elsif enc != nil
|
39
|
+
enc = enc.to_sym
|
40
|
+
else
|
41
|
+
enc = nil
|
42
|
+
end
|
43
|
+
|
44
|
+
@to_unicode_required = unicode_required?(enc)
|
45
|
+
@unpack = get_unpack(enc)
|
46
|
+
@map_file = get_mapping_file(enc)
|
47
|
+
load_mapping(@map_file) if @map_file
|
48
|
+
end
|
49
|
+
|
50
|
+
def to_unicode_required?
|
51
|
+
@to_unicode_required
|
52
|
+
end
|
53
|
+
|
54
|
+
# set the differences table for this encoding. should be an array in the following format:
|
55
|
+
#
|
56
|
+
# [25, :A, 26, :B]
|
57
|
+
#
|
58
|
+
# The array alternates between a decimal byte number and a glyph name to map to that byte
|
59
|
+
#
|
60
|
+
# To save space the following array is also valid and equivalent to the previous one
|
61
|
+
#
|
62
|
+
# [25, :A, :B]
|
63
|
+
def differences=(diff)
|
64
|
+
raise ArgumentError, "diff must be an array" unless diff.kind_of?(Array)
|
65
|
+
|
66
|
+
@differences = {}
|
67
|
+
byte = 0
|
68
|
+
diff.each do |val|
|
69
|
+
if val.kind_of?(Numeric)
|
70
|
+
byte = val.to_i
|
71
|
+
else
|
72
|
+
@differences[byte] = val
|
73
|
+
byte += 1
|
74
|
+
end
|
75
|
+
end
|
76
|
+
@differences
|
77
|
+
end
|
78
|
+
|
79
|
+
def differences
|
80
|
+
@differences ||= {}
|
81
|
+
end
|
82
|
+
|
83
|
+
# convert the specified string to utf8
|
84
|
+
#
|
85
|
+
# * unpack raw bytes into codepoints
|
86
|
+
# * replace any that have entries in the differences table with a glyph name
|
87
|
+
# * convert codepoints from source encoding to Unicode codepoints
|
88
|
+
# * convert any glyph names to Unicode codepoints
|
89
|
+
# * replace characters that didn't convert to Unicode nicely with something
|
90
|
+
# valid
|
91
|
+
# * pack the final array of Unicode codepoints into a utf-8 string
|
92
|
+
# * mark the string as utf-8 if we're running on a M17N aware VM
|
93
|
+
#
|
94
|
+
def to_utf8(str, tounicode = nil)
|
95
|
+
ret = str.unpack(unpack).map { |c|
|
96
|
+
differences[c] || c
|
97
|
+
}.map { |num|
|
98
|
+
original_codepoint_to_unicode(num, tounicode)
|
99
|
+
}.map { |c|
|
100
|
+
glyphnames[c] || c
|
101
|
+
}.map { |c|
|
102
|
+
if c.nil? || !c.is_a?(Fixnum)
|
103
|
+
PDF::Reader::Encoding::UNKNOWN_CHAR
|
104
|
+
else
|
105
|
+
c
|
106
|
+
end
|
107
|
+
}.pack("U*")
|
108
|
+
|
109
|
+
ret.force_encoding("UTF-8") if ret.respond_to?(:force_encoding)
|
110
|
+
|
111
|
+
ret
|
112
|
+
end
|
113
|
+
|
114
|
+
private
|
115
|
+
|
116
|
+
def original_codepoint_to_unicode(cp, tounicode = nil)
|
117
|
+
if tounicode && (code = tounicode.decode(cp))
|
118
|
+
code
|
119
|
+
elsif to_unicode_required? && (tounicode.nil? || tounicode.decode(cp).nil?)
|
120
|
+
PDF::Reader::Encoding::UNKNOWN_CHAR
|
121
|
+
elsif mapping[cp]
|
122
|
+
mapping[cp]
|
123
|
+
elsif PDF::Reader::Encoding::CONTROL_CHARS.include?(cp)
|
124
|
+
PDF::Reader::Encoding::UNKNOWN_CHAR
|
125
|
+
else
|
126
|
+
cp
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
def get_unpack(enc)
|
131
|
+
case enc
|
132
|
+
when :"Identity-H", :"Identity-V", :UTF16Encoding
|
133
|
+
"n*"
|
134
|
+
else
|
135
|
+
"C*"
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
def get_mapping_file(enc)
|
140
|
+
return File.dirname(__FILE__) + "/encodings/standard.txt" if enc.nil?
|
141
|
+
files = {
|
142
|
+
:"Identity-H" => nil,
|
143
|
+
:"Identity-V" => nil,
|
144
|
+
:MacRomanEncoding => File.dirname(__FILE__) + "/encodings/mac_roman.txt",
|
145
|
+
:MacExpertEncoding => File.dirname(__FILE__) + "/encodings/mac_expert.txt",
|
146
|
+
:PDFDocEncoding => File.dirname(__FILE__) + "/encodings/pdf_doc.txt",
|
147
|
+
:StandardEncoding => File.dirname(__FILE__) + "/encodings/standard.txt",
|
148
|
+
:SymbolEncoding => File.dirname(__FILE__) + "/encodings/symbol.txt",
|
149
|
+
:UTF16Encoding => nil,
|
150
|
+
:WinAnsiEncoding => File.dirname(__FILE__) + "/encodings/win_ansi.txt",
|
151
|
+
:ZapfDingbatsEncoding => File.dirname(__FILE__) + "/encodings/zapf_dingbats.txt"
|
152
|
+
}
|
153
|
+
|
154
|
+
if files.has_key?(enc)
|
155
|
+
files[enc]
|
156
|
+
else
|
157
|
+
raise UnsupportedFeatureError, "#{enc} is not currently a supported encoding"
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
def unicode_required?(enc)
|
162
|
+
enc == :"Identity-H" or enc == :"Identity-V"
|
163
|
+
end
|
164
|
+
|
165
|
+
def mapping
|
166
|
+
@mapping ||= {}
|
167
|
+
end
|
168
|
+
|
169
|
+
def has_mapping?
|
170
|
+
mapping.size > 0
|
171
|
+
end
|
172
|
+
|
173
|
+
def glyphnames
|
174
|
+
@glyphnames ||= PDF::Reader::Font.glyphnames
|
175
|
+
end
|
176
|
+
|
177
|
+
def load_mapping(file)
|
178
|
+
return if has_mapping?
|
179
|
+
|
180
|
+
RUBY_VERSION >= "1.9" ? mode = "r:BINARY" : mode = "r"
|
181
|
+
File.open(file, mode) do |f|
|
182
|
+
f.each do |l|
|
183
|
+
m, single_byte, unicode = *l.match(/([0-9A-Za-z]+);([0-9A-F]{4})/)
|
184
|
+
mapping["0x#{single_byte}".hex] = "0x#{unicode}".hex if single_byte
|
185
|
+
end
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
end
|
190
|
+
end
|
@@ -0,0 +1,159 @@
|
|
1
|
+
21;F721
|
2
|
+
22;F6F8 # Hungarumlautsmall
|
3
|
+
23;F7A2
|
4
|
+
24;F724
|
5
|
+
25;F6E4
|
6
|
+
26;F726
|
7
|
+
27;F7B4
|
8
|
+
28;207D
|
9
|
+
29;F07E
|
10
|
+
2A;2025
|
11
|
+
2B;2024
|
12
|
+
2F;2044
|
13
|
+
30;F730
|
14
|
+
31;F731
|
15
|
+
32;F732
|
16
|
+
33;F733
|
17
|
+
34;F734
|
18
|
+
35;F735
|
19
|
+
36;F736
|
20
|
+
37;F737
|
21
|
+
38;F738
|
22
|
+
39;F739
|
23
|
+
3D;F6DE
|
24
|
+
3F;F73F
|
25
|
+
44;F7F0
|
26
|
+
47;00BC
|
27
|
+
48;00BD
|
28
|
+
49;00BE
|
29
|
+
4A;215B
|
30
|
+
4B;215C
|
31
|
+
4C;215D
|
32
|
+
4D;215E
|
33
|
+
4E;2153
|
34
|
+
4F;2154
|
35
|
+
56;FB00
|
36
|
+
57;FB01
|
37
|
+
58;FB02
|
38
|
+
59;FB03
|
39
|
+
5A;FB04
|
40
|
+
5B;208D
|
41
|
+
5D;208E
|
42
|
+
5E;F6F6
|
43
|
+
5F;F6E5
|
44
|
+
60;F760
|
45
|
+
61;F761
|
46
|
+
62;F762
|
47
|
+
63;F763
|
48
|
+
64;F764
|
49
|
+
65;F765
|
50
|
+
66;F766
|
51
|
+
67;F767
|
52
|
+
68;F768
|
53
|
+
69;F769
|
54
|
+
6A;F76A
|
55
|
+
6B;F76B
|
56
|
+
6C;F76C
|
57
|
+
6D;F76D
|
58
|
+
6E;F76E
|
59
|
+
6F;F76F
|
60
|
+
70;F770
|
61
|
+
71;F771
|
62
|
+
72;F772
|
63
|
+
73;F773
|
64
|
+
74;F774
|
65
|
+
75;F775
|
66
|
+
76;F776
|
67
|
+
77;F777
|
68
|
+
78;F778
|
69
|
+
79;F779
|
70
|
+
7A;F77A
|
71
|
+
7B;20A1
|
72
|
+
7C;F6DC
|
73
|
+
7D;F6DD
|
74
|
+
7E;F6FE
|
75
|
+
81;F6E9
|
76
|
+
82;F6E0
|
77
|
+
87;F7E1 # Acircumflexsmall
|
78
|
+
88;F7E0
|
79
|
+
89;F7E2 # Acutesmall
|
80
|
+
8A;F7E4
|
81
|
+
8B;F7E3
|
82
|
+
8C;F7E5
|
83
|
+
8D;F7E7
|
84
|
+
8E;F7E9
|
85
|
+
8F;F7E8
|
86
|
+
90;F7E4
|
87
|
+
91;F7EB
|
88
|
+
92;F7ED
|
89
|
+
93;F7EC
|
90
|
+
94;F7EE
|
91
|
+
95;F7EF
|
92
|
+
96;F7F1
|
93
|
+
97;F7F3
|
94
|
+
98;F7F2
|
95
|
+
99;F7F4
|
96
|
+
9A;F7F6
|
97
|
+
9B;F7F5
|
98
|
+
9C;F7FA
|
99
|
+
9D;F7F9
|
100
|
+
9E;F7FB
|
101
|
+
9F;F7FC
|
102
|
+
A1;2078
|
103
|
+
A2;2084
|
104
|
+
A3;2083
|
105
|
+
A4;2086
|
106
|
+
A5;2088
|
107
|
+
A6;2087
|
108
|
+
A7;F6FD
|
109
|
+
A9;F6DF
|
110
|
+
AA;2082
|
111
|
+
AC;F7A8
|
112
|
+
AE;F6F5
|
113
|
+
AF;F6F0
|
114
|
+
B0;2085
|
115
|
+
B2;F6E1
|
116
|
+
B3;F6E7
|
117
|
+
B4;F7FD
|
118
|
+
B6;F6E3
|
119
|
+
B9;F7FE
|
120
|
+
BB;2089
|
121
|
+
BC;2080
|
122
|
+
BD;F6FF
|
123
|
+
BE;F7E6 # AEsmall
|
124
|
+
BF;F7F8
|
125
|
+
C0;F7BF
|
126
|
+
C1;2081
|
127
|
+
C2;F6F9
|
128
|
+
C9;F7B8
|
129
|
+
CF;F6FA
|
130
|
+
D0;2012
|
131
|
+
D1;F6E6
|
132
|
+
D6;F7A1
|
133
|
+
D8;F7FF
|
134
|
+
DA;00B9
|
135
|
+
DB;00B2
|
136
|
+
DC;00B3
|
137
|
+
DD;2074
|
138
|
+
DE;2075
|
139
|
+
DF;2076
|
140
|
+
E0;2077
|
141
|
+
E1;2079
|
142
|
+
E2;2070
|
143
|
+
E4;F6EC
|
144
|
+
E5;F6F1
|
145
|
+
E6;F6F3
|
146
|
+
E9;F6ED
|
147
|
+
EA;F6F2
|
148
|
+
EB;F6EB
|
149
|
+
F1;F6EE
|
150
|
+
F2;F6FB
|
151
|
+
F3;F6F4
|
152
|
+
F4;F7AF
|
153
|
+
F5;F6EF
|
154
|
+
F6;207F
|
155
|
+
F7;F6EF
|
156
|
+
F8;F6E2
|
157
|
+
F9;F6E8
|
158
|
+
FA;F6F7
|
159
|
+
FB;F6FC
|
@@ -0,0 +1,128 @@
|
|
1
|
+
80;00C4
|
2
|
+
81;00C5
|
3
|
+
82;00C7
|
4
|
+
83;00C9
|
5
|
+
84;00D1
|
6
|
+
85;00D6
|
7
|
+
86;00DC
|
8
|
+
87;00E1
|
9
|
+
88;00E0
|
10
|
+
89;00E2
|
11
|
+
8A;00E4
|
12
|
+
8B;00E3
|
13
|
+
8C;00E5
|
14
|
+
8D;00E7
|
15
|
+
8E;00E9
|
16
|
+
8F;00E8
|
17
|
+
90;00EA
|
18
|
+
91;00EB
|
19
|
+
92;00ED
|
20
|
+
93;00EC
|
21
|
+
94;00EE
|
22
|
+
95;00EF
|
23
|
+
96;00F1
|
24
|
+
97;00F3
|
25
|
+
98;00F2
|
26
|
+
99;00F4
|
27
|
+
9A;00F6
|
28
|
+
9B;00F5
|
29
|
+
9C;00FA
|
30
|
+
9D;00F9
|
31
|
+
9E;00FB
|
32
|
+
9F;00FC
|
33
|
+
A0;2020
|
34
|
+
A1;00B0
|
35
|
+
A2;00A2
|
36
|
+
A3;00A3
|
37
|
+
A4;00A7
|
38
|
+
A5;2022
|
39
|
+
A6;00B6
|
40
|
+
A7;00DF
|
41
|
+
A8;00AE
|
42
|
+
A9;00A9
|
43
|
+
AA;2122
|
44
|
+
AB;00B4
|
45
|
+
AC;00A8
|
46
|
+
AD;2260
|
47
|
+
AE;00C6
|
48
|
+
AF;00D8
|
49
|
+
B0;221E
|
50
|
+
B1;00B1
|
51
|
+
B2;2264
|
52
|
+
B3;2265
|
53
|
+
B4;00A5
|
54
|
+
B5;00B5
|
55
|
+
B6;2202
|
56
|
+
B7;2211
|
57
|
+
B8;220F
|
58
|
+
B9;03C0
|
59
|
+
BA;222B
|
60
|
+
BB;00AA
|
61
|
+
BC;00BA
|
62
|
+
BD;03A9
|
63
|
+
BE;00E6
|
64
|
+
BF;00F8
|
65
|
+
C0;00BF
|
66
|
+
C1;00A1
|
67
|
+
C2;00AC
|
68
|
+
C3;221A
|
69
|
+
C4;0192
|
70
|
+
C5;2248
|
71
|
+
C6;2206
|
72
|
+
C7;00AB
|
73
|
+
C8;00BB
|
74
|
+
C9;2026
|
75
|
+
CA;00A0
|
76
|
+
CB;00C0
|
77
|
+
CC;00C3
|
78
|
+
CD;00D5
|
79
|
+
CE;0152
|
80
|
+
CF;0153
|
81
|
+
D0;2013
|
82
|
+
D1;2014
|
83
|
+
D2;201C
|
84
|
+
D3;201D
|
85
|
+
D4;2018
|
86
|
+
D5;2019
|
87
|
+
D6;00F7
|
88
|
+
D7;25CA
|
89
|
+
D8;00FF
|
90
|
+
D9;0178
|
91
|
+
DA;2044
|
92
|
+
DB;20AC
|
93
|
+
DC;2039
|
94
|
+
DD;203A
|
95
|
+
DE;FB01
|
96
|
+
DF;FB02
|
97
|
+
E0;2021
|
98
|
+
E1;00B7
|
99
|
+
E2;201A
|
100
|
+
E3;201E
|
101
|
+
E4;2030
|
102
|
+
E5;00C2
|
103
|
+
E6;00CA
|
104
|
+
E7;00C1
|
105
|
+
E8;00CB
|
106
|
+
E9;00C8
|
107
|
+
EA;00CD
|
108
|
+
EB;00CE
|
109
|
+
EC;00CF
|
110
|
+
ED;00CC
|
111
|
+
EE;00D3
|
112
|
+
EF;00D4
|
113
|
+
F0;F8FF
|
114
|
+
F1;00D2
|
115
|
+
F2;00DA
|
116
|
+
F3;00D8
|
117
|
+
F4;00D9
|
118
|
+
F5;0131
|
119
|
+
F6;02C6
|
120
|
+
F7;02DC
|
121
|
+
F8;00AF
|
122
|
+
F9;02D8
|
123
|
+
FA;02D9
|
124
|
+
FB;02DA
|
125
|
+
FC;00B8
|
126
|
+
FD;02DD
|
127
|
+
FE;02DB
|
128
|
+
FF;02C7
|
@@ -0,0 +1,40 @@
|
|
1
|
+
18;02D8
|
2
|
+
19;02C7
|
3
|
+
1A;02C6
|
4
|
+
1B;02D9
|
5
|
+
1C;02DD
|
6
|
+
1D;02DB
|
7
|
+
1E;02DA
|
8
|
+
1F;02DC
|
9
|
+
80;2022
|
10
|
+
81;2020
|
11
|
+
82;2021
|
12
|
+
83;2026
|
13
|
+
84;2014
|
14
|
+
85;2013
|
15
|
+
86;0192
|
16
|
+
87;2044
|
17
|
+
88;2039
|
18
|
+
89;203A
|
19
|
+
8A;2212
|
20
|
+
8B;2030
|
21
|
+
8C;201E
|
22
|
+
8D;201C
|
23
|
+
8E;201D
|
24
|
+
8F;2018
|
25
|
+
90;2019
|
26
|
+
91;201A
|
27
|
+
92;2122
|
28
|
+
93;FB01
|
29
|
+
94;FB02
|
30
|
+
95;0141
|
31
|
+
96;0152
|
32
|
+
97;0160
|
33
|
+
98;0178
|
34
|
+
99;017D
|
35
|
+
9A;0131
|
36
|
+
9B;0142
|
37
|
+
9C;0153
|
38
|
+
9D;0161
|
39
|
+
9E;017E
|
40
|
+
A0;20AC
|
@@ -0,0 +1,47 @@
|
|
1
|
+
27;2019
|
2
|
+
60;2018
|
3
|
+
A4;2044
|
4
|
+
A6;0192
|
5
|
+
A8;00A4
|
6
|
+
A9;0027
|
7
|
+
AA;201C
|
8
|
+
AC;2039
|
9
|
+
AD;203A
|
10
|
+
AE;FB01
|
11
|
+
AF;FB02
|
12
|
+
B1;2013
|
13
|
+
B2;2020
|
14
|
+
B3;2021
|
15
|
+
B4;00B7
|
16
|
+
B7;2022
|
17
|
+
B8;201A
|
18
|
+
B9;201E
|
19
|
+
BA;201D
|
20
|
+
BC;2026
|
21
|
+
BD;2030
|
22
|
+
C1;0060
|
23
|
+
C2;00B4
|
24
|
+
C3;02C6
|
25
|
+
C4;02DC
|
26
|
+
C5;00AF
|
27
|
+
C6;02D8
|
28
|
+
C7;02D9
|
29
|
+
C8;00A8
|
30
|
+
CA;02DA
|
31
|
+
CB;00B8
|
32
|
+
CD;02DD
|
33
|
+
CE;02DB
|
34
|
+
CF;02C7
|
35
|
+
D0;2014
|
36
|
+
E1;00C6
|
37
|
+
E3;00AA
|
38
|
+
E8;0141
|
39
|
+
E9;00D8
|
40
|
+
EA;0152
|
41
|
+
EB;00BA
|
42
|
+
F1;00E6
|
43
|
+
F5;0131
|
44
|
+
F8;0142
|
45
|
+
F9;00F8
|
46
|
+
FA;0153
|
47
|
+
FB;00DF
|