[Dynamite] Alphabets
Ian Holmes
ihh@fruitfly.org
Tue, 18 Apr 2000 00:46:22 -0700 (PDT)
This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.
Send mail to mime@docserver.cac.washington.edu for more info.
---559023410-851401618-956043982=:26501
Content-Type: TEXT/PLAIN; charset=US-ASCII
I was bored doing revisions for my ISMB paper, so I wrote the Alphabet
module in perl, together with a test (attached). It's pretty dull, but
had to be done. One of these days I will work out how to check this shit
in remotely via CVS. Until then if you are very bored here is the code.
--
Ian Holmes .... Howard Hughes Medical Institute .... ihh@fruitfly.org
---559023410-851401618-956043982=:26501
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="Alphabet.pm"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.GSO.4.10.10004180046220.26501@fruitfly>
Content-Description:
Content-Disposition: attachment; filename="Alphabet.pm"
IyBQZXJsIG1vZHVsZSBUZWxlZ3JhcGg6OkFscGhhYmV0DQoNCiMgRnJvbSBv
dXRzaWRlIHRoaXMgbW9kdWxlLCBoYXNoIGVsZW1lbnRzIHNob3VsZCBPTkxZ
IGJlIGFjY2Vzc2VkIGJ5IG1ldGhvZCBjYWxscw0KDQpwYWNrYWdlIFRlbGVn
cmFwaDo6QWxwaGFiZXQ7DQoNCnVzZSBFeHBvcnRlcjsNCkBJU0EgPSBxdyhF
eHBvcnRlcik7DQoNCnVzZSBDYXJwOw0KdXNlIHN0cmljdCBxdyhzdWJzIHZh
cnMgcmVmcyk7DQoNCjE7DQoNCiMgRXhjZXB0aW9ucw0KDQpzdWIgcmFpc2Vf
YmFkX2FscGhhYmV0IHsNCiAgICBjcm9hayAiQmFkIGFscGhhYmV0IjsNCn0N
Cg0Kc3ViIHJhaXNlX25vdF9mb3VuZCB7DQogICAgY3JvYWsgIkNoYXJhY3Rl
ciBub3QgZm91bmQgaW4gYWxwaGFiZXQiOw0KfQ0KDQojIEdlbmVyaWMgY29u
c3RydWN0b3INCg0Kc3ViIG5ldyB7DQogICAgbXkgKCRjbGFzcywgJG5hbWUs
ICRjaGFycywgJGNvbXBsZW1lbnQsIEBkZWdlbmVyYWN5KSA9IEBfOw0KDQog
ICAgJGNoYXJzID0gbGMgJGNoYXJzOw0KICAgICRjb21wbGVtZW50ID0gbGMg
JGNvbXBsZW1lbnQ7DQoNCiAgICBteSBAZHRhYjsNCiAgICBteSAkc2VsZiA9
IHsNCgknbmFtZScgPT4gJG5hbWUsDQoJJ2NoYXJzJyA9PiAkY2hhcnMsDQoJ
J2NvbXBsZW1lbnQnID0+ICRjb21wbGVtZW50LA0KCSdkZWdlbmVyYXRlX2No
YXJzJyA9PiB1bmRlZiwNCgknZGVnZW5lcmF0ZV9jaGFyX21hcCcgPT4gdW5k
ZWYsDQoJJ2RlZ2VuZXJhdGVfY29tcGxlbWVudCcgPT4gdW5kZWYsDQoJJ3Vu
a25vd25fY2hhcicgPT4gdW5kZWYNCiAgICB9Ow0KICAgIGJsZXNzICRzZWxm
LCAkY2xhc3M7DQoNCiAgICAjIENoZWNrIHRoYXQgdGhlIGNoYXJzICYgY29t
cGxlbWVudCBzdHJpbmdzIG1ha2Ugc2Vuc2UNCg0KICAgICRzZWxmLT5yYWlz
ZV9iYWRfYWxwaGFiZXQgdW5sZXNzIGxlbmd0aCgkY29tcGxlbWVudCkgPT0g
MCB8fCBsZW5ndGgoJGNvbXBsZW1lbnQpID09IGxlbmd0aCgkY2hhcnMpOw0K
DQogICAgZm9yIChteSAkaSA9IDA7ICRpIDwgbGVuZ3RoICRjaGFyczsgKysk
aSkgew0KCW15ICRjID0gc3Vic3RyICgkY2hhcnMsICRpLCAxKTsNCgkkc2Vs
Zi0+cmFpc2VfYmFkX2FscGhhYmV0IHVubGVzcyAkYyA9fiAvW2Etel0vICYm
IGluZGV4ICgkY2hhcnMsICRjLCAkaSsxKSA8IDA7DQogICAgfQ0KDQogICAg
bXkgQGNvbXA7DQogICAgZm9yIChteSAkaSA9IDA7ICRpIDwgbGVuZ3RoICRj
b21wbGVtZW50OyArKyRpKSB7DQoJbXkgJGogPSBpbmRleCAoJGNoYXJzLCBz
dWJzdHIgKCRjb21wbGVtZW50LCAkaSwgMSkpOw0KCSRzZWxmLT5yYWlzZV9i
YWRfYWxwaGFiZXQgdW5sZXNzICRqID49IDAgJiYgaW5kZXggKCRjaGFycywg
c3Vic3RyICgkY29tcGxlbWVudCwgJGosIDEpKSA9PSAkaTsNCglwdXNoIEBj
b21wLCAkajsNCiAgICB9DQoNCiAgICAjIFNldCB1cCB0aGUgZGVnZW5lcmFj
eSB0YWJsZQ0KDQogICAgJHNlbGYtPnJhaXNlX2JhZF9hbHBoYWJldCB1bmxl
c3MgQGRlZ2VuZXJhY3kgJSAyID09IDA7DQogICAgbXkgJGRlZ2VuX2NoYXJz
ID0gIiI7DQogICAgbXkgQGRlZ2VuX2NoYXJfbWFwOw0KICAgIGZvciAobXkg
JGkgPSAwOyAkaSA8IEBkZWdlbmVyYWN5OyAkaSArPSAyKSB7DQoJbXkgJGRl
Z2VuX2tleSA9IGxjICRkZWdlbmVyYWN5WyRpXTsNCglteSAkZGVnZW5fdmFs
cyA9IGxjICRkZWdlbmVyYWN5WyRpKzFdOw0KCSRzZWxmLT5yYWlzZV9iYWRf
YWxwaGFiZXQgdW5sZXNzIGxlbmd0aCgkZGVnZW5fa2V5KSA9PSAxICYmIGlu
ZGV4ICgkY2hhcnMsICRkZWdlbl9rZXkpIDwgMDsNCg0KCW15IEBkdmFsczsN
Cglmb3IgKG15ICRpID0gMDsgJGkgPCBsZW5ndGggJGRlZ2VuX3ZhbHM7ICsr
JGkpIHsNCgkgICAgJHNlbGYtPnJhaXNlX2JhZF9hbHBoYWJldCB1bmxlc3Mg
aW5kZXggKCRkZWdlbl92YWxzLCBzdWJzdHIgKCRkZWdlbl92YWxzLCAkaSwg
MSksICRpKzEpIDwgMDsNCgkgICAgbXkgJGR2YWwgPSBpbmRleCAoJGNoYXJz
LCBzdWJzdHIgKCRkZWdlbl92YWxzLCAkaSwgMSkpOw0KCSAgICAkc2VsZi0+
cmFpc2VfYmFkX2FscGhhYmV0IHVubGVzcyAkZHZhbCA+PSAwOw0KCSAgICBw
dXNoIEBkdmFscywgJGR2YWw7DQoJfQ0KCUBkdmFscyA9IHNvcnQgeyRhPD0+
JGJ9IEBkdmFsczsNCg0KCSRkZWdlbl9jaGFycyAuPSAkZGVnZW5fa2V5Ow0K
CXB1c2ggQGRlZ2VuX2NoYXJfbWFwLCBcQGR2YWxzOw0KICAgIH0NCiAgICAN
CiAgICAkc2VsZi0+eydkZWdlbmVyYXRlX2NoYXJzJ30gPSAkZGVnZW5fY2hh
cnM7DQogICAgJHNlbGYtPnsnZGVnZW5lcmF0ZV9jaGFyX21hcCd9ID0gXEBk
ZWdlbl9jaGFyX21hcDsNCg0KICAgICMgR2V0IHRoZSByZXZlcnNlIGxvb2t1
cCBvZiB0aGUgZGVnZW5lcmFjeSB0YWJsZSBpbiBhIHRlbXBvcmFyeSBoYXNo
DQoNCiAgICBteSAlbG9va3VwOw0KICAgIGZvciAobXkgJGkgPSAwOyAkaSA8
IGxlbmd0aCAkY2hhcnM7ICsrJGkpIHsNCglteSAkYyA9IHN1YnN0ciAoJGNo
YXJzLCAkaSwgMSk7DQoJJGxvb2t1cHskY30gPSAkYzsNCiAgICB9DQogICAg
Zm9yIChteSAkaSA9IDA7ICRpIDwgbGVuZ3RoICRkZWdlbl9jaGFyczsgKysk
aSkgew0KCW15ICRkc3RyID0gam9pbiAoIiIsIG1hcCAoc3Vic3RyICgkY2hh
cnMsICRfLCAxKSwgQCB7JGRlZ2VuX2NoYXJfbWFwWyRpXX0pKTsNCgkkbG9v
a3VweyRkc3RyfSA9IHN1YnN0ciAoJGRlZ2VuX2NoYXJzLCAkaSwgMSkgdW5s
ZXNzIGV4aXN0cyAkbG9va3VweyRkc3RyfTsNCiAgICB9DQoNCiAgICAkc2Vs
Zi0+cmFpc2VfYmFkX2FscGhhYmV0IHVubGVzcyBleGlzdHMgJGxvb2t1cHsk
Y2hhcnN9Ow0KICAgICRzZWxmLT57J3Vua25vd25fY2hhcid9ID0gJGxvb2t1
cHskY2hhcnN9Ow0KDQogICAgIyBDb21wbGVtZW50IHRoZSBkZWdlbmVyYWN5
IHRhYmxlDQogICAgDQogICAgbXkgJGRlZ2VuX2NvbXAgPSAiIjsNCiAgICBp
ZiAobGVuZ3RoICRjb21wbGVtZW50KSB7DQoJZm9yIChteSAkaSA9IDA7ICRp
IDwgbGVuZ3RoICRkZWdlbl9jaGFyczsgKyskaSkgew0KCSAgICBteSAkY3N0
ciA9IGpvaW4gKCIiLCBtYXAgKHN1YnN0ciAoJGNoYXJzLCAkXywgMSksIHNv
cnQgeyRhPD0+JGJ9IG1hcCAoJGNvbXBbJF9dLCBAIHskZGVnZW5fY2hhcl9t
YXBbJGldfSkpKTsNCgkgICAgJHNlbGYtPnJhaXNlX2JhZF9hbHBoYWJldCB1
bmxlc3MgZXhpc3RzICRsb29rdXB7JGNzdHJ9Ow0KCSAgICAkZGVnZW5fY29t
cCAuPSAkbG9va3VweyRjc3RyfTsNCgl9DQogICAgfQ0KICAgICRzZWxmLT57
J2RlZ2VuZXJhdGVfY29tcGxlbWVudCd9ID0gJGRlZ2VuX2NvbXA7DQogICAg
DQogICAgJHNlbGY7DQp9DQoNCiMgU3BlY2lhbGlzZWQgY29uc3RydWN0b3Jz
DQoNCnN1YiBuZXdfRE5BIHsNCiAgICBteSAoJGNsYXNzKSA9IEBfOw0KICAg
ICRjbGFzcy0+bmV3ICgnRE5BJywNCgkJICdhY2d0JywNCgkJICd0Z2NhJywN
CgkJICd1JyA9PiAndCcsDQoJCSAnbicgPT4gJ2FjZ3QnLA0KCQkgJ3gnID0+
ICdhY2d0JywNCgkJICdyJyA9PiAnYWcnLA0KCQkgJ3knID0+ICdjdCcsDQoJ
CSAnbScgPT4gJ2FjJywNCgkJICdrJyA9PiAnZ3QnLA0KCQkgJ3MnID0+ICdj
ZycsDQoJCSAndycgPT4gJ2F0JywNCgkJICdoJyA9PiAnYWN0JywNCgkJICdi
JyA9PiAnY2d0JywNCgkJICd2JyA9PiAnYWNnJywNCgkJICdkJyA9PiAnYWd0
Jyk7DQp9DQoNCnN1YiBuZXdfUk5BIHsNCiAgICBteSAoJGNsYXNzKSA9IEBf
Ow0KICAgICRjbGFzcy0+bmV3ICgnUk5BJywNCgkJICdhY2d1JywNCgkJICd1
Z2NhJywNCgkJICd0JyA9PiAndScsDQoJCSAnbicgPT4gJ2FjZ3UnLA0KCQkg
J3gnID0+ICdhY2d1JywNCgkJICdyJyA9PiAnYWcnLA0KCQkgJ3knID0+ICdj
dScsDQoJCSAnbScgPT4gJ2FjJywNCgkJICdrJyA9PiAnZ3UnLA0KCQkgJ3Mn
ID0+ICdjZycsDQoJCSAndycgPT4gJ2F1JywNCgkJICdoJyA9PiAnYWN1JywN
CgkJICdiJyA9PiAnY2d1JywNCgkJICd2JyA9PiAnYWNnJywNCgkJICdkJyA9
PiAnYWd1Jyk7ICAgIA0KfQ0KDQpzdWIgbmV3X3Byb3RlaW4gew0KICAgIG15
ICgkY2xhc3MpID0gQF87DQogICAgJGNsYXNzLT5uZXcgKCdQcm90ZWluJywN
CgkJICdhY2RlZmdoaWtsbW5wcXJzdHZ3eScsDQoJCSAnJywNCgkJICdiJyA9
PiAnbmQnLA0KCQkgJ3onID0+ICdxZScsDQoJCSAneCcgPT4gJ2FjZGVmZ2hp
a2xtbnBxcnN0dnd5Jyk7DQp9DQoNCiMgQWNjZXNzb3IgbWV0aG9kcw0KDQpz
dWIgbmFtZSB7DQogICAgbXkgKCRzZWxmKSA9IEBfOw0KICAgICRzZWxmLT57
J25hbWUnfTsNCn0NCg0Kc3ViIGNoYXJzIHsNCiAgICBteSAoJHNlbGYpID0g
QF87DQogICAgJHNlbGYtPnsnY2hhcnMnfTsNCn0NCg0Kc3ViIGRlZ2VuZXJh
dGVfY2hhcnMgew0KICAgIG15ICgkc2VsZikgPSBAXzsNCiAgICAkc2VsZi0+
eydkZWdlbmVyYXRlX2NoYXJzJ307DQp9DQoNCnN1YiBhbGxfY2hhcnMgew0K
ICAgIG15ICgkc2VsZikgPSBAXzsNCiAgICAkc2VsZi0+eydjaGFycyd9IC4g
JHNlbGYtPnsnZGVnZW5lcmF0ZV9jaGFycyd9Ow0KfQ0KDQpzdWIgdW5rbm93
bl9jaGFyIHsNCiAgICBteSAoJHNlbGYpID0gQF87DQogICAgJHNlbGYtPnsn
dW5rbm93bl9jaGFyJ307DQp9DQoNCnN1YiBzaXplIHsNCiAgICBteSAoJHNl
bGYpID0gQF87DQogICAgbGVuZ3RoICRzZWxmLT57J2NoYXJzJ307DQp9DQoN
CnN1YiBmdWxsX3NpemUgew0KICAgIG15ICgkc2VsZikgPSBAXzsNCiAgICBs
ZW5ndGggKCRzZWxmLT57J2NoYXJzJ30pICsgbGVuZ3RoICgkc2VsZi0+eydk
ZWdlbmVyYXRlX2NoYXJzJ30pOw0KfQ0KDQpzdWIgaGFzX2NvbXBsZW1lbnQg
ew0KICAgIG15ICgkc2VsZikgPSBAXzsNCiAgICBsZW5ndGggKCRzZWxmLT57
J2NvbXBsZW1lbnQnfSkgPiAwOw0KfQ0KDQpzdWIgY2hhcnNfY29tcGxlbWVu
dCB7DQogICAgbXkgKCRzZWxmKSA9IEBfOw0KICAgICRzZWxmLT5yYWlzZV9u
b3RfZm91bmQgdW5sZXNzICRzZWxmLT5oYXNfY29tcGxlbWVudDsNCiAgICAk
c2VsZi0+eydjb21wbGVtZW50J307DQp9DQoNCnN1YiBkZWdlbmVyYXRlX2No
YXJzX2NvbXBsZW1lbnQgew0KICAgIG15ICgkc2VsZikgPSBAXzsNCiAgICAk
c2VsZi0+cmFpc2Vfbm90X2ZvdW5kIHVubGVzcyAkc2VsZi0+aGFzX2NvbXBs
ZW1lbnQ7DQogICAgJHNlbGYtPnsnZGVnZW5lcmF0ZV9jb21wbGVtZW50J307
DQp9DQoNCnN1YiBhbGxfY2hhcnNfY29tcGxlbWVudCB7DQogICAgbXkgKCRz
ZWxmKSA9IEBfOw0KICAgICRzZWxmLT5yYWlzZV9ub3RfZm91bmQgdW5sZXNz
ICRzZWxmLT5oYXNfY29tcGxlbWVudDsNCiAgICAkc2VsZi0+eydjb21wbGVt
ZW50J30gLiAkc2VsZi0+eydkZWdlbmVyYXRlX2NvbXBsZW1lbnQnfTsNCn0N
Cg0KIyBFcXVhbGl0eSBjb21wYXJpc29uIG1ldGhvZA0KDQpzdWIgZXF1YWxz
IHsNCiAgICBteSAoJHNlbGYsICRvdGhlcikgPSBAXzsNCiAgICBteSAkY2hh
cnMgPSAkc2VsZi0+eydjaGFycyd9Ow0KDQogICAgcmV0dXJuIDAgaWYgJGNo
YXJzIG5lICRvdGhlci0+eydjaGFycyd9DQogICAgfHwgJHNlbGYtPnsnY29t
cGxlbWVudCd9IG5lICRvdGhlci0+eydjb21wbGVtZW50J30NCiAgICB8fCAk
c2VsZi0+eydkZWdlbmVyYXRlX2NoYXJzJ30gbmUgJG90aGVyLT57J2RlZ2Vu
ZXJhdGVfY2hhcnMnfTsNCg0KICAgIG15ICRzZWxmX21hcCA9ICRzZWxmLT57
J2RlZ2VuZXJhdGVfY2hhcl9tYXAnfTsNCiAgICBteSAkb3RoZXJfbWFwID0g
JG90aGVyLT57J2RlZ2VuZXJhdGVfY2hhcl9tYXAnfTsNCiAgICBmb3IgKG15
ICRpID0gMDsgJGkgPCBAJHNlbGZfbWFwOyArKyRpKSB7DQoJbXkgJHNlbGZf
dmFsID0gJCRzZWxmX21hcFskaV07DQoJbXkgJG90aGVyX3ZhbCA9ICQkb3Ro
ZXJfbWFwWyRpXTsNCglyZXR1cm4gMCBpZiBAJHNlbGZfdmFsICE9IEAkb3Ro
ZXJfdmFsOw0KCWZvciAobXkgJGogPSAwOyAkaiA8IEAkc2VsZl92YWw7ICsr
JGopIHsNCgkgICAgcmV0dXJuIDAgaWYgJCRzZWxmX3ZhbFskal0gIT0gJCRv
dGhlcl92YWxbJGpdOw0KCX0NCiAgICB9DQoNCiAgICAxOw0KfQ0KDQojIE1l
dGhvZCBkaWdpdGlzZV9zZXE6IHR1cm5zIGEgc2VxdWVuY2Ugc3RyaW5nIGlu
dG8gYSByZWZlcmVuY2UgdG8gbGlzdCBvZiBpbnRlZ2Vycw0KDQpzdWIgZGln
aXRpc2Vfc2VxIHsNCiAgICBteSAoJHNlbGYsICRzZXEpID0gQF87DQoNCiAg
ICBteSAkY2hhcnMgPSAkc2VsZi0+YWxsX2NoYXJzOw0KICAgIG15ICR1bmtu
b3duX2MgPSAkc2VsZi0+dW5rbm93bl9jaGFyOw0KICAgIG15ICR1bmtub3du
X2ogPSBpbmRleCAoJGNoYXJzLCAkdW5rbm93bl9jKTsNCiAgICANCiAgICBt
eSBAZHNxOw0KICAgIGZvciAobXkgJGkgPSAwOyAkaSA8IGxlbmd0aCgkc2Vx
KTsgKyskaSkgew0KCW15ICRjID0gbGMgc3Vic3RyICgkc2VxLCAkaSwgMSk7
DQoJbXkgJGogPSBpbmRleCAoJGNoYXJzLCAkYyk7DQoJaWYgKCRqIDwgMCkg
ew0KCSAgICB3YXJuICJEb24ndCBrbm93IHdoYXQgJyRjJyBtZWFucy4gVXNp
bmcgJyR1bmtub3duX2MnIGluc3RlYWQuXG4iOw0KCSAgICBwdXNoIEBkc3Es
ICR1bmtub3duX2o7DQoJfSBlbHNlIHsNCgkgICAgcHVzaCBAZHNxLCAkajsN
Cgl9DQogICAgfQ0KDQogICAgXEBkc3E7DQp9DQoNCiMgTWV0aG9kIGRpZ2l0
aXNlX3Byb3Blcl9zZXE6IHNhbWUgYXMgZGlnaXRpc2Vfc2VxLCBidXQgYmFy
ZnMgb24gZGVnZW5lcmF0ZSBvciB1bmtub3duIGNoYXJhY3RlcnMNCg0Kc3Vi
IGRpZ2l0aXNlX3Byb3Blcl9zZXEgew0KICAgIG15ICgkc2VsZiwgJHNlcSkg
PSBAXzsNCg0KICAgIG15ICRjaGFycyA9ICRzZWxmLT5jaGFyczsNCiAgICAN
CiAgICBteSBAZHNxOw0KICAgIGZvciAobXkgJGkgPSAwOyAkaSA8IGxlbmd0
aCgkc2VxKTsgKyskaSkgew0KCW15ICRjID0gbGMgc3Vic3RyICgkc2VxLCAk
aSwgMSk7DQoJbXkgJGogPSBpbmRleCAoJGNoYXJzLCAkYyk7DQoJJHNlbGYt
PnJhaXNlX25vdF9mb3VuZCBpZiAkaiA8IDA7DQoJcHVzaCBAZHNxLCAkajsN
CiAgICB9DQoNCiAgICBcQGRzcTsNCn0NCg0KIyBNZXRob2QgcmV2Y29tcF9z
ZXE6IHJldmVyc2UgY29tcGxlbWVudHMgYSBzZXF1ZW5jZQ0KDQpzdWIgcmV2
Y29tcF9zZXEgew0KICAgIG15ICgkc2VsZiwgJHNlcSkgPSBAXzsNCg0KICAg
IG15ICRjaGFycyA9ICRzZWxmLT5hbGxfY2hhcnM7DQogICAgbXkgJGNvbXAg
PSAkc2VsZi0+YWxsX2NoYXJzX2NvbXBsZW1lbnQ7DQogICAgbXkgJHVua25v
d25fYyA9ICRzZWxmLT51bmtub3duX2NoYXI7DQoNCiAgICBteSAkcmV2Y29t
cCA9ICIiOw0KICAgIGZvciAobXkgJGkgPSBsZW5ndGgoJHNlcSkgLSAxOyAk
aSA+PSAwOyAtLSRpKSB7DQoJbXkgJGMgPSBzdWJzdHIgKCRzZXEsICRpLCAx
KTsNCglteSAkbGMgPSBsYyAkYzsNCglteSAkaiA9IGluZGV4ICgkY29tcCwg
JGxjKTsNCglpZiAoJGogPCAwKSB7DQoJICAgIHdhcm4gIkNhbid0IHJldmVy
c2UgY29tcGxlbWVudCBhICckbGMnLCBwYWwuIFVzaW5nICckdW5rbm93bl9j
JyBpbnN0ZWFkLlxuIjsNCgkgICAgJHJldmNvbXAgLj0gJGMgZXEgJGxjID8g
JHVua25vd25fYyA6IHVjICR1bmtub3duX2M7DQoJfSBlbHNlIHsNCgkgICAg
bXkgJHJjID0gc3Vic3RyICgkY2hhcnMsICRqLCAxKTsNCgkgICAgJHJldmNv
bXAgLj0gJGMgZXEgJGxjID8gJHJjIDogdWMgJHJjOw0KCX0NCiAgICB9DQoN
CiAgICAkcmV2Y29tcDsNCn0NCg0K
---559023410-851401618-956043982=:26501
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="alphabet-test.pl"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.GSO.4.10.10004180046221.26501@fruitfly>
Content-Description:
Content-Disposition: attachment; filename="alphabet-test.pl"
IyEvdXNyL2Jpbi9wZXJsDQoNCnVzZSBUZWxlZ3JhcGg6OkFscGhhYmV0Ow0K
DQojIGZhaXJseSBza2ltcHkgc2V0IG9mIHRlc3RzIGZvciBUZWxlZ3JhcGg6
OkFscGhhYmV0DQoNCiRkbmEgPSBUZWxlZ3JhcGg6OkFscGhhYmV0LT5uZXdf
RE5BOw0KDQokc2VxID0iYWNjZ0dUeXduIjsNCiRyZXZjb21wID0gJGRuYS0+
cmV2Y29tcF9zZXEoJHNlcSk7DQoNCiRybmEgPSBUZWxlZ3JhcGg6OkFscGhh
YmV0LT5uZXdfUk5BOw0KJHByb3QgPSBUZWxlZ3JhcGg6OkFscGhhYmV0LT5u
ZXdfcHJvdGVpbjsNCg0KZGllIGlmICRkbmEtPmVxdWFscygkcHJvdCkgfHwg
JGRuYS0+ZXF1YWxzKCRybmEpOw0KZGllIHVubGVzcyAkZG5hLT5lcXVhbHMo
JGRuYSk7DQp3YXJuICJETkEgPT0gRE5BLCBETkEgIT0gUk5BLCBETkEgIT0g
UHJvdGVpblxuIjsNCndhcm4gIihlcXVhbHMgbWV0aG9kIHNlZW1zIHRvIGJl
IHdvcmtpbmcpXG5cbiI7DQoNCiRwcm90c2VxID0gImNhZWRnZmloTEtOTXFw
c3J2dHl3IjsNCiRkc3EgPSAkcHJvdC0+ZGlnaXRpc2Vfc2VxICgkcHJvdHNl
cSk7DQp3YXJuICIkcHJvdHNlcSAgPWRpZ2l0aXNlcy10bz0gIEAkZHNxXG4i
Ow0KZm9yZWFjaCAkaSAoMC4uMTkpIHsgZGllIHVubGVzcyAkJGRzcVskaV0g
PT0gJGkgXiAxIH0NCndhcm4gIihkaWdpdGlzZSBtZXRob2Qgc2VlbXMgdG8g
YmUgd29ya2luZylcblxuIjsNCg0Kd2FybiAiJHNlcSAgPXJldmNvbXBzLXRv
PSAgJHJldmNvbXBcbiI7DQpkaWUgdW5sZXNzICRyZXZjb21wIGVxICJud3JB
Q2NnZ3QiOw0Kd2FybiAiKHJldmNvbXAgbWV0aG9kIHNlZW1zIHRvIGJlIHdv
cmtpbmcpXG5cbiI7DQoNCg==
---559023410-851401618-956043982=:26501--