[Matrix-SIG] Interactive shell

jhauser@ifm.uni-kiel.de jhauser@ifm.uni-kiel.de
Tue, 27 Apr 1999 01:23:37 +0200 (CEST)


--PIFKdGL6u6
Content-type: text/plain; charset="us-ascii"

Hello, attached are three files which are used for a little bit
enhanced python prompt. There was some interest on the list for a more 
comfortable interactive session. This is my starting attempt with
following features.

-readline support
-completion in the local namespace with TAB
-special shell commands starting with a @
 @pwd @cd @who @whos @logon @logoff @clean
 These commands don't need ()
-logging, which can be started and stopped in the session
-keeps track of new variables
 @who 
-an example of a possible help at the prompt. type just ?
-reading of a rc file


It would be nice to hear some comments if someone really uses this,
because at the moment it works for me (TM) so will only be extended
for my personal needs.

The files are: 

ipp.py  -> the module put in your python path
ipp     -> a driver put in your bin
ipprc   -> looked for in $HOME/.ipprc

__Janko


--PIFKdGL6u6
Content-type: application/octet-stream
Content-transfer-encoding: base64
Content-Disposition: attachment;
	filename="ipp.py"

IyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMKIyBCdWlsZCBhIG5pY2UgdGV4dCBpbnRlcmZhY2Ug
dG8gUHl0aG9uCiMgVXNlIHRoZSBuZXcgc3R1ZmYgZnJvbSBjb2RlLnB5LCBuZWVkcyB0aGVy
ZWZvciBQeXRob24xLjUuMgojCmltcG9ydCBjb2RlCmltcG9ydCBvcywgY29weSwgc3RyaW5n
CgpjbGFzcyBJbnRlcmFjdGl2ZVNoZWxsKGNvZGUuSW50ZXJhY3RpdmVDb25zb2xlKToKICAg
IGxvZyA9IDAKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2NhbD17fSk6CiAgICAgICAgc2Vs
Zi5zYXZlX2xvY2FsID0gY29weS5jb3B5KGxvY2FsKQogICAgICAgIHNlbGYuX2xvZ2dlciA9
IExvZ2dlcigpCiAgICAgICAgaWYgc2VsZi5sb2c6CiAgICAgICAgICAgIHNlbGYubG9nb24o
KQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNlbGYubG9nID0gMAogICAgICAgIGFwcGx5
KGNvZGUuSW50ZXJhY3RpdmVDb25zb2xlLl9faW5pdF9fLCAoc2VsZixsb2NhbCkgKQoKICAg
IGRlZiBsb2dvbihzZWxmKToKICAgICAgICBzZWxmLl9sb2dnZXIuZG9sb2cgPSAxCgogICAg
ZGVmIGxvZ29mZihzZWxmKToKICAgICAgICBzZWxmLl9sb2dnZXIuZG9sb2cgPSAwCiAgICAg
ICAgCiAgICBkZWYgcmF3X2lucHV0KHNlbGYsIHByb21wdD0iIik6CiAgICAgICAgIiIiV3Jp
dGUgYSBwcm9tcHQgYW5kIHJlYWQgYSBsaW5lLgogICAgICAgIAogICAgICAgIFRoZSByZXR1
cm5lZCBsaW5lIGRvZXMgbm90IGluY2x1ZGUgdGhlIHRyYWlsaW5nIG5ld2xpbmUuCiAgICAg
ICAgV2hlbiB0aGUgdXNlciBlbnRlcnMgdGhlIEVPRiBrZXkgc2VxdWVuY2UsIEVPRkVycm9y
IGlzIHJhaXNlZC4KICAgICAgICAKICAgICAgICBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiB1
c2VzIHRoZSBidWlsdC1pbiBmdW5jdGlvbgogICAgICAgIHJhd19pbnB1dCgpOyBhIHN1YmNs
YXNzIG1heSByZXBsYWNlIHRoaXMgd2l0aCBhIGRpZmZlcmVudAogICAgICAgIGltcGxlbWVu
dGF0aW9uLgoKICAgICAgICAiIiIKICAgICAgICByZXR1cm4gc2VsZi5wcmVmaWx0ZXIocmF3
X2lucHV0KHByb21wdCkpCgogICAgZGVmIGhhbmRsZV9zaGVsbF9lc2NhcGUoc2VsZiwgbGlu
ZSk6CiAgICAgICAgIiIiRXhlY3V0ZSB0aGUgbGluZSBpbiBhIHNoZWxsLCBubyByZXR1cm4g
dmFsdWUiIiIKICAgICAgICBsaW5lID0gc3RyaW5nLnN0cmlwKGxpbmUpWzE6XQogICAgICAg
IG9zLnN5c3RlbShsaW5lKQogICAgICAgIHJldHVybgogICAgCiAgICBkZWYgaGFuZGxlX2hl
bHAoc2VsZiwgbGluZSk6CiAgICAgICAgIiIiVHJ5IHRvIGdldCBzb21lIGhlbHAgZm9yIHRo
ZSBvYmplY3QuIEN1cnJlbnRseSBvbmx5IHRoZQogICAgICAgIHNpbXBsZXN0IGZvcm0gaXMg
dGhlcmUsIGJ1dCBtb3JlIHNvcGhpc3RpY2F0ZWQgaGVscCBzeXN0ZW1zCiAgICAgICAgY2Fu
IGJlIGludGVncmF0ZWQgaGVyZS4KICAgICAgICBUaGlzIHNpbXBsZSBvbmUgbmVlZHMgdG8g
cmV0dXJuIGEgY2hhbmdlZCBsaW5lIHRvIHRoZQogICAgICAgIGludGVycHJldGVyLgogICAg
ICAgICIiIgogICAgICAgICMgTm90ZSwgdGhpcyBnZW5lcmF0ZWQgbGluZSBzaG91bGQgYmUg
ZXZhbHVhdGV0IGluIHRoaXMKICAgICAgICAjIG1ldGhvZC4KICAgICAgICBsaW5lID0gc3Ry
aW5nLnN0cmlwKGxpbmUpWzE6XSAjIHJlbW92ZSA/CiAgICAgICAgaWYgbGluZToKICAgICAg
ICAgICAgcHJpbnQgJyoqIGRvYyBmb3IgJXMgKionICUgKGxpbmUsKQogICAgICAgICAgICBh
c2tfaGVscCA9ICdwcmludCAnK2xpbmUrJy5fX2RvY19fJwogICAgICAgIGVsc2U6CiAgICAg
ICAgICAgIGFza19oZWxwID0gJ3ByaW50IHNoZWxsLnVzYWdlJwogICAgICAgIHJldHVybiBh
c2tfaGVscAogICAgICAgIAogICAgZGVmIGhhbmRsZV9tYWdpYyhzZWxmLCBsaW5lKToKICAg
ICAgICBsaW5lID0gc3RyaW5nLnN0cmlwKGxpbmUpWzE6XSAjIHJlbW92ZSBACiAgICAgICAg
cGFyYW0gPSBzdHJpbmcuZmluZChsaW5lLCcoJykgCiAgICAgICAgaWYgcGFyYW0gPCAwOgog
ICAgICAgICAgICBpZiBoYXNhdHRyKHNlbGYsIGxpbmUpOgogICAgICAgICAgICAgICAgcmV0
dXJuICdzaGVsbC4nK2xpbmUrJygpJwogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAg
ICAgcmV0dXJuIGxpbmUrJygpJwogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGlmIGhhc2F0
dHIoc2VsZixsaW5lWzpwYXJhbV0pOgogICAgICAgICAgICAgICAgcmV0dXJuICdzaGVsbC4n
K2xpbmUKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHJldHVybiBsaW5lCiAg
ICAgICAgICAgIAogICAgZGVmIHByZWZpbHRlcihzZWxmLCBsaW5lKToKICAgICAgICBpZiBs
aW5lIGFuZCBzdHJpbmcuc3RyaXAobGluZSlbMF0gPT0gJyEnOgogICAgICAgICAgICBzZWxm
LmhhbmRsZV9zaGVsbF9lc2NhcGUobGluZSkKICAgICAgICAgICAgcmV0dXJuICcnICMgRW1w
dHkgc3RyaW5nIGlzIG5lZWRlZCBoZXJlIQogICAgICAgIGVsaWYgbGluZSBhbmQgc3RyaW5n
LnN0cmlwKGxpbmUpWzBdID09ICc/JzoKICAgICAgICAgICAgcmV0dXJuIHNlbGYuaGFuZGxl
X2hlbHAobGluZSkKICAgICAgICBlbGlmIGxpbmUgYW5kIHN0cmluZy5zdHJpcChsaW5lKVsw
XSA9PSAnQCc6CiAgICAgICAgICAgIHJldHVybiBzZWxmLmhhbmRsZV9tYWdpYyhsaW5lKQog
ICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNlbGYuX2xvZ2dlci5sb2cobGluZSkgCiAgICAg
ICAgICAgIHJldHVybiBsaW5lCgogICAgZGVmIHB3ZChzZWxmKToKICAgICAgICAiIiJSZXR1
cm4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgcGF0aC4KICAgICAgICAiIiIKICAg
ICAgICByZXR1cm4gb3MuZ2V0Y3dkKCkKCiAgICBkZWYgY2Qoc2VsZiwgcGF0aD0nJyk6CiAg
ICAgICAgIiIiQ2hhbmdlIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LCB2ZXJ5IHNp
bXBsZSIiIgogICAgICAgIGlmIHBhdGg6CiAgICAgICAgICAgIG9zLmNoZGlyKHBhdGgpCiAg
ICAgICAgZWxzZToKICAgICAgICAgICAgb3MuY2hkaXIob3MuZW52aXJvblsnSE9NRSddKQog
ICAgICAgIHByaW50IHNlbGYucHdkKCkKICAgICAgICAgICAgCiAgICBkZWYgd2hvKHNlbGYp
OgogICAgICAgICIiIkxpc3RzIGFsbCB2YXJpYWJsZXMgd2hpY2ggYXJlIG5vdCBpbiB0aGUg
c2F2ZWQgbmFtZXNwYWNlCiAgICAgICAgb2YgdGhlIGludGVyYWN0aXYgaW50ZXJwcmV0ZXIu
CiAgICAgICAgIiIiCiAgICAgICAgZm9yIGkgaW4gc2VsZi5sb2NhbHMua2V5cygpOgogICAg
ICAgICAgICBpZiBzZWxmLnNhdmVfbG9jYWwuaGFzX2tleShpKToKICAgICAgICAgICAgICAg
IGlmIHNlbGYubG9jYWxzW2ldIGlzIHNlbGYuc2F2ZV9sb2NhbFtpXToKICAgICAgICAgICAg
ICAgICAgICBwYXNzCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBwcmludCBp
KydcdCcsCiAgICAgICAgcHJpbnQKCiAgICBkZWYgd2hvcyhzZWxmKToKICAgICAgICAiIiJM
aXN0cyBhbGwgdmFyaWFibGVzIHdoaWNoIGFyZSBub3QgaW4gdGhlIHNhdmVkIG5hbWVzcGFj
ZQogICAgICAgIG9mIHRoZSBpbnRlcmFjdGl2IGludGVycHJldGVyLgogICAgICAgICIiIgog
ICAgICAgIGZvciBpIGluIHNlbGYubG9jYWxzLmtleXMoKToKICAgICAgICAgICAgaWYgc2Vs
Zi5zYXZlX2xvY2FsLmhhc19rZXkoaSk6CiAgICAgICAgICAgICAgICBpZiBzZWxmLmxvY2Fs
c1tpXSBpcyBzZWxmLnNhdmVfbG9jYWxbaV06CiAgICAgICAgICAgICAgICAgICAgcGFzcwog
ICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgcHJpbnQgaSsnIFx0XHQnK2B0eXBl
KHNlbGYubG9jYWxzW2ldKWAsCiAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAg
ICAgICAgcHJpbnQgJ1x0XHQnK2BsZW4oc2VsZi5sb2NhbHNbaV0pYAogICAgICAgICAgICAg
ICAgZXhjZXB0IFR5cGVFcnJvcjoKICAgICAgICAgICAgICAgICAgICBwcmludCAjIGp1c3Qg
YSBuZXdsaW5lCiAgICAgICAgCiAgICAgICAgCiAgICBkZWYgY2xlYXIoc2VsZiwqYXJncyk6
CiAgICAgICAgIiIiUmVtb3ZlcyB2YXJpYWJsZXMgd2hpY2ggYXJlIGxpc3RlZCBhcyBhcmd1
bWVudHMgZnJvbSB0aGUKICAgICAgICBsb2NhbCBuYW1lc3BhY2UuIElmIHRoZXJlIGFyZSBu
byBhcmd1bXRlbnRzIHJlbW92ZXMgYWxsIHZhcmlhYmxlcwogICAgICAgIHdoaWNoIGFyZSBu
b3QgaW4gdGhlIHNhdmVkIG5hbWVzcGFjZSBmcm9tIHRoZSBsb2NhbCBvbmUuCiAgICAgICAg
IiIiCiAgICAgICAgZm9yIGkgaW4gc2VsZi5sb2NhbHMua2V5cygpOgogICAgICAgICAgICBp
ZiBzZWxmLnNhdmVfbG9jYWwuaGFzX2tleShpKToKICAgICAgICAgICAgICAgIGlmIHNlbGYu
bG9jYWxzW2ldIGlzIHNlbGYuc2F2ZV9sb2NhbFtpXToKICAgICAgICAgICAgICAgICAgICBw
YXNzCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBkZWwoc2VsZi5sb2NhbHNb
aV0pCgpjbGFzcyBMb2dnZXI6CiAgICAiIiJrZWVwcyB0cmFjayBvZiBsaW5lcyIiIgogICAg
ZGVmIF9faW5pdF9fKHNlbGYsIG90aGVyPScnKToKICAgICAgICAiIiJHZW5lcmF0ZSBhIG5l
dyBsb2ctZmlsZSB3aXRoIGEgZGVmYXVsdCBoZWFkZXIiIiIKICAgICAgICBpZiBvdGhlcjoK
ICAgICAgICAgICAgc2VsZi5mbmFtZSA9IG90aGVyCiAgICAgICAgZWxzZToKICAgICAgICAg
ICAgc2VsZi5mbmFtZSA9ICdpcHAubG9nJwogICAgICAgICAgICAKICAgICAgICBpZiBvcy5w
YXRoLmlzZmlsZShzZWxmLmZuYW1lKToKICAgICAgICAgICAgb3MucmVtb3ZlKHNlbGYuZm5h
bWUpICMgb3Igcm90YXRlIGl0PwogICAgICAgIHNlbGYubG9nZmlsZSA9IG9wZW4oc2VsZi5m
bmFtZSwndycpCiAgICAgICAgc2VsZi5kb2xvZyA9IDAKCiAgICBkZWYgbG9nKHNlbGYsIGxp
bmUpOgogICAgICAgICIiIldyaXRlIHRoZSBsaW5lIiIiCiAgICAgICAgaWYgc2VsZi5kb2xv
ZzoKICAgICAgICAgICAgc2VsZi5sb2dmaWxlLndyaXRlKGxpbmUrJ1xuJykKICAgICAgICAg
ICAgc2VsZi5sb2dmaWxlLmZsdXNoKCkKCiAgICBkZWYgY2xvc2Uoc2VsZik6CiAgICAgICAg
c2VsZi5sb2dmaWxlLmNsb3NlKCkKCmNsYXNzIHM6CiAgICAiIiJTaW1wbGUgY29udGFpbmVy
IHdoaWNoIGdldCdzIG92ZXJ3cml0dGVuIGFuZCBjbGVhbnMgdXAgdGhlCiAgICBuYW1lc3Bh
Y2UiIiIKCiAgICBpbXBvcnQgcmVhZGxpbmUKICAgIGltcG9ydCBybGNvbXBsZXRlcgogICAg
aW1wb3J0IHN5cywgZ2V0b3B0LCBvcywgY29weQoKICAgICMgY2xhc3MgYXR0cmlidXRlcwog
ICAgdXNhZ2UgPSAiIiJcCiAgICBpcHAgLT4gdGhlIGBpbnRlcmFjdGl2ZSBweXRob24gcHJv
bXB0YAoKICAgIEFuIGVuaGFuY2VkIGNvbnNvbGUgZm9yIFB5dGhvbi4KICAgIEZlYXR1cmVz
IGFyZToKICAgICAgIC0gcmVhZGxpbmUgc3VwcG9ydCBpZiBwcmVzZW50CiAgICAgICAtIGNv
bXBsZXRpb24gaW4gdGhlIGxvY2FsIG5hbWVzcGFjZSwgZWcuIHR5cGUgVEFCIHR3aWNlIGF0
IHRoZSBwcm9tcHQuCiAgICAgICAtIGxvZ2dpbmcgb2YgaW5wdXQgLCBzZWUgY29tbWFuZC1s
aW5lIG9wdGlvbnMKICAgICAgIC0gU3lzdGVtc2hlbGwgZXNjYXBlIGJ5IHRoZSAhICwgZWcg
IWxzCiAgICAgICAtIFB5dGhvbnNoZWxsIGNvbW1hbmRzLCBzdGFydGluZyB3aXRoIGEgQAog
ICAgICAgLSBzb21lIG9mIHRoZXNlIGFyZSAgQGxzLCBAcHdkLCBAY2QKICAgICAgIC0gS2Vl
cHMgdHJhY2sgb2YgbG9jYWxseSBkZWZpbmVkIHZhcmlhYmxlcyBAd2hvLCBAd2hvcwogICAg
ICAgLSBTaG93IGRvY3N0cmluZ3Mgd2l0aCBhID8gLCBlZyA/bGlzdAogICAgICAgLSBldmFs
dWF0aW9uIG9mIGFuIHJjIGZpbGUuCgogICAgQ29tbWFuZCBsaW5lIG9wdGlvbnM6CiAgICAg
IC1pICAgICAgfCBleGVjdXRlIHJlbWFpbmluZyBmaWxlcyBhbmQgdGhhbiBqdW1wIGludG8g
dGhlIGNvbnNvbGUKICAgICAgLWwgICAgICB8IGxvZ2dpbmcgaW4gc3RhbmRhcmQtbG9nIGZp
bGUKICAgICAgLUwgZmlsZSB8IG5hbWUgYSBzcGVjaWFsIGxvZyBmaWxlIGFuZCBsb2cgaW50
byBpdAogICAgICAtcyAgICAgIHwgZG9uJ3QgcmVhZCAkSE9NRS8uaXBwcmMKICAgICAgLWMg
ZmlsZSB8IHJlYWQgdGhpcyBhcyBpcHByYwogICAgIiIiCiAgICAjIExldCBUQUIgY29tcGxl
dGUgdGhlIGN1cnJlbnQgb2JqZWN0IG5hbWUKICAgIHJlYWRsaW5lLnBhcnNlX2FuZF9iaW5k
KCJ0YWI6IGNvbXBsZXRlIikKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgoKICAgIHMg
PSBzKCkKICAgICAgICAKICAgIGltcG9ydCBfX21haW5fXwogICAgc2hlbGwgPSBJbnRlcmFj
dGl2ZVNoZWxsICMgU2F2ZSBmb3IgbGF0ZXIgdXNlCiAgICBzaGVsbC51c2FnZSA9IHMudXNh
Z2UKICAgIGRlbChfX21haW5fXy5fX2RpY3RfX1sncyddKQoKICAgIHNoZWxsPXNoZWxsKGxv
Y2FsPV9fbWFpbl9fLl9fZGljdF9fKQogICAgc2hlbGwuaW50ZXJhY3QoKQo=

