[Gtk-sharp-list] TextViewer

Patrik Olterman patrik@olterman.se
19 May 2003 07:49:42 +0200


--=-SFpU2tL2FNPW924YDJkv
Content-Type: multipart/mixed; boundary="=-of6csPyS2R8Z2HWrxmDh"


--=-of6csPyS2R8Z2HWrxmDh
Content-Type: text/plain
Content-Transfer-Encoding: quoted-printable

Hello=20

I am writing a C# editor to leran C# and GTK# right now the main editor
window is a textviewer added to a scrolled window. Is there a better way
to do this.=20

What methods and members are there of the TextViewer class, that is how
can I access the text written in there?=20

Also I am creating a separate window for my settings, if I destroy that
window I cannot open a new one. How do I create a window without the
destroy window button? Alternatively how do I make it so I can reuse the
window even when destroyed (submitting the code here, forgive the messy
code its my first try)=20

Thirdly is there a way to get System.IO.Directory.Exists to acknowledge
a path like ~/.mydir so that I can create a custom settings file per
user ?=20

--=-of6csPyS2R8Z2HWrxmDh
Content-Disposition: attachment; filename=compile.cs
Content-Type: x-directory/normal; name=compile.cs
Content-Transfer-Encoding: base64

LyoKICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IgbW9kaWZ5CiAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogKiAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICogIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqICBUaGlzIHByb2dyYW0gaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlCiAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgog
KgogKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxh
Y2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgogKgogKiAgUHJvZHVj
ZWQgYnkgUGF0cmlrIE9sdGVybWFuIAogKiAgcGF0cmlrQG9sdGVybWFuLnNlCiAqCiAqLwp1c2lu
ZyBTeXN0ZW07CnVzaW5nIFN5c3RlbS5EaWFnbm9zdGljczsKdXNpbmcgU3lzdGVtLlhtbDsKdXNp
bmcgU3lzdGVtLklPOwp1c2luZyBHdGs7CnVzaW5nIEd0a1NoYXJwOwoKY2xhc3MgZXpjb21wIHsK
ICBzdGF0aWMgdm9pZCBNYWluKCkKICB7CiAgICAvL0luaXRpYWxpemluZyB0aGUgYXBwbGljYXRp
b24KICAgIEFwcGxpY2F0aW9uLkluaXQoKTsKICAgIC8vY3JlYXRpbmcgdGhlIHdpbmRvdyBvYmpl
Y3QKICAgIG5ldyBndWkoKTsKICAgIC8vc3RhcnRpbmcgdGhlIGFwcGxpY2F0aW9uCiAgICBBcHBs
aWNhdGlvbi5SdW4oKTsKICB9CgogIAoKfQpjbGFzcyBndWkgewogIC8vIGRlY2xhcmluZyB0aG9z
ZSBkaWFsb2dzIHRoYXQgbmVlZCB0byBiZSBnbG9iYWwKICBTdHJpbmcgYXJnTmFtZSwgZGlyTmFt
ZSwgb3V0TmFtZSwgZmlsZU5hbWUsIGVycm9yX21lc3NhZ2U7CiAgU3RhdHVzYmFyIHN0YXQxOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICBFbnRy
eSB0ZXh0MSwgdGV4dDIsdGV4dDMsdGV4dDQ7CiAgTWVzc2FnZURpYWxvZyBkaWFsb2csIG91dHB1
dF9kaWFsb2c7CiAgV2luZG93IHdpbjEsIHNldHRpbmdzX3dpbmRvdywgYWJvdXRfd2luZG93LCBv
dXRwdXRfd2luZG93OwogIExhYmVsIGxhYmVsMSwgbGFiZWwyLCBsYWJlbDMsIGxhYmVsNDsKICBW
Qm94IGJveDEsIGJveDI7CiAgQnV0dG9uIGhpZGVfYnV0dG9uOwogIE1lbnVCYXIgbWI7CiAgTWVu
dSBmaWxlX21lbnUsIGJ1aWxkX21lbnUsIHNldHRpbmdzX21lbnUsIGhlbHBfbWVudTsKICBNZW51
SXRlbSBmaWxlX2l0ZW0sIGJ1aWxkX2l0ZW0sIHNldHRpbmdzX2l0ZW0sIGhlbHBfaXRlbTsKICBN
ZW51SXRlbSBleGl0X2l0ZW0sIGNvbXBpbGVfaXRlbSwgcnVuX2l0ZW0sIGtpbGxfaXRlbSwgYWJv
dXRfaXRlbSwgZWRpdF9pdGVtLCBsb2FkX3NldHRpbmdzX2l0ZW0sIHNhdmVfc2V0dGluZ3NfaXRl
bTsKICBTY3JvbGxlZFdpbmRvdyBtYWluX3dpbjsKICBUZXh0VmlldyBtYWluX3RleHQ7CiAgcHVi
bGljIGd1aSgpewogICAgLy8gZ3JlYXRpbmcgdGhlIHdpZGdldHMKICAgIHdpbjEgPSBuZXcgV2lu
ZG93ICgiRVogY29tcGlsZSIpOwogICAgc2V0dGluZ3Nfd2luZG93ID0gbmV3IFdpbmRvdyAoIkVa
IHNldHRpbmdzIik7CiAgICAKICAKICAgIGxhYmVsMSA9IG5ldyBMYWJlbCAoIndoYXQgZGlyZWN0
b3J5IGlzIHlvdXIgY29kZSBpbj8iKTsKICAgIGxhYmVsMiA9IG5ldyBMYWJlbCAoIndoYXQgc2Ny
aXB0IGRvIHlvdSB3YW50IHRvIGNvbXBpbGU/Iik7CiAgICBsYWJlbDMgPSBuZXcgTGFiZWwgKCJ3
aGF0IGZpbGUgc2hvdWxkIEkgb3V0cHV0IHRvPyIpOwogICAgbGFiZWw0ID0gbmV3IExhYmVsICgi
Y29tcGlsYXRpb24gYXJndW1lbnRzIik7CiAgICBib3gxID0gbmV3IFZCb3ggKGZhbHNlLCAwKTsK
ICAgIGJveDIgPSBuZXcgVkJveCAoZmFsc2UsIDApOwogICAgaGlkZV9idXR0b24gPSBuZXcgQnV0
dG9uICgiSGlkZSBzZXR0aW5ncyIpOwoKICAgIG1iID0gbmV3IE1lbnVCYXIoKTsKICAgIAogICAg
CiAgICBmaWxlX21lbnUgPSBuZXcgTWVudSgpOwogICAgYnVpbGRfbWVudSA9IG5ldyBNZW51KCk7
CiAgICBzZXR0aW5nc19tZW51ID0gbmV3IE1lbnUoKTsKICAgIGhlbHBfbWVudSA9IG5ldyBNZW51
KCk7CiAgICAKICAgIGZpbGVfaXRlbSA9IG5ldyBNZW51SXRlbSgiRmlsZSIpOwogICAgYnVpbGRf
aXRlbSA9IG5ldyBNZW51SXRlbSgiQnVpbGQiKTsKICAgIHNldHRpbmdzX2l0ZW0gPSBuZXcgTWVu
dUl0ZW0oIlNldHRpbmdzIik7CiAgICAKICAgIGNvbXBpbGVfaXRlbSA9IG5ldyBNZW51SXRlbSgi
Q29tcGlsZSIpOwogICAgcnVuX2l0ZW0gPSBuZXcgTWVudUl0ZW0oIlJ1biIpOwogICAga2lsbF9p
dGVtID0gbmV3IE1lbnVJdGVtKCJLaWxsYWxsIG1vbm8iKTsKICAgIGV4aXRfaXRlbSA9IG5ldyBN
ZW51SXRlbSgiUXVpdCIpOwogICAgaGVscF9pdGVtID0gbmV3IE1lbnVJdGVtKCJIZWxwIik7CiAg
ICBhYm91dF9pdGVtID0gbmV3IE1lbnVJdGVtKCJBYm91dCIpOwogICAgZWRpdF9pdGVtID0gbmV3
IE1lbnVJdGVtKCJFZGl0IFNldHRpbmdzIik7CiAgICBzYXZlX3NldHRpbmdzX2l0ZW0gPSBuZXcg
TWVudUl0ZW0oIlNhdmUgU2V0dGluZ3MiKTsKICAgIGxvYWRfc2V0dGluZ3NfaXRlbSA9IG5ldyBN
ZW51SXRlbSgiTG9hZCBTZXR0aW5ncyIpOwoKICAgIHRleHQxID0gbmV3IEVudHJ5ICgpOwogICAg
dGV4dDIgPSBuZXcgRW50cnkgKCk7CiAgICB0ZXh0MyA9IG5ldyBFbnRyeSAoKTsKICAgIHRleHQ0
ID0gbmV3IEVudHJ5ICgpOwogICAgbWFpbl93aW4gPSBuZXcgU2Nyb2xsZWRXaW5kb3cgKCk7CiAg
ICBtYWluX3RleHQgPSBuZXcgVGV4dFZpZXcgKCk7CgogICAgc3RhdDEgPSBuZXcgU3RhdHVzYmFy
KCk7IAogICAgLy9jaGVja19ndGtzaGFycCA9IG5ldyBDaGVja0J1dHRvbigiZ3RrLXNoYXJwIik7
CgogICAgYWJvdXRfd2luZG93ID0gbmV3IFdpbmRvdyAoIkFib3V0IEVaIGNvbXBpbGUiKTsKICAg
IGRpYWxvZyA9IG5ldyBNZXNzYWdlRGlhbG9nIChhYm91dF93aW5kb3csIERpYWxvZ0ZsYWdzLkRl
c3Ryb3lXaXRoUGFyZW50LCBNZXNzYWdlVHlwZS5JbmZvLCBCdXR0b25zVHlwZS5PaywgIkVaIENv
bXBpbGUgd2FzIHdyaXR0ZW4gYnkgUGF0cmlrIE9sdGVybWFuIik7CiAgICAvLyBmaXhpbmcgZXZl
bnRoYW5kbGVycwogICAgd2luMS5EZWxldGVFdmVudCArPSBuZXcgRGVsZXRlRXZlbnRIYW5kbGVy
IChkZWxldGUpOwogIAoKICAgIGNvbXBpbGVfaXRlbS5BY3RpdmF0ZWQgKz0gbmV3IEV2ZW50SGFu
ZGxlciAoY29tcCk7CiAgICBydW5faXRlbS5BY3RpdmF0ZWQgKz0gbmV3IEV2ZW50SGFuZGxlciAo
cnVuKTsKICAgIGtpbGxfaXRlbS5BY3RpdmF0ZWQgKz0gbmV3IEV2ZW50SGFuZGxlciAoa2lsbCk7
CiAgICBleGl0X2l0ZW0uQWN0aXZhdGVkICs9IG5ldyBFdmVudEhhbmRsZXIgKGRlbGV0ZSk7ICAg
IAogICAgYWJvdXRfaXRlbS5BY3RpdmF0ZWQgKz0gbmV3IEV2ZW50SGFuZGxlciAoYWJvdXRfZXZl
bnQpOwogICAgZWRpdF9pdGVtLkFjdGl2YXRlZCArPSBuZXcgRXZlbnRIYW5kbGVyIChlZGl0X2V2
ZW50KTsKICAgIHNhdmVfc2V0dGluZ3NfaXRlbS5BY3RpdmF0ZWQgKz0gbmV3IEV2ZW50SGFuZGxl
ciAoc2F2ZV9zZXR0aW5ncyk7CiAgICBsb2FkX3NldHRpbmdzX2l0ZW0uQWN0aXZhdGVkICs9IG5l
dyBFdmVudEhhbmRsZXIgKGxvYWRfc2V0dGluZ3MpOwogICAgZGlhbG9nLlJlc3BvbnNlICs9IG5l
dyBSZXNwb25zZUhhbmRsZXIgKGRpYWxvZ19yZXNwb25zZSk7CiAgICAKICAgIGhpZGVfYnV0dG9u
LkNsaWNrZWQgKz0gbmV3IEV2ZW50SGFuZGxlciAoaGlkZV9zZXR0aW5ncyk7CgogICAgdGV4dDEu
Q2hhbmdlZCArPSBuZXcgRXZlbnRIYW5kbGVyIChjaGFuZ2VjbWQpOwogICAgdGV4dDIuQ2hhbmdl
ZCArPSBuZXcgRXZlbnRIYW5kbGVyIChjaGFuZ2VjbWQpOwogICAgdGV4dDMuQ2hhbmdlZCArPSBu
ZXcgRXZlbnRIYW5kbGVyIChjaGFuZ2VjbWQpOwogICAgdGV4dDQuQ2hhbmdlZCArPSBuZXcgRXZl
bnRIYW5kbGVyIChjaGFuZ2VjbWQpOwoKICAgIC8vIHBhY2tpbmcgdGhlIHdpbmRvdwogICAgc2V0
dGluZ3NfbWVudS5BcHBlbmQgKGVkaXRfaXRlbSk7CiAgICBzZXR0aW5nc19tZW51LkFwcGVuZCAo
bG9hZF9zZXR0aW5nc19pdGVtKTsKICAgIHNldHRpbmdzX21lbnUuQXBwZW5kIChzYXZlX3NldHRp
bmdzX2l0ZW0pOwoKICAgIGJ1aWxkX21lbnUuQXBwZW5kIChjb21waWxlX2l0ZW0pOwogICAgYnVp
bGRfbWVudS5BcHBlbmQgKHJ1bl9pdGVtKTsKICAgIGJ1aWxkX21lbnUuQXBwZW5kIChraWxsX2l0
ZW0pOwogICAgZmlsZV9tZW51LkFwcGVuZCAoZXhpdF9pdGVtKTsKICAgIGhlbHBfbWVudS5BcHBl
bmQgKGFib3V0X2l0ZW0pOwoKICAgIGZpbGVfaXRlbS5TdWJtZW51ID0gZmlsZV9tZW51OwogICAg
YnVpbGRfaXRlbS5TdWJtZW51ID0gYnVpbGRfbWVudTsKICAgIHNldHRpbmdzX2l0ZW0uU3VibWVu
dSA9IHNldHRpbmdzX21lbnU7CiAgICBoZWxwX2l0ZW0uU3VibWVudSA9IGhlbHBfbWVudTsKCiAg
ICBtYi5BcHBlbmQgKGZpbGVfaXRlbSk7CiAgICBtYi5BcHBlbmQgKGJ1aWxkX2l0ZW0pOwogICAg
bWIuQXBwZW5kIChzZXR0aW5nc19pdGVtKTsKICAgIG1iLkFwcGVuZCAoaGVscF9pdGVtKTsKICAg
IG1haW5fd2luLkFkZCAobWFpbl90ZXh0KTsKICAgIGJveDIuUGFja1N0YXJ0KG1iLCBmYWxzZSwg
ZmFsc2UsIDApOwogICAgYm94Mi5QYWNrU3RhcnQobWFpbl93aW4sIHRydWUsIHRydWUsIDApOwog
ICAgYm94Mi5QYWNrRW5kKHN0YXQxLCBmYWxzZSwgZmFsc2UsIDApOwogICAgYm94MS5QYWNrU3Rh
cnQobGFiZWwxLCBmYWxzZSwgZmFsc2UsIDApOwogICAgYm94MS5QYWNrU3RhcnQodGV4dDEsIGZh
bHNlLCBmYWxzZSwgMCk7CiAgICBib3gxLlBhY2tTdGFydChsYWJlbDIsIGZhbHNlLCBmYWxzZSwg
MCk7CiAgICBib3gxLlBhY2tTdGFydCh0ZXh0MiwgZmFsc2UsIGZhbHNlLCAwKTsgCiAgICBib3gx
LlBhY2tTdGFydChsYWJlbDQsIGZhbHNlLCBmYWxzZSwgMCk7CiAgICBib3gxLlBhY2tTdGFydCh0
ZXh0NCwgZmFsc2UsIGZhbHNlLCAwKTsKICAgIGJveDEuUGFja1N0YXJ0KGxhYmVsMywgZmFsc2Us
IGZhbHNlLCAwKTsKICAgIGJveDEuUGFja1N0YXJ0KHRleHQzLCBmYWxzZSwgZmFsc2UsIDApOwog
ICAgYm94MS5QYWNrU3RhcnQoaGlkZV9idXR0b24sIGZhbHNlLCBmYWxzZSwgMCk7CgogIAogIAog
ICAgc2V0dGluZ3Nfd2luZG93LkFkZChib3gxKTsKICAgIHdpbjEuQWRkKGJveDIpOwogICAgd2lu
MS5TaG93QWxsICgpOwogIH0KcHVibGljIHZvaWQgY29tcChvYmplY3Qgb2JqLCBFdmVudEFyZ3Mg
YXJncykgCiAgewogICAgUHJvY2VzcyBjb207CgogICAgCiAgICAvL2NyZWF0aW5nIHRoZSBwcm9j
ZXNzIG9iamVjdAogICAgY29tID0gbmV3IFByb2Nlc3MoKTsKCiAgICBjb20uU3RhcnRJbmZvLlVz
ZVNoZWxsRXhlY3V0ZSA9IGZhbHNlOwogICAgY29tLlN0YXJ0SW5mby5SZWRpcmVjdFN0YW5kYXJk
T3V0cHV0ID0gdHJ1ZTsKICAgIC8vd2hhdCBwcm9ncmFtIGRvIHlvdSB3YW50IHRvIHN0YXJ0CiAg
ICBjb20uU3RhcnRJbmZvLkZpbGVOYW1lID0gIm1jcyAiICsgYXJnTmFtZSArICIgLW8gIiArIGRp
ck5hbWUgKyAiLyIgKyBvdXROYW1lICsgIiAiICsgZGlyTmFtZSArICIvIiArIGZpbGVOYW1lOwoK
ICAgIC8vYW55IGNvbW1hbmRsaW5lIGFyZ3VtZW50cyBnbyBoZXJlCiAgICAvL2NvbS5TdGFydElu
Zm8uQXJndW1lbnRzID0gIiI7CiAgICAvL3J1biB0aGUgcHJvY2VzcwogICAgY29tLlN0YXJ0KCk7
CiAgICAvL3dhaXQgZm9yIGl0IHRvIGZpbm5pc2gKICAgIGVycm9yX21lc3NhZ2UgPSBjb20uU3Rh
bmRhcmRPdXRwdXQuUmVhZFRvRW5kKCk7CiAgICBjb20uV2FpdEZvckV4aXQoKTsKICAgIC8vcHJp
bnQgZXhpdGNvZGUKICAgIGlmKGNvbS5FeGl0Q29kZT09MCkKICAgIHsKICAgICAgCiAgICAgIHVp
bnQgY29udGV4dF9pZCA9IHN0YXQxLkdldENvbnRleHRJZCAoImZvbyIpOwogICAgICBzdGF0MS5Q
dXNoIChjb250ZXh0X2lkLCAiQ29tcGlsZWQgc3VjY2Vzc2Z1bGx5Iik7CiAgICAgCiAgICB9CiAg
ICBlbHNlCiAgICB7CiAgICAgIHVpbnQgY29udGV4dF9pZCA9IHN0YXQxLkdldENvbnRleHRJZCAo
ImZvbyIpOwogICAgICBzdGF0MS5QdXNoIChjb250ZXh0X2lkLCAiQ29tcGlsYXRpb24gZmFpbGVk
Iik7CiAgICAgIAogICAgICBkaXNwbGF5X291dHB1dChlcnJvcl9tZXNzYWdlKTsKICAgICAgLy9D
b25zb2xlLldyaXRlTGluZSgiLS0tPiIgKyBlcnJvcl9tZXNzYWdlICsgIjwtLS0tIik7CiAgICB9
CgogIH0KICBwdWJsaWMgdm9pZCBydW4ob2JqZWN0IG9iaiwgRXZlbnRBcmdzIGFyZ3MpIAogIHsK
ICAgIAogICAgLy9jcmVhdGluZyB0aGUgcHJvY2VzcyBvYmplY3QKICAgIFByb2Nlc3MgY21kID0g
bmV3IFByb2Nlc3MoKTsKICAgIC8vd2hhdCBwcm9ncmFtIGRvIHlvdSB3YW50IHRvIHN0YXJ0CiAg
ICBjbWQuU3RhcnRJbmZvLkZpbGVOYW1lID0gIm1vbm8iOwogICAgLy9hbnkgY29tbWFuZGxpbmUg
YXJndW1lbnRzIGdvIGhlcmUKICAgIGNtZC5TdGFydEluZm8uQXJndW1lbnRzID0gZGlyTmFtZSAr
ICIvIiArIG91dE5hbWU7CiAgICAvL3J1biB0aGUgcHJvY2VzcwogICAgY21kLlN0YXJ0KCk7CiAg
ICBzdHJpbmcgc3RhdHVzPSJFeGVjdXRpbmcgOiIgKyBvdXROYW1lOwogICAgdWludCBjb250ZXh0
X2lkID0gc3RhdDEuR2V0Q29udGV4dElkICgiZm9vIik7CiAgICBzdGF0MS5QdXNoIChjb250ZXh0
X2lkLCBzdGF0dXMpOwogICAgLy93YWl0IGZvciBpdCB0byBmaW5uaXNoCiAgICAvL2NtZC5XYWl0
Rm9yRXhpdCgpOwogICAgLy9jb250ZXh0X2lkID0gc3RhdDEuR2V0Q29udGV4dElkICgiZm9vIik7
CiAgICAvL3N0YXQxLlB1c2ggKGNvbnRleHRfaWQsICIiKTsKICAgIAogIH0KcHVibGljIHZvaWQg
a2lsbChvYmplY3Qgb2JqLCBFdmVudEFyZ3MgYXJncykgCiAgewogICAgCiAgICAvL2NyZWF0aW5n
IHRoZSBwcm9jZXNzIG9iamVjdAogICAgUHJvY2VzcyBjbWQgPSBuZXcgUHJvY2VzcygpOwogICAg
Ly93aGF0IHByb2dyYW0gZG8geW91IHdhbnQgdG8gc3RhcnQKICAgIGNtZC5TdGFydEluZm8uRmls
ZU5hbWUgPSAia2lsbGFsbCI7CiAgICAvL2FueSBjb21tYW5kbGluZSBhcmd1bWVudHMgZ28gaGVy
ZQogICAgY21kLlN0YXJ0SW5mby5Bcmd1bWVudHMgPSAibW9ubyI7CiAgICAvL3J1biB0aGUgcHJv
Y2VzcwogICAgY21kLlN0YXJ0KCk7CiAgICAvL0NvbnNvbGUuV3JpdGVMaW5lKCJFeGVjdXRpbmcg
OiIgKyBvdXROYW1lKTsKICAgIC8vd2FpdCBmb3IgaXQgdG8gZmlubmlzaAogICAgLy9jbWQuV2Fp
dEZvckV4aXQoKTsKICAgIHN0cmluZyBzdGF0dXM9IktpbGxpbmcgbW9ubyI7CiAgICB1aW50IGNv
bnRleHRfaWQgPSBzdGF0MS5HZXRDb250ZXh0SWQgKCJmb28iKTsKICAgIHN0YXQxLlB1c2ggKGNv
bnRleHRfaWQsIHN0YXR1cyk7CiAgfQoKCiAgICBwdWJsaWMgdm9pZCBjaGFuZ2VjbWQob2JqZWN0
IG9iaiwgRXZlbnRBcmdzIGFyZ3MpCiAgICAvL2NhbGxlZCB3aGVuIGJ1dHRvbiB0ZXh0IGlzIGNo
YW5nZWQKICAgIHsKICAgICAgZGlyTmFtZT10ZXh0MS5UZXh0OwogICAgICBmaWxlTmFtZT10ZXh0
Mi5UZXh0OwogICAgICBvdXROYW1lPXRleHQzLlRleHQ7CiAgICAgIGFyZ05hbWU9dGV4dDQuVGV4
dDsKCiAgICAgIHN0cmluZyBzdGF0dXM9IiI7CiAgICAgIHVpbnQgY29udGV4dF9pZCA9IHN0YXQx
LkdldENvbnRleHRJZCAoImZvbyIpOwogICAgICBzdGF0MS5QdXNoIChjb250ZXh0X2lkLCBzdGF0
dXMpOwoKICAgIH0KCiAgcHVibGljIHZvaWQgYWJvdXRfZXZlbnQob2JqZWN0IG9iaiwgRXZlbnRB
cmdzIGFyZ3MpCiAgICAvL2NhbGxlZCB3aGVuIGFib3V0IGlzIGNob3NlbiBpbiB0aGUgaGVscCBt
ZW51CiAgICB7CiAgICAgIGRpYWxvZy5TaG93KCk7CiAgICB9CgogIHB1YmxpYyB2b2lkIGRpc3Bs
YXlfb3V0cHV0KHN0cmluZyBvdXRwdXQpCiAgewogICAgb3V0cHV0X3dpbmRvdyA9IG5ldyBXaW5k
b3cgKCJPdXRwdXQiKTsKICAgIG91dHB1dF9kaWFsb2cgPSBuZXcgTWVzc2FnZURpYWxvZyAob3V0
cHV0X3dpbmRvdywgRGlhbG9nRmxhZ3MuRGVzdHJveVdpdGhQYXJlbnQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTWVzc2FnZVR5cGUuV2FybmluZywgQnV0dG9uc1R5cGUuT2ssIG91
dHB1dCk7CiAgICBvdXRwdXRfZGlhbG9nLlJlc3BvbnNlICs9IG5ldyBSZXNwb25zZUhhbmRsZXIg
KG91dHB1dF9yZXNwb25zZSk7CiAgICBvdXRwdXRfZGlhbG9nLlNob3coKTsKICB9CiAgcHVibGlj
IHZvaWQgb3V0cHV0X3Jlc3BvbnNlKG9iamVjdCBzZW5kZXIsIFJlc3BvbnNlQXJncyBhcmdzKQog
ICAgLy9jYWxsZWQgYnV0dG9uIGlzIHByZXNzZWQgaW4gdGhlIGVycm9yIHdpbmRvdwogIHsKICAg
IG91dHB1dF9kaWFsb2cuSGlkZSgpOwogIH0KICBwdWJsaWMgdm9pZCBkaWFsb2dfcmVzcG9uc2Uo
b2JqZWN0IHNlbmRlciwgUmVzcG9uc2VBcmdzIGFyZ3MpCiAgICAvL2NhbGxlZCBidXR0b24gaXMg
cHJlc3NlZCBpbiB0aGUgYWJvdXQgd2luZG93CiAgewogICAgZGlhbG9nLkhpZGUoKTsKICB9CiAg
CiAgcHVibGljIHZvaWQgc2F2ZV9zZXR0aW5ncyhvYmplY3Qgb2JqLCBFdmVudEFyZ3MgYXJncykK
ICB7CiAgICBpZighKERpcmVjdG9yeS5FeGlzdHMoIi5lemMiKSkpCiAgICB7CiAgICAgIC8vaWYg
dGhlIGRpcmVjdG9yeSBkdW4gZXhpc3Qgd2UgY3JlYXRlIGl0IAogICAgICBEaXJlY3RvcnkuQ3Jl
YXRlRGlyZWN0b3J5KCIuZXpjIik7CiAgICB9CiAgICAKICAgIFhtbFRleHRXcml0ZXIgdyA9IG5l
dyBYbWxUZXh0V3JpdGVyICgiLmV6Yy9lemMueG1sIiwgbnVsbCk7CiAgICAKICAgIHcuV3JpdGVT
dGFydERvY3VtZW50KCk7CiAgICB3LldyaXRlU3RhcnRFbGVtZW50KCJlemNfc2V0dGluZ3MiKTsg
CiAgICAKICAgIHcuV3JpdGVFbGVtZW50U3RyaW5nKCJjb2RlX3BhdGgiLCBkaXJOYW1lKTsgICAK
ICAgIHcuV3JpdGVFbGVtZW50U3RyaW5nKCJjb2RlX2ZpbGUiLCBmaWxlTmFtZSk7CiAgICB3Lldy
aXRlRWxlbWVudFN0cmluZygiY29tcF9hcmdzIiwgYXJnTmFtZSk7CiAgICB3LldyaXRlRWxlbWVu
dFN0cmluZygiZXhlX2ZpbGUiLCBvdXROYW1lKTsKICAgIAogICAgdy5Xcml0ZUVuZEVsZW1lbnQo
KTsKICAgIHcuV3JpdGVFbmREb2N1bWVudCgpOwogICAgdy5DbG9zZSgpOwogICAgCiAgICBzdHJp
bmcgc3RhdHVzID0gIlNldHRpbmdzIHNhdmVkIjsKICAgIHVpbnQgY29udGV4dF9pZCA9IHN0YXQx
LkdldENvbnRleHRJZCAoImZvbyIpOwogICAgc3RhdDEuUHVzaCAoY29udGV4dF9pZCwgc3RhdHVz
KTsKICB9CiAgCiAgcHVibGljIHZvaWQgbG9hZF9zZXR0aW5ncyhvYmplY3Qgb2JqLCBFdmVudEFy
Z3MgYXJncykKICB7CiAgICAvLyBjcmVhdGUgYSByZXByZXNlbnRhdGlvbiBvZiB4bWwgaW4gbWVt
b3J5IAogICAgWG1sRG9jdW1lbnQgZG9jID0gbmV3IFhtbERvY3VtZW50KCk7CiAgICBkb2MuTG9h
ZCgiLmV6Yy9lemMueG1sIik7CiAgICAKICAgIC8vbm9kZWxpc3QgZm9yIHBhdGggCiAgICBYbWxO
b2RlTGlzdCBlTGlzdDsgCiAgICBlTGlzdCA9IGRvYy5HZXRFbGVtZW50c0J5VGFnTmFtZSgiY29k
ZV9wYXRoIik7CiAgICB0ZXh0MS5UZXh0ID0gZUxpc3RbMF0uSW5uZXJYbWw7CiAgICAKICAgIGVM
aXN0ID0gZG9jLkdldEVsZW1lbnRzQnlUYWdOYW1lKCJjb2RlX2ZpbGUiKTsKICAgIHRleHQyLlRl
eHQgPSBlTGlzdFswXS5Jbm5lclhtbDsKCiAgICBlTGlzdCA9IGRvYy5HZXRFbGVtZW50c0J5VGFn
TmFtZSgiY29tcF9hcmdzIik7CiAgICB0ZXh0NC5UZXh0ID0gZUxpc3RbMF0uSW5uZXJYbWw7Cgog
ICAgZUxpc3QgPSBkb2MuR2V0RWxlbWVudHNCeVRhZ05hbWUoImV4ZV9maWxlIik7CiAgICB0ZXh0
My5UZXh0ID0gZUxpc3RbMF0uSW5uZXJYbWw7CgogICAgc3RyaW5nIHN0YXR1cyA9ICJDdXN0b20g
c2V0dGluZ3MgbG9hZGVkIjsKICAgIHVpbnQgY29udGV4dF9pZCA9IHN0YXQxLkdldENvbnRleHRJ
ZCAoImZvbyIpOwogICAgc3RhdDEuUHVzaCAoY29udGV4dF9pZCwgc3RhdHVzKTsKICB9CiAgcHVi
bGljIHZvaWQgZWRpdF9ldmVudChvYmplY3Qgb2JqLCBFdmVudEFyZ3MgYXJncykKICB7CiAgICBz
ZXR0aW5nc193aW5kb3cuU2hvd0FsbCgpOwogIH0KICBwdWJsaWMgdm9pZCBoaWRlX3NldHRpbmdz
KG9iamVjdCBvYmosIEV2ZW50QXJncyBhcmdzKQogIHsKICAgIHNldHRpbmdzX3dpbmRvdy5IaWRl
KCk7CiAgfQogIHB1YmxpYyB2b2lkIGRlbGV0ZShvYmplY3Qgb2JqLCBFdmVudEFyZ3MgYXJncykK
ICAgIC8vY2FsbGVkIHdoZW4gd2luZG93IGlzIGNsb3NlZAogIHsKICAgIEFwcGxpY2F0aW9uLlF1
aXQoKTsKICB9CiAgCiAgcHVibGljIHZvaWQgZGVsZXRlKG9iamVjdCBvYmosIERlbGV0ZUV2ZW50
QXJncyBhcmdzKQogICAgLy9jYWxsZWQgd2hlbiB3aW5kb3cgaXMgY2xvc2VkCiAgewogICAgQXBw
bGljYXRpb24uUXVpdCgpOwogIH0KfQo=

--=-of6csPyS2R8Z2HWrxmDh--

--=-SFpU2tL2FNPW924YDJkv
Content-Type: application/pgp-signature; name=signature.asc
Content-Description: This is a digitally signed message part

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.2 (GNU/Linux)

iD8DBQA+yHB1HeA7AF1UGKMRAtWbAJ90FeCXPRRecnaJRP27VevlRGTZMACfanDo
UhErAvvVDGsE+r4Cmr2TEsw=
=fB/u
-----END PGP SIGNATURE-----

--=-SFpU2tL2FNPW924YDJkv--