It’s looking ok to me. Piotr, do you still see issues? ________________________________ From: Piotr Zarzycki <piotrzarzyck...@gmail.com> Sent: Tuesday, December 24, 2019 2:10:13 PM To: dev@royale.apache.org <dev@royale.apache.org> Subject: Re: Issue with ElementWrapper and HTMLElementWrapper
Hi Guys, I have just used all changes which has been pushed and build our app using Maven. It's breaking up completely. I'm getting now Null Pointer exceptions for components has been created, it's children doesn't exists even if I check after onInitComplete. - It's weird behavior and hard to explain for me. Something in general is really bad. I hope to tell you more in upcoming days if I will be able to. Thanks, Piotr wt., 24 gru 2019 o 11:38 Harbs <harbs.li...@gmail.com> napisał(a): > Never mind. I see the problem. > > > On Dec 24, 2019, at 12:16 PM, Harbs <harbs.li...@gmail.com> wrote: > > > > Please try with my latest changes. > > > > I think I fixed it. > > > > > >> On Dec 24, 2019, at 12:03 PM, Carlos Rovira <carlosrov...@apache.org> > wrote: > >> > >> Hi Harbs, > >> > >> the problem seems to affect the Basic DataGrid if you check > DataGridExample > >> you can see the error too. > >> > >> In CruxGitHubCommitLogViewer the problem is: > >> > >> Activating JSStageEvents > >> [WARNING] getStaticConstantsByConvention :: the reflection target > >> mx.rpc.http.mxml.HTTPService was not Compiled with default initializers > >> enabled > >> InjectProcessor set up [Inject( "configuratorService" )] on Bean{ > source: > >> [object Object], name: configurationDelegate } > >> InjectProcessor set up [Inject] on Bean{ source: [object Object], name: > >> configurationController } > >> getProject executing in ConfigurationController via PostConstruct > processing > >> InjectProcessor set up [Inject( "commitsService" )] on Bean{ source: > >> [object Object], name: commitsDelegate } > >> InjectProcessor set up [Inject] on Bean{ source: [object Object], name: > >> commitsController } > >> InjectProcessor set up [Inject] on Bean{ source: [object Object], name: > >> commitsController } > >> RangeError: Maximum call stack size exceeded > >> at Array.concat (<anonymous>) > >> at crux.view.MainContent.goog.events.EventTarget.fireListeners > >> > (/Users/carlosrovira/Dev/Royale/Source/royale-asjs/examples/crux/CruxGitHubCommitLogViewer/target/javascript/bin/js-debug/library/closure/goog/events/eventtarget.js:271:34) > >> at Function.goog.events.EventTarget.dispatchEventInternal_ > >> > (/Users/carlosrovira/Dev/Royale/Source/royale-asjs/examples/crux/CruxGitHubCommitLogViewer/target/javascript/bin/js-debug/library/closure/goog/events/eventtarget.js:372:27) > >> at > >> > org.apache.royale.html.DataGridButtonBar.goog.events.EventTarget.dispatchEvent > >> > (/Users/carlosrovira/Dev/Royale/Source/royale-asjs/examples/crux/CruxGitHubCommitLogViewer/target/javascript/bin/js-debug/library/closure/goog/events/eventtarget.js:196:35) > >> at > >> > org.apache.royale.html.DataGridButtonBar.org.apache.royale.events.EventDispatcher.dispatchEvent > >> > (/Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/projects/Core/src/main/royale/org/apache/royale/events/EventDispatcher.as:94:32) > >> at > >> > org.apache.royale.html.DataGridButtonBar.org.apache.royale.core.ElementWrapper.dispatchEvent > >> > (/Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/projects/Core/src/main/royale/org/apache/royale/core/ElementWrapper.as:370:44) > >> at org.apache.royale.express.beads.layouts.DataGridLayout.layout > >> > (/Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/projects/Express/src/main/royale/org/apache/royale/express/beads/layouts/DataGridLayout.as:225:11) > >> at > >> > org.apache.royale.express.beads.layouts.DataGridLayout.org_apache_royale_express_beads_layouts_DataGridLayout_handleLayoutNeeded > >> > (/Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/projects/Express/src/main/royale/org/apache/royale/express/beads/layouts/DataGridLayout.as:105:4) > >> at > >> org.apache.royale.express.DataGrid.goog.events.EventTarget.fireListeners > >> > (/Users/carlosrovira/Dev/Royale/Source/royale-asjs/examples/crux/CruxGitHubCommitLogViewer/target/javascript/bin/js-debug/library/closure/goog/events/eventtarget.js:284:24) > >> at Function.goog.events.EventTarget.dispatchEventInternal_ > >> > (/Users/carlosrovira/Dev/Royale/Source/royale-asjs/examples/crux/CruxGitHubCommitLogViewer/target/javascript/bin/js-debug/library/closure/goog/events/eventtarget.js:389:27) > >> InjectProcessor set up [Inject( > source="commitsController.commits.commits", > >> bind="true" )] on Bean{ source: [object Object], name: null } > >> InjectProcessor set up [Inject( > source="configurationController.project", > >> bind="true" )] on Bean{ source: [object Object], name: null } > >> > >> > >> El mar., 24 dic. 2019 a las 10:33, Carlos Rovira (< > carlosrov...@apache.org>) > >> escribió: > >> > >>> Hi Harbs, > >>> > >>> thanks for taking the time to look into this and sorry for my delay in > >>> response, as Piotr exposed I'm as well on Christmas time here in > Spain, so > >>> with few time, although hope to be around here from in some slices of > time. > >>> > >>> About the problem, I built all and check all Crux examples: > >>> > >>> > >>> - examples/crux/CruxQuickStart -> This is now working ok > >>> - examples/crux/CruxQuickStartBasic -> This is now working ok > >>> - examples/crux/CruxGitHubCommitLogViewer -> This is not working, not > >>> retrieve the GitHub data and even the DataGrid seems to be not laying > the > >>> header right. Can you take a look at this one, maybe something was > missing > >>> for make this working again. > >>> > >>> > >>> I saw 2 test failing, but just see you fixed right now so I'll try to > >>> rebuild again to check that part. > >>> > >>> Anyway good work! :) > >>> > >>> Carlos > >>> > >>> > >>> > >>> El mar., 24 dic. 2019 a las 9:10, Harbs (<harbs.li...@gmail.com>) > >>> escribió: > >>> > >>>> I realized that the reason bubbling is not working is because > >>>> EventTarget.getParentEventTarget() is relying on parentEventTarget_ > which > >>>> is generally not set in Royale. > >>>> > >>>> Royale already has a parent getter for objects which have hierarchy. I > >>>> changed the method to simply return the parent instead of > >>>> parentEventTarget_ which will be null if there is no parent or its > not an > >>>> IChild. > >>>> > >>>> Ideally, the change should be in the EventTarget code, but I’m not > trying > >>>> to touch that. I overrode the the method in EventDispatcher. If the > event > >>>> does not have bubbling set to true, none of this should effect > anything. If > >>>> there are any apps which have bubbling events and are relying on > Royale > >>>> bubbling to be broken, they might break with this change… ;-) > >>>> > >>>> Royale should now support event bubbling out of the box. :-) > >>>> > >>>> Harbs > >>>> > >>>>> On Dec 24, 2019, at 9:01 AM, Alex Harui <aha...@adobe.com.INVALID> > >>>> wrote: > >>>>> > >>>>> I took a peek at the commit and made some comments on the commit > thread > >>>> that may help. > >>>>> > >>>>> HTH, > >>>>> -Alex > >>>>> > >>>>> On 12/23/19, 2:24 PM, "Harbs" <harbs.li...@gmail.com <mailto: > >>>> harbs.li...@gmail.com>> wrote: > >>>>> > >>>>> I read through what you did in JSStageEvents. That’s really quite > >>>> ingenious. Well done! :-) > >>>>> > >>>>> I think we could use a similar approach for an application bead to > >>>> support full event bubbling without modifying ElementWrapper and > >>>> HTMLElementWrapper. > >>>>> > >>>>> I still have no idea what broke though. > >>>>> > >>>>> Let me know if I should revert the changes until someone has the > >>>> time to look at this. > >>>>> > >>>>> Thanks, > >>>>> Harbs > >>>>>> On Dec 23, 2019, at 10:59 PM, Greg Dove <greg.d...@gmail.com> > wrote: > >>>>>> > >>>>>> Iirc it was dispatching capture phase events that was 'difficult'. I > >>>> think > >>>>>> I had to override something and undo something in Royale that was > >>>> switching > >>>>>> off goog support for that. It was only needed in the JSStageEvents > >>>>>> emulation stuff iirc. I have no idea what the issue is, but that is > >>>>>> probably what I would look at first. Have to go now... I can look at > >>>> this > >>>>>> if needed but not for a few days. > >>>>>> > >>>>>> On Tue, 24 Dec 2019, 09:38 Harbs, <harbs.li...@gmail.com> wrote: > >>>>>> > >>>>>>> AIUI, for bubbling to work automatically, setParentEventTarget > needs > >>>> to be > >>>>>>> called to construct the hierarchy. > >>>>>>> > >>>>>>> Maybe we should have a bead that takes care of this (on > addedToParent > >>>> or > >>>>>>> something) for applications which rely on bubbling for > >>>> non-browser-native > >>>>>>> events. > >>>>>>> > >>>>>>> There is a dispatchBubblingEvent in HTMLElementWrapper which forces > >>>> the > >>>>>>> event to bubble up for all events, but it’s JS only. We could add a > >>>> method > >>>>>>> for SWF for compatibility. > >>>>>>> > >>>>>>> I just tested dispatchBubblingEvent and that makes the alert > appear. > >>>>>>> > >>>>>>> None of this explains why it worked before my change, though... > >>>>>>> > >>>>>>>> On Dec 23, 2019, at 10:17 PM, Greg Dove <greg.d...@gmail.com> > wrote: > >>>>>>>> > >>>>>>>> Harbs, I can only check Crux in 4-5 days time. > >>>>>>>> From memory I did set up something specific to make either > capture or > >>>>>>>> bubbling work, maybe that was for the 'addedToStage' event > >>>> emulation. I > >>>>>>>> think one of them (either capture or bubbling) was not working by > >>>>>>> default, > >>>>>>>> or did was not easy to enable by default. > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> On Tue, Dec 24, 2019 at 9:13 AM Harbs <harbs.li...@gmail.com> > wrote: > >>>>>>>> > >>>>>>>>> Nope. Didn’t figure it out. > >>>>>>>>> > >>>>>>>>> It looks like Crux listens on the ancestor and is relying on > >>>> bubbling. > >>>>>>>>> > >>>>>>>>> I’m guessing bubbling is not working, but I have no idea why that > >>>> would > >>>>>>>>> have changed with my commit. > >>>>>>>>> > >>>>>>>>>> On Dec 23, 2019, at 10:06 PM, Piotr Zarzycki < > >>>>>>> piotrzarzyck...@gmail.com> > >>>>>>>>> wrote: > >>>>>>>>>> > >>>>>>>>>> Harbs, > >>>>>>>>>> > >>>>>>>>>> I feel like Carlos has started his Christmas time ;) I'm glad > that > >>>> you > >>>>>>>>>> figured it out! :) > >>>>>>>>>> > >>>>>>>>>> pon., 23 gru 2019 o 21:01 Harbs <harbs.li...@gmail.com <mailto: > >>>>>>>>> harbs.li...@gmail.com>> napisał(a): > >>>>>>>>>> > >>>>>>>>>>> The asconfig file did not include the necessary metadata. Fixed > >>>> that… > >>>>>>>>>>> > >>>>>>>>>>> OK. I’m not getting any errors, but UserForm is dispatching an > >>>> event > >>>>>>> not > >>>>>>>>>>> listened to by anyone. > >>>>>>>>>>> > >>>>>>>>>>> Where is the listener supposed to be attached? Maybe it’s > >>>> listening to > >>>>>>>>> the > >>>>>>>>>>> wrong object? > >>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>>>> On Dec 23, 2019, at 9:35 PM, Harbs <harbs.li...@gmail.com> > >>>> wrote: > >>>>>>>>>>>> > >>>>>>>>>>>> I’m getting an error that UserForm.user is null. > >>>>>>>>>>>> > >>>>>>>>>>>> I have no idea where that should have been set, and I have no > >>>> idea > >>>>>>> how > >>>>>>>>>>> my commit could have possibly effected that. I don’t see > anything > >>>> that > >>>>>>>>>>> would initialize the user variable. > >>>>>>>>>>>> > >>>>>>>>>>>> If you want my help on this, I’m going to need some direction. > >>>>>>>>>>>> > >>>>>>>>>>>> Thanks, > >>>>>>>>>>>> Harbs > >>>>>>>>>>>> > >>>>>>>>>>>>> On Dec 23, 2019, at 9:28 PM, Harbs <harbs.li...@gmail.com > >>>> <mailto: > >>>>>>>>> harbs.li...@gmail.com> <mailto: > >>>>>>>>>>> harbs.li...@gmail.com <mailto:harbs.li...@gmail.com>>> wrote: > >>>>>>>>>>>>> > >>>>>>>>>>>>> I fixed this, but I have no idea what Crux is supposed to do. > >>>>>>>>>>>>> > >>>>>>>>>>>>> What am I looking for? > >>>>>>>>>>>>> > >>>>>>>>>>>>>> On Dec 23, 2019, at 8:30 PM, Harbs <harbs.li...@gmail.com > >>>> <mailto: > >>>>>>>>> harbs.li...@gmail.com> <mailto: > >>>>>>>>>>> harbs.li...@gmail.com <mailto:harbs.li...@gmail.com>>> wrote: > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> I can’t compile Jewel right now. > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> I’m getting an error: > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> [java] > >>>>>>>>>>> > >>>>>>>>> > >>>>>>> > >>>> > /Apache/royale-asjs/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/IconButton.as(104): > >>>>>>>>>>> col: 13 Access of possibly undefined property > classSelectorList. > >>>>>>>>>>>>>> [java] > >>>>>>>>>>>>>> [java] classSelectorList.toggle("icon", (_icon > != > >>>>>>>>>>> null)); > >>>>>>>>>>>>>> [java] ^ > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> > >>>>>>>>>>>>>>> On Dec 23, 2019, at 7:17 PM, Carlos Rovira < > >>>>>>> carlosrov...@apache.org > >>>>>>>>> <mailto:carlosrov...@apache.org> > >>>>>>>>>>> <mailto:carlosrov...@apache.org <mailto: > carlosrov...@apache.org > >>>>>>> > >>>>>>>>> wrote: > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> Compilation is ok. The problem is that example is not > really > >>>>>>>>> working. > >>>>>>>>>>>>>>> In that example you should be able to fill the form and > push > >>>> the > >>>>>>>>>>> button. > >>>>>>>>>>>>>>> After that a JS Alert should be show with the ID of the > user > >>>>>>> record > >>>>>>>>>>> saved. > >>>>>>>>>>>>>>> That Alert is not show anymore. > >>>>>>>>>>>>>>> If you revert locally that commit and recompile Core and > then > >>>> the > >>>>>>>>>>> example > >>>>>>>>>>>>>>> and run you'll be able to see it again. > >>>>>>>>>>>>>>> We have a client complaining about the app stopped to work > >>>> today > >>>>>>>>>>> since they > >>>>>>>>>>>>>>> are using Crux. > >>>>>>>>>>>>>>> After investigation I was able to trace the problem to that > >>>>>>> commit. > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> Thanks > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> Carlos > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> El lun., 23 dic. 2019 a las 17:59, Harbs (< > >>>> harbs.li...@gmail.com > >>>>>>>>> <mailto:harbs.li...@gmail.com> > >>>>>>>>>>> <mailto:harbs.li...@gmail.com <mailto:harbs.li...@gmail.com > >>>) > >>>>>>>>> escribió: > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> I compiled CruxQuickStartBasic and I don’t see anything > >>>> wrong. > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> Can you give me more clues? > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> FWIW, I used Ant, is the problem specific to Maven? > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> On Dec 23, 2019, at 6:26 PM, Carlos Rovira < > >>>>>>>>> carlosrov...@apache.org <mailto:carlosrov...@apache.org> > >>>>>>>>>>> <mailto:carlosrov...@apache.org <mailto: > carlosrov...@apache.org > >>>>>>> > >>>>>>>>>>>>>>>> wrote: > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> Hi Harbs, > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> seems recent changes break Crux library > >>>>>>>>>>>>>>>>> (commit: f50c9990a3190cf681364905525656984ab2e9c5 - > Cleaned > >>>> up > >>>>>>>>>>>>>>>>> ElementWrapper and HTMLElementWrapper) > >>>>>>>>>>>>>>>>> I'm trying to see what could be the problem. I suppose > that > >>>> is > >>>>>>> the > >>>>>>>>>>> change > >>>>>>>>>>>>>>>>> of HTMLElementWrapper now extending ElementWrapper. > >>>>>>>>>>>>>>>>> Tried to change one for the other in Crux library, but > with > >>>> no > >>>>>>>>> luck > >>>>>>>>>>>>>>>>> I'm using /examples/crux/CruxQuickStartBasic to test > >>>>>>>>>>>>>>>>> Can you see what could be wrong? > >>>>>>>>>>>>>>>>> Thanks > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> Carlos > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> El dom., 22 dic. 2019 a las 17:24, Harbs (< > >>>>>>> harbs.li...@gmail.com > >>>>>>>>> <mailto:harbs.li...@gmail.com> > >>>>>>>>>>> <mailto:harbs.li...@gmail.com <mailto:harbs.li...@gmail.com > >>>) > >>>>>>>>>>>>>>>> escribió: > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> There is lots of what looks like shared code, so could > >>>>>>>>>>>>>>>>>> HTMLElementWrapper extend ElementWrapper? > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> Totally. Excellent idea. > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> On Dec 22, 2019, at 5:46 PM, Alex Harui > >>>>>>>>> <aha...@adobe.com.INVALID <mailto:aha...@adobe.com.INVALID> > >>>>>>>>>>> <mailto:aha...@adobe.com.INVALID <mailto: > aha...@adobe.com.INVALID > >>>>>>> > >>>>>>>>>>>>>>>>>> wrote: > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> In a quick look at history, HTMLElementWrapper's > override > >>>>>>> logic > >>>>>>>>>>> was the > >>>>>>>>>>>>>>>>>> same as ElementWrapper's. > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> Maybe as you upgraded HTMLElementWrapper's logic, > >>>>>>> ElementWrapper > >>>>>>>>>>> should > >>>>>>>>>>>>>>>>>> have changed as well but didn't? > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> There is lots of what looks like shared code, so could > >>>>>>>>>>>>>>>>>> HTMLElementWrapper extend ElementWrapper? > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> My 2 cents, > >>>>>>>>>>>>>>>>>>> -Alex > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> On 12/22/19, 1:00 AM, "Harbs" <harbs.li...@gmail.com > >>>>>>> <mailto: > >>>>>>>>> harbs.li...@gmail.com> <mailto: > >>>>>>>>>>> harbs.li...@gmail.com <mailto:harbs.li...@gmail.com>>> wrote: > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> We found a weird bug with events and currentTarget. > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> I traced the problem to the following: > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> The app loads both HTMLElementWrapper and > ElementWrapper. > >>>> The > >>>>>>>>>>> lstener > >>>>>>>>>>>>>>>>>> overrides in the two are stepping on each other. Here’s > >>>> what > >>>>>>>>>>> happens: > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> 1. HTMLElementWrapper is loaded first. It replaces > >>>>>>>>>>>>>>>>>> goog.events.fireListener with its fireListenerOverride > >>>> function > >>>>>>>>>>> (which > >>>>>>>>>>>>>>>>>> calls the existing one when it’s done). > >>>>>>>>>>>>>>>>>>> 2. ElementWrapper is loaded next and it replaces the > >>>> existing > >>>>>>>>>>>>>>>>>> goog.events.fireListener function — which was already > >>>> changed > >>>>>>> to > >>>>>>>>>>> point > >>>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>> HTMLElementWrapper.fireListenerOverride with the one > from > >>>>>>>>>>>>>>>> ElementWrapper. > >>>>>>>>>>>>>>>>>>> 3. When an event is actually dispatched, > >>>>>>>>>>>>>>>>>> ElementWrapper.fireListenerOverride first changes the > >>>> event to > >>>>>>> a > >>>>>>>>>>> royale > >>>>>>>>>>>>>>>>>> BrowserEvent instead of a goog one. > >>>>>>>>>>>>>>>> HTMLElementWrapper.fireListenerOverride > >>>>>>>>>>>>>>>>>> is then called and where it expects a goog BrowserEvent, > >>>> it in > >>>>>>>>> fact > >>>>>>>>>>>>>>>> gets a > >>>>>>>>>>>>>>>>>> royale BrowserEvent. This causes the wrappedEvent to be > the > >>>>>>> wrong > >>>>>>>>>>> type > >>>>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>> messes things up down the line. > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> I’m not sure of the best way to fix this. > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> * We could check the event type in > >>>>>>>>>>> HTMLElementWrapper/ElementWrapper, > >>>>>>>>>>>>>>>>>> but that’s just-in-case code. > >>>>>>>>>>>>>>>>>>> * I’m not completely sure why we need this logic in > both > >>>>>>>>>>>>>>>>>> ElementWrapper and HTMLElementWrapper. Is there > something > >>>> that > >>>>>>>>> can > >>>>>>>>>>> be > >>>>>>>>>>>>>>>>>> changed there? > >>>>>>>>>>>>>>>>>>> * Maybe there’s some way for ElementWrapper to know > that > >>>> some > >>>>>>>>>>> other > >>>>>>>>>>>>>>>>>> class is installing an override? > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> Thoughts? > >>>>>>>>>>>>>>>>>>> Harbs > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> -- > >>>>>>>>>>>>>>>>> Carlos Rovira > >>>>>>>>>>>>>>>>> > >>>> > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C8fe1fe12a45c4547a87708d787f6e8e5%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637127366852977541&sdata=hmBF55kTuMIA8RLzZFSbfaSzdNgoxr8n0gwlVkfv5jI%3D&reserved=0 > >>>> < > >>>> > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C8fe1fe12a45c4547a87708d787f6e8e5%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637127366852977541&sdata=hmBF55kTuMIA8RLzZFSbfaSzdNgoxr8n0gwlVkfv5jI%3D&reserved=0 > >>>>> < > >>>> > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C8fe1fe12a45c4547a87708d787f6e8e5%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637127366852977541&sdata=hmBF55kTuMIA8RLzZFSbfaSzdNgoxr8n0gwlVkfv5jI%3D&reserved=0 > >>>> < > >>>> > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C8fe1fe12a45c4547a87708d787f6e8e5%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637127366852977541&sdata=hmBF55kTuMIA8RLzZFSbfaSzdNgoxr8n0gwlVkfv5jI%3D&reserved=0 > >> > >>>> < > >>>>>>>>> > >>>> > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C8fe1fe12a45c4547a87708d787f6e8e5%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637127366852977541&sdata=hmBF55kTuMIA8RLzZFSbfaSzdNgoxr8n0gwlVkfv5jI%3D&reserved=0 > >>>> < > >>>> > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C8fe1fe12a45c4547a87708d787f6e8e5%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637127366852977541&sdata=hmBF55kTuMIA8RLzZFSbfaSzdNgoxr8n0gwlVkfv5jI%3D&reserved=0 > > > >>>> < > >>>> > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C8fe1fe12a45c4547a87708d787f6e8e5%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637127366852977541&sdata=hmBF55kTuMIA8RLzZFSbfaSzdNgoxr8n0gwlVkfv5jI%3D&reserved=0 > >>>> < > >>>> > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C8fe1fe12a45c4547a87708d787f6e8e5%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637127366852977541&sdata=hmBF55kTuMIA8RLzZFSbfaSzdNgoxr8n0gwlVkfv5jI%3D&reserved=0 > >>>>>>> > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> -- > >>>>>>>>>>>>>>> Carlos Rovira > >>>>>>>>>>>>>>> > >>>> > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C8fe1fe12a45c4547a87708d787f6e8e5%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637127366852977541&sdata=hmBF55kTuMIA8RLzZFSbfaSzdNgoxr8n0gwlVkfv5jI%3D&reserved=0 > >>>> < > >>>> > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C8fe1fe12a45c4547a87708d787f6e8e5%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637127366852977541&sdata=hmBF55kTuMIA8RLzZFSbfaSzdNgoxr8n0gwlVkfv5jI%3D&reserved=0 > > > >>>> < > >>>> > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C8fe1fe12a45c4547a87708d787f6e8e5%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637127366852977541&sdata=hmBF55kTuMIA8RLzZFSbfaSzdNgoxr8n0gwlVkfv5jI%3D&reserved=0 > >>>> < > >>>> > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C8fe1fe12a45c4547a87708d787f6e8e5%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637127366852977541&sdata=hmBF55kTuMIA8RLzZFSbfaSzdNgoxr8n0gwlVkfv5jI%3D&reserved=0 > >> > >>>> < > >>>>>>>>> > >>>> > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C8fe1fe12a45c4547a87708d787f6e8e5%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637127366852977541&sdata=hmBF55kTuMIA8RLzZFSbfaSzdNgoxr8n0gwlVkfv5jI%3D&reserved=0 > >>>> < > >>>> > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C8fe1fe12a45c4547a87708d787f6e8e5%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637127366852977541&sdata=hmBF55kTuMIA8RLzZFSbfaSzdNgoxr8n0gwlVkfv5jI%3D&reserved=0 > > > >>>> < > >>>> > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C8fe1fe12a45c4547a87708d787f6e8e5%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637127366852977541&sdata=hmBF55kTuMIA8RLzZFSbfaSzdNgoxr8n0gwlVkfv5jI%3D&reserved=0 > >>>> < > >>>> > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C8fe1fe12a45c4547a87708d787f6e8e5%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637127366852977541&sdata=hmBF55kTuMIA8RLzZFSbfaSzdNgoxr8n0gwlVkfv5jI%3D&reserved=0 > >>>>>>> > >>>>>>>>>>>>>> > >>>>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> -- > >>>>>>>>>> > >>>>>>>>>> Piotr Zarzycki > >>>>>>>>>> > >>>>>>>>>> Patreon: * > >>>> > https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%7C8fe1fe12a45c4547a87708d787f6e8e5%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637127366852977541&sdata=BPJwWOdHi1NDnDQ7vujOyeQNUInTpQDUQ%2FQ0isRcamc%3D&reserved=0 > >>>> < > >>>> > https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%7C8fe1fe12a45c4547a87708d787f6e8e5%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637127366852977541&sdata=BPJwWOdHi1NDnDQ7vujOyeQNUInTpQDUQ%2FQ0isRcamc%3D&reserved=0 > > > >>>> < > >>>>>>>>> > >>>> > https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%7C8fe1fe12a45c4547a87708d787f6e8e5%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637127366852987537&sdata=abJP9qz96wpalZO2LidV9yth27gCABvHahThSnn%2FHxw%3D&reserved=0 > >>>> < > >>>> > https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%7C8fe1fe12a45c4547a87708d787f6e8e5%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637127366852987537&sdata=abJP9qz96wpalZO2LidV9yth27gCABvHahThSnn%2FHxw%3D&reserved=0 > >>>>>> > >>>>>>>>>> < > >>>> > https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%7C8fe1fe12a45c4547a87708d787f6e8e5%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637127366852987537&sdata=abJP9qz96wpalZO2LidV9yth27gCABvHahThSnn%2FHxw%3D&reserved=0 > >>>> < > >>>> > https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%7C8fe1fe12a45c4547a87708d787f6e8e5%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637127366852987537&sdata=abJP9qz96wpalZO2LidV9yth27gCABvHahThSnn%2FHxw%3D&reserved=0 > > > >>>> < > >>>>>>>>> > >>>> > https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%7C8fe1fe12a45c4547a87708d787f6e8e5%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637127366852987537&sdata=abJP9qz96wpalZO2LidV9yth27gCABvHahThSnn%2FHxw%3D&reserved=0 > >>>> < > >>>> > https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%7C8fe1fe12a45c4547a87708d787f6e8e5%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637127366852987537&sdata=abJP9qz96wpalZO2LidV9yth27gCABvHahThSnn%2FHxw%3D&reserved=0 > >>>>>>> * > >>>> > >>>> > >>> > >>> -- > >>> Carlos Rovira > >>> http://about.me/carlosrovira > >>> > >>> > >> > >> -- > >> Carlos Rovira > >> http://about.me/carlosrovira > > > > -- Piotr Zarzycki Patreon: *https://www.patreon.com/piotrzarzycki <https://www.patreon.com/piotrzarzycki>*