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.

> On Feb 28, 2018, at 10:17 PM, Alex Harui <aha...@adobe.com.INVALID> 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" <harbs.li...@gmail.com> 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 <aha...@adobe.com.INVALID>
>>> wrote:
>>> 
>>> On 2/28/18, 10:44 AM, "Harbs" <harbs.li...@gmail.com> 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 <aha...@adobe.com.INVALID>
>>>>> wrote:
>>>>> 
>>>>> 
>>>>> 
>>>>> On 2/28/18, 9:50 AM, "Piotr Zarzycki" <piotrzarzyck...@gmail.com
>>>>> <mailto:piotrzarzyck...@gmail.com>> 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 <aha...@adobe.com.invalid>:
>>>>>> 
>>>>>>> I think that in the shadow setter, it would change _shadow and call
>>>>>>> setClassName(computeFinalClassNames());
>>>>>>> 
>>>>>>> On 2/28/18, 9:33 AM, "Piotr Zarzycki" <piotrzarzyck...@gmail.com>
>>>>>>> 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 <aha...@adobe.com.invalid>:
>>>>>>>> 
>>>>>>>>> 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" <piotrzarzyck...@gmail.com>
>>>>>>>>> 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%3D&reserved=
>>>>>>>>>> 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=m6whImrP70u7kzRxCbErlxCHWef8TKNejwm4Sr7bw7g%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=tpeUYSQIXGXtES8hyr7zSeet528ZTczSltcNccqRGDo%3D&reserved=0
>>>>>>>>>> [4]
>>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url=
>>>>>>>>> https%3A%2F%2F1drv.ms%2
>>>>>>>>>> 
>>>>>>>>>> Fu%2Fs!ApVpLyjpHDC2hPtoCi65kIZZPwjSpQ&data=02%7C01%7Caharui%40adob
>>>>>>>>>> e
>>>>>>> .com
>>>>>>>>> %7C
>>>>>>>>>> ee5c84b4e3ff4ddb578008d57e87046f%7Cfa7b1b5a7b34438794aed2c178de
>>>>>>>>> cee1%7C0%7C
>>>>>>>>>> 
>>>>>>>>>> 0%7C636554040718214998&sdata=eX%2FgZ0MA%2BdQJjcpYtMkk1pw3r0iVkdRa%
>>>>>>>>> 2F6TWRTG
>>>>>>>>>> 10OY%3D&reserved=0
>>>>>>>>>> 
>>>>>>>>>> Thanks,
>>>>>>>>>> Piotr
>>>>>>>>>> 
>>>>>>>>>> 2018-02-27 23:31 GMT+01:00 Alex Harui <aha...@adobe.com.invalid>:
>>>>>>>>>> 
>>>>>>>>>>> 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"
>>>>>>>>>>> <piotrzarzyck...@gmail.com>
>>>>>>>>> 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
>>>>>>>>> <piotrzarzyck...@gmail.com>:
>>>>>>>>>>>> 
>>>>>>>>>>>>> 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 <harbs.li...@gmail.com>:
>>>>>>>>>>>>> 
>>>>>>>>>>>>>> ExpandableSearch broke too.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> On Feb 25, 2018, at 6:15 PM, Piotr Zarzycki
>>>>>>>>>>>>>> <piotrzarzyck...@gmail.com>
>>>>>>>>>>>>>> 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.com
>>>>>>>>>>> %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.com
>>>>>>>>>>> %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.com%
>>>>>>>>>>> 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.com%
>>>>>>>>>>> 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.com%
>>>>>>>>> 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.com%
>>>>>>>>> 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=rypScmQqTsmVcrUIZRNnaoZP5VMbI0oJqA6J42ZuhcA%3D&reserv
>>>>>>>> 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%3A%2F%2Fwww.
>>>>>> pa
>>>>>> tr 
>>>>>> 
>>>>>> <https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.
>>>>>> pa
>>>>>> tr>
>>>>>> eon.com 
>>>>>> 
>>>>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Feon.c
>>>>>> om
>>>>>> 
>>>>>> %2F&data=02%7C01%7Caharui%40adobe.com%7C75519f53f52b4fde36b108d57edb59
>>>>>> 03
>>>>>> 
>>>>>> %7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636554402926763835&sdata
>>>>>> =G
>>>>>> 
>>>>>> P3kiCe4imGL1d5mLcQcEGLxLCNgLGK2RheJkPCJgQY%3D&reserved=0>%2Fpiotrzarzy
>>>>>> ck
>>>>>> i&data=02%7C01%7Caharui%40adobe.com
>>>>>> 
>>>>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2F40ado
>>>>>> be
>>>>>> 
>>>>>> .com%2F&data=02%7C01%7Caharui%40adobe.com%7C75519f53f52b4fde36b108d57e
>>>>>> db
>>>>>> 
>>>>>> 5903%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636554402926763835&s
>>>>>> da
>>>>>> 
>>>>>> ta=r5UrAyOXUfffdyTWxankNj%2F5knjssVb9oxg4tY5sThY%3D&reserved=0>%7Cf25d
>>>>>> bf
>>>>>> 20138f47
>>>>>> 
>>>>>> 
>>>>>> 186d4808d57ed4a8fb%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636554
>>>>>> 37
>>>>>> 41
>>>>>> 
>>>>>> 
>>>>>> 87322476&sdata=bVfz%2BNfVCmLjO4LzijRozHXQoN1VfVRQSetW7oghI4s%3D&reserv
>>>>>> ed
>>>>>> =0
>>>>>> 
>>>>>> 
>>>>>> <https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.
>>>>>> pa
>>>>>> tr 
>>>>>> 
>>>>>> <https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.
>>>>>> pa
>>>>>> tr>
>>>>>> eon.com 
>>>>>> 
>>>>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Feon.c
>>>>>> om
>>>>>> 
>>>>>> %2F&data=02%7C01%7Caharui%40adobe.com%7C75519f53f52b4fde36b108d57edb59
>>>>>> 03
>>>>>> 
>>>>>> %7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636554402926763835&sdata
>>>>>> =G
>>>>>> 
>>>>>> P3kiCe4imGL1d5mLcQcEGLxLCNgLGK2RheJkPCJgQY%3D&reserved=0>%2Fpiotrzarzy
>>>>>> ck
>>>>>> i&data=02%7C01%7Caharui%40adobe.com
>>>>>> 
>>>>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2F40ado
>>>>>> be
>>>>>> 
>>>>>> .com%2F&data=02%7C01%7Caharui%40adobe.com%7C75519f53f52b4fde36b108d57e
>>>>>> db
>>>>>> 
>>>>>> 5903%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636554402926763835&s
>>>>>> da
>>>>>> 
>>>>>> ta=r5UrAyOXUfffdyTWxankNj%2F5knjssVb9oxg4tY5sThY%3D&reserved=0>%7Cf25d
>>>>>> bf
>>>>>> 20138f47
>>>>>> 
>>>>>> 
>>>>>> 186d4808d57ed4a8fb%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636554
>>>>>> 37
>>>>>> 41
>>>>>> 
>>>>>> 
>>>>>> 87322476&sdata=bVfz%2BNfVCmLjO4LzijRozHXQoN1VfVRQSetW7oghI4s%3D&reserv
>>>>>> ed
>>>>>> =0
>>>>>>> *
>>>> 
>>> 
>> 
> 

Reply via email to