--PIFKdGL6u6
Content-type: application/octet-stream
Content-transfer-encoding: base64
Content-Disposition: attachment;
	filename="ipp"

IyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMKIyBEcml2ZXIgZm9yIHRoZSBpbnRlcmFjdGl2ZSBw
eXRob24gc2hlbGwuIFJlYWRzIHRoZSBjb21tYW5kIGxpbmUgYW5kCiMgZXhlY3V0ZXMgdGhl
IHJjIGZpbGUgaWYgcHJlc2VudC4gVGhlIHJjIGZpbGUgaXMgZXZhbHVhdGVkIGFmdGVyIHRo
ZQojIGNvbW1hbmQgbGluZSBvcHRpbnMsIHNvIHNvbWUgdGhpbmdzIGNhbiBiZSBzZXQgYmFj
ayBpbiB0aGUgcmMtZmlsZS4KIyBFLmcuIHRoZSBmaWxlIGxvZ2dpbmcsIGNhbiBiZSBzZXQg
YW5kIHRoZSBmaWxlIGJlIGZpeGVkIGluIHRoZSByYy1maWxlLgojCmltcG9ydCBpcHAKCnMg
PSBpcHAucygpCiAgICAKcy5vcHQgPSBzLmdldG9wdC5nZXRvcHQocy5zeXMuYXJndlsxOl0s
J2lsc2M6JykKcy5yY2ZpbGUgPSBpcHAub3MuZW52aXJvblsnSE9NRSddKycvLmlwcHJjJwpz
LnJ1biA9IHMub3B0WzFdWzpdCnMuYmVmb3JlID0gMApzLmxvZyA9ICcnCnMuYmFubmVyID0g
IlB5dGhvbiAlcyBvbiAlc1xuJXNcbiglcylcblR5cGUgPyBmb3IgbW9yZSBoZWxwXG4iICUg
KHMuc3lzLnZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuc3lzLnBsYXRmb3JtLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzLnN5cy5jb3B5cmlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdJUFAnKQoKCnNoZWxsID0gaXBwLklu
dGVyYWN0aXZlU2hlbGwgIyBzYXZlIHRvIG92ZXJ3cml0ZSBsYXRlcgoKZm9yIHMubyBpbiBz
Lm9wdFswXToKICAgIGlmIHMub1swXSA9PSAnLXMnOgogICAgICAgIHMucmNmaWxlID0gMAog
ICAgZWxpZiBzLm9bMF0gPT0gJy1pJzoKICAgICAgICBzLmJlZm9yZSA9IDEKICAgIGVsaWYg
cy5vWzBdID09ICctYyc6CiAgICAgICAgcy5yY2ZpbGUgPSBzLm9bMV0KICAgIGVsaWYgcy5v
WzBdID09ICctbCc6CiAgICAgICAgcy5sb2cgPSAnLmlwcC5sb2cnCiAgICBlbGlmIHMub1sw
XSA9PSAnLUwnOgogICAgICAgIHMubG9nID0gcy5vWzFdCiAgICBlbHNlOgogICAgICAgIGNv
bnRpbnVlCgppZiBzLmxvZzoKICAgICMgcmVtb3ZlIGFueSBvbGQgbG9nIGZpbGUuIFNob3Vs
ZCBvbmUgYmUgYXNrZWQ/CiAgICBpZiBzLm9zLnBhdGguaXNmaWxlKHMubG9nKToKICAgICAg
ICBzLm9zLnJlbW92ZShzLmxvZykKICAgIAppZiBzLnJjZmlsZToKICAgIHRyeToKICAgICAg
ICBleGVjZmlsZShzLnJjZmlsZSkKICAgIGV4Y2VwdCBJT0Vycm9yOgogICAgICAgIHBhc3MK
CmlmIG5vdCBzLmJlZm9yZSBhbmQgcy5vcHRbMV06CiAgICAjIE5vIGludGVyYWN0aXZlIHNl
c3Npb24gcnVuIGp1c3QgdGhlIHNjcmlwdAogICAgZm9yIHMuZmlsZSBpbiBzLnJ1bjoKICAg
ICAgICBleGVjZmlsZShzLmZpbGUpCiAgICBzLnN5cy5leGl0KCkKICAgIAppZiBzLmJlZm9y
ZToKICAgIGZvciBzLmZpbGUgaW4gcy5ydW46CiAgICAgICAgZXhlY2ZpbGUocy5maWxlKQog
ICAgCnNoZWxsLmxvZyA9IHMubG9nCnNoZWxsLmJhbm5lciA9IHMuYmFubmVyCnNoZWxsLnVz
YWdlID0gcy51c2FnZQoKaW1wb3J0IF9fbWFpbl9fCmRlbChfX21haW5fXy5fX2RpY3RfX1sn
aXBwJ10pCmRlbChfX21haW5fXy5fX2RpY3RfX1sncyddKQpzaGVsbD1zaGVsbChsb2NhbD1f
X21haW5fXy5fX2RpY3RfXykgIyBpbml0aWFsaXNlIEludGVyYWN0aXZlU2hlbGwKCnNoZWxs
LmludGVyYWN0KGJhbm5lcj1zaGVsbC5iYW5uZXIpICMgRmluaXNoISBPbmx5IGBzaGVsbGAg
cmVtYWlucyBpbiB0aGUgZ2xvYmFsIG5hbWVzcGFjZQo=

