Re: Re: Problem with grant and revoke user roles in turbine-4

"Georg Kallidis" <[email protected]> Fri, 17 Nov 2017 23:17:38 +0100
Newsgroups gmane.comp.jakarta.turbine.user
Message-ID <OFE0C2C427.A86EED25-ONC12581DB.0078293A-C12581DB.007A76CC@cedis.fu-berlin.de>
SGkgSmVmZiwgDQoNCmFzIGZhciBhcyBJIGNhbiBzZWUsIEkgYXNzdW1lIHRoZSBpbXBsZW1lbnRh
dGlvbiBjbGFzcyBtaWdodCBiZSBUb3JxdWVUdXJiaW5lTW9kZWxNYW5hZ2VySW1wbD8gQ291bGQg
eW91IGNoZWNrIHRoaXM/IFlvdXIgc2Vjb25kIGF0dGVtcHQgbWF5IGJlIGluZGVlZCBjbG9zZSwg
YnV0IHRoZSByZWFzb24gaXMgbWlzc2luZy4gQ291bGQgeW91IHByb3ZpZGUgdGhlIHN0YWNrL2Nh
dXNlIG9mIHRoZSBleGNlcHRpb24/DQoNClByb2JhYmx5LCBpZiB0aGlzIGlzIHRoZSBjYXNlLCBh
dCB0aGlzIHBvaW50IG9mIHRoZSBjb2RlIG9mIHRoZSBtb2RlbCBtYW5hZ2VyIHRoZSByb2xlLCBn
cm91cCBhbmQgdXNlciBhcmUgYWxyZWFkeSBjaGVja2VkLCBidXQgd2hhdCBtaWdodCBoYXZlIGNh
dXNlZCB0aGUgZXhjZXB0aW9uIGlzIGEgZmFpbGluZyBjYXN0IHRvIA0KDQotIG9yZy5hcGFjaGUu
ZnVsY3J1bS5zZWN1cml0eS5tb2RlbC50dXJiaW5lLmVudGl0eS5UdXJiaW5lVXNlciBvZiB0aGUg
dXNlciBvYmplY3Qgb3IgDQotIG9yZy5hcGFjaGUuZnVsY3J1bS5zZWN1cml0eS50b3JxdWUuc2Vj
dXJpdHkuVG9ycXVlQWJzdHJhY3RTZWN1cml0eUVudGl0eSBvZiBhbnkgb2YgdGhlIG9iamVjdHMs
IHdoaWNoIG1heSBiZSB0aGUgcmVhc29uLCBpZiBpbiB5b3VyIHNjaGVtYSB0aGUgYmFzZWNsYXNz
IGF0dHJpYnV0ZSBpcyBub3Qgc2V0IHRvIG9yZy5hcGFjaGUuZnVsY3J1bS5zZWN1cml0eS50b3Jx
dWUudHVyYmluZS5EZWZhdWx0QWJzdHJhY3RUdXJiaW5lWFhYIChYWFggPSBVc2VyfFJvbGV8R3Jv
dXApIGNsYXNzIChvciBhbm90aGVyIGNsYXNzIGltcGxlbWVudGluZyB0aGUgcmVxdWlyZWQgaW50
ZXJmYWNlLCBjZnQuIHRoZSBleGFtcGxlIHRvcnF1ZS1zZWN1cml0eS1zY2hlbS54bWwgaW4gdGhl
IFR1cmJpbmUgd2ViYXBwIGFyY2hldHlwZSkuLi4NCg0KQW5kIHRoYW5rcyBmb3IgeW91ciBlZmZv
cnRzIHRvIG1pZ3JhdGUgLyB1c2UgdGhlIGZsdXggbGlicmFyeSENCg0KQmVzdCByZWdhcmRzLCBH
ZW9yZw0KDQotLS0tLUplZmZlcnkgUGFpbnRlciA8amVmZkBqaXZlY2FzdC5jb20+IHNjaHJpZWI6
IC0tLS0tDQpBbjogdXNlckB0dXJiaW5lLmFwYWNoZS5vcmcNClZvbjogSmVmZmVyeSBQYWludGVy
IDxqZWZmQGppdmVjYXN0LmNvbT4NCkRhdHVtOiAxNi4xMS4yMDE3IDIzOjI5DQpCZXRyZWZmOiBS
ZTogUHJvYmxlbSB3aXRoIGdyYW50IGFuZCByZXZva2UgdXNlciByb2xlcyBpbiB0dXJiaW5lLTQN
Cg0KSSBsb29rZWQgYSBsaXR0bGUgbW9yZSBhdCB0aGUgdGVzdCBjYXNlcywgYW5kIGdvdCBteSBj
b2RlIHNldHVwIGVub3VnaCANCnRvIHRyeSBhbmQgY2FsbCB0aGUgZnVsY3J1bSBzZWN1cml0eSBz
ZXJ2aWNlIGRpcmVjdGx5Li4uDQoNCqCgoKAgoKCgIKCgoCCgoKAgoKCgIKCgoCCgoKAgoKCgIKCg
oCAvLyB0cnkgdXNpbmcgZnVsY3J1bSBzZXJ2aWNlDQooKFR1cmJpbmVNb2RlbE1hbmFnZXIpZnVs
Y3J1bVNlY3VyaXR5U2VydmljZS5nZXRNb2RlbE1hbmFnZXIoKSkuZ3JhbnQoZnVsY3J1bVVzZXIs
IA0KZ3JvdXAsIHJvbGUpOw0KDQpUaGUgZXJyb3IgbG9ncyBhcmUgc3RpbGwgcmVwb3J0aW5nIHBy
b2JsZW1zOg0KDQpJIHZlcmlmaWVkIHRoYXQgdGhpcyBsb2FkZWQgdGhlIHVzZXIgImRlYW4iIGZy
b20gdGhlIGRhdGFiYXNlIGFzIGEgDQpmdWxjcnVtVXNlciBhbmQgaXQgY2FtZSB0aHJvdWdoIHdp
dGggYSBjbGFzcyB0eXBlIG9mIA0KY29tLmppdmVjYXN0LnNtYXJ0b3JkZXIub20uVHVyYmluZVVz
ZXIgcmF0aGVyIHRoYW4gdGhlIHdyYXBwZXIgdGhhdCB0aGUgDQp0dXJiaW5lIHNlY3VyaXR5IHNl
cnZpY2UgcHJvdmlkZWQuIGFuZCBub3cgSSBnZXQgYSBEYXRhQmFja2VuZEV4Y2VwdGlvbiANCmVy
cm9yIG9uIHRoZSBncmFudCBjYWxsLi4uDQoNCjIwMTctMTEtMTYgMTc6MjQ6NDMsNzIyIFtodHRw
LW5pby04MDgwLWV4ZWMtM10gREVCVUcgYXZhbG9uIC0gTG9jYXRlZCANCnRoZSBzZXJ2aWNlICdv
cmcuYXBhY2hlLmZ1bGNydW0uc2VjdXJpdHkuVXNlck1hbmFnZXInIGluIHRoZSBsb2NhbCBjb250
YWluZXINCjIwMTctMTEtMTYgMTc6MjQ6NDcsODk1IFtodHRwLW5pby04MDgwLWV4ZWMtM10gREVC
VUcgDQpjb20uaml2ZWNhc3Quc21hcnRvcmRlci5tb2R1bGVzLmFjdGlvbnMuYWRtaW4uVXNlckFj
dGlvbiAtIGZ1bGNydW1Vc2VyOiANCmNvbS5qaXZlY2FzdC5zbWFydG9yZGVyLm9tLlR1cmJpbmVV
c2VyDQoyMDE3LTExLTE2IDE3OjI0OjU0LDE0NyBbaHR0cC1uaW8tODA4MC1leGVjLTNdIERFQlVH
IGF2YWxvbi5wZWVyTWFuYWdlciANCi2gIGdldCBjYWNoZWQgDQpQZWVySW5zdGFuY2UoKTpjb20u
aml2ZWNhc3Quc21hcnRvcmRlci5vbS5UdXJiaW5lR3JvdXBQZWVySW1wbEAzY2NjMzJjDQoyMDE3
LTExLTE2IDE3OjI0OjU1LDc1MCBbaHR0cC1uaW8tODA4MC1leGVjLTNdIERFQlVHIGF2YWxvbi5w
ZWVyTWFuYWdlciANCi2gIGdldCBjYWNoZWQgDQpQZWVySW5zdGFuY2UoKTpjb20uaml2ZWNhc3Qu
c21hcnRvcmRlci5vbS5UdXJiaW5lUm9sZVBlZXJJbXBsQDFmN2Y4MDcNCjIwMTctMTEtMTYgMTc6
MjQ6NTYsMDMxIFtodHRwLW5pby04MDgwLWV4ZWMtM10gREVCVUcgYXZhbG9uLnBlZXJNYW5hZ2Vy
IA0KLaAgZ2V0IGNhY2hlZCANClBlZXJJbnN0YW5jZSgpOmNvbS5qaXZlY2FzdC5zbWFydG9yZGVy
Lm9tLlR1cmJpbmVSb2xlUGVlckltcGxAMWY3ZjgwNw0KMjAxNy0xMS0xNiAxNzoyNDo1NiwzMTUg
W2h0dHAtbmlvLTgwODAtZXhlYy0zXSBERUJVRyBhdmFsb24ucGVlck1hbmFnZXIgDQotoCBnZXQg
Y2FjaGVkIA0KUGVlckluc3RhbmNlKCk6Y29tLmppdmVjYXN0LnNtYXJ0b3JkZXIub20uVHVyYmlu
ZVJvbGVQZWVySW1wbEAxZjdmODA3DQoyMDE3LTExLTE2IDE3OjI0OjU2LDU5OSBbaHR0cC1uaW8t
ODA4MC1leGVjLTNdIERFQlVHIGF2YWxvbi5wZWVyTWFuYWdlciANCi2gIGdldCBjYWNoZWQgDQpQ
ZWVySW5zdGFuY2UoKTpjb20uaml2ZWNhc3Quc21hcnRvcmRlci5vbS5UdXJiaW5lR3JvdXBQZWVy
SW1wbEAzY2NjMzJjDQoyMDE3LTExLTE2IDE3OjI1OjAzLDEyOSBbaHR0cC1uaW8tODA4MC1leGVj
LTNdIERFQlVHIGF2YWxvbi5wZWVyTWFuYWdlciANCi2gIGdldCBjYWNoZWQgDQpQZWVySW5zdGFu
Y2UoKTpjb20uaml2ZWNhc3Quc21hcnRvcmRlci5vbS5UdXJiaW5lR3JvdXBQZWVySW1wbEAzY2Nj
MzJjDQoyMDE3LTExLTE2IDE3OjI1OjAzLDE0MyBbaHR0cC1uaW8tODA4MC1leGVjLTNdIERFQlVH
IGF2YWxvbi5wZWVyTWFuYWdlciANCi2gIGdldCBjYWNoZWQgDQpQZWVySW5zdGFuY2UoKTpjb20u
aml2ZWNhc3Quc21hcnRvcmRlci5vbS5UdXJiaW5lUm9sZVBlZXJJbXBsQDFmN2Y4MDcNCjIwMTct
MTEtMTYgMTc6MjU6MDksMDk3IFtodHRwLW5pby04MDgwLWV4ZWMtM10gREVCVUcgDQpjb20uaml2
ZWNhc3Quc21hcnRvcmRlci5tb2R1bGVzLmFjdGlvbnMuYWRtaW4uVXNlckFjdGlvbiAtIEFkZGlu
ZyBuZXcgDQpyb2xlIHRvIHVzZXI6IGludmVudG9yeQ0KMjAxNy0xMS0xNiAxNzoyNToxMCw1MzUg
W2h0dHAtbmlvLTgwODAtZXhlYy0zXSBERUJVRyBhdmFsb24gLSBMb2NhdGVkIA0KdGhlIHNlcnZp
Y2UgJ29yZy5hcGFjaGUuZnVsY3J1bS5zZWN1cml0eS5Nb2RlbE1hbmFnZXInIGluIHRoZSBsb2Nh
bCANCmNvbnRhaW5lcg0KMjAxNy0xMS0xNiAxNzoyNToxMCw1NDUgW2h0dHAtbmlvLTgwODAtZXhl
Yy0zXSBERUJVRyBhdmFsb24gLSBMb2NhdGVkIA0KdGhlIHNlcnZpY2UgJ29yZy5hcGFjaGUuZnVs
Y3J1bS5zZWN1cml0eS5Sb2xlTWFuYWdlcicgaW4gdGhlIGxvY2FsIGNvbnRhaW5lcg0KMjAxNy0x
MS0xNiAxNzoyNToxMCw1NDcgW2h0dHAtbmlvLTgwODAtZXhlYy0zXSBERUJVRyBhdmFsb24ucGVl
ck1hbmFnZXIgDQotoCBnZXQgY2FjaGVkIA0KUGVlckluc3RhbmNlKCk6Y29tLmppdmVjYXN0LnNt
YXJ0b3JkZXIub20uVHVyYmluZVJvbGVQZWVySW1wbEAxZjdmODA3DQoyMDE3LTExLTE2IDE3OjI1
OjEwLDU2MCBbaHR0cC1uaW8tODA4MC1leGVjLTNdIERFQlVHIGF2YWxvbiAtIExvY2F0ZWQgDQp0
aGUgc2VydmljZSAnb3JnLmFwYWNoZS5mdWxjcnVtLnNlY3VyaXR5LlVzZXJNYW5hZ2VyJyBpbiB0
aGUgbG9jYWwgY29udGFpbmVyDQoyMDE3LTExLTE2IDE3OjI1OjEwLDU2MSBbaHR0cC1uaW8tODA4
MC1leGVjLTNdIERFQlVHIGF2YWxvbi5wZWVyTWFuYWdlciANCi2gIGdldCBjYWNoZWQgDQpQZWVy
SW5zdGFuY2UoKTpjb20uaml2ZWNhc3Quc21hcnRvcmRlci5vbS5UdXJiaW5lVXNlclBlZXJJbXBs
QDg2Y2VkYjQNCjIwMTctMTEtMTYgMTc6MjU6MTAsNTk4IFtodHRwLW5pby04MDgwLWV4ZWMtM10g
REVCVUcgYXZhbG9uIC0gTG9jYXRlZCANCnRoZSBzZXJ2aWNlICdvcmcuYXBhY2hlLmZ1bGNydW0u
c2VjdXJpdHkuR3JvdXBNYW5hZ2VyJyBpbiB0aGUgbG9jYWwgDQpjb250YWluZXINCjIwMTctMTEt
MTYgMTc6MjU6MTAsNTk5IFtodHRwLW5pby04MDgwLWV4ZWMtM10gREVCVUcgYXZhbG9uLnBlZXJN
YW5hZ2VyIA0KLaAgZ2V0IGNhY2hlZCANClBlZXJJbnN0YW5jZSgpOmNvbS5qaXZlY2FzdC5zbWFy
dG9yZGVyLm9tLlR1cmJpbmVHcm91cFBlZXJJbXBsQDNjY2MzMmMNCjIwMTctMTEtMTYgMTc6MjU6
MjUsMjAyIFtodHRwLW5pby04MDgwLWV4ZWMtM10gRVJST1IgDQpjb20uaml2ZWNhc3Quc21hcnRv
cmRlci5tb2R1bGVzLmFjdGlvbnMuYWRtaW4uVXNlckFjdGlvbiAtIEVycm9yIHNldHRpbmcgDQpy
b2xlczogb3JnLmFwYWNoZS5mdWxjcnVtLnNlY3VyaXR5LnV0aWwuRGF0YUJhY2tlbmRFeGNlcHRp
b246IA0KZ3JhbnQoJ2RlYW4nLCAnZ2xvYmFsJywgJ2ludmVudG9yeScpIGZhaWxlZA0KDQoNCmFu
eSBpZGVhcz8NCg0KLS0NCkplZmYNCg0KDQoNCk9uIDExLzE2LzIwMTcgMDU6MDAgUE0sIEplZmZl
cnkgUGFpbnRlciB3cm90ZToNCj4NCj4gSGkgR2VvcmcsDQo+DQo+IEkgYW0gbWFraW5nIHNvbWUg
Z29vZCBwcm9ncmVzcy6gIEkgZG9uJ3Qga25vdyBpZiB5b3UgcmVtZW1iZXIgdGhlIG9sZCANCj4g
Zmx1eCBsaWJyYXJ5IGZvciB1c2VyIG1hbmFnZW1lbnQsIGJ1dCBJIGhhdmUgc3RhcnRlZCB0byBy
ZS13cml0ZSB0aGF0IA0KPiB0byB3b3JrIHdpdGggVHVyYmluZSA0LjAuoCBJIGFtIGhhdmluZyBz
b21lIHRyb3VibGVzIGhvd2V2ZXIgd2l0aCB0aGUgDQo+IGdyYW50L3Jldm9rZSByb2xlcyB3aXRo
IGNhc3RpbmcgdGhlIHVzZXIgb2JqZWN0IGluY29ycmVjdGx5IGZyb20gdGhlIA0KPiBUdXJiaW5l
V3JhcHBlciBjbGFzcy6gIENhbiB5b3UgaGVscCBtZSB3aXRoIHRoZSBpc3N1ZSBJIGFtIGhhdmlu
ZyANCj4gYmVsb3c/oCBJIGxvb2tlZCBhdCB0aGUgdW5pdCB0ZXN0cyBpbiB0aGUgVHVyYmluZSBz
b3VyY2UgZm9yIA0KPiBpbnNwaXJhdGlvbiBvbiBtaWdyYXRpbmcsIGJ1dCBpdCBpc24ndCByZWNv
Z25pemluZyB0aGUgdXNlciBjbGFzcyANCj4gcHJvcGVybHkuoCBJIGV2ZW4gdHJpZWQgdG8gbWFu
dWFsbHkgZG93bmNhc3QgKHNlZSBteSBjb2RlIGJlbG93KSwgYW5kIA0KPiBzdGlsbCBjYW5ub3Qg
bWFrZSBpdCB3b3JrLg0KPg0KPiBJZiBJIGNhbiBnZXQgdGhpcyBhbGwgd29ya2luZywgSSB0aG91
Z2h0IGl0IG1pZ2h0IGJlIHVzZWZ1bCB0byBwdWJsaXNoIA0KPiBhIG5ldyBmbHV4IGxpYnJhcnkg
Y29tcGF0aWJsZSB3aXRoIFR1cmJpbmUtNC4wIGZvciB1c2VyIG1hbmFnZW1lbnQgYXMgDQo+IGEg
Z3VpZGUgdG8gb3RoZXJzIG9uIGhvdyB0byBnZXQgc3RhcnRlZC4NCj4NCj4NCj4gTXkgbG9ncyBz
aG93IHRoZSBmb2xsb3dpbmcgZXJyb3Igd2hlbiBjYWxsaW5nIHRoZSBncmFudC9yZXZva2UgbWV0
aG9kIA0KPiBvbiB0aGUgc2VjdXJpdHkgc2VydmljZSB3aGVuIHRyeWluZyB0byBhZGQgdGhlICJp
bnZlbnRvcnkiIHJvbGUgdG8gYSANCj4gdXNlcjoNCj4NCj4gMjAxNy0xMS0xNiAxNjo0OToyNiw5
MTggW2h0dHAtbmlvLTgwODAtZXhlYy0xM10gREVCVUcgDQo+IGNvbS5qaXZlY2FzdC5zbWFydG9y
ZGVyLm1vZHVsZXMuYWN0aW9ucy5hZG1pbi5Vc2VyQWN0aW9uIC0gQWRkaW5nIG5ldyANCj4gcm9s
ZSB0byB1c2VyOiBpbnZlbnRvcnkNCj4NCj4gMjAxNy0xMS0xNiAxNjo0OToyNiw5MTggW2h0dHAt
bmlvLTgwODAtZXhlYy0xM10gREVCVUcgYXZhbG9uIC0gTG9jYXRlZCANCj4gdGhlIHNlcnZpY2Ug
J29yZy5hcGFjaGUuZnVsY3J1bS5zZWN1cml0eS5Sb2xlTWFuYWdlcicgaW4gdGhlIGxvY2FsIA0K
PiBjb250YWluZXINCj4gMjAxNy0xMS0xNiAxNjo0OToyNiw5MTggW2h0dHAtbmlvLTgwODAtZXhl
Yy0xM10gREVCVUcgDQo+IGF2YWxvbi5wZWVyTWFuYWdlciAtoCBnZXQgY2FjaGVkIA0KPiBQZWVy
SW5zdGFuY2UoKTpjb20uaml2ZWNhc3Quc21hcnRvcmRlci5vbS5UdXJiaW5lUm9sZVBlZXJJbXBs
QDcxODk3YTJiDQo+DQo+IDIwMTctMTEtMTYgMTY6NDk6MjYsOTE4IFtodHRwLW5pby04MDgwLWV4
ZWMtMTNdIERFQlVHIGF2YWxvbiAtIExvY2F0ZWQgDQo+IHRoZSBzZXJ2aWNlICdvcmcuYXBhY2hl
LmZ1bGNydW0uc2VjdXJpdHkuVXNlck1hbmFnZXInIGluIHRoZSBsb2NhbCANCj4gY29udGFpbmVy
DQo+IDIwMTctMTEtMTYgMTY6NDk6MjYsOTE4IFtodHRwLW5pby04MDgwLWV4ZWMtMTNdIERFQlVH
IA0KPiBhdmFsb24ucGVlck1hbmFnZXIgLaAgZ2V0IGNhY2hlZCANCj4gUGVlckluc3RhbmNlKCk6
Y29tLmppdmVjYXN0LnNtYXJ0b3JkZXIub20uVHVyYmluZVVzZXJQZWVySW1wbEA0NDhlNjYyNA0K
Pg0KPiAyMDE3LTExLTE2IDE2OjQ5OjI2LDkxOCBbaHR0cC1uaW8tODA4MC1leGVjLTEzXSBERUJV
RyBhdmFsb24gLSBMb2NhdGVkIA0KPiB0aGUgc2VydmljZSAnb3JnLmFwYWNoZS5mdWxjcnVtLnNl
Y3VyaXR5Lkdyb3VwTWFuYWdlcicgaW4gdGhlIGxvY2FsIA0KPiBjb250YWluZXINCj4gMjAxNy0x
MS0xNiAxNjo0OToyNiw5MTggW2h0dHAtbmlvLTgwODAtZXhlYy0xM10gREVCVUcgDQo+IGF2YWxv
bi5wZWVyTWFuYWdlciAtoCBnZXQgY2FjaGVkIA0KPiBQZWVySW5zdGFuY2UoKTpjb20uaml2ZWNh
c3Quc21hcnRvcmRlci5vbS5UdXJiaW5lR3JvdXBQZWVySW1wbEAxNTFkNDcwZA0KPg0KPiAyMDE3
LTExLTE2IDE2OjQ5OjI2LDkxOSBbaHR0cC1uaW8tODA4MC1leGVjLTEzXSBFUlJPUiANCj4gY29t
LmppdmVjYXN0LnNtYXJ0b3JkZXIubW9kdWxlcy5hY3Rpb25zLmFkbWluLlVzZXJBY3Rpb24gLSBF
cnJvciANCj4gc2V0dGluZyByb2xlczogamF2YS5sYW5nLkNsYXNzQ2FzdEV4Y2VwdGlvbjogDQo+
IGNvbS5qaXZlY2FzdC5zbWFydG9yZGVyLndyYXBwZXIuVHVyYmluZVVzZXJXcmFwcGVyIGNhbm5v
dCBiZSBjYXN0IHRvIA0KPiBvcmcuYXBhY2hlLmZ1bGNydW0uc2VjdXJpdHkudG9ycXVlLnNlY3Vy
aXR5LlRvcnF1ZUFic3RyYWN0U2VjdXJpdHlFbnRpdHkNCj4NCj4NCj4gSGVyZSBpcyB0aGUgcmVs
ZXZhbnQgY29kZSBpbiBteSBkb1JvbGVzKCkgbWV0aG9kIHRvIG1ha2UgdGhlIG5ldyANCj4gYXNz
aWdubWVudC4uLiBpdCBpcyBtb2RlbGVkIGFmdGVyIHRoZSBvbGQgZmx1eCBtZXRob2RzOg0KPg0K
PiBJIGhhdmUgdGhlIGZvbGxvd2luZyBpbXBvcnQ6DQo+DQo+IGltcG9ydCBvcmcuYXBhY2hlLnR1
cmJpbmUuc2VydmljZXMuc2VjdXJpdHkuU2VjdXJpdHlTZXJ2aWNlOw0KPg0KPiBhbmQgaW4gdGhl
IGJvZHkgb2YgdGhlIGNsYXNzLCBJIHVzZSB0aGUgaW5qZWN0aW9uIHRvIGdldCB0aGUgaW5zdGFu
Y2UgDQo+IG1hcHBlZA0KPg0KPiCgoKAgLyoqIEluamVjdGVkIHNlcnZpY2UgaW5zdGFuY2UgKi8N
Cj4goKCgIEBUdXJiaW5lU2VydmljZQ0KPiCgoKAgcHJpdmF0ZSBTZWN1cml0eVNlcnZpY2Ugc2Vj
dXJpdHk7DQo+DQo+IC4uLi4gdGhlbiBteSBhY3Rpb24gY2xhc3MgbWV0aG9kIGlzIGNhbGxlZCBk
b1JvbGVzKCkgd2hpY2ggZG9lcyB0aGUgDQo+IHJvbGUgYXNzaWdubWVudCBhbmQgZmFpbHMNCj4N
Cj4goKCgIC8qKg0KPiCgoKAgoCogVXBkYXRlIHRoZSByb2xlcyB0aGF0IGFyZSB0byBhc3NpZ25l
ZCB0byBhIHVzZXIgZm9yIGEgcHJvamVjdC4NCj4goKCgIKAqLw0KPiCgoKAgcHVibGljIHZvaWQg
ZG9Sb2xlcyhQaXBlbGluZURhdGEgcGlwZWxpbmVEYXRhLCBDb250ZXh0IGNvbnRleHQpIA0KPiB0
aHJvd3MgRXhjZXB0aW9uIHsNCj4NCj4goKCgIKCgoCB0cnkgew0KPg0KPiCgIKCgIKCgIKCgoCBS
dW5EYXRhIGRhdGEgPSBnZXRSdW5EYXRhKHBpcGVsaW5lRGF0YSk7DQo+DQo+IKCgoCCgoKAgoKCg
IC8vIEdldCB0aGUgVHVyYmluZSBBQ0wgaW1wbGVtZW50YXRpb24gZm9yIG91ciBjdXJyZW50IA0K
PiB1c2VyLCBvbmx5IGFkbWluIGNhbiB1cGRhdGUgdXNlciByb2xlcw0KPiCgoKAgoKCgIKCgoCBU
dXJiaW5lQWNjZXNzQ29udHJvbExpc3QgYWRtaW5BY2wgPSANCj4gZ2V0UnVuRGF0YShkYXRhKS5n
ZXRBQ0woKTsNCj4goKCgIKCgoCCgoKAgaWYgKGFkbWluQWNsLmhhc1JvbGUoImFkbWluaXN0cmF0
b3IiKSkgew0KPg0KPiCgoKAgoKCgIKCgoCCgoKAgLy8gVXNlcm5hbWUgb2YgdGhlIGFjY291bnQg
d2UgYXJlIHVwZGF0aW5nDQo+IKCgoCCgoKAgoKCgIKCgoCBTdHJpbmcgdXNlcm5hbWUgPSANCj4g
ZGF0YS5nZXRQYXJhbWV0ZXJzKCkuZ2V0U3RyaW5nKCJ1c2VybmFtZSIpOw0KPiCgoKAgoKCgIKCg
oCCgoKAgaWYgKHNlY3VyaXR5LmFjY291bnRFeGlzdHModXNlcm5hbWUpKSB7DQo+DQo+IKCgoCCg
oKAgoKCgIKCgoCCgoKAgLy8gVHJ5IHRvIGRvd25jYXN0IGZvciB0aGUgc2VjdXJpdHkgZ3JhbnQg
ZnVuY3Rpb24NCj4goKCgIKCgoCCgoKAgoKCgIKCgoCBvcmcuYXBhY2hlLnR1cmJpbmUub20uc2Vj
dXJpdHkuVXNlciB1c2VyID0gDQo+IChvcmcuYXBhY2hlLnR1cmJpbmUub20uc2VjdXJpdHkuVXNl
cikgc2VjdXJpdHkuZ2V0VXNlcih1c2VybmFtZSk7DQo+DQo+IKCgoCCgoKAgoKCgIKCgoCCgoKAg
Ly8gR2V0IHRoZSBUdXJiaW5lIEFDTCBpbXBsZW1lbnRhdGlvbg0KPiCgoKAgoKCgIKCgoCCgoKAg
oKCgIFR1cmJpbmVBY2Nlc3NDb250cm9sTGlzdCBhY2wgPSBzZWN1cml0eS5nZXRBQ0wodXNlcik7
DQo+DQo+IKCgoCCgoKAgoKCgIKCgoCCgoKAgLyoNCj4goKCgIKCgoCCgoKAgoKCgIKCgoCCgKiBH
cmFiIGFsbCB0aGUgR3JvdXBzIGFuZCBSb2xlcyBpbiB0aGUgc3lzdGVtLg0KPiCgoKAgoKCgIKCg
oCCgoKAgoKCgIKAqLw0KPiCgoKAgoKCgIKCgoCCgoKAgoKCgIEdyb3VwU2V0IGdyb3VwcyA9IHNl
Y3VyaXR5LmdldEFsbEdyb3VwcygpOw0KPiCgoKAgoKCgIKCgoCCgoKAgoKCgIFJvbGVTZXQgcm9s
ZXMgPSBzZWN1cml0eS5nZXRBbGxSb2xlcygpOw0KPg0KPiCgoKAgoKCgIKCgoCCgoKAgoKCgIGZv
ciAoR3JvdXAgZ3JvdXAgOiBncm91cHMpIHsNCj4goKCgIKCgoCCgoKAgoKCgIKCgoCCgoKAgU3Ry
aW5nIGdyb3VwTmFtZSA9IGdyb3VwLmdldE5hbWUoKTsNCj4goKCgIKCgoCCgoKAgoKCgIKCgoCCg
oKAgZm9yIChSb2xlIHJvbGUgOiByb2xlcykgew0KPiCgoKAgoKCgIKCgoCCgoKAgoKCgIKCgoCCg
oKAgU3RyaW5nIHJvbGVOYW1lID0gcm9sZS5nZXROYW1lKCk7DQo+DQo+IKCgoCCgoKAgoKCgIKCg
oCCgoKAgoKCgIKCgoCAvKg0KPiCgoKAgoKCgIKCgoCCgoKAgoKCgIKCgoCCgoKAgoCogSW4gdGhl
IFVzZXJSb2xlRm9ybS52bSB3ZSBtYWRlIGEgDQo+IGNoZWNrYm94IGZvciBldmVyeSBwb3NzaWJs
ZSBHcm91cC9Sb2xlDQo+IKCgoCCgoKAgoKCgIKCgoCCgoKAgoKCgIKCgoCCgKiBjb21iaW5hdGlv
biBzbyB3ZSB3aWxsIGNvbXBhcmUgZXZlcnkgDQo+IHBvc3NpYmxlIGNvbWJpbmF0aW9uIHdpdGgg
dGhlIHZhbHVlcw0KPiCgoKAgoKCgIKCgoCCgoKAgoKCgIKCgoCCgoKAgoCogdGhhdCB3ZXJlIGNo
ZWNrZWQgb2ZmIGluIHRoZSBmb3JtLiBJZiANCj4gd2UgaGF2ZSBhIG1hdGNoIHRoZW4gd2Ugd2ls
bCBncmFudCB0aGUNCj4goKCgIKCgoCCgoKAgoKCgIKCgoCCgoKAgoKCgIKAqIHVzZXIgdGhlIHJv
bGUgaW4gdGhlIGdyb3VwLg0KPiCgoKAgoKCgIKCgoCCgoKAgoKCgIKCgoCCgoKAgoCovDQo+IKCg
oCCgoKAgoKCgIKCgoCCgoKAgoKCgIKCgoCBTdHJpbmcgZ3JvdXBSb2xlID0gZ3JvdXBOYW1lICsg
cm9sZU5hbWU7DQo+IKCgoCCgoKAgoKCgIKCgoCCgoKAgoKCgIKCgoCBTdHJpbmcgZm9ybUdyb3Vw
Um9sZSA9IA0KPiBkYXRhLmdldFBhcmFtZXRlcnMoKS5nZXRTdHJpbmcoZ3JvdXBSb2xlKTsNCj4N
Cj4goKCgIKCgoCCgoKAgoKCgIKCgoCCgoKAgoKCgIGlmIChmb3JtR3JvdXBSb2xlICE9IG51bGwg
JiYgDQo+ICFhY2wuaGFzUm9sZShyb2xlLCBncm91cCkpIHsNCj4goKCgIKCgoCCgoKAgoKCgIKCg
oCCgoKAgoKCgIKCgoCAvLyBhZGQgdGhlIHJvbGUgZm9yIHRoaXMgdXNlcg0KPiCgoKAgoKCgIKCg
oCCgoKAgoKCgIKCgoCCgoKAgoKCgIGlmIChhY2wuaGFzUm9sZShyb2xlKSA9PSBmYWxzZSkgew0K
PiCgoKAgoKCgIKCgoCCgoKAgoKCgIKCgoCCgoKAgoKCgIKCgoCBsb2cuZGVidWcoIkFkZGluZyBu
ZXcgcm9sZSB0byANCj4gdXNlcjogIiArIHJvbGUuZ2V0TmFtZSgpKTsNCj4goKCgIKCgoCCgoKAg
oKCgIKCgoCCgoKAgoKCgIKCgoCCgoKAgc2VjdXJpdHkuZ3JhbnQodXNlciwgZ3JvdXAsIHJvbGUp
Ow0KPiCgoKAgoKCgIKCgoCCgoKAgoKCgIKCgoCCgoKAgoKCgIH0NCj4goKCgIKCgoCCgoKAgoKCg
IKCgoCCgoKAgoKCgIH0gZWxzZSBpZiAoZm9ybUdyb3VwUm9sZSA9PSBudWxsICYmIA0KPiBhY2wu
aGFzUm9sZShyb2xlLCBncm91cCkpIHsNCj4goKCgIKCgoCCgoKAgoKCgIKCgoCCgoKAgoKCgIKCg
oCAvLyByZXZva2UgdGhlIHJvbGUgZm9yIHRoaXMgdXNlcg0KPiCgoKAgoKCgIKCgoCCgoKAgoKCg
IKCgoCCgoKAgoKCgIGxvZy5kZWJ1ZygiUmV2b2tlIHJvbGU6ICIgKyANCj4gcm9sZS5nZXROYW1l
KCkpOw0KPiCgoKAgoKCgIKCgoCCgoKAgoKCgIKCgoCCgoKAgoKCgIHNlY3VyaXR5LnJldm9rZSh1
c2VyLCBncm91cCwgcm9sZSk7DQo+IKCgoCCgoKAgoKCgIKCgoCCgoKAgoKCgIKCgoCB9DQo+IKCg
oCCgoKAgoKCgIKCgoCCgoKAgoKCgIH0NCj4goKCgIKCgoCCgoKAgoKCgIKCgoCB9DQo+DQo+IKCg
oCCgoKAgoKCgIKCgoCB9IGVsc2Ugew0KPiCgoKAgoKCgIKCgoCCgoKAgoKCgIGxvZy5lcnJvcigi
VXNlciBkb2VzIG5vdCBleGlzdCEiKTsNCj4goKCgIKCgoCCgoKAgoKCgIH0NCj4goKCgIKCgoCCg
oKAgfSBlbHNlIHsNCj4goKCgIKCgoCCgoKAgoKCgIGRhdGEuc2V0TWVzc2FnZSgiWW91IGRvIG5v
dCBoYXZlIGFjY2VzcyB0byBwZXJmb3JtIA0KPiB0aGlzIGFjdGlvbi4iKTsNCj4goKCgIKCgoCCg
oKAgfQ0KPiCgoKAgoKCgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7DQo+IKCgoCCgoKAgoKCgIGxv
Zy5lcnJvcigiRXJyb3Igc2V0dGluZyByb2xlczogIiArIGUudG9TdHJpbmcoKSk7DQo+IKCgoCCg
oKAgfQ0KPg0KPiCgoKAgfQ0KPg0KPg0KDQotLSANCkplZmYgUGFpbnRlcg0KDQpDRU8gYW5kIEZv
dW5kZXIgb2YgSml2ZUNhc3QNClNvZnR3YXJlIGFuZCBhbmFseXRpY3MsIG1hZGUgdG9nZXRoZXIN
Cmh0dHA6Ly9qaXZlY2FzdC5jb20NCg0KMzAxIEZheWV0dGV2aWxsZSBTdC4gVW5pdCAyMzAxLCBS
YWxlaWdoLCBOQyAyNzYwMQ0KKDkxOSkgNTMzLTkwMjQNCg0KDQotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NClRvIHVu
c3Vic2NyaWJlLCBlLW1haWw6IHVzZXItdW5zdWJzY3JpYmVAdHVyYmluZS5hcGFjaGUub3JnDQpG
b3IgYWRkaXRpb25hbCBjb21tYW5kcywgZS1tYWlsOiB1c2VyLWhlbHBAdHVyYmluZS5hcGFjaGUu
b3JnDQoNCg==
DQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0NClRvIHVuc3Vic2NyaWJlLCBlLW1haWw6IHVzZXItdW5zdWJz
Y3JpYmVAdHVyYmluZS5hcGFjaGUub3JnDQpGb3IgYWRkaXRpb25hbCBjb21tYW5kcywgZS1t
YWlsOiB1c2VyLWhlbHBAdHVyYmluZS5hcGFjaGUub3JnDQoN