From Simon_Lessard at DMR.CA Sun Aug 16 04:45:03 2020 Content-Type: multipart/mixed; boundary="===============4685153334928765150==" MIME-Version: 1.0 From: Simon Lessard To: jsr-314-open-mirror at lists.jboss.org Subject: Re: [jsr-314-open] More spec issues Date: Tue, 31 Mar 2009 10:25:12 -0400 Message-ID: In-Reply-To: 18893.33682.295981.766984@sun.com --===============4685153334928765150== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Hi, = I'm working on MyFaces. Alright for the other comments. = = Regards, = ~ Simon = ________________________________ From: JSR 314 Open Mailing list on behalf of Ed Burns Sent: Fri 3/27/2009 9:55 PM To: JSR-314-OPEN(a)JCP.ORG Subject: Re: [jsr-314-open] More spec issues >>>>> On Fri, 27 Mar 2009 11:15:08 -0400, Simon Lessard said: SL> Hi all, SL> I have a couple more issues I found while implementing the latest SL> spec: Thanks. Can you share with the EG if you're doing a complete new Impl? This would be big news for me because AFAIK, Sun and Apache are the only ones doing new JSF2 impls. SL> * ViewHandler.FACELETS_VIEW_MAPPINGS_PARAM_NAME: The doc says that I'll let others chime in on that one. The behavior as specified seems useful to me. SL> * ViewHandler.getPageDeclarationLanguage(): JavaDoc gives two SL> default implementations, one invoking the factory from FactoryFinder SL> (useful) and the throws UnsupportedOperationException SL> one. Personally, I'd keep only the real method here as the SL> processing doesn't involve any private/non standard API; I see your point, but we did it this way to allow JSF 1.2 ViewHandlers to easily be detected, so we'll leave this the same as well. SL> * AjaxBehavior.getHints(): JavaDoc says it should return an emprt SL> Set (like ClientBehaviorBase), making the method declaration in SL> AjaxBehavior useless. However Mojarra returns a Set containing SL> SUBMITTING, so I assume the code is right and the JavaDoc wrong SL> here; Roger integrted this one. SL> * UIComponentBase.initialStateMarked(): This method is not defined SL> in the JavaDoc while the two others from PartialStateHolder are. I think this one's ok as is. SL> * ExternalContext.getRequestCookieMap(): Can the return value be SL> changed from Map to Map please? We can't do that because Cookie is declared in the Servlet spec, and Portlet people wouldn't be happy if we added that to our API. SL> * PageDeclarationLanguageFactory.getPageDeclarationLanguage(String SL> viewId): The JavaDoc says that ClassNotFoundException should be SL> thrown when no valid PLD can be found. However, SL> ClassNotFoundException is a checked exception and the method does SL> not that this exception in its throws clause. The doc should either SL> says to wrap it in a FacesException or add ClassNotFoundException to SL> the throws clause; I've removed the @throws ClassNotFoundException SL> * ExceptionHandler.handle(): The spec specifies that this method SL> should only throw a FacesException if an internal error occurs while SL> handling the exception. However, it also says to throw either SL> ServletException or PortletException depending on the environment SL> and those are checked exception not declared in the throws SL> clause. Mojarra wrap them in a FacesException, so the spec mighth SL> ave to be ajusted to reflect that. SL> That's all for now, SL> ~ Simon SL> ________________________________ SL> From: JSR 314 Open Mailing list on behalf of Ed Burns SL> Sent: Fri 3/27/2009 10:30 AM SL> To: JSR-314-OPEN(a)JCP.ORG SL> Subject: Rename: PDL->VDL SL> We have "View" everywhere else, so we should rename SL> PageDeclarationLanguage to ViewDeclarationLanguage. SL> I'm taking care of this now. SL> Ed SL> -- SL> | ed.burns(a)sun.com | office: 408 884 9519 OR x31640 SL> | homepage: | http://ridingthecrest.com/ SL> Rename: PDL->VDL SL> SL> SL> SL>

Hi all,

SL>

I have a couple more issues I found whil= e implementing the latest spec:

