ruby-ripmime 0.1.0

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 (5) hide show
  1. data/README +547 -0
  2. data/ext/extconf.rb +5 -0
  3. data/ext/ripmime.c +83 -0
  4. data/ext/ripmime.h +18 -0
  5. metadata +69 -0
data/README ADDED
@@ -0,0 +1,547 @@
1
+ = ruby-ripmime
2
+
3
+ == Description
4
+
5
+ Ruby bindings for ripMIME.
6
+
7
+ ripMIME extract attachments out of a MIME encoded email packages.
8
+
9
+ == Source Code
10
+
11
+ https://bitbucket.org/winebarrel/ruby-ripmime
12
+
13
+ == Install
14
+
15
+ gem install ruby-ripmime
16
+
17
+ == Example
18
+
19
+ require 'rubygems'
20
+ require 'ripmime'
21
+
22
+ require 'tempfile'
23
+ require 'tmpdir'
24
+
25
+ begin
26
+ mailpack = Tempfile.new('mailpack')
27
+ mailpack << DATA.read
28
+ mailpack.flush
29
+
30
+ Dir.mktmpdir do |outputdir|
31
+ Ripmime.decode(mailpack.path, outputdir)
32
+
33
+ Dir.glob("#{outputdir}/*").each do |file|
34
+ size = File.stat(file).size
35
+ puts "#{size}\t#{file}"
36
+ end
37
+ # (output)
38
+ # 28 /tmp/d20121223-23507-zhwjuj/textfile1
39
+ # 9941 /tmp/d20121223-23507-zhwjuj/220px-Shiitake_Meshi_Ekiben.JPG
40
+ # 0 /tmp/d20121223-23507-zhwjuj/textfile0
41
+ # 16361 /tmp/d20121223-23507-zhwjuj/234px-Shiitakegrowing.jpg
42
+ end
43
+ ensure
44
+ mailpack.close
45
+ end
46
+
47
+ __END__
48
+ Received: from unknown ([127.0.0.1] helo=[127.0.0.1]) via TCP with ESMTP
49
+ id mel99a83b1a80f5de2674282c2e26d3334a44dba442b70c;
50
+ Sun, 23 Dec 2012 11:07:07 +0900
51
+ Date: Sun, 23 Dec 2012 11:07:07 +0900
52
+ From: SUGAWARA Genki <sgwr_dys@yahoo.co.jp>
53
+ To: sgwr_dts@yahoo.co.jp
54
+ Subject: I like shiitake mushroom.
55
+ Message-Id: <20121223110706.74E0.7E26811B@yahoo.co.jp>
56
+ MIME-Version: 1.0
57
+ Content-Type: multipart/mixed; boundary="------_50D666A10000000074DE_MULTIPART_MIXED_"
58
+ Content-Transfer-Encoding: 7bit
59
+ X-Mailer: Becky! ver. 2.58 [ja]
60
+
61
+ --------_50D666A10000000074DE_MULTIPART_MIXED_
62
+ Content-Type: text/plain; charset="US-ASCII"
63
+ Content-Transfer-Encoding: 7bit
64
+
65
+ I like shiitake mushroom.
66
+
67
+ --------_50D666A10000000074DE_MULTIPART_MIXED_
68
+ Content-Type: image/jpeg;
69
+ name="234px-Shiitakegrowing.jpg"
70
+ Content-Disposition: attachment;
71
+ filename="234px-Shiitakegrowing.jpg"
72
+ Content-Transfer-Encoding: base64
73
+
74
+ /9j/4AAQSkZJRgABAQEASABIAAD//gBJRmlsZSBzb3VyY2U6IGh0dHA6Ly9jb21tb25zLndpa2lt
75
+ ZWRpYS5vcmcvd2lraS9GaWxlOlNoaWl0YWtlZ3Jvd2luZy5qcGf/2wBDAAYEBQYFBAYGBQYHBwYI
76
+ ChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcH
77
+ BwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo
78
+ KCgoKCj/wAARCAE4AOoDASIAAhEBAxEB/8QAHAAAAQQDAQAAAAAAAAAAAAAABQEDBAYAAgcI/8QA
79
+ OhAAAgEDAgUDAgQFAwUAAwEAAQIDAAQREiEFEzFBUSJhcQaBFDKRoQdCscHwFSNSM2LR4fEkU3KC
80
+ /8QAGQEAAwEBAQAAAAAAAAAAAAAAAQIDAAQF/8QAIxEAAgICAgMBAQEBAQAAAAAAAAECEQMhEjET
81
+ QVEiYTJxof/aAAwDAQACEQMRAD8A8u0/ZwNPMqhcjPx9qZqxWFsI7ddSsoGGJHXfv8UsnQ8VbMso
82
+ dMiqsByRlMDH3PtUq2sWnifmuqKOzNjPvipKxoZp+YWDEHlsv5QBUooiRRMj5kVcE+Kiy6RBktZX
83
+ VRLIqxJ+U+fetmszzI5wwlZ87OMH52okkcbRIAQQBufenpEQDBbAG2P7VhqAzcOuorgF4o5i2dj6
84
+ vvtUEW8POkF1E2nOPR1U1Zp15TcxGZWUYzmobIlszSDS5YZZXHX4PmsCisfhYWjkWWNtTDEU2cDI
85
+ 8ihUsLRD1Y64x3q4zRQtbakOpi2TbkbY96FTWHMj0NswJ0A9/g08ZUTlGyv1lbyRtGxVxgg4rSqE
86
+ TKysrKxhRW4putlrBNqSsNIaxhaSspKxhaSszSVgC1hNJWVjC5rM0lZWMLmkrKwVjGVmKykrBHos
87
+ c1M9NQz+tXKRWiQ6SzD8pGMhTjpVL6VbonWVRLHKWiYAtg9/ikkPAko2gJqJG2pc9fcfBrDkKzW6
88
+ qQRjRnJqRa20UzZzkf8AEmjyRRWXKhWNDK5AGfekKWVtIpzEukMpIGobk5rfVPHql5Ta/BHcVdRb
89
+ OkvLmkHT+VRtT4sVY/8AV/VQaDdDLZQJr1ywR0ZT1yRnTWNcxyL6idxhfTV4ueFxkeqKGUdOmDQW
90
+ +4HGfTbhh3KnbB9qyaD0V6Z2RVZF0kAqfcGmHaIcOeFz6oyWRh1zUm9tZ7bOvIx5HSoobUGDlRqb
91
+ ct3oitgbjVpy0SQkmQjLZ75oPVruYfxEE41F4lVigPn/AOVXbCznvpljt0JyQGfHpT3J7VSL0Rkt
92
+ kepfDeHz8RleO2XLrG0gH/LHYe9Wqx+nrS34aTdQi5uJ1GHMmkRDOdSgbk4wN6P2kbrw2SG0BS3i
93
+ QBMgaz5OO+++PeleRLoaOJvsoFhwK9uXczwyW0EX/UkkXGn2we9PXdhZwzEIl2FX8wklTJPyoP6C
94
+ rtBJHDDK0kZHN/OruSG+Rn9fmh/4aCS8VwqJpYAerZceSdtqTylPCVrjPB3tbyUpEIoObiJS/qYb
95
+ HIU749+lSP8AThxOCa55dnZgE5C6tRx1IXoNjuB46VdIpWguEmQ2ysoZQ6tqkCk9QSNwd6WO6jha
96
+ 4uVXROdT5cehzkbYPc+aHlD4Sj/6LbW8ELT3CyyM/rEMq+lMddLAHPX9KF8RtbeO5l/BTmS2yeWZ
97
+ Nnx/3ds/FXa6tbniV+J5Z4ohINIMh1beBtsPFbrwy3trv8TaCLiCDAaJxhhjckbYI2plk+ivF8Kf
98
+ JwqBltRbcQg5soAdJtSaCRnOcYxQ+SzuE5mYW0x7uy7gDznxVwvLc3k0lw1nDJbg5C4b0L2G36fa
99
+ nDw/hk9/GRGtuCvrEYMaEY7LnJIPfvtTKf0RwKJWUcvODXMMxtA0bxaiYZm6MD326Hbp1obdWM1v
100
+ M0baWIOMr0/enTEcWRaStnVkcqwww6jNa0RTKysrKxjKysrKxhyjHBrtBELZ9m1Eqe2O4+aD1gOC
101
+ CDg9qDCnRfuDXISTljcDz3oxcXITiVhK6rytRBz2Paudx8WmQq22odcDrRaz48syvHMVAbHXtSNM
102
+ paZ0W9mb8aCBsVzTqTMOuaH2INzHHMQyoyDTmprqAm2dvaoZHs6sS0a3N6yj2qPY3T3t3yEIAHqL
103
+ GofEshD4O1NfRt0oa8nkU6Q2Ac7bUYL2JlfoK8bswEAm31dD5qncQteSGUqCh3BHarLf8UN0zYHo
104
+ 7bUMn5bqy3UBkkb8iq2Mf/0ap0SWwbw7h73OgTMUhAGNvzA9gPjrU6W3SYSx28el1Gpmj29I2AP+
105
+ ZqRauxhV3kSBQW0sRnfoFA/vTkCYRERCVLHmSMd3PX9qnKZaGM0NnI0UU4WOOKJQD6jkjsakNDNG
106
+ V9CwQIuQ+c6+/wA+KelmuOWAQVG5zjq2D/XFEDYPOrSPIG1KpKkZyak5WXUKBYWPnyZg1esYfTn8
107
+ y46fOa3Th44g7tLEoMXZPTnHnt0AopaBouYY4xjUEG2CcDfrWR8OknuLpCCVHqHksQMH7f0ocg8S
108
+ ClhEqtcRa1VsAGQeo47Y7ddvion4G3uZtcLOzrlERpAWPvggeM7dqMS2c6Mlvrdm1E9euc7/ALna
109
+ oiWC21/qVS3NyI8jp6t/g4rKYeAOMIgTJ3IwzqV3xg7DI3O9QIp42VixaElMKynA8DA8UakhIuZJ
110
+ HOGV1AEm+FxjNaXlpCIJmC+rCuqgAEKew/faspAcQFKt5KsRfmohG2V9OO/sKj3r6zi8eSRVyqsx
111
+ z8Fe47UZMTm3jkXmMJDj1NkH3A7fvQyeKNwEVNGknURg5bqKrFojKILkndUZNYZV3B1dx4qDOsVz
112
+ IXnkfWfzY3zRW8JjlVnjCkKc4/rUC4MkrKJHyoJw/t71RMjKIPmsIRKQryBOznG9Q7u3MEnp1GM9
113
+ GNE5kYaUOG077Co1xqkUZYEA9qomyTiDaypbxqYwMKGqM0bqcMpGKdMRqjWsrYL5pdvFYAUu+FXl
114
+ hJh4y+D1CnDD5pq6ljaNkhjSNHIbDA51Y8+Kvv1DxNuJ2vKXAw4Mcka6SMj9MVSeIxFrsrkknoCO
115
+ 3zXPjm5f6OvJjUF+QUcg4I3PT3p2C3knyYo2cKRq09RTjoGQ6gFKnOc0Q4bxm8sEVYkiKj8jPGMr
116
+ 8HrVm3Wjniley1xfVbWUMKyWzBguPUuMbdqm8P8Aq63vJSlyBGx6H3qmXf1DPfxiO/toZ2BLFiNB
117
+ +xFDZGiDOYmfAOQHGDio8L7LqaXTOk8ZnRbSSWNo20qWBB281V/p65kurR1RdIMn+4R0BPQ0Hs7i
118
+ a4P4NZdKzbEschR3NWTh1mEi5FrpGCCVQE/c+SaZLihW3Nks3MsUTiGKR3yQrg9wMEj7dampbx6Y
119
+ 5ZiWaQKSBtj2yPmplvZgXGuWMIHPqjx27D7nFHLPha3s+GHLfIWNIxqwRj+m1RlItCNAyHhxmQYX
120
+ Cg4wFznHg0ct+EwcqMSluWcsoUYLe9WG24GoVC5AlUkMozpGO3/mjttw+G3sARo5zuAwwMEZwM/G
121
+ RU+y10UuCwSQkSq6wHB06cn4ANPvbSRXlukUDPAAQOxU9h71aJIxbsdIVx0bAwOmKy2RDGgJ5gQ5
122
+ KjZwPPgj3pasPKgGLe/5JlS1IdPUxJGd8nIHkCpslpcxcLWJYgHkwA3/ABJxv/5q12JghsDc6QZd
123
+ ZXBGrcnY/wBKadhKw14y2cnyazVGUrKfc8HmnYMkDzaApAwQzN3I9qg3loTe65YZBNH+QkhRpI8d
124
+ j2zXSOHTaC7HD6RrYg74FO67QpI7xGRmIRT5HXHxvWUV2bm0zkt1wpCJrjSkajGmMH856kUGuuHG
125
+ 64oyyNJ+HRdYwMaiRgKPvmuv3PDbO5dTHCkRz+YKPSaE3/0vfw25NpyzJ3Mh0gD570KG5Lo5Nfws
126
+ z20aFuUuU1YwFXtv570JubbRIHK+l2KsTtjPQnFdPu+EXEsIVrRI0jb8x3D46kVW7+0t5i8sgMET
127
+ rpAbKknyQfk0ydAkrKJNGyqFcEAHB1771AmtxH6NQfO+TVm4jZq1xCbc6wVGQozqPn9KEzWx0OHw
128
+ JEYbe/jNWjIjKIDnBSQnSwz28VDI0HIBAP7UXnUq6hgSQdPxUdkPMXA156A9/aqpkJRBLepjq336
129
+ +a0bJXyo61L0YLALgH9qjshC5HfYinTJNEZlK+9JTzLkHO3emcGmEao7EvB43eaKFlmOA2EU5UYH
130
+ fp0Oc+1UTj1uIygiKtoLLqG2agN9ScQa1a3FxKkZbUQrkZ+cdajvxBniwQ+ScsxGc+a5oYpRdnZP
131
+ Mpqh6Jo5Ik1IBJqIPfNFJuD2EPCZZ341Eb0kaLOCJnyO5Z9gKBqYZskEb9gcYpbcGOTTkjUNvc1d
132
+ r4QTvsbdDqAXYg5Ge1Nf7kcykA6gfGQaISR5Ugjc1oy6goYkMAASO/vW5A4h36P4et7BcT40ys/L
133
+ VfYbscVfeHcGed4HaLlA55bOd2xv9h470G+krmGxsbdpJI/98FTrAAAJGDn9at/EuPmJGkhikEUS
134
+ dI0yFGRj53xUZybZaCSQfsOA29s8KzMkskrZbso9qm8Oe3jJVmVAyaVEewT2/cj965nF9V3vFbm4
135
+ j4cnqQM5MjYweuM46ntUW2v72VRC99HDdncxSLhQD/3EjJxU6kUtezqh4tbImObjBO5+abn4/Zoj
136
+ IZxvv12znauY8Z4DfDnGDjUMuGUIVJ0kkZ6gH3HXt3oHZcC4jxJZIZLwLd69C8xjGiHHUnGSfAwM
137
+ +aCx/wBC5nYrv6ksRBq5ysGbyNqFv9acHt+IRpNepGG6sdwO29UG74Bwef6fZY7zjVvxpGyjXLJy
138
+ HxsQFGDg+Rk0Av8A6Rlt+E/jYZXcK4ikkdf9lmOejdR2GCPv0p1jX0m5y9I77Z/U/Cbn0WfErWTX
139
+ 1CyqdxjtU6y4xaTF+VdRPp2IV1b5rzFJ9P8AE4XtgbZGM4UoY5VYDJ21MDhfv0raQ33CVt2ulEP4
140
+ hOZHl1JKg43wdvvReJA8rR6lXi0AikjhkUs+EJzvuQcfoKcN4krRBXwQvpztq33OK8xWn1DdxFGW
141
+ VsLvV34N9banhEzBVIKMT4x0pHjoZZGdyUBjklSGwR7eancXvOYYYoZDp1E5G2AOg/c1z3gPHbS7
142
+ iQfiGSV105BBwu+evTpVus7CScCWzu1mIXA5qbdOu3xSqGqQznu2aysRh5FOCcDDZ396G8etLWa0
143
+ iWSMSxy7Mh7dcg43xRsWXEo0CvarN5kTBB2PY70D4jKI4kW6jlt3B1x8xcZz58d9u21Dg0PzTKvN
144
+ wDh8at+Gi/DK3XlHAIoJxf6WcAMt3CV0kEOMknsMjrtir2VidXYkOMZGTQu4suZKVC50KCWHTesm
145
+ 0FtM5Fxnh81mCLuPC7YkTcE/NBeQxUtFpOOgzvXV7vhbgM2kkMCcnfYUE4lwy2MDrPagzHBRwun5
146
+ zj9Kopk5ROc3MeMkHcH8tQ5I/Rq2BFWi84Wwl0x52GQjnB/XvQe6tJIZyk6GNjuoboR7VZMjJAh1
147
+ z1GAfFNaFPVt/ipUqEtuRnf7U3mHurE06ZJox7eMoGi9Z6+CBjfasW2kcSvaa+UihmyR0JxnFOyH
148
+ nlXYaJcZyB+amVMkREmFxkjUPO3Wia0uyHJqVyCNJ/7a3W5ljZTryFORtUiVDJAzKqkZyWA/pVg+
149
+ n/pGSaB7vjbNY2mFMaOMSTZI3UY/LjO/xRdJbFVt6Gfp+3k4/wAUhtLcpE8hCmRzhI17sx7ADNWL
150
+ in0bY23GBBBx57q1WNmadLMxDbwGc/G+KIcK4nwy2tQtrbpaqHMY5YzJoGwZm6n+tbPcILoCzeSb
151
+ GDCGOdUh/nJIzkDud6i5pdHSoOS2JyeEGG3tEs+QtuDK91dZDKf+49N9sD9q1uuKSl+VYSXrzS6c
152
+ PL+ZAOpAxnHcdKjSWccV0SIvxBRgQsrahJJ3yO6/5mpdws7XMzKDJcPjU0jNnJ8L57UjnfZRYQQl
153
+ 00skguJplmjmBTMQCjqCCo69u/mnhPAUntbmO3ljM3NMyQ4BJGCQp6bf0pRZSRx5mUxycwh2/sKn
154
+ ixhm4W7tb6pYGVizuRrBPTzgdaXmVWHQGsk4dG0wmjlmkO0au+kHf42pLuKPmGe3VkaFQMxyZGfk
155
+ nP2o47wpFDyo0E4Gt3xnftjOd62hsLm7lc24jjWBWfWBp2xuB80PIHwlbmubm/xHxO49aECMMnpw
156
+ NvUAM+2evzU2WU2ava8Naae1YajHCQFO2/oYEkA5PwO1PG1imhJVn1Ick9NSkfvvTfD4JoZla3Uk
157
+ x5K4GHx3Io8hXiI/05xK8t3e0ilhhhnGeXNHmNvkAZHz7USEN0zGK64VbpfopCuVTTIrA+SBkjow
158
+ 656UPuLVI7vVGrKm2dQAx74ra95IuUTmfidA2cjYZ/lyegzjHg5o8lehXj0C5vp1pLc3VkwtoxnX
159
+ BcMQyacA4zgkZI89aZuuAcW4fYQXt5bPFbTk8tiw3wcdO3n43o213I9vLbTXUweNy8UcxH+0/wDM
160
+ MnqCM7bVNW5ku5pLDkwcu4QJypNhzCBuhyNO4Bx067U/L6RcK6AXB7+S0fUrsMbda659B/XcKtBa
161
+ TynXnffrXJuO8PFvcCPhcQCxKUm1XPMDSL+ZlJA29qr9hfXS3Ctbjeg4XtBUktM9hpxZ3WN45AYz
162
+ sMb5oNxW9e5nMELcyVvzYPpX5riFh9dX0KLayuNIwGcDJrrP0jxqyvLVDGI2bG+Op+a0Yb2CWRJf
163
+ kK2/C4+ViUrIwG7aMUxLwggEQ3LBT2648bGjHMt3P/GtHg2DRSVVpEVJlburG9CMMRzbY9WVJ80H
164
+ 4hEUSV57WSIkAKSM/uKukpkT84+/UGtI5IpVKnG+xVqRwiOskjmF/wAMhZTLp1RocLvvluoqncWs
165
+ C0Yy5DqMgMdjv0B7Gu4cT+n7a+DOmIZ8bOvT7jpXPeKcOky63AA5bEMOppVGuhuXLRyu+t+WXwdt
166
+ II+/aonp/wCAqz8Xsl5Uxycx+pQdjjPSqqVQkkkZNVjsnLQ/Hc24Lc0q7hvzYOJFI6HwaYkAijOi
167
+ QklSft43609bNbukmI1VlAOH3HzRb6csYbu5QXKJy4jpIwW3JJ3+AM/GKdtIRRbYS4dwJOF2qXF5
168
+ cLPPIFltoIlxgsAQWz0xnp0ozbyC6mkmaGYzNlQZCSEOBuc9c4PtjHmlLtJNcalOSEjDdwp3J+4o
169
+ rcQJcPHKsb6GYj1bZGP79f0rmnNs7cWJIGNbJIViEIi1kNqkJxjH5mx36n9KkRQ23JGtXyuWQJgK
170
+ e25oxBYysysyADbIyMnG37/2osOEwqISsWCEGU/N6vG3SoOR0qCK1b2EsM6NqAkII0r6tu3T2/Sp
171
+ vDuCyNOZ5XyAPT4Zv8zVrtOCSMUkdMuzEFsb/Ax9v0oqeHqgAjbO5Gnx+nYULG0Uq54KESLU5bBI
172
+ 0Yz/AIaVfp95nBkj0grlcbY9jV+suD65VZgvp31N37ZA6VItrCM3B5jMGY40jt7n9qUbkkc1HABN
173
+ AxwRIi7qBnv5HU9ayHgk7qVt1fOlgzqDttvV+ms7e24hyp4ZVtyAVJTIP39jUuFbeFDchJliQ8tC
174
+ Ijlt/wClZGctHLrzhMkcccCKE1LqOQBrI3wfFR5bILa6Lm2ZbtgNLEYK57H2rpLcPled5zEzQKcI
175
+ zDIweoHjrWlxwWCRYGgIlz+Yht0YD8p9sb5P9qIvJHKrjh/KYa8asflIyM9qa4/w21tUgeORTLJj
176
+ nhWDMhJ/lHwOh71f7zgglv5DyjyBvqHY42x5xVR4nweQI0sQc/7hVNQ7Dq2/vWjKmGUVIqV1bXH4
177
+ zmyEtMckCVd+v83nIrVGW3AaSNWjmG643Vgds+3j5NWy6hEtsizKJDCP9tsnqR7dR02oHaQRQyGK
178
+ 9UjJw5A30kY2z16g1ZTsg8dEC3kmOqCZRNEX1KkmBqP/ABOfI7/1oRc20FtzZuHnVA7lVi3Lxr2B
179
+ opMZYYZkkOrByrOPzDdf/BptlCzYt5sSzK2QAQ6MANvG+TVUzmnECRjUBij/ANNcVl4fcqQzqh/a
180
+ qq+u2mwG1LjIPkUTsrpGwr4we9O0RR6H+nuIx8QtVYMHfHTvRcxuu66l+DXF/oniL2XF44lkwkpx
181
+ jNdvtYLiSASAiQEZx3oJmaI4uHTZxkeRUecxswZDpNT5AHU+nDDrQufHqBGD0rWYcj4kIo5BIcFA
182
+ Tv4qm399HezTSuMBjlR2qVx+5KWzA/nf01Wm1RxEDfpt2zU5P0isI6sB/VRg5dzNzApVPSW6MemD
183
+ iubFcnfc1fuLywTxTQNGLnVMBIMlTFjozY305zv7VSJSglcJGSuTj4roxrRz5HbJixIJBlk/4hWF
184
+ XP6btT/pMUbZWOeRrnIXPq/KP2qqHGcqDtuQa6h9I8PQ8HsLe6jKPLFrC53JDZGcbVKbfE6MaXIl
185
+ WXDI7i0uXTHP1kEgecDHtgVYbDhjK0Mc866YF31HckDbc+elTuE8IggVUuJAZA6ycsnAMZ3698Dv
186
+ RwRQRyLphRFDsU1ZYyEY9vFQabOjkkB7Hgc0kLScqRlwOXp7++9E7fh4t4lTq2k5fGr9T5o2sct1
187
+ AsdvFMhyDI6scacds9D96kW3B7sRhZWjj74Ulv8ANqyxP0B5/o1wrhEVvbRvOZJsHYKdKjPkd6mQ
188
+ x29mJIkhRWY63YnJ8f8Aqn7fhsqxPE163KZgTGq7bVM/0W0/EGaQySFzk5b2xtT+Jknm32DYXgif
189
+ IHffp4pw3NuJopHhjLDoSv8A4qa/CbSMl+VqxsWJO47VuljaqzK0C4xjOTmhwoPlTIshtby4hdyy
190
+ cvsoBVj4INSIiI49EfrUH8zLtt5HnenLfhlnKp1RYH/axBzk/wDqpQ4RGyCKCaSOMMG9WGzt/eio
191
+ WB5K0QUYWSNE0MbqzfmX8uT7eaZg4THJbgcjUc5wCdJ39qmT8NlV9cMqtGWDBcaSRW9811bug/Dn
192
+ Qg9JB9C++B1PzQ4fQrJ8K1xX6eZLgLAjwrguzB8qvgYPf4qm3/CL5JZebA0itkJlDldX5mwP6e9d
193
+ Cnmmk/67SKp6E7Ail1LjGkgMep71JwSLxyP2ctm4MuNkSNEGNLLsM7bj/N6qP1XwYrdLdRLi3mAf
194
+ AGyEABlz8/1ruL2UN20kcowGBXUBviqvxX6RlubUJE+kqzFMdHJ6ZX+/tQVodyRx244WJ7STlaRN
195
+ CeeCTswCnVj9jj5qszh9UzMvMkJ1Mf8A5XS+L8Hn4Za3J4jCUBysci7oGHTHyQKq89nHDapcmMa8
196
+ NGyMNmDZ3Pjb+1UjL6JNJ7RSuKrzuZNLkS68kdsNjGKgx5U4xRq/gKSSwuwU6ss2fTgrnBA8HH70
197
+ JQZFdKejhkqYQ4bdyRXtqQTlZFx+ter/AKekJ4fGh3YAHNeT+FW5lu4iQQisCT966/J/Euy4FFBD
198
+ K2XYD0oC5A8mpyT9BX9Os8QtBpLrjUaqPEZFtmleYgKPPmgnD/4rcFvMiS6VD2Dgof3oF9U/VNne
199
+ wyM11D+HcfmVh+1CKYXX0141fiWVdMi6WHnI60Ga6QzRQyTaFckBjsQOpNVbiH1AiM62ZaUldnbo
200
+ Pt3NAjd3DztOZWMrdWOKpHE3tiyypKkaXbvJeTvIWDl2BB279KZp+4uJbiYyztzJD1YgZNM10nOy
201
+ azTZJKqN9xnOPiuzfwpltZ/pW3RIdM9vK6TlW3x1Vv0P7VxuaTXFHLr/AOp207/FXH+GXH04fxGa
202
+ xvykNvdEOlwxA5bqD6WzsQc/rXO1ao6k0pHb4WSaGOVwwIQFcHYf5/eo/BriXiX1AlrdEx28MhZY
203
+ ++cDqe/SlsZIXA0AqMZDZOk58CtbyE2l/FfwKQFIDge1c7dbL1Z1KJUCBQABjOPFbMgYZLN80P4Z
204
+ exz2qSRsDqANTDqY7nbrVrOajViuTgjNKLhovzepR2pRD6tWced9vinOSGIXffrjsKPI3EjycUje
205
+ QQqpydjnatS8xCqoBBHUGo/FbLlxtKu4Qjr2+K1gn9JwcMP3qUpFIxslJcvHhWUhsZwfj/5U9bgF
206
+ NCuF7Hb9aHTyBkK6t2A38VBeVlUctypG/wC1aM0guFlma4RcAepqVZCxyT1qrwcTlR4zIqurn1di
207
+ P/VFLDiCXcRkhBCZI39qqpJk3FoNFY2UrIisvhxmhV3wdJDqtZShxjSwyD8eKlozEZzkU9zsAbYo
208
+ tJ9gTa6KxNazW0wSRSCe/Yn571veMEs1lYqS407jOke9H53SRdEwDRnqpoNxW0maKJoRogjJYgAl
209
+ iegP23/WpOFdFVO+yn/UUKcUjKXWqW3jxhcYYHpqGK5x9U8NaBPXvCq6FdVz6iT1/auqXFuWGIdu
210
+ 4Hj2oR9U20QtjAFLyL6nXxjfHzn+9Qp3Z0KVKjgX1PG8MsZkUFxG0bEDdiqDc/rj7VRRdvgY71fv
211
+ qm9jieee7Q+gfh4owcEkKQcfBOc1zkbADxXbjVo4szqRPXit0iaYX5Y8jrUIsScsSSe5rUUtUSoj
212
+ 2bg1sp+KbFKKwB8NkAeK2VvvTKk5pwZHWmTAODelpsGnMiiYdC4AQMoUnILHOk/NSnSYKrAqWxuh
213
+ GQaWJfxDKixxFGGCRvUpLOQKecxSNRnUdsfFc0pUdkYWXH+H31W3DLY2PFZcrG2Y5HPRc9N/Fdg4
214
+ bxC2u4daSpKG2YBsn715jv1mNnBc20izQuNMuk+tHzuCOuCNwR1qXwL6l4pwKPPD5IQuclJVL6h2
215
+ Gew+KHDkrM8nF0eqOEq9oGa1kTlsf+k5/oasUF5MPzwn/wDywNcC4N/Ea+urY3EXCjdQxthxaPqk
216
+ hU/8kIz5xgmjSfxZ4XHcJDcvcW6sNQeSPbGfbPv1qPGS0h24vbO2xX6awJNSn/uGKnxTqyZUg58V
217
+ zHhf1jBfLm3nilBH8jhsDycUdtOM27aMNy2HdTihya7N40+i5MQyFGAKnqCM7VTJZWtbyW1Zt4mw
218
+ D7dRRm24kGHplSQe+xqu8fcjjLS4wJkG23Uf1pZu0NijUqYUNzqjGF9SgHr1puVjpbTnO3Sh0M5E
219
+ ZR99I3I/apyzGRXC76j6Tj+tJF2VkqBPG778JZSSg4KRMfg4qL/DK/nu7CdGkIMThk+D1/epP1HB
220
+ E3C7pjkkoUcBc52/90M/hwEtLe6L5BwvXrsarF1IlJfk6TFcv/MB9qf5ueoIOKpfE/qSK2k9LD7G
221
+ q/c/WF7KdFvG774UqCc1R5UiSxNnVBIgxlsHyTTFzcFlZYZGUnI1bbbVyG64xxyUhGhlVm3UKPUD
222
+ 8fcVFX6m4xw+Fo3WVriOQllLAD4Jx0+4pfMh1gZ1C6mWzjWRpWYqAQ22WOM7/pVK+o7pIzcSRqk8
223
+ 7jnzy6tKoTuFDHYHzVWu/rnjk00RubO3MUa4ZLeMuWbGVAy5HjrjOKrFze8Q4hNPBptrzh+Ay23E
224
+ MxiJxhs6UwWPatpjKLXZzr6t4k3EeMTME0RRsVUb7+9BKv31PbKshmjjiDMNWbcYiwNjgaR12Ofk
225
+ HeqlcWismtMIckbDaumMlVHLODuwdS1jKVYhhgispyRlKKSsrGNgcVurkLp7ZzTdKKwB0Gts00DW
226
+ 2aNmD1vGSDAkIMi5KsD75qdIwm4RKspzPHLpIYAEjrue9TeNHh7TCThllJawBtPrnZye5zk4x4oD
227
+ LKxuH9KyZONatjftXJH97PQm1jVMjIpEj6401Ab7dvFau6wsA4LxnfV3Uf3px5FDetCrj0kr480z
228
+ MNZCo5ZMZB9qunfZyNVtBfg3FuKcGZ24TfPatICGKAZYe/n2odKSRuGkOou7ec961tlbAVZljdOg
229
+ cHDfftWiSso5gTbockDB7ihSsNut9GkTPbzcy0keB/8AlExU/tRqw+qeOWd3KlvxKdo2zp54Dn9+
230
+ hoNNIgIljww/MQBnb3pxzG2l4sMfzDI6HxWYUqLzYfxN4xYuiXcMMykYyhKN/Uirv9LfXtv9UXAt
231
+ p45Le/hUvGhYESeQvc461wcB2Osktp6g1O4VePw7jFjxBIzI1vMsgCtp1AdVz70kscWqHjlknZ6f
232
+ spHm5TgruCjZOzf+6L20pCJ6tWFO2dziq3wy4i4haQXdqA1rOokjdSCBnff3HSi1xNFaWcksrKoX
233
+ 1Bh2/wA8VxJOLo7pNSVjXFzz5pPW2GXTkDp5z/7oPa272lusV3JK8jb64YyAF+TQ3iH1HBNKEL7K
234
+ dRAh9X/9EnYDFMjihlRY4HWW3b1GOST0qeupic5/r7U5OmWi0/CEcy3dpJHH5CFR8ADGMggj4rUX
235
+ NpPC8bSpC6n1QyzCNZP+70Dxt0waq17xaVCcOitJs0UcZJAOwbrgexOc1Eu+JyXamJIbV4MnJhjM
236
+ cjfLHYk9d9q1o3Bl0hvtEjpcpFEi7K8bFVG3RiFz0zv0p9LmNbXayWa3UFoliTUd+qjoHHf71RrO
237
+ /aaY2d7+PaV8MUt5QVl7ahlfSBjoDjeo/GAukCyN9bXgOlIyxLBFG5bDenBPjFY3Fh/i01jxF5Vj
238
+ 4XcQXUZDS4jjAKg5HqOAfbuDVWa14gZJuffWTrO5AXigKcn1bEEbM2nrg9u9MWnFIbVhaM8tg+RI
239
+ bq4b8UHG+MjTsDnbGalniH+p3rWiOZl0Np5AWKPV1Vz3VvJwQM77UYgkmQLqw4bxwz2S28h4nC4Q
240
+ CwnXlcrJ9aaiduhxVPueD8RsuZBfcMllijOp5kjLugA/M2nOABnIGOnXar4Yruzc3l3/AKZfRXII
241
+ eMXKw8tsjBVk9WcYOf02orwn6hv5b+S2t7XmXKNrEM87JOY/5VyQQ43PX3qkZNE5Rs49f8PeC2aa
242
+ 3toLq2ubc6JlXmcoE5JA6qQBjJ6dc1WpEaNirrgg4811+44ZCPqGWazt7nh1uJ2Kxs/K5LY9RXA9
243
+ CkjuSDnYUH+rvoKcI3EeGXFtNBv+IV7hA0L9gOmoEYPSrxn6Oacb2c2rKfubaW3k0TRujZwNSkZ/
244
+ WmaqSMpaSlrGFFLmkFLWAWnnc2Lk+t5GJOQR0x1NQpAIlKupJAyACD1zSxXQiCq7hEJwc9D8mtbp
245
+ 1LMEaNdOc6VIqMVTo6py5KxuQjlhdOcjbzvW7RMYVZAxJGwU9a1jkMRAJ0ggYJXYfesklCFFiOgI
246
+ 2rOcEkk7Cmbd6ESVbH73hl7Z2sU9zEYo5iVXmdf07A1J4Glr+KiLYNySdYnxozjbB7E+femOI8T4
247
+ hPFHFxD0zRHUGYHVg+QdiOnaoJeRi0hkU6jvnpj7UlSkqkOnGErj/wCi8VdI7++METrC7YAKj0t3
248
+ G21MxMOWCulsDG2+KyK8lFxKgbMXaMn0n3xWcxWeT0JGS2Qq9MdqaKaVCyaezTmspYNjH7VN4XBP
249
+ xKU2tqiFt3x12748/FQJUyQwH5hvil4fOYbgyCSSJwPSVTUWPj2oyWtCxdS2ejf4Us0fBlspGik5
250
+ J6pDy1QE/lx385Pmm/4hXrRX8djEdMSrzpV66tuuPbI+9V/+CH1NxbjvF7qy4m4lgt7cFHEYXS2r
251
+ Ybdcjz4qR/Elpovq+5L/APSkgVo/TtjSMj9jXLKLT/XZ2Y2n/noGm459zll1wBV0q/cbEZz74J9z
252
+ U6Mzz6Vhgjt+edQVF/kGemd8bde/Sg1uW5YcnEjuGYnrnH6Y6mrDGebcSssjamX1Fm8D/wBVGTOq
253
+ MRmK1eOOY3dwVBIZkkdhlc7KVG4+KHmWW6jKLIpVWJCBcaN/HbPvmi3LSRGCqNTjaR9yfJ+a3aPl
254
+ xpaQAcx+o0gb/PX7UtjpAaK3eFZCS6RtjUikhmXfSAfmsmWRTGJg0UCSYZVHrA87/wCeaPi1DQOz
255
+ ctWjAVAQM6jtkfG5FDxA0iyCQAxA6VHfOOvxtvS8huILvZWvI44oLUKqnSMjLthfjA2x0xTIc2rf
256
+ irS4WKeIgRKyamZO4bbAwf6mi0y3IRURwsYBc6T0OMZz2O2P0qJbWUl/LDDGpd5N1GrqScZJ7ed6
257
+ pyJ8EDXW3Mwe7uQ0IOqJo4wzAk4IC4GMeDtjHmkvL1r685t1bZgjfl7R6XCkbKQMZ6dCfip78KUz
258
+ Swo8fN3Zc5xpHU5I/NtTU0vPjWO7YpEVKO0agkgkerHTIx89fNMpiSx30SDzre6Th0N8Z7SaMywT
259
+ xy5kjY5BjIPbbBAG/et+G8V5Rd4445lijAmgcMGIx53OR5x3xmg12whivrVCZ4y2uGZkxjB3I7jr
260
+ WhaLlRND/wDjzx/mkBwY2zlWDAZxqBz7GrKRzSxljjs+FccLPxuwWexZAqzWxxMFAwJD3GM4JGR5
261
+ Fcl499P3fDJ7orE8lpDIV5qAsoXqCWx0wRvtXSbTiStcC4mvZLO5ilG64D8wA9CPzavPQ9D2qbYN
262
+ dKLqeG4jE87NpiyCs6kkkauuSC2AR2watCRzTgcPxS4qx/Uf0zccOM11bqs3Dx6w8bqdClsAMB3B
263
+ ONqryrvg1Yg9GopcU4I/Tvs2a25Z9v1rADE6uwPNw2fSysuaiq8ZnOvUExh98/GKJ3KOJWAILZy2
264
+ wB/91C2bXEgUMAWySQfNSi7R0TjTGFXITAbH/MdjT0cbQyFozknq3tWpheZVbJy5ySNu/mnJYIIp
265
+ NcOpio3Leo++Ae1NyE4sTiFxLdKgnkZkhwozjI84/WoMAWK40OmU2kAI2xnepMiBQsakFeu9M3IJ
266
+ RdMWZdfpfG+ApyK2lpG3J2xFcTiWcIE1NgBRsAK1WPLZC4PgCktwOREyA6ttvNOtH/uuRnA679aH
267
+ Whu9iINTFVwOuAG6+1PXcTLwu3kYwJqJQRoDq2O5b3+KjSadOdjjcY2xV/f+GPELiKyuOHcQs5Ir
268
+ mKOVlm1cxMqCQwUEHBJxuKDdUFeyN/Bm/ex+t7G3UjFypQ+vAwFLYHk5Hf3rt/1/wReJcOtr2M6Z
269
+ ITy3G2GRumfg7fc1zIfwsl4dapxDhv1ZbJxKFwwieAwgjvpcMxzjO2K7Xw+RLy2Mc66oXTBRh1Hi
270
+ oZZK1JF8KdUzkl1ZPGJA0RiQEMGYbAdNvgk/qKdEoJ0DCKx1AhsbkDI+K6TxbgUb28yD1RMuFyMn
271
+ HcEf3qqzfSiKqBjmLqSv5hjqMD7faotcto6YZK0wPw5fUQd2P5cY3PjNFOGLGqy3Da5CQRq1f0/S
272
+ ok8ItnSFQF/3NOjoGB6Ee/X9KkoRDkqVESehd9ie/wCxqbTRdSTJ0UPOxI6BQfUg6YPb5rcWCxzB
273
+ QEReoydQJI/z9aZhlwUaQFmjI0oPJ7fpU5pRkwyquksq6umGx/mTSpDNgi5tFtw8JdZWZSpI8f8A
274
+ 2oFzbfh7ZkClMaS2duvWj4eNi2QuATg9TsdsDx3qNJGkzHOdRbLZGc9sUZUzRtAK9iZXBT1yuvqJ
275
+ H+YxQ+VCo5RGmB2ONsavf/PFWeaFEncLnUVABPc/4ag8TtlSSUBhqVAQuSN2xn42FBGZVriKSKLm
276
+ qGIiJB32+4qLLAjXAcThtS5BIJIYb4IoxeIGYhjpV3IwR37UOv7Yw3BK6CGK6Sp2zjv71SLJSiCJ
277
+ YFmcRT5WQylOYhyEXbYDoT/4pl7iPmqy5MkC83P8r4bOQO2Qc4+amsYRdzCWXETEtqwep2H9AaES
278
+ sIozG6xsXU6X1EEfPwa6IM5ckSwC+teJ3siXSpy7hBHMobCy5BOvH/JSAPcbmqDxThj2oE8ak2zn
279
+ 0sSCQfBx32osb2KBG5ELnSyv68DAC+r474oVxGR2aNGcsCgfGCACWPb7munGziyKgeFpcVvppcVY
280
+ iWji6yNaKzWXJnTAkjkX1ISAQBjrkHNCzDynYSSJI226Z2PjP96sFrdScdvxFxKeGNmiOqdUCsxC
281
+ kgsAPUTgAd96CTKVch/So29Qwa4otrR6M0pPkyFJiBkWMHPULnt8UqGRkIbCAHJ23rd2AOdJ9s9a
282
+ wMSrkkDLYwDtVLI0aKpkJX05xnPt4pY76FbjlPCxkZCikbBSwwT56U9AkC3MCXkzwws3qkC6iu2e
283
+ lT+O8Ks4bTgnFuH3Mk1tdiSORJkCtC6nBU4J7FW+DSNq6Y8Y0tAcIsYEcYGF2DZ61rNkjC9c7jqa
284
+ eljDD0HDg4BFMRRjmE3DlFDAEp1x96dCu1o0jiDnJTfyTsa9OfR9nLJ9G8HFsOSkVnGXEqgajvnP
285
+ TG/muYfw1+irLjivxYX8U9vaSYl4ewInU5GgvtpMZ3yR4xXaLc8yNnkjR2Gw05Gr5HSpZpPofEkZ
286
+ Y8Kt+U5uLfh7RkdYx6k9x7b1Ljs4oUZ7aZDH1wAQc05BwxJY0Vo43LHUY1UKP1olLaKgUJGseB+U
287
+ dq5krOhumR4ZeZEATgjuPNMzoMZwAFOx801Nwzmys/MkiZupVz6vmo44JDKx/ETzzp/+t5W0/oOt
288
+ BRadmck0QC/DbvjP4NXWa4QE4SIuo26FhsD0pniv0qt0haF1DA6gp2377eKtnDrKCzhWCzjjgXrp
289
+ jXSB9qL2ltHOGE2cJuc+KpV9iqTjtHJ/9G4hBdmSKOQoGGXX+YAdfj4puGKSW9lOhlZcFC3Q57/P
290
+ auuHh1kWkaK3QFtxnO/wKhy8MtBpMUQjdFwAAN/kHahxQ/laOWXcuL6OOFCzBMso2IOe49qaurgp
291
+ IWlJDdSpOc1c+OcOhcEtACBuWiI1DwMHrQCSDgs100FrxCL8bCuZrYuFk046kH9cDxQ8bfQyzpdg
292
+ eSdQ5L+pvb+v+eKg387Ss7K2gEH1HoT2+1WO94boIkstOsEAH04z37nf+lAOLcO4k6GXkAKcjAJI
293
+ G3Wl4UOsqYEvzyn3dZD+bAyRjt1odcxlVUOC38wO+2en360T/DTQ5kkDkq2GwNv1/wDFMSEzXujm
294
+ 4BYFcA4x4GM7e9Mogc6AD4V40KMcAhgOvxQafS6lGwQC2Au5OB/SrPjllkliPOlJcswPQZGw+5oL
295
+ Lw24mcJbZ5OSzEjHqx08nb96tBUc+SVgydSZFBjLmIclwTjUSDjPjqBQy8CxCODdmi21nO/n9TvR
296
+ 68UW1vJcX/qkdgFVWwcjbH+earUjmR2cgDJzgdB7V144+zgyyvRr3rMVnxTmtP8A9f71UiPwTXXD
297
+ +IQssLuyHSFG5Knx9qt/1DYZ4b+PkYSgyCP0rgqe2f0qltfTW3Eo5lDhIyMop6joR7ZFdG4lcycR
298
+ +m7aW3xFazkSaBjY9cftXBmbTTPUw7i42UfQdRJJ2H61qyLl2ztn7VJkUoxBxjuajplpXRQhwPO/
299
+ 6U92I1QrOWhOFAJ2OD0+KkCaQWvJLtyQ5cptjVjTn9P6U0kJLhmz6QTgdzTkwZmGGwO4IzmlYyvs
300
+ HuzpMgDK4Z8bdcYrSZVKMDhmOcg71LNrcCP8Zym/CrJyVlxhWbG+Pt4pqREQj1DbpVE0ScWS/p/i
301
+ P+lX0N297LahUaRDHljIVI/2zjoG8navS3A7lLleZFsHwVA6FSM5H615VvEDQHpp/KAepruH8Ifq
302
+ j/UrH8BcmP8AGWsQVY0GnVGuAD79smkyxuNo2OX6pnYbcohCRffBogQqQgkn380IspQiEqgOR1x0
303
+ JqWl0JEfDDV38muVM6Gjd0HKbKkZ3BPik0rqBUqcYwKVrlW2xuF8+ajxlteBq0joR2o8jKIUt0/3
304
+ FLhVUdcdSalwgjXJIVUZzk9cUKspXeN0QaSrnBO5O++9T55I4fXlmZ/+QzgUUzNDxnQoDCcr02NQ
305
+ eIXS26uzAAeT2FN3F6qnAGUOST0AavOX8bP4gy3923AuDXBSFCfxcsTH1MNhGG8Dvj4q2OHJkpy4
306
+ k3+I/wDFxWluOH/TGJHU6HvCMxgdwo/m+Tt81xc3k0t0s8ksjXJYlpSTrJPfNaQxhLhlOw05FIWy
307
+ q6T6gc5rqSS0jlcm+ybw/jfFeFROnDOIXVomvU3JlKhie5/SrjwL+LP1Dw5VW+FvxJApA5w0E7bZ
308
+ IG4H2z5rncmVlK5yrbmlBzjwNqNJ9i8mujq6fxUDRXIl4BBI0hbSROVVcnrpwf06VK+mOOrxuZmv
309
+ o7OyjMgjiZp8Mz/fGw23xXKIsnAHWntGU1Y1AEr8Gs8UX6Ms0/p3eKGB49DzwSy8xo4vUpLH27nz
310
+ t4oLxC9toobifhs0UqW5ELlHAVpTvpyeuMZIFcrtL24stZtZDFI6hOYPzKuc4U9s4GcVkl/cyWi2
311
+ ry5t1JYR6RpBJyT8+/x4oLEkF5mxm4me5neaV2kdyWLMck5NNnc1lZVSJlZSj5pdZrGHuKRAW0cu
312
+ plU+lSB+b/5Vo4dfxQ8Ds41BUouCmcgHfLfvVTkuVuJIIJmb/YIVdXQAtkjHtvRB5lRyACWfJyAc
313
+ DffpXHkjypHoYpcbYYaOO6gdodAlADBcdd9+vtUHK/mA0kDNC7k3cZ12zakP/LempeKzRwASW4Ry
314
+ MA6tj9qVY36HeaPsMgq7KxHqx+9I77HKlm8Co1tOskMTBwX0gn5NOsd1OxAPfzitVB5Wh6XUYIom
315
+ DGGMHSpOy5OTj5ND7k5KsAuAOmadW6kuE9akqvp0nrt+1LwxLO4laPidy9jIMGIOmUk33BI9qaKa
316
+ 2yc5KWkDZ8E5fIbGcVYv4b3VzY/VVvdWhQlEZZIznMikHKgDr0z9qhce4SloILizl5tu/ocltQVu
317
+ xB8EUIs7iWG4zFrinAbSyN2IwcH4p75R/JKuE/0esPpn6ih41weC4t3blSjKsRsQDj9dsUTZ0juG
318
+ wSA/X2ry/wDR/wBV3v03dwJG8snDgTrttfTPUr4P9a7l9PfUFrx3h6XVpMdJ3dH2ZfmufJha2ujo
319
+ x5U9MukB5cbYYM2c5at453aE6m0noSOgoPb3XNzrlyM9sb5rZ75klMZyy7hQK56LoNQTGOICJirZ
320
+ xuMfenZbrMIwXBBJBJ/U580AF8GchG9S7BiaD/U/1AvC7JppZkhiGA0shOlc08E3pAlS7G/4o/U7
321
+ cE+n3lsB/wDkOum29XRm214743OK8vSq7zyGQs8rZZm7lick/rXQ/rHjCXswdrhboqpUSxk6NJPY
322
+ H+tUHncq6D4GCCu4zXZj1o4sq6Y1G5cAaAZVG5Oc+9NyOudIA8HfINThOv8AqwuIY9RJGUXbOdiP
323
+ g1DIGqVTFpwxAyc49qqRGZgQoU49J2rVetb3no0LkZxv7VonUU0RJEqM4wR1p/mHSVwACdX3phKd
324
+ G9OIOSxvE2mRdLYzg1q+7HAA9hSMcnqTSVjC1grB71tD/wBVdwN+prGEIOTt06+1Z6fenE0Q/idG
325
+ X5p6kdKax71jEiJYpeJOl3Dq5ihY9tiVG++eu1S2XLnJYBfykHsfmpH4KNrX8XLIC0baY4w2GLH+
326
+ Y+wH9RUWTCgsrNluo/8AvSuZdnY1SG7gRflikaRSAd1wd+v2FQZozKRuMhCPy7E0/KzJImrQMejJ
327
+ 6ZpWLkxFjgFy2374qqXog3ewWont5RpJGN852Io6khdCZFZGU+pmX9cVDJIbSWV419IOOgpI1KMQ
328
+ uphjGkHbFCr7CpVpE5rdkIVLrmtI5PJ0erGOuRtTdw3JLW88LiRdwH6+xFNW0n4eB9CK6uT3OrGd
329
+ sVrcu7EDoGzsPHesrQW0yVFeSw2c0biN4bgjKyKSFAHUe9CHk5d2khGpAfvipDy6mOnI22J/eok6
330
+ koQpz3O1Cjcnr+BCcBiWGRp6Y71I4XxG64bdQ3dpM8c8G6+MHqCO4qHw+UzQYkfLr1HfFbSOCMLu
331
+ MYND+DP6X/g38Rp4uYnGLdpGH5XgwpXrnUp6/YirMfr/AITBw1b4XOXYY5KZEqnxp7H36VxsAb6i
332
+ DjofNbLpMbhlDFhhT/xPmlcIt7QyySS0zo/Ev4mryYF4daSNJnOqZtKjbocdfBqi/U/Hr36jvoUv
333
+ pDykdikY6AE5+57ZocAEIBPQahqqRwGAXM8pmdEODpY9CeuK2oK0jK5umyTcyqEyvQr+lDI2Il1P
334
+ GMY237US4raiAR6HEkbKDqA/ahEeFk1HfHf3oRprQZtqWxZotU4MQ0nBJOeniltyiTSLdq5Vgdl8
335
+ 9s+1PBsEsM+MKetN5aGePnqZDnGO43p0yckQLggyEAY2FIvWscZkkIyQOhNItURJkqM7U8uN8k+1
336
+ MRdKdFOIbnARSDlu4x0pB70mawVjC1lKSD0FJWMbaiNgds5rGZmYnbffpSHasrGDMhCod8H82Dvj
337
+ 5qGsrq+pkAUjGo79afljTl6y+rwO4pJlGCrLsc/FcqO6V9o1nAcZJ3H8pHWmFYMMAu7LvpGxFL6c
338
+ nSSGGx1DNJINRy2Qc4yTsfbNOn9JNe0R5QxRQAQpOd+prcKI49DfnxnV4+9bTLlCw9LL03pouWQO
339
+ 3ULjc4phKRrcvo1CMrgYIwNu1OhXlikkU5IIDDTjGemMfFMkgsrMuASBgH9KfVESHO53wze9BsKX
340
+ 0jgMMMx1Nj9qal/ONABHWnnydgdvIpAqgE9T4FEFEPBikWWMHT1IojgPpfPoYZ+KiyxejY6TS20u
341
+ kRq4OltiewPY0GFfCSGXADkhjvuMVqzOSNKqTnzTkzaBobHXpWpXYcsYOegoWNWxsM8h5ZRizHAP
342
+ apaXbQDkjCRKQRtnPzThiNtDzk/M/pJ/tUZRrYhVbOMnFJaZSnEOR634b+JYxSWpbSyhwGHuBQRH
343
+ hSYLLCHiLYD5xj5qI53f0EKe4P8AaktVM08cKsRGzbg7UVCkK8nJoemZS7YcYH+YqRFatPbPdE6W
344
+ G4U9Cc9fb+9RJQkd/cpIhCbuAvxSF5YoXRmOlgGdQegHSmQkiLINNy4U4GrG9aDqaViOYzAk+rIz
345
+ SZyx81REmSITT6HAPSmI0IAPY9DTqtjcYp0IxawUlLWMKNtxWUgpRWMLW2V96QEg5G1Zv4H6VjBl
346
+ 7SQb6QAcg/NNNEQNIU6R46fFHo7q2aMc1RlB92qHPeW0qSiMOGB2z+T59689Tl8PWeOP0gQW+oFy
347
+ ygjtj+1RJSVlKtkkHHXbFEFnEUakgZO65PbNM3YWRGli5ZXOMZ6fanjJ3slOCrRAbGC2PYU2kTSs
348
+ kSjLOQqL07/0p5iFQByN+ij+9N291IAwDBYz2A/N7Z8VW9aIVumE5o7Phok5DJd3Ij0tLpwkZ/7P
349
+ J9z9vNBywYaFyMdcn96d5wZnjbO4+xprTpJGyg1oqjT30akEtgZyCK2bCkrnfuMYpD+YnLHHYH+t
350
+ IwJ3GQPZqcQTUwwCoYZqMpZI3XqmcrmpA9DgnVnwK2E5iljkh0ahnIYZBBHcUDJfQvHbwSRRvqZi
351
+ y5VRjv13qfFwqNeHTSakR0CkLnfeqpBdz2ja4JNIOzRkbfpRj/U1veHQCOIRXEbMJSCdLqenXxj+
352
+ tRlCS/4dEckX62R7yVnIQthRuFB7+ahnI9SkqenzTsmSfy79PvUbpg569hVYrRKUrZJsrWS9uhCr
353
+ pGdJYs7YGBUSUNb3GY3BKnZl71jj/cO+ewxW8rKfTpIJ8Ua2I6ojNcTMHy+oMMHNSBOJo4luM6V6
354
+ lQA3TAznrUGTAJxU64YCxi5EQVHGCTu2odftTUhLZCyUb9q3B1Nk0rkyhiFBZgDk9du4ptTtTCku
355
+ OQmNU/lXoKcU1HjNPA0wpuDWd6QGsPWsYWtwuSwyNS9R3FaZ709skhnXZnTDCsYbrPvWE5xSVjEl
356
+ pAIwFcPnbBOdu2a0a4MibA56bHpWVlQpHVyfRvzi7aGxk9CemfemlcZ2zgmsrK1Acmx2OF7pLhkG
357
+ UhAZhnz4qMCecmN8NgDONqysoJ7aGa0mOcoySMIsDfJz2FYGaN2Bzg7dM7joaysre6M1SswYAIIA
358
+ B8Vo4w2EwR396yspibG3JzhFJ8UwVJ37VlZTCdm0Y/2jnftmnLK6jhRwwbDNnIFZWUGrGi+O0S+U
359
+ ZkDRsuCMgE7mo+mR5tAGCD3rKykTKtdDUoMbgdfIFNyBgQck471lZVERYxJuMnvRKC9MHD1iZUZG
360
+ f1KeuPFZWUWKgazYP+3kAZxv2pFNZWUQDiHFPqdqyspkBm4NLnesrKwDKcc5+KysrGNc1maysrAP
361
+ /9k=
362
+ --------_50D666A10000000074DE_MULTIPART_MIXED_
363
+ Content-Type: image/jpeg;
364
+ name="220px-Shiitake_Meshi_Ekiben.JPG"
365
+ Content-Disposition: attachment;
366
+ filename="220px-Shiitake_Meshi_Ekiben.JPG"
367
+ Content-Transfer-Encoding: base64
368
+
369
+ /9j/4AAQSkZJRgABAQEAtAC0AAD//gBPRmlsZSBzb3VyY2U6IGh0dHA6Ly9jb21tb25zLndpa2lt
370
+ ZWRpYS5vcmcvd2lraS9GaWxlOlNoaWl0YWtlX01lc2hpX0VraWJlbi5KUEf/2wBDAAYEBQYFBAYG
371
+ BQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/
372
+ 2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo
373
+ KCgoKCgoKCgoKCj/wAARCAClANwDASIAAhEBAxEB/8QAHAAAAQQDAQAAAAAAAAAAAAAABgMEBQcA
374
+ AQII/8QAQxAAAgEDAgMGAwUGAwcEAwAAAQIDAAQRBSESMUEGEyJRYXEUgZEHIzKhsRUzQlLB0XLh
375
+ 8BYXJDRTYpIIQ0TCc4KD/8QAGgEAAgMBAQAAAAAAAAAAAAAAAQMAAgQFBv/EAC8RAAIBAgUDAgQG
376
+ AwAAAAAAAAABAgMRBBITITFBUWEFIhQjodEyUnGBsfBCkcH/2gAMAwEAAhEDEQA/APL1ZKqjBRid
377
+ t8jGK3x8YXYDAxsMZ96xeEkcZIHoKbyV4OUPiweu4rtCokHeAlOoU4NInalNyobGx2z60Ews0evO
378
+ uTjh9c8q3jwcXEvljO9cHc1LkNHrjOBWDG+aw+/PnWgcGqhOhWxW2wGODyOxHKsG5z86KAdHDMSF
379
+ CjoB0ot+zvsLqfbjVvhrEdxZREG6vXXKQL/9mPRRz9Bk0r9mfYPUe3etfD2+bfT4MG7vCuVhXoB5
380
+ ueg+Z2BNevNB0TTuzuj2+laNbC3soB4V5s7dXY9WPU/0FPp077vgRWrZdlyN+yugaV2U0WHS9Et+
381
+ 6to/EztgyTP1dz1Y/QDYYFTSS9Sd6bstccXDWvgxcj4yk0k0xwQab94elJvJjO9S5LHTv60hI/ma
382
+ SmmwKaSXHrVcxZIUllwfSqZ+3fsat9at2m0yFTd264vUA/exjYS4815H0welWtJNk4JppPcBQQQr
383
+ DBBB3BHUEUubTVmMhdO6PGwUscCuWOcbAYGNhRl9pXZlOz2sSPZxn9mXTF7dt/uz1j+XT0x60G++
384
+ 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
543
+ 6UHZxWVlKlyPh+FDmI0qfasrKUy5/9k=
544
+ --------_50D666A10000000074DE_MULTIPART_MIXED_--
545
+
546
+
547
+
data/ext/extconf.rb ADDED
@@ -0,0 +1,5 @@
1
+ require 'mkmf'
2
+
3
+ if have_header('ripmime-api.h') and have_library('ripmime')
4
+ create_makefile('ripmime')
5
+ end
data/ext/ripmime.c ADDED
@@ -0,0 +1,83 @@
1
+ #include "ripmime.h"
2
+
3
+ static VALUE rb_mRipmime;
4
+ static VALUE rb_eRipmimeError;
5
+
6
+ static VALUE ruby_ripmime_decode(VALUE self, VALUE mailpack, VALUE outputdir) {
7
+ struct RIPMIME_object rm;
8
+ int ret, fd_stdout, fd_stderr;
9
+ FILE *fp_err;
10
+ VALUE errmsg;
11
+ char buf[BUFSIZ];
12
+
13
+ fp_err = tmpfile();
14
+
15
+ if (fp_err == NULL) {
16
+ rb_raise(rb_eRuntimeError, strerror(errno));
17
+ }
18
+
19
+ fd_stdout = dup(fileno(stdout));
20
+
21
+ if (fd_stdout == -1) {
22
+ rb_raise(rb_eRuntimeError, strerror(errno));
23
+ }
24
+
25
+ fd_stderr = dup(fileno(stderr));
26
+
27
+ if (dup2(fileno(fp_err), fileno(stdout)) == -1) {
28
+ rb_raise(rb_eRuntimeError, strerror(errno));
29
+ }
30
+
31
+ if (dup2(fileno(fp_err), fileno(stderr)) == -1) {
32
+ rb_raise(rb_eRuntimeError, strerror(errno));
33
+ }
34
+
35
+ RIPMIME_init(&rm);
36
+
37
+ ret = RIPMIME_decode(&rm, StringValuePtr(mailpack), StringValuePtr(outputdir));
38
+
39
+ if (dup2(fd_stdout, fileno(stdout)) == -1) {
40
+ rb_raise(rb_eRuntimeError, strerror(errno));
41
+ }
42
+
43
+ if (dup2(fd_stdout, fileno(stderr)) == -1) {
44
+ rb_raise(rb_eRuntimeError, strerror(errno));
45
+ }
46
+
47
+ if (close(fd_stdout) == -1) {
48
+ rb_warn(strerror(errno));
49
+ }
50
+
51
+ if (close(fd_stderr) == -1) {
52
+ rb_warn(strerror(errno));
53
+ }
54
+
55
+ rewind(fp_err);
56
+
57
+ errmsg = rb_str_new(0, 0);
58
+
59
+ while (fgets(buf, BUFSIZ, fp_err) != NULL) {
60
+ rb_str_append(errmsg, rb_str_new2(buf));
61
+ }
62
+
63
+ if (fclose(fp_err) != 0) {
64
+ rb_warn(strerror(errno));
65
+ }
66
+
67
+ if (ret != 0 || RSTRING_LEN(errmsg) != 0) {
68
+ if (RSTRING_LEN(errmsg) > 0) {
69
+ rb_raise(rb_eRipmimeError, RSTRING_PTR(errmsg));
70
+ } else {
71
+ rb_raise(rb_eRipmimeError, "ripMIME decode errer (retval: %d)", ret);
72
+ }
73
+ }
74
+
75
+ return 0;
76
+ }
77
+
78
+ void Init_ripmime() {
79
+ rb_mRipmime = rb_define_module("Ripmime");
80
+ rb_eRipmimeError = rb_define_class_under(rb_mRipmime, "Error", rb_eStandardError);
81
+
82
+ rb_define_module_function(rb_mRipmime, "decode", ruby_ripmime_decode, 2);
83
+ }
data/ext/ripmime.h ADDED
@@ -0,0 +1,18 @@
1
+ #ifndef __RUBY_RIPMIME_H__
2
+ #define __RUBY_RIPMIME_H__
3
+
4
+ #include <stdio.h>
5
+ #include <stdlib.h>
6
+ #include <unistd.h>
7
+ #include <errno.h>
8
+ #include <ripmime-api.h>
9
+ #include <ruby.h>
10
+
11
+ #ifndef RSTRING_PTR
12
+ #define RSTRING_PTR(s) (RSTRING(s)->ptr)
13
+ #endif
14
+ #ifndef RSTRING_LEN
15
+ #define RSTRING_LEN(s) (RSTRING(s)->len)
16
+ #endif
17
+
18
+ #endif // __RUBY_RIPMIME_H__
metadata ADDED
@@ -0,0 +1,69 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ruby-ripmime
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
11
+ platform: ruby
12
+ authors:
13
+ - winebarrel
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2012-12-23 00:00:00 Z
19
+ dependencies: []
20
+
21
+ description: Ruby binding for ripMIME.
22
+ email: sgwr_dts@yahoo.co.jp
23
+ executables: []
24
+
25
+ extensions:
26
+ - ext/extconf.rb
27
+ extra_rdoc_files:
28
+ - README
29
+ files:
30
+ - ext/ripmime.c
31
+ - ext/ripmime.h
32
+ - ext/extconf.rb
33
+ - README
34
+ homepage: https://bitbucket.org/winebarrel/ruby-ripmime
35
+ licenses: []
36
+
37
+ post_install_message:
38
+ rdoc_options:
39
+ - --title
40
+ - ruby-ripmime - Ruby binding for ripMIME.
41
+ require_paths:
42
+ - lib
43
+ required_ruby_version: !ruby/object:Gem::Requirement
44
+ none: false
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ hash: 3
49
+ segments:
50
+ - 0
51
+ version: "0"
52
+ required_rubygems_version: !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ hash: 3
58
+ segments:
59
+ - 0
60
+ version: "0"
61
+ requirements: []
62
+
63
+ rubyforge_project:
64
+ rubygems_version: 1.8.11
65
+ signing_key:
66
+ specification_version: 3
67
+ summary: Ruby binding for ripMIME.
68
+ test_files: []
69
+