If inject_html works in the app, that's essentially because the app.js doesn't 
get loaded and run until the injected html is executed.

So, inject_html in a module should do effectively the same thing, except I 
don't think a module needs to inject HTML, it can just take a list of urls to 
load as Script tags.  So, no scanning of files is necessary.  The same 
inject_html mechanism would work in the app or module.  The way the _deps.js 
file is loaded before the main module.js loaded is an example of how to defer 
the loading and execution of module.js until other files are loaded.

HTH,
-Alex

On 6/30/19, 2:50 AM, "Carlos Rovira" <[email protected]> wrote:

    @Harbs, A final thought, as you can see in the problem described, I don't
    want the user, or Module or Application knows about any setup. I just want
    that knowledge is in the Class itself and be performed just by implementing
    "IModuleInfo" in its "setup()" method.
    
    El dom., 30 jun. 2019 a las 11:47, Carlos Rovira (<[email protected]>)
    escribió:
    
    > Hi Harbs,
    >
    > thanks for proposal, but I think still the problem is not clear enough
    > what is causing confusion. I think we have actually the capability to 
chain
    > actions with events as the module load (description of the process below).
    > What I'm pursuing is that a Royale Class present in a Module can perform
    > some initialization setup.
    >
    > I think the issue is in Basic UIModuleUtils, that makes the following
    > process to load a module:
    >
    > 1.- *loadModule()* -> is what ModuleLoader calls to start the process
    >
    >        a.- *createLoader()*  -->  this creates "link" and "script" tags
    > of the module. Following methods are call "onLoad"
    >
    >                - Only for DEBUG:  *loadDepsHandler()*  , setTImeout and
    > then call 3b loadHander
    >
    >               -  Only for RELEASE:  *loadHandler()* , *here's where we
    > create the instance of the main class of the Module and add to the 
