[Mono-docs-list] Same gnome#

Camilo Uribe Camilo Uribe <camilo.uribe@gmail.com>
Mon, 10 Jan 2005 10:41:53 -0500


------=_Part_599_27743434.1105371713169
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

A gtk#(no gnome#) version of same-gnome, for windows and linux

compile with:
mcs -r:gtk-sharp  -r:gdk-sharp -r:glib-sharp same-gnome.cs

------=_Part_599_27743434.1105371713169
Content-Type: application/octet-stream; name="same-gnome.cs"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="same-gnome.cs"

LyogCiAqIFNhbWUtR25vbWUjCiAqCiAqIEF1dGhvcjogQ2FtaWxvIFVyaWJlCiAqCiAqIEJhc2Vk
IGluIFNhbWUtR25vbWUuCiAqCiAqLwoKdXNpbmcgR3RrOwp1c2luZyBHdGtTaGFycDsKdXNpbmcg
R2RrOwp1c2luZyBHZGtTaGFycDsKdXNpbmcgR0xpYjsKCnVzaW5nIFN5c3RlbTsKdXNpbmcgU3lz
dGVtLklPOwoKcHVibGljIHN0cnVjdCBCYWxsewogIHB1YmxpYyBpbnQgY29sb3I7CiAgcHVibGlj
IGludCB0YWc7CiAgcHVibGljIGludCBmcmFtZTsKfQoKY2xhc3MgU2FtZUdub21lIHsKICBHdGsu
V2luZG93IHdpbmRvdzsKICBzdHJpbmcgUElYTUFQRElSOwogIGludCBTVE9ORV9TSVpFOwogIGlu
dCBTVE9ORV9DT0xTOyAKICBpbnQgU1RPTkVfTElORVM7CiAgaW50IHNjb3JlLCBzeW5jX3N0b25l
czsKICBEcmF3aW5nQXJlYSBkcmF3X2FyZWE7CiAgQmFsbFssXSBmaWVsZDsKICBib29sIGdhbWVf
b3ZlcjsKICBSYW5kb20gcmFuZDsKICBpbnQgbmNvbG9yczsKICBpbnQgbnN0b25lczsKICBWQm94
IHZiOwogIExhYmVsIHNjb3JldzsKICBMYWJlbCBsYWJlbFN0YXR1czsKICBQaXhidWYgaW1hZ2U7
CiAgaW50IG9sZF94OwogIGludCBvbGRfeTsKICBpbnQgdGFnZ2VkX2NvdW50OwogIHVpbnQgYmFs
bF90aW1lb3V0X2lkOwogIHN0cmluZyB0aGVtZTsKCiAgTWVudUJhciBtZW51QmFyOwoKICBNZW51
SXRlbSBnYW1lSXRlbTsKICBNZW51IGdhbWVNZW51OwogIE1lbnVJdGVtIG5ld0dhbWVJdGVtOwog
IEltYWdlTWVudUl0ZW0gcXVpdEl0ZW07CgogIE1lbnVJdGVtIHNldHRpbmdzSXRlbTsKICBNZW51
IHNldHRpbmdzTWVudTsKICBJbWFnZU1lbnVJdGVtIHByZWZlcmVuY2VzSXRlbTsKCiAgTWVudUl0
ZW0gaGVscEl0ZW07CiAgTWVudSBoZWxwTWVudTsKICBNZW51SXRlbSBhYm91dEl0ZW07CgogIFNh
bWVHbm9tZShzdHJpbmcgZm5hbWUpewogICAgUElYTUFQRElSPSJwaXhtYXBzLyI7CiAgICBnYW1l
X292ZXIgPSBmYWxzZTsKICAgIGJhbGxfdGltZW91dF9pZCA9IDA7CiAgICB0YWdnZWRfY291bnQg
PSAwOwogICAgb2xkX3ggPSAtMTsKICAgIG9sZF95ID0gLTE7CiAgICBTVE9ORV9TSVpFPTQwOwog
ICAgU1RPTkVfQ09MUz0xNTsKICAgIFNUT05FX0xJTkVTPTEwOwogICAgcmFuZCA9IG5ldyBSYW5k
b20oKTsgICAgCiAgICBuY29sb3JzPTA7CiAgICBuc3RvbmVzPTA7CiAgICBzeW5jX3N0b25lcz0w
OwoKICAgIGZpZWxkPW5ldyBCYWxsIFtTVE9ORV9DT0xTLCBTVE9ORV9MSU5FU107CgogICAgd2lu
ZG93ID0gbmV3IEd0ay5XaW5kb3cgKCJTYW1lIEdOT01FIik7CiAgICB3aW5kb3cuQWxsb3dHcm93
PWZhbHNlOwogICAgd2luZG93LkRlbGV0ZUV2ZW50ICs9IG5ldyBEZWxldGVFdmVudEhhbmRsZXIg
KGdhbWVfcXVpdF9jYWxsYmFjayk7CiAgICAKICAgIHZiID0gbmV3IFZCb3goZmFsc2UsIDApOwog
ICAgd2luZG93LkFkZCh2Yik7CiAgICAKICAgIC8vbWVudQogICAgbWVudUJhciA9IG5ldyBNZW51
QmFyICgpOwoKICAgIGdhbWVJdGVtID0gbmV3IE1lbnVJdGVtKCJfR2FtZSIpOwogICAgbWVudUJh
ci5BcHBlbmQgKGdhbWVJdGVtKTsKICAgIGdhbWVNZW51ID0gbmV3IE1lbnUgKCk7CiAgICBuZXdH
YW1lSXRlbSA9IG5ldyBNZW51SXRlbSgiX05ldyBHYW1lIik7IAogICAgbmV3R2FtZUl0ZW0uQWN0
aXZhdGVkICs9IG5ldyBFdmVudEhhbmRsZXIgKGdhbWVfbmV3X2NhbGxiYWNrKTsKICAgIHF1aXRJ
dGVtID0gbmV3IEltYWdlTWVudUl0ZW0gKFN0b2NrLlF1aXQsIG5ldyBBY2NlbEdyb3VwKCkpOwog
ICAgcXVpdEl0ZW0uQWN0aXZhdGVkICs9IG5ldyBFdmVudEhhbmRsZXIgKG9uUXVpdEl0ZW1BY3Rp
dmF0ZSk7CiAgICBnYW1lTWVudS5BcHBlbmQgKG5ld0dhbWVJdGVtKTsKICAgIGdhbWVNZW51LkFw
cGVuZCAocXVpdEl0ZW0pOwogICAgZ2FtZUl0ZW0uU3VibWVudSA9IGdhbWVNZW51OwoKICAgIHNl
dHRpbmdzSXRlbSA9IG5ldyBNZW51SXRlbSgiX1NldHRpbmdzIik7CiAgICBtZW51QmFyLkFwcGVu
ZCAoc2V0dGluZ3NJdGVtKTsKICAgIHNldHRpbmdzTWVudSA9IG5ldyBNZW51ICgpOwogICAgcHJl
ZmVyZW5jZXNJdGVtID0gbmV3IEltYWdlTWVudUl0ZW0oU3RvY2suUHJlZmVyZW5jZXMsIG5ldyBB
Y2NlbEdyb3VwKCkpOyAKICAgIHByZWZlcmVuY2VzSXRlbS5BY3RpdmF0ZWQgKz0gbmV3IEV2ZW50
SGFuZGxlciAob25QcmVmZXJlbmNlc0l0ZW1BY3RpdmF0ZSk7CiAgICBzZXR0aW5nc01lbnUuQXBw
ZW5kIChwcmVmZXJlbmNlc0l0ZW0pOwogICAgc2V0dGluZ3NJdGVtLlN1Ym1lbnUgPSBzZXR0aW5n
c01lbnU7CgogICAgaGVscEl0ZW0gPSBuZXcgTWVudUl0ZW0oIl9IZWxwIik7CiAgICBtZW51QmFy
LkFwcGVuZCAoaGVscEl0ZW0pOwogICAgaGVscE1lbnUgPSBuZXcgTWVudSAoKTsKICAgIGFib3V0
SXRlbSA9IG5ldyBNZW51SXRlbSgiX0Fib3V0Iik7IAogICAgYWJvdXRJdGVtLkFjdGl2YXRlZCAr
PSBuZXcgRXZlbnRIYW5kbGVyIChvbkFib3V0SXRlbUFjdGl2YXRlKTsKICAgIGhlbHBNZW51LkFw
cGVuZCAoYWJvdXRJdGVtKTsKICAgIGhlbHBJdGVtLlN1Ym1lbnUgPSBoZWxwTWVudTsKCiAgICB2
Yi5QYWNrU3RhcnQobWVudUJhciwgZmFsc2UsIGZhbHNlLCAwKTsKCiAgICBIQm94IGFwcGJhciA9
IG5ldyBIQm94KGZhbHNlLCAwKTsKICAgIAogICAgaWYgKGZuYW1lPT1udWxsKQogICAgICBmbmFt
ZT0ic3RvbmVzLnBuZyI7CiAgICAKICAgIGNyZWF0ZV9zYW1lX2JvYXJkIChmbmFtZSk7CiAgICAK
ICAgIExhYmVsIGxhYmVsID0gbmV3IExhYmVsKCJTY29yZTogIik7CiAgICBzY29yZXcgPSBuZXcg
TGFiZWwgKCIiKTsKICAgIGxhYmVsU3RhdHVzID0gbmV3IExhYmVsICgiV2VsY29tZSB0byBTYW1l
IEdOT01FISIpOwoKICAgIHNldF9zY29yZSAoc2NvcmUpOyAKICAgIGFwcGJhci5QYWNrU3RhcnQo
bGFiZWxTdGF0dXMsIGZhbHNlLCBmYWxzZSwgMCk7ICAgICAgICAKICAgIGFwcGJhci5QYWNrRW5k
KHNjb3JldywgZmFsc2UsIGZhbHNlLCAwKTsKICAgIGFwcGJhci5QYWNrRW5kKGxhYmVsLCBmYWxz
ZSwgZmFsc2UsIDApOwogICAgdmIuUGFja1N0YXJ0KGFwcGJhciwgZmFsc2UsIGZhbHNlLCAwKTsK
CiAgICBuZXdfZ2FtZSgpOwogICAgICAgIAogICAgd2luZG93LlNob3dBbGwoKTsgICAgCgogIH0K
CiAgcHJpdmF0ZSBpbnQgbWFweShpbnQgeSkKICB7CiAgICByZXR1cm4gU1RPTkVfTElORVMtMS15
OwogIH0KCgogIHByaXZhdGUgdm9pZCBvblByZWZlcmVuY2VzSXRlbUFjdGl2YXRlKG9iamVjdCBv
LCBFdmVudEFyZ3MgYXJncyl7CiAgICBEaWFsb2cgZGlhbG9nID0gbmV3IERpYWxvZyAoIlNhbWUg
R05PTUUgUHJlZmVyZW5jZXMiLCB0aGlzLndpbmRvdywgRGlhbG9nRmxhZ3MuTW9kYWwpOwoKICAg
IFRyZWVWaWV3IHR2ID0gbmV3IFRyZWVWaWV3ICgpOyAgICAKICAgIExpc3RTdG9yZSBzdG9yZSA9
IG5ldyBMaXN0U3RvcmUgKHR5cGVvZiAoc3RyaW5nKSk7CiAgICBzdHJpbmcgdHJlZVBhdGg9IiI7
CiAgICAgICAgCiAgICBEaXJlY3RvcnlJbmZvIGRpID0gbmV3IERpcmVjdG9yeUluZm8oUElYTUFQ
RElSKTsKICAgIEZpbGVJbmZvW10gZmkgPSBkaS5HZXRGaWxlcygpOwoKCiAgICBmb3IgKGludCBp
PTA7IGk8ZmkuTGVuZ3RoOyBpKyspewogICAgICBpZighZmlbaV0uTmFtZS5FbmRzV2l0aCAoIi1z
eW5jLnBuZyIpKXsKCXN0b3JlLkFwcGVuZFZhbHVlcyhmaVtpXS5OYW1lLlJlbW92ZSAoZmlbaV0u
TmFtZS5MZW5ndGgtNCwgNCkpOwogICAgICB9IGVsc2UgewoJc3RvcmUuQXBwZW5kVmFsdWVzKGZp
W2ldLk5hbWUuUmVtb3ZlIChmaVtpXS5OYW1lLkxlbmd0aC05LCA5KSk7IAogICAgICB9CiAgICAg
IGlmICh0aGlzLnRoZW1lPT1maVtpXS5OYW1lKXsKCXRyZWVQYXRoPWkuVG9TdHJpbmcoKTsKICAg
ICAgfQogICAgfQogCiAgICB0di5Nb2RlbCA9IHN0b3JlOwkgIAogICAgdHYuU2VsZWN0aW9uLlNl
bGVjdFBhdGggKG5ldyBUcmVlUGF0aCh0cmVlUGF0aCkpOwoKICAgIHR2LkhlYWRlcnNWaXNpYmxl
ID0gZmFsc2U7CSAgCiAgICB0di5BcHBlbmRDb2x1bW4gKG51bGwsIG5ldyBDZWxsUmVuZGVyZXJU
ZXh0ICgpLCAidGV4dCIsIDApOwogICAgdHYuU2VsZWN0aW9uLkNoYW5nZWQgKz0gIG5ldyBFdmVu
dEhhbmRsZXIoT25UdlNlbGVjdGlvbkNoYW5nZWQpOwoKICAgIExhYmVsIGxhYmVsPSBuZXcgTGFi
ZWwgKCJUaGVtZSIpOwogICAgZGlhbG9nLkFkZEJ1dHRvbiAoU3RvY2suQ2xvc2UsIFJlc3BvbnNl
VHlwZS5DbG9zZSk7IAogICAgZGlhbG9nLlZCb3guUGFja1N0YXJ0KGxhYmVsLCBmYWxzZSwgZmFs
c2UsIDApOwogICAgZGlhbG9nLlZCb3guUGFja1N0YXJ0KHR2LCBmYWxzZSwgZmFsc2UsIDApOwoK
CiAgICBsYWJlbC5TaG93KCk7IAogICAgdHYuU2hvdygpOwogICAgZGlhbG9nLkRlZmF1bHRSZXNw
b25zZT1SZXNwb25zZVR5cGUuQ2xvc2U7CiAgICBkaWFsb2cuUnVuKCk7CiAgICBkaWFsb2cuRGVz
dHJveSgpOwoKCiAgfQoKCiAgcHVibGljIHZvaWQgT25UdlNlbGVjdGlvbkNoYW5nZWQgKG9iamVj
dCBvLCBFdmVudEFyZ3MgYXJncyl7CiAgICBUcmVlSXRlciBpdGVyOwogICAgVHJlZU1vZGVsIG1v
ZGVsOwogCiAgICBpZiAoKChUcmVlU2VsZWN0aW9uKW8pLkdldFNlbGVjdGVkIChvdXQgbW9kZWws
IG91dCBpdGVyKSkKICAgIHsKICAgICAgc3RyaW5nIHZhbCA9IChzdHJpbmcpIG1vZGVsLkdldFZh
bHVlIChpdGVyLCAwKTsKICAgICAgaWYgKEZpbGUuRXhpc3RzKFBJWE1BUERJUit2YWwrIi5wbmci
KSl7Cglsb2FkX3NjZW5hcmlvICh2YWwrIi5wbmciKTsKICAgICAgfSAKICAgICAgZWxzZSBpZiAo
RmlsZS5FeGlzdHMoUElYTUFQRElSK3ZhbCsiLXN5bmMucG5nIikpIHsJCglsb2FkX3NjZW5hcmlv
ICh2YWwrIi1zeW5jLnBuZyIpOwogICAgICB9CiAgICB9CiAgfQoKICBwcml2YXRlIHZvaWQgb25B
Ym91dEl0ZW1BY3RpdmF0ZShvYmplY3QgbywgRXZlbnRBcmdzIGFyZ3MpewogICAgTWVzc2FnZURp
YWxvZyBkaWFsb2cgPSBuZXcgTWVzc2FnZURpYWxvZyAobnVsbCwgRGlhbG9nRmxhZ3MuTW9kYWws
CgkJCQkJICAgICAgTWVzc2FnZVR5cGUuSW5mbywKCQkJCQkgICAgICBCdXR0b25zVHlwZS5DbG9z
ZSwKCQkJCQkgICAgICAiU2FtZSBHTk9NRSMgXG4iKwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIkJhc2VkIGluIEdOT01FJ3MgU2FtZSBHbm9tZSBwcm9ncmFt
LlxuXG4iKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldy
b3RlIGJ5IENhbWlsbyBVcmliZSIpOwogICAgZGlhbG9nLkRlZmF1bHRSZXNwb25zZT1SZXNwb25z
ZVR5cGUuQ2xvc2U7CiAgICBkaWFsb2cuUnVuKCk7CiAgICBkaWFsb2cuRGVzdHJveSgpOwogIH0K
CiAgcHJpdmF0ZSB2b2lkIG9uUXVpdEl0ZW1BY3RpdmF0ZShvYmplY3QgbywgRXZlbnRBcmdzIGFy
Z3MpCiAgewogICAgQXBwbGljYXRpb24uUXVpdCAoKTsKICB9CgogIHZvaWQgZHJhd19iYWxsIChp
bnQgeCwgaW50IHkpCiAgewogICAgaW50IGJ4LCBieTsKCiAgICBpZiAoeCA+PSBTVE9ORV9DT0xT
IHx8IHggPCAwKQogICAgICByZXR1cm47CiAgICBpZiAoeSA+PSBTVE9ORV9MSU5FUyB8fCB5IDwg
MCkKICAgICAgcmV0dXJuOwoKICAgIGlmIChmaWVsZCBbeCx5XS5jb2xvciAhPSAwKSB7CiAgICAg
IGJ5ID0gU1RPTkVfU0laRSAqIChmaWVsZCBbeCx5XS5jb2xvciAtIDEpOwogICAgICBieCA9IFNU
T05FX1NJWkUgKiAoZmllbGQgW3gseV0uZnJhbWUpOwoKICAgICAgZHJhd19hcmVhLkdka1dpbmRv
dy5EcmF3UGl4YnVmIChkcmF3X2FyZWEuU3R5bGUuQmxhY2tHQywgaW1hZ2UsIGJ4LCBieSwgeCAq
IFNUT05FX1NJWkUsIAoJCQkJICAgICAgeSAqIFNUT05FX1NJWkUsIFNUT05FX1NJWkUsIFNUT05F
X1NJWkUsIAoJCQkJICAgICAgR2RrLlJnYkRpdGhlci5Ob3JtYWwsIDAsIDApOwoKICAgIH0gZWxz
ZSB7CiAgICAgIGRyYXdfYXJlYS5HZGtXaW5kb3cuQ2xlYXJBcmVhKHggKiBTVE9ORV9TSVpFLCB5
ICogU1RPTkVfU0laRSwgU1RPTkVfU0laRSwgU1RPTkVfU0laRSk7CiAgICB9CiAgfQoKCiAgcHJp
dmF0ZSB2b2lkIHBhaW50KFJlY3RhbmdsZSBhcmVhKXsKICAgIGludCB4MSwgeTEsIHgyLCB5Miwg
eCwgeTsKCQogICAgeDEgPSBhcmVhLlggLyBTVE9ORV9TSVpFOwogICAgeTEgPSBhcmVhLlkgLyBT
VE9ORV9TSVpFOwogICAgeDIgPSAoYXJlYS5YICsgYXJlYS5XaWR0aCkgLyBTVE9ORV9TSVpFOwog
ICAgeTIgPSAoYXJlYS5ZICsgYXJlYS5IZWlnaHQpIC8gU1RPTkVfU0laRTsKICAgIAogICAgZm9y
ICh4ID0geDE7IHggPD0geDI7IHgrKykgewogICAgICBmb3IgKHkgPSB5MTsgeSA8PSB5MjsgeSsr
KSB7CiAgICAJZHJhd19iYWxsICh4LCB5KTsKICAgICAgfQogICAgfQogIH0KCiAgcHJpdmF0ZSB2
b2lkIHVudGFnX2FsbCAoKQogIHsKICAgIGludCB4LCB5OwoKICAgIGZvciAoeCA9IDA7IHggPCBT
VE9ORV9DT0xTOyB4KyspCiAgICAgIGZvciAoeSA9IDA7IHkgPCBTVE9ORV9MSU5FUzsgeSsrKSB7
CglmaWVsZCBbeCx5XS50YWcgICA9IDA7CglpZiAoc3luY19zdG9uZXMhPTApIHsKCSAgZmllbGQg
W3gseV0uZnJhbWUgPSAwOwoJICBkcmF3X2JhbGwgKHgsIHkpOwoJfQogICAgICB9CiAgfQoKICBw
cml2YXRlIGludCBmbG9vZF9maWxsIChpbnQgeCwgaW50IHksIGludCBjb2xvcikKICB7CiAgICBp
bnQgYyA9IDA7CgkKICAgIGlmIChjb2xvcj09MCkKICAgICAgcmV0dXJuIGM7CiAgICAKICAgIGlm
IChmaWVsZCBbeCx5XS5jb2xvciAhPSBjb2xvcikKICAgICAgcmV0dXJuIGM7CgkKICAgIGlmIChm
aWVsZCBbeCx5XS50YWchPTApCiAgICAgIHJldHVybiBjOwoKICAgIGMgPSAxOwogICAgZmllbGQg
W3gseV0udGFnID0gMTsKICAgIAogICAgaWYgKHgrMSA8IFNUT05FX0NPTFMpCiAgICAgIGMgKz0g
Zmxvb2RfZmlsbCAoeCsxLCB5LCBjb2xvcik7CiAgICBpZiAoeCE9MCkKICAgICAgYyArPSBmbG9v
ZF9maWxsICh4LTEsIHksIGNvbG9yKTsKICAgIGlmICh5KzEgPCBTVE9ORV9MSU5FUykKICAgICAg
YyArPSBmbG9vZF9maWxsICh4LCB5KzEsIGNvbG9yKTsKICAgIGlmICh5IT0wKQogICAgICBjICs9
IGZsb29kX2ZpbGwgKHgsIHktMSwgY29sb3IpOwogICAgcmV0dXJuIGM7CiAgfQoKICBwcml2YXRl
IGJvb2wgbW92ZV90YWdnZWRfYmFsbHMgKCkKICB7CgogICAgaW50IHgsIHk7CiAgICBmb3IgKHgg
PSAwOyB4IDwgU1RPTkVfQ09MUzsgeCsrKXsKICAgICAgZm9yICh5ID0gMDsgeSA8IFNUT05FX0xJ
TkVTOyB5KyspIHsKCWlmIChmaWVsZCBbeCx5XS50YWc9PTApCgkgIGNvbnRpbnVlOwoJZmllbGQg
W3gseV0uZnJhbWUgPSAoZmllbGQgW3gseV0uZnJhbWUgKyAxKSAlIG5zdG9uZXM7CglkcmF3X2Jh
bGwgKHgsIHkpOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHRydWU7CiAgfQoKICBwcml2YXRl
IHZvaWQgZGlzYWJsZV90aW1lb3V0ICgpCiAgewogICAgaWYgKGJhbGxfdGltZW91dF9pZCAhPSAw
KSB7CiAgICAgIFNvdXJjZS5SZW1vdmUgKGJhbGxfdGltZW91dF9pZCk7CiAgICAgIGJhbGxfdGlt
ZW91dF9pZCA9IDA7CiAgICB9CiAgfQoKICBwcml2YXRlIHZvaWQgbWFya19iYWxscyAoaW50IHgs
IGludCB5KQogIHsKICAgIGlmICh4ID09IG9sZF94ICYmIHkgPT0gb2xkX3kpCiAgICAgIHJldHVy
bjsKCiAgICBvbGRfeCA9IHg7CiAgICBvbGRfeSA9IHk7CiAgIAogICAgZGlzYWJsZV90aW1lb3V0
ICgpOwogICAgdW50YWdfYWxsICgpOwoJCiAgICB0YWdnZWRfY291bnQgPSBmbG9vZF9maWxsICh4
LCB5LCBmaWVsZCBbeCx5XS5jb2xvcik7CiAgICAKICAgIGlmICh0YWdnZWRfY291bnQgPiAxKSB7
CiAgICAgIFRpbWVvdXRIYW5kbGVyIGhuZGxyID0gbmV3IFRpbWVvdXRIYW5kbGVyIChtb3ZlX3Rh
Z2dlZF9iYWxscyk7CiAgICAgIGJhbGxfdGltZW91dF9pZD1HTGliLlRpbWVvdXQuQWRkKDEwMCwg
aG5kbHIpOwogICAgICBsYWJlbFN0YXR1cy5UZXh0PXRhZ2dlZF9jb3VudC5Ub1N0cmluZygpKyIg
c3RvbmVzIHNlbGVjdGVkIjsKICAgIH0gZWxzZSB7CiAgICAgIGxhYmVsU3RhdHVzLlRleHQ9Ik5v
IHN0b25lcyBzZWxlY3RlZCI7CiAgICB9ICAgCiAgfQoKCiAgcHJpdmF0ZSB2b2lkIGNvbXByZXNz
X2NvbHVtbiAoaW50IHgpCiAgewogICAgaW50IHksIHltOwoJCiAgICBmb3IgKHkgPSBTVE9ORV9M
SU5FUyAtIDE7IHkgPj0gMDsgeS0tKSB7CiAgICAgIGlmIChmaWVsZCBbeCxtYXB5ICh5KV0udGFn
PT0wKQoJY29udGludWU7CiAgICAgIGZvciAoeW0gPSB5OyB5bSA8IFNUT05FX0xJTkVTIC0gMTsg
eW0rKykKCWZpZWxkIFt4LG1hcHkgKHltKV0gPSBmaWVsZCBbeCxtYXB5ICh5bSsxKV07CiAgICAg
IGZpZWxkIFt4LG1hcHkgKHltKV0uY29sb3IgPSAwOwogICAgICBmaWVsZCBbeCxtYXB5ICh5bSld
LnRhZyAgID0gMDsKICAgIH0KICB9CgogIHByaXZhdGUgdm9pZCBjb21wcmVzc195ICgpCiAgewog
ICAgaW50IHg7CgogICAgZm9yICh4ID0gMDsgeCA8IFNUT05FX0NPTFM7IHgrKykKICAgICAgY29t
cHJlc3NfY29sdW1uICh4KTsKICB9CgogIHByaXZhdGUgdm9pZCBjb3B5X2NvbCAoaW50IGRlc3Qs
IGludCBzcmMpCiAgewogICAgaW50IHk7CiAgICAKICAgIGZvciAoeSA9IDA7IHkgPCBTVE9ORV9M
SU5FUzsgeSsrKQogICAgICBmaWVsZCBbZGVzdCxtYXB5ICh5KV0gPSBmaWVsZCBbc3JjLG1hcHkg
KHkpXTsKICB9CgogIHByaXZhdGUgdm9pZCBjbGVhbl9sYXN0X2NvbCAoKQogIHsKICAgIGludCB5
OwoKICAgIGZvciAoeSA9IDA7IHkgPCBTVE9ORV9MSU5FUzsgeSsrKSB7CiAgICAgIGZpZWxkIFtT
VE9ORV9DT0xTLTEsbWFweSAoeSldLmNvbG9yID0gMDsKICAgICAgZmllbGQgW1NUT05FX0NPTFMt
MSxtYXB5ICh5KV0udGFnICAgPSAwOwogICAgfQogIH0KCiAgcHJpdmF0ZSB2b2lkIGNvbXByZXNz
X3ggKCkKICB7CiAgICBpbnQgeCwgeG0sIGw7CgogICAgZm9yICh4ID0gMDsgeCA8IFNUT05FX0NP
TFM7IHgrKykgewogICAgICBmb3IgKGwgPSBTVE9ORV9DT0xTOyBmaWVsZCBbeCxtYXB5KDApXS5j
b2xvciA9PSAwICYmIGwhPTA7IGwtLSkgewoJZm9yICh4bSA9IHg7IHhtIDwgU1RPTkVfQ09MUy0x
OyB4bSsrKQoJICBjb3B5X2NvbCAoeG0sIHhtKzEpOwoJY2xlYW5fbGFzdF9jb2wgKCk7CiAgICAg
IH0gCiAgICB9CiAgfQoKICBwcml2YXRlIHZvaWQgc2V0X3Njb3JlKGludCBuZXdfc2NvcmUpewog
ICAgc2NvcmU9bmV3X3Njb3JlOwogICAgc2NvcmV3LlRleHQ9bmV3X3Njb3JlLlRvU3RyaW5nKCk7
CiAgfQoKICBwcml2YXRlIHZvaWQgY2hlY2tfZ2FtZV9vdmVyICgpCiAgewogICAgaW50IGNsZWFy
ZWQ9MTsKICAgIGludCB4LHk7CiAgICBpbnQgcG9zOwoJCiAgICBmb3IgKHggPSAwOyB4IDwgU1RP
TkVfQ09MUzsgeCsrKQogICAgICBmb3IgKHkgPSAwIDsgeSA8IFNUT05FX0xJTkVTOyB5KyspIHsK
CWlmIChmaWVsZCBbeCx5XS5jb2xvcj09MCkKCSAgY29udGludWU7CgljbGVhcmVkID0gMDsKCWlm
ICh4KzEgPCBTVE9ORV9DT0xTKSAKCSAgaWYoZmllbGRbeCx5XS5jb2xvciA9PSBmaWVsZFt4KzEs
eV0uY29sb3IpCgkgICAgcmV0dXJuOwoJaWYgKHkrMSA8IFNUT05FX0xJTkVTKSAKCSAgaWYgKGZp
ZWxkW3gseV0uY29sb3IgPT0gZmllbGRbeCx5KzFdLmNvbG9yKQoJICAgIHJldHVybjsKICAgICAg
fQoKICAgIGlmIChjbGVhcmVkIT0wKQogICAgICBzZXRfc2NvcmUgKHNjb3JlKzEwMDApOwoKICAg
IHBvcz0wOwogICAgc2hvd19zY29yZSAoKTsKICAgIGdhbWVfb3ZlciA9IHRydWU7CiAgfQoKICBw
cml2YXRlIHZvaWQgc2hvd19zY29yZSgpCiAgewogICAgRGlhbG9nIGRpYWxvZyA9IG5ldyBEaWFs
b2cgKCJTY29yZSIsIHRoaXMud2luZG93LCBEaWFsb2dGbGFncy5Nb2RhbCk7CiAgICBMYWJlbCBs
YWJlbD0gbmV3IExhYmVsICgiU2NvcmU6ICIrIHNjb3JlLlRvU3RyaW5nKCkpOwogICAgZGlhbG9n
LkFkZEJ1dHRvbiAoU3RvY2suQ2xvc2UsIFJlc3BvbnNlVHlwZS5DbG9zZSk7IAogICAgZGlhbG9n
LlZCb3guUGFja1N0YXJ0KGxhYmVsLCBmYWxzZSwgZmFsc2UsIDApOwoKICAgIGxhYmVsLlNob3co
KTsgCiAgICBkaWFsb2cuRGVmYXVsdFJlc3BvbnNlPVJlc3BvbnNlVHlwZS5DbG9zZTsKICAgIGRp
YWxvZy5SdW4oKTsKICAgIGRpYWxvZy5EZXN0cm95KCk7CiAgfQoKICBwcml2YXRlIHZvaWQga2ls
bF9iYWxscyAoaW50IHgsIGludCB5KQogIHsKICAgIGlmIChmaWVsZCBbeCx5XS5jb2xvcj09MCkK
ICAgICAgcmV0dXJuOwogICAgIAkKICAgIGlmICh0YWdnZWRfY291bnQgPCAyKQogICAgICByZXR1
cm47CgogICAgc2V0X3Njb3JlIChzY29yZSArICh0YWdnZWRfY291bnQgLSAyKSAqICh0YWdnZWRf
Y291bnQgLSAyKSk7CiAgICBjb21wcmVzc195ICgpOwogICAgY29tcHJlc3NfeCAoKTsKICAgIGRy
YXdfYXJlYS5RdWV1ZURyYXcoKTsKICAgIGNoZWNrX2dhbWVfb3ZlciAoKTsKICB9CgogIHByaXZh
dGUgdm9pZCBkcmF3X2FyZWFFeHBvc2UgKG9iamVjdCBvLCBFeHBvc2VFdmVudEFyZ3MgYXJncykK
ICB7CiAgICBwYWludChhcmdzLkV2ZW50LkFyZWEpOwoKICAgIGFyZ3MuUmV0VmFsID0gdHJ1ZTsK
ICB9CgogIHByaXZhdGUgdm9pZCBkcmF3X2FyZWFCdXR0b25QcmVzcyAob2JqZWN0IG8sIEJ1dHRv
blByZXNzRXZlbnRBcmdzIGFyZ3MpCiAgewogICAgRXZlbnRCdXR0b24gZXYgPSBhcmdzLkV2ZW50
OwogICAgZG91YmxlIHggPSBNYXRoLkZsb29yIChldi5YL1NUT05FX1NJWkUpOwogICAgZG91Ymxl
IHkgPSBNYXRoLkZsb29yIChldi5ZL1NUT05FX1NJWkUpOwoKICAgIGtpbGxfYmFsbHMgKCBDb252
ZXJ0LlRvSW50MzIoeCksIENvbnZlcnQuVG9JbnQzMih5KSk7CiAgICBvbGRfeCA9IC0xOwogICAg
b2xkX3kgPSAtMTsgICAgCiAgfQoKICBwcml2YXRlIHZvaWQgZHJhd19hcmVhRW50ZXJOb3RpZnkg
KG9iamVjdCBvLCBFbnRlck5vdGlmeUV2ZW50QXJncyBhcmdzKXsKICAgIEV2ZW50Q3Jvc3Npbmcg
ZXYgPSBhcmdzLkV2ZW50OwogICAgZG91YmxlIHggPSBNYXRoLkZsb29yIChldi5YL1NUT05FX1NJ
WkUpOwogICAgZG91YmxlIHkgPSBNYXRoLkZsb29yIChldi5ZL1NUT05FX1NJWkUpOwogICAgbWFy
a19iYWxscyAoQ29udmVydC5Ub0ludDMyKHgpLCBDb252ZXJ0LlRvSW50MzIoeSkpOwoKICAgIGFy
Z3MuUmV0VmFsID0gdHJ1ZTsKICB9CgogIHByaXZhdGUgdm9pZCBkcmF3X2FyZWFNb3Rpb25Ob3Rp
ZnkgKG9iamVjdCBvLCBNb3Rpb25Ob3RpZnlFdmVudEFyZ3MgYXJncyl7CiAgICBFdmVudE1vdGlv
biBldiA9IGFyZ3MuRXZlbnQ7CiAgICBkb3VibGUgeCA9IE1hdGguRmxvb3IgKGV2LlgvU1RPTkVf
U0laRSk7CiAgICBkb3VibGUgeSA9IE1hdGguRmxvb3IgKGV2LlkvU1RPTkVfU0laRSk7CiAgICBt
YXJrX2JhbGxzIChDb252ZXJ0LlRvSW50MzIoeCksIENvbnZlcnQuVG9JbnQzMih5KSk7CgogICAg
YXJncy5SZXRWYWwgPSB0cnVlOwogIH0KCiAgcHJpdmF0ZSB2b2lkIGRyYXdfYXJlYUxlYXZlTm90
aWZ5IChvYmplY3QgbywgTGVhdmVOb3RpZnlFdmVudEFyZ3MgYXJncyl7CiAgICBvbGRfeCA9IC0x
OwogICAgb2xkX3kgPSAtMTsKICAgIGRpc2FibGVfdGltZW91dCAoKTsKICAgIHVudGFnX2FsbCAo
KTsKCiAgICBhcmdzLlJldFZhbCA9IHRydWU7CiAgfQoKICBwcml2YXRlIHZvaWQgZmlsbF9ib2Fy
ZCgpewogICAgaW50IHgsIHk7CiAgICBmb3IgKHggPSAwOyB4IDwgU1RPTkVfQ09MUzsgeCsrKXsK
ICAgICAgZm9yICh5ID0gMDsgeSA8IFNUT05FX0xJTkVTOyB5KyspIHsKCWZpZWxkIFt4LHldLmNv
bG9yID0gMSArIChyYW5kLk5leHQoKSAlIG5jb2xvcnMpOwoJZmllbGQgW3gseV0udGFnICAgPSAw
OwoJZmllbGQgW3gseV0uZnJhbWUgPSBzeW5jX3N0b25lcyE9MCA/IDAgOiAocmFuZC5OZXh0KCkg
JSBuc3RvbmVzKTsJCiAgICAgIH0KICAgIH0gICAgCiAgfQoKICBwcml2YXRlIHZvaWQgbmV3X2dh
bWUoKXsKICAgIGdhbWVfb3ZlciA9IGZhbHNlOwogICAgZmlsbF9ib2FyZCAoKTsKICAgIHNldF9z
Y29yZSAoMCk7CiAgICBkcmF3X2FyZWEuUXVldWVEcmF3KCk7CiAgfQoKICBwcml2YXRlIHZvaWQg
Y29uZmlndXJlX3N5bmMoc3RyaW5nIGZuYW1lKXsKICAgIGlmKGZuYW1lLkVuZHNXaXRoICgiLXN5
bmMucG5nIikpewogICAgICBzeW5jX3N0b25lcz0xOwogICAgfWVsc2V7CiAgICAgIHN5bmNfc3Rv
bmVzPTA7CiAgICB9CiAgfQoKICBwcml2YXRlIHZvaWQgbG9hZF9zY2VuYXJpbyhzdHJpbmcgZm5h
bWUpewogICAgc3RyaW5nIGZuOwogICAgQ29sb3IgYmFja2dyb3VuZF9jb2xvcjsKICAgIHN0cmlu
ZyBjb2xvcl9uYW1lOwogICAgaW50IGksIGo7CgogICAgaWYgKGZuYW1lPT1udWxsKQogICAgICBy
ZXR1cm47CiAKICAgIGlmIChTeXN0ZW0uSU8uUGF0aC5Jc1BhdGhSb290ZWQoZm5hbWUpKXsKICAg
ICAgZm49Zm5hbWU7CiAgICB9IGVsc2UgewogICAgICBmbj1QSVhNQVBESVIrZm5hbWU7CiAgICB9
CgogICAgaWYgKCFGaWxlLkV4aXN0cyhmbikpewogICAgICAgICAgTWVzc2FnZURpYWxvZyBkaWFs
b2cgPSBuZXcgTWVzc2FnZURpYWxvZyAobnVsbCwgRGlhbG9nRmxhZ3MuRGVzdHJveVdpdGhQYXJl
bnQsCgkJCQkJCU1lc3NhZ2VUeXBlLkVycm9yLAoJCQkJCQlCdXR0b25zVHlwZS5PaywKCQkJCQkJ
IkNvdWxkIG5vdCBmaW5kIHRoZSB0aGVtZVxuIisgZm4gKyAiXG5cbiIrCgkJCQkJICAgICAgICAi
UGxlYXNlIGNoZWNrIHlvdXIgU2FtZSBHTk9NRSBpbnN0YWxsYXRpb24uIik7CgkgIGRpYWxvZy5E
ZWZhdWx0UmVzcG9uc2U9UmVzcG9uc2VUeXBlLk9rOwoJICBkaWFsb2cuUnVuKCk7CgkgIGRpYWxv
Zy5EZXN0cm95KCk7CgkgIEVudmlyb25tZW50LkV4aXQoMSk7CiAgICB9CgogICAgdGhpcy50aGVt
ZT1mbmFtZTsKICAgIGNvbmZpZ3VyZV9zeW5jKGZuYW1lKTsKCiAgICB0cnkgewogICAgICBpbWFn
ZSA9IG5ldyBQaXhidWYoZm4pOyAKICAgIH0gY2F0Y2ggKEdMaWIuR0V4Y2VwdGlvbiBlKXsKICAg
ICAgTWVzc2FnZURpYWxvZyBkaWFsb2cgPSBuZXcgTWVzc2FnZURpYWxvZyAobnVsbCwgRGlhbG9n
RmxhZ3MuRGVzdHJveVdpdGhQYXJlbnQsCgkJCQkJCU1lc3NhZ2VUeXBlLkVycm9yLAoJCQkJCQlC
dXR0b25zVHlwZS5PaywKCQkJCQkJIlNhbWUgR05PTUUgY2FuJ3QgbG9hZCB0aGUgaW1hZ2UgZmls
ZTpcbiIrIGZuICsgCgkJCQkJCSJcblxuUGxlYXNlIGNoZWNrIHlvdXIgU2FtZSBHTk9NRSBpbnN0
YWxsYXRpb24uIik7CgkgIGRpYWxvZy5EZWZhdWx0UmVzcG9uc2U9UmVzcG9uc2VUeXBlLk9rOwoJ
ICBkaWFsb2cuUnVuKCk7CgkgIGRpYWxvZy5EZXN0cm95KCk7CSAgCgkgIEVudmlyb25tZW50LkV4
aXQoMSk7CiAgICB9CiAgICAKICAgIGJhY2tncm91bmRfY29sb3I9bmV3IEdkay5Db2xvciAoMCwg
MCwgMCk7CiAgICBkcmF3X2FyZWEuTW9kaWZ5QmcoU3RhdGVUeXBlLk5vcm1hbCwgYmFja2dyb3Vu
ZF9jb2xvcik7CiAgICBuc3RvbmVzID0gaW1hZ2UuV2lkdGgvIFNUT05FX1NJWkU7CgogICAgZm9y
IChpID0gMDsgaSA8IFNUT05FX0NPTFM7IGkrKykKICAgIHsKICAgICAgZm9yIChqID0gMDsgaiA8
IFNUT05FX0xJTkVTOyBqKyspCiAgICAgIHsKCWlmIChzeW5jX3N0b25lcyE9MCkgewoJICBmaWVs
ZFtpLGpdLmZyYW1lID0gMDsKCX0gZWxzZSB7CgkgIGZpZWxkW2ksal0uZnJhbWUgJT0gbnN0b25l
czsKCX0KICAgICAgfQogICAgfQogICAgbmNvbG9ycyA9IDM7CiAgICBkcmF3X2FyZWEuUXVldWVE
cmF3KCk7CiAgfQoKICBwcml2YXRlIHZvaWQgY3JlYXRlX3NhbWVfYm9hcmQoU3RyaW5nIGZuYW1l
KXsKICAgIGRyYXdfYXJlYSA9IG5ldyBEcmF3aW5nQXJlYSgpOwogICAgZHJhd19hcmVhLnNldF9F
dmVudHMoZHJhd19hcmVhLmdldF9FdmVudHMoKSB8IEV2ZW50TWFzay5FeHBvc3VyZU1hc2sgfCBF
dmVudE1hc2suQnV0dG9uUHJlc3NNYXNrIHwgRXZlbnRNYXNrLkVudGVyTm90aWZ5TWFzayB8IEV2
ZW50TWFzay5MZWF2ZU5vdGlmeU1hc2sgfCBFdmVudE1hc2suUG9pbnRlck1vdGlvbk1hc2spOwoK
ICAgIHZiLlBhY2tTdGFydChkcmF3X2FyZWEsIGZhbHNlLCBmYWxzZSwgMCk7CiAgICBkcmF3X2Fy
ZWEuUmVhbGl6ZSAoKTsKICAgIGRyYXdfYXJlYS5TaG93KCk7CiAgICBsb2FkX3NjZW5hcmlvIChm
bmFtZSk7CiAgICBkcmF3X2FyZWEuU2V0U2l6ZVJlcXVlc3QoU1RPTkVfQ09MUyAgKiBTVE9ORV9T
SVpFLCBTVE9ORV9MSU5FUyAgKiBTVE9ORV9TSVpFKTsKICAgIGRyYXdfYXJlYS5FeHBvc2VFdmVu
dCArPSBuZXcgRXhwb3NlRXZlbnRIYW5kbGVyIChkcmF3X2FyZWFFeHBvc2UpOwogICAgZHJhd19h
cmVhLkJ1dHRvblByZXNzRXZlbnQgKz0gbmV3IEJ1dHRvblByZXNzRXZlbnRIYW5kbGVyIChkcmF3
X2FyZWFCdXR0b25QcmVzcyk7CiAgICBkcmF3X2FyZWEuRW50ZXJOb3RpZnlFdmVudCArPSBuZXcg
RW50ZXJOb3RpZnlFdmVudEhhbmRsZXIgKGRyYXdfYXJlYUVudGVyTm90aWZ5KTsgICAgCiAgICBk
cmF3X2FyZWEuTW90aW9uTm90aWZ5RXZlbnQgKz0gbmV3IE1vdGlvbk5vdGlmeUV2ZW50SGFuZGxl
ciAoZHJhd19hcmVhTW90aW9uTm90aWZ5KTsgICAgCiAgICBkcmF3X2FyZWEuTGVhdmVOb3RpZnlF
dmVudCArPSBuZXcgTGVhdmVOb3RpZnlFdmVudEhhbmRsZXIgKGRyYXdfYXJlYUxlYXZlTm90aWZ5
KTsKICB9CgogIHByaXZhdGUgdm9pZCBnYW1lX25ld19jYWxsYmFjayAob2JqZWN0IG8sIEV2ZW50
QXJncyBhcmdzKQogIHsKICAgIG5ld19nYW1lICgpOwogIH0KCiAgcHJpdmF0ZSB2b2lkIGdhbWVf
cXVpdF9jYWxsYmFjayAob2JqZWN0IG9iaiwgRGVsZXRlRXZlbnRBcmdzIGFyZ3MpewogICAgQXBw
bGljYXRpb24uUXVpdCAoKTsKICB9CgogIHB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKHN0cmluZ1td
IGFyZ3YpCiAgewogICAgQXBwbGljYXRpb24uSW5pdCAoKTsKICAgIGlmIChhcmd2Lkxlbmd0aD09
MCl7CiAgICAgIFNhbWVHbm9tZSBzYW1lID0gbmV3IFNhbWVHbm9tZShudWxsKTsKICAgICAgQXBw
bGljYXRpb24uUnVuICgpOwogICAgfSBlbHNlIGlmIChhcmd2Lkxlbmd0aD09MSAmJiAoIGFyZ3Zb
MF09PSItLWhlbHAiIHx8IGFyZ3ZbMF09PSItPyIpICkgewogICAgICBDb25zb2xlLldyaXRlTGlu
ZSgiVXNhZ2U6IHNhbWUtZ25vbWUgW09QVElPTi4uLl1cblxuIisKICAgICAgCSAgICAgICAgICAg
ICAgICAiSGVscCBvcHRpb25zXG4iKwogICAgICAJICAgICAgICAgICAgICAgICIgIC0/LCAtLWhl
bHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwIG1lc3NhZ2Vcblxu
IisKICAgICAgCSAgICAgICAgICAgICAgICAiQXBwbGljYXRpb24gb3B0aW9uc1xuIisKICAgICAg
CSAgICAgICAgICAgICAgICAiICAtcyBOQU1FICAgICAgICAgICAgICAgICAgICBTZXQgZ2FtZSBz
Y2VuYXJpbyIpOwoKICAgIH0gZWxzZSBpZiAoYXJndi5MZW5ndGg9PTIgJiYgYXJndlswXT09Ii1z
IikgewogICAgICBTYW1lR25vbWUgc2FtZSA9IG5ldyBTYW1lR25vbWUoYXJndlsxXSk7ICAgCiAg
ICAgIEFwcGxpY2F0aW9uLlJ1biAoKTsKICAgIH0KICB9Cgp9CiAK
------=_Part_599_27743434.1105371713169--