SL>
    SL>
  • ViewHandler.FACELETS_VIEW_MAPPINGS_PARA= M_NAME: The doc says that the implementation should also read original Face= lets' param for the purpose of defining mappings. I don't think that's a go= od idea. Facelets was not a standard up to that point and users shouldn't r= eally expect no migration effort at all. I know that enforcing that param w= ould allow xisting applications using facelet.jar to be deployed in 2.0 env= ironment, but to my kn=C3=B2wledge, no other spec read some non standard co= ntext params (I may be wrong though). If we do enforce the original paramet= ers, then we'll be stuck with it forever so at least let use only that one = and not define a new one;
  • SL>
  • ViewHandler.getPageDeclarationLanguage(= ): JavaDoc gives two default implementations, one invoking the factory from= FactoryFinder (useful) and the throws UnsupportedOperationException one. P= ersonally, I'd keep only the real method here as the processing doesn't inv= olve any private/non standard API;
  • SL>
  • AjaxBehavior.getHints(): JavaDoc says i= t should return an emprt Set (like ClientBehaviorBase), making the method d= eclaration in AjaxBehavior useless. However Mojarra returns a Set containin= g SUBMITTING, so I assume the code is right and the JavaDoc wrong here;
  • SL>
  • UIComponentBase.initialStateMarked(): T= his method is not defined in the JavaDoc while the two others from PartialS= tateHolder are.
  • SL>
  • ExternalContext.getRequestCookieMap(): = Can the return value be changed from Map<String,Object> to Map<Str= ing, Cookie> please?
  • SL>
  • PageDeclarationLanguageFactory.getPageD= eclarationLanguage(String viewId): The JavaDoc says that ClassNotFoundExcep= tion should be thrown when no valid PLD can be found. However, ClassNotFoun= dException is a checked exception and the method does not that this excepti= on in its throws clause. The doc should either says to wrap it in a FacesEx= ception or add ClassNotFoundException to the throws clause;
  • SL>
  • ExceptionHandler.handle(): The spec spe= cifies that this method should only throw a FacesException if an internal e= rror occurs while handling the exception. However, it also says to throw ei= ther ServletException or PortletException depending on the environment and = those are checked exception not declared in the throws clause. Mojarra wrap= them in a FacesException, so the spec mighth ave to be ajusted to reflect = that.
SL>

That's all for now,

SL>

 

SL>

~ Simon

SL>


SL>
SL>
SL>
SL>
From: JSR 314 Open M= ailing list on behalf of Ed Burns
Sent: Fri 3/27/2009 10:30 AMTo: JSR-314-OPEN(a)JCP.ORG
Subject: Rename: PDL->VDL

SL>
SL>

We have "View" everywhere else, so we should renamePageDeclarationLanguage to ViewDeclarationLanguage.

I'm taking car= e of this now.

Ed
--
| ed.burns(a)sun.com  | office: 408 = 884 9519 OR x31640
| homepage:       =   | http://ridingthecrest.com/<= /A>

