[PHP-users 4443] Re: メール機能との連動でデータベース更新

Youichi Iwakiri php-users@php.gr.jp
Mon, 24 Dec 2001 19:51:09 +0900


This is a multi-part message in MIME format.

--------=_1009191037.FFFC645B.FFFC664B
Content-Type: text/plain; charset=iso-2022-jp

いわきりです

Takeo Shibata wrote in <003201c18b59$970c4b00$0e94fea9@home>:
 >> ml-name-ctl: "| /home/hoge/regist.php"
 >>
 >の場合、どのような引数として
 >PHPにわたっているのでしょうか?

単にパイプでメールが渡って来るだけなので、標準入力から
ファイルを読みこむようにPHPの記述を行えばいいです。

 >変数名としてどのようにメールが渡してきた
 >メール情報を参照したらいいのでしょうか?

メールヘッダのparseは自分でやることになります。
それが面倒なので前のメールで紹介したmimdDecode.phpを
使っています。
このmimdDecode.phpですがpear配下にあると書きましたが
PHP 4.1.0, PHP 4.2.0-devにはあるのですがPHP 4.0.6以前の
versionには含まれていませんでした。
 http://www.phpguru.org/
で検索すると出てくるので使われる場合はそこからファイルを
取ってきてください。

 >ほんと基本的なことですが
 >なにか参考になるヒントまたはURLがありましたら
 >ご教授ください

取りあえず私の処で動かしているscriptを添付します。
DBにTABLEを作らないといけないとかそのままじゃ動かない
と思いますが、参考程度に見てくださいな。
#コードが汚いとか、コメントが無いとか無意味なコードが
#含まれているとかありますが大目にみてやってください。

簡単な処理の流れ
1) 複数のメールを指定して当プログラムが起動されたのか
   PIPEで起動されたのかを判断
2) 個々のメールを読み込みメールヘッダから必要な情報を抽出
   メールのボディパートは*後で使う為に*EUC_JPに変換して保存。
   添付ファイルがあればdecode済みの物をファイルに保存。
3) 各種情報をDBに登録
4) 2,3を指定されたファイル(メール)ぶん繰り返す。
5) virus check programを呼びチェックする
6) 処理結果を表示
--------=_1009191037.FFFC645B.FFFC664B
Content-Type: application/octet-stream; name="mimed.php"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="mimed.php"

