[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

20011015: HDF to areafile



>From: Darren Gallant <address@hidden>
>Organization: UCAR/JOSS
>Keywords: 200110151753.f9FHrZ118806 McIDAS TeraScan HDF AREA

Darren,

I am in Madison, WI right now, so I can't help out with your HDF to AREA
conversion process.  It may be very helpful to check out the beginning
section(s) of the McIDAS Programming Manual (go to the Unidata McIDAS
HomePage; click on documentation (Doc) and then select the application
programming manual).  The first couple of chapters contain information
on programming in the McIDAS environment.  Some of the info is on how
to build local programs, and linking is part of building.

I will be able to look at your program in depth when I get back to Boulder
next Monday.

Tom

>The attached program extracts image data and pertinent parameters from a
>HDF satellite image file. I use a precompiled HDf library for
>Solaris and the following to compile the code: f77 -O -o HDF2AREA
>HDF2AREA.f -L/home/gallant/bin/HDF/current/4.1r3_solaris/lib -lmfhdf -ldf
>-ljpeg -lz -lnsl -L/usr/local/lib.
>
>In order to create an areafile from the HDF image data, I would just place
>in HDF2AREA.f the needed lines of code from makearea.pgm. Unfortunately, I
>don't know how to compile HDF2AREA with Mcidas function calls. What lines
>would I need in my makefile to compile code containing calls to Mcidas
>functions?
>
>Thanks
>
>Darren
>
>
>Darren R. Gallant              UCAR/JOSS
>Programmer/Technician           Joint OfFice Of Science Support
>303-497-2634                    P.O. Box 3000
>address@hidden                Boulder,CO 80307-30000
>
>
>---559023410-758783491-1003168409=:1356
>Content-Type: TEXT/PLAIN; charset=US-ASCII; name="HDF2AREA.f"
>Content-Transfer-Encoding: BASE64
>Content-ID: <Pine.GSO.4.33.0110151153290.1356@thunder>
>Content-Description: 
>Content-Disposition: attachment; filename="HDF2AREA.f"
>
>ICAgICAgUFJPR1JBTSBIREYyQVJFQQ0KQyAgICAgUHJvZ3JhbSBpbnB1dHMg
>SERGIGFuZCBjcmVhdGVzIGFuIEFSRUEgZmlsZSBmb3IgZWFjaCBjaGFubmVs
>DQpDCQ0KQw0KQwkNCkMNCkMqKioqKioqKioqKioqKioqKioqKioqKioqKioq
>KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCkMgICAg
>ICBzdWJyb3V0aW5lIGhkZjJhcmVhDQpDKioqKioqKioqKioqKioqKioqKioq
>KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
>DQogICAgICBJTlRFR0VSIElBUkdDLEFSR0NULExPQyxGSUxDTlQsTEVOR1RI
>DQogICAgICBJTlRFR0VSIElOVU5JLE9VVFVOSSxMT0MxLExPQw0KICAgICAg
>Y2hhcmFjdGVyIFlZREREKjUsSEhNTVNTKjYNCiAgICAgIGludGVnZXIgc2Rf
>aWQsIHNkc19pZCwgY291bnRlciwgY291bnQNCiAgICAgIGludGVnZXIgc2Rf
>aW5kZXgNCiAgICAgIGludGVnZXIgc3RhcnQoMiksIGVkZ2VzKDIpLCBzdHJp
>ZGUoMikNCiAgICAgIGludGVnZXIgaXN0YXQNCiAgICAgIGludGVnZXIgc2Zz
>dGFydCwgc2ZzZWxlY3QNCiAgICAgIGludGVnZXIgc2ZlbmRhY2MsIHNmZW5k
>LCBzZnJkYXRhLCBzZnJjZGF0YQ0KICAgICAgaW50ZWdlciBwYXNzX2RhdGUN
>CiAgICAgIGludGVnZXIqNCBERk5UX0lOVDE2LCBERkFDQ19SRUFEDQogICAg
>ICBpbnRlZ2VyKjQgRElNMSwgRElNMCwgTUFYRElNLCBGQUlMLCBNQVhfVkFS
>X0RJTVMNCiAgICAgIHBhcmFtZXRlciAoREZOVF9JTlQxNiA9IDIyLCBNQVhE
>SU0gPSA0MDAwMCwgREZBQ0NfUkVBRCA9IDEsDQogICAgICtNQVhfVkFSX0RJ
>TVMgPSAzMiwgRkFJTCA9IC0xLCBOVU0gPSA1LCBPVVRVTkkgPSAxMikNCiAg
>ICAgIGludGVnZXIgaWJ1ZmZlcihNQVhESU0vNCksIGlkaXIoNjQpDQogICAg
>ICBjaGFyYWN0ZXIqMSBjYnVmZmVyKE1BWERJTSkNCiAgICAgIGludGVnZXIq
>MiBqYnVmZmVyKE1BWERJTS8yKQ0KICAgICAgQ0hBUkFDVEVSKjI1NiBBUkdW
>LElORklMLE9VVEZJTA0KICAgICAgY2hhcmFjdGVyKjY0IHZhcl9uYW1lcyhO
>VU0pDQogICAgICBjaGFyYWN0ZXIqMjAgdW5pdHNfYnVmZmVyKE5VTSksIHNh
>dGVsbGl0ZSwgc2Vuc29yX25hbWUNCiAgICAgIGludGVnZXIqNCBpbmRleGVz
>KE5VTSksIHJhbmtzKE5VTSksIGRpbWVuc2lvbnMoTlVNLDIpDQogICAgICBy
>ZWFsKjggY2FsaWIoTlVNKSwgY2FsaWJfZXJyKE5VTSksIG9mZnNldChOVU0p
>LCANCiAgICAgK29mZnNldF9lcnIoTlVNKSwgc3RhcnRfdGltZSwgY2VudGVy
>X2xpbmUsIGNlbnRlcl9zYW1wDQogICAgICBpbnRlZ2VyIGF0dHJpYnMoTlVN
>KSwgdmFyX3R5cGVzKE5VTSkNCiAgICAgIGNoYXJhY3Rlcio4MCBjZXJyb3IN
>CiAgICAgIGVxdWl2YWxlbmNlKGlidWZmZXIsamJ1ZmZlcixjYnVmZmVyKQ0K
>ICAgICAgSU5VTkkgPSAxMQ0KICAgICAgRklMQ05UID0gMQ0KQyBHZXQgbnVt
>YmVyIG9mIGNtZCBsaW5lIGFyZ3MNCiAgICAgIEFSR0NUID0gSUFSR0MoKQ0K
>QyBJZiBubyBhcmd1bWVudHMsIGVycm9yOiBjYW4ndCB1c2Ugc3RkaW4vc3Rk
>b3V0DQogICAgICBJRiAoQVJHQ1QgLkVRLiAwKSBUSEVODQogICAgICAgICBX
>UklURSAoMCwqKSAnIFVzYWdlOiBIREYgPCBIREYgZmlsZXM+Jw0KICAgICAg
>ICAgR08gVE8gOTk5OQ0KICAgICAgRU5EIElGDQogICAgICAgIA0KQyBMb29w
>IHRvIHJ1biBwcm9ncmFtIG9uY2Ugb24gZWFjaCBmaWxlIG5hbWVkDQpDLi4u
>Li4gQW5ub3VuY2UgYmVnaW5uaW5nIG9mIHByb2dyYW0NCkMgICAgICBDQUxM
>IFNERVNUKCdNQUtFQVJFQSAtIEJlZ2luJywwKQ0KICAgICAgRE8gV0hJTEUg
>KEZJTENOVCAuTEUuIEFSR0NUKQ0KQyBJbnRpYWxpemUgYXJyYXlzDQogICAg
>ICAgICBqID0gMQ0KICAgICAgICAgZG8gd2hpbGUoaiAubGUuIGludChNQVhE
>SU0vNCkpDQogICAgICAgICAgICBpYnVmZmVyKGopID0gMA0KICAgICAgICAg
>ICAgaiA9IGogKyAxDQogICAgICAgICBlbmRkbw0KDQogICAgICAgICBqID0g
>MQ0KICAgICAgICAgZG8gd2hpbGUoaiAubGUuIGludChNQVhESU0vMikpDQog
>ICAgICAgICAgICBqYnVmZmVyKGopID0gMA0KICAgICAgICAgICAgaiA9IGog
>KyAxDQogICAgICAgICBlbmRkbw0KICAgICAgICAgDQogICAgICAgICBqID0g
>MQ0KICAgICAgICAgZG8gd2hpbGUoaiAubGUuIE1BWERJTSkNCiAgICAgICAg
>ICAgICBjYnVmZmVyKGopID0gJyAnDQogICAgICAgICAgICBqID0gaiArIDEN
>CiAgICAgICAgIGVuZGRvDQoNCiAgICAgICAgIGo9MQ0KICAgICAgICAgZG8g
>d2hpbGUoaiAubGUuIE5VTSkNCiAgICAgICAgICAgIHZhcl9uYW1lcyhqKSA9
>ICcgJw0KICAgICAgICAgICAgdW5pdHNfYnVmZmVyKGopID0gJyAnDQogICAg
>ICAgICAgICBpbmRleGVzKGopID0gMA0KICAgICAgICAgICAgcmFua3Moaikg
>PSAwDQogICAgICAgICAgICBkaW1lbnNpb25zKGosMSkgPSAwDQogICAgICAg
>ICAgICBkaW1lbnNpb25zKGosMikgPSAwDQogICAgICAgICAgICBhdHRyaWJz
>KGopID0gMA0KICAgICAgICAgICAgdmFyX3R5cGVzKGopID0gMA0KICAgICAg
>ICAgICAgY2FsaWIoaikgPSAwLg0KICAgICAgICAgICAgY2FsaWJfZXJyKGop
>ID0gMC4NCiAgICAgICAgICAgIG9mZnNldChqKSA9IDAuDQogICAgICAgICAg
>ICBvZmZzZXRfZXJyKGopID0gMC4NCiAgICAgICAgICAgIGogPSBqICsgMQ0K
>ICAgICAgICAgZW5kZG8NCg0KDQpDIEdldCBIREYgZmlsZW5hbWUgZnJvbSBj
>b21tYW5kIGxpbmUNCkMgICAgIA0KICAgICAgICAgQ0FMTCBHRVRBUkcoRklM
>Q05ULEFSR1YpDQogICAgICAgICBJTkZJTCA9IEFSR1YNCiAgICAgICAgIGNv
>dW50ZXIgPSAwDQpDIEhERiBmaWxlbmFtZSBpcyBpbiBmb3JtIG9mIGZpbGUu
>aGRmIG9yIGZpbGUNCkMgR3JhYiBub21pbmFsIHN0YXJ0IGRhdGUgYW5kIHRp
>bWUgZnJvbSBIREYgZmlsZW5hbWUuDQogICAgICAgICBMT0MxID0gSU5ERVgo
>SU5GSUwsJy4nKQ0KICAgICAgICAgTEVOR1RIID0gTEVOKElORklMKQ0KICAg
>ICAgICAgTE9DMiA9IElOREVYKElORklMKExPQzErMTpMRU5HVEgpLCcuJykN
>CiAgICAgICAgIGlmKExFTihJTkZJTChMT0MxKzE6TE9DMStMT0MyLTEpKSAu
>ZXEuIDcpIHRoZW4NCiAgICAgICAgICAgIFlZREREID0gSU5GSUwoTE9DMSsz
>OkxPQzErTE9DMi0xKQ0KICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgWVlE
>REQgPSBJTkZJTChMT0MxKzE6TE9DMStMT0MyLTEpDQogICAgICAgICBlbmQg
>aWYNCiAgICAgICAgIExPQzE9TE9DMStMT0MyKzENCiAgICAgICAgIExPQzIg
>PSBJTkRFWChJTkZJTChMT0MxOkxFTkdUSCksJy4nKQ0KICAgICAgICAgSEhN
>TVNTID0gSU5GSUwoTE9DMTpMT0MxK0xPQzItMikgLy8gJzAwJw0KICAgICAg
>ICAgd3JpdGUoKiwqKSdZWURERD0nLFlZRERELCcgSEhNTVNTPScsSEhNTVNT
>DQpDIA0KQyBPcGVuIEZpbGVzDQpDICAgICBPcGVuIHRoZSBmaWxlIGFuZCBp
>bml0aWF0ZSB0aGUgU0QgaW50ZXJmYWNlLg0KQyAgICAgSnVzdCBuZWVkIHRv
>IG9wZW4gSERGIGludGVyZmFjZSBvbmUgYXQgYmVnaW5uaW5nIG9mIHByb2dy
>YW0NCkMgICAgIA0KICAgICAgICAgc2RfaWQgPSBzZnN0YXJ0KElORklMLCBE
>RkFDQ19SRUFEKQ0KICAgICAgICAgaWYgKHNkX2lkIC5uZS4gRkFJTCkgdGhl
>bg0KICAgICAgICAgICAgcHJpbnQqDQogICAgICAgICAgICB3cml0ZSgqLDE1
>KUlORklMDQogMTUgICAgICAgICBmb3JtYXQoJy4uLiAnLEE0MCwnIG9wZW5l
>ZCBmb3IgUkVBRCBhY2Nlc3MuJykNCiAgICAgICAgIGVuZCBpZg0KDQpDIEV4
>dHJhY3RpbmcgR2xvYmFsIEF0dHJpYnV0ZXMgZnJvbSBIREYgZmlsZQ0KICAg
>ICAgICAgY2FsbCBnbG9iYWxfYXR0cmliIChzZF9pZCxzYXRlbGxpdGUsc2Vu
>c29yX25hbWUsDQogICAgICtwYXNzX2RhdGUsc3RhcnRfdGltZSxjZW50ZXJf
>bGluZSxjZW50ZXJfc2FtcCkNCkMgICAgICAgICB3cml0ZSgqLCopJ3NhdGVs
>bGl0ZTogJywgc2F0ZWxsaXRlDQpDICAgICAgICAgd3JpdGUoKiwqKSdzZW5z
>b3JfbmFtZTogJyxzZW5zb3JfbmFtZSANCkMgICAgICAgICB3cml0ZSgqLCop
>J3Bhc3NfZGF0ZSAnLHBhc3NfZGF0ZQ0KQyAgICAgICAgIHdyaXRlKCosKikn
>c3RhcnRfdGltZSAnLHN0YXJ0X3RpbWUNCkMgICAgICAgICB3cml0ZSgqLCop
>J2NlbnRlciBsaW5lICcsY2VudGVyX2xpbmUNCkMgICAgICAgICB3cml0ZSgq
>LCopJ2NlbnRlciBzYW1wbGUgJyxjZW50ZXJfc2FtcA0KQyBFbmQgb2YgR2xv
>YmFsIEF0dHJpYnV0ZSBFeHRyYWN0aW9uDQoNCiAgICAgICAgIGNhbGwgZ2V0
>X3Zhcl9pbmZvIChzZF9pZCwgdmFyX25hbWVzLCBpbmRleGVzLCByYW5rcywN
>CiAgICAgK2F0dHJpYnMsIHZhcl90eXBlcywgZGltZW5zaW9ucywgY291bnRl
>cikNCiAgICAgICAgIGNhbGwgZ2V0X2NhbGliX2luZm8gKHNkX2lkLCBpbmRl
>eGVzLCB2YXJfdHlwZXMsIGNhbGliLCANCiAgICAgK2NhbGliX2Vyciwgb2Zm
>c2V0LCBvZmZzZXRfZXJyLCBjb3VudGVyKQ0KICAgICAgICAgY2FsbCBnZXRf
>dW5pdHNfaW5mbyhzZF9pZCwgaW5kZXhlcywgdW5pdHNfYnVmZmVyLCANCiAg
>ICAgK2NvdW50ZXIpDQoNCiAgICAgICAgIGRvIDEyIGsgPSAxLGNvdW50ZXIN
>CkMgICAgICAgICAgICB3cml0ZSgqLCopJ3Zhcl9uYW1lczonLHZhcl9uYW1l
>cyhrKQ0KQyAgICAgICAgICAgIHdyaXRlKCosKiknY2FsaWI6JyxjYWxpYihr
>KQ0KQyAgICAgICAgICAgIHdyaXRlKCosKiknY2FsaWJfZXJyOicsY2FsaWJf
>ZXJyKGspDQpDICAgICAgICAgICAgd3JpdGUoKiwqKSdvZmZzZXQ6JyxvZmZz
>ZXQoaykNCkMgICAgICAgICAgICB3cml0ZSgqLCopJ29mZnNldF9lcnI6Jyxv
>ZmZzZXRfZXJyKGspDQpDICAgICAgICAgICAgd3JpdGUoKiwqKSd1bml0czon
>LHVuaXRzX2J1ZmZlcihrKQ0KIDEyICAgICAgY29udGludWUNCg0KICAgICAg
>ICAgDQoNCg0KICAgICAgICAgZG8gMjAgayA9IDEsY291bnRlcg0KDQpDICAg
>ICBEZWZpbmUgdGhlIGxvY2F0aW9uLCBwYXR0ZXJuLCBhbmQgc2l6ZSBvZiB0
>aGUgZGF0YSBzZXQNCkMgICAgIHRoYXQgd2lsbCBiZSB3cml0dGVuIHRvLg0K
>ICAgICAgICAgICAgRElNMCA9IGRpbWVuc2lvbnMoaywyKQ0KICAgICAgICAg
>ICAgRElNMSA9IGRpbWVuc2lvbnMoaywxKQ0KICAgICAgICAgICAgc3RhcnQo
>MSkgPSAwDQogICAgICAgICAgICBzdGFydCgyKSA9IDANCiAgICAgICAgICAg
>IGVkZ2VzKDEpID0gRElNMQ0KICAgICAgICAgICAgZWRnZXMoMikgPSAxDQpD
>ICAgICAgICAgICAgZWRnZXMoMikgPSBESU0wDQogICAgICAgICAgICBzdHJp
>ZGUoMSkgPSAxDQogICAgICAgICAgICBzdHJpZGUoMikgPSAxDQpDICoqKiBh
>c3N1bWVzIHRoYXQgdGhlIGZpcnN0IHBlcmlvZCBpbiB0aGUgZmlsZW5hbWUg
>aXMgYWxzbyB0aGUgbGFzdCEhIQ0KICAgICAgICAgICAgTE9DID0gSU5ERVgo
>SU5GSUwsJy5oZGYnKQ0KICAgICAgICAgICAgSUYgKExPQyAuRVEuIDApIFRI
>RU4NCiAgICAgICAgICAgICAgIExPQyA9IElOREVYKEFSR1YsJyAnKQ0KICAg
>ICAgICAgICAgICAgTE9DID0gTE9DIC0gMQ0KICAgICAgICAgICAgICAgT1VU
>RklMID0gSU5GSUwoMTpMT0MpIC8vICcudmFyX25hbWVzKGspJw0KICAgICAg
>ICAgICAgRUxTRQ0KICAgICAgICAgICAgICAgT1VURklMID0gSU5GSUwoMTpM
>T0MpIC8vIHZhcl9uYW1lcyhrKQ0KICAgICAgICAgICAgRU5EIElGDQogICAg
>ICAgICAgICB3cml0ZSgqLDU1KU9VVEZJTA0KIDU1ICAgICAgICAgZm9ybWF0
>KCcuLi4gJyxBNDAsJyBvcGVuZWQgZm9yIFdSSVRFLicpDQogICAgICAgICAg
>ICBPUEVOIChGSUxFPU9VVEZJTCwgVU5JVD1PVVRVTkksIFNUQVRVUz0nTkVX
>JywgRVJSPTk5OTkpDQoNCiAgICAgICAgICAgIHNkX2luZGV4ID0gaW5kZXhl
>cyhrKQ0KICAgICAgICAgICAgc2RzX2lkID0gc2ZzZWxlY3QgKHNkX2lkLCBz
>ZF9pbmRleCkgDQogICAgICAgICAgICBpZiAoc2RzX2lkIC5lcS4gRkFJTCkg
>dGhlbg0KICAgICAgICAgICAgICAgaXN0YXQ9aGVwcm50KDApDQogICAgICAg
>ICAgICBlbmQgaWYNCiAgICAgICAgICAgIGlmKHZhcl90eXBlcyhrKSAuZXEu
>IDIyKSB0aGVuDQogICAgICAgICAgICAgICBkbyAzMCBqaj0xLERJTTANCiAg
>ICAgICAgICAgICAgICAgIGlzdGF0PXNmcmRhdGEoc2RzX2lkLCBzdGFydCwg
>c3RyaWRlLCBlZGdlcywgaWJ1ZmZlcikNCiAgICAgICAgICAgICAgICAgIHN0
>YXJ0KDIpID0gc3RhcnQoMikgKyAxDQogICAgICAgICAgICAgICAgICBkbyAz
>NSBpaT0xLERJTTENCiAgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gMipp
>aQ0KDQogICAgICAgICAgICAgICAgICAgICBjYnVmZmVyKGNvdW50LTEpID0g
>Y2hhcihpYnVmZmVyKGlpKS8yNTYpDQoNCiAgICAgICAgICAgICAgICAgICAg
>IGNidWZmZXIoY291bnQpID0gY2hhcihpYnVmZmVyKGlpKSoyNTYpDQogMzUg
>ICAgICAgICAgICAgICBjb250aW51ZQ0KDQogICAgICAgICAgICAgICAgICAg
>d3JpdGUoT1VUVU5JLDYwKShjYnVmZmVyKGtrKSxraz0xLDIqRElNMSkNCiAz
>MCAgICAgICAgICAgIGNvbnRpbnVlICAgDQogICAgICAgICAgICBlbHNlIGlm
>KHZhcl90eXBlcyhrKS5lcS4yMS5vci52YXJfdHlwZXMoaykuZXEuMjApIHRo
>ZW4NCiAgICAgICAgICAgICAgIGRvIDQwIGpqID0gMSxESU0wDQogICAgICAg
>ICAgICAgICAgICBpc3RhdD1zZnJjZGF0YShzZHNfaWQsIHN0YXJ0LCBzdHJp
>ZGUsIGVkZ2VzLCBjYnVmZmVyKQ0KICAgICAgICAgICAgICAgICAgc3RhcnQo
>MikgPSBzdGFydCgyKSArIDENCiAgICAgICAgICAgICAgICAgICB3cml0ZShP
>VVRVTkksNjUpKGNidWZmZXIoaWkpLGlpPTEsRElNMSkNCiA0MCAgICAgICAg
>ICAgIGNvbnRpbnVlDQogICAgICAgICAgICBlbmQgaWYNCg0KICAgICAgICAg
>ICAgaWYgKGlzdGF0IC5lcS4gRkFJTCkgdGhlbg0KICAgICAgICAgICAgICAg
>aXN0YXQ9aGVwcm50KDApDQogICAgICAgICAgICBlbmQgaWYNCiAgICAgICAg
>ICAgIHdyaXRlKCosKiknRWRnZXM6Jw0KICAgICAgICAgICAgd3JpdGUoKiw0
>NSkoZWRnZXMoaiksaj0xLDIpDQogNDUgICAgICAgICBmb3JtYXQoMXgsaTYp
>DQogICAgICAgICAgICB3cml0ZSgqLDUwKURJTTAsRElNMQ0KIDUwICAgICAg
>ICAgZm9ybWF0KCdESU0wID0gJyxpNiwxeCwnRElNMSA9ICcsaTYpDQogNjAg
>ICAgICAgICBmb3JtYXQoPDIqRElNMT4oQSksJCkNCiA2NSAgICAgICAgIGZv
>cm1hdCg8RElNMT4oQSksJCkNCiA3MCAgICAgICAgIGZvcm1hdCgxeCw8RElN
>MT4oaTQpKQ0KQyAgICAgVGVybWluYXRlIGFjY2VzcyB0byB0aGUgYXJyYXku
>DQogICAgICAgICAgICBpc3RhdCA9IHNmZW5kYWNjKHNkc19pZCkNCiAgICAg
>ICAgICAgIGlmIChpc3RhdCAuZXEuIEZBSUwpIHRoZW4NCiAgICAgICAgICAg
>ICAgIGlzdGF0PWhlcHJudCgwKQ0KICAgICAgICAgICAgZW5kIGlmDQoNCg0K
>IDIwICAgICAgY29udGludWUNCg0KQyAgICAgVGVybWluYXRlIGFjY2VzcyB0
>byB0aGUgU0QgaW50ZXJmYWNlIGFuZCBjbG9zZSB0aGUgZmlsZS4NCiAgICAg
>ICAgIGlzdGF0ID0gc2ZlbmQoc2RfaWQpDQogICAgICAgICBpZiAoaXN0YXQg
>LmVxLiBGQUlMKSB0aGVuDQogICAgICAgICAgICBpc3RhdD1oZXBybnQoMCkN
>CiAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIHByaW50KiwnLi4uIGZpbGUg
>Y2xvc2VkJw0KICAgICAgICAgICAgcHJpbnQqDQogICAgICAgICBlbmQgaWYN
>Cg0KDQoNCkMgQ2xvc2UgaW4vb3V0IGZpbGVzDQpDCUNMT1NFIChVTklUPUlO
>VU5JKQ0KCUNMT1NFIChVTklUPU9VVFVOSSkNCg0KQyBFbmQgb2YgbWFpbiBs
>b29wIGZvciBjbWQgbGluZSBhcmdzDQoJRklMQ05UID0gRklMQ05UICsgMQ0K
>ICAgICAgICBFTkQgRE8NCjk5OTkgICAgQ09OVElOVUUNCglTVE9QDQoJRU5E
>DQoNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
>KioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICAgICBzdWJyb3V0aW5l
>IGdsb2JhbF9hdHRyaWIoc2RfaWQsIHNhdGVsbGl0ZSwgc2Vuc29yX25hbWUs
>DQogICAgICtwYXNzX2RhdGUsIHN0YXJ0X3RpbWUsIGNlbnRlcl9saW5lLCBj
>ZW50ZXJfc2FtcCkNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
>KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICAgICBp
>bnRlZ2VyIHNkX2lkLCBhdHRyX2luZGV4LCBzZmZhdHRyLCBzZnJjYXR0LCBz
>ZnJuYXR0DQogICAgICBpbnRlZ2VyIGlzdGF0LCBwYXNzX2RhdGUNCiAgICAg
>IGNoYXJhY3RlcioyMCBzYXRlbGxpdGUsIHNlbnNvcl9uYW1lDQogICAgICBy
>ZWFsKjggc3RhcnRfdGltZSwgY2VudGVyX2xpbmUsIGNlbnRlcl9zYW1wDQpD
>IEV4dHJhY3RpbmcgR2xvYmFsIEF0dHJpYnV0ZXMgZnJvbSBIREYgZmlsZQ0K
>DQpDICAgICBGaW5kIHRoZSBmaWxlIGF0dHJpYnV0ZSBuYW1lZCAnc2F0ZWxs
>aXRlJy4gDQogICAgICBhdHRyX2luZGV4ID0gc2ZmYXR0cihzZF9pZCwgJ3Nh
>dGVsbGl0ZScpDQoNCkMgICAgIFJlYWQgdGhlIGF0dHJpYnV0ZSBkYXRhLiAN
>CiAgICAgIGlzdGF0ID0gc2ZyY2F0dChzZF9pZCwgYXR0cl9pbmRleCwgc2F0
>ZWxsaXRlKQ0KICAgICAgDQoNCkMgICAgIEZpbmQgdGhlIGZpbGUgYXR0cmli
>dXRlIG5hbWVkICdzZW5zb3IgbmFtZScNCg0KICAgICAgYXR0cl9pbmRleCA9
>IHNmZmF0dHIoc2RfaWQsICdzZW5zb3JfbmFtZScpDQoNCkMgICAgIFJlYWQg
>dGhlIGF0dHJpYnV0ZSBkYXRhLiANCiAgICAgIGlzdGF0ID0gc2ZyY2F0dChz
>ZF9pZCwgYXR0cl9pbmRleCwgc2Vuc29yX25hbWUpDQogICAgICANCg0KQyAg
>ICAgRmluZCB0aGUgZmlsZSBhdHRyaWJ1dGUgbmFtZWQgJ3Bhc3NfZGF0ZScN
>CiAgICAgIA0KDQpDICAgICBSZWFkIHRoZSBhdHRyaWJ1dGUgZGF0YS4NCg0K
>ICAgICAgaXN0YXQgPSBzZnJuYXR0KHNkX2lkLCBhdHRyX2luZGV4LCBwYXNz
>X2RhdGUpDQogICAgICANCkMgICAgIEZpbmQgdGhlIGZpbGUgYXR0cmlidXRl
>IG5hbWVkICdzdGFydCB0aW1lJw0KICAgICAgYXR0cl9pbmRleCA9IHNmZmF0
>dHIoc2RfaWQsICdzdGFydF90aW1lJykNCg0KQyAgICAgUmVhZCB0aGUgYXR0
>cmlidXRlIGRhdGEuDQoNCiAgICAgIGlzdGF0ID0gc2ZybmF0dChzZF9pZCwg
>YXR0cl9pbmRleCwgc3RhcnRfdGltZSkNCiAgICAgIA0KDQpDICAgICBGaW5k
>IHRoZSBmaWxlIGF0dHJpYnV0ZSBuYW1lZCAnY2VudGVyIGxpbmUnDQogICAg
>ICBhdHRyX2luZGV4ID0gc2ZmYXR0cihzZF9pZCwgJ2NlbnRlcl9saW5lJykN
>Cg0KQyAgICAgUmVhZCB0aGUgYXR0cmlidXRlIGRhdGEuDQoNCiAgICAgIGlz
>dGF0ID0gc2ZybmF0dChzZF9pZCwgYXR0cl9pbmRleCwgY2VudGVyX2xpbmUp
>DQogICAgICANCkMgICAgIEZpbmQgdGhlIGZpbGUgYXR0cmlidXRlIG5hbWVk
>ICdjZW50ZXIgc2FtcGxlJw0KICAgICAgYXR0cl9pbmRleCA9IHNmZmF0dHIo
>c2RfaWQsICdjZW50ZXJfc2FtcCcpDQpDICAgICBSZWFkIHRoZSBhdHRyaWJ1
>dGUgZGF0YS4NCiAgICAgIGlzdGF0ID0gc2ZybmF0dChzZF9pZCwgYXR0cl9p
>bmRleCwgY2VudGVyX3NhbXApDQogICAgICANCkMgRW5kIG9mIEdsb2JhbCBB
>dHRyaWJ1dGUgRXh0cmFjdGlvbg0KICAgICAgcmV0dXJuDQogICAgICBlbmQN
>CioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
>KioqKioqKioqKioqKioqKioqKioqKioqDQogICAgICBzdWJyb3V0aW5lIGdl
>dF92YXJfaW5mbyAoc2RfaWQsIHZhcl9uYW1lcywgaW5kZXhlcywgcmFua3Ms
>DQogICAgICthdHRyaWJzLCB2YXJfdHlwZXMsIGRpbWVuc2lvbnMsIGNvdW50
>ZXIpDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
>KioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgICAgcGFyYW1ldGVy
>KE1BWF9WQVJfRElNID0gMzIsIE5VTSA9IDUpDQogICAgICBpbnRlZ2VyIGlz
>dGF0LCBzZF9pZCwgc2RzX2lkLCBzZF9pbmRleCwgY291bnRlcg0KICAgICAg
>aW50ZWdlciBzZmZpbmZvLCBzZnNlbGVjdCwgc2ZnaW5mbywgc2ZlbmRhY2MN
>CiAgICAgIGludGVnZXIgbl9kYXRhc2V0cywgbl9maWxlX2F0dHJzLCByYW5r
>DQogICAgICBpbnRlZ2VyIGF0dHJpYnV0ZXMsIG51bV90eXBlLCBhdHRyaWJz
>KCopLCB2YXJfdHlwZXMoKikNCiAgICAgIGludGVnZXIqNCBpbmRleGVzKCop
>LCByYW5rcygqKSwgZGltZW5zaW9ucyhOVU0sMiksDQogICAgICtkaW1fc2l6
>ZXMoMikNCiAgICAgIGNoYXJhY3RlciBuYW1lICooNjQpDQogICAgICBjaGFy
>YWN0ZXIqNjQgdmFyX25hbWVzICgqKQ0KQyAgICAgRGV0ZXJtaW5lIHRoZSBj
>b250ZW50cyBvZiB0aGUgZmlsZS4NCiAgICAgIGlzdGF0ID0gc2ZmaW5mbyhz
>ZF9pZCwgbl9kYXRhc2V0cywgbl9maWxlX2F0dHJzKQ0KQyAgICAgQWNjZXNz
>IGFuZCBwcmludCB0aGUgbmFtZXMgb2YgZXZlcnkgZGF0YSBzZXQgaW4gdGhl
>IGZpbGUuDQogICAgICBjb3VudGVyID0gMA0KICAgICAgDQogICAgICBkbyAx
>MCBzZF9pbmRleCA9IDAsIG5fZGF0YXNldHMgLSAxDQogICAgICAgICBzZHNf
>aWQgPSBzZnNlbGVjdChzZF9pZCwgc2RfaW5kZXgpDQogICAgICAgICBpc3Rh
>dCA9IHNmZ2luZm8oc2RzX2lkLCBuYW1lLCByYW5rLCBkaW1fc2l6ZXMsIG51
>bV90eXBlLCANCiAgICAgKyAgICAgICAgICAgICAgICAgYXR0cmlidXRlcykN
>CiAgICAgICAgIGlmKChuYW1lIC5lcS4gJ2d2YXJfY2gxJyAub3IuIG5hbWUg
>LmVxLiAnZ3Zhcl9jaDInIC5vci4NCiAgICAgK25hbWUgLmVxLiAnZ3Zhcl9j
>aDMnIC5vci4gbmFtZSAuZXEuICdndmFyX2NoNCcgLm9yLiBuYW1lIC5lcS4N
>CiAgICAgKydndmFyX2NoNScpIC5hbmQuIHJhbmsgLmVxLiAyLikgdGhlbg0K
>ICAgICAgICAgICAgY291bnRlciA9IGNvdW50ZXIgKyAxDQogICAgICAgICAg
>ICB2YXJfbmFtZXMoY291bnRlcikgPSBuYW1lDQogICAgICAgICAgICBpbmRl
>eGVzKGNvdW50ZXIpID0gc2RfaW5kZXgNCiAgICAgICAgICAgIHJhbmtzKGNv
>dW50ZXIpID0gcmFuaw0KICAgICAgICAgICAgYXR0cmlicyhjb3VudGVyKSA9
>IGF0dHJpYnV0ZXMNCiAgICAgICAgICAgIHZhcl90eXBlcyhjb3VudGVyKSA9
>IG51bV90eXBlDQogICAgICAgICAgICBpID0gMQ0KICAgICAgICAgICAgZG8g
>d2hpbGUgKGkgLmxlLiByYW5rcyhjb3VudGVyKSkNCiAgICAgICAgICAgICAg
>IGRpbWVuc2lvbnMoY291bnRlcixpKSA9IGRpbV9zaXplcyhpKQ0KICAgICAg
>ICAgICAgICAgaSA9IGkgKyAxDQogICAgICAgICAgICBlbmQgZG8NCiAgICAg
>ICAgIGVuZCBpZg0KICAgICAgICAgaXN0YXQgPSBzZmVuZGFjYyhzZHNfaWQp
>ICAgICAgDQogMTAgICBjb250aW51ZQ0KICAgICAgcmV0dXJuIA0KICAgICAg
>ZW5kDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
>KioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgICAgc3Vicm91dGlu
>ZSBnZXRfY2FsaWJfaW5mbyAoc2RfaWQsIGluZGV4ZXMsIHZhcl90eXBlcywg
>Y2FsaWIsIA0KICAgICArY2FsaWJfZXJyLCBvZmZzZXQsIG9mZnNldF9lcnIs
>IGNvdW50ZXIpDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
>KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgICAgDQog
>ICAgICBpbnRlZ2VyIHNkX2lkLCBzZHNfaWQsIHNkX2luZGV4LCBpc3RhdCwg
>c2ZzZWxlY3QsIHNmZ2NhbCwgDQogICAgICtjb3VudGVyLCB2YXJfdHlwZXMo
>KiksIHNmZW5kYWNjDQogICAgICBpbnRlZ2VyKjQgaW5kZXhlcygqKSwgRkFJ
>TA0KICAgICAgcGFyYW1ldGVyKEZBSUwgPSAtMSkNCiAgICAgIHJlYWwqOCBj
>YWxpYigqKSwgY2FsaWJfZXJyKCopLCBvZmZzZXQoKiksIG9mZnNldF9lcnIo
>KikNCiAgICAgIGRvIDEwIGsgPSAxLGNvdW50ZXINCiAgICAgICAgIHNkX2lu
>ZGV4ID0gaW5kZXhlcyhrKQ0KICAgICAgICAgDQogICAgICAgICBzZHNfaWQg
>PSBzZnNlbGVjdCAoc2RfaWQsIHNkX2luZGV4KQ0KICAgICAgICAgaWYgKHNk
>c19pZCAuZXEuIEZBSUwpIHRoZW4NCiAgICAgICAgICAgIGlzdGF0PWhlcHJu
>dCgwKQ0KICAgICAgICAgZW5kIGlmDQogICAgICAgICBpc3RhdCA9IHNmZ2Nh
>bChzZHNfaWQsIGNhbGliKGspLCBjYWxpYl9lcnIoayksIG9mZnNldChrKSwg
>DQogICAgICtvZmZzZXRfZXJyKGspLCB2YXJfdHlwZXMoaykpDQogICAgICAg
>IGlmKGlzdGF0IC5uZS4gRkFJTCkgdGhlbg0KICAgICAgICAgICAgd3JpdGUo
>KiwqKSdjYWxpYnJhdGlvbiA9ICcsY2FsaWIoaykNCiAgICAgICAgICAgIHdy
>aXRlKCosKiknY2FsaWJyYXRpb24gZXJyb3IgPSAnLGNhbGliX2VycihrKQ0K
>ICAgICAgICAgICAgd3JpdGUoKiwqKSdvZmZzZXQgPSAnLG9mZnNldChrKQ0K
>ICAgICAgICAgICAgd3JpdGUoKiwqKSdvZmZzZXQgZXJyb3IgPSAnLG9mZnNl
>dF9lcnIoaykNCiAgICAgICAgZW5kIGlmDQogICAgICAgICBpc3RhdCA9IHNm
>ZW5kYWNjKHNkc19pZCkNCiAxMCAgIGNvbnRpbnVlICAgICAgDQogICAgICBy
>ZXR1cm4NCiAgICAgIGVuZA0KKioqKioqKioqKioqKioqKioqKioqKioqKioq
>KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0K
>ICAgICAgc3Vicm91dGluZSBnZXRfdW5pdHNfaW5mbyhzZF9pZCwgaW5kZXhl
>cywgdW5pdHNfYnVmZmVyLCANCiAgICAgK2NvdW50ZXIpDQoqKioqKioqKioq
>KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
>KioqKioqKioqKioqKioqDQogICAgICBpbnRlZ2VyIHNkX2lkLCBzZHNfaWQs
>IGF0dHJfaW5kZXgsIHNkX2luZGV4LCBjb3VudGVyLCANCiAgICAgK3Nmc2Vs
>ZWN0LCBzZmZhdHRyLCBzZnJuYXR0LCBzZmVuZGFjYywgaXN0YXQNCiAgICAg
>IGludGVnZXIqNCBpbmRleGVzKCopLCBGQUlMDQogICAgICBwYXJhbWV0ZXIo
>RkFJTCA9IC0xKQ0KICAgICAgY2hhcmFjdGVyKjIwIHVuaXRzX2J1ZmZlcigq
>KQ0KICAgICAgZG8gMTAgayA9IDEsY291bnRlcg0KICAgICAgICAgc2RfaW5k
>ZXggPSBpbmRleGVzKGspDQogICAgICAgICBzZHNfaWQgPSBzZnNlbGVjdCAo
>c2RfaWQsIHNkX2luZGV4KQ0KICAgICAgICAgYXR0cl9pbmRleCA9IHNmZmF0
>dHIoc2RzX2lkLCAndW5pdHMnKQ0KICAgICAgICAgaWYgKHNkc19pZCAuZXEu
>IEZBSUwpIHRoZW4NCiAgICAgICAgICAgIGlzdGF0PWhlcHJudCgwKQ0KICAg
>ICAgICAgZW5kIGlmDQogICAgICAgICBpc3RhdCA9IHNmcm5hdHQoc2RzX2lk
>LCBhdHRyX2luZGV4LCB1bml0c19idWZmZXIoaykpDQogICAgICAgICBpZihp
>c3RhdCAubmUuIEZBSUwpIHRoZW4NCiAgICAgICAgICAgIHdyaXRlKCosKikn
>dW5pdHM6Jyx1bml0c19idWZmZXIoaykNCiAgICAgICAgIGVuZCBpZg0KDQpD
>ICAgICBUZXJtaW5hdGUgYWNjZXNzIHRvIHRoZSBhcnJheSANCiAgICAgICAg
>IGlzdGF0ID0gc2ZlbmRhY2Moc2RzX2lkKSAgICAgICAgICAgIA0KDQogMTAg
>ICBjb250aW51ZQ0KICAgICAgcmV0dXJuDQogICAgICBlbmQNCioqKioqKioq
>KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
>KioqKioqKioqKioqKioqKioqKg0KDQoNCg0KDQo=
>---559023410-758783491-1003168409=:1356--
>