Thread: Re: [json-lib-user] Casting classes
Brought to you by:
aalmiray
From: Andres A. <aal...@ya...> - 2007-09-19 15:41:30
|
Hi Jerry,=0A=0ASince version 0.9 (I think) there is the option to specify a= set of=0Aexclusions that will let filter out some properties when using=0A= JSONObject.fromObject(), in your case=0A=0A=0A=0A/* available in json-lib 1= .x */=0A=0AJSON json =3D JSONSerializer.toJSON( bean, new String[]{ "nanos"= } );=0A=0AJSONSerializer jsonSerializer =3D new JSONSerializer();=0A=0Ajson= Serializer.setRootClass( Bean.class );=0A=0ABean bean =3D (Bean) jsonSerial= izer.toJava( json );=0A=0A=0A=0A/* the following is from 2.1-SNAPSHOT */=0A= =0AJsonConfig jsonConfig =3D new JsonConfig();=0A=0AjsonConfig.setExcludes(= new String[]{ "nanos"} );=0A=0AJSON json =3D JSONSerializer.toJSON( bean, = jsonConfig );=0A=0A...=0A=0AjsonConfig.setRootClass( Bean.class );=0A=0ABea= n bean =3D (Bean) JSONSerializer.toJava( json, jsonConfig );=0A =0A=0AIn 2.= 1-SNAPSHOT there is also the option to setup filters that will be=0Aenabled= when serializing to JSON and transforming back to Java=0A=0A=0A=0AI'm quit= e surprised that 'nanos' gave caused a problem because the code=0Ashould ch= eck if there is a PropertyDescriptor that matches the target=0Aclass and pr= operty, if so it will also check if it has a proper=0AwriteMethod. Which ve= rsion are you using?=0A=0A=0A=0ARegards,=0A=0AAndres =0A-------------------= ------------------------=0Ahttp://jroller.com/page/aalmiray=0Ahttp://www.li= nkedin.com/in/aalmiray=0A--=0AWhat goes up, must come down. Ask any system = administrator.=0AThere are 10 types of people in the world: Those who under= stand binary, and those who don't.=0ATo understand recursion, we must f= irst understand recursion.=0A=0A----- Mensaje original ----=0ADe: Gerardo B= lanco <Bla...@ld...>=0APara: jso...@li...= =0AEnviado: mi=E9rcoles, 19 de septiembre, 2007 10:30:45=0AAsunto: [json-li= b-user] Casting classes=0A=0A=0A=0A =0A=0A=0A=0AHi, =0A=0A=0A =0A=0A=0AI'm = doing the following:=0A=0A=0A =0A=0A=0A1) Run a Hibernate query to populate= a bean=0A=0A=0A2) using JSONObject.fromObject(bean)=0A=0A=0A3) using JSONO= bject.toBean()=0A=0A=0A =0A=0A=0AThe problem is that the bean contains a ja= va.util.Date. Hibernate casts that to a java.sql.Timestamp, which extends j= ava.util.Date, so Hibernate is complying with the contract.=0A=0A=0AWhen I = create my JSONObject, the method fromObject grabs everything the Timestamp = contains, including 'nanos' (for nanoseconds). That property belongs to Tim= estamp.=0A=0A=0A =0A=0A=0AWhen toBean is called, it doesn't know what to do= with 'nanos' because it is introspecting java.util.Date.=0A=0A=0A =0A=0A= =0AI know I can code around this issue by modifying my getters/setters, but= my questions is: =0A=0A=0Ashould this behaviour be caught (and provided fo= r) by JSON-lib somehow?=0A=0A=0A =0A=0A=0AWhat if we had JSONObject.fromObj= ect(bean, Bean.class)? That way JSONObject.fromObject would introspect the = class, and only include fields for the getters/setters for the actual class= , instead of extended classes that might be present.=0A=0A=0A =0A=0A=0AThan= ks.=0A=0A=0AJerry. =0A=0A=0A =0A=0A=0A-------------------------------------= ------------------=0AGerardo (Jerry) R. Blanco =0ASoftware Engineer=0ALDS P= latform Team=0A(801) 240-6978=0AB...@ld... =0A-----------------= --------------------------------------=0A"I am endeavoring, ma'am, to const= ruct a mnemonic memory circuit, using stone knives and bearskins." -- Spock= =0A=0ANOTICE: This email message is for the sole use of the intended recipi= ent(s) and may contain confidential and privileged information. Any unautho= rized review, use, disclosure or distribution is prohibited. If you are not= the intended recipient, please contact the sender by reply email and destr= oy all copies of the original message.=0A=0A=0A=0A=0A=0A=0A=0A _______= ___________________________________________________________________________= __=0A=A1S=E9 un mejor ambientalista!=0AEncuentra consejos para cuidar el lu= gar donde vivimos. =0Ahttp://mx.yahoo.com/promos/mejo= rambientalista.html |
From: Andres A. <aal...@ya...> - 2007-09-19 19:33:44
|
Hi Jerry,=0A=0AA quick test reveals that your problem is indeed a bug but h= as already=0Abeen fixed in the current development version, though an offic= ial release has not yet been made. The following code shows that when the '= nanos' property is being=0Aprocessed it will be skipped because the target = bean doesn't have a=0APropertyDescriptor for it.=0A=0A=0A=0A{"value":0,"dat= e":{"month":8,"day":3,"year":107,"nanos":0,"time":1190230433953,"seconds":5= 3,"timezoneOffset":300,"date":19,"hours":14,"minutes":33}}=0A=0A[07-09-19 1= 4:33:54] WARN [JSONObject:310] Property 'day' has no write method. SKIPPED= .=0A=0A[07-09-19 14:33:54] WARN [JSONObject:395] Tried to assign property = nanos:java.lang.Integer to bean of class java.util.Date=0A=0A[07-09-19 14:3= 3:54] WARN [JSONObject:310] Property 'timezoneOffset' has no write method.= SKIPPED.=0A=0A=0A=0AThere is no need to define exclusions or filters throu= gh JsonConfig (though you may do it to get rid of the warning).=0A=0AJson-l= ib 2.1-SNAPSHOT is available from http://json-lib.sourceforge.net/m2/repo/s= napshot/=0A=0AAn official release of 2.1 may take a little more time to all= ow for a couple of feature requests to be finished.=0A=0A=0A=0ACheers,=0A= =0AAndres =0A-------------------------------------------=0Ahttp://jroller.c= om/page/aalmiray=0Ahttp://www.linkedin.com/in/aalmiray=0A--=0AWhat goes up,= must come down. Ask any system administrator.=0AThere are 10 types of peop= le in the world: Those who understand binary, and those who don't.=0ATo= understand recursion, we must first understand recursion.=0A=0A----- Mensa= je original ----=0ADe: Gerardo Blanco <Bla...@ld...>=0APara: Andr= es Almiray <aal...@ya...>; jso...@li...=0AEnvi= ado: mi=E9rcoles, 19 de septiembre, 2007 11:36:42=0AAsunto: Re: [json-lib-u= ser] Casting classes=0A=0A=0A=0A =0A=0A=0A=0A=0A=0A=0A=0AI'm using version = 2. =0A=0A=0A =0A=0A=0AThe exception I got was =0A=0A=0A =0A=0A=0Anet.sf.jso= n.JSONException: Error while setting property=3Dnanos typeclass java.lang.I= ntegerHere's the code:JSONObject jsonObject =3D JSONObject.fromObject(myBea= n);System.out.println(myBean);MyBean b =3D (MyBean) JSONObject.toBean(jsonO= bject, MyBean.class);=0ASystem.out.println(b); Here's the bean def:import j= ava.util.Date;public class MyBean {...@Column(name=3D"PS_EFFECTIVE_DATE")= =0ADate psEffectiveDate;=0A...public Date getPsEffectiveDate() {=0A retur= n psEffectiveDate;=0A}=0A...public void setPsEffectiveDate(Date psEffective= Date) {=0A this.psEffectiveDate =3D psEffectiveDate;=0A }...}And this is t= he section of the JSON string that shows the object:,"psEffectiveDate":{"mo= nth":0,"day":1,"year":0,"nanos":0,"time":-2208963600000,"seconds":0,"timezo= neOffset":420,"date":1,"hours":0,"minutes":0},If I comment out the last two= lines in the code (where I create a new MyBean, etc), the whole process wo= rks fine. If I leave them, it fails when creating the bean b. Any comments?= -------------------------------------------------------=0AGerardo (Jerry) = R. Blanco =0ASoftware Engineer=0ALDS Platform Team=0A(801) 240-6978=0ABlanc= oG...@ld... =0A------------------------------------------------------= -=0A"I am endeavoring, ma'am, to construct a mnemonic memory circuit, using= stone knives and bearskins." -- Spock=0A>>> Andres Almiray <aalmiray@yahoo= .com> 9/19/2007 9:41 AM >>>=0A=0A=0A=0A=0A=0AHi Jerry,=0ASince version 0.9 = (I think) there is the option to specify a set of exclusions that will let = filter out some properties when using JSONObject.fromObject(), in your case= =0A=0A/* available in json-lib 1.x */=0AJSON json =3D JSONSerializer.toJSON= ( bean, new String[]{ "nanos"} );=0AJSONSerializer jsonSerializer =3D new J= SONSerializer();=0AjsonSerializer.setRootClass( Bean.class );=0ABean bean = =3D (Bean) jsonSerializer.toJava( json );=0A=0A/* the following is from 2.1= -SNAPSHOT */=0AJsonConfig jsonConfig =3D new JsonConfig();=0AjsonConfig.set= Excludes( new String[]{ "nanos"} );=0AJSON json =3D JSONSerializer.toJSON( = bean, jsonConfig );=0A...=0AjsonConfig.setRootClass( Bean.class );=0ABean b= ean =3D (Bean) JSONSerializer.toJava( json, jsonConfig );=0A =0AIn 2.1-SNAP= SHOT there is also the option to setup filters that will be enabled when se= rializing to JSON and transforming back to Java=0A=0AI'm quite surprised th= at 'nanos' gave caused a problem because the code should check if there is = a PropertyDescriptor that matches the target class and property, if so it w= ill also check if it has a proper writeMethod. Which version are you using?= =0A=0ARegards,=0AAndres=0A=0A =0A------------------------------------------= -=0Ahttp://jroller.com/page/aalmiray=0Ahttp://www.linkedin.com/in/aalmiray= =0A--=0AWhat goes up, must come down. Ask any system administrator.=0AThere= are 10 types of people in the world: Those who understand binary, and thos= e who don't.=0ATo understand recursion, we must first understand recurs= ion.=0A=0A=0A=0A=0A=0A----- Mensaje original ----=0ADe: Gerardo Blanco <Bla= nc...@ld...>=0APara: jso...@li...=0AEnviado:= mi=E9rcoles, 19 de septiembre, 2007 10:30:45=0AAsunto: [json-lib-user] Cas= ting classes=0A=0A=0A=0AHi, =0A=0A=0A =0A=0A=0AI'm doing the following:=0A= =0A=0A =0A=0A=0A1) Run a Hibernate query to populate a bean=0A=0A=0A2) usin= g JSONObject.fromObject(bean)=0A=0A=0A3) using JSONObject.toBean()=0A=0A=0A= =0A=0A=0AThe problem is that the bean contains a java.util.Date. Hibernate= casts that to a java.sql.Timestamp, which extends java.util.Date, so Hiber= nate is complying with the contract.=0A=0A=0AWhen I create my JSONObject, t= he method fromObject grabs everything the Timestamp contains, including 'na= nos' (for nanoseconds). That property belongs to Timestamp.=0A=0A=0A =0A=0A= =0AWhen toBean is called, it doesn't know what to do with 'nanos' because i= t is introspecting java.util.Date.=0A=0A=0A =0A=0A=0AI know I can code arou= nd this issue by modifying my getters/setters, but my questions is: =0A=0A= =0Ashould this behaviour be caught (and provided for) by JSON-lib somehow?= =0A=0A=0A =0A=0A=0AWhat if we had JSONObject.fromObject(bean, Bean.class)? = That way JSONObject.fromObject would introspect the class, and only include= fields for the getters/setters for the actual class, instead of extended c= lasses that might be present.=0A=0A=0A =0A=0A=0AThanks.=0A=0A=0AJerry. =0A= =0A=0A =0A=0A=0A-------------------------------------------------------=0AG= erardo (Jerry) R. Blanco =0ASoftware Engineer=0ALDS Platform Team=0A(801) 2= 40-6978=0AB...@ld... =0A---------------------------------------= ----------------=0A"I am endeavoring, ma'am, to construct a mnemonic memory= circuit, using stone knives and bearskins." -- Spock=0ANOTICE: This email = message is for the sole use of the intended recipient(s) and may contain co= nfidential and privileged information. Any unauthorized review, use, disclo= sure or distribution is prohibited. If you are not the intended recipient, = please contact the sender by reply email and destroy all copies of the orig= inal message.=0A=0A=0A=0A=0A=0A=0A=0A=0A=0A=0A=A1S=E9 un mejor fot=F3grafo!= =0APerfecciona tu t=E9cnica y encuentra las mejores fotos en:=0Ahttp://mx.y= ahoo.com/promos/mejorambientalista.html =0A=0ANOTICE: This email message is= for the sole use of the intended recipient(s) and may contain confidential= and privileged information. Any unauthorized review, use, disclosure or di= stribution is prohibited. If you are not the intended recipient, please con= tact the sender by reply email and destroy all copies of the original messa= ge.=0A=0A=0A=0A=0A=0A=0A=0A __________________________________________= __________________________________________=0A=A1S=E9 un mejor asador!=0AApr= ende todo sobre asados. =0Ahttp://mx.yahoo.com/promos/= mejorasador.html |
From: Gerardo B. <Bla...@ld...> - 2007-09-19 16:37:02
|
SSdtIHVzaW5nIHZlcnNpb24gMi4gDQoNClRoZSBleGNlcHRpb24gSSBnb3Qgd2FzIA0KDQpuZXQu c2YuanNvbi5KU09ORXhjZXB0aW9uOiBFcnJvciB3aGlsZSBzZXR0aW5nIHByb3BlcnR5PW5hbm9z IHR5cGVjbGFzcyBqYXZhLmxhbmcuSW50ZWdlcg0KSGVyZSdzIHRoZSBjb2RlOg0KSlNPTk9iamVj dCBqc29uT2JqZWN0ID0gSlNPTk9iamVjdC5mcm9tT2JqZWN0KG15QmVhbik7DQpTeXN0ZW0ub3V0 LnByaW50bG4obXlCZWFuKTsNCk15QmVhbiBiID0gKE15QmVhbikgSlNPTk9iamVjdC50b0JlYW4o anNvbk9iamVjdCwgTXlCZWFuLmNsYXNzKTtTeXN0ZW0ub3V0LnByaW50bG4oYik7DQoNCkhlcmUn cyB0aGUgYmVhbiBkZWY6DQppbXBvcnQgamF2YS51dGlsLkRhdGU7DQpwdWJsaWMgY2xhc3MgTXlC ZWFuIHsNCi4uLg0KQENvbHVtbihuYW1lPSJQU19FRkZFQ1RJVkVfREFURSIpRGF0ZSAgcHNFZmZl Y3RpdmVEYXRlOy4uLg0KcHVibGljIERhdGUgZ2V0UHNFZmZlY3RpdmVEYXRlKCkgeyAgcmV0dXJu IHBzRWZmZWN0aXZlRGF0ZTt9Li4uDQpwdWJsaWMgdm9pZCBzZXRQc0VmZmVjdGl2ZURhdGUoRGF0 ZSBwc0VmZmVjdGl2ZURhdGUpIHsgIHRoaXMucHNFZmZlY3RpdmVEYXRlID0gcHNFZmZlY3RpdmVE YXRlOyB9DQouLi4NCn0NCkFuZCB0aGlzIGlzIHRoZSBzZWN0aW9uIG9mIHRoZSBKU09OIHN0cmlu ZyB0aGF0IHNob3dzIHRoZSBvYmplY3Q6DQosInBzRWZmZWN0aXZlRGF0ZSI6eyJtb250aCI6MCwi ZGF5IjoxLCJ5ZWFyIjowLCJuYW5vcyI6MCwidGltZSI6LTIyMDg5NjM2MDAwMDAsInNlY29uZHMi OjAsInRpbWV6b25lT2Zmc2V0Ijo0MjAsImRhdGUiOjEsImhvdXJzIjowLCJtaW51dGVzIjowfSwN CklmIEkgY29tbWVudCBvdXQgdGhlIGxhc3QgdHdvIGxpbmVzIGluIHRoZSBjb2RlICh3aGVyZSBJ IGNyZWF0ZSBhIG5ldyBNeUJlYW4sIGV0YyksIHRoZSB3aG9sZSBwcm9jZXNzIHdvcmtzIGZpbmUu IElmIEkgbGVhdmUgdGhlbSwgaXQgZmFpbHMgd2hlbiBjcmVhdGluZyB0aGUgYmVhbiBiLiANCkFu eSBjb21tZW50cz8gDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tR2VyYXJkbyAoSmVycnkpIFIuIEJsYW5jbyBTb2Z0d2FyZSBFbmdpbmVlckxE UyBQbGF0Zm9ybSBUZWFtKDgwMSkgMjQwLTY5NzhCbGFuY29HUkBsZHNjaHVyY2gub3JnIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iSSBhbSBl bmRlYXZvcmluZywgbWEnYW0sIHRvIGNvbnN0cnVjdCBhIG1uZW1vbmljIG1lbW9yeSBjaXJjdWl0 LCB1c2luZyBzdG9uZSBrbml2ZXMgYW5kIGJlYXJza2lucy4iIC0tIFNwb2NrDQoNCj4+PiBBbmRy ZXMgQWxtaXJheSA8YWFsbWlyYXlAeWFob28uY29tPiA5LzE5LzIwMDcgOTo0MSBBTSA+Pj4NCg0K SGkgSmVycnksDQpTaW5jZSB2ZXJzaW9uIDAuOSAoSSB0aGluaykgdGhlcmUgaXMgdGhlIG9wdGlv biB0byBzcGVjaWZ5IGEgc2V0IG9mIGV4Y2x1c2lvbnMgdGhhdCB3aWxsIGxldCBmaWx0ZXIgb3V0 IHNvbWUgcHJvcGVydGllcyB3aGVuIHVzaW5nIEpTT05PYmplY3QuZnJvbU9iamVjdCgpLCBpbiB5 b3VyIGNhc2UNCg0KLyogYXZhaWxhYmxlIGluIGpzb24tbGliIDEueCAqLw0KSlNPTiBqc29uID0g SlNPTlNlcmlhbGl6ZXIudG9KU09OKCBiZWFuLCBuZXcgU3RyaW5nW117ICJuYW5vcyJ9ICk7DQpK U09OU2VyaWFsaXplciBqc29uU2VyaWFsaXplciA9IG5ldyBKU09OU2VyaWFsaXplcigpOw0KanNv blNlcmlhbGl6ZXIuc2V0Um9vdENsYXNzKCBCZWFuLmNsYXNzICk7DQpCZWFuIGJlYW4gPSAoQmVh bikganNvblNlcmlhbGl6ZXIudG9KYXZhKCBqc29uICk7DQoNCi8qIHRoZSBmb2xsb3dpbmcgaXMg ZnJvbSAyLjEtU05BUFNIT1QgKi8NCkpzb25Db25maWcganNvbkNvbmZpZyA9IG5ldyBKc29uQ29u ZmlnKCk7DQpqc29uQ29uZmlnLnNldEV4Y2x1ZGVzKCBuZXcgU3RyaW5nW117ICJuYW5vcyJ9ICk7 DQpKU09OIGpzb24gPSBKU09OU2VyaWFsaXplci50b0pTT04oIGJlYW4sIGpzb25Db25maWcgKTsN Ci4uLg0KanNvbkNvbmZpZy5zZXRSb290Q2xhc3MoIEJlYW4uY2xhc3MgKTsNCkJlYW4gYmVhbiA9 IChCZWFuKSBKU09OU2VyaWFsaXplci50b0phdmEoIGpzb24sIGpzb25Db25maWcgKTsNCiANCklu IDIuMS1TTkFQU0hPVCB0aGVyZSBpcyBhbHNvIHRoZSBvcHRpb24gdG8gc2V0dXAgZmlsdGVycyB0 aGF0IHdpbGwgYmUgZW5hYmxlZCB3aGVuIHNlcmlhbGl6aW5nIHRvIEpTT04gYW5kIHRyYW5zZm9y bWluZyBiYWNrIHRvIEphdmENCg0KSSdtIHF1aXRlIHN1cnByaXNlZCB0aGF0ICduYW5vcycgZ2F2 ZSBjYXVzZWQgYSBwcm9ibGVtIGJlY2F1c2UgdGhlIGNvZGUgc2hvdWxkIGNoZWNrIGlmIHRoZXJl IGlzIGEgUHJvcGVydHlEZXNjcmlwdG9yIHRoYXQgbWF0Y2hlcyB0aGUgdGFyZ2V0IGNsYXNzIGFu ZCBwcm9wZXJ0eSwgaWYgc28gaXQgd2lsbCBhbHNvIGNoZWNrIGlmIGl0IGhhcyBhIHByb3BlciB3 cml0ZU1ldGhvZC4gV2hpY2ggdmVyc2lvbiBhcmUgeW91IHVzaW5nPw0KDQpSZWdhcmRzLA0KQW5k cmVzDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmh0dHA6 Ly9qcm9sbGVyLmNvbS9wYWdlL2FhbG1pcmF5DQpodHRwOi8vd3d3LmxpbmtlZGluLmNvbS9pbi9h YWxtaXJheQ0KLS0NCldoYXQgZ29lcyB1cCwgbXVzdCBjb21lIGRvd24uIEFzayBhbnkgc3lzdGVt IGFkbWluaXN0cmF0b3IuDQpUaGVyZSBhcmUgMTAgdHlwZXMgb2YgcGVvcGxlIGluIHRoZSB3b3Js ZDogVGhvc2Ugd2hvIHVuZGVyc3RhbmQgYmluYXJ5LCBhbmQgdGhvc2Ugd2hvIGRvbiYjMzk7dC4N ClRvIHVuZGVyc3RhbmQgcmVjdXJzaW9uLCB3ZSBtdXN0IGZpcnN0IHVuZGVyc3RhbmQgcmVjdXJz aW9uLg0KDQoNCg0KLS0tLS0gTWVuc2FqZSBvcmlnaW5hbCAtLS0tDQpEZTogR2VyYXJkbyBCbGFu Y28gPEJsYW5jb0dSQGxkc2NodXJjaC5vcmc+DQpQYXJhOiBqc29uLWxpYi11c2VyQGxpc3RzLnNv dXJjZWZvcmdlLm5ldA0KRW52aWFkbzogbWnDqXJjb2xlcywgMTkgZGUgc2VwdGllbWJyZSwgMjAw NyAxMDozMDo0NQ0KQXN1bnRvOiBbanNvbi1saWItdXNlcl0gQ2FzdGluZyBjbGFzc2VzDQoNCg0K SGksIA0KDQpJJ20gZG9pbmcgdGhlIGZvbGxvd2luZzoNCg0KMSkgUnVuIGEgSGliZXJuYXRlIHF1 ZXJ5IHRvIHBvcHVsYXRlIGEgYmVhbg0KMikgdXNpbmcgSlNPTk9iamVjdC5mcm9tT2JqZWN0KGJl YW4pDQozKSB1c2luZyBKU09OT2JqZWN0LnRvQmVhbigpDQoNClRoZSBwcm9ibGVtIGlzIHRoYXQg dGhlIGJlYW4gY29udGFpbnMgYSBqYXZhLnV0aWwuRGF0ZS4gSGliZXJuYXRlIGNhc3RzIHRoYXQg dG8gYSBqYXZhLnNxbC5UaW1lc3RhbXAsIHdoaWNoIGV4dGVuZHMgamF2YS51dGlsLkRhdGUsIHNv IEhpYmVybmF0ZSBpcyBjb21wbHlpbmcgd2l0aCB0aGUgY29udHJhY3QuDQpXaGVuIEkgY3JlYXRl IG15IEpTT05PYmplY3QsIHRoZSBtZXRob2QgZnJvbU9iamVjdCBncmFicyBldmVyeXRoaW5nIHRo ZSBUaW1lc3RhbXAgY29udGFpbnMsIGluY2x1ZGluZyAnbmFub3MnIChmb3IgbmFub3NlY29uZHMp LiBUaGF0IHByb3BlcnR5IGJlbG9uZ3MgdG8gVGltZXN0YW1wLg0KDQpXaGVuIHRvQmVhbiBpcyBj YWxsZWQsIGl0IGRvZXNuJ3Qga25vdyB3aGF0IHRvIGRvIHdpdGggJ25hbm9zJyBiZWNhdXNlIGl0 IGlzIGludHJvc3BlY3RpbmcgamF2YS51dGlsLkRhdGUuDQoNCkkga25vdyBJIGNhbiBjb2RlIGFy b3VuZCB0aGlzIGlzc3VlIGJ5IG1vZGlmeWluZyBteSBnZXR0ZXJzL3NldHRlcnMsIGJ1dCBteSBx dWVzdGlvbnMgaXM6IA0Kc2hvdWxkIHRoaXMgYmVoYXZpb3VyIGJlIGNhdWdodCAoYW5kIHByb3Zp ZGVkIGZvcikgYnkgSlNPTi1saWIgc29tZWhvdz8NCg0KV2hhdCBpZiB3ZSBoYWQgSlNPTk9iamVj dC5mcm9tT2JqZWN0KGJlYW4sIEJlYW4uY2xhc3MpPyBUaGF0IHdheSBKU09OT2JqZWN0LmZyb21P YmplY3Qgd291bGQgaW50cm9zcGVjdCB0aGUgY2xhc3MsIGFuZCBvbmx5IGluY2x1ZGUgZmllbGRz IGZvciB0aGUgZ2V0dGVycy9zZXR0ZXJzIGZvciB0aGUgYWN0dWFsIGNsYXNzLCBpbnN0ZWFkIG9m IGV4dGVuZGVkIGNsYXNzZXMgdGhhdCBtaWdodCBiZSBwcmVzZW50Lg0KDQpUaGFua3MuDQpKZXJy eS4gDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCkdlcmFyZG8gKEplcnJ5KSBSLiBCbGFuY28gDQpTb2Z0d2FyZSBFbmdpbmVlcg0KTERT IFBsYXRmb3JtIFRlYW0NCig4MDEpIDI0MC02OTc4DQpCbGFuY29HUkBsZHNjaHVyY2gub3JnIA0K LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K IkkgYW0gZW5kZWF2b3JpbmcsIG1hJ2FtLCB0byBjb25zdHJ1Y3QgYSBtbmVtb25pYyBtZW1vcnkg Y2lyY3VpdCwgdXNpbmcgc3RvbmUga25pdmVzIGFuZCBiZWFyc2tpbnMuIiAtLSBTcG9jaw0KTk9U SUNFOiBUaGlzIGVtYWlsIG1lc3NhZ2UgaXMgZm9yIHRoZSBzb2xlIHVzZSBvZiB0aGUgaW50ZW5k ZWQgcmVjaXBpZW50KHMpIGFuZCBtYXkgY29udGFpbiBjb25maWRlbnRpYWwgYW5kIHByaXZpbGVn ZWQgaW5mb3JtYXRpb24uIEFueSB1bmF1dGhvcml6ZWQgcmV2aWV3LCB1c2UsIGRpc2Nsb3N1cmUg b3IgZGlzdHJpYnV0aW9uIGlzIHByb2hpYml0ZWQuIElmIHlvdSBhcmUgbm90IHRoZSBpbnRlbmRl ZCByZWNpcGllbnQsIHBsZWFzZSBjb250YWN0IHRoZSBzZW5kZXIgYnkgcmVwbHkgZW1haWwgYW5k IGRlc3Ryb3kgYWxsIGNvcGllcyBvZiB0aGUgb3JpZ2luYWwgbWVzc2FnZS4NCg0KDQoNCg0KDQoN Cg0KwqFTw6kgdW4gbWVqb3IgZm90w7NncmFmbyENClBlcmZlY2Npb25hIHR1IHTDqWNuaWNhIHkg ZW5jdWVudHJhIGxhcyBtZWpvcmVzIGZvdG9zIGVuOg0KaHR0cDovL214LnlhaG9vLmNvbS9wcm9t b3MvbWVqb3JhbWJpZW50YWxpc3RhLmh0bWwgCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk5PVElDRTogVGhpcyBl bWFpbCBtZXNzYWdlIGlzIGZvciB0aGUgc29sZSB1c2Ugb2YgdGhlIGludGVuZGVkIHJlY2lwaWVu dChzKSBhbmQgbWF5IGNvbnRhaW4gY29uZmlkZW50aWFsIGFuZCBwcml2aWxlZ2VkIGluZm9ybWF0 aW9uLiBBbnkgdW5hdXRob3JpemVkIHJldmlldywgdXNlLCBkaXNjbG9zdXJlIG9yIGRpc3RyaWJ1 dGlvbiBpcyBwcm9oaWJpdGVkLiBJZiB5b3UgYXJlIG5vdCB0aGUgaW50ZW5kZWQgcmVjaXBpZW50 LCBwbGVhc2UgY29udGFjdCB0aGUgc2VuZGVyIGJ5IHJlcGx5IGVtYWlsIGFuZCBkZXN0cm95IGFs bCBjb3BpZXMgb2YgdGhlIG9yaWdpbmFsIG1lc3NhZ2UuCg== |