Good thread, have hard time keeping up to all the details ( end of the day )
I find it helps leave the little technical details for a second and just to chart the process/communication between Pyblish, plug-in, database (if needed?) and the webapp ( I use https://www.draw.io/ to draw, it's "ok" ) I hope a chart would help bring things to light :) On Monday, 29 September 2014 04:18:28 UTC-7, Marcus Ottosson wrote: > > The development server is good enough for testing *but generally not up > to the task of server multiple clients.* > > Aaah, this is what I did not understand. Makes sense, thanks. > > Best, > Marcus > > On 29 September 2014 11:55, Justin Israel <[email protected] > <javascript:>> wrote: > > > On 29/09/2014 11:48 PM, "Marcus Ottosson" <[email protected] > <javascript:>> wrote: > >> > >> It makes no sense to spin up a local web server on every machine, using > the development server. > > > > Sorry, I’m talking about running a single instance of Flask on a single > computer, thus exposing this IP and port and have other computers connect > to it. Like I would assume nginx would do, but wrapping a Flask instance > too, is that right? > > > There we go. Exactly. > The development server is good enough for testing but generally not up to > the task of server multiple clients. uWsgi will let you run your Flask code > as an application, and handles stuff like multiple workers and being able > to roll your Web service updates without downtime. nginx is the httpserver > that can sit in front and reverse proxy to your uWsgi application. It can > do stuff like load balancing between more than once instance of your app, > and is really strong at caching and serving static content without needing > to constantly make your application service do the work. > > So ya you spin up your single application server and all your client > machines talk to it. Where or not it stores any state behind the scenes is > of no consequence to the clients > > > > > > > On 29 September 2014 11:15, Justin Israel <[email protected] > <javascript:>> wrote: > >> > >> > >> > >> On Mon, Sep 29, 2014 at 11:00 PM, Marcus Ottosson <[email protected] > <javascript:>> wrote: > >>>> > >>>> A database doesn’t have to mean a big heavy beast that sits next to > your application. > >>> > >>> I suppose not, but doesn’t it introduce an additional interface for > users if they interact with is using something like SqlAlchemy? Having one > in the background for concurrency and state seems fair. > >> > >> That interface wouldn't be addition nor exposed directly to your users > (ideally). The point of the database is to store things persistently and to > provide robust ways for querying against it, where it can be optimized for > fast access. Your own application might be the one to use sqlalchemy to > interface with your database, and you would expose an API to the actual > users that controls their access. > >> > >>>> > >>>> A few of those illustrations you made are constructed oddly. There > shouldn’t be a database between your plugin and flask (and I am not sure > that was implied as a suggestion)… > >>> > >>> No, I’m sure it wasn’t, just putting it out there for clarity. Which > other illustration did you find odd? > >> > >> > >> Well there were two illustrations that depicted a database sitting > between the plugin and a flask instance, which I didn't understand. > >> > >>>> > >>>> You have to host it with something, which is most commonly uWSGI, > fronted by nginx. > >>> > >>> Aah, did not know that. I expected Flask to run on a machine and other > machines connecting to it’s development instance directly. What are the > disadvantages of doing it this way? Maybe something I’ll need to read up > on.. I’ve only briefly encountered nginx. > >> > >> > >> Yea, I am not really understanding this architecture, which leads me to > believe that maybe you do need to read up a little bit more on what you > want to use Flask for. It makes no sense to spin up a local web server on > every machine, using the development server. What is it for? Why can't the > actual client tool do exactly what it needs to do directly, or everyone > goes through a shared service that performs all of the actions on their > behalf? Is it that you are trying to use Flask as a way to provide a user > interface on each local machine? What is the reason you feel you need a web > service on each local client? If you don't want a centralized service, then > it would seem you just want a desktop application that does the actions > directly. What kind of tasks will this local http service perform that > makes you feel it is the right choice? For all I know, you have a good > reason that I have just not yet heard. > >> > >> When I talked about uWSGI+nginx, that is just the common stack people > like to use these days, when running a production Flask application (as a > shared resource). uWSGI can handle a pool of instances of your application > for improved concurrency. > >> > >>>> > >>>> Sure. You just want a basic http service. You make an http request, > and it does something and returns a response. Makes sense, and my > assumption would be that you would have a Flask instance running on a > server within a facility, and all of the client Pyblish libraries (through > a plugin as you mentioned) would make requests to the service. > >>> > >>> At least, that’s what I’d expect. > >>> > >>> Thanks, Justin. > >>> > >>> Best, > >>> Marcus > >>> > >>> > >>> > >>> On 29 September 2014 10:45, Justin Israel <[email protected] > <javascript:>> wrote: > >>>> > >>>> A few of those illustrations you made are constructed oddly. There > shouldn't be a database between your plugin and flask (and I am not sure > that was implied as a suggestion)... > >>>> > >>>> On Mon, Sep 29, 2014 at 9:57 PM, Marcus Ottosson <[email protected] > <javascript:>> wrote: > >>>>>> > >>>>>> I’m not familiar with Firebase, but I don’t think it is the same > thing as sqlAlchemy. sqlAlchemy is an ORM, which gives you an > object-oriented abstraction around a database using models. > >>>>> > >>>>> Ah, that makes sense. Thanks, Justin. > >>>>>> > >>>>>> It sounds like you want a single network web service running (a > backend powered by either Django or Flask), and for it to provide the > RESTful interface to your Pyblish clients? > >>>>> > >>>>> I think.. so..? From what I gather, you can communicate directly > with a running instance of a Flask server, and I was thinking “why not just > pass data to it directly then?” > >>>> > >>>> > >>>> Flask is just any other web framework. You have to host it with > something, which is most commonly uWSGI, fronted by nginx. For development > purposes you can usually use the included development server to run it > directly as a self-hosted instance. Then ultimately you end up with an http > server. It is up to you to develop and expose http endpoints that could > either be a view that delivers html/js, or purely communicates back and > forth in json. REST endpoints tend to deal in json back and forth, with the > URLs following a common structure and using GET/POST/PUT/DELETE/HEAD > methods. > >>>> > >>>>>> > >>>>>> If it isn’t meant to store real production data (as it may just be > delegating out to other existing services), but you do want it to have some > persistent storage, then it could use an sqlite database for storing state > >>>>> > >>>>> Using a database for data persistence is making too many > assumptions. I can’t assume to have users upload their production data to a > database unique to Pyblish. I’d rather have Pyblish expose data already > available elsewhere, ideally reading from disk directly. > >>>>> > >>>>> In this early stage, the only information I’d like to pass along to > Django/Flask are paths to the data I’d like it to display, along with > perhaps a description of how to display it (“this is an image path”, “this > is the source file” etc.) > >>>>> > >>>>> Do you think that would work? > >>>>> > >>>>> For persistence of the events themselves there might be a database > or just a file. Nothing I’d expose to anyone as it would only be used in > cases of Flask/Django restarting/crashing. > >>>> > >>>> I understand completely. You are saying Pyblish has no real > publish/production data to deal with. It is purely a service. And the only > data is might need to store is the internal state of thing (active > tasks/operations, stats, config, caching, ...). A database doesn't have to > mean a big heavy beast that sits next to your application. It could be > something really small like sqlite, or various embedded key/value stores > that just live within your application. An example would be if one guy is > performing an operation, and another guy wants to list what is currently in > progress. You would need some sort of store for your data (as temporary as > it might be) so that multiple http requests can access the state. > >>>>>> > >>>>>> The only other thing I could guess you might have meant was to have > a local Pyblish service on each host… but I highly doubt that is something > you meant. > >>>>> > >>>>> Could you expand on this? > >>>> > >>>> Well, for a moment I thought you were suggesting that you wanted to > run a flask instance on every client machine. But I couldn't understand the > point of that, so I didn't give it too much thought after that. > >>>> > >>>>> > >>>>> The way I pictured the communication is the same as browsing to any > website. A one-off connection is made, and some data is transferred and > received. There is no lasting connection between Pyblish and Flask/Django. > >>>> > >>>> > >>>> Sure. You just want a basic http service. You make an http request, > and it does something and returns a response. Makes sense, and my > assumption would be that you would have a Flask instance running on a > server within a facility, and all of the client Pyblish libraries (through > a plugin as you mentioned) would make requests to the service. > >>>> > >>>>> > >>>>> Thanks, > >>>>> Marcus > >>>>> > >>>>> > >>>>> > >>>>> On 29 September 2014 09:48, Marcus Ottosson <[email protected] > <javascript:>> wrote: > >>>>>>> > >>>>>>> what type of communication you need from between Pyblish and > Django directly? > >>>>>> > >>>>>> I think this is best answered by the animation and description here: > >>>>>> https://github.com/abstractfactory/pyblish/issues/99 > >>>>>>> > >>>>>>> instead they both communicate to the database like this: > >>>>>>> Pyblish -→ Database ←- Django/Flask > >>>>>> > >>>>>> Thanks Asi, this makes sense, but doesn’t this assume that this > database is used for other things, other than Pyblish and this web frontend? > >>>>>> > >>>>>> Here is how I’m picturing communication currently. > >>>>>> > >>>>>> In which Pyblish doesn’t know about Flask/Django, but it’s plug-in > does. Pyblish is only running plug-ins exposed to it at run-time and has no > knowledge about what they do or how they work. This way, a plug-in can > access the surrounding pipeline, including databases. > >>>>>> > >>>>>> If I understood your description, you meant to have a database > inbetween plug-in and flask. > >>>>>> > >>>>>> The database is either unique to this particular Web Frontend for > Pyblish, but you probably meant to have Pyblish communicate with your > native pipeline database and for it to communicate with Flask. > >>>>>> > >>>>>> But wouldn’t that mean that you would have to “teach” your database > about Pyblish? For example, when Pyblish - or rather, a Pyblish plug-in - > connects and transmits information to your database, it would need to know > to connect to the running Flask instance. > >>>>>> > >>>>>> That sounds ideal if you are building Pyblish as one of your tools > that all depend on a single database. But for a standalone application that > integrates into your pipeline, don’t you think it’s better to have your > pipeline integrate at the plug-in level, and thus not require any knowledge > at all about Flask or other Frontends supplied by Pyblish? > >>>>>> > >>>>>> # Psuedo-code > >>>>>> import mypipeline > >>>>>> import pyblish_flask > >>>>>> > >>>>>> class MyPlugin(pyblish_flask.Plugin): > >>>>>> def process(self): > >>>>>> # In this case, Flask integration is hidden away and accepts > >>>>>> # data like a dictionary or what not. > >>>>>> self.notify(mypipeline.data) > >>>>>> > >>>>>> Best, > >>>>>> Marcus > >>>>>> > >>>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> -- > >>>>> Marcus Ottosson > >>>>> [email protected] <javascript:> > >>>>> > >>>>> -- > >>>>> You received this message because you are subscribed to the Google > Groups "Python Programming for Autodesk Maya" group. > >>>>> To unsubscribe from this group and stop receiving emails from it, > send an email to [email protected] > <javascript:>. > >>>>> To view this discussion on the web visit > https://groups.google.com/d/msgid/python_inside_maya/CAFRtmOB%2BDONG8Xm_vBeaEtftvjU7AOWuVSs4AxPu8ofBp%3DPR8Q%40mail.gmail.com > . > >>>>> > >>>>> For more options, visit https://groups.google.com/d/optout. > >>>> > >>>> > >>>> -- > >>>> You received this message because you are subscribed to the Google > Groups "Python Programming for Autodesk Maya" group. > >>>> To unsubscribe from this group and stop receiving emails from it, > send an email to [email protected] > <javascript:>. > >>>> To view this discussion on the web visit > https://groups.google.com/d/msgid/python_inside_maya/CAPGFgA1ASQyEE61%2BkZK%2BN3dAxMwAuV7XmMMn6oXbbogoibcD3A%40mail.gmail.com > . > >>>> > >>>> For more options, visit https://groups.google.com/d/optout. > >>> > >>> > >>> > >>> > >>> -- > >>> Marcus Ottosson > >>> [email protected] <javascript:> > >>> > >>> -- > >>> You received this message because you are subscribed to the Google > Groups "Python Programming for Autodesk Maya" group. > >>> To unsubscribe from this group and stop receiving emails from it, send > an email to [email protected] <javascript:>. > >>> To view this discussion on the web visit > https://groups.google.com/d/msgid/python_inside_maya/CAFRtmOBFu9OzW6Df-AsefiMBfWSC28-QHHz2n%3DmoUfzBGee6xg%40mail.gmail.com > . > >>> > >>> For more options, visit https://groups.google.com/d/optout. > >> > >> > >> -- > >> You received this message because you are subscribed to the Google > Groups "Python Programming for Autodesk Maya" group. > >> To unsubscribe from this group and stop receiving emails from it, send > an email to [email protected] <javascript:>. > >> To view this discussion on the web visit > https://groups.google.com/d/msgid/python_inside_maya/CAPGFgA1ZAQTXUXbDj4eGjq9ULOFM-sh8Z3TWEmBmnQYu%3D_VCwA%40mail.gmail.com > . > >> > >> For more options, visit https://groups.google.com/d/optout. > > > > > > > > > > -- > > Marcus Ottosson > > [email protected] <javascript:> > > > > -- > > You received this message because you are subscribed to the Google > Groups "Python Programming for Autodesk Maya" group. > > To unsubscribe from this group and stop receiving emails from it, send > an email to [email protected] <javascript:>. > > To view this discussion on the web visit > https://groups.google.com/d/msgid/python_inside_maya/CAFRtmODxngFgVLp%3D9YEhOH-D0V-hn%3DXXqGY_hrqt2P%3D7Rd9K0w%40mail.gmail.com > . > > > > For more options, visit https://groups.google.com/d/optout. > > -- > You received this message because you are subscribed to the Google Groups > "Python Programming for Autodesk Maya" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected] <javascript:>. > To view this discussion on the web visit > https://groups.google.com/d/msgid/python_inside_maya/CAPGFgA37zMG3PTZZKtVvG_YkztF%2BSNBaeebartUYumH3b7r1BQ%40mail.gmail.com > > <https://groups.google.com/d/msgid/python_inside_maya/CAPGFgA37zMG3PTZZKtVvG_YkztF%2BSNBaeebartUYumH3b7r1BQ%40mail.gmail.com?utm_medium=email&utm_source=footer> > . > > For more options, visit https://groups.google.com/d/optout. > > <div > title="MDH:Jmd0O8KgPHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OmFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXpl > > OjEzcHgiPlRoZSBkZXZlbG9wbWVudCBzZXJ2ZXIgaXMgZ29vZCBlbm91Z2ggZm9yIHRlc3Rpbmcg > KipidXQgZ2VuZXJhbGx5IG5vdCB1cCB0byB0aGUgdGFzayBvZiBzZXJ2ZXIgbXVsdGlwbGUgY2xp > ZW50cy4qKjwvc3Bhbj48ZGl2PjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTphcmlhbCxzYW5zLXNl > cmlmO2ZvbnQtc2l6ZToxM3B4Ij48YnI+PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImZv > bnQtZmFtaWx5OmFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEzcHgiPkFhYWgsIHRoaXMgaXMg > d2hhdCBJIGRpZCBub3QgdW5kZXJzdGFuZC4gTWFrZXMgc2Vuc2UsIHRoYW5rcy48L3NwYW4+PC9k > aXY+PGRpdj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6YXJpYWwsc2Fucy1zZXJpZjtmb250LXNp > emU6MTNweCI+PGJyPjwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTph > cmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B4Ij5CZXN0LDwvc3Bhbj48L2Rpdj48ZGl2Pjxz > cGFuIHN0eWxlPSJmb250LWZhbWlseTphcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B4Ij5N > YXJjdXM8L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPjxicj48ZGl2IGNsYXNz > PSJnbWFpbF9xdW90ZSI+T24gMjkgU2VwdGVtYmVyIDIwMTQgMTE6NTUsIEp1c3RpbiBJc3JhZWwg > PHNwYW4gZGlyPSJsdHIiPiZsdDs8YSBocmVmPSJtYWlsdG86anVzdGluaXNyYWVsQGdtYWlsLmNv > bSIgdGFyZ2V0PSJfYmxhbmsiPmp1c3RpbmlzcmFlbEBnbWFpbC5jb208L2E+Jmd0Ozwvc3Bhbj4g > d3JvdGU6PGJyPjxibG9ja3F1b3RlIGNsYXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9Im1hcmdpbjow > IDAgMCAuOGV4O2JvcmRlci1sZWZ0OjFweCAjY2NjIHNvbGlkO3BhZGRpbmctbGVmdDoxZXgiPjxw > IGRpcj0ibHRyIj48c3Bhbj48YnI+Ck9uIDI5LzA5LzIwMTQgMTE6NDggUE0sICJNYXJjdXMgT3R0 > b3Nzb24iICZsdDs8YSBocmVmPSJtYWlsdG86a29uc3RydWt0aW9uQGdtYWlsLmNvbSIgdGFyZ2V0 > PSJfYmxhbmsiPmtvbnN0cnVrdGlvbkBnbWFpbC5jb208L2E+Jmd0OyB3cm90ZTo8YnI+CiZndDsm > Z3Q7PGJyPgomZ3Q7Jmd0OyBJdCBtYWtlcyBubyBzZW5zZSB0byBzcGluIHVwIGEgbG9jYWwgd2Vi > IHNlcnZlciBvbiBldmVyeSBtYWNoaW5lLCB1c2luZyB0aGUgZGV2ZWxvcG1lbnQgc2VydmVyLjxi > cj4KJmd0Ozxicj4KJmd0OyBTb3JyeSwgSeKAmW0gdGFsa2luZyBhYm91dCBydW5uaW5nIGEgc2lu > Z2xlIGluc3RhbmNlIG9mIEZsYXNrIG9uIGEgc2luZ2xlIGNvbXB1dGVyLCB0aHVzIGV4cG9zaW5n > IHRoaXMgSVAgYW5kIHBvcnQgYW5kIGhhdmUgb3RoZXIgY29tcHV0ZXJzIGNvbm5lY3QgdG8gaXQu > IExpa2UgSSB3b3VsZCBhc3N1bWUgbmdpbnggd291bGQgZG8sIGJ1dCB3cmFwcGluZyBhIEZsYXNr > IGluc3RhbmNlIHRvbywgaXMgdGhhdCByaWdodD88YnI+CiZndDs8YnI+PC9zcGFuPgpUaGVyZSB3 > ZSBnby4gRXhhY3RseS4gPGJyPgpUaGUgZGV2ZWxvcG1lbnQgc2VydmVyIGlzIGdvb2QgZW5vdWdo > IGZvciB0ZXN0aW5nIGJ1dCBnZW5lcmFsbHkgbm90IHVwIHRvIHRoZSB0YXNrIG9mIHNlcnZlciBt > dWx0aXBsZSBjbGllbnRzLiB1V3NnaSB3aWxsIGxldCB5b3UgcnVuIHlvdXIgRmxhc2sgY29kZSBh > cyBhbiBhcHBsaWNhdGlvbiwgYW5kIGhhbmRsZXMgc3R1ZmYgbGlrZSBtdWx0aXBsZSB3b3JrZXJz > IGFuZCBiZWluZyBhYmxlIHRvIHJvbGwgeW91ciBXZWIgc2VydmljZSB1cGRhdGVzIHdpdGhvdXQg > ZG93bnRpbWUuIG5naW54IGlzIHRoZSBodHRw7oeqc2VydmVyIHRoYXQgY2FuIHNpdCBpbiBmcm9u > dCBhbmQgcmV2ZXJzZSBwcm94eSB0byB5b3VyIHVXc2dpIGFwcGxpY2F0aW9uLiBJdCBjYW4gZG8g > c3R1ZmYgbGlrZSBsb2FkIGJhbGFuY2luZyBiZXR3ZWVuIG1vcmUgdGhhbiBvbmNlIGluc3RhbmNl > IG9mIHlvdXIgYXBwLCBhbmQgaXMgcmVhbGx5IHN0cm9uZyBhdCBjYWNoaW5nIGFuZCBzZXJ2aW5n > IHN0YXRpYyBjb250ZW50IHdpdGhvdXQgbmVlZGluZyB0byBjb25zdGFudGx5IG1ha2UgeW91ciBh > cHBsaWNhdGlvbiBzZXJ2aWNlIGRvIHRoZSB3b3JrLiA8L3A+CjxwIGRpcj0ibHRyIj5TbyB5YSB5 > b3Ugc3BpbiB1cCB5b3VyIHNpbmdsZSBhcHBsaWNhdGlvbiBzZXJ2ZXIgYW5kIGFsbCB5b3VyIGNs > aWVudCBtYWNoaW5lcyB0YWxrIHRvIGl0LiBXaGVyZSBvciBub3QgaXQgc3RvcmVzIGFueSBzdGF0 > ZSBiZWhpbmQgdGhlIHNjZW5lcyBpcyBvZiBubyBjb25zZXF1ZW5jZSB0byB0aGUgY2xpZW50cyA8 > L3A+CjxwIGRpcj0ibHRyIj48L3A+PGRpdj48ZGl2PiZndDsg4oCLPGJyPgomZ3Q7PGJyPgomZ3Q7 > IE9uIDI5IFNlcHRlbWJlciAyMDE0IDExOjE1LCBKdXN0aW4gSXNyYWVsICZsdDs8YSBocmVmPSJt > YWlsdG86anVzdGluaXNyYWVsQGdtYWlsLmNvbSIgdGFyZ2V0PSJfYmxhbmsiPmp1c3RpbmlzcmFl > bEBnbWFpbC5jb208L2E+Jmd0OyB3cm90ZTo8YnI+CiZndDsmZ3Q7PGJyPgomZ3Q7Jmd0Ozxicj4K > Jmd0OyZndDs8YnI+CiZndDsmZ3Q7IE9uIE1vbiwgU2VwIDI5LCAyMDE0IGF0IDExOjAwIFBNLCBN > YXJjdXMgT3R0b3Nzb24gJmx0OzxhIGhyZWY9Im1haWx0bzprb25zdHJ1a3Rpb25AZ21haWwuY29t > IiB0YXJnZXQ9Il9ibGFuayI+a29uc3RydWt0aW9uQGdtYWlsLmNvbTwvYT4mZ3Q7IHdyb3RlOjxi > cj4KJmd0OyZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7Jmd0OyBBIGRhdGFiYXNlIGRvZXNu > 4oCZdCBoYXZlIHRvIG1lYW4gYSBiaWcgaGVhdnkgYmVhc3QgdGhhdCBzaXRzIG5leHQgdG8geW91 > ciBhcHBsaWNhdGlvbi48YnI+CiZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7IEkgc3VwcG9z > ZSBub3QsIGJ1dCBkb2VzbuKAmXQgaXQgaW50cm9kdWNlIGFuIGFkZGl0aW9uYWwgaW50ZXJmYWNl > IGZvciB1c2VycyBpZiB0aGV5IGludGVyYWN0IHdpdGggaXMgdXNpbmcgc29tZXRoaW5nIGxpa2Ug > U3FsQWxjaGVteT8gSGF2aW5nIG9uZSBpbiB0aGUgYmFja2dyb3VuZCBmb3IgY29uY3VycmVuY3kg > YW5kIHN0YXRlIHNlZW1zIGZhaXIuPGJyPgomZ3Q7Jmd0Ozxicj4KJmd0OyZndDsgVGhhdCBpbnRl > cmZhY2Ugd291bGRuJ3QgYmUgYWRkaXRpb24gbm9yIGV4cG9zZWQgZGlyZWN0bHkgdG8geW91ciB1 > c2VycyAoaWRlYWxseSkuIFRoZSBwb2ludCBvZiB0aGUgZGF0YWJhc2UgaXMgdG8gc3RvcmUgdGhp > bmdzIHBlcnNpc3RlbnRseSBhbmQgdG8gcHJvdmlkZSByb2J1c3Qgd2F5cyBmb3IgcXVlcnlpbmcg > YWdhaW5zdCBpdCwgd2hlcmUgaXQgY2FuIGJlIG9wdGltaXplZCBmb3IgZmFzdCBhY2Nlc3MuIFlv > dXIgb3duIGFwcGxpY2F0aW9uIG1pZ2h0IGJlIHRoZSBvbmUgdG8gdXNlIHNxbGFsY2hlbXkgdG8g > aW50ZXJmYWNlIHdpdGggeW91ciBkYXRhYmFzZSwgYW5kIHlvdSB3b3VsZCBleHBvc2UgYW4gQVBJ > IHRvIHRoZSBhY3R1YWwgdXNlcnMgdGhhdCBjb250cm9scyB0aGVpciBhY2Nlc3MuPGJyPgomZ3Q7 > Jmd0OyAmbmJzcDs8YnI+CiZndDsmZ3Q7Jmd0OyZndDs8YnI+CiZndDsmZ3Q7Jmd0OyZndDsgQSBm > ZXcgb2YgdGhvc2UgaWxsdXN0cmF0aW9ucyB5b3UgbWFkZSBhcmUgY29uc3RydWN0ZWQgb2RkbHku > IFRoZXJlIHNob3VsZG7igJl0IGJlIGEgZGF0YWJhc2UgYmV0d2VlbiB5b3VyIHBsdWdpbiBhbmQg > Zmxhc2sgKGFuZCBJIGFtIG5vdCBzdXJlIHRoYXQgd2FzIGltcGxpZWQgYXMgYSBzdWdnZXN0aW9u > KeKApjxicj4KJmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsgTm8sIEnigJltIHN1cmUgaXQg > d2FzbuKAmXQsIGp1c3QgcHV0dGluZyBpdCBvdXQgdGhlcmUgZm9yIGNsYXJpdHkuIFdoaWNoIG90 > aGVyIGlsbHVzdHJhdGlvbiBkaWQgeW91IGZpbmQgb2RkPzxicj4KJmd0OyZndDs8YnI+CiZndDsm > Z3Q7PGJyPgomZ3Q7Jmd0OyBXZWxsIHRoZXJlIHdlcmUgdHdvIGlsbHVzdHJhdGlvbnMgdGhhdCBk > ZXBpY3RlZCBhIGRhdGFiYXNlIHNpdHRpbmcgYmV0d2VlbiB0aGUgcGx1Z2luIGFuZCBhIGZsYXNr > IGluc3RhbmNlLCB3aGljaCBJIGRpZG4ndCB1bmRlcnN0YW5kLjxicj4KJmd0OyZndDsgJm5ic3A7 > PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7IFlvdSBoYXZlIHRvIGhv > c3QgaXQgd2l0aCBzb21ldGhpbmcsIHdoaWNoIGlzIG1vc3QgY29tbW9ubHkgdVdTR0ksIGZyb250 > ZWQgYnkgbmdpbnguPGJyPgomZ3Q7Jmd0OyZndDs8YnI+CiZndDsmZ3Q7Jmd0OyBBYWgsIGRpZCBu > b3Qga25vdyB0aGF0LiBJIGV4cGVjdGVkIEZsYXNrIHRvIHJ1biBvbiBhIG1hY2hpbmUgYW5kIG90 > aGVyIG1hY2hpbmVzIGNvbm5lY3RpbmcgdG8gaXTigJlzIGRldmVsb3BtZW50IGluc3RhbmNlIGRp > cmVjdGx5LiBXaGF0IGFyZSB0aGUgZGlzYWR2YW50YWdlcyBvZiBkb2luZyBpdCB0aGlzIHdheT8g > TWF5YmUgc29tZXRoaW5nIEnigJlsbCBuZWVkIHRvIHJlYWQgdXAgb24uLiBJ4oCZdmUgb25seSBi > cmllZmx5IGVuY291bnRlcmVkIG5naW54Ljxicj4KJmd0OyZndDs8YnI+CiZndDsmZ3Q7PGJyPgom > Z3Q7Jmd0OyBZZWEsIEkgYW0gbm90IHJlYWxseSB1bmRlcnN0YW5kaW5nIHRoaXMgYXJjaGl0ZWN0 > dXJlLCB3aGljaCBsZWFkcyBtZSB0byBiZWxpZXZlIHRoYXQgbWF5YmUgeW91IGRvIG5lZWQgdG8g > cmVhZCB1cCBhIGxpdHRsZSBiaXQgbW9yZSBvbiB3aGF0IHlvdSB3YW50IHRvIHVzZSBGbGFzayBm > b3IuIEl0IG1ha2VzIG5vIHNlbnNlIHRvIHNwaW4gdXAgYSBsb2NhbCB3ZWIgc2VydmVyIG9uIGV2 > ZXJ5IG1hY2hpbmUsIHVzaW5nIHRoZSBkZXZlbG9wbWVudCBzZXJ2ZXIuIFdoYXQgaXMgaXQgZm9y > PyBXaHkgY2FuJ3QgdGhlIGFjdHVhbCBjbGllbnQgdG9vbCBkbyBleGFjdGx5IHdoYXQgaXQgbmVl > ZHMgdG8gZG8gZGlyZWN0bHksIG9yIGV2ZXJ5b25lIGdvZXMgdGhyb3VnaCBhIHNoYXJlZCBzZXJ2 > aWNlIHRoYXQgcGVyZm9ybXMgYWxsIG9mIHRoZSBhY3Rpb25zIG9uIHRoZWlyIGJlaGFsZj8gSXMg > aXQgdGhhdCB5b3UgYXJlIHRyeWluZyB0byB1c2UgRmxhc2sgYXMgYSB3YXkgdG8gcHJvdmlkZSBh > IHVzZXIgaW50ZXJmYWNlIG9uIGVhY2ggbG9jYWwgbWFjaGluZT8gV2hhdCBpcyB0aGUgcmVhc29u > IHlvdSBmZWVsIHlvdSBuZWVkIGEgd2ViIHNlcnZpY2Ugb24gZWFjaCBsb2NhbCBjbGllbnQ/IElm > IHlvdSBkb24ndCB3YW50IGEgY2VudHJhbGl6ZWQgc2VydmljZSwgdGhlbiBpdCB3b3VsZCBzZWVt > IHlvdSBqdXN0IHdhbnQgYSBkZXNrdG9wIGFwcGxpY2F0aW9uIHRoYXQgZG9lcyB0aGUgYWN0aW9u > cyBkaXJlY3RseS4gV2hhdCBraW5kIG9mIHRhc2tzIHdpbGwgdGhpcyBsb2NhbCBodHRwIHNlcnZp > Y2UgcGVyZm9ybSB0aGF0IG1ha2VzIHlvdSBmZWVsIGl0IGlzIHRoZSByaWdodCBjaG9pY2U/IEZv > ciBhbGwgSSBrbm93LCB5b3UgaGF2ZSBhIGdvb2QgcmVhc29uIHRoYXQgSSBoYXZlIGp1c3Qgbm90 > IHlldCBoZWFyZC4mbmJzcDs8YnI+CiZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyBXaGVuIEkgdGFsa2Vk > IGFib3V0IHVXU0dJK25naW54LCB0aGF0IGlzIGp1c3QgdGhlIGNvbW1vbiBzdGFjayBwZW9wbGUg > bGlrZSB0byB1c2UgdGhlc2UgZGF5cywgd2hlbiBydW5uaW5nIGEgcHJvZHVjdGlvbiBGbGFzayBh > cHBsaWNhdGlvbiAoYXMgYSBzaGFyZWQgcmVzb3VyY2UpLiB1V1NHSSBjYW4gaGFuZGxlIGEgcG9v > bCBvZiBpbnN0YW5jZXMgb2YgeW91ciBhcHBsaWNhdGlvbiBmb3IgaW1wcm92ZWQgY29uY3VycmVu > Y3kuPGJyPgomZ3Q7Jmd0OyAmbmJzcDs8YnI+CiZndDsmZ3Q7Jmd0OyZndDs8YnI+CiZndDsmZ3Q7 > Jmd0OyZndDsgU3VyZS4gWW91IGp1c3Qgd2FudCBhIGJhc2ljIGh0dHAgc2VydmljZS4gWW91IG1h > a2UgYW4gaHR0cCByZXF1ZXN0LCBhbmQgaXQgZG9lcyBzb21ldGhpbmcgYW5kIHJldHVybnMgYSBy > ZXNwb25zZS4gTWFrZXMgc2Vuc2UsIGFuZCBteSBhc3N1bXB0aW9uIHdvdWxkIGJlIHRoYXQgeW91 > IHdvdWxkIGhhdmUgYSBGbGFzayBpbnN0YW5jZSBydW5uaW5nIG9uIGEgc2VydmVyIHdpdGhpbiBh > IGZhY2lsaXR5LCBhbmQgYWxsIG9mIHRoZSBjbGllbnQgUHlibGlzaCBsaWJyYXJpZXMgKHRocm91 > Z2ggYSBwbHVnaW4gYXMgeW91IG1lbnRpb25lZCkgd291bGQgbWFrZSByZXF1ZXN0cyB0byB0aGUg > c2VydmljZS48YnI+CiZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7IEF0IGxlYXN0LCB0aGF0 > 4oCZcyB3aGF0IEnigJlkIGV4cGVjdC48YnI+CiZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7 > IFRoYW5rcywgSnVzdGluLjxicj4KJmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsgQmVzdCw8 > YnI+CiZndDsmZ3Q7Jmd0OyBNYXJjdXM8YnI+CiZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7 > IOKAizxicj4KJmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsgT24gMjkgU2VwdGVtYmVyIDIw > MTQgMTA6NDUsIEp1c3RpbiBJc3JhZWwgJmx0OzxhIGhyZWY9Im1haWx0bzpqdXN0aW5pc3JhZWxA > Z21haWwuY29tIiB0YXJnZXQ9Il9ibGFuayI+anVzdGluaXNyYWVsQGdtYWlsLmNvbTwvYT4mZ3Q7 > IHdyb3RlOjxicj4KJmd0OyZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7Jmd0OyBBIGZldyBv > ZiB0aG9zZSBpbGx1c3RyYXRpb25zIHlvdSBtYWRlIGFyZSBjb25zdHJ1Y3RlZCBvZGRseS4gVGhl > cmUgc2hvdWxkbid0IGJlIGEgZGF0YWJhc2UgYmV0d2VlbiB5b3VyIHBsdWdpbiBhbmQgZmxhc2sg > KGFuZCBJIGFtIG5vdCBzdXJlIHRoYXQgd2FzIGltcGxpZWQgYXMgYSBzdWdnZXN0aW9uKS4uLjxi > cj4KJmd0OyZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7Jmd0OyBPbiBNb24sIFNlcCAyOSwg > MjAxNCBhdCA5OjU3IFBNLCBNYXJjdXMgT3R0b3Nzb24gJmx0OzxhIGhyZWY9Im1haWx0bzprb25z > dHJ1a3Rpb25AZ21haWwuY29tIiB0YXJnZXQ9Il9ibGFuayI+a29uc3RydWt0aW9uQGdtYWlsLmNv > bTwvYT4mZ3Q7IHdyb3RlOjxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0 > OyZndDsmZ3Q7Jmd0OyZndDsgSeKAmW0gbm90IGZhbWlsaWFyIHdpdGggRmlyZWJhc2UsIGJ1dCBJ > IGRvbuKAmXQgdGhpbmsgaXQgaXMgdGhlIHNhbWUgdGhpbmcgYXMgc3FsQWxjaGVteS4gc3FsQWxj > aGVteSBpcyBhbiBPUk0sIHdoaWNoIGdpdmVzIHlvdSBhbiBvYmplY3Qtb3JpZW50ZWQgYWJzdHJh > Y3Rpb24gYXJvdW5kIGEgZGF0YWJhc2UgdXNpbmcgbW9kZWxzLjxicj4KJmd0OyZndDsmZ3Q7Jmd0 > OyZndDs8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7IEFoLCB0aGF0IG1ha2VzIHNlbnNlLiBUaGFu > a3MsIEp1c3Rpbi48YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7 > Jmd0OyZndDsmZ3Q7IEl0IHNvdW5kcyBsaWtlIHlvdSB3YW50IGEgc2luZ2xlIG5ldHdvcmsgd2Vi > IHNlcnZpY2UgcnVubmluZyAoYSBiYWNrZW5kIHBvd2VyZWQgYnkgZWl0aGVyIERqYW5nbyBvciBG > bGFzayksIGFuZCBmb3IgaXQgdG8gcHJvdmlkZSB0aGUgUkVTVGZ1bCBpbnRlcmZhY2UgdG8geW91 > ciBQeWJsaXNoIGNsaWVudHM/PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsm > Z3Q7Jmd0OyZndDsgSSB0aGluay4uIHNvLi4/IEZyb20gd2hhdCBJIGdhdGhlciwgeW91IGNhbiBj > b21tdW5pY2F0ZSBkaXJlY3RseSB3aXRoIGEgcnVubmluZyBpbnN0YW5jZSBvZiBhIEZsYXNrIHNl > cnZlciwgYW5kIEkgd2FzIHRoaW5raW5nIOKAnHdoeSBub3QganVzdCBwYXNzIGRhdGEgdG8gaXQg > ZGlyZWN0bHkgdGhlbj/igJ08YnI+CiZndDsmZ3Q7Jmd0OyZndDs8YnI+CiZndDsmZ3Q7Jmd0OyZn > dDs8YnI+CiZndDsmZ3Q7Jmd0OyZndDsgRmxhc2sgaXMganVzdCBhbnkgb3RoZXIgd2ViIGZyYW1l > d29yay4gWW91IGhhdmUgdG8gaG9zdCBpdCB3aXRoIHNvbWV0aGluZywgd2hpY2ggaXMgbW9zdCBj > b21tb25seSB1V1NHSSwgZnJvbnRlZCBieSBuZ2lueC4gRm9yIGRldmVsb3BtZW50IHB1cnBvc2Vz > IHlvdSBjYW4gdXN1YWxseSB1c2UgdGhlIGluY2x1ZGVkIGRldmVsb3BtZW50IHNlcnZlciB0byBy > dW4gaXQgZGlyZWN0bHkgYXMgYSBzZWxmLWhvc3RlZCBpbnN0YW5jZS4gVGhlbiB1bHRpbWF0ZWx5 > IHlvdSBlbmQgdXAgd2l0aCBhbiBodHRwIHNlcnZlci4gSXQgaXMgdXAgdG8geW91IHRvIGRldmVs > b3AgYW5kIGV4cG9zZSBodHRwIGVuZHBvaW50cyB0aGF0IGNvdWxkIGVpdGhlciBiZSBhIHZpZXcg > dGhhdCBkZWxpdmVycyBodG1sL2pzLCBvciBwdXJlbHkgY29tbXVuaWNhdGVzIGJhY2sgYW5kIGZv > cnRoIGluIGpzb24uIFJFU1QgZW5kcG9pbnRzIHRlbmQgdG8gZGVhbCBpbiBqc29uIGJhY2sgYW5k > IGZvcnRoLCB3aXRoIHRoZSBVUkxzIGZvbGxvd2luZyBhIGNvbW1vbiBzdHJ1Y3R1cmUgYW5kIHVz > aW5nIEdFVC9QT1NUL1BVVC9ERUxFVEUvSEVBRCBtZXRob2RzLiZuYnNwOzxicj4KJmd0OyZndDsm > Z3Q7Jmd0OyAmbmJzcDs8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsm > Z3Q7Jmd0OyZndDsmZ3Q7IElmIGl0IGlzbuKAmXQgbWVhbnQgdG8gc3RvcmUgcmVhbCBwcm9kdWN0 > aW9uIGRhdGEgKGFzIGl0IG1heSBqdXN0IGJlIGRlbGVnYXRpbmcgb3V0IHRvIG90aGVyIGV4aXN0 > aW5nIHNlcnZpY2VzKSwgYnV0IHlvdSBkbyB3YW50IGl0IHRvIGhhdmUgc29tZSBwZXJzaXN0ZW50 > IHN0b3JhZ2UsIHRoZW4gaXQgY291bGQgdXNlIGFuIHNxbGl0ZSBkYXRhYmFzZSBmb3Igc3Rvcmlu > ZyBzdGF0ZTxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDs8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7 > IFVzaW5nIGEgZGF0YWJhc2UgZm9yIGRhdGEgcGVyc2lzdGVuY2UgaXMgbWFraW5nIHRvbyBtYW55 > IGFzc3VtcHRpb25zLiBJIGNhbuKAmXQgYXNzdW1lIHRvIGhhdmUgdXNlcnMgdXBsb2FkIHRoZWly > IHByb2R1Y3Rpb24gZGF0YSB0byBhIGRhdGFiYXNlIHVuaXF1ZSB0byBQeWJsaXNoLiBJ4oCZZCBy > YXRoZXIgaGF2ZSBQeWJsaXNoIGV4cG9zZSBkYXRhIGFscmVhZHkgYXZhaWxhYmxlIGVsc2V3aGVy > ZSwgaWRlYWxseSByZWFkaW5nIGZyb20gZGlzayBkaXJlY3RseS48YnI+CiZndDsmZ3Q7Jmd0OyZn > dDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyBJbiB0aGlzIGVhcmx5IHN0YWdlLCB0aGUg > b25seSBpbmZvcm1hdGlvbiBJ4oCZZCBsaWtlIHRvIHBhc3MgYWxvbmcgdG8gRGphbmdvL0ZsYXNr > IGFyZSBwYXRocyB0byB0aGUgZGF0YSBJ4oCZZCBsaWtlIGl0IHRvIGRpc3BsYXksIGFsb25nIHdp > dGggcGVyaGFwcyBhIGRlc2NyaXB0aW9uIG9mIGhvdyB0byBkaXNwbGF5IGl0ICjigJx0aGlzIGlz > IGFuIGltYWdlIHBhdGjigJ0sIOKAnHRoaXMgaXMgdGhlIHNvdXJjZSBmaWxl4oCdIGV0Yy4pPGJy > PgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsgRG8geW91IHRo > aW5rIHRoYXQgd291bGQgd29yaz88YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0 > OyZndDsmZ3Q7Jmd0OyBGb3IgcGVyc2lzdGVuY2Ugb2YgdGhlIGV2ZW50cyB0aGVtc2VsdmVzIHRo > ZXJlIG1pZ2h0IGJlIGEgZGF0YWJhc2Ugb3IganVzdCBhIGZpbGUuIE5vdGhpbmcgSeKAmWQgZXhw > b3NlIHRvIGFueW9uZSBhcyBpdCB3b3VsZCBvbmx5IGJlIHVzZWQgaW4gY2FzZXMgb2YgRmxhc2sv > RGphbmdvIHJlc3RhcnRpbmcvY3Jhc2hpbmcuPGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7PGJyPgomZ3Q7 > Jmd0OyZndDsmZ3Q7IEkgdW5kZXJzdGFuZCBjb21wbGV0ZWx5LiBZb3UgYXJlIHNheWluZyBQeWJs > aXNoIGhhcyBubyByZWFsIHB1Ymxpc2gvcHJvZHVjdGlvbiBkYXRhIHRvIGRlYWwgd2l0aC4gSXQg > aXMgcHVyZWx5IGEgc2VydmljZS4gQW5kIHRoZSBvbmx5IGRhdGEgaXMgbWlnaHQgbmVlZCB0byBz > dG9yZSBpcyB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhpbmcgKGFjdGl2ZSB0YXNrcy9vcGVyYXRp > b25zLCBzdGF0cywgY29uZmlnLCBjYWNoaW5nLCAuLi4pLiBBIGRhdGFiYXNlIGRvZXNuJ3QgaGF2 > ZSB0byBtZWFuIGEgYmlnIGhlYXZ5IGJlYXN0IHRoYXQgc2l0cyBuZXh0IHRvIHlvdXIgYXBwbGlj > YXRpb24uIEl0IGNvdWxkIGJlIHNvbWV0aGluZyByZWFsbHkgc21hbGwgbGlrZSBzcWxpdGUsIG9y > IHZhcmlvdXMgZW1iZWRkZWQga2V5L3ZhbHVlIHN0b3JlcyB0aGF0IGp1c3QgbGl2ZSB3aXRoaW4g > eW91ciBhcHBsaWNhdGlvbi4gQW4gZXhhbXBsZSB3b3VsZCBiZSBpZiBvbmUgZ3V5IGlzIHBlcmZv > cm1pbmcgYW4gb3BlcmF0aW9uLCBhbmQgYW5vdGhlciBndXkgd2FudHMgdG8gbGlzdCB3aGF0IGlz > IGN1cnJlbnRseSBpbiBwcm9ncmVzcy4gWW91IHdvdWxkIG5lZWQgc29tZSBzb3J0IG9mIHN0b3Jl > IGZvciB5b3VyIGRhdGEgKGFzIHRlbXBvcmFyeSBhcyBpdCBtaWdodCBiZSkgc28gdGhhdCBtdWx0 > aXBsZSBodHRwIHJlcXVlc3RzIGNhbiBhY2Nlc3MgdGhlIHN0YXRlLiZuYnNwOzxicj4KJmd0OyZn > dDsmZ3Q7Jmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsgVGhlIG9ubHkg > b3RoZXIgdGhpbmcgSSBjb3VsZCBndWVzcyB5b3UgbWlnaHQgaGF2ZSBtZWFudCB3YXMgdG8gaGF2 > ZSBhIGxvY2FsIFB5Ymxpc2ggc2VydmljZSBvbiBlYWNoIGhvc3TigKYgYnV0IEkgaGlnaGx5IGRv > dWJ0IHRoYXQgaXMgc29tZXRoaW5nIHlvdSBtZWFudC48YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7 > PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyBDb3VsZCB5b3UgZXhwYW5kIG9uIHRoaXM/PGJyPgom > Z3Q7Jmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7IFdlbGwsIGZvciBhIG1vbWVudCBJ > IHRob3VnaHQgeW91IHdlcmUgc3VnZ2VzdGluZyB0aGF0IHlvdSB3YW50ZWQgdG8gcnVuIGEgZmxh > c2sgaW5zdGFuY2Ugb24gZXZlcnkgY2xpZW50IG1hY2hpbmUuIEJ1dCBJIGNvdWxkbid0IHVuZGVy > c3RhbmQgdGhlIHBvaW50IG9mIHRoYXQsIHNvIEkgZGlkbid0IGdpdmUgaXQgdG9vIG11Y2ggdGhv > dWdodCBhZnRlciB0aGF0LiZuYnNwOzxicj4KJmd0OyZndDsmZ3Q7Jmd0OyAmbmJzcDs8YnI+CiZn > dDsmZ3Q7Jmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyBUaGUgd2F5IEkgcGlj > dHVyZWQgdGhlIGNvbW11bmljYXRpb24gaXMgdGhlIHNhbWUgYXMgYnJvd3NpbmcgdG8gYW55IHdl > YnNpdGUuIEEgb25lLW9mZiBjb25uZWN0aW9uIGlzIG1hZGUsIGFuZCBzb21lIGRhdGEgaXMgdHJh > bnNmZXJyZWQgYW5kIHJlY2VpdmVkLiBUaGVyZSBpcyBubyBsYXN0aW5nIGNvbm5lY3Rpb24gYmV0 > d2VlbiBQeWJsaXNoIGFuZCBGbGFzay9EamFuZ28uPGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7PGJyPgom > Z3Q7Jmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7IFN1cmUuIFlvdSBqdXN0IHdhbnQg > YSBiYXNpYyBodHRwIHNlcnZpY2UuIFlvdSBtYWtlIGFuIGh0dHAgcmVxdWVzdCwgYW5kIGl0IGRv > ZXMgc29tZXRoaW5nIGFuZCByZXR1cm5zIGEgcmVzcG9uc2UuIE1ha2VzIHNlbnNlLCBhbmQgbXkg > YXNzdW1wdGlvbiB3b3VsZCBiZSB0aGF0IHlvdSB3b3VsZCBoYXZlIGEgRmxhc2sgaW5zdGFuY2Ug > cnVubmluZyBvbiBhIHNlcnZlciB3aXRoaW4gYSBmYWNpbGl0eSwgYW5kIGFsbCBvZiB0aGUgY2xp > ZW50IFB5Ymxpc2ggbGlicmFyaWVzICh0aHJvdWdoIGEgcGx1Z2luIGFzIHlvdSBtZW50aW9uZWQp > IHdvdWxkIG1ha2UgcmVxdWVzdHMgdG8gdGhlIHNlcnZpY2UuPGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7 > ICZuYnNwOzxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDs8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7 > IFRoYW5rcyw8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7IE1hcmN1czxicj4KJmd0OyZndDsmZ3Q7 > Jmd0OyZndDs8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7IOKAizxicj4KJmd0OyZndDsmZ3Q7Jmd0 > OyZndDs8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7IE9uIDI5IFNlcHRlbWJlciAyMDE0IDA5OjQ4 > LCBNYXJjdXMgT3R0b3Nzb24gJmx0OzxhIGhyZWY9Im1haWx0bzprb25zdHJ1a3Rpb25AZ21haWwu > Y29tIiB0YXJnZXQ9Il9ibGFuayI+a29uc3RydWt0aW9uQGdtYWlsLmNvbTwvYT4mZ3Q7IHdyb3Rl > Ojxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZn > dDsmZ3Q7Jmd0OyB3aGF0IHR5cGUgb2YgY29tbXVuaWNhdGlvbiB5b3UgbmVlZCBmcm9tIGJldHdl > ZW4gUHlibGlzaCBhbmQgRGphbmdvIGRpcmVjdGx5Pzxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsm > Z3Q7PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsgSSB0aGluayB0aGlzIGlzIGJlc3QgYW5z > d2VyZWQgYnkgdGhlIGFuaW1hdGlvbiBhbmQgZGVzY3JpcHRpb24gaGVyZTo8YnI+CiZndDsmZ3Q7 > Jmd0OyZndDsmZ3Q7Jmd0OyA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vYWJzdHJhY3RmYWN0 > b3J5L3B5Ymxpc2gvaXNzdWVzLzk5IiB0YXJnZXQ9Il9ibGFuayI+aHR0cHM6Ly9naXRodWIuY29t > Lzx3YnI+YWJzdHJhY3RmYWN0b3J5L3B5Ymxpc2gvPHdicj5pc3N1ZXMvOTk8L2E+PGJyPgomZ3Q7 > Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7 > IGluc3RlYWQgdGhleSBib3RoIGNvbW11bmljYXRlIHRvIHRoZSBkYXRhYmFzZSBsaWtlIHRoaXM6 > PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7IFB5Ymxpc2ggLeKGkiBEYXRhYmFzZSDi > hpAtIERqYW5nby9GbGFzazxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0 > OyZndDsmZ3Q7Jmd0OyZndDsgVGhhbmtzIEFzaSwgdGhpcyBtYWtlcyBzZW5zZSwgYnV0IGRvZXNu > 4oCZdCB0aGlzIGFzc3VtZSB0aGF0IHRoaXMgZGF0YWJhc2UgaXMgdXNlZCBmb3Igb3RoZXIgdGhp > bmdzLCBvdGhlciB0aGFuIFB5Ymxpc2ggYW5kIHRoaXMgd2ViIGZyb250ZW5kPzxicj4KJmd0OyZn > dDsmZ3Q7Jmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsgSGVyZSBpcyBo > b3cgSeKAmW0gcGljdHVyaW5nIGNvbW11bmljYXRpb24gY3VycmVudGx5Ljxicj4KJmd0OyZndDsm > Z3Q7Jmd0OyZndDsmZ3Q7PGJyPjwvZGl2PjwvZGl2PjxzcGFuPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0 > OyZndDsgSW4gd2hpY2ggUHlibGlzaCBkb2VzbuKAmXQga25vdyBhYm91dCBGbGFzay9EamFuZ28s > IGJ1dCBpdOKAmXMgcGx1Zy1pbiBkb2VzLiBQeWJsaXNoIGlzIG9ubHkgcnVubmluZyBwbHVnLWlu > cyBleHBvc2VkIHRvIGl0IGF0IHJ1bi10aW1lIGFuZCBoYXMgbm8ga25vd2xlZGdlIGFib3V0IHdo > YXQgdGhleSBkbyBvciBob3cgdGhleSB3b3JrLiBUaGlzIHdheSwgYSBwbHVnLWluIGNhbiBhY2Nl > c3MgdGhlIHN1cnJvdW5kaW5nIHBpcGVsaW5lLCBpbmNsdWRpbmcgZGF0YWJhc2VzLjxicj4KJmd0 > OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7PGJyPjwvc3Bhbj48c3Bhbj4KJmd0OyZndDsmZ3Q7Jmd0OyZn > dDsmZ3Q7IElmIEkgdW5kZXJzdG9vZC > ... -- You received this message because you are subscribed to the Google Groups "Python Programming for Autodesk Maya" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/5409212f-d429-4d0a-ac3d-2dbeeb16bb2c%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