--PIFKdGL6u6
Content-type: application/octet-stream
Content-transfer-encoding: base64
Content-Disposition: attachment;
	filename=".ipprc"

IyBBbiBleGFtcGxlIHJjIGZpbGUgZm9yIHRoZSBpbnRlcmFjdGl2ZSBweXRob24gcHJvbXB0
IHByb2dyYW0uCiMgU2hvd3Mgc29tZSBvZiB0aGUgcG9zc2libGUgd2F5cyB0byBjdXN0b21p
emUgdGhlIHB5dGhvbiBzaGVsbC4KIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHBsYWNlIGluIHRo
ZSBob21lLWRpciBhcyAuaXBwcmMKIyAKIyBMb2FkIG1vZHVsZXMKZnJvbSBOdW1lcmljIGlt
cG9ydCAqCgojIEV4ZWN1dGUgc29tZSB0aGluZ3MsIGNoYW5nZSBwcm9tcHQuLi4Kcy5zeXMu
cGF0aC5hcHBlbmQoJ3Rlc3QnKQoKIyBFeHRlbmQgb3IgY2hhbmdlIHRoZSBzaGVsbApkZWYg
d2hvcyhzZWxmKToKICAgICAiIiJMaXN0cyBhbGwgdmFyaWFibGVzIHdoaWNoIGFyZSBub3Qg
aW4gdGhlIHNhdmVkIG5hbWVzcGFjZQogICAgIG9mIHRoZSBpbnRlcmFjdGl2IGludGVycHJl
dGVyLiBUcnkgdG8gZ2l2ZSB0aGUgc2hhcGUgaWYgaXQncyBhIAogICAgIHNlcXVlbmNlLgog
ICAgICIiIgogICAgIGZvciBpIGluIHNlbGYubG9jYWxzLmtleXMoKToKICAgICAgICAgaWYg
c2VsZi5zYXZlX2xvY2FsLmhhc19rZXkoaSk6CiAgICAgICAgICAgICBpZiBzZWxmLmxvY2Fs
c1tpXSBpcyBzZWxmLnNhdmVfbG9jYWxbaV06CiAgICAgICAgICAgICAgICAgcGFzcwogICAg
ICAgICBlbHNlOgogICAgICAgICAgICAgcHJpbnQgaSsnIFx0XHQnK2B0eXBlKHNlbGYubG9j
YWxzW2ldKWAsCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcHJpbnQgJ1x0
XHQnK2BzaGFwZShzZWxmLmxvY2Fsc1tpXSlgCiAgICAgICAgICAgICBleGNlcHQgVHlwZUVy
cm9yOgogICAgICAgICAgICAgICAgIHByaW50ICMganVzdCBhIG5ld2xpbmUKCgpzaGVsbC53
aG9zPXdob3MgICMgdGhpcyBjYW4gYmUgdXNlZCBpbiB0aGUgc2hlbGwgYnkgQHdob3MKZGVs
KHdob3MpICMga2VlcCB0aGUgbmFtZXNwYWNlIGNsZWFuCg==

--PIFKdGL6u6--