[MonoDevelop] datagrid patch

Christian Hergert chris@mosaix.net
Wed, 03 Nov 2004 12:54:45 +0000


--=-f2nA8BoHOAhAXkPpueXC
Content-Type: multipart/mixed; boundary="=-nyj37J4YdpvwUvtrHfHh"


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

Greetings,

Attached is a datagrid patch to give developers a DataGrid class to ease
portability. `MonoDevelop.Gui.Widgets.DataGrid` This patch is against
subversion release 2022.

cd MonoDevelop && patch -Np1 < datagrid.patch

Regards
--=20
Christian Hergert <chris@mosaix.net>
Mosaix Communications, Inc.

--=-nyj37J4YdpvwUvtrHfHh
Content-Disposition: attachment; filename=datagrid.patch
Content-Transfer-Encoding: base64
Content-Type: text/x-patch; name=datagrid.patch; charset=ISO-8859-1

ZGlmZiAtdXJOIE1vbm9EZXZlbG9wL0NvcmUvc3JjL0xpYnJhcmllcy9Nb25vRGV2ZWxvcC5HdWku
V2lkZ2V0cy9DaGFuZ2VMb2cgc2FuZGJveC9Db3JlL3NyYy9MaWJyYXJpZXMvTW9ub0RldmVsb3Au
R3VpLldpZGdldHMvQ2hhbmdlTG9nDQotLS0gTW9ub0RldmVsb3AvQ29yZS9zcmMvTGlicmFyaWVz
L01vbm9EZXZlbG9wLkd1aS5XaWRnZXRzL0NoYW5nZUxvZwkyMDA0LTExLTAzIDA0OjM4OjEwLjg2
NDQwNTMyOCAtMDgwMA0KKysrIHNhbmRib3gvQ29yZS9zcmMvTGlicmFyaWVzL01vbm9EZXZlbG9w
Lkd1aS5XaWRnZXRzL0NoYW5nZUxvZwkyMDA0LTExLTAzIDA0OjQ1OjM1LjE4NTg1ODIwMCAtMDgw
MA0KQEAgLTEsMyArMSw4IEBADQorMjAwNC0xMS0wMyAgQ2hyaXN0aWFuIEhlcmdlcnQgPGNocmlz
QG1vc2FpeC5uZXQ+DQorDQorCSogQWRkZWQgRGF0YUdyaWQvRGF0YUdyaWQuY3M6IFRoaXMgaXMg
YSBzbGlnaHQgbW9kaWZpY2F0aW9uIGZyb20gdGhlDQorCXdpbmRvd3MgdmVyc2lvbiB0byB3b3Jr
IG9uIEdUSyMvbW9ubyBvbiBnbnUtbGludXguDQorDQogMjAwNC0xMC0yOSAgVG9kZCBCZXJtYW4g
IDx0YmVybWFuQG9mZi5uZXQ+DQogDQogCSogRmlsZVNlbGVjdG9yL0ZpbGVTZWxlY3Rvci5jczog
QWRkIHByb3BlciBTYXZlIGJ1dHRvbnMuDQpkaWZmIC11ck4gTW9ub0RldmVsb3AvQ29yZS9zcmMv
TGlicmFyaWVzL01vbm9EZXZlbG9wLkd1aS5XaWRnZXRzL0RhdGFHcmlkL0RhdGFHcmlkLmNzIHNh
bmRib3gvQ29yZS9zcmMvTGlicmFyaWVzL01vbm9EZXZlbG9wLkd1aS5XaWRnZXRzL0RhdGFHcmlk
L0RhdGFHcmlkLmNzDQotLS0gTW9ub0RldmVsb3AvQ29yZS9zcmMvTGlicmFyaWVzL01vbm9EZXZl
bG9wLkd1aS5XaWRnZXRzL0RhdGFHcmlkL0RhdGFHcmlkLmNzCTE5NjktMTItMzEgMTY6MDA6MDAu
MDAwMDAwMDAwIC0wODAwDQorKysgc2FuZGJveC9Db3JlL3NyYy9MaWJyYXJpZXMvTW9ub0RldmVs
b3AuR3VpLldpZGdldHMvRGF0YUdyaWQvRGF0YUdyaWQuY3MJMjAwNC0xMS0wMyAwNDo0MzoxNC4x
MDMzMDYwMDggLTA4MDANCkBAIC0wLDAgKzEsMzA1IEBADQorLy8NCisvLyBEYXRhR3JpZCAtIGF0
dGVtcHQgYXQgY3JlYXRpbmcgYSBEYXRhR3JpZCBmb3IgR1RLIw0KKy8vICAgICAgICAgICAgdXNp
bmcgYSBHVEsjIFRyZWVWaWV3LiAgVGhlIGdvYWwgaXMgdG8gaGF2ZSBzaW1pbGFyDQorLy8gICAg
ICAgICAgICBmdW5jdGlvbmFsaXR5IHRvIGEgU3lzdGVtLldpbmRvd3MuRm9ybXMuRGF0YUdyaWQN
CisvLyAgICAgICAgICAgIG9yIFN5c3RlbS5XZWIuVUkuV2ViQ29udHJvbHMuRGF0YUdyaWQuICBU
aGlzIGluY2x1ZGVzDQorLy8gICAgICAgICAgICBkYXRhIGJpbmRpbmcgc3VwcG9ydC4NCisvLyAg
ICANCisvLyBCYXNlZCBvbiB0aGUgc2FtcGxlL1RyZWVWaWV3RGVtby5jcw0KKy8vDQorLy8gQXV0
aG9yOiBLcmlzdGlhbiBSaWV0dmVsZCA8a3Jpc0BndGsub3JnPg0KKy8vICAgICAgICAgRGFuaWVs
IE1vcmdhbiA8ZGFubW9yZ0BzYy5yci5jb20+DQorLy8gICAgICAgICBDaHJpc3RpYW4gSGVyZ2Vy
dCA8Y2hyaXNAbW9zYWl4Lm5ldD4NCisvLw0KKy8vIChjKSAyMDAyIEtyaXN0aWFuIFJpZXR2ZWxk
DQorLy8gKGMpIDIwMDIgRGFuaWVsIE1vcmdhbg0KKy8vIChjKSAyMDA0IENocmlzdGlhbiBIZXJn
ZXJ0DQorDQordXNpbmcgU3lzdGVtOw0KK3VzaW5nIFN5c3RlbS5Db2xsZWN0aW9uczsNCit1c2lu
ZyBTeXN0ZW0uQ29tcG9uZW50TW9kZWw7DQordXNpbmcgU3lzdGVtLlJlZmxlY3Rpb247DQordXNp
bmcgU3lzdGVtLlRleHQ7DQordXNpbmcgR0xpYjsNCit1c2luZyBHdGs7DQordXNpbmcgR3RrU2hh
cnA7DQordXNpbmcgU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzOw0KKw0KK25hbWVzcGFj
ZSBNb25vRGV2ZWxvcC5HdWkuV2lkZ2V0cw0KK3sNCisJLy8vIDxzdW1tYXJ5Pg0KKwkvLy8gQ29s
dW1uIGZvciBpbnNlcnRpbmcgaW50byBhIERhdGFHcmlkDQorCS8vLyA8L3N1bW1hcnk+DQorCXB1
YmxpYyBjbGFzcyBEYXRhR3JpZENvbHVtbiANCisJew0KKwkJcHJpdmF0ZSBzdHJpbmcgY29sdW1u
TmFtZSA9ICIiOw0KKwkJcHJpdmF0ZSBHdGsuVHJlZVZpZXdDb2x1bW4gdHJlZVZpZXdDb2x1bW4g
PSBudWxsOw0KKwkJDQorCQkvLy8gPHN1bW1hcnk+DQorCQkvLy8gVGl0bGUgZm9yIHRoZSBDb2x1
bW4NCisJCS8vLyA8L3N1bW1hcnk+DQorCQlwdWJsaWMgc3RyaW5nIENvbHVtbk5hbWUgew0KKwkJ
CWdldCB7DQorCQkJCXJldHVybiBjb2x1bW5OYW1lOw0KKwkJCX0NCisJCQlzZXQgew0KKwkJCQlj
b2x1bW5OYW1lID0gdmFsdWU7DQorCQkJfQ0KKwkJfQ0KKwkJDQorCQkvLy8gPHN1bW1hcnk+DQor
CQkvLy8gR3RrIENvbHVtbiB3aWRnZXQNCisJCS8vLyA8L3N1bW1hcnk+DQorCQlwdWJsaWMgR3Rr
LlRyZWVWaWV3Q29sdW1uIFRyZWVWaWV3Q29sdW1uIHsNCisJCQlnZXQgew0KKwkJCQlyZXR1cm4g
dHJlZVZpZXdDb2x1bW47DQorCQkJfQ0KKwkJCXNldCB7DQorCQkJCXRyZWVWaWV3Q29sdW1uID0g
dmFsdWU7DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCXB1YmxpYyBjbGFzcyBEYXRhR3JpZCA6IEd0
ay5WQm94DQorCXsNCisJCXByaXZhdGUgR3RrLkxpc3RTdG9yZSBzdG9yZSA9IG51bGw7DQorCQlw
cml2YXRlIEd0ay5UcmVlVmlldyB0cmVlVmlldyA9IG51bGw7DQorDQorCQlwdWJsaWMgRGF0YUdy
aWRDb2x1bW5bXSBncmlkQ29sdW1ucyA9IG51bGw7DQorDQorCQlwdWJsaWMgRGF0YUdyaWQgKCkg
OiBiYXNlKGZhbHNlLCA0KSANCisJCXsJCQ0KKwkJCVNjcm9sbGVkV2luZG93IHN3ID0gbmV3IFNj
cm9sbGVkV2luZG93ICgpOw0KKwkJCXRoaXMuUGFja1N0YXJ0IChzdywgdHJ1ZSwgdHJ1ZSwgMCk7
DQorDQorCQkJdHJlZVZpZXcgPSBuZXcgR3RrLlRyZWVWaWV3IChzdG9yZSk7DQorDQorCQkJc3cu
QWRkICh0cmVlVmlldyk7DQorCQl9DQorDQorCQkvLyBGSVhNRTogbmVlZCB0byBwbGFjZSBpbiBh
IGJhc2UgY2xhc3MNCisJCS8vICAgICAgICB0aGUgRGF0YVNvdXJjZSwgRGF0YU1lbWJlciwgRGF0
YUJpbmQoKQ0KKwkJLy8gICAgICAgIHB1YmxpYyBtZW1iZXJzLg0KKwkJLy8gICAgICAgIG1heWJl
IHdlIGNhbiBjYWxsIHRoZSBiYXNlIGNsYXNzDQorCQkvLyAgICAgICAgQmFzZURhdGFMaXN0IGZv
ciBHVEsjPw0KKw0KKwkJcHJpdmF0ZSBvYmplY3QgZGF0YVNvdXJjZSA9IG51bGw7DQorDQorCQlw
cml2YXRlIHN0cmluZyBkYXRhTWVtYmVyID0gIiI7DQorDQorCQlwdWJsaWMgb2JqZWN0IERhdGFT
b3VyY2Ugew0KKwkJCWdldCB7DQorCQkJCXJldHVybiBkYXRhU291cmNlOw0KKwkJCX0NCisJCQlz
ZXQgew0KKwkJCQlkYXRhU291cmNlID0gdmFsdWU7DQorCQkJfQ0KKwkJfQ0KKw0KKwkJcHVibGlj
IHN0cmluZyBEYXRhTWVtYmVyIHsNCisJCQlnZXQgew0KKwkJCQlyZXR1cm4gZGF0YU1lbWJlcjsN
CisJCQl9DQorCQkJc2V0IHsNCisJCQkJZGF0YU1lbWJlciA9IHZhbHVlOw0KKwkJCX0NCisJCX0N
CisNCisJCXB1YmxpYyB2b2lkIERhdGFCaW5kICgpIA0KKwkJew0KKwkJCUNsZWFyICgpOw0KKw0K
KwkJCVN5c3RlbS5PYmplY3QgbyA9IG51bGw7DQorCQkJbyA9IEdldFJlc29sdmVkRGF0YVNvdXJj
ZSAoRGF0YVNvdXJjZSwgRGF0YU1lbWJlcik7DQorCQkJSUVudW1lcmFibGUgaWUgPSAoSUVudW1l
cmFibGUpIG87DQorCQkJSVR5cGVkTGlzdCB0bGlzdCA9IChJVHlwZWRMaXN0KSBvOw0KKw0KKwkJ
CS8vIEZJWE1FOiBkb2VzIG5vdCBiZWxvbmcgaW4gdGhpcyBiYXNlIG1ldGhvZA0KKwkJCUd0ay5U
cmVlSXRlciBpdGVyID0gbmV3IEd0ay5UcmVlSXRlciAoKTsNCisJCQkJCQkJCQkNCisJCQlQcm9w
ZXJ0eURlc2NyaXB0b3JDb2xsZWN0aW9uIHBkYyA9IHRsaXN0LkdldEl0ZW1Qcm9wZXJ0aWVzIChu
ZXcgUHJvcGVydHlEZXNjcmlwdG9yWzBdKTsNCisNCisJCQkvLyBGSVhNRTogZG9lcyBub3QgYmVs
b25nIGluIHRoaXMgYmFzZSBtZXRob2QNCisJCQlncmlkQ29sdW1ucyA9IG5ldyBEYXRhR3JpZENv
bHVtbltwZGMuQ291bnRdOw0KKw0KKwkJCS8vIEZJWE1FOiBkb2VzIG5vdCBiZWxvbmcgaW4gYmFz
ZSBtZXRob2QNCisJCQkvLyBkZWZpbmUgdGhlIGNvbHVtbnMgaW4gdGhlIHRyZWV2aWV3IHN0b3Jl
DQorCQkJLy8gYmFzZWQgb24gdGhlIHNjaGVtYSBvZiB0aGUgcmVzdWx0DQorCQkJLyoNCisJCQl1
aW50W10gdGhlVHlwZXMgPSBuZXcgdWludFtwZGMuQ291bnRdOw0KKwkJCWZvciAoaW50IGNvbCA9
IDA7IGNvbCA8IHBkYy5Db3VudDsgY29sKyspIHsNCisJCQkJdGhlVHlwZXNbY29sXSA9IChpbnQp
IFR5cGVGdW5kYW1lbnRhbHMuVHlwZVN0cmluZzsNCisJCQl9DQorCQkJKi8NCisJCQlHVHlwZSBb
XSB0aGVUeXBlcyA9IG5ldyBHVHlwZVtwZGMuQ291bnRdOw0KKwkJCWZvciAoIGludCBjb2w9MDsg
Y29sPHBkYy5Db3VudDsgY29sKysgKSB7DQorCQkJCXRoZVR5cGVzW2NvbF0gPSAoR1R5cGUpR1R5
cGUuU3RyaW5nOw0KKwkJCX0NCisJCQlzdG9yZS5TZXRDb2x1bW5UeXBlcyAodGhlVHlwZXMpOw0K
Kw0KKwkJCS8vIEZJWE1FOiBkb2VzIG5vdCBiZWxvbmcgaW4gdGhpcyBiYXNlIG1ldGhvZA0KKwkJ
CWludCBjb2xuZHggPSAtMTsNCisJCQlmb3JlYWNoIChQcm9wZXJ0eURlc2NyaXB0b3IgcGQgaW4g
cGRjKSB7DQorCQkJCWNvbG5keCArKzsNCisJCQkJZ3JpZENvbHVtbnNbY29sbmR4XSA9IG5ldyBE
YXRhR3JpZENvbHVtbiAoKTsNCisJCQkJZ3JpZENvbHVtbnNbY29sbmR4XS5Db2x1bW5OYW1lID0g
cGQuTmFtZTsJCQkJDQorCQkJfQ0KKw0KKwkJCWZvcmVhY2ggKFN5c3RlbS5PYmplY3Qgb2JqIGlu
IGllKSB7DQorCQkJCUlDdXN0b21UeXBlRGVzY3JpcHRvciBjdXN0b20gPSAoSUN1c3RvbVR5cGVE
ZXNjcmlwdG9yKSBvYmo7DQorCQkJCVByb3BlcnR5RGVzY3JpcHRvckNvbGxlY3Rpb24gcHJvcGVy
dGllczsNCisJCQkJcHJvcGVydGllcyA9IGN1c3RvbS5HZXRQcm9wZXJ0aWVzICgpOw0KKwkJCQkN
CisJCQkJaXRlciA9IE5ld1JvdyAoKTsNCisJCQkJaW50IGN2ID0gMDsNCisJCQkJZm9yZWFjaCAo
UHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5IGluIHByb3BlcnRpZXMpIHsNCisJCQkJCW9iamVj
dCBvUHJvcFZhbHVlID0gcHJvcGVydHkuR2V0VmFsdWUgKG9iaik7DQorCQkJCQlzdHJpbmcgc1By
b3BWYWx1ZSA9IG9Qcm9wVmFsdWUuVG9TdHJpbmcgKCk7DQorCQkJCQkNCisJCQkJCS8vIEZJWE1F
OiBkb2VzIG5vdCBiZWxvbmcgaW4gdGhpcyBiYXNlIG1ldGhvZA0KKwkJCQkJU2V0Q29sdW1uVmFs
dWUgKGl0ZXIsIGN2LCBzUHJvcFZhbHVlKTsNCisNCisJCQkJCWN2Kys7DQorCQkJCX0NCisJCQl9
DQorDQorCQkJLy8gRklYTUU6IGRvZXMgbm90IGJlbG9uZyBpbiB0aGlzIGJhc2UgbWV0aG9kDQor
CQkJdHJlZVZpZXcuTW9kZWwgPSBzdG9yZTsNCisJCQlBdXRvQ3JlYXRlVHJlZVZpZXdDb2x1bW5z
ICggdHJlZVZpZXcgKTsNCisJCX0NCisNCisJCS8vIGJvcnJvd2VkIGZyb20gTW9ubydzIFN5c3Rl
bS5XZWIgaW1wbGVtZW50YXRpb24NCisJCXByb3RlY3RlZCBJRW51bWVyYWJsZSBHZXRSZXNvbHZl
ZERhdGFTb3VyY2Uob2JqZWN0IHNvdXJjZSwgc3RyaW5nIG1lbWJlcikgDQorCQl7DQorCQkJaWYg
KHNvdXJjZSAhPSBudWxsICYmIHNvdXJjZSBpcyBJTGlzdFNvdXJjZSkgew0KKwkJCQlJTGlzdFNv
dXJjZSBzcmMgPSAoSUxpc3RTb3VyY2UpIHNvdXJjZTsNCisJCQkJSUxpc3QgbGlzdCA9IHNyYy5H
ZXRMaXN0ICgpOw0KKwkJCQlpZiAoIXNyYy5Db250YWluc0xpc3RDb2xsZWN0aW9uKSB7DQorCQkJ
CQlyZXR1cm4gbGlzdDsNCisJCQkJfQ0KKwkJCQlpZiAobGlzdCAhPSBudWxsICYmIGxpc3QgaXMg
SVR5cGVkTGlzdCkgew0KKw0KKwkJCQkJSVR5cGVkTGlzdCB0bGlzdCA9IChJVHlwZWRMaXN0KSBs
aXN0Ow0KKwkJCQkJUHJvcGVydHlEZXNjcmlwdG9yQ29sbGVjdGlvbiBwZGMgPSB0bGlzdC5HZXRJ
dGVtUHJvcGVydGllcyAobmV3IFByb3BlcnR5RGVzY3JpcHRvclswXSk7DQorCQkJCQlpZiAocGRj
ICE9IG51bGwgJiYgcGRjLkNvdW50ID4gMCkgew0KKwkJCQkJCVByb3BlcnR5RGVzY3JpcHRvciBw
ZCA9IG51bGw7DQorCQkJCQkJaWYgKG1lbWJlciAhPSBudWxsICYmIG1lbWJlci5MZW5ndGggPiAw
KSB7DQorCQkJCQkJCXBkID0gcGRjLkZpbmQgKG1lbWJlciwgdHJ1ZSk7DQorCQkJCQkJfSBlbHNl
IHsNCisJCQkJCQkJcGQgPSBwZGNbMF07DQorCQkJCQkJfQ0KKwkJCQkJCWlmIChwZCAhPSBudWxs
KSB7DQorCQkJCQkJCW9iamVjdCBydiA9IHBkLkdldFZhbHVlIChsaXN0WzBdKTsNCisJCQkJCQkJ
aWYgKHJ2ICE9IG51bGwgJiYgcnYgaXMgSUVudW1lcmFibGUpIHsNCisJCQkJCQkJCXJldHVybiAo
SUVudW1lcmFibGUpcnY7DQorCQkJCQkJCX0NCisJCQkJCQl9DQorCQkJCQkJdGhyb3cgbmV3IEV4
Y2VwdGlvbiAoIkxpc3RTb3VyY2VfTWlzc2luZ19EYXRhTWVtYmVyIik7DQorCQkJCQl9DQorCQkJ
CQl0aHJvdyBuZXcgRXhjZXB0aW9uICgiTGlzdFNvdXJjZV9XaXRob3V0X0RhdGFNZW1iZXJzIik7
DQorCQkJCX0NCisJCQl9DQorCQkJaWYgKHNvdXJjZSBpcyBJRW51bWVyYWJsZSkgew0KKwkJCQly
ZXR1cm4gKElFbnVtZXJhYmxlKXNvdXJjZTsNCisJCQl9DQorCQkJcmV0dXJuIG51bGw7DQorCQl9
DQorDQorCQlwdWJsaWMgdm9pZCBDbGVhciAoKSANCisJCXsNCisJCQlpZiAoc3RvcmUgIT0gbnVs
bCkgew0KKwkJCQlzdG9yZS5DbGVhciAoKTsNCisJCQkJc3RvcmUgPSBudWxsOw0KKwkJCQkvL3N0
b3JlID0gbmV3IExpc3RTdG9yZSAoKGludClUeXBlRnVuZGFtZW50YWxzLlR5cGVTdHJpbmcpOw0K
KwkJCQlzdG9yZSA9IG5ldyBMaXN0U3RvcmUoIEdUeXBlLlN0cmluZyApOw0KKwkJCX0NCisJCQll
bHNlIHsNCisJCQkJLy9zdG9yZSA9IG5ldyBMaXN0U3RvcmUgKChpbnQpVHlwZUZ1bmRhbWVudGFs
cy5UeXBlU3RyaW5nKTsNCisJCQkJc3RvcmUgPSBuZXcgTGlzdFN0b3JlKCBHVHlwZS5TdHJpbmcg
KTsNCisJCQl9CQ0KKw0KKwkJCWlmIChncmlkQ29sdW1ucyAhPSBudWxsKSB7DQorCQkJCWZvciAo
aW50IGMgPSAwOyBjIDwgZ3JpZENvbHVtbnMuTGVuZ3RoOyBjKyspIHsNCisJCQkJCWlmIChncmlk
Q29sdW1uc1tjXSAhPSBudWxsKSB7DQorCQkJCQkJaWYgKGdyaWRDb2x1bW5zW2NdLlRyZWVWaWV3
Q29sdW1uICE9IG51bGwpIHsNCisJCQkJCQkJdHJlZVZpZXcuUmVtb3ZlQ29sdW1uIChncmlkQ29s
dW1uc1tjXS5UcmVlVmlld0NvbHVtbik7DQorCQkJCQkJCWdyaWRDb2x1bW5zW2NdLlRyZWVWaWV3
Q29sdW1uID0gbnVsbDsNCisJCQkJCQl9DQorCQkJCQkJZ3JpZENvbHVtbnNbY10gPSBudWxsOw0K
KwkJCQkJfQ0KKwkJCQl9DQorCQkJCWdyaWRDb2x1bW5zID0gbnVsbDsNCisJCQl9DQorCQl9DQor
DQorCQkvLyBmb3IgREVCVUcgb25seQ0KKwkJcHVibGljIHZvaWQgQXBwZW5kVGV4dCAoc3RyaW5n
IHRleHQpIA0KKwkJew0KKwkJCUNvbnNvbGUuV3JpdGVMaW5lICgiRGF0YUdyaWQgREVCVUc6ICIg
KyB0ZXh0KTsNCisJCQlDb25zb2xlLk91dC5GbHVzaCAoKTsNCisJCX0NCisNCisJCXB1YmxpYyBU
cmVlSXRlciBOZXdSb3cgKCkgDQorCQl7IA0KKwkJCS8qDQorCQkJVHJlZUl0ZXIgcm93VHJlZUl0
ZXIgPSBuZXcgVHJlZUl0ZXIoKTsNCisJCQlzdG9yZS5BcHBlbmQgKG91dCByb3dUcmVlSXRlcik7
DQorCQkJcmV0dXJuIHJvd1RyZWVJdGVyOw0KKwkJCSovDQorCQkJcmV0dXJuIHN0b3JlLkFwcGVu
ZCgpOw0KKwkJfQ0KKw0KKwkJcHVibGljIHZvaWQgQWRkUm93IChvYmplY3RbXSBjb2x1bW5WYWx1
ZXMpIA0KKwkJewkNCisJCQlUcmVlSXRlciBpdGVyID0gTmV3Um93ICgpOwkJCQ0KKwkJCWZvcihp
bnQgY29sID0gMDsgY29sIDwgY29sdW1uVmFsdWVzLkxlbmd0aDsgY29sKyspIHsNCisJCQkJc3Ry
aW5nIGNlbGxWYWx1ZSA9IGNvbHVtblZhbHVlc1tjb2xdLlRvU3RyaW5nICgpOw0KKwkJCQlTZXRD
b2x1bW5WYWx1ZSAoaXRlciwgY29sLCBjZWxsVmFsdWUpOw0KKwkJCX0NCisJCX0NCisNCisJCXB1
YmxpYyB2b2lkIFNldENvbHVtblZhbHVlIChUcmVlSXRlciBpdGVyLCBpbnQgY29sdW1uLCBzdHJp
bmcgdmFsdWUpIA0KKwkJew0KKwkJCUdMaWIuVmFsdWUgY2VsbCA9IG5ldyBHTGliLlZhbHVlICh2
YWx1ZSk7DQorCQkJc3RvcmUuU2V0VmFsdWUgKGl0ZXIsIGNvbHVtbiwgY2VsbCk7CQ0KKwkJfQ0K
Kw0KKwkJcHJpdmF0ZSB2b2lkIEF1dG9DcmVhdGVUcmVlVmlld0NvbHVtbnMgKEd0ay5UcmVlVmll
dyB0aGVUcmVlVmlldykgDQorCQl7DQorCQkJZm9yKGludCBjb2wgPSAwOyBjb2wgPCBncmlkQ29s
dW1ucy5MZW5ndGg7IGNvbCsrKSB7DQorCQkJCS8vIGVzY2FwZSB1bmRlcnNjb3JlIF8gYmVjYXVz
ZSBpdCBpcyB1c2VkDQorCQkJCS8vIGFzIHRoZSB1bmRlcmxpbmUgaW4gbWVudXMgYW5kIGxhYmVs
cw0KKwkJCQlTdHJpbmdCdWlsZGVyIG5hbWUgPSBuZXcgU3RyaW5nQnVpbGRlciAoKTsNCisJCQkJ
Zm9yZWFjaCAoY2hhciBjaCBpbiBncmlkQ29sdW1uc1tjb2xdLkNvbHVtbk5hbWUpIHsNCisJCQkJ
CWlmIChjaCA9PSAnXycpDQorCQkJCQkJbmFtZS5BcHBlbmQgKCJfXyIpOw0KKwkJCQkJZWxzZQ0K
KwkJCQkJCW5hbWUuQXBwZW5kIChjaCk7DQorCQkJCX0NCisJCQkJVHJlZVZpZXdDb2x1bW4gdHZj
Ow0KKwkJCQl0dmMgPSBDcmVhdGVDb2x1bW4gKHRoZVRyZWVWaWV3LCBjb2wsIA0KKwkJCQkJCW5h
bWUuVG9TdHJpbmcgKCkpOw0KKwkJCQl0aGVUcmVlVmlldy5BcHBlbmRDb2x1bW4gKHR2Yyk7DQor
CQkJfQ0KKwkJfQ0KKw0KKwkJLy8gVE9ETzogbWF5YmUgbmVlZCB0byBjcmVhdGUgDQorCQkvLyBh
IERhdGFHcmlkQ29sdW1uQ29sbGVjdGlvbiBvZiBEYXRhR3JpZENvbHVtbg0KKwkJLy8gYW5kIGEg
RGF0YUdyaWRDb2x1bW4gY29udGFpbiBhIFRyZWVWaWV3Q29sdW1uDQorCQlwdWJsaWMgVHJlZVZp
ZXdDb2x1bW4gQ3JlYXRlQ29sdW1uIChHdGsuVHJlZVZpZXcgdGhlVHJlZVZpZXcsIGludCBjb2ws
IA0KKwkJCQkJCXN0cmluZyBjb2x1bW5OYW1lKSANCisJCXsNCisJCQlUcmVlVmlld0NvbHVtbiBO
YW1lQ29sID0gbmV3IFRyZWVWaWV3Q29sdW1uICgpOwkJIA0KKwkJCUNlbGxSZW5kZXJlciBOYW1l
UmVuZGVyZXIgPSBuZXcgQ2VsbFJlbmRlcmVyVGV4dCAoKTsNCisJCQkNCisJCQlOYW1lQ29sLlRp
dGxlID0gY29sdW1uTmFtZTsNCisJCQlOYW1lQ29sLlBhY2tTdGFydCAoTmFtZVJlbmRlcmVyLCB0
cnVlKTsNCisJCQlOYW1lQ29sLkFkZEF0dHJpYnV0ZSAoTmFtZVJlbmRlcmVyLCAidGV4dCIsIGNv
bCk7DQorDQorCQkJZ3JpZENvbHVtbnNbY29sXS5UcmVlVmlld0NvbHVtbiA9IE5hbWVDb2w7DQor
CQkJDQorCQkJcmV0dXJuIE5hbWVDb2w7DQorCQl9DQorCX0NCit9DQorDQpkaWZmIC11ck4gTW9u
b0RldmVsb3AvQ29yZS9zcmMvTGlicmFyaWVzL01vbm9EZXZlbG9wLkd1aS5XaWRnZXRzL01ha2Vm
aWxlLmFtIHNhbmRib3gvQ29yZS9zcmMvTGlicmFyaWVzL01vbm9EZXZlbG9wLkd1aS5XaWRnZXRz
L01ha2VmaWxlLmFtDQotLS0gTW9ub0RldmVsb3AvQ29yZS9zcmMvTGlicmFyaWVzL01vbm9EZXZl
bG9wLkd1aS5XaWRnZXRzL01ha2VmaWxlLmFtCTIwMDQtMTEtMDMgMDQ6Mzg6MTAuOTM1Mzk0NTM2
IC0wODAwDQorKysgc2FuZGJveC9Db3JlL3NyYy9MaWJyYXJpZXMvTW9ub0RldmVsb3AuR3VpLldp
ZGdldHMvTWFrZWZpbGUuYW0JMjAwNC0xMS0wMyAwNDo0MTozNy40NTU5OTg2MzIgLTA4MDANCkBA
IC0yMyw3ICsyMyw4IEBADQogTmF2YmFyL05hdmJhci5jcyBcDQogVGFiTGFiZWwvVGFiTGFiZWwu
Y3MgXA0KIEdsYWRlV2lkZ2V0RXh0cmFjdC9HbGFkZVdpZGdldEV4dHJhY3QuY3MgXA0KLURyYWdO
b3RlYm9vay9EcmFnTm90ZWJvb2suY3MNCitEcmFnTm90ZWJvb2svRHJhZ05vdGVib29rLmNzIFwN
CitEYXRhR3JpZC9EYXRhR3JpZC5jcw0KIA0KIA0KIGJ1aWxkX3NvdXJjZXMgPSAkKGFkZHByZWZp
eCAkKHNyY2RpcikvLCAkKEZJTEVTKSkNCmRpZmYgLXVyTiBNb25vRGV2ZWxvcC9Db3JlL3NyYy9M
aWJyYXJpZXMvTW9ub0RldmVsb3AuR3VpLldpZGdldHMvTW9ub0RldmVsb3AuR3VpLldpZGdldHMu
cHJqeCBzYW5kYm94L0NvcmUvc3JjL0xpYnJhcmllcy9Nb25vRGV2ZWxvcC5HdWkuV2lkZ2V0cy9N
b25vRGV2ZWxvcC5HdWkuV2lkZ2V0cy5wcmp4DQotLS0gTW9ub0RldmVsb3AvQ29yZS9zcmMvTGli
cmFyaWVzL01vbm9EZXZlbG9wLkd1aS5XaWRnZXRzL01vbm9EZXZlbG9wLkd1aS5XaWRnZXRzLnBy
angJMjAwNC0xMS0wMyAwNDozODoxMC45MTgzOTcxMjAgLTA4MDANCisrKyBzYW5kYm94L0NvcmUv
c3JjL0xpYnJhcmllcy9Nb25vRGV2ZWxvcC5HdWkuV2lkZ2V0cy9Nb25vRGV2ZWxvcC5HdWkuV2lk
Z2V0cy5wcmp4CTIwMDQtMTEtMDMgMDQ6NDI6NDMuODc0OTAxNDI0IC0wODAwDQpAQCAtMjAsNiAr
MjAsNyBAQA0KICAgICA8RmlsZSBuYW1lPSIuL1RyZWUvVHJlZU5vZGVDb2xsZWN0aW9uLmNzIiBz
dWJ0eXBlPSJDb2RlIiBidWlsZGFjdGlvbj0iQ29tcGlsZSIgZGVwZW5kc29uPSIiIGRhdGE9IiIg
Lz4NCiAgICAgPEZpbGUgbmFtZT0iLi9UcmVlL1RyZWVWaWV3LmNzIiBzdWJ0eXBlPSJDb2RlIiBi
dWlsZGFjdGlvbj0iQ29tcGlsZSIgZGVwZW5kc29uPSIiIGRhdGE9IiIgLz4NCiAgICAgPEZpbGUg
bmFtZT0iLi9GaWxlU2VsZWN0b3IvRmlsZVNlbGVjdG9yLmNzIiBzdWJ0eXBlPSJDb2RlIiBidWls
ZGFjdGlvbj0iQ29tcGlsZSIgZGVwZW5kc29uPSIiIGRhdGE9IiIgLz4NCisgICAgPEZpbGUgbmFt
ZT0iLi9EYXRhR3JpZC9EYXRhR3JpZC5jcyIgc3VidHlwZT0iQ29kZSIgYnVpbGRhY3Rpb249IkNv
bXBpbGUiIGRlcGVuZHNvbj0iIiBkYXRhPSIiIC8+DQogICA8L0NvbnRlbnRzPg0KICAgPFJlZmVy
ZW5jZXM+DQogICAgIDxSZWZlcmVuY2UgdHlwZT0iR2FjIiByZWZ0bz0iZ2xhZGUtc2hhcnAsIFZl
cnNpb249MS4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zNWUxMDE5NWRh
YjNjOTlmIiBsb2NhbGNvcHk9IlRydWUiIC8+DQpAQCAtNDksNCArNTAsNCBAQA0KICAgICAgIDxP
dXRwdXQgZGlyZWN0b3J5PSIuL2Jpbi9SZWxlYXNlIiBhc3NlbWJseT0iTW9ub0RldmVsb3AuR3Vp
LldpZGdldHMiIGV4ZWN1dGVTY3JpcHQ9IiIgZXhlY3V0ZUJlZm9yZUJ1aWxkPSIiIGV4ZWN1dGVB
ZnRlckJ1aWxkPSIiIC8+DQogICAgIDwvQ29uZmlndXJhdGlvbj4NCiAgIDwvQ29uZmlndXJhdGlv
bnM+DQotPC9Qcm9qZWN0Pg0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlDQorPC9Qcm9qZWN0
Pg0K


--=-nyj37J4YdpvwUvtrHfHh--

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

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

iD8DBQBBiNUVCbCkkek3byARAkOvAJoCZzkkBOEVsRQUjM4M8ofnZSWnGQCfUdM7
Pkbr3whsQIqOXw1WSZ5/btM=
=GGbB
-----END PGP SIGNATURE-----

--=-f2nA8BoHOAhAXkPpueXC--