Why are there so many empty strings and why do the cost so much? Should we reference a single global empty string?
I don't think I follow why just-in-case code is less than not-just-in-case code. I don't think I've ever really seen that. Can you provide more detail? -Alex On 3/4/18, 5:24 AM, "Harbs" <[email protected]> wrote: > >> On Mar 2, 2018, at 6:46 PM, Alex Harui <[email protected]> wrote: >> >> Again, the principles of PAYG are that there is as little Just-in-case >> code as possible. AIUI, every MDL user will be downloading and >> initializing the ClassList prototype just-in-case. This is not true of >> Strings. It isn't just the cost of instantiation. There are download >>and >> class initialization costs. > >Not every MDL user. Only users of Button (and possibly Card). The final >minimized (non-gzipped) size of the class is 492 bytes. I’m actually not >sure why it’s not even smaller. I’m getting odd code which looks like >this: >AT.prototype.add=AT.prototype.add;AT.prototype.remove=AT.prototype.remove; > I’m not sure why goog is outputting this. > >While there are download costs, about half of those costs are offset by >less string initialization and concatenation code in Button. The more >classes which use the class will offset the cost of the class even >further. > >> Array operations are not cheap in Flash, not >> sure about JS. > >In JS, the array operations in use are about the same as the string >operations. In fact, it’s going to be cheaper and use less RAM if not all >the properties are used. > >So, it’s a toss between a slightly higher download size which gets >amortized the more it’s used vs memory resources. I’m not sure why you’re >considering it more PAYG to avoid the use of the class. > >As a data point: I found that empty strings in XML classes added many MB >of RAM usage when XML was used heavily in my app. While I doubt someone >will be using thousands of MDL Buttons, RAM from empty strings are >sometimes worthy of consideration. > >The “costs” one way or the other here is pretty minimal no matter which >way we go. > >> There may be other space-delimited lists in world and having a generic >> top-level function "addToSpaceDelimitedList" and >> "removeFromSpaceDelimitedList" would be opt-in by the users who choose >>to >> manipulate their classNames with these helper functions. It does not >>make >> sense to me to bake use of these functions into MDL. The only portion >>of >> the final classname that needs manipulation like this is the className >> property itself, not the attribute pieces or typenames. Also, with >> separate will named utility functions, folks could use these functions >>if >> they run into other space delimited lists. > >I’m not sure what you mean here. The class can be used in any context. If >there are other contexts, it might make sense to rename the class. Are >you referring to arrays or strings? I’m pretty sure we’re going to come >up with other uses for passing around class lists in a way that make this >class useful. > >Harbs > >> My 2 cents, >> -Alex >> >> On 3/2/18, 1:36 AM, "Harbs" <[email protected] >><mailto:[email protected]>> wrote: >> >>> I do agree that this is pretty low on the list of priorities. I did not >>> have a head to work on anything “serious” and the class lists was a >>>nice >>> distraction for me. I’m certainly fine with however Piotr handles >>>this. I >>> would like to point out a few things: >>> >>> 1. Object instantiation is pretty cheap in JS. A CSSClassList object is >>> no heavier than an empty String. 8 empty strings use more memory than a >>> single CSSClassList. >>> 2. Array.join() is about the same computational-wise as string >>> concatenation. >>> 3. The “list” is not being added anywhere the empty strings would not >>>be >>> added, so it’s no less PAYG than strings. >>> 4. An instantiated class such as this would fit better in case we need >>>to >>> play with class lists in beads because the CSSClassList object could be >>> passed around and modified by different classes without exposing >>>private >>> variables and/or strands and beads needing to know about each other. I >>> don’t think static utility classes are any less PAYG in this case. >>> >>> Thanks, >>> Harbs >>> >>>> On Mar 2, 2018, at 7:42 AM, Piotr Zarzycki <[email protected]> >>>> wrote: >>>> >>>> Hi Harbs, >>>> >>>> As much as I like Array approach I took Alex's words more serious that >>>> having an Array in the game here could be more heavier than String >>>> concatenation. It's earlier in the discussion. >>>> >>>> Piotr >>>> >>>> >>>> 2018-03-02 3:26 GMT+01:00 Alex Harui <[email protected]>: >>>> >>>>> Very nice, but IMO, this is over-engineering. We are talking about a >>>>> space-delimited list where some portion of it is considered "fixed" >>>>> another portion is user-settable and another portion comes from other >>>>> attributes. Some generic StringUtils or ListUtils might be more >>>>>PAYG, >>>>> especially if they are opt-in and just used to manage the >>>>>user-settable >>>>> portion. Think of it this way: Every MDL app needs to carry around >>>>> ClassList even if they never change the classname. I don't care too >>>>> much >>>>> since it is in MDL and not in the core, so keep it if you want to, >>>>>but >>>>> I >>>>> can think of lots of other tasks we should be working on than >>>>>creating >>>>> cool classes to manage a list of strings. >>>>> >>>>> My 2 cents, >>>>> -Alex >>>>> >>>>> On 3/1/18, 3:51 PM, "Harbs" <[email protected]> wrote: >>>>> >>>>>> What do you think of the CSSClassList class I just committed? >>>>>> >>>>>> I *think* that makes the pattern more recognizable and probably is >>>>>> less >>>>>> heavy if more than one class can be used. >>>>>> >>>>>> Harbs >>>>>> >>>>>>> On Mar 1, 2018, at 11:56 PM, Piotr Zarzycki >>>>>>> <[email protected]> >>>>>>> wrote: >>>>>>> >>>>>>> Harbs, Alex, >>>>>>> >>>>>>> I just pushed implementation of computeFinalClassNames to >>>>>>> branch feature/type_names_class_name_issue124. You can review >>>>>>> implementation in this commit [1] and example of usage in Card and >>>>>>> Button. >>>>>>> >>>>>>> I have tested with Harbs example [3] and with Card by changing >>>>>>> orders. >>>>>>> It's >>>>>>> working. >>>>>>> >>>>>>> [1] >>>>>>> https://na01.safelinks.protection.outlook.com/?url= >>>>> http%3A%2F%2Fbit.ly%2F >>>>>>> >>>>>>> >>>>>>>2HTHaFQ&data=02%7C01%7Caharui%40adobe.com%7C9ba2ae2d1a6e4fdc774508d5 >>>>>>>7f >>>>>>> cf >>>>> 6 >>>>>>> c56%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C1% >>>>> 7C636555451956879397&sdata >>>>>>> =5EDairk%2BdGWuPE20vIR8jGFcRSflwqQIcw48oCPydYU%3D&reserved=0 >>>>>>> [2] >>>>>>> https://na01.safelinks.protection.outlook.com/?url= >>>>> http%3A%2F%2Fbit.ly%2F >>>>>>> >>>>>>> >>>>>>>2oJgKOf&data=02%7C01%7Caharui%40adobe.com%7C9ba2ae2d1a6e4fdc774508d5 >>>>>>>7f >>>>>>> cf >>>>> 6 >>>>>>> c56%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C1% >>>>> 7C636555451956879397&sdata >>>>>>> =8hIfKGYzhaInYfubnf3lUKbYZWRUANzEcWHj3Pkn3Ho%3D&reserved=0 >>>>>>> [3] >>>>>>> https://na01.safelinks.protection.outlook.com/?url= >>>>> http%3A%2F%2Fbit.ly%2F >>>>>>> >>>>>>> >>>>>>>2F734nx&data=02%7C01%7Caharui%40adobe.com%7C9ba2ae2d1a6e4fdc774508d5 >>>>>>>7f >>>>>>> cf >>>>> 6 >>>>>>> c56%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C1% >>>>> 7C636555451956879397&sdata >>>>>>> =9I9q1KjL5VNE5CJSAVTtwN9hhR2rco4ovIzJjQ74%2FeY%3D&reserved=0 >>>>>>> >>>>>>> Waiting for your review. >>>>>>> >>>>>>> Thanks, >>>>>>> Piotr >>>>>>> >>>>>>> >>>>>>> 2018-02-28 23:31 GMT+01:00 Piotr Zarzycki >>>>>>> <[email protected]>: >>>>>>> >>>>>>>> Let me play with implementation of that function. It seems to me >>>>>>>> that >>>>>>>> will >>>>>>>> be much cleaner than current solution. >>>>>>>> >>>>>>>> If user actually wanted to do anythin with className - let the >>>>>>>> overriding >>>>>>>> speaks. >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> On Wed, Feb 28, 2018, 21:51 Alex Harui <[email protected]> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> On 2/28/18, 12:27 PM, "Harbs" <[email protected]> wrote: >>>>>>>>> >>>>>>>>>> OK. I think that will work for DML components, but what if >>>>>>>>>> there’s a >>>>>>>>>> bead >>>>>>>>>> which needs to add class names? What would be the “right” way to >>>>>>>>>> do >>>>>>>>>> that? >>>>>>>>>> A bead cannot override the function on the strand. >>>>>>>>> >>>>>>>>> Do we have beads that manipulate className? >>>>>>>>> >>>>>>>>> IMO, the principle behind how to handle that is knowing whether >>>>>>>>>you >>>>>>>>> are >>>>>>>>> sharing something or not. There may not be one right way to >>>>>>>>>handle >>>>>>>>> it, >>>>>>>>> but if I had to handle it, I would have the bead set something in >>>>>>>>> the >>>>>>>>> model or presentation model of the component. And the component >>>>>>>>> would >>>>>>>>> override computeFinalClassNames to take that into account. >>>>>>>>> >>>>>>>>> >>>>>>>>> Although having just written that, maybe this >>>>>>>>> computeFinalClassNames >>>>>>>>> should be in the view instead of on the base class so it is >>>>>>>>> replaceable >>>>>>>>> instead of overridable. >>>>>>>>> >>>>>>>>> Thoughts? >>>>>>>>> -Alex >>>>>>>>>> >>>>>>>>>>> On Feb 28, 2018, at 10:17 PM, Alex Harui >>>>>>>>>>> <[email protected]> >>>>>>>>>>> wrote: >>>>>>>>>>> >>>>>>>>>>> I think you are missing that the element.className is set to >>>>>>>>>>> computeFinalClassNames. So the user is welcome to manipulate >>>>>>>>>>>the >>>>>>>>>>> UIBase.className however they see fit. They can assign it a >>>>>>>>>>> whole >>>>>>>>>>> new >>>>>>>>>>> space-delimited list if they want. But what gets set on >>>>>>>>>>> element.className >>>>>>>>>>> is computed from typeNames and className by default, and MDL >>>>>>>>>>> would >>>>>>>>>>> override it to factor in fab, raised, colored into the >>>>>>>>>>>computing >>>>>>>>>>> of >>>>>>>>>>> the >>>>>>>>>>> final classnames. >>>>>>>>>>> >>>>>>>>>>> I would prefer that we don't make requirements on users as to >>>>>>>>>>> what >>>>>>>>>>> they >>>>>>>>>>> can or can't do with the className property, like requiring >>>>>>>>>>>them >>>>>>>>>>> to >>>>>>>>>>> use >>>>>>>>>>> addClassName/removeClassNames. MXML and States might set >>>>>>>>>>> className, >>>>>>>>> as >>>>>>>>>>> could any other AS logic. I think folks may even be used to >>>>>>>>>>> setting >>>>>>>>>>> className in JavaScript. So letting UIBase.className be the >>>>>>>>>>> "variable" >>>>>>>>>>> part and having computeFinalClassNames be the way the "fixed" >>>>>>>>>>> part >>>>>>>>>>> is >>>>>>>>>>> handled makes sense to me. >>>>>>>>>>> >>>>>>>>>>> Of course, I could be wrong... >>>>>>>>>>> -Alex >>>>>>>>>>> >>>>>>>>>>> On 2/28/18, 12:03 PM, "Harbs" <[email protected]> wrote: >>>>>>>>>>> >>>>>>>>>>>> The problem which sparked this whole issue is like this: >>>>>>>>>>>> >>>>>>>>>>>> 1. We have some components (i.e. in MDL) which add “pieces” to >>>>>>>>>>>> the >>>>>>>>>>>> class >>>>>>>>>>>> names (such as “fab”, “raised”, “colored”, etc. >>>>>>>>>>>> 2. The client might subsequently set the className to >>>>>>>>>>>>something >>>>>>>>>>>> else. >>>>>>>>>>>> 3. When the component sets the “pieces” first and the client >>>>>>>>>>>> sets >>>>>>>>>>>> the >>>>>>>>>>>> className later, the client will overwrite these “pieces” >>>>>>>>>>>>which >>>>>>>>>>>> were >>>>>>>>>>>> added by the component. >>>>>>>>>>>> >>>>>>>>>>>> My suggestion to have addClassName() and removeClassName() was >>>>>>>>>>>> to >>>>>>>>>>>> have >>>>>>>>>>>> a >>>>>>>>>>>> “safe” way to add class names which would get computed >>>>>>>>>>>>together >>>>>>>>>>>> with >>>>>>>>>>>> the >>>>>>>>>>>> className when the className is replaced. >>>>>>>>>>>> >>>>>>>>>>>> The way you have it seems to just be modifying the existing >>>>>>>>>>>> className >>>>>>>>>>>> property. If that’s overwritten by a client, the logic falls >>>>>>>>>>>> apart. >>>>>>>>>>>> >>>>>>>>>>>> It feels like only having typeNames which are set inside the >>>>>>>>>>>> component >>>>>>>>>>>> and className which is set outside the component is not really >>>>>>>>>>>> enough. >>>>>>>>>>>> (Unless I’m missing something.) >>>>>>>>>>>> >>>>>>>>>>>> Harbs >>>>>>>>>>>> >>>>>>>>>>>>> On Feb 28, 2018, at 9:31 PM, Alex Harui >>>>>>>>>>>>> <[email protected] >>>>>> >>>>>>>>>>>>> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>> On 2/28/18, 10:44 AM, "Harbs" <[email protected]> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>>> If it’s not public, I don’t see how a utility method could >>>>>>>>>>>>>> call >>>>>>>>>>>>>> it >>>>>>>>>>>>>> though. >>>>>>>>>>>>> >>>>>>>>>>>>> I didn't think the utility methods like >>>>>>>>>>>>> addClassName/removeClassName >>>>>>>>>>>>> would >>>>>>>>>>>>> need to alter computeFinalClassNames(). >>>>>>>>>>>>> >>>>>>>>>>>>> AIUI, for most UIBase subclasses, the final element.className >>>>>>>>>>>>> is a >>>>>>>>> mix >>>>>>>>>>>>> of >>>>>>>>>>>>> the className property and the typeNames. The typenames are >>>>>>>>>>>>> thought >>>>>>>>>>>>> to >>>>>>>>>>>>> be >>>>>>>>>>>>> "fixed" and the space-delimited list of names in className >>>>>>>>>>>>>are >>>>>>>>>>>>> the >>>>>>>>>>>>> ones >>>>>>>>>>>>> the user wants to manipulate in their code. So, I would >>>>>>>>>>>>>expect >>>>>>>>>>>>> them >>>>>>>>>>>>> to >>>>>>>>>>>>> write: >>>>>>>>>>>>> >>>>>>>>>>>>> org.apache.royale.utils.addClassName(myComponent, >>>>>>>>>>>>> "pinkStyles"); >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> addClassName should just do something like: >>>>>>>>>>>>> >>>>>>>>>>>>> myComponent.className += value; >>>>>>>>>>>>> >>>>>>>>>>>>> That will call the className setter that will run: >>>>>>>>>>>>> >>>>>>>>>>>>> element.className = computeFinalClassNames(); >>>>>>>>>>>>> >>>>>>>>>>>>> If you call >>>>>>>>>>>>> >>>>>>>>>>>>> org.apache.royale.utils.removeClassName(myComponent, >>>>>>>>>>>>> "pinkStyles"); >>>>>>>>>>>>> >>>>>>>>>>>>> removeClassName should just do something like: >>>>>>>>>>>>> >>>>>>>>>>>>> Var s:String = myComponent.className; >>>>>>>>>>>>> Var c:int = s.indexOf(nameToRemove + " "); >>>>>>>>>>>>> If (c != -1) >>>>>>>>>>>>> s = s.substr(0, c) + s.substr(c + nameToRemove.length + 1); >>>>>>>>>>>>> Else >>>>>>>>>>>>> { >>>>>>>>>>>>> c= s.indexOf(" " + nameToRemove); >>>>>>>>>>>>> if (c != -1) >>>>>>>>>>>>> s = s.substr(0, c); // remove last item >>>>>>>>>>>>> } >>>>>>>>>>>>> myComponent.className = s; >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> It seems like it should be that simple. What am I missing? >>>>>>>>>>>>> >>>>>>>>>>>>> -Alex >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>>> On Feb 28, 2018, at 8:21 PM, Alex Harui >>>>>>>>>>>>>>> <[email protected]> >>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> On 2/28/18, 9:50 AM, "Piotr Zarzycki" < >>>>> [email protected] >>>>>>>>>>>>>>> <mailto:[email protected]>> wrote: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Ok Understand, but do you agree that >>>>>>>>>>>>>>>> computeFinalClassNames - >>>>>>>>>>>>>>>> is >>>>>>>>>>>>>>>> something >>>>>>>>>>>>>>>> which is in the UIBase ? >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Yes, and probably protected instead of public. The one in >>>>>>>>>>>>>>> UIBase >>>>>>>>>>>>>>> just >>>>>>>>>>>>>>> appends typenames to className. It gets overridden in MDL >>>>>>>>>>>>>>> where >>>>>>>>>>>>>>> needed >>>>>>>>>>>>>>> for shadow and other attributes. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> My 2 cents, >>>>>>>>>>>>>>> -Alex >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> 2018-02-28 18:47 GMT+01:00 Alex Harui >>>>>>>>>>>>>>>> <[email protected]>: >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> I think that in the shadow setter, it would change >>>>>>>>>>>>>>>>>_shadow >>>>>>>>>>>>>>>>> and >>>>>>>>>>>>>>>>> call >>>>>>>>>>>>>>>>> setClassName(computeFinalClassNames()); >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> On 2/28/18, 9:33 AM, "Piotr Zarzycki" >>>>>>>>>>>>>>>>> <[email protected] >>>>>>>>>> >>>>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Alex, >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> So we are getting back to the idea where you proposed to >>>>>>>>>>>>>>>>>> have >>>>>>>>>>>>>>>>>> function >>>>>>>>>>>>>>>>>> which computes everything. >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> override public function computeFinalClassNames():String >>>>>>>>>>>>>>>>>> { >>>>>>>>>>>>>>>>>> return super.computeFinalClassNames() + " " + _shadow; >>>>>>>>>>>>>>>>>> } >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Where does that function should be placed ? Does that >>>>>>>>>>>>>>>>>> function >>>>>>>>>>>>>>>>>> should >>>>>>>>>>>>>>>>> be >>>>>>>>>>>>>>>>>> called in addedToParent plus whenever someone change >>>>>>>>>>>>>>>>>> _shadow >>>>>>>>>>>>>>>>>> ? - >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Because I really don't know how to handle scenario where >>>>>>>>>>>>>>>>>> you >>>>>>>>> have >>>>>>>>>>>>>>>>>> some >>>>>>>>>>>>>>>>>> property isActive = true/false and I need to add/remove >>>>>>>>>>>>>>>>>> class. - >>>>>>>>>>>>>>>>>> In >>>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>> first launch I use computeFinalClassNames, but how to >>>>>>>>>>>>>>>>>> handle >>>>>>>>>>>>>>>>>> changing >>>>>>>>>>>>>>>>> ? >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Thanks, Piotr >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> 2018-02-28 18:26 GMT+01:00 Alex Harui >>>>>>>>>>>>>>>>>> <[email protected] >>>>>>>>>> : >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> Hi Piotr, >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> I think am I not communicating the principles >>>>>>>>>>>>>>>>>>> effectively. >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> First, IMO, addClassName and removeClassName should not >>>>>>>>>>>>>>>>>>> be >>>>>>>>>>>>>>>>>>> in >>>>>>>>>>>>>>>>>>> UIBase. >>>>>>>>>>>>>>>>>>> Lots of apps can be written without needing these >>>>>>>>>>>>>>>>>>> methods. >>>>>>>>>>>>>>>>>>> I >>>>>>>>>>>>>>>>>>> think >>>>>>>>>>>>>>>>> they >>>>>>>>>>>>>>>>>>> can be written as utility functions. >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> Second, the computation of the final element.className >>>>>>>>>>>>>>>>>>> should >>>>>>>>>>>>>>>>> represent >>>>>>>>>>>>>>>>>>> the state of the component, so I don't get why you need >>>>>>>>>>>>>>>>>>> an >>>>>>>>>>>>>>>>>>> _internalClassName or should ever set it to "". The >>>>>>>>> computation >>>>>>>>>>>>>>>>>>> for >>>>>>>>>>>>>>>>> a >>>>>>>>>>>>>>>>>>> component with a shadow would be to check the shadow >>>>>>>>>>>>>>>>>>> property >>>>>>>>>>>>>>>>>>> and >>>>>>>>>>>>>>>>>>> if >>>>>>>>>>>>>>>>> it >>>>>>>>>>>>>>>>>>> is >>>>>>>>>>>>>>>>>>> true, add a className for the shadow to the list. >>>>>>>>>>>>>>>>>>>Then I >>>>>>>>>>>>>>>>>>> think >>>>>>>>>>>>>>>>>>> you >>>>>>>>>>>>>>>>>>> wouldn't have the problem you showed in the animated >>>>>>>>>>>>>>>>>>>GIF. >>>>>>>>>>>>>>>>>>> When >>>>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>> classname property is set from the outside by >>>>>>>>>>>>>>>>>>> MXMLDataInterpreter >>>>>>>>>>>>>>>>>>> or >>>>>>>>>>>>>>>>>>> even >>>>>>>>>>>>>>>>>>> user-written code, those classNames are added to the >>>>>>>>>>>>>>>>>>>list >>>>>>>>>>>>>>>>>>> with >>>>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>> typeNames and the shadow className if shadow is true >>>>>>>>>>>>>>>>>>>and >>>>>>>>>>>>>>>>>>> then >>>>>>>>>>>>>>>>>>> set >>>>>>>>>>>>>>>>>>> on >>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>> element. >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> Finally, for addClassName and removeClassName, and all >>>>>>>>>>>>>>>>>>> other >>>>>>>>>>>>>>>>>>> Royale >>>>>>>>>>>>>>>>>>> code, >>>>>>>>>>>>>>>>>>> we don't want to do much if any parameter checking. >>>>>>>>>>>>>>>>>>> That is >>>>>>>>>>>>>>>>>>> also >>>>>>>>>>>>>>>>>>> just-in-case code. The production code should not be >>>>>>>>>>>>>>>>>>> passing >>>>>>>>> in >>>>>>>>>>>>>>>>> null or >>>>>>>>>>>>>>>>>>> other bad values. And once you fix that, then the >>>>>>>>>>>>>>>>>>>checks >>>>>>>>>>>>>>>>>>> that >>>>>>>>>>>>>>>>>>> you >>>>>>>>>>>>>>>>> have >>>>>>>>>>>>>>>>>>> written do not add value. I have proposed that there >>>>>>>>>>>>>>>>>>>are >>>>>>>>>>>>>>>>>>> debug-only >>>>>>>>>>>>>>>>>>> code >>>>>>>>>>>>>>>>>>> that does parameter checking. There is a goog.DEBUG >>>>>>>>>>>>>>>>>>>flag >>>>>>>>>>>>>>>>>>> you >>>>>>>>>>>>>>>>>>> can >>>>>>>>>>>>>>>>>>> use >>>>>>>>>>>>>>>>>>> for >>>>>>>>>>>>>>>>>>> that. >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> HTH, >>>>>>>>>>>>>>>>>>> -Alex >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> On 2/28/18, 12:40 AM, "Piotr Zarzycki" >>>>>>>>>>>>>>>>>>> <[email protected]> >>>>>>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> Hi Alex, >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> Sorry about that. Let me show you code and I recorded >>>>>>>>>>>>>>>>>>>> GIF >>>>>>>>>>>>>>>>>>>> with >>>>>>>>>>>>>>>>> problem >>>>>>>>>>>>>>>>>>>> debugging. >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> *Code in UIBase which I have implemented:* >>>>>>>>>>>>>>>>>>>> addClassName and removeClassName [1]. >>>>>>>>>>>>>>>>>>>> addedToParent what is happen with internal field >>>>>>>>>>>>>>>>>>>>which I >>>>>>>>>>>>>>>>>>>> have >>>>>>>>>>>>>>>>>>>> added >>>>>>>>>>>>>>>>> [2] >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> *Code for Testing* [3] - I'm adding first className, >>>>>>>>>>>>>>>>>>>> than >>>>>>>>>>>>>>>>>>>> shadow. >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> *GIF* [4] We are starting from the constructor. Pay >>>>>>>>>>>>>>>>>>>> attention >>>>>>>>>>>>>>>>>>>> to >>>>>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>> moment >>>>>>>>>>>>>>>>>>>> where className is being wiped out, later I have to >>>>>>>>>>>>>>>>>>>>use >>>>>>>>>>>>>>>>>>>> my >>>>>>>>>>>>>>>>>>>> internal >>>>>>>>>>>>>>>>>>>> variable to get it back. >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> Does that more clean now ? >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> [1] >>>>>>>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url= >>>>>>>>>>>>>>>>>>> https%3A%2F%2Fpaste.apa >>>>>>>>>>>>>>>>>>>> che.org%2FEumG&data=02%7C01%7Caharui%40adobe.com% >>>>>>>>>>>>>>>>>>> 7Cee5c84b4e3ff4ddb578008d >>>>>>>>>>>>>>>>>>>> 57e87046f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0% >>>>>>>>>>>>>>>>>>> 7C636554040718214998& >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>sdata=cDT88OF63TdBMPxYY2vwMSIRxD%2FP3DvwHupj%2BQHsofw%3 >>>>>>>>>>>>>>>>>>>>D& >>>>>>>>> reserve >>>>>>>>>>>>>>>>>>>> d= >>>>>>>>>>>>>>>>>>>> 0 >>>>>>>>>>>>>>>>>>>> [2] >>>>>>>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url= >>>>>>>>>>>>>>>>>>> https%3A%2F%2Fpaste.apa >>>>>>>>>>>>>>>>>>>> che.org%2FArmU&data=02%7C01%7Caharui%40adobe.com% >>>>>>>>>>>>>>>>>>> 7Cee5c84b4e3ff4ddb578008d >>>>>>>>>>>>>>>>>>>> 57e87046f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0% >>>>>>>>>>>>>>>>>>> 7C636554040718214998& >>>>>>>>>>>>>>>>>>>> sdata=m6whImrP70u7kzRxCbErlxCHWef8TK >>>>>>>>> Nejwm4Sr7bw7g%3D&reserved=0 >>>>>>>>>>>>>>>>>>>> [3] >>>>>>>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url= >>>>>>>>>>>>>>>>>>> https%3A%2F%2Fpaste.apa >>>>>>>>>>>>>>>>>>>> che.org%2FKrxq&data=02%7C01%7Caharui%40adobe.com% >>>>>>>>>>>>>>>>>>> 7Cee5c84b4e3ff4ddb578008d >>>>>>>>>>>>>>>>>>>> 57e87046f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0% >>>>>>>>>>>>>>>>>>> 7C636554040718214998& >>>>>>>>>>>>>>>>>>>> sdata=tpeUYSQIXGXtES8hyr7zSeet528ZTc >>>>>>>>> zSltcNccqRGDo%3D&reserved=0 >>>>>>>>>>>>>>>>>>>> [4] >>>>>>>>>>>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url= >>>>>>>>>>>>>>>>>>> https%3A%2F%2F1drv.ms%2 >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> Fu%2Fs!ApVpLyjpHDC2hPtoCi65kIZZPwjSpQ >>>>>>>>> &data=02%7C01%7Caharui%40ad >>>>>>>>>>>>>>>>>>>> ob >>>>>>>>>>>>>>>>>>>> e >>>>>>>>>>>>>>>>> .com >>>>>>>>>>>>>>>>>>> %7C >>>>>>>>>>>>>>>>>>>> ee5c84b4e3ff4ddb578008d57e87046f% >>>>>>>>> 7Cfa7b1b5a7b34438794aed2c178de >>>>>>>>>>>>>>>>>>> cee1%7C0%7C >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> 0%7C636554040718214998&sdata=eX%2FgZ0MA% >>>>>>>>> 2BdQJjcpYtMkk1pw3r0iVkdR >>>>>>>>>>>>>>>>>>>> a% >>>>>>>>>>>>>>>>>>> 2F6TWRTG >>>>>>>>>>>>>>>>>>>> 10OY%3D&reserved=0 >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> Thanks, >>>>>>>>>>>>>>>>>>>> Piotr >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> 2018-02-27 23:31 GMT+01:00 Alex Harui >>>>>>>>>>>>>>>>>>>> <[email protected]>: >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> Hi Piotr, >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> I could not understand this explanation. Might be >>>>>>>>>>>>>>>>>>>>> better >>>>>>>>>>>>>>>>>>>>> to >>>>>>>>>>>>>>>>>>>>> show >>>>>>>>>>>>>>>>>>> actual >>>>>>>>>>>>>>>>>>>>> code. For example in #3, there is a cssClass variable >>>>>>>>>>>>>>>>>>>>> that I >>>>>>>>>>>>>>>>> don't >>>>>>>>>>>>>>>>>>> know >>>>>>>>>>>>>>>>>>>>> about. Also you mention at the bottom setting >>>>>>>>>>>>>>>>>>>>> something >>>>>>>>>>>>>>>>>>>>> as >>>>>>>>>>>>>>>>>>>>> empty, >>>>>>>>>>>>>>>>>>> but >>>>>>>>>>>>>>>>>>>>> I'm >>>>>>>>>>>>>>>>>>>>> not sure what that is. >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> However, IMO, this code should be in utility functions, >>>>>>>>>>>>>>>>>>>>> not >>>>>>>>> in >>>>>>>>>>>>>>>>>>> UIBase. >>>>>>>>>>>>>>>>>>>>> I >>>>>>>>>>>>>>>>>>>>> think plenty of useful applications can be built >>>>>>>>>>>>>>>>>>>>> without >>>>>>>>>>>>>>>>>>>>> changing >>>>>>>>>>>>>>>>>>>>> classNames at runtime. >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> I'm off-line for the next several hours so we can pick >>>>>>>>>>>>>>>>>>>>> this >>>>>>>>> up >>>>>>>>>>>>>>>>> again >>>>>>>>>>>>>>>>>>> in >>>>>>>>>>>>>>>>>>>>> your morning. >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> Thanks for working on it, >>>>>>>>>>>>>>>>>>>>> -Alex >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> On 2/27/18, 2:21 PM, "Piotr Zarzycki" >>>>>>>>>>>>>>>>>>>>> <[email protected]> >>>>>>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> Here is how I'm thinking to resolve that issue. I >>>>>>>>>>>>>>>>>>>>>> would >>>>>>>>>>>>>>>>>>>>>> take >>>>>>>>>>>>>>>>> Harb's >>>>>>>>>>>>>>>>>>>>>> proposition and add to UIBase addClassName() and >>>>>>>>>>>>>>>>> removeClassName(). >>>>>>>>>>>>>>>>>>>>> Next >>>>>>>>>>>>>>>>>>>>>> I >>>>>>>>>>>>>>>>>>>>>> would add internal field _internalClassName:String. >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> addClassName(value): >>>>>>>>>>>>>>>>>>>>>> 1) Will check if provided class name exits in >>>>>>>>>>>>>>>>>>>>>> _className >>>>>>>>>>>>>>>>>>>>>> and >>>>>>>>>>>>>>>>>>>>>> in >>>>>>>>>>>>>>>>>>>>>> _internalClassName. >>>>>>>>>>>>>>>>>>>>>> 2) Will add to _internalClassName += value >>>>>>>>>>>>>>>>>>>>>> 3) Assign to the element.className in the following >>>>>>>>>>>>>>>>>>>>>> way: >>>>>>>>>>>>>>>>>>>>> element.className >>>>>>>>>>>>>>>>>>>>>> = cssClass + " " + _className + " " + typeNames; >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> removeClassName(value) >>>>>>>>>>>>>>>>>>>>>> 1) Will check if provided classs name exists in >>>>>>>>>>>>>>>>>>>>>> _className >>>>>>>>>>>>>>>>>>>>>> or >>>>>>>>>>>>>>>>>>>>>> in >>>>>>>>>>>>>>>>>>>>>> _internalClassName >>>>>>>>>>>>>>>>>>>>>> 2) Make a replace to empty string if css class name >>>>>>>>>>>>>>>>>>>>>> exists. >>>>>>>>>>>>>>>>>>>>>> _className.replace(value, ""); >>>>>>>>>>>>>>>>>>>>>> 3) Assign to the element.className: element.className >>>>>>>>>>>>>>>>>>>>>> = >>>>>>>>>>>>>>>>> _className >>>>>>>>>>>>>>>>>>> + " >>>>>>>>>>>>>>>>>>>>> " + >>>>>>>>>>>>>>>>>>>>>> typeNames; >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> In added to parent we are computing _internalClassName >>>>>>>>>>>>>>>>>>>>>> with >>>>>>>>>>>>>>>>>>> _className >>>>>>>>>>>>>>>>>>>>> and >>>>>>>>>>>>>>>>>>>>>> typeNames. Then it's being set as empty. >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> element.className = _internalClassName + " " + >>>>>>>>>>>>>>>>>>>>>> _className >>>>>>>>>>>>>>>>>>>>>> + " >>>>>>>>>>>>>>>>> " + >>>>>>>>>>>>>>>>>>>>>> typeNames; >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> I have implemented it and it seems to be working. >>>>>>>>>>>>>>>>>>>>>> Waiting >>>>>>>>> for >>>>>>>>>>>>>>>>> your >>>>>>>>>>>>>>>>>>>>>> thoughts >>>>>>>>>>>>>>>>>>>>>> on that solution. The last step where we are adding >>>>>>>>>>>>>>>>>>>>>> all >>>>>>>>> three >>>>>>>>>>>>>>>>>>> fields is >>>>>>>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>>>> most important. Points 3 in addClassName and >>>>>>>>>>>>>>>>>>>>>> removeClassName >>>>>>>>>>>>>>>>>>>>>> are >>>>>>>>>>>>>>>>>>>>>> necessary, >>>>>>>>>>>>>>>>>>>>>> because user may want to more dynamically manipulate >>>>>>>>>>>>>>>>>>>>>> classes >>>>>>>>>>>>>>>>>>>>>> once >>>>>>>>>>>>>>>>>>>>>> component >>>>>>>>>>>>>>>>>>>>>> is created. Ex. "is-active" class is removed and >>>>>>>>>>>>>>>>>>>>>> added on >>>>>>>>>>>>>>>>>>>>>> demand. >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> Thanks, Piotr >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> 2018-02-27 13:38 GMT+01:00 Piotr Zarzycki >>>>>>>>>>>>>>>>>>> <[email protected]>: >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>> I think I have analyzed everything and have some >>>>>>>>>>>>>>>>>>>>>>> implementation >>>>>>>>>>>>>>>>>>>>>>> proposition. I will try to provide it later today. >>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>> Thanks, Piotr >>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>> 2018-02-27 13:35 GMT+01:00 Harbs >>>>>>>>>>>>>>>>>>>>>>> <[email protected]>: >>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>> ExpandableSearch broke too. >>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>> On Feb 25, 2018, at 6:15 PM, Piotr Zarzycki >>>>>>>>>>>>>>>>>>>>>>>> <[email protected]> >>>>>>>>>>>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>> Harbs, >>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>> If you are using something more than MDL Dialog in >>>>>>>>>>>>>>>>>>>>>>>>> your >>>>>>>>>>>>>>>>>>>>> application >>>>>>>>>>>>>>>>>>>>>>>> it >>>>>>>>>>>>>>>>>>>>>>>>> would be great to get feedback whether I didn't break >>>>>>>>>>>>>>>>>>>>>>>>> for >>>>>>>>>>>>>>>>> you >>>>>>>>>>>>>>>>>>>>>>>> anything. >>>>>>>>>>>>>>>>>>>>>>>> :) >>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>> -- >>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>> Piotr Zarzycki >>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>> Patreon: >>>>>>>>>>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url= >>>>>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.pat >>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>> reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui% >>>>> 40adobe.co >>>>>>>>>>>>>>>>>>>>>>> m >>>>>>>>>>>>>>>>>>>>> %7C45a065853ba1 >>>>>>>>>>>>>>>>>>>>>>> 4a295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de >>>>>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536 >>>>>>>>>>>>>>>>>>>>>>> 69427477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK >>>>>>>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&rese >>>>>>>>>>>>>>>>>>>>>>> rved=0 >>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url= >>>>>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.pat >>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>> reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui% >>>>> 40adobe.co >>>>>>>>>>>>>>>>>>>>>>> m >>>>>>>>>>>>>>>>>>>>> %7C45a065853ba1 >>>>>>>>>>>>>>>>>>>>>>> 4a295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de >>>>>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536 >>>>>>>>>>>>>>>>>>>>>>> 69427477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK >>>>>>>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&rese >>>>>>>>>>>>>>>>>>>>>>> rved=0>* >>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> -- >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> Piotr Zarzycki >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> Patreon: >>>>>>>>>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url= >>>>>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.c >>>>>>>>>>>>>>>>>>>>>> om >>>>> % >>>>>>>>>>>>>>>>>>>>> 7C45a065853ba14a >>>>>>>>>>>>>>>>>>>>>> 295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de >>>>>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536694 >>>>>>>>>>>>>>>>>>>>>> 27477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK >>>>>>>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&reserved >>>>>>>>>>>>>>>>>>>>>> =0 >>>>>>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url= >>>>>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.c >>>>>>>>>>>>>>>>>>>>>> om >>>>> % >>>>>>>>>>>>>>>>>>>>> 7C45a065853ba14a >>>>>>>>>>>>>>>>>>>>>> 295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de >>>>>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365536694 >>>>>>>>>>>>>>>>>>>>>> 27477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK >>>>>>>>>>>>>>>>>>>>> 9liXcy%2BPg%3D&reserved >>>>>>>>>>>>>>>>>>>>>> =0>* >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> -- >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> Piotr Zarzycki >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> Patreon: >>>>>>>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url= >>>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.c >>>>>>>>>>>>>>>>>>>>om >>>>>>>>>>>>>>>>>>>> % >>>>>>>>>>>>>>>>>>> 7Cee5c84b4e3ff4d >>>>>>>>>>>>>>>>>>>> db578008d57e87046f%7Cfa7b1b5a7b34438794aed2c178de >>>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365540407 >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> 18214998&sdata=VYtgB8rsurZAHpO%2FVs% >>>>>>>>> 2FqOkmxROz58p7VvQ%2B0EK8VPPc >>>>>>>>>>>>>>>>>>>> % >>>>>>>>>>>>>>>>>>> 3D&reserv >>>>>>>>>>>>>>>>>>>> ed=0 >>>>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url= >>>>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.c >>>>>>>>>>>>>>>>>>>>om >>>>>>>>>>>>>>>>>>>> % >>>>>>>>>>>>>>>>>>> 7Cee5c84b4e3ff4d >>>>>>>>>>>>>>>>>>>> db578008d57e87046f%7Cfa7b1b5a7b34438794aed2c178de >>>>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365540407 >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> 18214998&sdata=VYtgB8rsurZAHpO%2FVs% >>>>>>>>> 2FqOkmxROz58p7VvQ%2B0EK8VPPc >>>>>>>>>>>>>>>>>>>> % >>>>>>>>>>>>>>>>>>> 3D&reserv >>>>>>>>>>>>>>>>>>>> ed=0>* >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> -- >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Piotr Zarzycki >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Patreon: >>>>>>>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url= >>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com >>>>>>>>>>>>>>>>>>% >>>>>>>>>>>>>>>>> 7Cda0fd75922c94d >>>>>>>>>>>>>>>>>> cb789208d57ed16c9f%7Cfa7b1b5a7b34438794aed2c178de >>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365543602 >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> 95549968&sdata=rypScmQqTsmVcrUIZRNnaoZP5VMbI0 >>>>>>>>> oJqA6J42ZuhcA%3D&rese >>>>>>>>>>>>>>>>>> rv >>>>>>>>>>>>>>>>>> ed >>>>>>>>>>>>>>>>>> =0 >>>>>>>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url= >>>>>>>>>>>>>>>>> https%3A%2F%2Fwww.patr >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com >>>>>>>>>>>>>>>>>>% >>>>>>>>>>>>>>>>> 7Cda0fd75922c94d >>>>>>>>>>>>>>>>>> cb789208d57ed16c9f%7Cfa7b1b5a7b34438794aed2c178de >>>>>>>>>>>>>>>>> cee1%7C0%7C0%7C6365543602 >>>>>>>>>>>>>>>>>> 95549968&sdata=rypScmQqTsmVcrUIZRNnaoZP5VMbI0 >>>>>>>>>>>>>>>>> oJqA6J42ZuhcA%3D&reserved=0>* >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> -- >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Piotr Zarzycki >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Patreon: >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>*https://na01.safelinks.protection.outlook.com/?url=https%3 >>>>>>>>>>>>>>>>A% >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharu >>>>>>>>>>>>>>>>i% >>>>>>>>>>>>>>>> 40adobe.com >>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A >>>>>>>>>>>>>>>>%2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f >>>>>>>>>>>>>>>>96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178 >>>>>>>>>>>>>>>>decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT2H >>>>>>>>>>>>>>>>6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%7C1beda9d1dc674 >>>>>>>>>>>>>>>>30b02e608d580210ddc%7Cfa7b1b5a7b34 >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=SJJ >>>>>>>>>>>>>>>>hf >>>>>>>>>>>>>>>> o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0. >>>>> com/?url=https%3A%2F% >>>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02% >>>>> 7C01%7Caharui%40adob >>>>>>>>>>>>>>>> e.com >>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A >>>>>>>>>>>>>>>>%2F%2Fe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f965220 >>>>>>>>>>>>>>>>46fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1 >>>>>>>>>>>>>>>>%7C0%7C0%7C636557667183559337&sdata=9FWfUNZV9xlJqEFYVFVDrZx >>>>>>>>>>>>>>>>5p4lHBqIjIW%2F6cIaQTJw%3D&reserved=0>%7C9ba2ae2d1a6e4fdc774 >>>>>>>>>>>>>>>>508d57fcf >>>>> 6c56%7Cfa7b1b5a7b34438794aed >>>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397& >>>>> sdata=9%2BK%2FO6A3X%2FV >>>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0. >>>>>>>>> com/?url=https%3A%2F%2Fww >>>>>>>>>>>>>>>> w. >>>>>>>>>>>>>>>> pa >>>>>>>>>>>>>>>> tr >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3 >>>>>>>>>>>>>>>>A% >>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3 >>>>>>>>>>>>>>>>A%> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharu >>>>>>>>>>>>>>>>i% >>>>>>>>>>>>>>>> 40adobe.com >>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A >>>>>>>>>>>>>>>>%2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f >>>>>>>>>>>>>>>>96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178 >>>>>>>>>>>>>>>>decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT2H >>>>>>>>>>>>>>>>6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%7C1beda9d1dc674 >>>>>>>>>>>>>>>>30b02e608d580210ddc%7Cfa7b1b5a7b34 >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=SJJ >>>>>>>>>>>>>>>>hf >>>>>>>>>>>>>>>> o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0. >>>>> com/?url=https%3A%2F% >>>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02% >>>>> 7C01%7Caharui%40adob >>>>>>>>>>>>>>>> e.com >>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A >>>>>>>>>>>>>>>>%2F%2Fe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f965220 >>>>>>>>>>>>>>>>46fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1 >>>>>>>>>>>>>>>>%7C0%7C0%7C636557667183559337&sdata=9FWfUNZV9xlJqEFYVFVDrZx >>>>>>>>>>>>>>>>5p4lHBqIjIW%2F6cIaQTJw%3D&reserved=0>%7C9ba2ae2d1a6e4fdc774 >>>>>>>>>>>>>>>>508d57fcf >>>>> 6c56%7Cfa7b1b5a7b34438794aed >>>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397& >>>>> sdata=9%2BK%2FO6A3X%2FV >>>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0. >>>>>>>>> com/?url=https%3A%2F%2Fww >>>>>>>>>>>>>>>> w. >>>>>>>>>>>>>>>> pa >>>>>>>>>>>>>>>> tr> >>>>>>>>>>>>>>>> eon.com >>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A >>>>>>>>>>>>>>>>%2F%2Feon.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f9652 >>>>>>>>>>>>>>>>2046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178dece >>>>>>>>>>>>>>>>e1%7C0%7C0%7C636557667183559337&sdata=4AZuIWAEBmFqifiEmALZY >>>>>>>>>>>>>>>>sFzfTm5U8uwi3UhiiE4e2c%3D&reserved=0> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3 >>>>>>>>>>>>>>>>A% >>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3 >>>>>>>>>>>>>>>>A%> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharu >>>>>>>>>>>>>>>>i% >>>>>>>>>>>>>>>> 40adobe.com >>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A >>>>>>>>>>>>>>>>%2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f >>>>>>>>>>>>>>>>96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178 >>>>>>>>>>>>>>>>decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT2H >>>>>>>>>>>>>>>>6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%7C1beda9d1dc674 >>>>>>>>>>>>>>>>30b02e608d580210ddc%7Cfa7b1b5a7b34 >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=SJJ >>>>>>>>>>>>>>>>hf >>>>>>>>>>>>>>>> o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0. >>>>> com/?url=https%3A%2F% >>>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02% >>>>> 7C01%7Caharui%40adob >>>>>>>>>>>>>>>> e.com >>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A >>>>>>>>>>>>>>>>%2F%2Fe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f965220 >>>>>>>>>>>>>>>>46fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1 >>>>>>>>>>>>>>>>%7C0%7C0%7C636557667183559337&sdata=9FWfUNZV9xlJqEFYVFVDrZx >>>>>>>>>>>>>>>>5p4lHBqIjIW%2F6cIaQTJw%3D&reserved=0>%7C9ba2ae2d1a6e4fdc774 >>>>>>>>>>>>>>>>508d57fcf >>>>> 6c56%7Cfa7b1b5a7b34438794aed >>>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397& >>>>> sdata=9%2BK%2FO6A3X%2FV >>>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0. >>>>>>>>> com/?url=http%3A%2F%2Feon >>>>>>>>>>>>>>>> .c >>>>>>>>>>>>>>>> om >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> %2F&data=02%7C01%7Caharui%40adobe.com >>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A >>>>>>>>>>>>>>>>%2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f >>>>>>>>>>>>>>>>96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178 >>>>>>>>>>>>>>>>decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT2H >>>>>>>>>>>>>>>>6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>% >>>>>>>>> 7C75519f53f52b4fde36b108d57edb >>>>>>>>>>>>>>>> 59 >>>>>>>>>>>>>>>> 03 >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> %7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0% >>>>>>>>> 7C636554402926763835&sda >>>>>>>>>>>>>>>> ta >>>>>>>>>>>>>>>> =G >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> P3kiCe4imGL1d5mLcQcEGLxLCNgLGK2RheJkPCJgQY%3D&reserved=0>% >>>>>>>>> 2Fpiotrzar >>>>>>>>>>>>>>>> zy >>>>>>>>>>>>>>>> ck >>>>>>>>>>>>>>>> i&data=02%7C01%7Caharui%40adobe.com >>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A >>>>>>>>>>>>>>>>%2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f >>>>>>>>>>>>>>>>96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178 >>>>>>>>>>>>>>>>decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT2H >>>>>>>>>>>>>>>>6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3 >>>>>>>>>>>>>>>>A% >>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3 >>>>>>>>>>>>>>>>A%> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharu >>>>>>>>>>>>>>>>i% >>>>>>>>>>>>>>>> 40adobe.com >>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A >>>>>>>>>>>>>>>>%2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f >>>>>>>>>>>>>>>>96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178 >>>>>>>>>>>>>>>>decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT2H >>>>>>>>>>>>>>>>6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%7C1beda9d1dc674 >>>>>>>>>>>>>>>>30b02e608d580210ddc%7Cfa7b1b5a7b34 >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=SJJ >>>>>>>>>>>>>>>>hf >>>>>>>>>>>>>>>> o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0. >>>>> com/?url=https%3A%2F% >>>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02% >>>>> 7C01%7Caharui%40adob >>>>>>>>>>>>>>>> e.com >>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A >>>>>>>>>>>>>>>>%2F%2Fe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f965220 >>>>>>>>>>>>>>>>46fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1 >>>>>>>>>>>>>>>>%7C0%7C0%7C636557667183559337&sdata=9FWfUNZV9xlJqEFYVFVDrZx >>>>>>>>>>>>>>>>5p4lHBqIjIW%2F6cIaQTJw%3D&reserved=0>%7C9ba2ae2d1a6e4fdc774 >>>>>>>>>>>>>>>>508d57fcf >>>>> 6c56%7Cfa7b1b5a7b34438794aed >>>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397& >>>>> sdata=9%2BK%2FO6A3X%2FV >>>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0. >>>>>>>>> com/?url=http%3A%2F%2F40a >>>>>>>>>>>>>>>> do >>>>>>>>>>>>>>>> be >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> .com%2F&data=02%7C01%7Caharui%40adobe.com >>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A >>>>>>>>>>>>>>>>%2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f >>>>>>>>>>>>>>>>96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178 >>>>>>>>>>>>>>>>decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT2H >>>>>>>>>>>>>>>>6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>% >>>>>>>>> 7C75519f53f52b4fde36b108d5 >>>>>>>>>>>>>>>> 7e >>>>>>>>>>>>>>>> db >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> 5903%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0% >>>>>>>>> 7C636554402926763835 >>>>>>>>>>>>>>>> &s >>>>>>>>>>>>>>>> da >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> ta=r5UrAyOXUfffdyTWxankNj%2F5knjssVb9oxg4tY5sThY%3D& >>>>>>>>> reserved=0>%7Cf2 >>>>>>>>>>>>>>>> 5d >>>>>>>>>>>>>>>> bf >>>>>>>>>>>>>>>> 20138f47 >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> 186d4808d57ed4a8fb%7Cfa7b1b5a7b34438794aed2c178de >>>>>>>>> cee1%7C0%7C0%7C6365 >>>>>>>>>>>>>>>> 54 >>>>>>>>>>>>>>>> 37 >>>>>>>>>>>>>>>> 41 >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> 87322476&sdata=bVfz%2BNfVCmLjO4LzijRozHXQoN1VfVRQS >>>>>>>>> etW7oghI4s%3D&rese >>>>>>>>>>>>>>>> rv >>>>>>>>>>>>>>>> ed >>>>>>>>>>>>>>>> =0 >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3 >>>>>>>>>>>>>>>>A% >>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3 >>>>>>>>>>>>>>>>A%> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharu >>>>>>>>>>>>>>>>i% >>>>>>>>>>>>>>>> 40adobe.com >>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A >>>>>>>>>>>>>>>>%2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f >>>>>>>>>>>>>>>>96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178 >>>>>>>>>>>>>>>>decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT2H >>>>>>>>>>>>>>>>6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%7C1beda9d1dc674 >>>>>>>>>>>>>>>>30b02e608d580210ddc%7Cfa7b1b5a7b34 >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=SJJ >>>>>>>>>>>>>>>>hf >>>>>>>>>>>>>>>> o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0. >>>>> com/?url=https%3A%2F% >>>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02% >>>>> 7C01%7Caharui%40adob >>>>>>>>>>>>>>>> e.com >>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A >>>>>>>>>>>>>>>>%2F%2Fe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f965220 >>>>>>>>>>>>>>>>46fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1 >>>>>>>>>>>>>>>>%7C0%7C0%7C636557667183559337&sdata=9FWfUNZV9xlJqEFYVFVDrZx >>>>>>>>>>>>>>>>5p4lHBqIjIW%2F6cIaQTJw%3D&reserved=0>%7C9ba2ae2d1a6e4fdc774 >>>>>>>>>>>>>>>>508d57fcf >>>>> 6c56%7Cfa7b1b5a7b34438794aed >>>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397& >>>>> sdata=9%2BK%2FO6A3X%2FV >>>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0. >>>>>>>>> com/?url=https%3A%2F%2Fww >>>>>>>>>>>>>>>> w. >>>>>>>>>>>>>>>> pa >>>>>>>>>>>>>>>> tr >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3 >>>>>>>>>>>>>>>>A% >>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3 >>>>>>>>>>>>>>>>A%> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharu >>>>>>>>>>>>>>>>i% >>>>>>>>>>>>>>>> 40adobe.com >>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A >>>>>>>>>>>>>>>>%2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f >>>>>>>>>>>>>>>>96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178 >>>>>>>>>>>>>>>>decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT2H >>>>>>>>>>>>>>>>6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%7C1beda9d1dc674 >>>>>>>>>>>>>>>>30b02e608d580210ddc%7Cfa7b1b5a7b34 >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=SJJ >>>>>>>>>>>>>>>>hf >>>>>>>>>>>>>>>> o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0. >>>>> com/?url=https%3A%2F% >>>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02% >>>>> 7C01%7Caharui%40adob >>>>>>>>>>>>>>>> e.com >>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A >>>>>>>>>>>>>>>>%2F%2Fe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f965220 >>>>>>>>>>>>>>>>46fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1 >>>>>>>>>>>>>>>>%7C0%7C0%7C636557667183559337&sdata=9FWfUNZV9xlJqEFYVFVDrZx >>>>>>>>>>>>>>>>5p4lHBqIjIW%2F6cIaQTJw%3D&reserved=0>%7C9ba2ae2d1a6e4fdc774 >>>>>>>>>>>>>>>>508d57fcf >>>>> 6c56%7Cfa7b1b5a7b34438794aed >>>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397& >>>>> sdata=9%2BK%2FO6A3X%2FV >>>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0. >>>>>>>>> com/?url=https%3A%2F%2Fww >>>>>>>>>>>>>>>> w. >>>>>>>>>>>>>>>> pa >>>>>>>>>>>>>>>> tr> >>>>>>>>>>>>>>>> eon.com >>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A >>>>>>>>>>>>>>>>%2F%2Feon.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f9652 >>>>>>>>>>>>>>>>2046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178dece >>>>>>>>>>>>>>>>e1%7C0%7C0%7C636557667183559337&sdata=4AZuIWAEBmFqifiEmALZY >>>>>>>>>>>>>>>>sFzfTm5U8uwi3UhiiE4e2c%3D&reserved=0> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3 >>>>>>>>>>>>>>>>A% >>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3 >>>>>>>>>>>>>>>>A%> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharu >>>>>>>>>>>>>>>>i% >>>>>>>>>>>>>>>> 40adobe.com >>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A >>>>>>>>>>>>>>>>%2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f >>>>>>>>>>>>>>>>96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178 >>>>>>>>>>>>>>>>decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT2H >>>>>>>>>>>>>>>>6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%7C1beda9d1dc674 >>>>>>>>>>>>>>>>30b02e608d580210ddc%7Cfa7b1b5a7b34 >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=SJJ >>>>>>>>>>>>>>>>hf >>>>>>>>>>>>>>>> o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0. >>>>> com/?url=https%3A%2F% >>>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02% >>>>> 7C01%7Caharui%40adob >>>>>>>>>>>>>>>> e.com >>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A >>>>>>>>>>>>>>>>%2F%2Fe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f965220 >>>>>>>>>>>>>>>>46fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1 >>>>>>>>>>>>>>>>%7C0%7C0%7C636557667183559337&sdata=9FWfUNZV9xlJqEFYVFVDrZx >>>>>>>>>>>>>>>>5p4lHBqIjIW%2F6cIaQTJw%3D&reserved=0>%7C9ba2ae2d1a6e4fdc774 >>>>>>>>>>>>>>>>508d57fcf >>>>> 6c56%7Cfa7b1b5a7b34438794aed >>>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397& >>>>> sdata=9%2BK%2FO6A3X%2FV >>>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0. >>>>>>>>> com/?url=http%3A%2F%2Feon >>>>>>>>>>>>>>>> .c >>>>>>>>>>>>>>>> om >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> %2F&data=02%7C01%7Caharui%40adobe.com >>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A >>>>>>>>>>>>>>>>%2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f >>>>>>>>>>>>>>>>96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178 >>>>>>>>>>>>>>>>decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT2H >>>>>>>>>>>>>>>>6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>% >>>>>>>>> 7C75519f53f52b4fde36b108d57edb >>>>>>>>>>>>>>>> 59 >>>>>>>>>>>>>>>> 03 >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> %7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0% >>>>>>>>> 7C636554402926763835&sda >>>>>>>>>>>>>>>> ta >>>>>>>>>>>>>>>> =G >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> P3kiCe4imGL1d5mLcQcEGLxLCNgLGK2RheJkPCJgQY%3D&reserved=0>% >>>>>>>>> 2Fpiotrzar >>>>>>>>>>>>>>>> zy >>>>>>>>>>>>>>>> ck >>>>>>>>>>>>>>>> i&data=02%7C01%7Caharui%40adobe.com >>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A >>>>>>>>>>>>>>>>%2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f >>>>>>>>>>>>>>>>96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178 >>>>>>>>>>>>>>>>decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT2H >>>>>>>>>>>>>>>>6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3 >>>>>>>>>>>>>>>>A% >>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=https%3 >>>>>>>>>>>>>>>>A%> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>2F%2Fna01.safelinks.protection.outlook&data=02%7C01%7Caharu >>>>>>>>>>>>>>>>i% >>>>>>>>>>>>>>>> 40adobe.com >>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A >>>>>>>>>>>>>>>>%2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f >>>>>>>>>>>>>>>>96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178 >>>>>>>>>>>>>>>>decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT2H >>>>>>>>>>>>>>>>6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%7C1beda9d1dc674 >>>>>>>>>>>>>>>>30b02e608d580210ddc%7Cfa7b1b5a7b34 >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>438794aed2c178decee1%7C0%7C0%7C636555801839809628&sdata=SJJ >>>>>>>>>>>>>>>>hf >>>>>>>>>>>>>>>> o35YeFDCbP6yES0ugobyKR6K9%2FuipoHW%2BMJwkg%3D&reserved=0. >>>>> com/?url=https%3A%2F% >>>>>>>>>>>>>>>> 2Fna01.safelinks.protection.outlook&data=02% >>>>> 7C01%7Caharui%40adob >>>>>>>>>>>>>>>> e.com >>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A >>>>>>>>>>>>>>>>%2F%2Fe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f965220 >>>>>>>>>>>>>>>>46fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1 >>>>>>>>>>>>>>>>%7C0%7C0%7C636557667183559337&sdata=9FWfUNZV9xlJqEFYVFVDrZx >>>>>>>>>>>>>>>>5p4lHBqIjIW%2F6cIaQTJw%3D&reserved=0>%7C9ba2ae2d1a6e4fdc774 >>>>>>>>>>>>>>>>508d57fcf >>>>> 6c56%7Cfa7b1b5a7b34438794aed >>>>>>>>>>>>>>>> 2c178decee1%7C0%7C0%7C636555451956879397& >>>>> sdata=9%2BK%2FO6A3X%2FV >>>>>>>>>>>>>>>> r0TGaLRYxNlYT6va%2BE2FnpXhigerfODc%3D&reserved=0. >>>>>>>>> com/?url=http%3A%2F%2F40a >>>>>>>>>>>>>>>> do >>>>>>>>>>>>>>>> be >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> .com%2F&data=02%7C01%7Caharui%40adobe.com >>>>>>>>>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A >>>>>>>>>>>>>>>>%2F%2F40adobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f >>>>>>>>>>>>>>>>96522046fe4320209108d581d35c0b%7Cfa7b1b5a7b34438794aed2c178 >>>>>>>>>>>>>>>>decee1%7C0%7C0%7C636557667183559337&sdata=rRzLd0%2FtbGWoT2H >>>>>>>>>>>>>>>>6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>% >>>>>>>>> 7C75519f53f52b4fde36b108d5 >>>>>>>>>>>>>>>> 7e >>>>>>>>>>>>>>>> db >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> 5903%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0% >>>>>>>>> 7C636554402926763835 >>>>>>>>>>>>>>>> &s >>>>>>>>>>>>>>>> da >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> ta=r5UrAyOXUfffdyTWxankNj%2F5knjssVb9oxg4tY5sThY%3D& >>>>>>>>> reserved=0>%7Cf2 >>>>>>>>>>>>>>>> 5d >>>>>>>>>>>>>>>> bf >>>>>>>>>>>>>>>> 20138f47 >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> 186d4808d57ed4a8fb%7Cfa7b1b5a7b34438794aed2c178de >>>>>>>>> cee1%7C0%7C0%7C6365 >>>>>>>>>>>>>>>> 54 >>>>>>>>>>>>>>>> 37 >>>>>>>>>>>>>>>> 41 >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> 87322476&sdata=bVfz%2BNfVCmLjO4LzijRozHXQoN1VfVRQS >>>>>>>>> etW7oghI4s%3D&rese >>>>>>>>>>>>>>>> rv >>>>>>>>>>>>>>>> ed >>>>>>>>>>>>>>>> =0 >>>>>>>>>>>>>>>>> * >>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> >>>>>>> Piotr Zarzycki >>>>>>> >>>>>>> Patreon: >>>>>>> *https://na01.safelinks.protection.outlook.com/?url= >>>>>>><https://na01.safelinks.protection.outlook.com/?url=> >>>>> https%3A%2F%2Fwww.pat >>>>>>> reon.com >>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Freo >>>>>>>n.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f96522046fe4320209108d >>>>>>>581d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C6365576671835 >>>>>>>59337&sdata=rvy3d4vYlNuDwe%2BdvdX6swvlerBb31Ki9rlf7C9%2BZis%3D&reser >>>>>>>ved=0>%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com >>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2F40a >>>>>>>dobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f96522046fe43202091 >>>>>>>08d581d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C6365576671 >>>>>>>83559337&sdata=rRzLd0%2FtbGWoT2H6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&rese >>>>>>>rved=0> >>>>> %7C9ba2ae2d1a6e >>>>>>> 4fdc774508d57fcf6c56%7Cfa7b1b5a7b34438794aed2c178de >>>>> cee1%7C0%7C0%7C6365554 >>>>>>> 51956879397&sdata=GQq8YFsWjlmTvhQ3JIbegCvt1P1brQ >>>>> oyfshLnt8lxqg%3D&reserved >>>>>>> =0 >>>>>>> >>>>>>> <https://na01.safelinks.protection.outlook.com/?url= >>>>>>><https://na01.safelinks.protection.outlook.com/?url=> >>>>> https%3A%2F%2Fwww.pat >>>>>>> reon.com >>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Freo >>>>>>>n.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f96522046fe4320209108d >>>>>>>581d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C6365576671835 >>>>>>>59337&sdata=rvy3d4vYlNuDwe%2BdvdX6swvlerBb31Ki9rlf7C9%2BZis%3D&reser >>>>>>>ved=0>%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com >>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2F40a >>>>>>>dobe.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f96522046fe43202091 >>>>>>>08d581d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C6365576671 >>>>>>>83559337&sdata=rRzLd0%2FtbGWoT2H6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&rese >>>>>>>rved=0> >>>>> %7C9ba2ae2d1a6e >>>>>>> 4fdc774508d57fcf6c56%7Cfa7b1b5a7b34438794aed2c178de >>>>> cee1%7C0%7C0%7C6365554 >>>>>>> 51956879397&sdata=GQq8YFsWjlmTvhQ3JIbegCvt1P1brQ >>>>> oyfshLnt8lxqg%3D&reserved >>>>>>> =0>* >>>>>> >>>>> >>>>> >>>> >>>> >>>> -- >>>> >>>> Piotr Zarzycki >>>> >>>> Patreon: >>>> >>>>*https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.p >>>>at >>>><https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.p >>>>at> >>>> reon.com >>>><https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Freon.c >>>>om%2F&data=02%7C01%7Caharui%40adobe.com%7C0f96522046fe4320209108d581d35 >>>>c0b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636557667183559337&sda >>>>ta=rvy3d4vYlNuDwe%2BdvdX6swvlerBb31Ki9rlf7C9%2BZis%3D&reserved=0>%2Fpio >>>>trzarzycki&data=02%7C01%7Caharui%40adobe.com >>>><https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2F40adob >>>>e.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f96522046fe4320209108d581 >>>>d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636557667183559337& >>>>sdata=rRzLd0%2FtbGWoT2H6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%7C1b >>>>eda9d1dc67 >>>> >>>>430b02e608d580210ddc%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C63655 >>>>58 >>>> >>>>01839809628&sdata=EzOsLPee70lr9OpwikrUz9KqGXkWxDo98P6o%2BPGEBK4%3D&rese >>>>rv >>>> ed=0 >>>> >>>> >>>><https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.p >>>>at >>>><https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.p >>>>at> >>>> reon.com >>>><https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Freon.c >>>>om%2F&data=02%7C01%7Caharui%40adobe.com%7C0f96522046fe4320209108d581d35 >>>>c0b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636557667183559337&sda >>>>ta=rvy3d4vYlNuDwe%2BdvdX6swvlerBb31Ki9rlf7C9%2BZis%3D&reserved=0>%2Fpio >>>>trzarzycki&data=02%7C01%7Caharui%40adobe.com >>>><https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2F40adob >>>>e.com%2F&data=02%7C01%7Caharui%40adobe.com%7C0f96522046fe4320209108d581 >>>>d35c0b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636557667183559337& >>>>sdata=rRzLd0%2FtbGWoT2H6WtaVSYIXLxElBY2W7GyNw56dBS8%3D&reserved=0>%7C1b >>>>eda9d1dc67 >>>> >>>>430b02e608d580210ddc%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C63655 >>>>58 >>>> >>>>01839809628&sdata=EzOsLPee70lr9OpwikrUz9KqGXkWxDo98P6o%2BPGEBK4%3D&rese >>>>rv >>>> ed=0>* >