IyEvdXNyL2xvY2FsL2RldmVsb3AvYmluL3BocCAtcSAtZCBtYXhfZXhlY3V0
aW9uX3RpbWU9MAo8c2NyaXB0IGxhbmd1YWdlPSJwaHAiPgokc3RhcnRfdGlt
ZSA9IHRpbWUoKTsKCmRlZmluZSgiTURfRV9FUlJPUiIsICAgMCk7CmRlZmlu
ZSgiTURfRV9TUUxFUlIiLCAgMSk7CmRlZmluZSgiTURfRV9XQVJOSU5HIiwg
Mik7CmRlZmluZSgiTURfRV9OT1RJQ0UiLCAgMyk7CgokZXJyb3JfcmVhc29u
ID0gYXJyYXkoKTsKCmlmICghZXh0ZW5zaW9uX2xvYWRlZCgncGdzcWwnKSkg
ewogICAgaWYoIWRsKCdwZ3NxbC5zbycpKSB7CgkJJGVycm9yX3JlYXNvbltN
RF9FX0VSUk9SXVsiRHluYW1pYyBsb2FkaW5nIGVycm9yIl1bXSA9ICdwZ3Nx
bC5zbyc7CgkJZGllIChlcnJvcl9yZXBvcnQoJGVycm9yX3JlYXNhb24pKTsK
ICAgIH0KfQppZiAoIWV4dGVuc2lvbl9sb2FkZWQoJ21ic3RyaW5nJykpIHsK
ICAgIGlmKCFkbCgnbWJzdHJpbmcuc28nKSkgewoJCSRlcnJvcl9yZWFzb25b
TURfRV9FUlJPUl1bIkR5bmFtaWMgbG9hZGluZyBlcnJvciJdW10gPSAnbWJz
dHJpbmcuc28nOwoJCWRpZSAoZXJyb3JfcmVwb3J0KCRlcnJvcl9yZWFzYW9u
KSk7CiAgICB9Cn0KCnJlcXVpcmUgJ0NvbnNvbGUvR2V0b3B0LnBocCc7Cgok
YXJncyA9IENvbnNvbGVfR2V0b3B0OjpnZXRvcHQoJGFyZ3YsICJhOmNkOmht
OnQ6diIpOwppZiAoaXNzZXQoJGFyZ3MtPm1lc3NhZ2UpKSB7CgllY2hvICIk
YXJncy0+bWVzc2FnZVxuIjsKCWRpZSAodXNhZ2UoKSk7Cn0KCQokb3B0cyA9
ICRhcmdzWzBdOwokbm9uX29wdHMgPSAkYXJnc1sxXTsKCi8qIGNvbmZpZyBw
YXJhbXMgKGRlZmF1bHQpICovCiRkYXRhYmFzZV9uYW1lID0gIm1sX2FkbWlu
IjsKJGJhc2VfdGFibGVfbmFtZSA9ICJwaHBfdXNlcnMiOwokZG9jX3BhdGgg
PSAiL2hvbWUvaXdha2lyaS9waHBfdXNlcnMvZG9jcyI7CiRhdHRhY2htZW50
X3BhdGggPSAiL2hvbWUvaXdha2lyaS9waHBfdXNlcnMvYWYiOwokZGVidWcg
PSAnT2ZmJzsKJHZpcnVzX2NoZWNrID0gJ09mZic7Cgpmb3JlYWNoICgkb3B0
cyBhcyAkb3B0KSB7CglsaXN0KCRvcHRfbmFtZSwgJG9wdF92YWwpID0gJG9w
dDsKCXN3aXRjaCAoJG9wdF9uYW1lKSB7CgkJY2FzZSAnYSc6CQkJCQkJCS8v
IG92ZXJ3cml0ZSBhdHRhY2hlbWVudCBmaWxlcyBzYXZlIHBhdGgKCQkJJGF0
dGFjaGVtZW50X3BhdGggPSAkb3B0X3ZhbDsKCQkJYnJlYWs7CgkJY2FzZSAn
Yyc6CQkJCQkJCS8vIHR1cm4gb24gdmlydXMgY2hlY2sgZmxhZwoJCQkkdmly
dXNfY2hlY2sgPSAnT24nOwoJCQlicmVhazsKCQljYXNlICdkJzoJCQkJCQkJ
Ly8gb3ZlcndyaXRlIGRhdGFiYXNlIG5hbWUKCQkJJGRhdGFiYXNlX25hbWUg
PSAkb3B0X3ZhbDsKCQkJYnJlYWs7CgkJY2FzZSAnaCc6CQkJCQkJCS8vIHBy
aW50IHVzYWdlIGFuZCBxdWl0CgkJCWRpZSh1c2FnZSgpKTsKCQkJYnJlYWs7
CgkJY2FzZSAnbSc6CQkJCQkJCS8vIG92ZXJ3cml0ZSBNYWlsaW5nTGlzdCB0
YWJsZW5hbWUKCQkJJGJhc2VfdGFibGVfbmFtZSA9ICRvcHRfdmFsOwoJCQli
cmVhazsKCQljYXNlICd0JzoJCQkJCQkJLy8gb3ZlcndyaXRlIGRvY3VtZW50
IHNhdmUgcGF0aAoJCQkkZG9jX3BhdGggPSAkb3B0X3ZhbDsKCQkJYnJlYWs7
CgkJY2FzZSAndic6CQkJCQkJCS8vIHR1cm4gb24gZGVidWcgZmxhZwoJCQkk
ZGVidWcgPSAnT24nOwoJCQlicmVhazsKCX0KfQoJCQkKCiRzZXFfdGIgICAg
PSAkYmFzZV90YWJsZV9uYW1lIC4gIl9zZXEiOyAKJGhlYWRlcl90YiA9ICRi
YXNlX3RhYmxlX25hbWUgLiAiX2h0YiI7IAokYXR0YWNoX3RiID0gJGJhc2Vf
dGFibGVfbmFtZSAuICJfYXRiIjsgCiRyZWZfdGIgICAgPSAkYmFzZV90YWJs
ZV9uYW1lIC4gIl9ydGIiOyAKJGZsYWdfdGIgICA9ICRiYXNlX3RhYmxlX25h
bWUgLiAiX2Z0YiI7IAoKCi8vIG1haW4KJGZpbGVzID0gYXJyYXkoKTsKaWYg
KGNvdW50KCRub25fb3B0cykgPT0gMSkgewoJJGZpbGVzW10gPSAicGhwOi8v
c3RkaW4iOwp9IGVsc2UgewoJYXJyYXlfc2hpZnQoJG5vbl9vcHRzKTsKCWZv
cmVhY2ggKCRub25fb3B0cyBhcyAkZm5hbWUpIHsKCQkkZm5hbWUgPSBlcmVn
X3JlcGxhY2UoIi8kIiwgIiIsICRmbmFtZSk7CgkJJGZuYW1lID0gKGRpcm5h
bWUoJGZuYW1lKSA9PSAnLicpID8gJFBXRC4nLycuJGZuYW1lIDogJGZuYW1l
OwoJCXN3aXRjaCAoZmlsZXR5cGUoJGZuYW1lKSkgewoJCQljYXNlICdkaXIn
IDogCgkJCQlpZiAoJGRpcl9oID0gb3BlbmRpcigkZm5hbWUpKSB7CgkJCQkJ
d2hpbGUgKCRmaWxlID0gcmVhZGRpcigkZGlyX2gpKSB7CgkJCQkJCWlmIChz
dHJuY21wKCRmaWxlLCAiLiIsIDEpKSB7CgkJCQkJCQkkZnVsbF9wYXRoX25h
bWUgPSAkZm5hbWUuJy8nLiRmaWxlOwoJCQkJCQkJaWYgKGlzX2ZpbGUoJGZ1
bGxfcGF0aF9uYW1lKSkgewoJCQkJCQkJCSRmaWxlc1tdID0gJGZ1bGxfcGF0
aF9uYW1lOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQkJY2xv
c2VkaXIoJGRpcl9oKTsKCQkJCWJyZWFrOwkJCQoJCQljYXNlICdmaWxlJyA6
IAoJCQkJJGZpbGVzW10gPSAkZm5hbWU7CgkJCQlicmVhazsKCQkJZGVmYXVs
dDoKCQkJCWRpZSh1c2FnZSgpKTsKCQl9Cgl9Cn0KCiR0b3RhbF9maWxlcyA9
IGNvdW50KCRmaWxlcyk7CiRyZWdpc3RfZmlsZXMgPSAwOwokYXR0YWNobWVu
dF9maWxlcyA9IDA7CiRza2lwX2ZpbGVzID0gMDsKCiRjb25uID0gQHBnX2Nv
bm5lY3QoImhvc3Q9bG9jYWxob3N0IGRibmFtZT17JGRhdGFiYXNlX25hbWV9
Iik7CmlmICghJGNvbm4pIHsKCSRlcnJvcl9yZWFzb25bTURfRV9FUlJPUl1b
IkNhblwndCBjb25uZWN0IFBvc3RncmVTUUwgc2VydmVyIl1bXSA9ICRkYXRh
YmFzZV9uYW1lOwoJZGllIChlcnJvcl9yZXBvcnQoJGVycm9yX3JlYXNhb24p
KTsKfQoKcmVxdWlyZSAnTWFpbC9taW1lRGVjb2RlLnBocCc7CgokcGFyYW1z
ID0gYXJyYXkoCiAgICAgICAgICAgICAgICAnaW5jbHVkZV9ib2RpZXMnID0+
IHRydWUsCiAgICAgICAgICAgICAgICAnZGVjb2RlX2hlYWRlcnMnID0+IHRy
dWUsCiAgICAgICAgICAgICAgICAnZGVjb2RlX2JvZGllcycgID0+IHRydWUK
ICAgICAgICAgICAgICAgICk7CgkKaWYgKCRkZWJ1ZyA9ICdPbicpIHsKCSRk
ZnAgPSBmb3BlbigicGhwOi8vc3RkZXJyIiwgInciKTsKfQoKZm9yZWFjaCAo
JGZpbGVzIGFzICRmbmFtZSkgewoJJGF0dGFjaF9maWxlcyA9IGFycmF5KCk7
CgkkZnAgPSBmb3BlbigkZm5hbWUsICJyIik7Cgl3aGlsZSghZmVvZigkZnAp
KSB7CgkJJGluX2ZpbGUgLj0gZnJlYWQoJGZwLCA0MDk2KTsKCX0KCWZjbG9z
ZSgkZnApOwoKCSRtID0gbmV3IE1haWxfTWltZWRlY29kZSgkaW5fZmlsZSwg
IlxuIik7Cgl1bnNldCgkaW5fZmlsZSk7CgkkbV9zdHJ1Y3QgPSAkbS0+ZGVj
b2RlKCRwYXJhbXMpOwoJaWYgKCFlbXB0eSgkbS0+X2Vycm9yKSkgewoJCSsr
JHNraXBfZmlsZXM7CgkJJGVycm9yX3JlYXNvbltNRF9FX1dBUk5JTkddWyRt
LT5fZXJyb3JdW10gPSAkZm5hbWU7CgkJY29udGludWU7Cgl9IAoKCSRpbnB1
dF9lbmNvZGluZyA9ICghZW1wdHkoJG1fc3RydWN0LT5jdHlwZV9wYXJhbWV0
ZXJzWyJjaGFyc2V0Il0pKSA/ICRtX3N0cnVjdC0+Y3R5cGVfcGFyYW1ldGVy
c1siY2hhcnNldCJdIDogIklTTy0yMDIyLUpQIjsKCSRpbnB1dF9lbmNvZGlu
ZyA9IHRyaW0oc3RydG9rKCRpbnB1dF9lbmNvZGluZywgIjsiKSk7CglpZiAo
JGRlYnVnID0gJ09uJykgewoJCSRkZm5hbWUgPSBiYXNlbmFtZSgkZm5hbWUp
OwoJCSRlbl9zdHIgPSAnRW5jb2RpbmcgdHlwZTogJy4kaW5wdXRfZW5jb2Rp
bmcuIlx0XHQiLiRkZm5hbWUuIlxuIjsKCQlmd3JpdGUoJGRmcCwgJGVuX3N0
cik7Cgl9CgkkbV9oZWFkZXIgPSAkbS0+X2hlYWRlcjsKCSRoZnJvbSAgICA9
ICghZW1wdHkoJG1fc3RydWN0LT5oZWFkZXJzWyJmcm9tIl0pKSAgICAgICAg
PyBtYl9jb252ZXJ0X2VuY29kaW5nKHRyaW0oJG1fc3RydWN0LT5oZWFkZXJz
WyJmcm9tIl0pLCAiRVVDLUpQIiwgJGlucHV0X2VuY29kaW5nKSA6IE5VTEw7
CgkkaHN1YmplY3QgPSAoIWVtcHR5KCRtX3N0cnVjdC0+aGVhZGVyc1sic3Vi
amVjdCJdKSkgICAgID8gbWJfY29udmVydF9lbmNvZGluZyh0cmltKCRtX3N0
cnVjdC0+aGVhZGVyc1sic3ViamVjdCJdKSwgIkVVQy1KUCIsICRpbnB1dF9l
bmNvZGluZykgOiBOVUxMOwoJJGhtc2dfaWQgID0gKCFlbXB0eSgkbV9zdHJ1
Y3QtPmhlYWRlcnNbIm1lc3NhZ2UtaWQiXSkpICA/IHRyaW0oJG1fc3RydWN0
LT5oZWFkZXJzWyJtZXNzYWdlLWlkIl0pIDogTlVMTDsKCSRocmVwX2lkcyA9
ICghZW1wdHkoJG1fc3RydWN0LT5oZWFkZXJzWyJpbi1yZXBseS10byJdKSkg
PyBpc19tZXNzYWdlX2lkcyhzcGxpdCgiWyBcdF0iLCB0cmltKCRtX3N0cnVj
dC0+aGVhZGVyc1siaW4tcmVwbHktdG8iXSkpKSA6IGFycmF5KCk7CgkkaHJl
Zl9pZHMgPSAoIWVtcHR5KCRtX3N0cnVjdC0+aGVhZGVyc1sicmVmZXJlbmNl
cyJdKSkgID8gaXNfbWVzc2FnZV9pZHMoc3BsaXQoIlsgXHRdIiwgdHJpbSgk
bV9zdHJ1Y3QtPmhlYWRlcnNbInJlZmVyZW5jZXMiXSkpKSA6IGFycmF5KCk7
CgkkaGRhdGUgICAgPSAoIWVtcHR5KCRtX3N0cnVjdC0+aGVhZGVyc1siZGF0
ZSJdKSkgICAgICAgID8gdHJpbSgkbV9zdHJ1Y3QtPmhlYWRlcnNbImRhdGUi
XSkgOiBOVUxMOwoKCWlmIChlbXB0eSgkaGZyb20pIHx8IGVtcHR5KCRobXNn
X2lkKSB8fCBlbXB0eSgkaGRhdGUpKSB7CgkJKyskc2tpcF9maWxlczsKCQkk
ZXJyb3JfcmVhc29uW01EX0VfV0FSTklOR11bIlVua25vd24gbWFpbCBoZWFk
ZXIgZm9ybWF0Il1bXSA9ICRmbmFtZTsKCQljb250aW51ZTsKCX0KCSRocmVw
X2lkID0gIiI7CgkkaHJlZl9pZCA9ICIiOwoJaWYgKGVtcHR5KCRocmVwX2lk
cykgYW5kICFlbXB0eSgkaHJlZl9pZHMpKSB7CgkJJGhyZXBfaWRzW109ICRo
cmVmX2lkc1tjb3VudCgkaHJlZl9pZHMpLTFdOwoJfQoJaWYgKCFlbXB0eSgk
aHJlcF9pZHMpKSB7CgkJJGhyZXBfaWQgPSAkaHJlcF9pZHNbY291bnQoJGhy
ZXBfaWRzKS0xXTsKCX0KCgkkaGZyb20gICAgPSBhZGRzbGFzaGVzKGVyZWdf
cmVwbGFjZSgiWyBcdF0rIiwgIiAiLCAkaGZyb20pKTsKCSRoc3ViamVjdCA9
IGFkZHNsYXNoZXMoZXJlZ19yZXBsYWNlKCJbIFx0XSsiLCAiICIsICRoc3Vi
amVjdCkpOwoJJGhtc2dfaWQgID0gYWRkc2xhc2hlcygkaG1zZ19pZCk7Ci8v
CSRocmVwX2lkICA9IGFkZHNsYXNoZXMoJGhyZXBfaWQpOwoJJGhkYXRlID0g
ZGF0ZSgiWS1tLWQgSDppOnMiLCBzdHJ0b3RpbWUoJGhkYXRlKSk7CgkkcmVz
dWx0ID0gQHBnX2V4ZWMoIlNFTEVDVCBtc2dfaWQgRlJPTSAkaGVhZGVyX3Ri
IFdIRVJFIG1zZ19pZD0neyRobXNnX2lkfSciKTsKCglpZiAocGdfbnVtcm93
cygkcmVzdWx0KSA+IDApIHsKCQkrKyRza2lwX2ZpbGVzOwoJCSRlcnJvcl9y
ZWFzb25bTURfRV9XQVJOSU5HXVsiRHVwbGljYXRlIFwiTWVzc2FnZS1JZDog
XCIgZmllbGQiXVtdID0gJGZuYW1lOwoJCWNvbnRpbnVlOwoJfSAKCgkkZmls
ZV9zZXEgPSBAcGdfZXhlYygiU0VMRUNUIG5leHR2YWwoJ3skc2VxX3RifScp
Iik7CgoJaWYgKCgkZXJyX21zZyA9IHBnX2Vycm9ybWVzc2FnZSgkY29ubikp
ICE9IEZBTFNFKSB7CgkJKyskc2tpcF9maWxlczsKCQkkZXJyb3JfcmVhc29u
W01EX0VfRVJST1JdWyRlcnJfbXNnXVtdID0gJGZuYW1lOwoJCWRpZShlcnJv
cl9yZXBvcnQoJGVycm9yX3JlYXNvbikpOwoJfSAKCgkkc2VxID0gcGdfcmVz
dWx0KCRmaWxlX3NlcSwgMCwgMCk7CgkkbV9ib2R5ID0gYXJyYXkoKTsKCXBh
cnNlX2JvZHkoJiRzZXEsICYkbV9zdHJ1Y3QsICYkbV9ib2R5KTsKCglpZiAo
Y291bnQoJG1fYm9keVsndGV4dCddKSA9PSAwKSB7CgkJJG1fYm9keVsndGV4
dCddW109ICcopLOkzqXhobyl66TLpM/L3Mq4pKy03qTepOykxqSkpN6ku6Tz
KSc7CgkJJGVycm9yX3JlYXNvbltNRF9FX05PVElDRV1bJ01haWwgYm9keSBp
cyBlbXB0eSddW10gPSAieyRkb2NfcGF0aH0veyRzZXF9IjsKCX0KCWlmIChj
b3VudCgkbV9ib2R5Wyd0ZXh0J10pID4gMCkgewoJCQoJCSRmcCA9IGZvcGVu
KCJ7JGRvY19wYXRofS97JHNlcX0iLCAidyIpOwoJCWlmICghJGZwKSB7CgkJ
CSRlcnJvcl9yZWFzb25bTURfRV9FUlJPUl1bJ0NhblwndCBvcGVuIGZpbGUn
XVtdID0gInskZG9jX3BhdGh9L3skc2VxfSI7CgkJCWRpZShlcnJvcl9yZXBv
cnQoJGVycm9yX3JlYXNvbikpOwoJCX0gCgoJCWZ3cml0ZSgkZnAsIG1iX2Nv
bnZlcnRfZW5jb2RpbmcoJG1faGVhZGVyLCAiRVVDLUpQIiwgJGlucHV0X2Vu
Y29kaW5nKSk7CgkJZndyaXRlKCRmcCwgIlxuXG4iKTsKCQlmb3IgKCRpPTA7
ICRpIDwgY291bnQoJG1fYm9keVsndGV4dCddKTsgKyskaSkgewoJCQlmd3Jp
dGUoJGZwLCAkbV9ib2R5Wyd0ZXh0J11bJGldKTsKCQl9CgkJZmNsb3NlKCRm
cCk7CgkJY2htb2QoInskZG9jX3BhdGh9L3skc2VxfSIsIDA2NDQpOwoJCWlm
ICghdG91Y2goInskZG9jX3BhdGh9L3skc2VxfSIsIHN0cnRvdGltZSgkaGRh
dGUpKSkgewoJCQkrKyRza2lwX2ZpbGVzOwoJCQkkZXJyb3JfcmVhc29uW01E
X0VfV0FSTklOR11bIlwiRGF0ZTogXCIgZmllbGQgaXMgYmFkIGZvcm1hdCJd
W10gPSAkZm5hbWU7CgkJCXVubGluaygieyRkb2NfcGF0aH0veyRzZXF9Iik7
CgkJCWNvbnRpbnVlOwoJCX0KCX0KCglpZihjb3VudCgkbV9ib2R5WydhdHRh
Y2htZW50cyddKSA+IDApIHsKCQlpZiAoIWZpbGVfZXhpc3RzKCJ7JGF0dGFj
aG1lbnRfcGF0aH0veyRzZXF9IikpICRmX2RpciA9IG1rZGlyKCJ7JGF0dGFj
aG1lbnRfcGF0aH0veyRzZXF9IiwgMDc1NSk7CgkJaWYgKCEkZl9kaXIpIHsK
CQkJJGVycm9yX3JlYXNvbltNRF9FX0VSUk9SXVsiQ2FuXCd0IGNyZWF0ZSBk
aXJlY3RvcnkiXVtdID0gInskYXR0YWNobWVudF9wYXRofS97JHNlcX0iOwoJ
CQl1bmxpbmsoInskZG9jX3BhdGh9L3skc2VxfSIpOwoJCQlkaWUoZXJyb3Jf
cmVwb3J0KCRlcnJvcl9yZWFzb24pKTsKCQl9CgkJZm9yICgkaT0wOyAkaSA8
IGNvdW50KCRtX2JvZHlbJ2F0dGFjaG1lbnRzJ10pOyArKyRpKSB7CgkJCSRm
dWxsX3BhdGggPSAkYXR0YWNobWVudF9wYXRoLicvJy4kc2VxLicvJy4kbV9i
b2R5WydhdHRhY2htZW50cyddWyRpXVsnZmlsZW5hbWUnXTsKCQkJJGZwID0g
Zm9wZW4oJGZ1bGxfcGF0aCwgInciKTsKCQkJaWYgKCEkZnApIHsKCQkJCSRl
cnJvcl9yZWFzb25bTURfRV9FUlJPUl1bJ0NhblwndCBvcGVuIGZpbGUnXVtd
ID0gInskZnVsbF9wYXRofSI7CgkJCQl1bmxpbmsoInskZG9jX3BhdGh9L3sk
c2VxfSIpOwoJCQkJZm9yZWFjaCgkYXR0YWNoX2ZpbGVzIGFzICRkZWxldGVf
ZmlsZSkgewoJCQkJCXVubGluaygieyRkb2NfcGF0aH0veyRzZXF9Iik7CgkJ
CQl9CgkJCQlybWRpcigieyRhdHRhY2htZW50X3BhdGh9L3skc2VxfSIpOwoJ
CQkJZGllKGVycm9yX3JlcG9ydCgkZXJyb3JfcmVhc29uKSk7CgkJCX0gCgkJ
CWZ3cml0ZSgkZnAsICRtX2JvZHlbJ2F0dGFjaG1lbnRzJ11bJGldWydib2R5
J10pOwoJCQlmY2xvc2UoJGZwKTsKCQkJY2htb2QoInskZnVsbF9wYXRofSIs
IDA2NDQpOwoJCQkkYXR0YWNoX2ZpbGVzW10gPSAkZnVsbF9wYXRoOwoJCX0K
CX0KCSRmX3RyYW5zYWN0aW9uID0gVFJVRTsKCUBwZ19leGVjKCJCRUdJTiIp
OwoJaWYgKCgkZXJyX21zZyA9IHBnX2Vycm9ybWVzc2FnZSgkY29ubikpICE9
IEZBTFNFKSB7CgkJKyskc2tpcF9maWxlczsKCQkkZXJyb3JfcmVhc29uW01E
X0VfRVJST1JdWyRlcnJfbXNnXVtdID0gJGZuYW1lOwoJCWRpZShlcnJvcl9y
ZXBvcnQoJGVycm9yX3JlYXNvbikpOwoJfSAKCQoJJHNxbCA9ICJJTlNFUlQg
SU5UTyAkaGVhZGVyX3RiIFZBTFVFUyAoeyRzZXF9LCAneyRoZnJvbX0nLCAn
eyRoc3ViamVjdH0nLCAneyRoZGF0ZX0nLCAneyRobXNnX2lkfScsICd7JGhy
ZXBfaWR9JykiOwoJQHBnX2V4ZWMoJHNxbCk7CglpZiAoKCRlcnJfbXNnID0g
cGdfZXJyb3JtZXNzYWdlKCRjb25uKSkgIT0gRkFMU0UpIHsKCQkkZXJyb3Jf
cmVhc29uW01EX0VfU1FMRVJSXVskZXJyX21zZ11bXSA9ICRzcWw7CgkJJGZf
dHJhbnNhY3Rpb24gPSBGQUxTRTsKCX0gCgkKCWlmICgkZl90cmFuc2FjdGlv
bikgewoJCSRzcWw9ICJJTlNFUlQgSU5UTyAkZmxhZ190YiBWQUxVRVMgKHsk
c2VxfSwgMCwgMCkiOwoJCUBwZ19leGVjKCRzcWwpOwoJCWlmICgoJGVycl9t
c2cgPSBwZ19lcnJvcm1lc3NhZ2UoJGNvbm4pKSAhPSBGQUxTRSkgewoJCQkk
ZXJyb3JfcmVhc29uW01EX0VfU1FMRVJSXVskZXJyX21zZ11bXSA9ICRzcWw7
CgkJCSRmX3RyYW5zYWN0aW9uID0gRkFMU0U7CgkJfSAKCX0KCglpZiAoJGZf
dHJhbnNhY3Rpb24pIHsKCQlpZiAoY291bnQoJG1fYm9keVsnYXR0YWNobWVu
dHMnXSkgPiAwKSB7CgkJCSsrJGF0dGFjaG1lbnRfZmlsZXM7CgkJfQoJCWZv
cigkaT0wOyAkaSA8IGNvdW50KCRtX2JvZHlbJ2F0dGFjaG1lbnRzJ10pIDsg
KyskaSkgewoJCQkkY3R5cGUgPSAkbV9ib2R5WydhdHRhY2htZW50cyddWyRp
XVsnY3R5cGUnXTsKCQkJJGNzdWJ0eXBlID0gJG1fYm9keVsnYXR0YWNobWVu
dHMnXVskaV1bJ2NzdWJ0eXBlJ107CgkJCSRmaWxlbmFtZSA9ICRtX2JvZHlb
J2F0dGFjaG1lbnRzJ11bJGldWydmaWxlbmFtZSddOwoJCQkkZmlsZV9zaXpl
ID0gZmlsZXNpemUoInskYXR0YWNobWVudF9wYXRofS97JHNlcX0veyRmaWxl
bmFtZX0iKTsKCQkJJHNxbCA9ICJJTlNFUlQgSU5UTyB7JGF0dGFjaF90Yn0g
VkFMVUVTICh7JHNlcX0sIHskZmlsZV9zaXplfSwgJ3skY3R5cGV9JywgJ3sk
Y3N1YnR5cGV9JywgJ3skZmlsZW5hbWV9JykiOwoJCQlAcGdfZXhlYygkc3Fs
KTsKCQkJaWYgKCgkZXJyX21zZyA9IHBnX2Vycm9ybWVzc2FnZSgkY29ubikp
ICE9IEZBTFNFKSB7CgkJCQkkZXJyb3JfcmVhc29uW01EX0VfU1FMRVJSXVsk
ZXJyX21zZ11bXSA9ICRzcWw7CgkJCQkkZl90cmFuc2FjdGlvbiA9IEZBTFNF
OwoJCQkJYnJlYWs7CgkJCX0gCgkJfQoJfQoKCWlmICgkZl90cmFuc2FjdGlv
bikgewoJCWlmICghZW1wdHkoJGhyZWZfaWRzKSkgewoJCQlmb3JlYWNoKCRo
cmVmX2lkcyBhcyAkaHJlZl9pZCkgewoJCQkJJHNxbCA9ICJJTlNFUlQgSU5U
TyAkcmVmX3RiIFZBTFVFUyAoeyRzZXF9LCAneyRocmVmX2lkfScpIjsKCQkJ
CUBwZ19leGVjKCRzcWwpOwoJCQkJaWYgKCgkZXJyX21zZyA9IHBnX2Vycm9y
bWVzc2FnZSgkY29ubikpICE9IEZBTFNFKSB7CgkJCQkJJGVycm9yX3JlYXNv
bltNRF9FX0VSUk9SXVskZXJyX21zZ11bXSA9ICRzcWw7CgkJCQkJJGZfdHJh
bnNhY3Rpb24gPSBGQUxTRTsKCQkJCQlicmVhazsKCQkJCX0gCgkJCX0KCQl9
Cgl9CgoJaWYgKCRmX3RyYW5zYWN0aW9uKSB7CgkJQHBnX2V4ZWMoIkNPTU1J
VCIpOwoJCWlmICgoJGVycl9tc2cgPSBwZ19lcnJvcm1lc3NhZ2UoJGNvbm4p
KSAhPSBGQUxTRSkgewoJCQkkZXJyb3JfcmVhc29uW01EX0VfRVJST1JdWyRl
cnJfbXNnXVtdID0gJGZuYW1lOwoJCQlkaWUoZXJyb3JfcmVwb3J0KCRlcnJv
cl9yZWFzb24pKTsKCQl9IAoJCSsrJHJlZ2lzdF9maWxlczsKCX0gZWxzZSB7
CgkJQHBnX2V4ZWMoIlJPTExCQUNLIik7CgkJaWYgKCgkZXJyX21zZyA9IHBn
X2Vycm9ybWVzc2FnZSgkY29ubikpICE9IEZBTFNFKSB7CgkJCSRlcnJvcl9y
ZWFzb25bTURfRV9FUlJPUl1bJGVycl9tc2ddW10gPSAkZm5hbWU7CgkJCWRp
ZShlcnJvcl9yZXBvcnQoJGVycm9yX3JlYXNvbikpOwoJCX0gCgkJKyskc2tp
cF9maWxlczsKCQl1bmxpbmsoInskZG9jX3BhdGh9L3skc2VxfSIpOwoJCWZv
cmVhY2goJGF0dGFjaF9maWxlcyBhcyAkZGVsZXRlX2ZpbGUpIHsKCQkJdW5s
aW5rKCRkZWxldGVfZmlsZSk7CgkJfQoJfQp9CmlmICgkZGVidWcgPSAnT24n
KSB7CglmY2xvc2UoJGRmcCk7Cn0KCmlmICgkdmlydXNfY2hlY2sgPSAnT24n
KSB7CglpZiAoICRleGVjX21vZGUgPSAnc3RkaW4nKSB7CgkJLy8gb25lLW1h
aWwgY2hlY2sKCQkkZGZpbGUgPSBzb3Bob3NfYW50aV92aXJ1cygieyRhdHRh
Y2htZW50X3BhdGh9L3skc2VxfSIpOwoJfSBlbHNlIHsKCQkvLyBmdWxsLW1h
aWwgY2hlY2sKCQkkZGZpbGUgPSBzb3Bob3NfYW50aV92aXJ1cygieyRhdHRh
Y2htZW50X3BhdGh9Iik7Cgl9Cn0KCnBnX2Nsb3NlKCRjb25uKTsKCgokZW5k
X3RpbWUgPSB0aW1lKCk7CiRleGVjX3RpbWUgPSAkZW5kX3RpbWUgLSAkc3Rh
cnRfdGltZTsKZWNobyAiXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS1cbiI7CmVjaG8gIr3ozf3C0L7dpdWloaWkpevB7b/0
IDogIi4kdG90YWxfZmlsZXMuIlxuIjsKZWNobyAiICC/t7WsxdDPv6XVpaGl
pKXrv/QgOiAiLiRyZWdpc3RfZmlsZXMuIlxuIjsKZWNobyAiICAgICAgICAo
xbrJ1b3xzuDJ1SkgOiAiLiRhdHRhY2htZW50X2ZpbGVzLiJcbiI7CnByaW50
X3IoJGRmaWxlKTsKZWNobyAiICCluaWtpcOl16XVpaGlpKXrv/QgOiAiLiRz
a2lwX2ZpbGVzLiJcbiI7CmVycm9yX3JlcG9ydCgkZXJyb3JfcmVhc29uKTsK
ZWNobyAiICCzq7vPu/657yAgICAgICAgICAgOiAiLmRhdGUoIki7/mnKrHPJ
wyIsICRzdGFydF90aW1lKS4iXG4iOwplY2hvICIgIL2qzru7/rnvICAgICAg
ICAgICA6ICIuZGF0ZSgiSLv+acqsc8nDIiwgJGVuZF90aW1lKS4iXG4iOwpl
Y2hvICIgILzCudS7/rTWICAgICAgICAgICA6ICIuZ21kYXRlKCJIu/601mnK
rHPJwyIsICRleGVjX3RpbWUpLiJcblxuIjsKCgpmdW5jdGlvbiBnZXRfbWlj
cm90aW1lKCkgewoJbGlzdCgkdXNlYywgJHNlYykgPSBleHBsb2RlKCIgIixt
aWNyb3RpbWUoKSk7IAoJcmV0dXJuICgoZmxvYXQpJHNlYyArIChmbG9hdCkk
dXNlYyk7IAp9IAoKZnVuY3Rpb24gaXNfbWVzc2FnZV9pZHMoJG1zZ19pZHMp
IHsKCSRyZXRfdmFsdWVzID0gYXJyYXkoKTsKCWlmICghZW1wdHkoJG1zZ19p
ZHMpKSB7CgkJZm9yZWFjaCAoJG1zZ19pZHMgYXMgJG1zZ19pZCkgewoJCQll
cmVnKCJeKDwuKz4pJCIsICRtc2dfaWQsICR2YWwpOwoJCQlpZiAoJHZhbFsx
XSAhPSBOVUxMKSB7CgkJCQkkcmV0X3ZhbHVlc1tdID0gYWRkc2xhc2hlcygk
dmFsWzFdKTsKCQkJfQoJCX0KCX0KCXJldHVybiAkcmV0X3ZhbHVlczsKfQoK
ZnVuY3Rpb24gcGFyc2VfYm9keSgmJHNlcSwgJiRtLCAmJHBhcnRzKSB7Cglp
ZighZW1wdHkoJG0tPnBhcnRzKSkgewoJCWZvciAoJGk9MDsgJGkgPCBjb3Vu
dCgkbS0+cGFydHMpOyArKyRpKSB7CgkJCXBhcnNlX2JvZHkoJHNlcSwgJG0t
PnBhcnRzWyRpXSwgJHBhcnRzKTsKCQl9Cgl9IGVsc2UgewoJCSRjZmlsZW5h
bWUgPSBOVUxMOwoJCSRjdHlwZSA9IHN0cnRvbG93ZXIoJG0tPmN0eXBlX3By
aW1hcnkgLiAnLycgLiAkbS0+Y3R5cGVfc2Vjb25kYXJ5KTsKCQkkY2ZpbGVu
YW1lID0gKCFlbXB0eSgkbS0+Y3R5cGVfcGFyYW1ldGVyc1snbmFtZSddKSkg
PyB0cmltKCRtLT5jdHlwZV9wYXJhbWV0ZXJzWyduYW1lJ10pIDogJGNmaWxl
bmFtZTsKCQkkY2ZpbGVuYW1lID0gKCFlbXB0eSgkbS0+ZF9wYXJhbWV0ZXJz
WydmaWxlbmFtZSddKSkgPyB0cmltKCRtLT5kX3BhcmFtZXRlcnNbJ2ZpbGVu
YW1lJ10pIDogJGNmaWxlbmFtZTsKCQkkY2ZpbGVuYW1lID0gIWVtcHR5KCRj
ZmlsZW5hbWUpID8gbWJfY29udmVydF9lbmNvZGluZyh0cmltKCRjZmlsZW5h
bWUpLCAiRVVDLUpQIiwgIkpJUyIpIDogJGNmaWxlbmFtZTsKCQlzd2l0Y2gg
KCRjdHlwZSkgewoJCQljYXNlICd0ZXh0L3BsYWluJzoKCQkJY2FzZSAnbWVz
c2FnZS9yZmM4MjInOgoJCQkJJGlucHV0X2VuY29kaW5nID0gKCFlbXB0eSgk
bS0+Y3R5cGVfcGFyYW1ldGVyc1siY2hhcnNldCJdKSkgPyAkbS0+Y3R5cGVf
cGFyYW1ldGVyc1siY2hhcnNldCJdIDogIklTTy0yMDIyLUpQIjsKCQkJCWlm
KCRjZmlsZW5hbWUgIT0gTlVMTCkgewoJCQkJCSRwYXJ0c1snYXR0YWNobWVu
dHMnXVtdID0gYXJyYXkgKCdmaWxlbmFtZScgPT4gJGNmaWxlbmFtZSwgJ2N0
eXBlJyA9PiAkbS0+Y3R5cGVfcHJpbWFyeSwgJ2NzdWJ0eXBlJyA9PiAkbS0+
Y3R5cGVfc2Vjb25kYXJ5LCAnYm9keScgPT4gJG0tPmJvZHkpOwoJCQkJfSBl
bHNlIHsKCQkJCQkkcGFydHNbJ3RleHQnXVtdID0gbWJfY29udmVydF9lbmNv
ZGluZygkbS0+Ym9keSwgIkVVQy1KUCIsICRpbnB1dF9lbmNvZGluZyk7CgkJ
CQl9CgkJCQlicmVhazsKCQkJZGVmYXVsdDoKCQkJCWlmKCRjZmlsZW5hbWUg
IT0gTlVMTCkgewoJCQkJCSRwYXJ0c1snYXR0YWNobWVudHMnXVtdID0gYXJy
YXkgKCdmaWxlbmFtZScgPT4gJGNmaWxlbmFtZSwgJ2N0eXBlJyA9PiAkbS0+
Y3R5cGVfcHJpbWFyeSwgJ2NzdWJ0eXBlJyA9PiAkbS0+Y3R5cGVfc2Vjb25k
YXJ5LCAnYm9keScgPT4gJG0tPmJvZHkpOwoJCQkJfSBlbHNlIHsKCQkJCQkk
Y2ZpbGVuYW1lID0gJHNlcSAuICcuJyAuICRtLT5jdHlwZV9zZWNvbmRhcnk7
CgkJCQkJJHBhcnRzWydhdHRhY2htZW50cyddW10gPSBhcnJheSAoJ2ZpbGVu
YW1lJyA9PiAkY2ZpbGVuYW1lLCAnY3R5cGUnID0+ICRtLT5jdHlwZV9wcmlt
YXJ5LCAnY3N1YnR5cGUnID0+ICRtLT5jdHlwZV9zZWNvbmRhcnksICdib2R5
JyA9PiAkbS0+Ym9keSk7CgkJCQl9CgkJfQoJfQp9CgpmdW5jdGlvbiB1c2Fn
ZSgpIHsKCWVjaG8gIlVzYWdlOiBtaW1lZC5waHAgLW0gbWxfbmFtZSBbZmls
ZW5hbWVdIC4uLlxuIjsKCWVjaG8gIlxuIjsKCWVjaG8gIiAgIGZpbGVuYW1l
IDogZGlyZWN0b3J5IG9yIGZpbGVcbiI7CgllY2hvICIgICBFeGFtcGxlICBc
biI7CgllY2hvICIgICAgICQgbWltZWQucGhwIC1tIG1sX25hbWUgPCBmaWxl
ICAgICAgICAgICAgICAgOyBmaWx0ZXJcbiI7CgllY2hvICIgICAgICQgbWlt
ZWQucGhwIC1tIG1sX25hbWUgZmlsZTEgZmlsZTIgLi4uXG4iOwoJZWNobyAi
ICAgICAkIG1pbWVkLnBocCAtbSBtbF9uYW1lIGRpcjEgZGlyMiAuLi5cbiI7
CgllY2hvICIgICAgICQgbWltZWQucGhwIC1tIG1sX25hbWUgZmlsZTEgZGly
MSBmaWxlMiAuLi5cbiI7CgllY2hvICJcbiI7Cn0KCmZ1bmN0aW9uIGVycm9y
X3JlcG9ydCgkZXJyb3JzLCAkZXJyb3JfbGV2ZWw9TURfRV9XQVJOSU5HKSB7
Cglmb3IoJGk9MDsgJGkgPD0gJGVycm9yX2xldmVsOyArKyRpKSB7CgkJaWYg
KGNvdW50KCRlcnJvcnNbJGldKSA+IDApIHByaW50X3IoJGVycm9yc1skaV0p
OwoJfQp9CgpmdW5jdGlvbiBzb3Bob3NfYW50aV92aXJ1cygkcGF0aCkgewoJ
JGR1cnR5X2ZpbGVzID0gYXJyYXkoKTsKCSRzY2FuX21zZyA9IGAvdXNyL2xv
Y2FsL2Jpbi9zd2VlcCAtYXJjaGl2ZSAtYWxsIHskcGF0aH1gOwoJJHNjYW5f
bXNnID0gc3BsaXQoIlxuIiwgJHNjYW5fbXNnKTsKCWZvcmVhY2ggKCRzY2Fu
X21zZyBhcyAkdGVtcCkgewoJCWlmIChwcmVnX21hdGNoKCIvXj4+PiBWaXJ1
cyBcJyguKz8pXCcgZm91bmQgaW4gZmlsZSAoLiopJC8iLCAkdGVtcCwgJG1h
dGNoZXMpKSB7CgkJCSRkdXJ0eV9maWxlc1tdID0gYXJyYXkgKCAnVmlydXNU
eXBlJyA9PiAkbWF0Y2hlc1sxXSwgJ2ZpbGVuYW1lJyA9PiAkbWF0Y2hlc1sy
XSk7CgkJfQoJfQoJcmV0dXJuICRkdXJ0eV9maWxlczsKfQo8L3NjcmlwdD4K
--------=_1009191037.FFFC645B.FFFC664B--