-- | ed.burns(a)sun.com | office: 408 884 9519 OR x31640 | homepage: | http://ridingthecrest.com/ --===============4685153334928765150== Content-Type: text/html MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.html" PEhUTUwgZGlyPWx0cj48SEVBRD48VElUTEU+UmU6IE1vcmUgc3BlYyBpc3N1ZXM8L1RJVExFPgo8 TUVUQSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9 dW5pY29kZSI+CjxNRVRBIGNvbnRlbnQ9Ik1TSFRNTCA2LjAwLjYwMDAuMTY2NzQiIG5hbWU9R0VO RVJBVE9SPjwvSEVBRD4KPEJPRFk+CjxESVYgaWQ9aWRPV0FSZXBseVRleHQxNjQ1MSBkaXI9bHRy Pgo8RElWIGRpcj1sdHI+PEZPTlQgZmFjZT1BcmlhbCBjb2xvcj0jMDAwMDAwIHNpemU9Mj5IaSw8 L0ZPTlQ+PC9ESVY+CjxESVYgZGlyPWx0cj48Rk9OVCBmYWNlPUFyaWFsIHNpemU9Mj48L0ZPTlQ+ Jm5ic3A7PC9ESVY+CjxESVYgZGlyPWx0cj48Rk9OVCBmYWNlPUFyaWFsIHNpemU9Mj5JJ20gd29y a2luZyBvbiBNeUZhY2VzLiBBbHJpZ2h0IGZvciB0aGUgb3RoZXIgY29tbWVudHMuPC9GT05UPjwv RElWPgo8RElWIGRpcj1sdHI+PEZPTlQgZmFjZT1BcmlhbCBzaXplPTI+PC9GT05UPiZuYnNwOzwv RElWPgo8RElWIGRpcj1sdHI+PEZPTlQgZmFjZT1BcmlhbCBzaXplPTI+PC9GT05UPiZuYnNwOzwv RElWPgo8RElWIGRpcj1sdHI+PEZPTlQgZmFjZT1BcmlhbCBzaXplPTI+UmVnYXJkcyw8L0ZPTlQ+ PC9ESVY+CjxESVYgZGlyPWx0cj48Rk9OVCBmYWNlPUFyaWFsIHNpemU9Mj48L0ZPTlQ+Jm5ic3A7 PC9ESVY+CjxESVYgZGlyPWx0cj48Rk9OVCBmYWNlPUFyaWFsIHNpemU9Mj5+IFNpbW9uPC9GT05U PjwvRElWPgo8RElWIGRpcj1sdHI+PEZPTlQgZmFjZT0iQ291cmllciBOZXciPjwvRk9OVD4mbmJz cDs8L0RJVj48L0RJVj4KPERJViBkaXI9bHRyPjxCUj4KPEhSIHRhYkluZGV4PS0xPgo8Rk9OVCBm YWNlPVRhaG9tYSBzaXplPTI+PEI+RnJvbTo8L0I+IEpTUiAzMTQgT3BlbiBNYWlsaW5nIGxpc3Qg b24gYmVoYWxmIG9mIEVkIEJ1cm5zPEJSPjxCPlNlbnQ6PC9CPiBGcmkgMy8yNy8yMDA5IDk6NTUg UE08QlI+PEI+VG86PC9CPiBKU1ItMzE0LU9QRU5ASkNQLk9SRzxCUj48Qj5TdWJqZWN0OjwvQj4g UmU6IE1vcmUgc3BlYyBpc3N1ZXM8QlI+PC9GT05UPjxCUj48L0RJVj4KPERJVj4KPFA+PEZPTlQg c2l6ZT0yPiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7IE9uIEZyaSwgMjcgTWFyIDIwMDkgMTE6MTU6MDgg LTA0MDAsIFNpbW9uIExlc3NhcmQgJmx0O1NpbW9uX0xlc3NhcmRARE1SLkNBJmd0OyBzYWlkOjxC Uj48QlI+U0wmZ3Q7IEhpIGFsbCw8QlI+U0wmZ3Q7IEkgaGF2ZSBhIGNvdXBsZSBtb3JlIGlzc3Vl cyBJIGZvdW5kIHdoaWxlIGltcGxlbWVudGluZyB0aGUgbGF0ZXN0PEJSPlNMJmd0OyBzcGVjOjxC Uj48QlI+VGhhbmtzLiZuYnNwOyBDYW4geW91IHNoYXJlIHdpdGggdGhlIEVHIGlmIHlvdSdyZSBk b2luZyBhIGNvbXBsZXRlIG5ldyBJbXBsPzxCUj5UaGlzIHdvdWxkIGJlIGJpZyBuZXdzIGZvciBt ZSBiZWNhdXNlIEFGQUlLLCBTdW4gYW5kIEFwYWNoZSBhcmUgdGhlIG9ubHk8QlI+b25lcyBkb2lu ZyBuZXcgSlNGMiBpbXBscy48QlI+PEJSPlNMJmd0OyAqIFZpZXdIYW5kbGVyLkZBQ0VMRVRTX1ZJ RVdfTUFQUElOR1NfUEFSQU1fTkFNRTogVGhlIGRvYyBzYXlzIHRoYXQ8QlI+PEJSPkknbGwgbGV0 IG90aGVycyBjaGltZSBpbiBvbiB0aGF0IG9uZS4mbmJzcDsgVGhlIGJlaGF2aW9yIGFzIHNwZWNp ZmllZCBzZWVtczxCUj51c2VmdWwgdG8gbWUuPEJSPjxCUj5TTCZndDsgKiBWaWV3SGFuZGxlci5n ZXRQYWdlRGVjbGFyYXRpb25MYW5ndWFnZSgpOiBKYXZhRG9jIGdpdmVzIHR3bzxCUj5TTCZndDsg ZGVmYXVsdCBpbXBsZW1lbnRhdGlvbnMsIG9uZSBpbnZva2luZyB0aGUgZmFjdG9yeSBmcm9tIEZh Y3RvcnlGaW5kZXI8QlI+U0wmZ3Q7ICh1c2VmdWwpIGFuZCB0aGUgdGhyb3dzIFVuc3VwcG9ydGVk T3BlcmF0aW9uRXhjZXB0aW9uPEJSPlNMJmd0OyBvbmUuIFBlcnNvbmFsbHksIEknZCBrZWVwIG9u bHkgdGhlIHJlYWwgbWV0aG9kIGhlcmUgYXMgdGhlPEJSPlNMJmd0OyBwcm9jZXNzaW5nIGRvZXNu J3QgaW52b2x2ZSBhbnkgcHJpdmF0ZS9ub24gc3RhbmRhcmQgQVBJOzxCUj48QlI+SSBzZWUgeW91 ciBwb2ludCwgYnV0IHdlIGRpZCBpdCB0aGlzIHdheSB0byBhbGxvdyBKU0YgMS4yIFZpZXdIYW5k bGVyczxCUj50byBlYXNpbHkgYmUgZGV0ZWN0ZWQsIHNvIHdlJ2xsIGxlYXZlIHRoaXMgdGhlIHNh bWUgYXMgd2VsbC48QlI+PEJSPlNMJmd0OyAqIEFqYXhCZWhhdmlvci5nZXRIaW50cygpOiBKYXZh RG9jIHNheXMgaXQgc2hvdWxkIHJldHVybiBhbiBlbXBydDxCUj5TTCZndDsgU2V0IChsaWtlIENs aWVudEJlaGF2aW9yQmFzZSksIG1ha2luZyB0aGUgbWV0aG9kIGRlY2xhcmF0aW9uIGluPEJSPlNM Jmd0OyBBamF4QmVoYXZpb3IgdXNlbGVzcy4gSG93ZXZlciBNb2phcnJhIHJldHVybnMgYSBTZXQg Y29udGFpbmluZzxCUj5TTCZndDsgU1VCTUlUVElORywgc28gSSBhc3N1bWUgdGhlIGNvZGUgaXMg cmlnaHQgYW5kIHRoZSBKYXZhRG9jIHdyb25nPEJSPlNMJmd0OyBoZXJlOzxCUj48QlI+Um9nZXIg aW50ZWdydGVkIHRoaXMgb25lLjxCUj48QlI+U0wmZ3Q7ICogVUlDb21wb25lbnRCYXNlLmluaXRp YWxTdGF0ZU1hcmtlZCgpOiBUaGlzIG1ldGhvZCBpcyBub3QgZGVmaW5lZDxCUj5TTCZndDsgaW4g dGhlIEphdmFEb2Mgd2hpbGUgdGhlIHR3byBvdGhlcnMgZnJvbSBQYXJ0aWFsU3RhdGVIb2xkZXIg YXJlLjxCUj48QlI+SSB0aGluayB0aGlzIG9uZSdzIG9rIGFzIGlzLjxCUj48QlI+U0wmZ3Q7ICog RXh0ZXJuYWxDb250ZXh0LmdldFJlcXVlc3RDb29raWVNYXAoKTogQ2FuIHRoZSByZXR1cm4gdmFs dWUgYmU8QlI+U0wmZ3Q7IGNoYW5nZWQgZnJvbSBNYXAmbHQ7U3RyaW5nLE9iamVjdCZndDsgdG8g TWFwJmx0O1N0cmluZywgQ29va2llJmd0OyBwbGVhc2U/PEJSPjxCUj5XZSBjYW4ndCBkbyB0aGF0 IGJlY2F1c2UgQ29va2llIGlzIGRlY2xhcmVkIGluIHRoZSBTZXJ2bGV0IHNwZWMsIGFuZDxCUj5Q b3J0bGV0IHBlb3BsZSB3b3VsZG4ndCBiZSBoYXBweSBpZiB3ZSBhZGRlZCB0aGF0IHRvIG91ciBB UEkuPEJSPjxCUj5TTCZndDsgKiBQYWdlRGVjbGFyYXRpb25MYW5ndWFnZUZhY3RvcnkuZ2V0UGFn ZURlY2xhcmF0aW9uTGFuZ3VhZ2UoU3RyaW5nPEJSPlNMJmd0OyB2aWV3SWQpOiBUaGUgSmF2YURv YyBzYXlzIHRoYXQgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBzaG91bGQgYmU8QlI+U0wmZ3Q7IHRo cm93biB3aGVuIG5vIHZhbGlkIFBMRCBjYW4gYmUgZm91bmQuIEhvd2V2ZXIsPEJSPlNMJmd0OyBD bGFzc05vdEZvdW5kRXhjZXB0aW9uIGlzIGEgY2hlY2tlZCBleGNlcHRpb24gYW5kIHRoZSBtZXRo b2QgZG9lczxCUj5TTCZndDsgbm90IHRoYXQgdGhpcyBleGNlcHRpb24gaW4gaXRzIHRocm93cyBj bGF1c2UuIFRoZSBkb2Mgc2hvdWxkIGVpdGhlcjxCUj5TTCZndDsgc2F5cyB0byB3cmFwIGl0IGlu IGEgRmFjZXNFeGNlcHRpb24gb3IgYWRkIENsYXNzTm90Rm91bmRFeGNlcHRpb24gdG88QlI+U0wm Z3Q7IHRoZSB0aHJvd3MgY2xhdXNlOzxCUj48QlI+SSd2ZSByZW1vdmVkIHRoZSBAdGhyb3dzIENs YXNzTm90Rm91bmRFeGNlcHRpb248QlI+PEJSPlNMJmd0OyAqIEV4Y2VwdGlvbkhhbmRsZXIuaGFu ZGxlKCk6IFRoZSBzcGVjIHNwZWNpZmllcyB0aGF0IHRoaXMgbWV0aG9kPEJSPlNMJmd0OyBzaG91 bGQgb25seSB0aHJvdyBhIEZhY2VzRXhjZXB0aW9uIGlmIGFuIGludGVybmFsIGVycm9yIG9jY3Vy cyB3aGlsZTxCUj5TTCZndDsgaGFuZGxpbmcgdGhlIGV4Y2VwdGlvbi4gSG93ZXZlciwgaXQgYWxz byBzYXlzIHRvIHRocm93IGVpdGhlcjxCUj5TTCZndDsgU2VydmxldEV4Y2VwdGlvbiBvciBQb3J0 bGV0RXhjZXB0aW9uIGRlcGVuZGluZyBvbiB0aGUgZW52aXJvbm1lbnQ8QlI+U0wmZ3Q7IGFuZCB0 aG9zZSBhcmUgY2hlY2tlZCBleGNlcHRpb24gbm90IGRlY2xhcmVkIGluIHRoZSB0aHJvd3M8QlI+ U0wmZ3Q7IGNsYXVzZS4gTW9qYXJyYSB3cmFwIHRoZW0gaW4gYSBGYWNlc0V4Y2VwdGlvbiwgc28g dGhlIHNwZWMgbWlnaHRoPEJSPlNMJmd0OyBhdmUgdG8gYmUgYWp1c3RlZCB0byByZWZsZWN0IHRo YXQuPEJSPjxCUj5TTCZndDsgVGhhdCdzIGFsbCBmb3Igbm93LDxCUj48QlI+PEJSPjxCUj5TTCZn dDsgfiBTaW1vbjxCUj48QlI+PEJSPjxCUj48QlI+U0wmZ3Q7IF9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fPEJSPjxCUj5TTCZndDsgRnJvbTogSlNSIDMxNCBPcGVuIE1haWxpbmcgbGlz dCBvbiBiZWhhbGYgb2YgRWQgQnVybnM8QlI+U0wmZ3Q7IFNlbnQ6IEZyaSAzLzI3LzIwMDkgMTA6 MzAgQU08QlI+U0wmZ3Q7IFRvOiBKU1ItMzE0LU9QRU5ASkNQLk9SRzxCUj5TTCZndDsgU3ViamVj dDogUmVuYW1lOiBQREwtJmd0O1ZETDxCUj48QlI+PEJSPjxCUj5TTCZndDsgV2UgaGF2ZSAiVmll dyIgZXZlcnl3aGVyZSBlbHNlLCBzbyB3ZSBzaG91bGQgcmVuYW1lPEJSPlNMJmd0OyBQYWdlRGVj bGFyYXRpb25MYW5ndWFnZSB0byBWaWV3RGVjbGFyYXRpb25MYW5ndWFnZS48QlI+PEJSPlNMJmd0 OyBJJ20gdGFraW5nIGNhcmUgb2YgdGhpcyBub3cuPEJSPjxCUj5TTCZndDsgRWQ8QlI+U0wmZ3Q7 IC0tPEJSPlNMJmd0OyB8IGVkLmJ1cm5zQHN1bi5jb20mbmJzcDsgfCBvZmZpY2U6IDQwOCA4ODQg OTUxOSBPUiB4MzE2NDA8QlI+U0wmZ3Q7IHwgaG9tZXBhZ2U6Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHwgPEEgaHJlZj0iaHR0cDovL3JpZGluZ3RoZWNy ZXN0LmNvbS8iPmh0dHA6Ly9yaWRpbmd0aGVjcmVzdC5jb20vPC9BPjxCUj48QlI+PEJSPlNMJmd0 OyAmbHQ7SFRNTCBkaXI9bHRyJmd0OyZsdDtIRUFEJmd0OyZsdDtUSVRMRSZndDtSZW5hbWU6IFBE TC0mZ3Q7VkRMJmx0Oy9USVRMRSZndDs8QlI+U0wmZ3Q7ICZsdDtNRVRBIGh0dHAtZXF1aXY9Q29u dGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11bmljb2RlIiZndDs8QlI+U0wm Z3Q7ICZsdDtNRVRBIGNvbnRlbnQ9Ik1TSFRNTCA2LjAwLjYwMDAuMTY2NzQiIG5hbWU9R0VORVJB VE9SJmd0OyZsdDsvSEVBRCZndDs8QlI+U0wmZ3Q7ICZsdDtCT0RZJmd0OzxCUj5TTCZndDsgJmx0 O1AmZ3Q7Jmx0O0ZPTlQgZmFjZT1BcmlhbCBzaXplPTImZ3Q7SGkgYWxsLCZsdDsvRk9OVCZndDsm bHQ7L1AmZ3Q7PEJSPlNMJmd0OyAmbHQ7UCZndDsmbHQ7Rk9OVCBmYWNlPUFyaWFsIHNpemU9MiZn dDtJIGhhdmUgYSBjb3VwbGUgbW9yZSBpc3N1ZXMgSSBmb3VuZCB3aGlsZSBpbXBsZW1lbnRpbmcg dGhlIGxhdGVzdCBzcGVjOiZsdDsvRk9OVCZndDsmbHQ7L1AmZ3Q7PEJSPlNMJmd0OyAmbHQ7VUwm Z3Q7PEJSPlNMJmd0OyAmbHQ7TEkmZ3Q7Jmx0O0ZPTlQgZmFjZT1BcmlhbCBzaXplPTImZ3Q7Vmll d0hhbmRsZXIuRkFDRUxFVFNfVklFV19NQVBQSU5HU19QQVJBTV9OQU1FOiBUaGUgZG9jIHNheXMg dGhhdCB0aGUgaW1wbGVtZW50YXRpb24gc2hvdWxkIGFsc28gcmVhZCBvcmlnaW5hbCBGYWNlbGV0 cycgcGFyYW0gZm9yIHRoZSBwdXJwb3NlIG9mIGRlZmluaW5nIG1hcHBpbmdzLiBJIGRvbid0IHRo aW5rIHRoYXQncyBhIGdvb2QgaWRlYS4gRmFjZWxldHMgd2FzIG5vdCBhIHN0YW5kYXJkIHVwIHRv IHRoYXQgcG9pbnQgYW5kIHVzZXJzIHNob3VsZG4ndCByZWFsbHkgZXhwZWN0IG5vIG1pZ3JhdGlv biBlZmZvcnQgYXQgYWxsLiBJIGtub3cgdGhhdCBlbmZvcmNpbmcgdGhhdCBwYXJhbSB3b3VsZCBh bGxvdyB4aXN0aW5nIGFwcGxpY2F0aW9ucyB1c2luZyBmYWNlbGV0LmphciB0byBiZSBkZXBsb3ll ZCBpbiAyLjAgZW52aXJvbm1lbnQsIGJ1dCB0byBteSBrbvJ3bGVkZ2UsIG5vIG90aGVyIHNwZWMg cmVhZCBzb21lIG5vbiBzdGFuZGFyZCBjb250ZXh0IHBhcmFtcyAoSSBtYXkgYmUgd3JvbmcgdGhv dWdoKS4gSWYgd2UgZG8gZW5mb3JjZSB0aGUgb3JpZ2luYWwgcGFyYW1ldGVycywgdGhlbiB3ZSds bCBiZSBzdHVjayB3aXRoIGl0IGZvcmV2ZXIgc28gYXQgbGVhc3QgbGV0IHVzZSBvbmx5IHRoYXQg b25lIGFuZCBub3QgZGVmaW5lIGEgbmV3IG9uZTsmbHQ7L0ZPTlQmZ3Q7Jmx0Oy9MSSZndDs8QlI+ U0wmZ3Q7ICZsdDtMSSZndDsmbHQ7Rk9OVCBmYWNlPUFyaWFsIHNpemU9MiZndDtWaWV3SGFuZGxl ci5nZXRQYWdlRGVjbGFyYXRpb25MYW5ndWFnZSgpOiBKYXZhRG9jIGdpdmVzIHR3byBkZWZhdWx0 IGltcGxlbWVudGF0aW9ucywgb25lIGludm9raW5nIHRoZSBmYWN0b3J5IGZyb20gRmFjdG9yeUZp bmRlciAodXNlZnVsKSBhbmQgdGhlIHRocm93cyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlv biBvbmUuIFBlcnNvbmFsbHksIEknZCBrZWVwIG9ubHkgdGhlIHJlYWwgbWV0aG9kIGhlcmUgYXMg dGhlIHByb2Nlc3NpbmcgZG9lc24ndCBpbnZvbHZlIGFueSBwcml2YXRlL25vbiBzdGFuZGFyZCBB UEk7Jmx0Oy9GT05UJmd0OyZsdDsvTEkmZ3Q7PEJSPlNMJmd0OyAmbHQ7TEkmZ3Q7Jmx0O0ZPTlQg ZmFjZT1BcmlhbCBzaXplPTImZ3Q7QWpheEJlaGF2aW9yLmdldEhpbnRzKCk6IEphdmFEb2Mgc2F5 cyBpdCBzaG91bGQgcmV0dXJuIGFuIGVtcHJ0IFNldCAobGlrZSBDbGllbnRCZWhhdmlvckJhc2Up LCBtYWtpbmcgdGhlIG1ldGhvZCBkZWNsYXJhdGlvbiBpbiBBamF4QmVoYXZpb3IgdXNlbGVzcy4g SG93ZXZlciBNb2phcnJhIHJldHVybnMgYSBTZXQgY29udGFpbmluZyBTVUJNSVRUSU5HLCBzbyBJ IGFzc3VtZSB0aGUgY29kZSBpcyByaWdodCBhbmQgdGhlIEphdmFEb2Mgd3JvbmcgaGVyZTsmbHQ7 L0ZPTlQmZ3Q7Jmx0Oy9MSSZndDs8QlI+U0wmZ3Q7ICZsdDtMSSZndDsmbHQ7Rk9OVCBmYWNlPUFy aWFsIHNpemU9MiZndDtVSUNvbXBvbmVudEJhc2UuaW5pdGlhbFN0YXRlTWFya2VkKCk6IFRoaXMg bWV0aG9kIGlzIG5vdCBkZWZpbmVkIGluIHRoZSBKYXZhRG9jIHdoaWxlIHRoZSB0d28gb3RoZXJz IGZyb20gUGFydGlhbFN0YXRlSG9sZGVyIGFyZS4mbHQ7L0ZPTlQmZ3Q7Jmx0Oy9MSSZndDs8QlI+ U0wmZ3Q7ICZsdDtMSSZndDsmbHQ7Rk9OVCBmYWNlPUFyaWFsIHNpemU9MiZndDtFeHRlcm5hbENv bnRleHQuZ2V0UmVxdWVzdENvb2tpZU1hcCgpOiBDYW4gdGhlIHJldHVybiB2YWx1ZSBiZSBjaGFu Z2VkIGZyb20gTWFwJmFtcDtsdDtTdHJpbmcsT2JqZWN0JmFtcDtndDsgdG8gTWFwJmFtcDtsdDtT dHJpbmcsIENvb2tpZSZhbXA7Z3Q7IHBsZWFzZT8mbHQ7L0ZPTlQmZ3Q7Jmx0Oy9MSSZndDs8QlI+ U0wmZ3Q7ICZsdDtMSSZndDsmbHQ7Rk9OVCBmYWNlPUFyaWFsIHNpemU9MiZndDtQYWdlRGVjbGFy YXRpb25MYW5ndWFnZUZhY3RvcnkuZ2V0UGFnZURlY2xhcmF0aW9uTGFuZ3VhZ2UoU3RyaW5nIHZp ZXdJZCk6IFRoZSBKYXZhRG9jIHNheXMgdGhhdCBDbGFzc05vdEZvdW5kRXhjZXB0aW9uIHNob3Vs ZCBiZSB0aHJvd24gd2hlbiBubyB2YWxpZCBQTEQgY2FuIGJlIGZvdW5kLiBIb3dldmVyLCBDbGFz c05vdEZvdW5kRXhjZXB0aW9uIGlzIGEgY2hlY2tlZCBleGNlcHRpb24gYW5kIHRoZSBtZXRob2Qg ZG9lcyBub3QgdGhhdCB0aGlzIGV4Y2VwdGlvbiBpbiBpdHMgdGhyb3dzIGNsYXVzZS4gVGhlIGRv YyBzaG91bGQgZWl0aGVyIHNheXMgdG8gd3JhcCBpdCBpbiBhIEZhY2VzRXhjZXB0aW9uIG9yIGFk ZCBDbGFzc05vdEZvdW5kRXhjZXB0aW9uIHRvIHRoZSB0aHJvd3MgY2xhdXNlOyZsdDsvRk9OVCZn dDsmbHQ7L0xJJmd0OzxCUj5TTCZndDsgJmx0O0xJJmd0OyZsdDtGT05UIGZhY2U9QXJpYWwgc2l6 ZT0yJmd0O0V4Y2VwdGlvbkhhbmRsZXIuaGFuZGxlKCk6IFRoZSBzcGVjIHNwZWNpZmllcyB0aGF0 IHRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IHRocm93IGEgRmFjZXNFeGNlcHRpb24gaWYgYW4gaW50 ZXJuYWwgZXJyb3Igb2NjdXJzIHdoaWxlIGhhbmRsaW5nIHRoZSBleGNlcHRpb24uIEhvd2V2ZXIs IGl0IGFsc28gc2F5cyB0byB0aHJvdyBlaXRoZXIgU2VydmxldEV4Y2VwdGlvbiBvciBQb3J0bGV0 RXhjZXB0aW9uIGRlcGVuZGluZyBvbiB0aGUgZW52aXJvbm1lbnQgYW5kIHRob3NlIGFyZSBjaGVj a2VkIGV4Y2VwdGlvbiBub3QgZGVjbGFyZWQgaW4gdGhlIHRocm93cyBjbGF1c2UuIE1vamFycmEg d3JhcCB0aGVtIGluIGEgRmFjZXNFeGNlcHRpb24sIHNvIHRoZSBzcGVjIG1pZ2h0aCBhdmUgdG8g YmUgYWp1c3RlZCB0byByZWZsZWN0IHRoYXQuJmx0Oy9GT05UJmd0OyZsdDsvTEkmZ3Q7Jmx0Oy9V TCZndDs8QlI+U0wmZ3Q7ICZsdDtQJmd0OyZsdDtGT05UIGZhY2U9QXJpYWwgc2l6ZT0yJmd0O1Ro YXQncyBhbGwgZm9yIG5vdywmbHQ7L0ZPTlQmZ3Q7Jmx0Oy9QJmd0OzxCUj5TTCZndDsgJmx0O1Am Z3Q7Jmx0O0ZPTlQgZmFjZT1BcmlhbCBzaXplPTImZ3Q7Jmx0Oy9GT05UJmd0OyZhbXA7bmJzcDsm bHQ7L1AmZ3Q7PEJSPlNMJmd0OyAmbHQ7UCZndDsmbHQ7Rk9OVCBmYWNlPUFyaWFsIHNpemU9MiZn dDt+IFNpbW9uJmx0Oy9GT05UJmd0OyZsdDsvUCZndDs8QlI+U0wmZ3Q7ICZsdDtQJmd0OyZsdDtC UiZndDsmbHQ7L1AmZ3Q7PEJSPlNMJmd0OyAmbHQ7RElWIGRpcj1sdHImZ3Q7PEJSPlNMJmd0OyAm bHQ7SFIgdGFiSW5kZXg9LTEmZ3Q7PEJSPlNMJmd0OyAmbHQ7L0RJViZndDs8QlI+U0wmZ3Q7ICZs dDtESVYgZGlyPWx0ciZndDsmbHQ7Rk9OVCBmYWNlPVRhaG9tYSBzaXplPTImZ3Q7Jmx0O0ImZ3Q7 RnJvbTombHQ7L0ImZ3Q7IEpTUiAzMTQgT3BlbiBNYWlsaW5nIGxpc3Qgb24gYmVoYWxmIG9mIEVk IEJ1cm5zJmx0O0JSJmd0OyZsdDtCJmd0O1NlbnQ6Jmx0Oy9CJmd0OyBGcmkgMy8yNy8yMDA5IDEw OjMwIEFNJmx0O0JSJmd0OyZsdDtCJmd0O1RvOiZsdDsvQiZndDsgSlNSLTMxNC1PUEVOQEpDUC5P UkcmbHQ7QlImZ3Q7Jmx0O0ImZ3Q7U3ViamVjdDombHQ7L0ImZ3Q7IFJlbmFtZTogUERMLSZhbXA7 Z3Q7VkRMJmx0O0JSJmd0OyZsdDsvRk9OVCZndDsmbHQ7QlImZ3Q7Jmx0Oy9ESVYmZ3Q7PEJSPlNM Jmd0OyAmbHQ7RElWJmd0OzxCUj5TTCZndDsgJmx0O1AmZ3Q7Jmx0O0ZPTlQgc2l6ZT0yJmd0O1dl IGhhdmUgIlZpZXciIGV2ZXJ5d2hlcmUgZWxzZSwgc28gd2Ugc2hvdWxkIHJlbmFtZSZsdDtCUiZn dDtQYWdlRGVjbGFyYXRpb25MYW5ndWFnZSB0byBWaWV3RGVjbGFyYXRpb25MYW5ndWFnZS4mbHQ7 QlImZ3Q7Jmx0O0JSJmd0O0knbSB0YWtpbmcgY2FyZSBvZiB0aGlzIG5vdy4mbHQ7QlImZ3Q7Jmx0 O0JSJmd0O0VkJmx0O0JSJmd0Oy0tJmx0O0JSJmd0O3wgZWQuYnVybnNAc3VuLmNvbSZhbXA7bmJz cDsgfCBvZmZpY2U6IDQwOCA4ODQgOTUxOSBPUiB4MzE2NDAmbHQ7QlImZ3Q7fCBob21lcGFnZTom YW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJzcDsmYW1wO25ic3A7JmFtcDtuYnNwOyZhbXA7bmJz cDsmYW1wO25ic3A7JmFtcDtuYnNwOyB8ICZsdDtBIGhyZWY9IjxBIGhyZWY9Imh0dHA6Ly9yaWRp bmd0aGVjcmVzdC5jb20vIj5odHRwOi8vcmlkaW5ndGhlY3Jlc3QuY29tLzwvQT4iJmd0OzxBIGhy ZWY9Imh0dHA6Ly9yaWRpbmd0aGVjcmVzdC5jb20vIj5odHRwOi8vcmlkaW5ndGhlY3Jlc3QuY29t LzwvQT4mbHQ7L0EmZ3Q7Jmx0O0JSJmd0OyZsdDsvRk9OVCZndDsmbHQ7L1AmZ3Q7Jmx0Oy9ESVYm Z3Q7Jmx0Oy9CT0RZJmd0OyZsdDsvSFRNTCZndDs8QlI+PEJSPi0tPEJSPnwgZWQuYnVybnNAc3Vu LmNvbSZuYnNwOyB8IG9mZmljZTogNDA4IDg4NCA5NTE5IE9SIHgzMTY0MDxCUj58IGhvbWVwYWdl OiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyB8IDxBIGhy ZWY9Imh0dHA6Ly9yaWRpbmd0aGVjcmVzdC5jb20vIj5odHRwOi8vcmlkaW5ndGhlY3Jlc3QuY29t LzwvQT48QlI+PC9GT05UPjwvUD48L0RJVj48L0JPRFk+PC9IVE1MPg== --===============4685153334928765150==--