I pushed a change to ASJS develop branch that should fix the
selection/rollover issue for the Dynamic beads for ArrayList. After
thinking about Alex's statement regarding selection and adding/removing, I
ran some more tests and discovered that I had inadvertently reset the
selection in those beads. After removing that code, and adding code to
re-index the itemRenderers after they have shifted, both selection and
rollOver seem to be fixed.

—peter

On 1/3/18, 3:08 PM, "Piotr Zarzycki" <[email protected]> wrote:

>It looks good to me.
>
>
>2018-01-03 20:39 GMT+01:00 Peter Ent <[email protected]>:
>
>> Well, that bead only dispatches "dataProvidedChanged" regardless of the
>> reason. And it does so after the data as changed. We want to know before
>> the data changes so we can save the selection and then after the data
>> changes so it can be restored, if possible. We need something to send
>>out
>> an event prior to the changes.
>>
>> ArrayList only sends post-change events. If we listen for when the
>> selectedIndex changes, then we can keep a reference to the item
>>selected.
>> When ArrayList is updated and sends, say a "itemAdded" event, the model
>> must not change the selectedIndex (thus dispatching a event and wiping
>>out
>> our save).
>>
>> I think the right way to do this is:
>>
>> ArrayList - sends itemAdded, itemRemoved, itemUpdated events. This is
>>what
>> it does now.
>>
>> DynamicArrayList - extends ArrayList, and sends itemAdding,
>>itemRemoving,
>> and itemUpdating events prior to making the changes and then calls the
>> super function to dispatch the normal post-change event.
>>
>> DynamicArrayListSelectionModel listens for the "-ing" events and saves
>>the
>> current selection. When it receives the "-ed" event, it restores the
>> selection.
>>
>> I think this will work and should not be disruptive.
>>
>> On 1/3/18, 12:26 PM, "Piotr Zarzycki" <[email protected]> wrote:
>>
>> >Hi Peter,
>> >
>> >What about DataProviderItemsChangeNotifier - It exactly doing what you
>> are
>> >saying and what that restoration bead needs. What do you think ?
>> >
>> >Thanks, Piotr
>> >
>> >
>> >2018-01-03 18:05 GMT+01:00 Peter Ent <[email protected]>:
>> >
>> >> I've spent this morning wrestling with this.
>> >>
>> >> Right now when a model (eg, ArraySelectionModel,
>> >>ArrayListSelectionModel)
>> >> has its dataProvider replaced, it will set the selectedIndex to -1
>>(and
>> >> selectedItem to null) if the dataProvider is being set to null;
>> >>otherwise
>> >> it leaves the values unchanged unless the current value exceeds the
>>size
>> >> of the new dataProvider.
>> >>
>> >> A typical way to change things is to update the dataProvider and then
>> >>set
>> >> the list.dataProvider to null (selectedIndex becomes -1, dispatches
>> >> "selectedIndexChanged") followed setting list.dataProvider back to
>>the
>> >> original dataProvider. This is done because we did not have a dynamic
>> >> system. Reseting the selection in this cause falls on the application
>> >> writer.
>> >>
>> >> For dynamic data, I think we also need a dynamic model (eg,
>> >> DynamicCollectionViewSelectionModel) which is tuned into the needs
>>of a
>> >> dynamic system.
>> >>
>> >> Before changing a dataProvider, the
>>DyanmicCollectionViewSelectionModel
>> >> will dispatch a "dataProviderChanging" event. This would give a
>> >>selection
>> >> restoration bead the opportunity to store the current selection. Then
>> >>upon
>> >> receiving the "dataProviderChanged" event, restore the selection.
>> >>
>> >> Unfortunately, the selection restoration bead still does not know
>>when
>> >>an
>> >> item will be added or removed. While the model can listen for a
>>complete
>> >> replacement of the dataProvider and warning with a
>> >>"dataProviderChanging"
>> >> event, then is no "itemAdding" or "itemRemoving" event prior to an
>>item
>> >> being added or removed. To do this, we will need to having a new
>> >> collection view that extends ArrayList and dispatches those extra
>> >>events.
>> >> Then the selection restoration bead can operate correctly.
>> >>
>> >> This is my current thinking.
>> >>
>> >> —peter
>> >>
>> >>
>> >> On 1/2/18, 4:43 PM, "Alex Harui" <[email protected]> wrote:
>> >>
>> >> >And this one reason we have beads as a pattern.  There is no one
>>right
>> >>way
>> >> >to preserve selection and selection should not always be preserved
>>for
>> >> >certain kinds of data provider changes.  So, create a bead that
>> >>performs
>> >> >the selection preservation you need and give it a name that makes it
>> >>clear
>> >> >what it does.  Then others can create similar beads for other
>> >>strategies.
>> >> >
>> >> >My 2 cents,
>> >> >-Alex
>> >> >
>> >> >On 1/2/18, 1:26 PM, "Piotr Zarzycki" <[email protected]>
>> wrote:
>> >> >
>> >> >>Peter,
>> >> >>
>> >> >>You didn't misread, but my thoughts probably didn't far away into
>> >>problem
>> >> >>resolution. That's why I was surprise why I haven't thought about
>> >> >>preserving selection. :)
>> >> >>
>> >> >>Thanks, Piotr
>> >> >>
>> >> >>
>> >> >>2018-01-02 22:10 GMT+01:00 Peter Ent <[email protected]>:
>> >> >>
>> >> >>> I thought because you mentioned that rollover and selection were
>> >>messed
>> >> >>> up, that was the thing needing attention. I must have misread
>>your
>> >> >>>email;
>> >> >>> I'll go back.
>> >> >>>
>> >> >>> In the meantime, I have a Button that inserts an item into the
>> >> >>> dataProvider. Before doing this I am:
>> >> >>>
>> >> >>> var oldSelection:Object = list.selectedItem; // or
>>selectedIndex??
>> >> >>>
>> >> >>>
>> >> >>> then update the dataProvider by inserting an item into it. For a
>> >>List
>> >> >>>with
>> >> >>> the standard bead set, I have to:
>> >> >>>
>> >> >>> list.dataProvider = null;
>> >> >>> list.dataProvider = applicationModel.dataProvider;
>> >> >>>
>> >> >>> After that, I just restore the selection: list.dataProvider =
>> >> >>>oldSelection
>> >> >>>
>> >> >>> Need to figure out if the dataProvider will change, save the
>> >>selection,
>> >> >>> allow the change, then restore it.
>> >> >>>
>> >> >>> —peter
>> >> >>>
>> >> >>> On 1/2/18, 3:58 PM, "Piotr Zarzycki" <[email protected]>
>> >> wrote:
>> >> >>>
>> >> >>> >How are you doing that preservation, by simply saving item
>> >>somewhere
>> >> >>> >before
>> >> >>> >remove/add operation ?
>> >> >>> >
>> >> >>> >I'm not following the part where we you wanted some opinion.
>> >>Actually
>> >> >>>in
>> >> >>> >case of refreshing I didn't even thing about saving selection,
>>but
>> >> >>>it's
>> >> >>> >true that it should happen! It's surprises me that in my app I
>> >>forgot
>> >> >>> >about
>> >> >>> >that. :)
>> >> >>> >
>> >> >>> >Thanks, Piotr
>> >> >>> >
>> >> >>> >
>> >> >>> >2018-01-02 21:44 GMT+01:00 Peter Ent <[email protected]>:
>> >> >>> >
>> >> >>> >> The first task is to determine if a list's selectedIndex or
>> >> >>>selectedItem
>> >> >>> >> should be preserved.
>> >> >>> >>
>> >> >>> >> For selectedIndex, adding or removing an item will get the
>>same
>> >>row
>> >> >>> >> selected until that row no longer exists.
>> >> >>> >>
>> >> >>> >> For selectedItem, adding or removing an item will keep the
>>same
>> >>item
>> >> >>> >> selected until that item no longer exists. For example, if the
>> >>4th
>> >> >>>item
>> >> >>> >>is
>> >> >>> >> "red" and you insert an item at position 2, "red" remains
>> >>selected
>> >> >>>by
>> >> >>> >> shifts down a row.
>> >> >>> >>
>> >> >>> >> I can see this working both ways.
>> >> >>> >>
>> >> >>> >> In either case, first preserving the selection (index or item)
>> >> >>>before
>> >> >>> >>the
>> >> >>> >> add or remove and then restoring it works fine - I did this in
>> >> >>> >>application
>> >> >>> >> code, not in framework code. Works very nicely, as a matter of
>> >>fact.
>> >> >>> >>Works
>> >> >>> >> for both traditional lists and dynamic lists with the new
>>beads
>> >> >>>(yours,
>> >> >>> >> Piotr, or my new collection ones). Its *very simple* code.
>> >> >>> >>
>> >> >>> >> So once we decide which selection is preserved, we need to
>>decide
>> >> >>>where
>> >> >>> >> that goes. Even though this code is just a couple of lines, in
>> >>the
>> >> >>>PAYG
>> >> >>> >> world, not every app needs this so it must go into additional
>> >>beads
>> >> >>> >>since
>> >> >>> >> it is added functionality.
>> >> >>> >>
>> >> >>> >> —peter
>> >> >>> >>
>> >> >>> >>
>> >> >>> >>
>> >> >>> >>
>> >> >>> >>
>> >> >>> >> On 1/2/18, 1:31 PM, "Piotr Zarzycki"
>><[email protected]>
>> >> >>>wrote:
>> >> >>> >>
>> >> >>> >> >Hi Peter,
>> >> >>> >> >
>> >> >>> >> >Welcome after vacation! I sense all ideas when I'm working
>>with
>> >> >>>that
>> >> >>> >> >stuff.
>> >> >>> >> >I think you will see the issue with indexes, even if it's not
>> >>the
>> >> >>>case
>> >> >>> >> >with
>> >> >>> >> >removing from the list. I will wait for your review with that
>> >>index
>> >> >>> >> >refresh.
>> >> >>> >> >
>> >> >>> >> >Thank you so much! :)
>> >> >>> >> >
>> >> >>> >> >
>> >> >>> >> >2018-01-02 19:10 GMT+01:00 Peter Ent
>><[email protected]>:
>> >> >>> >> >
>> >> >>> >> >> Hi,
>> >> >>> >> >>
>> >> >>> >> >> Catching up and building stuff. I'm going to repeat some
>> >>things
>> >> >>>for
>> >> >>> >>the
>> >> >>> >> >> befit of anyone joining Royale for 2018 (and to refresh my
>>own
>> >> >>> >>thoughts
>> >> >>> >> >> coming off of holiday!).
>> >> >>> >> >>
>> >> >>> >> >> The initial idea of List and related classes was their
>>beads
>> >>were
>> >> >>>to
>> >> >>> >>be
>> >> >>> >> >> almost static. You'd have data that you would use to create
>> >>the
>> >> >>> >> >> dataProvider to the list and when set, would cause the
>> >> >>>itemRenderers
>> >> >>> >>to
>> >> >>> >> >>be
>> >> >>> >> >> deleted and replaced. Even something as simple as adding
>>new
>> >>data
>> >> >>>to
>> >> >>> >>the
>> >> >>> >> >> end of the dataProvider would require this reset: you'd
>>have
>> >>to
>> >> >>>clear
>> >> >>> >> >>the
>> >> >>> >> >> dataProvider (list.dataProver = null) and set it again or
>> >>create
>> >> >>>a
>> >> >>> >> >> completely new dataProvider and set that to the list.
>> >> >>> >> >>
>> >> >>> >> >> The selected item and index should, in this case, be
>>cleared.
>> >>I'd
>> >> >>> >>have
>> >> >>> >> >>to
>> >> >>> >> >> run a test to see if that really happens as I don't
>>remember.
>> >>If
>> >> >>>you
>> >> >>> >> >>want
>> >> >>> >> >> to reset them back (assuming that index still existed) you
>> >>would
>> >> >>> >>write a
>> >> >>> >> >> bead to do it.
>> >> >>> >> >>
>> >> >>> >> >> Now we are at the dynamic stage where we want to handle
>> >>runtime
>> >> >>> >>updates
>> >> >>> >> >>to
>> >> >>> >> >> the dataProvider and create just new itemRenderers and
>>insert
>> >> >>>them or
>> >> >>> >> >> remove itemRenderers when data is deleted from the
>> >>dataProvider.
>> >> >>> >> >>
>> >> >>> >> >> Alex believes that the initial creation and insertions are
>>the
>> >> >>>most
>> >> >>> >> >>common
>> >> >>> >> >> of the dynamic actions; removals being less common. As
>>such in
>> >> >>>the
>> >> >>> >>PAYG
>> >> >>> >> >> world you would have a bead that handled a replacement of
>>the
>> >> >>> >> >>dataProvider
>> >> >>> >> >> (which covers the initialization step) and a bead which
>> >>handled
>> >> >>> >> >>additions
>> >> >>> >> >> and a bead to handle removals. There's a lot of
>>duplication of
>> >> >>>code
>> >> >>> >>in
>> >> >>> >> >> these and under a non-PAYG system you'd just combine these
>> >>into a
>> >> >>> >>single
>> >> >>> >> >> bead to do initialize, add, and removal.
>> >> >>> >> >>
>> >> >>> >> >> In the dynamic beads, the selection should be preserved.
>>That
>> >> >>> >> >>information
>> >> >>> >> >> is stored in the model. The model doesn't do much else
>>accept
>> >> >>>keep
>> >> >>> >>the
>> >> >>> >> >> data. The standard view bead would not know about these
>>extra
>> >> >>>events
>> >> >>> >>so
>> >> >>> >> >> yes, we'd need another view bead to intercept those events
>>and
>> >> >>> >>re-apply
>> >> >>> >> >>or
>> >> >>> >> >> adjust the selection.
>> >> >>> >> >>
>> >> >>> >> >> ‹peter
>> >> >>> >> >>
>> >> >>> >> >> On 12/30/17, 4:29 PM, "Piotr Zarzycki"
>> >> >>><[email protected]>
>> >> >>> >> >>wrote:
>> >> >>> >> >>
>> >> >>> >> >> >Peter,
>> >> >>> >> >> >
>> >> >>> >> >> >I have figure out what is wrong in case of List. I
>>reported
>> >>in
>> >> >>>the
>> >> >>> >> >> >previous
>> >> >>> >> >> >email that in the ListExample once you remove one item,
>> >> >>>something is
>> >> >>> >> >>wrong
>> >> >>> >> >> >with selection. Issue happened when you removing item in
>>the
>> >> >>>middle
>> >> >>> >>of
>> >> >>> >> >> >collection.
>> >> >>> >> >> >
>> >> >>> >> >> >Let's say that you have 5 items and you are removing item
>> >>with
>> >> >>> >>index =
>> >> >>> >> >>2.
>> >> >>> >> >> >Removing will work properly, but StringItemRenderer ->
>> >> >>> >> >> >DataItemRenderer -> UIItemRendererBase
>> >> >>> >> >> ><- has property "index" which is basically not being
>> >>refreshed
>> >> >>>after
>> >> >>> >> >> >remove. In the result renderers has following indexes:
>> >> >>> >> >> >
>> >> >>> >> >> >0,
>> >> >>> >> >> >1,
>> >> >>> >> >> >3,
>> >> >>> >> >> >4
>> >> >>> >> >> >
>> >> >>> >> >> >Which is messes up selection and roll over color changes.
>>How
>> >> >>> >>actually
>> >> >>> >> >>fix
>> >> >>> >> >> >that ? My first thought was that ListView should listen
>>for
>> >> >>> >> >>"layoutNeeded"
>> >> >>> >> >> >(we are dispatching that event after remove, add etc.) and
>> >> >>>refresh
>> >> >>> >> >>indexes
>> >> >>> >> >> >of all renderers.
>> >> >>> >> >> >
>> >> >>> >> >> >The second thought is that ListView should listen for
>>remove
>> >> >>>event,
>> >> >>> >> >>where
>> >> >>> >> >> >we will have index of removed row, so we will be able loop
>> >> >>>through
>> >> >>> >> >>part of
>> >> >>> >> >> >the collection and refresh rest of the indexes. It is more
>> >> >>> >>efficient,
>> >> >>> >> >>but
>> >> >>> >> >> >maybe this is job for new type of View (bead) -
>> >>ListRemoveView
>> >> >>>bead
>> >> >>> >>?
>> >> >>> >> >> >
>> >> >>> >> >> >Looking forward to your thought once you get back from
>> >>Vacation.
>> >> >>>:)
>> >> >>> >> >> >
>> >> >>> >> >> >Thanks, Piotr
>> >> >>> >> >> >
>> >> >>> >> >> >
>> >> >>> >> >> >
>> >> >>> >> >> >2017-12-22 15:05 GMT+01:00 Piotr Zarzycki
>> >> >>> >><[email protected]>:
>> >> >>> >> >> >
>> >> >>> >> >> >> Hi Peter,
>> >> >>> >> >> >>
>> >> >>> >> >> >> I haven't checked your branch yet, but I just pushed
>> >>couple of
>> >> >>> >> >>things to
>> >> >>> >> >> >> the develop which I needed for my examples. Here is the
>> >>list
>> >> >>>of
>> >> >>> >>beads
>> >> >>> >> >> >>which
>> >> >>> >> >> >> we currently have and can be used for List. I think
>>names
>> >>are
>> >> >>>self
>> >> >>> >> >> >> explanatory.
>> >> >>> >> >> >>
>> >> >>> >> >> >> DynamicAddItemRendererForArrayListData
>> >> >>> >> >> >>
>> >> >>> >> >> >> DynamicUpdateItemRendererForArrayListData
>> >> >>> >> >> >>
>> >> >>> >> >> >> DynamicRemoveItemRendererForArrayListData
>> >> >>> >> >> >>
>> >> >>> >> >> >> DynamicRemoveAllItemRendererForArrayListData
>> >> >>> >> >> >>
>> >> >>> >> >> >> DynamicRemoveAllByNullItemRendererForArrayListData
>> >> >>> >> >> >>
>> >> >>> >> >> >> All beads above should be used once you set for your
>>list:
>> >> >>> >> >> >>IDataProviderItemRendererMapper:
>> >> >>> >> >> >>ClassReference("org.apache.royale.html.beads.
>> >> >>> >> >> DataItemRendererFactoryForAr
>> >> >>> >> >> >>rayList")
>> >> >>> >> >> >>
>> >> >>> >> >> >> We have also
>>DynamicItemsRendererFactoryForArrayListData -
>> >> >>>which
>> >> >>> >>is
>> >> >>> >> >> >>doing actually two things. Create all items once someone
>>set
>> >> >>> >> >> >>dataProvider (the same logic as in
>> >> >>> >> >>DataItemRendererFactoryForArrayList)
>> >> >>> >> >> >>AND handle adding to
>> >> >>> >> >> >>
>> >> >>> >> >> >> ArrayList (the same logic as in
>> >> >>> >> >>DynamicAddItemRendererForArrayListData)
>> >> >>> >> >> >>- It duplicates logic from those both beads.
>> >> >>> >> >> >>
>> >> >>> >> >> >>
>> >> >>> >> >> >> Two Scenarios with
>> >> >>>DynamicItemsRendererFactoryForArrayListData:
>> >> >>> >> >> >>
>> >> >>> >> >> >> 1) If we use DynamicItemsRendererFactoryForArrayListData
>> >> >>>simply
>> >> >>> in
>> >> >>> >> >>the
>> >> >>> >> >> >>List as it is in our ListExample [1] we don't have to
>> >>remember
>> >> >>>to
>> >> >>> >> >>setup:
>> >> >>> >> >> >>
>> >> >>> >> >> >> IDataProviderItemRendererMapper:
>> >> >>> >> >> >>ClassReference("org.apache.royale.html.beads.
>> >> >>> >> >> DataItemRendererFactoryForAr
>> >> >>> >> >> >>rayList").
>> >> >>> >> >> >>
>> >> >>> >> >> >> However in that scenario we will have in List totally
>> >>useless
>> >> >>>bead
>> >> >>> >> >> >>DataItemRendererFactoryForArray which is being added
>> default
>> >> to
>> >> >>> the
>> >> >>> >> >> List.
>> >> >>> >> >> >>
>> >> >>> >> >> >> 2) If we use DynamicItemsRendererFactoryForArrayListData
>> >>and
>> >> >>>we
>> >> >>> >>add
>> >> >>> >> >>in
>> >> >>> >> >> >>CSS  IDataProviderItemRendererMapper:
>> >> >>> >> >> >>ClassReference("org.apache.royale.html.beads.
>> >> >>> >> >> DataItemRendererFactoryForAr
>> >> >>> >> >> >>rayList")
>> >> >>> >> >> >>
>> >> >>> >> >> >> I'm not sure what can happen actually, cause both beads
>>are
>> >> >>>using
>> >> >>> >>the
>> >> >>> >> >> >>same logic to create item renderers. Can be situation
>>when
>> >>one
>> >> >>> >>bead is
>> >> >>> >> >> >>create renderers and second one re do this work again ?
>>:)
>> >> >>> >> >> >>
>> >> >>> >> >> >>
>> >> >>> >> >> >> Thanks, Piotr
>> >> >>> >> >> >>
>> >> >>> >> >> >>
>> >> >>> >> >> >>
>> >> >>> >> >> >> [1]
>> >> >>> >> >> >>https://na01.safelinks.protection.outlook.com/?url=
>> >> >>> >> >> https%3A%2F%2Fgithub.c
>> >> >>> >> >> >>om%2Fapache%2Froyale-asjs%2Fblob%
>> >> 2F24b09c787fc1da2d0a19895a2b2d
>> >> >>> >> >> 4a440e26c5
>> >> >>> >> >> >>97%2Fexamples%2Froyale%2FListExample%2Fsrc%2Fmain%
>> >> >>> >> >> 2Froyale%2FMyInitialVie
>> >> >>> >> >> >>w.mxml%23L69&data=02%7C01%7Cpent%40adobe.com%
>> >> >>> >> >> 7C94d879f8f6054e10c75508d54f
>> >> >>> >> >> >>cc6fe8%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>> >> >>> >> >> 7C636502661827506659&sd
>> >> >>> >> >> >>ata=W4Ih5Q0IGhGNvOX9jrmn580Qw4ljo%2BavjqABV4%2BJr%2Bc%3D&
>> >> >>> reserved=0
>> >> >>> >> >> >>
>> >> >>> >> >> >>
>> >> >>> >> >> >>
>> >> >>> >> >> >> 2017-12-19 20:35 GMT+01:00 Olaf Krueger
>> >> >>><[email protected]>:
>> >> >>> >> >> >>
>> >> >>> >> >> >>> Peter, great to read something about these
>>"Collections"
>> >>and
>> >> >>> >> >> >>>"Hierarchical
>> >> >>> >> >> >>> data" stuff here!
>> >> >>> >> >> >>> Thanks for working on this, have a nice time and enjoy
>> >>your
>> >> >>> >>break!
>> >> >>> >> >> >>>
>> >> >>> >> >> >>> Olaf
>> >> >>> >> >> >>>
>> >> >>> >> >> >>>
>> >> >>> >> >> >>>
>> >> >>> >> >> >>> --
>> >> >>> >> >> >>> Sent from:
>> >> >>> >> >> >>>https://na01.safelinks.protection.outlook.com/?url=
>> >> >>> >> >> http%3A%2F%2Fapache-r
>> >> >>> >> >>
>> >>>>>oyale-development.20373.n8.nabble.com%2F&data=02%7C01%7Cpent%
>> >> >>> >> >> 40adobe.com
>> >> >>> >> >> >>>%7C94d879f8f6054e10c75508d54fcc6fe8%
>> >> >>> 7Cfa7b1b5a7b34438794aed2c178de
>> >> >>> >> >> cee1%7
>> >> >>> >> >>
>> >> 
>>>>>>>>C0%7C0%7C636502661827506659&sdata=Zb1nVaD5dUx1Y89Q1jj4LxqBhtlxoZ
>> >> >>> >> >> FlwDFJAq
>> >> >>> >> >> >>>ruTsY%3D&reserved=0
>> >> >>> >> >> >>>
>> >> >>> >> >> >>
>> >> >>> >> >> >>
>> >> >>> >> >> >>
>> >> >>> >> >> >> --
>> >> >>> >> >> >>
>> >> >>> >> >> >> Piotr Zarzycki
>> >> >>> >> >> >>
>> >> >>> >> >> >> Patreon:
>> >> >>> >> >> >>*https://na01.safelinks.protection.outlook.com/?url=
>> >> >>> >> >> https%3A%2F%2Fwww.pat
>> >> >>> >> >> >>reon.com%2Fpiotrzarzycki&data=02%7C01%7Cpent%40adobe.com
>> >> >>> >> >> %7C94d879f8f6054e
>> >> >>> >> >> >>10c75508d54fcc6fe8%7Cfa7b1b5a7b34438794aed2c178de
>> >> >>> >> >> cee1%7C0%7C0%7C636502661
>> >> >>> >> >> 
>>>>827506659&sdata=sjS%2Fmydo1M%2FGkkREJsc5CRyA1uFXRUK76zEHFeg
>> >> >>> >> >> FXtA%3D&reserv
>> >> >>> >> >> >>ed=0
>> >> >>> >> >> >>
>> >> >>> >> >> >><https://na01.safelinks.protection.outlook.com/?url=
>> >> >>> >> >> https%3A%2F%2Fwww.pat
>> >> >>> >> >> >>reon.com%2Fpiotrzarzycki&data=02%7C01%7Cpent%40adobe.com
>> >> >>> >> >> %7C94d879f8f6054e
>> >> >>> >> >> >>10c75508d54fcc6fe8%7Cfa7b1b5a7b34438794aed2c178de
>> >> >>> >> >> cee1%7C0%7C0%7C636502661
>> >> >>> >> >> 
>>>>827506659&sdata=sjS%2Fmydo1M%2FGkkREJsc5CRyA1uFXRUK76zEHFeg
>> >> >>> >> >> FXtA%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%7Cpent%40adobe.com%
>> >> >>> >> >> 7C94d879f8f6054e10
>> >> >>> >> >> >c75508d54fcc6fe8%7Cfa7b1b5a7b34438794aed2c178de
>> >> >>> >> >> cee1%7C0%7C0%7C636502661827
>> >> >>> >> >> >506659&sdata=sjS%2Fmydo1M%2FGkkREJsc5CRyA1uFXRUK76zEHFeg
>> >> >>> >> >> FXtA%3D&reserved=0
>> >> >>> >> >> ><https://na01.safelinks.protection.outlook.com/?url=
>> >> >>> >> >> https%3A%2F%2Fwww.patr
>> >> >>> >> >> >eon.com%2Fpiotrzarzycki&data=02%7C01%7Cpent%40adobe.com%
>> >> >>> >> >> 7C94d879f8f6054e10
>> >> >>> >> >> >c75508d54fcc6fe8%7Cfa7b1b5a7b34438794aed2c178de
>> >> >>> >> >> cee1%7C0%7C0%7C636502661827
>> >> >>> >> >> >506659&sdata=sjS%2Fmydo1M%2FGkkREJsc5CRyA1uFXRUK76zEHFeg
>> >> >>> >> >> FXtA%3D&reserved=0
>> >> >>> >> >> >>*
>> >> >>> >> >>
>> >> >>> >> >>
>> >> >>> >> >
>> >> >>> >> >
>> >> >>> >> >--
>> >> >>> >> >
>> >> >>> >> >Piotr Zarzycki
>> >> >>> >> >
>> >> >>> >> >Patreon:
>> >> >>> >> >*https://na01.safelinks.protection.outlook.com/?url=
>> >> >>> >> https%3A%2F%2Fwww.patr
>> >> >>> >> >eon.com%2Fpiotrzarzycki&data=02%7C01%7Cpent%40adobe.com%
>> >> >>> >> 7C96bb80bb6fef4b94
>> >> >>> >> >089008d5520f1a9f%7Cfa7b1b5a7b34438794aed2c178de
>> >> >>> >> cee1%7C0%7C0%7C636505147194
>> >> >>> >>
>> >> >>> >>>474371&sdata=D3%2FGi2wtNJLEO716RK18TbD1VMFdB3V
>> >> >>> Kv3Br5KkZfFI%3D&reserved=0
>> >> >>> >> ><https://na01.safelinks.protection.outlook.com/?url=
>> >> >>> >> https%3A%2F%2Fwww.patr
>> >> >>> >> >eon.com%2Fpiotrzarzycki&data=02%7C01%7Cpent%40adobe.com%
>> >> >>> >> 7C96bb80bb6fef4b94
>> >> >>> >> >089008d5520f1a9f%7Cfa7b1b5a7b34438794aed2c178de
>> >> >>> >> cee1%7C0%7C0%7C636505147194
>> >> >>> >> >474371&sdata=D3%2FGi2wtNJLEO716RK18TbD1VMFdB3V
>> >> >>> >> Kv3Br5KkZfFI%3D&reserved=0>*
>> >> >>> >>
>> >> >>> >>
>> >> >>> >
>> >> >>> >
>> >> >>> >--
>> >> >>> >
>> >> >>> >Piotr Zarzycki
>> >> >>> >
>> >> >>> >Patreon:
>> >> >>> >*https://na01.safelinks.protection.outlook.com/?url=
>> >> >>> https%3A%2F%2Fwww.patr
>> >> >>> >eon.com%2Fpiotrzarzycki&data=02%7C01%7Cpent%40adobe.com%
>> >> >>> 7C61ec983f6a9747bd
>> >> >>> >cd7d08d552239493%7Cfa7b1b5a7b34438794aed2c178de
>> >> >>> cee1%7C0%7C0%7C636505235128
>> >> >>> >887083&sdata=Y%2BHjYn%2BGj%2Bhb0VVVy7fSW%2BGEvQo2%
>> >> >>> 2FUjH2EhucTbxR8Q%3D&rese
>> >> >>> >rved=0
>> >> >>> ><https://na01.safelinks.protection.outlook.com/?url=
>> >> >>> https%3A%2F%2Fwww.patr
>> >> >>> >eon.com%2Fpiotrzarzycki&data=02%7C01%7Cpent%40adobe.com%
>> >> >>> 7C61ec983f6a9747bd
>> >> >>> >cd7d08d552239493%7Cfa7b1b5a7b34438794aed2c178de
>> >> >>> cee1%7C0%7C0%7C636505235128
>> >> >>> >887083&sdata=Y%2BHjYn%2BGj%2Bhb0VVVy7fSW%2BGEvQo2%
>> >> >>> 2FUjH2EhucTbxR8Q%3D&rese
>> >> >>> >rved=0>*
>> >> >>>
>> >> >>>
>> >> >>
>> >> >>
>> >> >>--
>> >> >>
>> >> >>Piotr Zarzycki
>> >> >>
>> >> >>Patreon:
>> >> >>*https://na01.safelinks.protection.outlook.com/?url=
>> >> https%3A%2F%2Fwww.pat
>> >> >>r
>> >> >>eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com
>> >> %7C4ed02057c74e4
>> >> >>5
>> >> >>0da30908d552277e71%7Cfa7b1b5a7b34438794aed2c178de
>> >> cee1%7C0%7C0%7C636505251
>> >> >>9
>> >>
>> >>>>40120787&sdata=aJzPBX5fyLQVXr21gO9aLOIIQhVMgf
>> 3QaT4qEcsnWE4%3D&reserved=
>> >>>>0
>> >> >><https://na01.safelinks.protection.outlook.com/?url=
>> >> https%3A%2F%2Fwww.pat
>> >> >>r
>> >> >>eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com
>> >> %7C4ed02057c74e4
>> >> >>5
>> >> >>0da30908d552277e71%7Cfa7b1b5a7b34438794aed2c178de
>> >> cee1%7C0%7C0%7C636505251
>> >> >>9
>> >> >>40120787&sdata=aJzPBX5fyLQVXr21gO9aLOIIQhVMgf
>> >> 3QaT4qEcsnWE4%3D&reserved=0>
>> >> >>*
>> >> >
>> >>
>> >>
>> >
>> >
>> >--
>> >
>> >Piotr Zarzycki
>> >
>> >Patreon:
>> >*https://na01.safelinks.protection.outlook.com/?url=
>> https%3A%2F%2Fwww.patr
>> >eon.com%2Fpiotrzarzycki&data=02%7C01%7Cpent%40adobe.com%
>> 7Cbc91b6fdde6b490b
>> >314408d552cf1a3d%7Cfa7b1b5a7b34438794aed2c178de
>> cee1%7C0%7C0%7C636505971860
>> 
>>>386569&sdata=6jY4KSQS6PyNDnWtW3XBVP69nGU%2FHJYfyxHdhurBwh0%3D&reserved=0
>> ><https://na01.safelinks.protection.outlook.com/?url=
>> https%3A%2F%2Fwww.patr
>> >eon.com%2Fpiotrzarzycki&data=02%7C01%7Cpent%40adobe.com%
>> 7Cbc91b6fdde6b490b
>> >314408d552cf1a3d%7Cfa7b1b5a7b34438794aed2c178de
>> cee1%7C0%7C0%7C636505971860
>> >386569&sdata=6jY4KSQS6PyNDnWtW3XBVP69nGU%2FHJYfyxHdhurBwh0%3D&reserved=
>> 0>*
>>
>>
>
>
>-- 
>
>Piotr Zarzycki
>
>Patreon: 
>*https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patr
>eon.com%2Fpiotrzarzycki&data=02%7C01%7Cpent%40adobe.com%7Cc2b7fe26dda441e9
>ad8b08d552e5d3c2%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636506069428
>058895&sdata=glQeY9MSe7BD2za%2FCNT4e%2FB6EZszsrZMeEZ5KkMsPNg%3D&reserved=0
><https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patr
>eon.com%2Fpiotrzarzycki&data=02%7C01%7Cpent%40adobe.com%7Cc2b7fe26dda441e9
>ad8b08d552e5d3c2%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636506069428
>058895&sdata=glQeY9MSe7BD2za%2FCNT4e%2FB6EZszsrZMeEZ5KkMsPNg%3D&reserved=0
>>*

Reply via email to