parent.*
    >
    >               -  *actuallyLoadModule() *, triggered as the CSS in loadCSS
    > is loaded.
    >
    >        b.- *loadCSS()*        --->  this fills the CSS "link" tag of the
    > module
    >
    > Notice that link and script tags setup there are all well known and
    > related to the normal structure of the module, what we'll want to set up
    > are the ones present in the classes to be loaded from the module at later
    > time.
    >
    > I think the point where we need to act in loadHandler() just before we add
    > the Main module class to the parent.
    > In that point we have all classes loaded, but still are not playing in our
    > App.
    > So There (and this can be PAYG using a UIModuleUtils extension), I want to
    > discover what classes loaded has a "IModuleInfo" interface and call
    > "setup()" method in those ones).
    >
    > Hope, I explained it better and make more sense now.
    >
    >
    >
    >
    >
    >
    >
    >
    > El dom., 30 jun. 2019 a las 11:10, Harbs (<[email protected]>)
    > escribió:
    >
    >> What about another approach?
    >>
    >> Maybe modules can have a two-step initialization:
    >> 1. If there are dependencies, those are loaded with a callback.
    >> 2. Once all the dependencies are loaded, the module is actually
    >> initialized and dispatches some events.
    >>
    >> That way, the parent application does not need to know about the modules
    >> classes.
    >>
    >> > On Jun 30, 2019, at 11:59 AM, Carlos Rovira <[email protected]>
    >> wrote:
    >> >
    >> > Hi Alex,
    >> >
    >> > ok, then can we?
    >> >
    >> > 1.- *load the module (*but still not add it to app, so no start to run)
    >> > 2.- *inspect the classes loaded in the module* to know what of them
    >> > implements a concrete interface (let's call "IModuleInfo")
    >> > 3.- *set up script and link tags* but running IModuleInfo.setup() in 
all
    >> > classes in the module
    >> > 4.- *add the module* to parent so it can start running
    >> >
    >> > If that's ok, for me the tricky part is how to loop over the loaded
    >> classes
    >> > to know the ones that implements IModuleInfo and make a call to setup()
    >> > method.
    >> >
    >> > Point 2 and 3 could be PAYG so it could be added to the module as a
    >> bead.
    >> >
    >> >
    >> > El dom., 30 jun. 2019 a las 8:13, Alex Harui (<[email protected]
    >> >)
    >> > escribió:
    >> >
    >> >> The whole reason for inject_html is so some 3rd party JS can be loaded
    >> >> before Royale JS code starts using it.  Because the loading of the
    >> >> 3rd-party code is a server request and possibly asynchronous, I don't
    >> think
    >> >> we want a pattern where the class that needs some 3rd party code tries
    >> to
    >> >> load that code in its initializers.  That's not now it works in the
    >> main
    >> >> app, so I don't see why it has to work this way in the modules.  Just
    >> have
    >> >> the module set up script tags to load the 3rd party JS before the
    >> module's
    >> >> JS gets loaded.
    >> >>
    >> >> My 2 cents,
    >> >> -Alex
    >> >>
    >> >> On 6/29/19, 3:27 PM, "Carlos Rovira" <[email protected]> wrote:
    >> >>
    >> >>    Hi Alex,
    >> >>
    >> >>    yes the solution is that, so to add dynamically a css or javascript
    >> I
    >> >> want
    >> >>    to do the same way you did in UIModuleUtils.createLoader(), where
    >> you
    >> >>    create a "link" element or a "script" element.
    >> >>    What I really ask is how to trigger a method like that in (lets 
say)
    >> >>    package.MyClass when a user uses that concrete class, and avoiding
    >> the
    >> >> user
    >> >>    explicitly call that method (that's how I set up temporary in the
    >> blog
    >> >>    example).
    >> >>
    >> >>    if user wants to do in a Module this:
    >> >>
    >> >>    import package.MyClass; MyClass;
    >> >>
    >> >>    And the in some part uses just a public static var like this:
    >> >>
    >> >>    var p:String = MyClass.SOME_PUBLIC_STATIC_VAR;
    >> >>
    >> >>    I want Royale runs a function (that will be something like the part
    >> of
    >> >> the
    >> >>    code in UIModuleUtils.createLoader(), where we create a "link" or
    >> >> "script"
    >> >>    element and those get added to the html head.
    >> >>
    >> >>    In the real world example the class is just a proxy to a Material
    >> >> Icons CSS
    >> >>    and when using a classname and a text we get the icon. So in 
Royale,
    >> >> the
    >> >>    user will just need to use the class as always in a binding or
    >> >> assignment
    >> >>    using something like MyClass.SOME_PUBLIC_STATIC_VAR. And until now
    >> we
    >> >> was
    >> >>    getting the CSS linked in the HTML thanks to compiler processing
    >> with
    >> >>    inject_html directive. With Modules I don't see right now a way to
    >> do
    >> >> this
    >> >>    in a transparent way for the user, and making him to add a call in
    >> his
    >> >>    code, seems not a Royale way. That should be a framework call since
    >> is
    >> >>    clear that tthe user is using a var just to print a text and get an
    >> >> icon.
    >> >>
    >> >>    I think I have a solution for this: I remember in Flex days that we
    >> had
    >> >>    something called MIXINS. If I recall correctly that MIXINGS was
    >> >> triggered
    >> >>    in a class that implement Mixing interface and then SytemManager
    >> run a
    >> >>    method in that class. I think we can do the same here. If you think
    >> is
    >> >> ok,
    >> >>    to perform this, the solution could be that Module will hold
    >> >> automatically
    >> >>    a registry of classes that implements a interface. Then when load 
we
    >> >> can
    >> >>    call on the classes of that registry a method of the interface that
    >> >> will
    >> >>    add the necessary "script" or "link" tags to html. If the class is
    >> >> used in
    >> >>    Application, then inject_html does the right work, if is used in
    >> >> Module,
    >> >>    when module loads it calls the method an solves the problem.
    >> >>
    >> >>    What do you think? Don't see other way to solve this.
    >> >>
    >> >>
    >> >>    El sáb., 29 jun. 2019 a las 8:19, Alex Harui
    >> (<[email protected]
    >> >>> )
    >> >>    escribió:
    >> >>
    >> >>> Take a look at UIModuleLoader and UIModuleUtils.  Already it creates
    >> >>> several HTML script and link tags to load a js-debug module.  The
    >> >> patterns
    >> >>> are already there to use as a template to load another script tag
    >> >> that will
    >> >>> add other script tags to the DOM or do just about anything you
    >> >> want.   You
    >> >>> can manually code that additional JS file or have the compiler
    >> >> autogenerate
    >> >>> it from addtionalHTML.  I don't think you want to generate HTML and
    >> >> write
    >> >>> it to innerHTML, but I could be wrong about that.
    >> >>>
    >> >>> In the compiler, the MXMLRoyalePublisher is where the inject_html
    >> >> data is
    >> >>> represented as additionalHTML and can be modified to be working JS.
    >> >>>
    >> >>> HTH,
    >> >>> -Alex
    >> >>>
    >> >>> On 6/28/19, 3:10 PM, "Carlos Rovira" <[email protected]>
    >> >> wrote:
    >> >>>
    >> >>>    For watt you say, I'm more with the second part of your response
    >> >> where
    >> >>> we
    >> >>>    can alter the compiler to modify the additionalHTML, but I think
    >> >> that
    >> >>>    should be based on inject_html like we do in Application. I
    >> >> remember
    >> >>> that
    >> >>>    this problem is less related to a loading of resources problem,
    >> >> that we
    >> >>>    need to wait until the bytes was completely downloaded and we
    >> >> signaled
    >> >>> that
    >> >>>    event. This is more an Annotation-metadata problem where we want
    >> >> that
    >> >>> if
    >> >>>    the user *use* a class we want the html gets decorated with a
    >> >> line of
    >> >>> code,
    >> >>>    and that should happen only once as currently happens when we
    >> >> use the
    >> >>> same
    >> >>>    class in the Application.
    >> >>>
    >> >>>    but If I try. to imagine how to do that, I don't get any idea,
    >> >> since
    >> >>> that
    >> >>>    can be done like we do with main application. In this case, we
    >> >> only
    >> >>> can add
    >> >>>    to the HTML once the user loads the module and that means can't
    >> >> be a
    >> >>>    preprocess in the compiler like is actually in application
    >> >>>
    >> >>>
    >> >>>
    >> >>>
    >> >>>
    >> >>>
    >> >>>
    >> >>>    El sáb., 29 jun. 2019 a las 0:01, Alex Harui
    >> >> (<[email protected]
    >> >>>> )
    >> >>>    escribió:
    >> >>>
    >> >>>> In a quick peek at the code, the ModuleLoader already loads
    >> >> more
    >> >>> than one
    >> >>>> file.  It should be relatively simple to have a subclass or
    >> >> alternate
    >> >>>> ModuleLoaderWithPreloader that loads an additional file that
    >> >> loads
    >> >>> the
    >> >>>> third-party JS.
    >> >>>>
    >> >>>> Also, it appears that it should be relatively simple to alter
    >> >> the
    >> >>> compiler
    >> >>>> to take the additionalHTML and output it to be that additional
    >> >> file.
    >> >>>>
    >> >>>> -Alex
    >> >>>>
    >> >>>> On 6/27/19, 5:24 AM, "Carlos Rovira" <[email protected]>
    >> >>> wrote:
    >> >>>>
    >> >>>>    I'm with you that we can make the compiler optimize the
    >> >> class
    >> >>> and just
    >> >>>> add
    >> >>>>    the constants used, but I think that's is just an
    >> >> optimization
    >> >>> issue. A
    >> >>>>    user will want to use constants this way. They even could
    >> >> create
    >> >>> a
    >> >>>> reduced
    >> >>>>    class with just the constants he needs.
    >> >>>>
    >> >>>>    About preloader, I'm interested in see how to do it. Maybe
    >> >> some
    >> >>> example
    >> >>>>    from you and Yshay could be great to add to blog examples,
    >> >> I can
    >> >>> help
    >> >>>> with
    >> >>>>    that If you want, if you provide an email with the code, or
    >> >>> prepare a
    >> >>>>    project, I can do the rest. It would be good to all of us,
    >> >> so we
    >> >>> can
    >> >>>> learn
    >> >>>>    how to do it.
    >> >>>>
    >> >>>>    But as I stated before in my response to Alex, I don't
    >> >> think the
    >> >>>> preloader
    >> >>>>    is the real problem in this case. Although we use a
    >> >> preloader, I
    >> >>> think
    >> >>>> we
    >> >>>>    still need to solve the inject_html issue in modules don't
    >> >> you
    >> >>> think?
    >> >>>>
    >> >>>>
    >> >>>>
    >> >>>>    El jue., 27 jun. 2019 a las 10:05, Harbs (<
    >> >> [email protected]
    >> >>>> )
    >> >>>> escribió:
    >> >>>>
    >> >>>>> I also don’t know that abstracting this too much is a
    >> >> good
    >> >>> thing.
    >> >>>> It’s a
    >> >>>>> fair trade-off to require declaring external
    >> >> dependencies. It
    >> >>> also
    >> >>>> allows
    >> >>>>> for controlling where the dependencies are coming from,
    >> >>> versioning,
    >> >>>> etc.
    >> >>>>>
    >> >>>>> To me the pattern should be something like this:
    >> >>>>>
    >> >>>>> 1. Add a preloader bead to the app.
    >> >>>>> 2. Declare a list of dependencies for the preloader
    >> >> (which can
    >> >>>> control
    >> >>>>> where these dependencies are loaded from).
    >> >>>>>
    >> >>>>> In the case of something like MaterialIconType.SEARCH, I
    >> >> don’t
    >> >>> think
    >> >>>> the
    >> >>>>> MaterialIconType class should be included in the final
    >> >> app at
    >> >>> all if
    >> >>>> all
    >> >>>>> that’s used is some constants. I hope we eventually
    >> >> optimize
    >> >>> away all
    >> >>>>> constants in the compiler.
    >> >>>>>
    >> >>>>> Harbs
    >> >>>>>
    >> >>>>>> On Jun 27, 2019, at 10:29 AM, Alex Harui
    >> >>> <[email protected]
    >> >>>>>
    >> >>>>> wrote:
    >> >>>>>>
    >> >>>>>> I'm pretty sure in related threads I mentioned that a
    >> >>> preloader is
    >> >>>>> needed.
    >> >>>>>>
    >> >>>>>> -Alex
    >> >>>>>>
    >> >>>>>> On 6/26/19, 8:16 AM, "Carlos Rovira" <
    >> >>> [email protected]>
    >> >>>> wrote:
    >> >>>>>>
    >> >>>>>>   Thanks Spiros,
    >> >>>>>>
    >> >>>>>>   My real problem is the following. I'm trying to
    >> >> improve
    >> >>>> Modules. I
    >> >>>>> found
    >> >>>>>>   that inject_html don't work with modules,
    >> >> Inject_html is
    >> >>>> processed by
    >> >>>>>>   compiler. To solve in an easy way I'm trying to
    >> >> load CSS
    >> >>> and JS
    >> >>>> with
    >> >>>>>>   javascript appending to head.
    >> >>>>>>
    >> >>>>>>   When I load the module and I use a class that needs
    >> >> to
    >> >>> attach
    >> >>>> some
    >> >>>>> JS, I
    >> >>>>>>   want to run a function like "loadJavascript"
    >> >>>>>>
    >> >>>>>>   I created as well "loadCSS" (still not commited).
    >> >>>>>>
    >> >>>>>>   The real use case I'm trying is to use
    >> >> MaterialIconType,
    >> >>> that
    >> >>>> was
    >> >>>>> using
    >> >>>>>>   inject_html. I removed the inject_html directive,
    >> >>>>>>   then added
    >> >>>>>>
    >> >>>>>>   loadCSS('
    >> >>>>>
    >> >>>>
    >> >>>
    >> >>
    >> 
https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Ffonts.googleapis.com%2Ficon%3Ffamily%3DMaterial%2BIcons&amp;data=02%7C01%7Caharui%40adobe.com%7C3bd88a24ac3e4f14d11d08d6fd406978%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636974850477238074&amp;sdata=v58mAdSAMvmjqIT%2FdXExq%2FE8pgd2CTobXSVf0td1IBQ%3D&amp;reserved=0
    >> >>>> '
    >> >>>>> );
    >> >>>>>>
    >> >>>>>>   in the constructor
    >> >>>>>>
    >> >>>>>>   then in my real module I want just to use as always
    >> >>>>>>
    >> >>>>>>   <js:FontIcon text="{MaterialIconType.SEARCH}"
    >> >>> material="true"/>
    >> >>>>>>
    >> >>>>>>   accesing this way does not run the constructor, so
    >> >> the
    >> >>> loadCSS
    >> >>>> code
    >> >>>>> does
    >> >>>>>>   not run :(
    >> >>>>>>
    >> >>>>>>
    >> >>>>>>   We have hundreds of public static vars like
    >> >>>>>>
    >> >>>>>>   public static const SEARCH:String = 'search';
    >> >>>>>>
    >> >>>>>>   So I think the current way you propose, although
    >> >> valid,
    >> >>> will
    >> >>>> not be
    >> >>>>> the
    >> >>>>>>   best here, since will means lots of lines of code.
    >> >>>>>>
    >> >>>>>>   But thanks for your suggestion
    >> >>>>>>
    >> >>>>>>   Hope others could give as well some ideas on how to
    >> >> solve
    >> >>> this
    >> >>>>>>
    >> >>>>>>   thanks
    >> >>>>>>
    >> >>>>>>
    >> >>>>>>
    >> >>>>>>   El mié., 26 jun. 2019 a las 17:05, spiros (<
    >> >>> [email protected]
    >> >>>>> )
    >> >>>>> escribió:
    >> >>>>>>
    >> >>>>>>> It is possible with static getter and seter.
    >> >>>>>>>
    >> >>>>>>> Maybe will help you the code below
    >> >>>>>>>
    >> >>>>>>> Spiros.
    >> >>>>>>>
    >> >>>>>>> public class Variable
    >> >>>>>>>       {
    >> >>>>>>>
    >> >>>>>>>               private static var _textData:String;
    >> >>>>>>>
    >> >>>>>>>               public static function get
    >> >> textData():String
    >> >>>>>>>               {
    >> >>>>>>>                       if( _textData ==null)
    >> >>>>>>>                       {
    >> >>>>>>>                               initailizeVariable();
    >> >>>>>>>                       }
    >> >>>>>>>                       return _textData;
    >> >>>>>>>               }
    >> >>>>>>>
    >> >>>>>>>               public static function set
    >> >>>> textData(value:String):void
    >> >>>>>>>               {
    >> >>>>>>>                       _textData = value;
    >> >>>>>>>               }
    >> >>>>>>>
    >> >>>>>>>               public static function
    >> >>> initailizeVariable():void
    >> >>>>>>>               {
    >> >>>>>>>                       _textData = "The quick brown
    >> >> fox
    >> >>> jump over
    >> >>>> the
    >> >>>>>>> lazy dog.";
    >> >>>>>>>               }
    >> >>>>>>>
    >> >>>>>>>
    >> >>>>>>>               public function Variable()
    >> >>>>>>>               {
    >> >>>>>>>               }
    >> >>>>>>>       }
    >> >>>>>>>
    >> >>>>>>>
    >> >>>>>>>
    >> >>>>>>>
    >> >>>>>>>
    >> >>>>>>> -----Original Message-----
    >> >>>>>>> From: Carlos Rovira [mailto:[email protected]]
    >> >>>>>>> Sent: Wednesday, June 26, 2019 5:49 PM
    >> >>>>>>> To: [email protected]
    >> >>>>>>> Subject: Trying to run a function on a class that is
    >> >> not
    >> >>>> instantiated
    >> >>>>>>>
    >> >>>>>>> Hi,
    >> >>>>>>>
    >> >>>>>>> I need to run a function when I access a public
    >> >> static var
    >> >>> in a
    >> >>>> class.
    >> >>>>>>> Trying to run the function in the constructor seems
    >> >> not to
    >> >>> work
    >> >>>> since
    >> >>>>>>> there's no instance of that class. Do we have some
    >> >> way to
    >> >>> do this?
    >> >>>>>>>
    >> >>>>>>> --
    >> >>>>>>> Carlos Rovira
    >> >>>>>>>
    >> >>>>>
    >> >>>>
    >> >>>
    >> >>
    >> 
https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C3bd88a24ac3e4f14d11d08d6fd406978%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636974850477238074&amp;sdata=keyaoDCEVa2C0PeoFH8q5Wr9Od%2FLHbeH9COyJGEf3VE%3D&amp;reserved=0
    >> >>>>>>>
    >> >>>>>>>
    >> >>>>>>
    >> >>>>>>   --
    >> >>>>>>   Carlos Rovira
    >> >>>>>>
    >> >>>>>
    >> >>>>
    >> >>>
    >> >>
    >> 
https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C3bd88a24ac3e4f14d11d08d6fd406978%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636974850477238074&amp;sdata=keyaoDCEVa2C0PeoFH8q5Wr9Od%2FLHbeH9COyJGEf3VE%3D&amp;reserved=0
    >> >>>>>>
    >> >>>>>>
    >> >>>>>
    >> >>>>>
    >> >>>>
    >> >>>>    --
    >> >>>>    Carlos Rovira
    >> >>>>
    >> >>>>
    >> >>>
    >> >>
    >> 
https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C3bd88a24ac3e4f14d11d08d6fd406978%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636974850477238074&amp;sdata=keyaoDCEVa2C0PeoFH8q5Wr9Od%2FLHbeH9COyJGEf3VE%3D&amp;reserved=0
    >> >>>>
    >> >>>>
    >> >>>>
    >> >>>
    >> >>>    --
    >> >>>    Carlos Rovira
    >> >>>
    >> >>>
    >> >>
    >> 
https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C3bd88a24ac3e4f14d11d08d6fd406978%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636974850477248068&amp;sdata=KPBQl1u%2BvpDz9CuprNCuwzayr64aU%2FofMm3rGUenT2I%3D&amp;reserved=0
    >> >>>
    >> >>>
    >> >>>
    >> >>
    >> >>    --
    >> >>    Carlos Rovira
    >> >>
    >> >>
    >> 
https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C3bd88a24ac3e4f14d11d08d6fd406978%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636974850477248068&amp;sdata=KPBQl1u%2BvpDz9CuprNCuwzayr64aU%2FofMm3rGUenT2I%3D&amp;reserved=0
    >> >>
    >> >>
    >> >>
    >> >
    >> > --
    >> > Carlos Rovira
    >> > 
https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C3bd88a24ac3e4f14d11d08d6fd406978%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636974850477248068&amp;sdata=KPBQl1u%2BvpDz9CuprNCuwzayr64aU%2FofMm3rGUenT2I%3D&amp;reserved=0
    >>
    >>
    >
    > --
    > Carlos Rovira
    > 
https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C3bd88a24ac3e4f14d11d08d6fd406978%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636974850477248068&amp;sdata=KPBQl1u%2BvpDz9CuprNCuwzayr64aU%2FofMm3rGUenT2I%3D&amp;reserved=0
    >
    >
    
    -- 
    Carlos Rovira
    
https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C3bd88a24ac3e4f14d11d08d6fd406978%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636974850477248068&amp;sdata=KPBQl1u%2BvpDz9CuprNCuwzayr64aU%2FofMm3rGUenT2I%3D&amp;reserved=0
    

Reply via email to