This is a read-only archive of the old Scratch 1.x Forums.
Try searching the current Scratch discussion forums.

#6426 2012-12-21 02:54:39

MathWizz
Scratcher
Registered: 2009-08-31
Posts: 1000+

Re: BYOB 3 - Discussion Thread

Yes, but that isn't Snap. For it be effective, you need your entire program in version control.


http://block.site90.net/scratch.mit/text.php?size=30&text=%20A%20signature!&color=333333

Offline

 

#6427 2012-12-21 04:18:58

Jens
Scratcher
Registered: 2007-06-04
Posts: 1000+

Re: BYOB 3 - Discussion Thread

Well, Morphic in itself is pretty standalone and frequently discussed, often here in this forum. There are quite a few other applications besides Snap! using Morphic, so I would assume that there is some kind of value in a public source repository, at least to all of those who would like to change it, or at least say so. But so far this hasn't happened, which is fine with me, really.

How about someone post other standalone modules like ypr->snap to git and tries to fix those for a change? I'm tired of all the nagging about Snap, its source code and its source control by people whose own code is guarded against collaboration by all kinds of obfuscation and secrecy. Seriously, what happened to Panther? How easy was it to write version 2?

Last edited by Jens (2012-12-21 06:37:26)


Jens Mönig

Offline

 

#6428 2012-12-21 09:12:12

Jens
Scratcher
Registered: 2007-06-04
Posts: 1000+

Re: BYOB 3 - Discussion Thread

Hi Hardmath123,

when I compared your changeset to Scratch's behavior I also noticed slight differences when a mosaiced sprite rotates. In Scratch each of the tiny "projections" rotate, whereas in your version the whole canvas does. I'm really open towards any of these. Any idea how to either change yours to mimick Scratch's or to justify the difference  smile  ?


Jens Mönig

Offline

 

#6429 2012-12-21 13:14:04

nXIII
Community Moderator
Registered: 2009-04-21
Posts: 1000+

Re: BYOB 3 - Discussion Thread

Jens wrote:

Well, Morphic in itself is pretty standalone and frequently discussed, often here in this forum.

That's no reason not to put Snap! under version control.

I'm tired of all the nagging about Snap, its source code and its source control by people whose own code is guarded against collaboration by all kinds of obfuscation and secrecy.

I wrote ypr->xml in a few days as a fork of sb.js, which is under version control. It's not kept under "secrecy" (it uses a less restrictive license than Snap!) or "obfuscation" (it's less than 1500 lines of clear, concise, well-formatted JavaScript), and it's certainly not "guarded against collaboration" (if you send me a patch or feature, I'll use it rather than rejecting it because I don't like self-evaluating functions).

Seriously, what happened to Panther? How easy was it to write version 2?

I didn't like where Panther was going so I discontinued it an focused on other projects. I didn't try to write version 2, so I don't know how easy it would have been. It had nothing to do with difficulty.

Last edited by nXIII (2012-12-21 13:16:02)


nXIII

Offline

 

#6430 2012-12-21 13:40:59

alloplastic
New Scratcher
Registered: 2012-08-30
Posts: 12

Re: BYOB 3 - Discussion Thread

Hi, all.

I don't know if this will be of general interest or not, but yesterday I released an open source library of BYOB 3 blocks aimed at game development.  I had the idea to package up the library with a bunch of tutorial videos for my students and then decided I might as well share it.

     http://www.newlifeinteractive.com/technologies/gameblocks

I'm going to try to handle tech support and user contributions on my own forums, but I'd be interested in finding contributors from the Scratch community who can help make the toolkit more robust and useful.

At present, the library actually contains just a bit too much code for the BYOB 3 UI to handle efficiently.  (My best diagnosis.)  So I've broken the library into 3 YPR files.  I'm very much looking forward to OOP being supported in Snap so that I can do a port.  :-)

Offline

 

#6431 2012-12-21 15:44:50

xly
Scratcher
Registered: 2010-04-17
Posts: 100+

Re: BYOB 3 - Discussion Thread

alloplastic wrote:

Hi, all.

I don't know if this will be of general interest or not, but yesterday I released an open source library of BYOB 3 blocks aimed at game development.  I had the idea to package up the library with a bunch of tutorial videos for my students and then decided I might as well share it.

I like your Byob video tutorial .Maybe you can find some ideas by going to my :

http://www.xleroy.net/ByobTuto/thumbnails.html

Last edited by xly (2012-12-21 15:47:35)

Offline

 

#6432 2012-12-21 16:46:35

Jens
Scratcher
Registered: 2007-06-04
Posts: 1000+

Re: BYOB 3 - Discussion Thread

nXIII wrote:

Jens wrote:

Well, Morphic in itself is pretty standalone and frequently discussed, often here in this forum.

That's no reason not to put Snap! under version control.

Snap's versions are all archived and publicly accessible both in total and again for each version of every single file. Are you giving away that much for all the code you're writing?

nXIII wrote:

I didn't like where Panther was going so I discontinued it an focused on other projects. I didn't try to write version 2, so I don't know how easy it would have been. It had nothing to do with difficulty.

Oh, but others tried hard to get another version out, didn't they? But because you discontinued it, nobody else was able to accomplish much.

I find discussions like these increasingly frustrating. Maybe the Scratch team's way of not sharing anything during development would have been the right way for Snap, too.

Last edited by Jens (2012-12-21 16:47:01)


Jens Mönig

Offline

 

#6433 2012-12-21 17:16:10

MathWizz
Scratcher
Registered: 2009-08-31
Posts: 1000+

Re: BYOB 3 - Discussion Thread

I understand your argument and that you already have a way of controlling versions, but in my opinion, it could all be made many times easier if you used git. Just one command and you have committed, instantly creating an archive of Snap. If you make a mistake and a bug shows up, you can type another command and it will revert to previous commits so you can find the cause of the bug. Isn't this easier than copying many archives of previous version around trying to find the faulty one? Mind you, I'm fine with you sticking with your current method, but I am curious of the reasoning for this. I just don't see what you have against git.


http://block.site90.net/scratch.mit/text.php?size=30&text=%20A%20signature!&color=333333

Offline

 

#6434 2012-12-21 17:18:01

nXIII
Community Moderator
Registered: 2009-04-21
Posts: 1000+

Re: BYOB 3 - Discussion Thread

Jens wrote:

nXIII wrote:

Jens wrote:

Well, Morphic in itself is pretty standalone and frequently discussed, often here in this forum.

That's no reason not to put Snap! under version control.

Snap's versions are all archived and publicly accessible both in total and again for each version of every single file. Are you giving away that much for all the code you're writing?

Firstly: Yes, I am. Almost all of my (non-tiny) projects have git repos.
Secondly: You didn't address my point. While that is a kind of version control, there are many superior tools for controlling and managing versions of software which allow for easy and effective collaboration. It would be better if Snap! used one of those tools. I suggested git because I like git and it was a very appropriate tool for solving the issue from which this discussion arose, but there are many others that are equally as useful.

nXIII wrote:

I didn't like where Panther was going so I discontinued it an focused on other projects. I didn't try to write version 2, so I don't know how easy it would have been. It had nothing to do with difficulty.

Oh, but others tried hard to get another version out, didn't they?

Yep.

But because you discontinued it, nobody else was able to accomplish much.

Nope. The reason they couldn't make another version was because I was the only person on the Panther team who knew Squeak at all.* Not knowing Squeak made it a lot harder to modify Panther, which was written in Squeak.

I find discussions like these increasingly frustrating. Maybe the Scratch team's way of not sharing anything during development would have been the right way for Snap, too.

The Scratch Team is sharing one part of Scratch 2.0 (the forums) while they are developing it. They let me help contribute to that part, and I have fixed about 40 bugs as of today, which they would have otherwise had to assign to one of their (already extremely busy) core developers. I don't think there's anything wrong with doing things that way.

* Aside from MathWizz, who was busy working on a bunch of other projects

Last edited by nXIII (2012-12-21 17:22:52)


nXIII

Offline

 

#6435 2012-12-21 18:28:48

Jens
Scratcher
Registered: 2007-06-04
Posts: 1000+

Re: BYOB 3 - Discussion Thread

... and you contributed a wonderful variety of enhancements, features and bugfixes to Snap!

So, while they're letting you fix bugs in their forums, how do they react when you question the architecture of their editor and evaluator, or the openness of their source repo? How supportive are they about branching the Scratch 2.0 source code at this point? Assuming you have been granted full access to everything...

Last edited by Jens (2012-12-21 18:30:21)


Jens Mönig

Offline

 

#6436 2012-12-21 18:37:11

nXIII
Community Moderator
Registered: 2009-04-21
Posts: 1000+

Re: BYOB 3 - Discussion Thread

Jens wrote:

So, while they're letting you fix bugs in their forums, how do they react when you question the architecture of their editor and evaluator, or the openness of their source repo?

They explain the thinking behind their decisions carefully and thoughtfully.

How supportive are they about branching the Scratch 2.0 source code at this point?

Very supportive! I contributed most of my changes through my fork of their repo.

Last edited by nXIII (2012-12-21 18:39:58)


nXIII

Offline

 

#6437 2012-12-21 18:52:52

bharvey
Scratcher
Registered: 2008-08-10
Posts: 1000+

Re: BYOB 3 - Discussion Thread

nXIII wrote:

Jens wrote:

C'mon, guys.

Nathan, you're not going to change Jens's mind about this by arguing in the forum.

Jens, you're not going to change Nathan's mind by ad hominem arguments.

Everybody, right now Jens is under a lot of pressure to get Snap! out of alpha status (meaning, mostly, getting the back end done, which is under way), which is why he's putting off integrating even Hardmath's Jens-approved-submission-method contribution until later.  When this version is out the door, maybe we can calmly reconsider the question of forked development.

PS I'm under pressure, too, btw, getting the manual and other documentation finished!  So, sorry if anybody's toes feel stepped on.  hmm


http://cs.berkeley.edu/~bh/sig5.png

Offline

 

#6438 2012-12-21 20:03:23

shadow_7283
Scratcher
Registered: 2007-11-07
Posts: 1000+

Re: BYOB 3 - Discussion Thread

Slight usability issue: whenever a sound is imported, played, and then deleted by being dragged into the block pane, the sound continues to play.

EDIT: A watcher that is dragged into the block pane will be deleted, but the checkbox will remain on and a second click keeps it on but makes the watcher reappear. Perhaps when the watcher is deleted the checkbox should uncheck?

EDIT2: Not sure if this is undesirable, but Chrome has places a focus outline around the canvas that is partially cut off in Snap!. A simple

Code:

outline:none;
-webkit-tap-highlight-color: rgba(255, 255, 255, 0); (for Android)

will solve that.

EDIT3: Again, not sure if intentional or not, but this can happen:
http://i48.tinypic.com/dfipuw.png
(image because I'm not sure of the terminology)
Not exactly a bug, but probably undesirable.

EDIT4: Global and local variables aren't handled separately. If you create a global variable of name "x" and then create a local variable, the local replaces the global for one sprite, but another sprite will have the global version of the variable. In addition, creating a variable of the same name toggles the watcher checkbox, which I thought was strange. Perhaps trying to name two variables the same should throw an error?

Last edited by shadow_7283 (2012-12-21 20:55:19)

Offline

 

#6439 2012-12-21 22:05:04

bharvey
Scratcher
Registered: 2008-08-10
Posts: 1000+

Re: BYOB 3 - Discussion Thread

shadow_7283 wrote:

EDIT4: Global and local variables aren't handled separately. If you create a global variable of name "x" and then create a local variable, the local replaces the global for one sprite, but another sprite will have the global version of the variable. In addition, creating a variable of the same name toggles the watcher checkbox, which I thought was strange. Perhaps trying to name two variables the same should throw an error?

I have no opinion on the others (except, thanks for reporting them!), but this behavior is correct.  Imagine you have 100 sprites that share some datum and then one sprite that's different -- the black sheep, so to speak.  Makes perfect sense.

(I'm not saying it's the best programming style, but since we haven't implemented OOP yet, it may be the best available in 4.0.  smile  )


http://cs.berkeley.edu/~bh/sig5.png

Offline

 

#6440 2012-12-21 22:58:18

shadow_7283
Scratcher
Registered: 2007-11-07
Posts: 1000+

Re: BYOB 3 - Discussion Thread

Wouldn't it be better to distinguish between local and global variables though? For all a user knows, the variable never changed, when in reality the new local variable is displayed where the global variable was.

Offline

 

#6441 2012-12-21 23:31:36

bharvey
Scratcher
Registered: 2008-08-10
Posts: 1000+

Re: BYOB 3 - Discussion Thread

shadow_7283 wrote:

Wouldn't it be better to distinguish between local and global variables though? For all a user knows, the variable never changed, when in reality the new local variable is displayed where the global variable was.

If you have a watcher for the variable, it'll be labelled, e.g., sprite3's foo.  But, you know, what happens when you say

Code:

int foo;

function blah(x) {
   int foo;
   ...
}

in one of those text-based languages?  If you use the same name for two variables it's presumably because you're deliberately shadowing the global one.  (Newbies won't make local variables at all!)


http://cs.berkeley.edu/~bh/sig5.png

Offline

 

#6442 2012-12-21 23:44:51

Hardmath123
Scratcher
Registered: 2010-02-19
Posts: 1000+

Re: BYOB 3 - Discussion Thread

Jens wrote:

Hi Hardmath123,

When I compared your changeset to Scratch's behavior I also noticed slight differences when a mosaiced sprite rotates. In Scratch each of the tiny "projections" rotate, whereas in your version the whole canvas does. I'm really open towards any of these. Any idea how to either change yours to mimick Scratch's or to justify the difference  smile  ?

Hmm. That's tougher. I'd probably override the drawing method within Morphic, so that that runs the Mosicifier, but I'm going to have to search for it. Alternatively, though this may be a bigger change, the underlying Morphic drawing can just draw the image without rotation, and the SpriteMorph's drawing method rotates it locally. That's cleaner, but then I don't know if Morphic's rotation adds another bunch of goodies of not.

I'd personally prefer my way because it makes more sense (to me, duh, but probably also to others). The graphic effect of the sprite affects the costume, not the whole sprite. Since rotation isn't a costume property, one would expect rotation of a sprite to turn the entire costume regardless of mosaicness. To put it another way, you rotate a "sprite", while you mosaicify the "costume". Anyway, it's easy to write your own Scratch-stye mosaic block in Snap! with stamp and Warp, right?  wink

Does mosaic also get priority over whirl and fisheye?

Last edited by Hardmath123 (2012-12-21 23:52:42)


Hardmaths-MacBook-Pro:~ Hardmath$ sudo make $(whoami) a sandwich

Offline

 

#6443 2012-12-22 03:04:48

xly
Scratcher
Registered: 2010-04-17
Posts: 100+

Re: BYOB 3 - Discussion Thread

nXIII wrote:

They explain the thinking behind their decisions carefully and thoughtfull

nXIII, be serious, how can you compare the individual  (remarkable) effort of Jens to the collective effort of a whole Department of a prestigious University, where they have time to "split hairs in four". I

Offline

 

#6444 2012-12-22 04:25:47

Jens
Scratcher
Registered: 2007-06-04
Posts: 1000+

Re: BYOB 3 - Discussion Thread

Hardmath123 wrote:

The graphic effect of the sprite affects the costume, not the whole sprite. Since rotation isn't a costume property, one would expect rotation of a sprite to turn the entire costume regardless of mosaicness. To put it another way, you rotate a "sprite", while you mosaicify the "costume".

I was sorta thinking the same, when I asked for a "justification". Let's keep mosaic your way, then, and just change the increment to steps of ten, okay? Actually, you don't need to change anything, I've got your changeset and will simply adjust it accordingly when I integrate it (sometime early next year).

Thanks!


Jens Mönig

Offline

 

#6445 2012-12-22 08:21:11

Hardmath123
Scratcher
Registered: 2010-02-19
Posts: 1000+

Re: BYOB 3 - Discussion Thread

You're totally welcome. If I'll get time, I'll do the incrementing fix for you: all I need to do is a simple floor(x/100)*100.  smile


Hardmaths-MacBook-Pro:~ Hardmath$ sudo make $(whoami) a sandwich

Offline

 

#6446 2012-12-22 08:45:47

Hardmath123
Scratcher
Registered: 2010-02-19
Posts: 1000+

Re: BYOB 3 - Discussion Thread

Code:

/* Test this with: #open:%3Cproject%20name%3D%22Mosaic_Stress_Test%22%20app%3D%22Snap!%204.0%2C%20http%3A%2F%2Fsnap.berkeley.edu%22%20version%3D%221%22%3E%3Cnotes%3E%3C%2Fnotes%3E%3Cthumbnail%3Edata%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAYAAAB1ovlvAABAAElEQVR4Ae3dB5hdV3Uv8DVFvVdLVhtJtiV3bGxjYyDYpveSvEcSEiCP8EI1OCSQhCLAVJv2IFRTQgs9CS3YEMAG927ZVrV67xqN2mhGevt3rtbM0bVMkvfoaH3fvfeUvdde5b%2FXXnufclsOFYpj9Bttge3bt8erX%2F3quO%2B%2B%2B2LAgAExd%2B7c2LFjR%2Bzduze4b8e25fFP714br37Po4%2FQo6enJzZs2BDDhw%2Bvjnd1dcXEiRNj4MCB1f7%2B%2Fftj%2Ffr1MWTIkOqY8wcPHoxTTjkltmzZUn3qZYcNGxbHH398xXP27Nmxbdu2I9rb1romxh6aEgfbe6OlnGnpaYs4ZCuiu7u7Kj9o0KBoaWmp9vft2xft1dljX7%2BRFlixYkVceumlsXHjxgCWU089NTo7OyvQ9Pb2Rs%2B%2BB%2BLiCwfHOXNXxZyO%2FXH%2BGZvipnsm9unS1lYAUCNABDJgAFxgHjFiROzevTuA4fTTT69433%2F%2F%2FXHWWWdVYAP%2BJGVWrlwZI0eOjAMHDlRAqsevUQcmx64598eIpadmlaqtnTt3Vp1FW%2FTwwWPSpEnRUhgci4B95vrN2LjlllvizW9%2Bc9SdL3IBnQ%2FaumVd3PLV%2BbFtZ0v88Wvnxvc%2BtiD2H2iP5152SZ8SyoqAIlczAVBG0JNPPrkqB9znnntuBchdu3ZVIG2ut2fPngo8gDhlypTm07FvxNYY1Dm2ApkoLQprX1vanDBhQrS3twc%2BqPVBHI4d%2BLVZ4Dvf%2BU5ccskl8apXveoI8HHcqFGj%2BsBHwLHjJsfNdw%2BKsaMOxVmntsVt9w6IoYN7Ym7Hjj75RSxRrk6ij4gEnLNmzaoi4NKlS2POnDnVB2CXLFkSpy9bHANK2WbCT2QeOnRorFu37ojTYtmhTUNjzZo1lfyGWwTY06dPryKeCGx4pxM6FgErM%2Fx6v6666qr43Oc%2BVwGDE%2BVdokQS0ACIiFKnA3tXxA8%2FsyjWbW6Nl79lZnz1A8vjde8%2FL%2B5fNrIaUjnasIeAER9AHjNmTAUQIMBXdPKR%2F02687Z4yZ7GsHuw1Fsxemx86fRzKx6%2ByLd27do46aSTKgCqh8hraPdL%2Fno%2BuXXr1ti8eXOItCIr0hZ9%2BrWsDh%2F7%2BlVa4O1vf3uIepxyzjnnVPmX9jmHwziytbW1yrVMFJoB2DZoejyw6oEYN6Y1DsTsePorZ1cg2759Q8UD%2BAx1gCbfQgCTQ%2Fu0adP6oqFzu4scz9nbabMiw%2BOsHdtiUG9P7G9rQIVsJhHyUkSuJLJqrzmffNjDHlblk%2BRXF8lPx40bdywCpvF%2BVb%2Bc8%2FrXvz6uv%2F76ChiSfUMUxzWn4yJYRkKOE72aqb3tUHQfOFQ5XaQxRBr6TCwMsyeeeGIF8IxUWR8oTWo2bdqUh2JLGTrfv%2Fy%2Bagbbd7BsfPaM82LNqDHVIXx9dA4zYsOwPC%2FlN4M2jAObfFK79GvWLfkfi4BpiV%2FyryWLXErhvNNOO62KRJZBHopEMCCUxBve5G51EIpGO3fvraKlSKQccBhqcylFPsb5gClCJQGncnUaVyYVq1Yvjhk9jfzMuZ4C%2FHUjR1fFdB7ypAx4i970kU86Jz8844wzquOiJCDum7AtxgwaF53ry3D9mJUx%2Fo7z%2Bpo9lgP2meKXs7Fs2bJ4zWte0zcbNewZAjlz%2B74t0Tt5V4zsmhTbY32MfFiZMd4%2Bt08QAOPEHObsiygiHDDJs0wGREfAA7RcSgEGQMjhVsRLMGsA%2BJStR0DHB%2B7uiicvXRCndm6L7pLP%2FVOJfmsHDKrAT2adwq%2F6llIAb%2Fny5apWET2BT5ZVJ9wcI%2F6kDLtWg8pay6GSVNoe%2BcHHROu2xtB9DICV6X7xXzfddFNcccUVVcKOu5xn8uTJFWgMWdte9NMYMKs7WgSlXAgr6dHoNz%2BxTxiAEyGPtoyiEFABJGfnUoooed5551WAPNpSiuFx8ODBVRvA1LxWmI23lgi5p%2FAXwURLQNeWNo877riqAxh2c21RPcedJzfatG1jDPzQXdV2%2Fatt1cgY8akLqkP9Mble4tj2%2F7MFvv3tb8fFF19cDbeAhjjQbFPEQvK6fV%2BZ2ACfA9VlAxtlknDOssZG%2Bc76fQcOb4g%2BgMbRuZTywAMPVFdIXCUBMnnXwYONNcN6%2FdGjR1cRzDERUTSrEzAD1sqS2wGfaOsYfjNmzOhbSsnZLJ1McMgC0Ak%2BPCeMmRg9dw6PAV85OQ7dPTpaFo%2BMAV84LYb%2FU%2F%2Bs%2BlgOWLf%2B%2F8f2Jz%2F5yfj85z9fOc%2BQKLIYPm1ziuhRp%2BN2nRD7NmyL1u93xMGHr4%2F2HSOj%2Fe6JMWhLI9nndCATeZLwkAvKwUQbw6vc0mQCWHJdDoCuuOymOO%2BMA%2FHkl%2FVHVHzkgngj4AIkkxfgISs%2BcrqMbMCewyqQn3DCCX0zc%2BDV%2FtixYyt%2B6tfJ%2FsAvnxKDxwyKYfdPr5%2BqIqW2jw3BR5jlv7%2Fztre9Lb73ve9VjrQ2lsMeEMjLOjo6qoVZ5zIfy1a2DFkS4%2FeemLvVL3BwurLAIlriZWgzhDufYHbOsYxGndsWxVc%2FuKZcjhsf6zfuiVc8vzO%2BevWs%2BMy%2F9behMxxtWE9QOq89v%2FV80mwdAahzSerhZ6GZjDpe8%2Fkds%2B%2BJMcvOrKrkZIoOFegLg8xAkuex3%2F%2FEAoz3ute9Lm688cZqmOQc0Yrj6uY0hFrPk3OJHCJNnTij58Q1MXTlrKqeiGJYbF5KAV5DYAIPD8O6yJTrcY7t3LkjbvjizbGnjKpPePE5cc0nb4vBg1riqa94gtMVaVMb9cjqBPDgT%2F7MJ7X5n12aU5fe%2BBn6re2Rv04Hoze69zXySTapX5prm1eoXvjY9kNbAIBe8pKXxHve855q9ggAhjHRigObyUwVqEQHF%2FjNGuskWrRuL4vFu%2FdUUUTkAFZ1fPA3jAF3cz6oLH6iZZK6Pfs3xrmnd1fTzaUre%2BKMOWX2u2NwPLB6ZAUuspI5h0v1RWqyyvEAG0AtE%2BGv%2FKpVq%2BKp998Zz12xOIZ17Yq1Y8ZHb21JBy%2FgkxaYVdsHQr%2FkXr9uQyUn%2BdiJbh1lZKjkOBYB030P%2Feta6WWXXVblWJL4qVOnVrkP521b9kC8fuPKkKnddNzUuGXWSeUOpP5cSFThYMOlX%2FkSR3COyCGCZf7lvAhUH%2FpEC2Wds52zVkAxAQHOOu3csSVu%2BNLt0bk74k9f9%2Bg49YS9cdeisZXjsyxwAAH5gYxMgIYAkX6iH1Lmf95%2BQ5zWW0B9mPaW%2Bu89%2F%2BLcrUALgOShj84BaH7Jq72HujR3LAfsM%2BODNwyxb3nLW6q8x1mzPQDhFLS99PZ3LLozBlV7ja%2F7J0yKb85t5DuOcLS8aebMmX1RLqMlxwBSDn05g5XTPeIRj6hAkPkdXtoFFABWT5SSfzXTy%2F7HPfHta2fHqg1Dq0mLiQIwNC%2BlAHZ9WBetRN362uDW1avjyhX3x5E3dkV88qwLYuPwRkQnlzasV9Ip9SPj0fJJl%2Ba0zS7HZsHN3iv7%2F%2FZv%2FxYf%2FOAHK%2BPlaUZl4IwUjo%2FbuP4I8Dl28uYNETUAyrk4JeuJMIYeTgMuYBI5ON2Cbl6aM6MF9jqpZ3ZKFpHltttuO%2BotUR%2F%2B8mkV8LduXVO1rQ0RVFSTi4pGdeDV29Bh6tQu6tYPlG1S7RjcmJ2TEV9tICOETpH5MEDbdzOtfNLlO8BL3Y4BsDJb4%2BvjH%2F94fPGLX6yiRu1wtcnx9Wjk4IHDRq%2BX3Tmo4QjHRBR1DJ0ca8bqyghQ5lKKSYrc0lIKkNYjmqgFsHWyRMKB5BHRXA4TmQ3xCLAMgzpLfSkFf21pP8sCsjLZhqgkatVpVBmefzZkeDxqb2MN07nVI0bF%2FtKe%2BvQDJnXpZalGh9Op5JLyR0O6ewfJpaMdeFKR4YyuaO0quWipfGQ3q7f%2Be7BN%2Fbe%2B9a3x%2Fe9%2Fv3KsnuwYRwBOkm3n6g5i8Nfedl2MrDnt6llz4pbjZ%2FQNl6IWB4sIePjgAShAKd%2BTm9leu3NltL9wZQycUW48XTwkeoaVmz9HjIzhn%2B2%2FdgqUboeSNyYBOlmAgPP9Hi2fFF21nbmg%2BqKXtgEbD8Njricm%2F2KQGLl7V1y4blXcefz0WDVwcMWDDuQQzX3kk2bB7JQ8dARRMSPuysm3xai%2F6l8N%2BL0FIEBYSnHJjAM5RyRiSASE9jnTcMehcrTmKFgMGGM6y%2BWvzWvjx9NOiB0FIHkrFfCpx%2Bm5lMJJIgH%2BZsfOA5X9Tf%2Fz2hh0av%2BsNgEw%2Bm2PL%2BG0EQnJqn69c2Q5EYmj8cqlFGD7eZfm1BVRk4Axb93KY37xZBtRmj7a15Y23a3NRmyKbCtDLzar55QAf%2FD9N1blfP3eARCo3HG8cOHCqqfmAjHDH41EG8bmAIYFoGZibPUBz7CYM14OyKEvgS1CkEG0ARLbSWt3r4hhVy5qJFmHJ9KH1g6MId85KQava9z%2BrgPglcOouva1D%2FCGOw537OEPf3gVqTIfW7duTbzx5Z3xqX85JZusftUlBz3JTDagyqE5ddOm6JadKvPJ1IEd2IgNDLlu2zdRMkOu0%2BYp98T49adF77B9vz8AXLx4cbz2ta%2BtjMK4DMRwerCocujAknjOk4aV2eORl4zqDleWgfPSE6M6L9c52lKKYcjsUB2ONTxyoDuSnXOvXl4fxkuZnaffE6MXnB69w%2FdF296yXHOgMQXQARII2QlEIGCRT%2BZdzvYl%2FkCS0bCrc01MmTwsPvi6W2PShIg%2F%2FOtLYvfe%2FvQfcMhTH9a15TgCPEN0LqVkp6K3tpzPSRY52ZWu7CrFyOG4Yla%2B9u7bE21Tu2LglnI9vFT4nc4B3fjpcplhBoD0SAZiHEY%2BcdqamL9kZPz4M3fGgPaWeNor%2B68aMJhIoq7ogpiLk9U3PDsOOOlsNx0YIgHT0AeA2kHKmWR0HL48x5GcWKftB9fH6PbimIP9wCMDB2tbdBHR6NJ8ac75%2BrCO76hB98aX3782bpk%2FPD77zWHxkTdvjFvunRBv%2FsjZfc3iJWoebVgHQu2Rvb4%2BWV9Kca6Z6EUWk6R6h81ynTMWxYgVJ%2F3uPpT0r%2F%2F6r3HRRRfFX%2F%2F1X1cAyt4IHLbRXz77tvjEWx6I5z9jR%2Fz7dUNKpDoUjz3nyHU1DsihSJ0EHWeJbKICx5v1mVEaduQ9gAhsCT518RF5LbeIWM1DkzLlNoPYO2VVH6g5UAcQOTlaTgfA8jTAAPwkeok8dUBs2DG77EecfXJXrNwwozxFF3HeaZuzSvUL4NnB8gRe8jX60Ye8llIMu4BIJjPe0Vs3i2JZre%2BXfaQkZMnomCfZa%2BCiGZX%2Bv3MR8KMf%2FWh86UtfqiJEKuyX8z0SyNhJO7ZviBv%2F%2Be7YsaslnvuqU%2BP7n7y3gKk1nnlpSfoLMZSezKl1yqHP7M5wqAwHAh1jA91WkW7Y0Ng18sG30XMeWYBLfTPFJA4DLDwd13ZOVHLoA4qcHPlNEslcTlO%2FTnOn3hHv%2F%2FvN8cObxsa1N0e87dJt8TfvOy%2FuXTqmklWnzLucRXf60Uc%2BSQ5gBEJ6kcX%2BaXfeUj0%2FovX95abG6zpOiJunzuxrVhl8AVYejWd22oyoOlV%2FItBX9bdvA1DmzZsX11xzTQUwYKsn6TSSw3BQnUaNPi5%2BcvPgeOwj9sWjzzsYN95ZbpWfU2a9rYeip6Q%2FhlERMAHIcHhwDAMzqiFWRPAr4nWVOq%2B455aYerARZfe0lbuKH3Z%2BbB3av6TDuZzil0OlBJwDTCKcbfmYc5yeQ58IJOeii7LZfuZuwItnMwBvW3hSUXtzXHDm9nj%2F5x8fT3pp4%2BaDHTsakxXg047OqUPkrV7Ax7aGUh0rc8JdZfupe8utVIeNOajc6nzJiiVHAFA98gA0f9AJsVvmkyLsb3UE5CBLKTfffHNlHL3fMcQJFJQzIYA0A61HQMd371oV131%2BQdy%2BYFS86R8fUQzUSPYzqjEWnoxvxgwgnIWAUU6ppyftWrI43rVheZ9zHN80bHh84uwLs0glG%2FlycTZPcFoC27aoY5imh0tzIp9O4VySbcCnp23g4fRmGj2iO7Z3DqjO6SzAoQ4Q00O9BHW9Ll4Z2fP4vgX3x%2BVbVudu3%2B8Hz%2FuD2HV4IZ6cbM3u48ePryIpG9Jb29mpfisjIHC88pWvjEWLFlVGBAI9lDH1NiQfE%2BKBQ%2B8DIgBspmEjppdZ4fHR2dVSgLWnbylFfXWALUFWBxo%2Bok1zfnPB9i1HgE%2B5UXv3VHmSmxSABJAAW46UxFnaInNemnPV4uyzz64ACGR14GU9oBHB6M7ZctB8%2B0CWUW%2Fdxp4SaTdW0VwbdAPsXErJYT3tl3XxzA6Xx3qnzyi3Ux8JwJ0DB0XXYfDRhV1ytg5w2iKHCK5T8V01kSkH%2B7tTtvAb%2Bmvt7m%2F%2B5m%2BqyzuWUlxX1Jubh9a6%2BGZ3nI0YXR1OS9IrHTcM5lCmlzIL4HE8B3BMs3NydsfASdvWron3Lbsvd6vf2ydNjX8%2F8dQ%2B8HF25n2ig2QeiOSUHGdyk1FH2117ysPcI3pj8IHhsa1nQ4wpSyoDtjbunNaAqAnMyRMAyJQAoJvOkkOfc5lPqtfR0dE3MtCdfDlkso%2FzIlqdJm9YG89dtihG9zbSms%2BdcW48MHREVU59bYue5AdiLzNiS4Qn%2Fcj1WzEE%2F%2FSnP43LL7%2B8CuPyL8oBHgW7WrfHwBFtcWjzoOicvCIm7ThykVVkYLwEYYKJgRlCNOV8TlEW8BhHtFMvneO8XszZnInwMIzVO4D65yxfEhetWxmDS260vVy0%2F0TJAXeVtsgM%2FIDC0erJr%2BihbSQ6idQ6BUfue%2FUt0Ta5vAiojFUHG7f5ReveQTHqisdW5X3Rg7yZbuSJjC1kx89%2BDn30dvUHmRQpk2RblMIPbxFZ6vEgKvwGFx3cuOU8HXRiHcCHn%2BhCb0M8GclAZ7rZ%2Fo0G4He%2F%2B9248sor%2B4BBcEoCwboyBAx6x8JoG1EMV0bdQ6UjtpTJ6sC7j4%2Bh3zy9z1bK1wGYJ9I52UuBQnRkJPw5h1E5rk4My6DK4805fpupGDbainMAj7NNZAAXP07NS3PqWs8THQAyh%2Fvkt%2Ba862P4U%2FtvBMjjIz50YbRtabx2Tacia3aMLIMf%2FnTNS3M60X%2FlLmf8yCnq6yxkrI8ceLKFiK2czqgtbWYKAGTqZL0czsmS6ceRt1qk5L%2Fm33%2F8x3%2BMRz%2F60dUCcs5AKUkR4EATR082%2F6%2FAZx%2F4UPeZ6xobh78ZKXnUT3AaZ4g4gI03YwKAyYzVewZsprqTgVCe1kwiSFdx2tLCA%2Fg5h2O0Z2IhfQC4BK52EWc3tzn0B3OjZdeg6L3muDi0tS3aFo6PgZ85tTxX2387VDP46JwA0kFEImuPIrtPTmwMgX%2F9%2FOvia1f%2BqFmFqoOxERIJ1VFeh8WffcjNfohu7Gh9UkTlJ%2FWcz05uLRHVo%2B1vzCSEUF5J9sMf%2FrDqUdlzOJly8qO6c%2FSm%2FR%2BfHiOfvSe6O8uayczyEM%2BCaTHo7uMqJX1xut5bH5pEIMbxgLjzAALchiYGzjylc%2FvS%2BPoHV8TSNRPiHVf132CKL4fiC9gMbEnFpEU7eIqihiKf%2BtDHaW7NF02UpzMnkofz8MnIrB00dtS42PLV0TF%2B1cMirm8c861c94HuytlyRgQwwCGlAAS8RV%2Fph06Vum3fujw%2B9fYV8U%2FfmhOjR5Rbsob2xInTO2NJeV43SWeoy8IP9tMHdLXNNyYWbAfkops0ySjBrkhddnFrFntlRHTu1z4EU%2BJv%2F%2FZv49Zbb60cwmkMSmBKiR6EpoTj9d5Dwd1zFsbI2gsRKaUMZ3BAgi%2BHPhFID82hibG0pZfiN2n0fXHl6zaV29kfHl977y0xuvik%2BdFG4CN35pXa5ByfjNLJP5dSAN2lOfVs151LNmAm75lnnllFGzyTdu0pj2dOKNFv9%2FCqHlk5mJ70y6Gv%2BdKc%2BsqK6vU7Unr3L49rPrU41mxsi1ddPiO%2B%2BaFl5Q1bQ%2BN%*%2Ftuv55H92aU5dMuv4rsvnZPDXNgTLAZ73vOfFYx7zmJg%2Ff35lJMIBG2cwrH2OEnEyKaZIUgXUVUNytzIKZ%2BppHA20fhlSz5Sb1Ic%2BkQcPTkK2jx%2B%2FPyaO7Y1Ln788Pv6VxlWMVzzv%2Fr42bBxtWAc8QNYWmQ19opyoAISGPm3n%2BTpDuoqaouBddz34TQIjhhY59g6sHO%2FqCaCyk3bw6yiz1KNdmtPG0Yb1aJ8eK9a0x5SJvTFh%2FMhYurI1jp%2BwJyaOa%2BSywGUIr3cwttIWe9LHCsCCBQuq2S0g6tRm8yfddmP8xa3XxbRyt3hJkI4gwYQ96CvaA%2FOvPAISWsQDEjMjvVbP4LyjESEJm5ERGJupp7w%2BzJNlIqbzHKOX%2BmUcQx8DNhOewM7gSYx8%2FRdujH3lit3jX3xe%2FPvHb4lhJd16yuEHvMkJLMCVJAIBsTTB8EcOfIEOWETjDatXxcvXLY%2B28p6VH86cE9sO50PJQ1QkD1sAuDxRh0B0EcF0KHx1MjLnUophVtnUoy6b%2BuyMZ52Gti2Kb3xoRSxYNjg%2B%2FKUZMWPKoPjxrZOKHxpAw0tb9KIfMAoI2koCfEBlZ%2FK%2F%2Bp6bY3LtbQyLxk2Mr53SmGmrw3b0cBdQ%2BuRXBsBrr7023vGOd1SRLKMDY3POoaWL47LtG2LtsJFx3ey5sXV4%2F92%2BBKe06GCRVaQxtc88Qs%2FDh%2BOBFT9kgZWyDMSQjKSO3pckKXa8mZ70iBvj0hd0xhe%2FO6U4riV%2BdvfMWLdpSOXEjD54AQajuqKh7Rx2OVzkSVm2lAd73lce7KkPN984%2BWGxYHx%2FvgpU%2BInSdOJ4vLXD%2BX6VyU4lmrKLhWrldBzkPHsgoCSDIbgOHOfw%2F9p7r48rPntG3Lmw%2F6k5OugIAOujQ4t29E7SHvDXh%2FUdS5fElesfPCG7%2FNFPzGp9w7pImAHhlw7Ar3%2F96%2FHhD3%2B4MoRGDYUiRPbWlvl3xz%2FsOPKGxSseeUnfCxFJnxFFHQZmAB9OlqMwJmMBl6GIYQBCXsLwziN1DeWZCJNHDphAqQqVr927O%2BNz75wff%2F9%2FzomtOwZUvKUMgKA9QMBfhANwTkvSFvDXAXGct47uboCir1wBx3se%2BbjcrUADZOQXYZPomcBmO%2FJr86EuzWU9epuoIXrnDDTP53F2Ay62ZT9taVMnIk9dt6xLd52ubrf9BYBvawJgd9HxygsuiYOFT7Pt5YCrS8f8pQEQ6L7yla9UyqTgkG8YSfRT%2Fg9vvzHO7D1yeFg0bkIJ3Y371QiutzMOpQ3HSYzD4YY%2BvRZQges%2Fu8uZ4sozJL5kaibnGBjwlOHM%2BtAH5Ansel3DH6BmB3Ou4%2Fab4%2Fl7%2Bm97d2xVebDnc2WBGnE4YJEJkUcU1D596K099mq%2By7mqcJQvttEJdBi6oPqlSOeB1OhQ71SuWNBTFFWPHvQhRxJguoJD7iTbl95ybYytDcH3TJgc35p7RuVvQzS%2Fa88ve%2BpIv1AAEvhNb3pT%2FOhHP6oQn8L5BSRDbz2UO%2FZnN%2F44Og5fzsnyHuy5dUpHtWtYIiinEJrwDOTXsAwEjNV8l3Py0gaD1SllcJyTAayeW3IcMAOEMtrDJ%2FNJ7TnuGMdwUJIhlGzOJe0sYHrP%2FJuPSMq%2FeOrDY9mYcZX8wMYxIjpgGPL86ljOca4hjxMdX79pXRx86ooYdFJP9N4wNrpnbYqJu2fFoJs6sslKBpFUp0fkoSsfkZ0tyW1SAWSWUgBSh9MWWdgdOa8DKO84nyhPtjq1Fr1nlsnHE9ctix%2FMPjnuHzGmkhkfKRK7kEHbfOf3FwJASrjd%2Ffbbb6%2BEoyDiHI0gSkg%2BObZOB5YtjbesfaDvELe994KLY09rW2VswgMIAwJCrqEBEWUcNyvD1%2F76g8ui9enrYvDYkv%2FcWJZ0HlOc8%2B1HlVdg9Od%2B%2BDAip6N0DgMxMLnJy9nOiagcAACWUurDOoeK0Jn4qy86NEfHgWXN7pS1q%2BKC8vcKXzjtnNhS3tQIyNoBEvIAmqEp2yabbR2XHchCpn3vvK7x0kcFkg62xOi3PCH3qvbJyXbNROZ6p8p88qEuzWV95QQCcgBjgjvP%2B3WOHuQlq04scvvYZht6oyqXLxX6u2p1%2BL%2F%2BxSmveMUrwqsrOED4NpQkS43qhRldGDedWm9lyL69cca61TH6UG%2F8YPoJsatEtaMNfZJphksFKOpY5kwP%2BULEdeWFiB%2B%2FoK9JHYZsOcvsO1E2HAdkhiYv3oApnxQZASX1y3pAkjN1Msm3suNlGb%2FK4a2zNA999UtzysoF2RI%2Fds2c0rlVE%2B6Ika%2Fov5PGsUM7Wst7986OAdsad%2FwAALnrOuKV9s98Et%2FmS3Ns%2F6Q%2FaInb7x%2BPdR%2Bxm%2Fpk18HYKNMGhdiObwAcOJXVZl6ay2iurGH%2F%2FzkCujHSfXhyKYby0bDGmokR9ERRJSOYKNFMynEu5zQvpQCZ3qcMEgXt4wn4eRwwNj77uhh8VmMmnG0cXNIaY794SfFSawUCBmaAOjEWoxr2tE9mZepLKfh37lgRp82dGKs3Noa25IFnRlR6ACEHJdH9aJ0ql1LoDaBGD1ELL%2FuoeRkFiHvOWRGDH5gePRN2FdCNitY95SHvEgURXbSVHT87FX1MuugGJEBIruxUAHKw3Ej748%2FeHoMHHvlWLXz5V93Ui3zaInN%2BtIEn%2FiJ3%2BlQeC6zZkfhMB%2FtvDcE%2F%2BclPqqUUvZ1joDwRT5DTZ68s1z%2FnkrWPCJnRwUHCMWhGCOf1VsrX8wQK6fk59CnHKZTPOyzkfYxSj0g7u7fG0Ell2N9fll5GlHvkto2M1u7GUIsHAwBa5m3kYQxrXHjRAxnW6aas88MG74jWQ1vLVYMVsWLd8Hjp5RdW5fJLdFA2OxcHAIo2HeMYOmmPvHkVAfAspbBB6oIPALGxTk429eq0eeT9MaHzlL5DeKrPjurrmNoHPnbVITL3JVNHWcMjs2100Vk3xd%2F%2B5c646hvTY8SQLfE%2Fn7In3ve50%2BIHN03payMjXAKw70TZ0H7yy0tzdABy5RMn9Tq2%2F0sANJv1rAWFKCOkYpgOPee07pg5eUm8uqydfeXqmfHZfzvpiHaACHg4ADEUI6nvmB5vn4JADaDqOO%2FSlGhHQR89irMksfjgmxEQb2XqL0R0DB%2ByZyRWh0OBpHkphQxe7p3DOt4f%2FNvr4uTZB%2BKF%2F3B2XP7KO2La5Ig%2Fft1jy7Mk%2FVEUsJVNAGo3iZyATTbA1vMzn%2BQ0287ViWxptwRL%2FTw5Y9q2GLhxUmW79AdbakubRiaUnSrrq2upSLtJO3dsLm%2FVuqPcmBvxjJefHtdcNb%2F4pjWe8arHZ5EK3OSqD%2Bv2%2BYSNs1Oxc%2F3SHFuPLEsyB0re2Ew%2F9%2F2AXtBjcnHDDTdUxmUkSulJtr0Q8brP3RQXnbc%2B%2Fu4Dp8fznrIuzjxpZ3zpe7P72lGOgBnxnKCACCQqcBoDGS4kqKmMnqNM9lr1gNUxHzwA05BJ%2BSRlDpa1uwFt5XHJcns93glgQ7Z9YDT0NXQ48t17OgCZnEMAdfMde%2BOPntQZM6fsjCs%2FNSGecfGuOGlGZ3nIpxEdlCUnuerE0YxPVjcD4CvicZThSJ1qWG4rF%2F7LpKtO9FBXvcyxHUvCs3tL4zXAOi%2Fd%2FNLNyEEW9QGxXk99dnceeJIGDx4WE0atK69zc6vb2Og5sCtOnNETP719cuzsGlgFB%2FJqB9Eloz5f4QV4Jpr8KEj4nHTXbfGylYvj0WuXxykb1sSqscXHA%2Frt9KAIiNEb3vCG%2BMlPftLnBA0yMmM099bnPf76eMGzu%2BLT%2FzIthgzYGn%2F8tD3xgfIi6qtvaDiHAfT4erKKH%2BNQor6UIvLlpTnOO1SiSnuJuPX37akLcK6JymdEKp2ibmQ64H%2B0fDKXUjgLNUcs7XNiAlAZsnz3I9fGwPZD8dzXnBufnHdreWdLazyrPD2nHJsANsci2%2FjrHEYMw6JyHGUb%2F%2B1lBHnR4nvitAP7y%2FtDW8pVoOHxubMfWdXPL3wroB0Glm12xEt0BIaM5mxSX0phG%2FZF%2BPBDggcfoxg56rRz%2B5q44Z%2Fviy3bW%2BPF8y4qd9sUkB9ovGAJ2AQJetEPgOuX5rTf0TSsby53h7%2B33B3eWAdptLR1yLD46DmP6mu2D4CEFO3uvPPOysGEbHZqOq%2BvdtnoC90lRXn6S8%2BIH3zqnliycky8tjz2Bwh6OGE5muEyTzAU6VGMwEnABzDqbC8vfXzj%2BuUxuixqlse%2FY1X5o5QvnXlevdkKeMAL3KIm42b00iZj4ZVGNuQ4Tk8JsXM%2BAEHXjNDk4Kx6VNVwx8S74qPzNsY1N46LT36j%2FBHL7sYVEkMf3bRPDnWTP0chMrCd9pP233tPvG37%2Btytfm%2BZMiOumdWfQ4sg5MDPtVPEhvnRyWzjLcqLQJZSHMu6VaXyBTjOZ7qjM7B3ndSbO7MzFi5v%2FB0rHnQAep3Qh12bL83hQUfRj32Tht51e1y2q%2F%2FasePGlXdf%2BLjyqptGxG976UtfOu9FL3pRvPe9762EljASklEJwDkZJYRWAKqT0D1uxLo47cSeWLJ6Unz0q6eV11scXzkDOPADZPUI2Tz0AUFGPQawf%2BHShXFGT%2BPqiPnymP37YnG5sN01sBFhlKMog4gAwEPGBI72spdmhAU0jkqQKq9ert8pT1cR1SSHHHXatmtiXH399DLslreH7mpE9Ywq5FAfyMkDiBl98NAmfuRGtp%2B6fHFMOfzoZnWwfA0vet4ytaPaVRa4dV5yZUfCF3%2BAyqHPRIVuJhoJmmwreeOhDr1t1yeGWcbv2nIVEFCBW0TXAejG94BI55SlXo8d8a133A1F3Sdt21QvFuuHjYjby9vDELu1XX311fM0JG8gNOelc6Bd4%2FYdJ9jRZkB3LpoSX%2F7%2BCeW%2FJcolpJ2N9x1zLuMxloYMD4QDhHSu9jpK2M6pOaEA9YXlrpH%2BLMHRMuyWz9ICQqQ%2BQ5MbWLSBGMY2Q5kh2%2BYwjlJWxGXAZiKrc8oAEN5AUyeybtnW%2BIdx2yKe9nzoxj50qwMv6%2BtgbJDEnutKevHI2jv3nPvZtFl9%2F8nGDniRTRtGCcMuJ0uF2IA%2FAI%2B%2B5NcpD5VnmsuiSOzcXy5LDpCv9eeN2lWGjj4iILnx1JaAAaR086vdmTNnVnbRGZRjI3zIl1ghu2Owkb51bEgB5dDS3qR95R3UDhT61pzTY0vJAclB%2FrYnPOEJ8xjHgTp6G8UbCauCGiZk9vo873ff%2FjJsbt9VGQjoGA1wCUMBDuNUv3VynnP0tiTtDN6wLqY3XZ77l7lnxL4iOBkZjpEYAMjU156FY9HbMXwMCQgw9nSXFyKWsH%2Bgu9wFPWpNDO4enU1WfPAiD0Pa1gaD2%2BcMOWc6QFtsJpqr49YygKU7oisH44MyclQ7h7%2F2jB4TM7dtjlE9ZZJQju1tHxD%2FUt6suq%2FYWNv4c6i26CPCGPr4wD495WDKrlu%2FLjr%2F%2BNbo%2BcOl0fO45bHnrOUl9JTLdcftiYH3N2bCmmU7dcmGyOsYoNGRzWz76LTkN%2FQbReSU%2FJeBhU6I7R0DSKmCuknqPzBxctxQ3pjgzp9vz5wTK4v9dSRts2dbiSDz9rbuivbyBH9X5%2B7onr2m%2BsfrOhOgS2cwuN6mUQ1oWG5DePvpfAJTCrAZ0nkKiHbpHPsmEHjUaUm5RjpnW3njVLnPDy0ZOyFuLS8A31uU00sJDxgJPBfoyWWfrB0lqpJFWw9sXRC9l90VvU9eEfsfuyz2nbsyWi8uPW%2F9qGjb2h%2FlyFoHoDbsMyinkxkYlLN045xhzJKNyQZd2Eg90Uo9ziWnDmx4tJ%2Bk7D3lZY83lbzvtslT45oyLG0s5eigc9GDLUVy4LOdURc4Dff8gIYMLreKXVzeOjqm8C9obh1SomBJsQ5O7IrBPzkhm%2ByTSdtJ7ER2%2FMls0Z%2Bcbn3TgfmHD8mlXJ3YxHFYsM03mdLUy%2B0v9lvdtbuSt44TuGg55wcth9qGS2yLwGWUaCuL96PfWtZ%2BejNolpc6FIBpoE6E8aEAxzAYI4sEeqVfRhK6GSxJHT2AIIjDlG1WzrnB5fppee%2Fnz700J2cDBh%2FkV49lGASE9RciVgfLV8u%2B9hj1zktytzEcFMfQp05k9%2BH8%2F%2BqlOfXpIzeTxiQQAbVOjnM6e7Evm5CbDs2X5tQzQcr1ScDUGZJWHyxvm3rT6uhdU25qmFqeY94%2BLFqvnRDD7z%2BhetOWtgBE5EziM74jq4iHt%2BjdfGmOD1%2F9%2FAUxY%2BrQeNsn%2Bm8wxQdwBRB%2BxMe%2BGTZ9tAk7OjAfJ07kk8pXw%2Fq0l8c8vYbdWw9jrHd8Cd33NUI3JoRSoU4cpTFMOZyDOFsPyHxSvQRG1lVP2RzW1RclmgGu3vZyl%2FO6YpSMLMoCQw59mU9SHDj0VMrXHcOpm7eUh7bHlDfSl9HhUEsZZu%2BbEIO%2BNTvayzMWSHm8slM4pi360YeztaucfE855TnQAz6fnHdndO0dEqvWN%2FipT0%2B2Q%2FSjD4PT3TlOMawr4xgg%2BmQ%2BCbzqsbu6dNNeFTVKfTIkf20MPzgmejbsjzE%2FOjeG%2FHR2DL5lRgzaNL5caWhMzvhCpMKTLoBuWz6JD%2F7kEjQyBRDh3%2FLy%2BeWG1Ynx%2Bhcvj5M6dpebdPsjqnbVZSf%2BU5%2B8yZ8%2BjpPbdkdHRyW3yC1YuVTXNvmpA%2Be13ju%2BXLYqUaqnTEB%2BMjWGXjsrWnsagMseSXjE2RCPoaEIOKBcLicn4STKMPCkUffEp946P773sxlx4PArZvEgqPp4qm9bOwkAzpd7UEYZ%2B5QwJODLMJzmvOPOO84YooxjdRq4alwMXFPetXztqTHk%2BhNi8MLJFfjoom0GERnIRQ786ONY8pdS2Ac8Bj6wZ1F85E33xQ9vnFD%2BEmtDnH%2FGljIRm1VvtrIFmfBNMKVz8CW%2FthzLoU8%2Bya6inXocCHQiKbuLHiKVDqdeEv5dnSU3PCjKNoZVbQA9%2FdiLb%2BhHD%2FqxGfAg59g3h3XHzj9tSbz0j8ubvMbti29cXV7idN6%2BmDB6f9w0vzEZVIb92FH7Sakv3s6Lrs7zKYz4OA4nbVO3nTJvzPLZMeTG8rlhVgxePaECn15HWIUYgCETeCKQfb2KAc3ElFNeFHz0mfPjhc9eE4uXtcVzntAVHcd3xU9um5zy9Tk6QQ2ECURCp9NsAyXnMybna0tUolA6x75eqzfrDMI9HkkD2ssTZ%2BOWxNDO%2FqjOANbOOIFzEnicgK995xADZ15nn4Hf9NL746yT95elp4llAb78D8i0nrh70bjyF6X9NyCwBb2UT7JNNrpx%2BtHyybRr1vGrHuCsWFFe41v0Ux%2BA6zSkt7zhoa28sHxv46YBOmSk5KdcSqEX%2FeuUwaBut2VrRsRfPGd1TD1ub7z1o2fGHz5hbZwy26MKjSioLLtn4MDPscRJdqp6PumcFGzSwnvj7B1lonfyrDPmdZ24MAZt61%2FiUEi%2BkELZ19vqSyka4hgzM%2BdScL%2BfLW8smDJxX3z0a6fGUx69Nk6YvqdP6BSSkZsNyMgMw1h6vOGUEfH8eUsp6gERh3NMyl038JBdE%2BJg74MvzWnPh26IXAm8rC8Rr0cb7V3z05bSycoramdtjde%2Fb1a5DLktzj5la%2FzLf3RU1YBLhyFXEh70AUqdRTscaCKjE4k%2BnPWsRfNjTHmh0ZbyhvyDpWySdnVEs00pjPp1%2FvTYuL78DUIp4zgZHMtLc%2FgLFI7rwORIAiJ249Mkx1av3hIXPcLjDgfjrgUD4r5lU%2BO%2BB8aUNhpLYfj4kCVxwlcCWKYpApZtfiX338%2B%2FJR5dlqA6dpcOWnr8vAGdJX%2FY37hTRHgHDMKogNHMmY2lFA5OoBHSNkNqOEn0uGP%2BznjyH5RkdOy%2B%2BNq%2FDykK7C2POu4r%2F%2BLYADmQEFgbSRyjPdFOxMVTj5eTMDzjbV60MF669L7YV4y0o%2FxLj2cNkpThzI6SZxiiGZcsiFF3lavsOhVjNQ99dJRzkQtI1FUu68pXOK1Obe0j49xTVseM43vjxvlTY8bkHfGRr5wZG7c2HE9e8pOLXniLXMCcztLBfAyT1XD5wNL4wMoFMa1cnjtx14545JoVcVuZHffUgEKOBDH7a4dfAAsPtqt3Ku3LNdnFmilgiubApV02UobeIiQedZq%2FeFj8r%2Beuje9cOzO%2Bd%2F3cuOP%2BEaWTdlYjDR45UqqjDbYmj1%2ByAiO%2FJB1csTyevqdxp7VjbQVc87ZtbvzvLIaEYSyC5lIK1GJGOKBRBmmE0MrXafna%2FtD9jqvOiofN7Yx%2F%2FPKpsWdv43ZuUYah1E%2FgmfXhDXg%2BwjdHMazfcXffHm%2Fctq78J0f5O6kSui9Yszx%2BNn12vdmKFycrT17O0RYeAMXYwOCc9hgvl1KA0toW5wCgumkP%2FGzXOx8b%2FOiGg%2FGUP%2BiKb%2F7HCfGvPzohVq1rqRzDHvRL4MnnUi7gQHSvL6LjfeayxXHa4StAyrDypBIl5k883m5FnEsXeRS96ER2MmsPkOpDHz21r6xzSXjQFwjVR2TCp06DBg%2BJL3xndixe0Zh41e1CT51MPspGzThI%2B9XtdvzqlXHOgf6HuNqKYealcSnAAYbVZOaaLWENiT6ETMU5QXRQr074rV5T%2Fgds4Mi4bcHU%2BN5Pp8S2Hd1VzqUchYGMM5qHPvxFBcYCEESWP11dXmFW3jaVJD5tHzK0vPyxsSCqHueow7F4a4cszuHBWWbsOhJDchQn2K4bSUcwJKZz6IsPO9TpYIyNr11T3ru8vfE6WnzrQ1%2Fmk9rmoDpxWrPdLl61NMbXHupRfl2J9AvL%2F88h%2FOlIFjzJ7JhOnNGG%2FiLef3ZpDj%2F%2Bw8OHbnizUX1k4gd5NX9pV1lyszE8kIP96IdH3Ubsjxf7J60fOjyesHFN7kZbWWKYh6GhlPFEDCA0RVbRfp2yx3Gw3kJZTsyomGVXbjw%2BfnzL%2BHJpbncFPIIQSFuUqueTCTR1bRvyOT2JkZ%2BzbkUVEfKY37uOK8Ae2lhMZgh1Ezz2teUXmCyl2GaozCczR6nzzG36KJ8OMYzo7RkhEtQmMrbZjk2yU6lv1kcPcqmXNlI%2BO0m9vdvL7WOXdB75%2BOa%2Fzjkjdpdr4ACmQ4is%2BNDNjB%2F4%2BA4w6CNgAAZQaH%2FryffHgZM3xu5V5c70c%2B%2BMEd1lkrnnyMkLPdmNrnyjrmNkpw%2Fd%2BMA2XPAjWQQqIyCZYICO8OI8ojcs1TsfXnePKzckl%2Bvek%2FaXv2u48MIL56nIkIZcoZ0QGqfU0YgBCKBHENo2J6eBNUyQvORCOQYjiITYecZxjDPqztFm87BOoQe2bY%2Bzuvsj7YHS27570unVNWJ8GJ8hkB5LLk4GGsZL4JGRgddsXx47zr0vemZviR1byisnnnFXjFgwq09d5cjiYzujjroiRXYQx7XPZjn0WUoBBOeAgW3wUY8u%2BJHVMfontRdALRw5JkbsKUslJdp%2Fujy2ubb8LRb70o8uQAActnMCaJ9NDbeZLm3ZujnaP3R7DDxrT7SeUCY%2BF5U%2Fzp5TFuw7Smpx67RssrINcPMBEsHIyGc%2B2vPRaZ2TsuSlOcfVTVKerjorHuye%2BmYZv%2FtLh1paLtH9aPKMaClPeR0y5EEq4%2BpR249bGS0PL9dbd4yOXdvLxf2LdseYzzy2zqNK6KE5iSAaTIMykGMcI%2F%2BRhwAko5v1ATxSnmMow2HOi44mDHVSbkox6uNWLo0Dpdw3Tyqv5S1vEmdwSqpLdo7gfAYVnRHe2tQ%2BWnVoQYx8y6pGklUdaXwNvq4sQ%2F3HiX1H2AMBTDPRNTuQpRSTN6B8qBcQqa8O57AbWQ3DR%2BN9qNhgf7Gd9unDftpS3%2FodW9hH9tnSOZEQGJEyG5720xhyXn%2BnrY6XFHTUlRdF64FGlCIPGepDpzbx4QtDOf7sXL%2FL2TmdYvqUoeW%2FiY%2BMqHgmoPEx%2BgBnElwIUHRoOf%2F88w%2BZ1hvj0ZpzygsRn94%2Fq81KIz5cXoi4ubHSTzlCAdnRSKMM0nxpTvQjNEA0k%2FbVYQyCMezRiHGcZxDtU4wzGUQEAoTslc6JfHolkCqDdIo9b7k2Wgb1Rx%2FHD65pibGffILNqiwdOb9O6voAERmBmtzuw9OR6M4%2BO8q7okeXfxavk%2BOZsjhObjzS%2Bc7TjQPJnkCls9UANgJKOtHHxzDMpoZA%2B8ombd%2B7NYY8vMizrfyTeke5AWDFlBi4uaRLvY1opy3RNXXEN%2BXPIEBX23ymg5GRvm2HVsX3PrE01m8eFn%2F5lkdlk9UvvmQ1CiHl%2BUSQUB%2FP7FRt5UWQ8%2Bp53oH7h0TrkxvRqap9%2BKu7u6xpLWuEboJqgMJ1YlCNG8YNMRzC%2BXlpLiPdmGHlKf%2Be%2FstWeHACwxNS72FodTNCMKw2RUbnta0tyuSluRzW1VHGEEUmHUzZJM7tuv9gjLrx1IhFZdb7wMgY%2FO%2BnxvCb5pQijasIaZPsyepzDsOJ5ozKKZwDKEDAyC0tBYyzb49%2Ffu%2ByGDGsJ267rx%2BE5MpOYJsO6iVw%2FbItfvRK%2FsoC7sySG6tjWGdf58mZV0VyBEk9B7eX5awRK2LEmvLQ%2BpoShbrKZcDapTl12Zjc7IQ6OjoqGYGNLIZ1INUW2f%2F8KTfEe%2F56UVx7x4w488SNZRmqO665YWrsKdfWk9imAmnxAUp%2F8bFt59jT8z4tf%2FZnf3Yoh6ZksOWcW2P0vafHgUnl%2BmHPgGjbNKLvyTJAUJ6RGAaiAYNwhj7AwVz%2B5UN4dSgwcnhLvOZPbyj%2Fy9Edr3zXBbG09kJEfEQvfJM4HDmHB%2BcnL8dFBbJo%2F5xzzqmicjoZmFNhQ1MCSj3ECN0nlasKy%2FuH3OydZGYoDiWDskCs7QSy4wwo30Rk%2BMoVN8WY0b3xhBefG9%2F%2F%2BK0xtKSkT3n5E6vz%2BYU3GX2aCX9AIEd96Huou5zVJw%2Bb6ZhSASCu084Dm0tHGBUt5SlBerCDOiImkPsAtM7Kd3Uij3lB6uzcsPYF8fX%2FsyruWzok3vvpsfHpd6wtb9gaHZdd%2BYi%2BqkYntvdJolPi5ElPelL1T%2FTabSuPBM5zok49S8u9bWXkGbh5bLR1lllXCdmEYXSK5tCrHmCJQBqgnF6D5JUUcnz71lXxg6tuLw8vrY55H55eHvnbHg%2Bbsy2%2B9ZMZ9WYr49WjqhDu4xg%2BDGFbEqzXas%2BwqxeLJEmcC6yMCzheoyvHzeijHIDt6i0z2%2B5x1XF60I2TONS%2B9oCcDHRP3dTXufAnF6rk7t0QF5zVHe0DWuP%2BJeXlSCeXZZOSHy1eMaoqo30ABOw6aRPw6KQTs7WFcXmrNIaePnWHZn16iI70VIct6jSoteTiexrPZmsjoyTdTPYAUfv0bSZtkzl1dL5r78h49iWrypWuA%2FGF780pf222Ljqm7IuvXj2rlG1cyYKL9KP6iZMXvOAF8ZnPfCae9rSn9dmgrThmXo7VKcDA9vLG%2BRmLYvD24yqjY8A5hi6MOYPxDT8a4HxGQ%2FY5jcGSBg4aHheftyqmTeqNH5W7NE6ZJXQfiB%2FcOKX8a2MjT%2BBcYb%2FZOQylPb0FqBMI9aWU%2Ff6Ho9bbsl3O4RQ88alHV2UG7R1d8ZPrMXICjzPohnJYrHYOf9FRmkGWOt06v7xl9LnrYva0zrjsPafGnz5tQ5x76rb453%2BfXRXL6EQuxIZ42K8vpWgbMHRgs86n3XtH%2FFl5suyctStiSKmzYuyEqr4vnY3t5YLkBnA%2BAlY2pZt26AbgytSXUtRX3i%2F787FtJNDgUweg8zfdvjueeUlXTDuuK64ob2P41L%2BcXO7VbNxRo32dQNtwo%2B2%2F%2B7u%2Fi4985CPVy0jVr1NbCb3zNFgHof22TWMrEBniCKgiJ1JWLsIJQFYXDmO9KdfcsiFK%2FOiG7nK9dGdxzo545ycmxbMeV15qPamrALLxLhRDprwmlddbtadnO854ZLC4q4y2Ny5aGJcuuDOeUhapT1%2B%2FOg60tceG8tapJO1yMOfqJHXn4CdycD79tMVYmU9aSgFcHzpzTjoKf0OWOnUaVP6SYfig9XHGnDLUlVu9vvDdOeXy3MmVTeinTUBQj1yZT3KWfeeBj81ts%2B3YJYvieeXNWiAxsOxP79oZD5TJTf4jkfbV9WEnOvNB8iM%2F0PnotGxHbzYxvCK%2BV04nV1fb7EJmlw7t12nbLjddDI9%2F%2BvbJ5QJDydd39N8Nr%2F1MIz7wgQ9UzxpJVRw%2FGrU88YlPPGTMZmQhN52m9xGIU3ygGrAYB%2FgYj5CMqUH7iAKMmLlRNkqJb7z%2F2hg5rCSy%2F%2FCo6D3YXv65cUBlmJzR4ocXWeQzQJZO5gxGyyiC3xNvvyku7DkSBPUXIqojAhh%2ByYXI7jhHaAd%2F%2B5JtugHa0ZZSlCGnTpCdxDCMR53K3XblP3nLJb7DL7QEenVFE22Rw6SBHKlb1jckOu6DgObP77gxTuo9EgBry00Kn3nYBVUZZU2%2B6v5xglwJhOZ80nkdMtuxXycAxY%2FcytCzTo6zP1%2FQoZ5PisSiXb7oqF7vaNttpcfPw4RhAY3SSMOOAyEB9CgNy1H0GEBVR4%2FO4cJxIHK82TGO33zP%2BPj8d8rraQvwth%2B%2BNIcnHvhr%2B2j5JFn0Xs5M2l7A8qLypqnGYJZHi9NK22vLY5yIsw0D5OF04AIex7VH3oe6NMcWdVJPhNGxyCtqkUtUrFPvwdbYtPXol%2BYeKp9UHy%2FRHmiSyD1m%2FdoHvb7uP2aeFJsPX4KkExtm56UbHgDCZvwAUPVLc%2FU29h0oV0HaGmlQtps2whMBqw7kODl1VHZlB%2FtwYjnJy0gvu%2Byyh1xCS%2F7137aC2HkMy6AawMxHtNEAlANhLqWISs3gUk8IZwxGEynUTQWywW07S9TbfvRLczn01fPJrMeozUPegML%2F4etWlX8j6l%2FLs%2FWtcunqQDEcp4ji5CAfIjvgZbSgJ0eJ2OTX9v7u%2FdVw19tbrrMOKs87HOyfMODDTjqfD5CmI%2ByTk7OzU%2BlQPvirKx%2F1yy7ZCRLA6jRfASLzgvLa4kdu2RADDuvZW%2Bp%2Fq1wB2l%2BARV460JEsdAOEjKTpDzmfzqv9zifdHfufsyC6yzMkndPK%2FxI%2FY3l5f065jLa5f%2FLCv%2FiRk7w6qnbwow%2BZ2cExkc6rW%2F7qr%2F6qGmnI%2FN%2BhlvKq1%2BpKiJkiNGekIbAea2i1zWCHWg%2BWiNPIBQdMKLdTdTVuBNCguoa7HIpTUMMfJQir59gnvPOOM46oQjnnKK2H4sewKHuznKROI1atiFesXNQXBdcNHxGfKkMT45GZ4Xzw06aVfJMpstjv6Oio9FJ%2B5balMeTSVdFeJkflvv04sLkk59PKHdbvely0dPfHWXzJ7ZPEYeQFQqQ9gMqhj9xeQKQc0DiH1LH0JAAgnUDneFAHL%2BXH7C53D5cm15ZHLTM1qQ99goRO6hy%2BiI35U0dEbNz7vhuq7fpXS3kDwqjLH9d3SNDh7%2BYAQm4dDv%2BnPOUp1f%2B6aPf%2Fh1pK7yxXfhpXEXIZgkMsAQAGQdaOvzeG%2FPGmaB9X8qdyS1XvgfKmqlHlhYhvbVw1IADhADCXaPIY3j4iI74%2BQFq%2FNCdJ5Rg9OIkTyKMs3vX8L8v4bS28J3WVN5oOLs8kl6hFZj2UMwEBn8wnORqAqnoFLHJaTkLrOlfG0PcvrLbrXwMWTYhhX2q8LthxMmXHqJdjJ8Am63%2F10pz6bCNqciTbyKHIXic8nQMk%2BrCJtrRpkoDsJxnKzZ51PnzrgF45%2B6YY9edl8ri%2FPH46sAB1b5mVXlv%2BKPHmh1cdr2735OcY35D1L%2F7iL6p%2FKj2aDbL8f%2Be3uhKCMYaQT1kK6C2O69U7ypsPhl68uyx1lGl%2FuXzlyTlPGvuvsrZNjdCtrPp144kSOVQxEGPkMKO83gksDMuYdVIPL%2FX0xEy065FH%2BZ7CZ2MB3uqNmyrZ6QFUPoY%2BJCrkkCFKMGbzMsqwAeWZi9nlQaD2oliJ9N4h0bKq6Hd9eZ5k%2B9iKDxCIADlsOugYfmTUSbQj4ol%2BmRsrs768gPMdr7on7lk6uQzzTZoDywAAHMdJREFU%2FREVD7LqoD7440F3utqmu1GAbuykfC6laMs5ZdmKXZXxK5o222vQ%2BqLP4tEx7OrTY%2FD1MxsPMK2ZUqRotMVW5GB%2FbZMH%2F3%2F4h3%2BI%2FAs1539R1K6nIMMj0iigiCRJ45afVN7RsjkOrizrQlNLlDL63Facsrq%2Fp3JCc6%2FIoY9jsgfrvZwDdCKm3tXSsyj%2B6d0b40VvuiibrH4pqp6erJ7yhmnbDKtNQxhHM7Z9HQh%2FTvMiTccZkyycmsbL32xQmQFXnRKjBpZLZ2UigVoO%2F9YjkLYRZ3MMeURzEZwsOi9eZFVv57bl8cZXbo9vXTMgHnOutzbcU719v2JSvuhRl4UN1WN%2FIAJsbZJfB9ep5Nj%2BFEbebCnFvjqIPemes3odng2TPEO8ecDCmHCoRM4DDT0BFtCAj%2B9hQHvs%2FqEPfSguueSSrP4L%2F22nJMcZnswIV6xY0adMtsaJm983LSbsPKWkR2UJo%2BRISVmfAngwhG3H89JcJsuGdcDjKL149uTFcdbpg8trwcp60%2FjueNz5a%2FteeYY%2FR9aJIxgrDc5xjpEfyVk5zv%2BxWUoRxX2QJSZ1PXORN7ziT86kkTGxLMDfF6MeOL06RBfOM2zbzrbwqS%2Bl0A9l9E951L32C0uLHofiY18%2Bt7x1an2cNbdcIizmO9jAS1WPw%2BsgBEpRFpgAQduZT9JN4q99gEn9KkblC2Cd0wHIyc7NUXDsmtNLPt8b3fsaf0qjM%2BnEwI%2BfNMAVC6nRL5vaimLzoJ6Swjlhc8mi3nhbZ%2Flbg%2BPLOtjuxsSDcQhOUcRggEfh5qUUvPVU59VDu7u2xb99ZEnM6dgRr33P3PiTp22KR5zu0cbZ1XlfwKFOfcgjHyMzLkc7Zzi1zyF5aQ7Q6z0fP%2FUStCZdzUNUxXtPia4HGhMtHQVfjhHt6PtQSyl0nDnzyBtptXXb3Z3xtMfuLmuDe%2BJz3xwej79wTxw%2FcU9cf9dxRKr4NuuoTcDTZv3SHBDmpTlR7vzygqMD5Ym%2FvYcnMRXD8kUP%2BpNHhxMY6J7k9SSbNz34BUSidy6lZG6ZdX5Zv23FoPMw50hKi4KGLj2iTo0eWiYUe8s11NJLAM8x9TiGsw0PQCMiJNDw0MMph3%2FSoEFDy1%2BuNl6IuKZccz7Y23gh4qLlo6s%2FzlMuy9eNpy3AI59IZh9%2F%2BaQIpO01DyyNZ65dEevLu%2Bh6ys2PdeKcTPp1uDoIgWhfZ%2BPylW3A06F86KYuvQHG%2BYZNGtztZ35bb2%2F1xpHxome7drov3vOZ0%2BM5j1tbniGZHSvLQ%2BwZXQEEb%2Ft0o6%2B0hS11KkO85RWRWJmdCxfEFeWfl%2Bbs6Ypzy182nLd2ZdxQXmyUhBe7kJ8f8MxRiOz0yU5l26tNLKX87%2F%2F9v6shOPn8Kn77AKgxQ5I8w68eVHcORXZt3lflikDH%2BJR0XE9jLM5xDNWdAyCSf8omMdI1P20r107Le4RnbYvXv%2FfEEh12xVevmVWuD7dVRmN8hkLAiDcgc1hGPNGWw5QVMaaVP4X5%2By1rY2p57O%2BCDatjztZNccfkxm1k2bYOJMonD7rijwcCZG1xdq5P5l3O2pL3me07Tye60sfxuo54sdWCRdvised3l6g3o7puunRl44k07eGjDpAY4oGNvewj%2BvNDdkYyX7xiccyuvbypvdw97dLchvL8CNIZlFdWJ8U%2FfUZ%2B%*%2BEL1p5H11YuKya%2Fo64jpDOH0MtdbhXhLDgDGuJRiIM7nQNuAZ%2FICeIY%2B5ZUFRnxs4wnQjJi5Uuo2YtSUuPP%2BJSWaFZANmBrP%2F7vG32Zt8W%2FoBQSMoseSwVCkfoIED%2B1rR3uoszj0Gfv6nyWRqU4q62cjyuLyrsORkB7kkkciDk6QcxjHK5NLKf5cMd%2BVImIm0UmuBKicDYRGDsBupjuWnhfPeGUupWyo5KUb2%2Bjwops28arbiF4iYX1CCJyPqT2akG1NKEtRSfRgM4Qvsk83PF%2F84hfHy1%2F%2B8j69qwK%2Fpq8jIqAIQngO0UPMgvQcH4ozUH0phXJ5aQ4wOBb5ZWARIkFo2APaOjn3o1tmVi%2B07Oo68l3O2Uubl1KyPlmbh%2FXOAtDnbNuQRfp%2B7xtf3sBVIgRKgAGQ%2BjoTOR2n73%2F10lwyByLA1GGAEIDq6UsCqzmfpF%2Fmk2wHxOxBriRgsVaZ0c9xMi4tEfvhNRCC2DfKv1J2l%2Fb5D2DT1nirA%2BhvfOMbq%2F%2Fte9SjHnXECJXt%2FTp%2B2%2BbMmjXPO5gZivEIyzipOOUBT08ETIow8M%2B7NJeKZETlnHREPdTrlZ0PkU%2Fm0Ce6kqfZOTqECAQ8SUNLlJ2wfk1MqD3auL8A5Jryt1GchI%2BIKYojwBFhRWf6cp4y8km6ssf6zetix%2FRl0TqyvFxox7bY%2B7h7y02s06v6vshFFsCxnSDMXAsP57NT45%2F5pEtjHR0dVR02VUZHYBe2Q4bQOgAd65xwXHQVhSaX6F7ulIwvn3p2rC534gCbyI6XDooXud73vvfFe97znmomXQc4Xr9uqu6G0dMYDNASLIBiSOUMTnOOMczC7HP81rayhnhSZwzbMCl2tJc31p%2FZEsN%2F0ljCoBi%2Ben46HAjTKJyFB2NxEMcgUSEvdrt8pT5ShnHJx4gMbFmHjHVqL8PtBcuXxoWb1sTOMgn53GkPjzK3r2RWjl4cip%2BZudzUTBGRBzhyqF054%2BYY%2BcJyK1QGJSguQX7Exy4o7xfsvwRFXqPE0QiYtEf3TFPwt5TCPkDjt046OflST53jqFR4enhJef5hSzr48NPHPvaxykZHrfsbcrClPJZZ3Y4lClCYsRjElJ9SmX84Z2qePXTrC6%2BLgbPLbUKNUbdPndFvfmLfNuOLYHgfjYCOsQwX9UtzgMUx2ue4OtWdLVrnUFMvY%2FtQaXtv4Q20wAG4dCNTXprD3zlgRmSwnW1u31ny2A%2FcWp2rf7WsGBajPtN4EAc%2F%2BTLn10k0TfmlKTqK4b75Vi%2F6k61OeEpZTGps84fOn0Q%2B9UyenNOptKVNI9WnP%2F3po%2BaiWf836betGH0eJwAWpUQASlGOUdNpOQkgPDBuu7s85XRx%2F23wqVTvvvIs6JqGsdIJzdFBWz7yyRxitJmX5gxbZGlv85hn%2F%2FqVNgxNHJmpgnp1B9on8%2FricI5qHvrw0KnwF4WVN3HQZnNO6apBV2sZsq8ubwPbWW4%2FW1eePCu3oQ%2B7%2FqS%2BxXjRx7DLJghfupEzl1LwllKwJ7sqQ7ZnPvqG%2BPAbFscdC8aXRepGjooHXmyHh20fUdMxH%2FwAjm46jI7smZgvf%2FnL8ZKXvORBnQHP31RqKU4%2FREG5iGhBGfsczEGUZGSXdiiexBC7%2F%2FS2GPTjcpnu1HK70LZyJ8uyMTGgqzHR0HM5GjjwQYBhaJHoMxxHiY6GQo5xTL3uMox%2B7A03xNzZvfHkl%2FVHVDwApj6sK5%2FOIHfO0JXFn6MNfSKx1EFk1xYCBI41C6WbDiDC1qlrb2cMLiNg%2B67%2BIRfPBAJ52IgM5Be15KZpK%2BXw1Y56W7ZsKn%2BGfW%2BMLjnlS%2BfNjH%2F9xweqV7q94A2PqTfbt9x1xMHDO%2FhImbT99Kc%2FvZpcNEfgo9X7TTzWVoaEeQxHIcAAPCEdaADPsOtXpGLkJL1z96Jy3bjr%2BBi0ojzyt7E84dTdePZWOY7kGHwAzzEgruodBiJwutkVICrg7VkYX3%2F%2F3TFzaldc87OB8QflhYjjywsRb669EJHRgSyjKtDZ9qst%2FLXF8ZaT8HW927AOGOoq50NXURig6W6YJBMHJw1oHxg7j18YQ3ZMqo4DrY5FJ%2FppB9AN39IBHSzzWTx0Lm0mz8Elqj7tD5bH9Mm98dM7p8fsKZtjxpQD5TUm5YbZPQOqZsksBUkdUxbH%2BYkMf%2FmXfxmf%2BtSn4slPfvIRI0CW%2FW35bQUuEcLwQzmO4UwTB5Fh%2BfLllaMo30wj95bLaycuqA47zykWbPHhDI7BXwQA4JzRqqC8mbQ6Sft7p5TIcDAee%2B7W%2BOHNc8qfwZSXvV%2B4Jk9XvxxMxmbiFE5D7hTRfi4eA762nU8g1OsDJjnIWu9kymhr9LLTK13kZSIb2%2BCj%2FMyyFqmTqt9cl47kqLfJtq9997TCN8p7lxfG5R9rPJfx9y%2B%2Bu08k9gPuJCDXluNvfvObY%2F78%2BfGa17zmtxp4qVtbiQzzRCCRpZkYn%2FJypMWLF1fDZd35VY6yqfGv2BwsF9JrOQIgcimF05oBrD3DhnJJos%2FqNVvKc8PlhYhDeuPWe1rCHyEeLHel3Lu08YggWevDurZyKDdbFM19gF45ba8ud468sDy89IyVS2Ly1i2xrryFf1%2B5hpoEFCI2PaUhdM42bAMeEAGF6OaTSylAjvBwXAdhB6SOjke%2BOu07MDKe%2FChPCR6Ib113cnmz6tjy70uNh5fIi4%2F22UZddv7whz8cV1xxRRUstPW7Qi2Pmzbl0Ku3l5ssy3rSfaPHxw%2FnnhHdReEkxtDzGFUvN2Tp1YBo33Ak78mhh3E6DueTeq3yWTYBirfyImBGrWyvc%2Bf2uP6Lt5TLcRH%2F47UXxXHjyv1wm8vfEBRnyOEAPGXBI29EyOjDca7Jkg05%2Fmd33hRze%2Fsf7OkpMr7rwsdnk1XnMAyTGxABB2%2B%2FnI%2Fwsy%2BH1NnkdHmXc%2BaUyulozufMP9cX1a3TrOPNnAfHXQsbd%2BmwA1l1SjbXiSwRffzjH69AV6%2F7u7TddlXPrnlDi3Hay2fy3vKuknJJp%2F5CRI5gGM5hGJFLr8xeDVy2OV6%2Bw3ByHsM6Y3KgyGFbGYaWe3FIDl11g3oh4u49pcd%2F%2BfToKjnR5vKAj9xMJMKHLD757j3AICPya4mlDogd69bGn%2BzY1PdPPcq1lrbrjzaSOZ0OONoid%2BrqvFUA%2FOv5pGhFljrpgDpo6qmDGrKbo9a2zuGxcm3jP0RyyNUefvLRb3zjG%2FHqV7%2B6WiCv8%2F9d264NRA3VZpaX6tRJ5BFxcsEX4OwnCC14GmZEBBHPsMsxokAzqSci4snB%2FhhR7tlM3%2Fjh9MoRW7Y0bvEHCkBTD7BFq5SnuW5Gvjw%2BcNTovmdG8phYtHlYY21SRyB35lzAQxdtOSafFBXlwhaPlaVbRjS%2F1UJ17R5JNgImZEKnvlECbwTg5GcPbZAZ3%2FKiqLjyyisf9BhkVel39OuImxHouPXwZSrbDMU4jKj3m5T471rbHYcjomgDIIYmQyTncAASOQYMKU9WHX4bk2OG0KyDr%2FzKkJkA0B6AcRi%2BgM7JuZRy773lUthhRzpnO4dJUSaBoS00qkwwrh4xNp6wqywqNw7FygLK%2Fa3lz%2FsKyEQq8vqIPnJdQ59ZrY4EKB1F1xxa124st%2B3%2F%2BYoYMLdcHtxT3p%2B3qTzze2pPjHlH%2F%2FMx5EiZNElPgKYbPoBH7gTeM5%2F5zOovcun7%2B0btG8oLECd1998mdf1U7%2Fho%2FIMPQDEUpxomAM%2FQ5zgQAYAnzUQMQ9PaliUx%2BAXrYsDkg%2BUfe8qSzNAymRg4PEZ89JF9dq07htMTZICADM%2BOcQ7KS3PuSnEVQaQgSxLQOGZ451zArZ9X7taHnRvzyxs5TyuPNy4sb%2BfcUqC47XAUAw486CKFoKN0QdRCIryO5IN65m6JUY88PKkY2x3DGpPY6D6z%2FK%2FJ3cdXZdiruSMApc5HRro571FGH7L%2FvlL7Vec9Jobu2xsnb98cd04oa1HF0JvLzI5jfDgTIHPoY6jMBc005TiMCViDnlYWnsvftqLWEiFQuYswDg0tD80cfi0sXhkhqwLli3M4AV%2F5o3YtbwCBCOnWcACtD31ZV34lUuMLvLfeeutRL0P5l%2B7rxkyMLZsaT82plxHIMg0QaxuRA%2BEJlPV0Yvyak6L83V5BYomn5Q%2BsK9pa%2Fh2ot0yQogFA0a4ZgGQEdMff%2Bta3xnOe85wjomSD0e%2Fftzspo7M458fDx8TW4mw5WkYlxpLTGYbcuYEYEYkI9SEPqA59YVbEefdVj262DGnkQAcXlFfkDimvpt3TeE8epzf3eNGHg0Qbs0YRFeCAXqQFAGDo2rk8PvjG7fHGD59TyZBf%2BOkI5AYs0dgQaqhDZDasA3ZGVyChG5AvWbKkAq%2By5FDG7NpNCiJWnYwImz8wPcbvmBsHBx4oD9CVBfCeMlM%2BnAPiaykHD2Tfh4xuDnjMY4684lHn%2Ffu43S7P4eRMkgEEsPKBcTkXpwKADzLpEJk4q06TRk%2BJ7Z%2FfGmMeOCMODSwLxt0F34cdA8yAJqJyItKWIc81U05KoOTNCIDnfPuhZTFl0ph44xseKFdJyq3vo%2FfFlh39C7WAlhFHR8CfXjqJfUMfQGhfucwnPeBjKSWv9pDJedFQh2MHn2YasWFm7J%2BxvvytbP%2BQe6D8saI26aEtumjflZ4vfvGL1bphM59j%2B%2BXafpmFzuMkzjERyKUUQDGxEDUclxf55BDpvLJAlITP%2Fo2G03JprFyWK6l9BVrOyCiWsz7H8tIcXoDG%2BY7JMTPyDB%2BwKL710ZUxe%2FqOePcnJpbXgu2Kk2fujKvLWzmTlCU%2FoCUBjiEZOQcMeCvbvJQCNEl0IKNhmH6LFi3q6zBZBuAPDC%2FPz%2B5qLKSLvuygHv506ygTF0spl156adVhs%2B6x3yMtUF2KAzLLIYyn94sQ9t1m1OwcQ6To59eTZc00qn1CdI9tvG0LsPLSHPACAf7W1JovzeEDhCijme0de2eXS3Kt5bmRMtnYW97JXFaJTp5V%2FtlyYP%2FQyOGcXydy58RGNBeV8tKctUIdwoy3Y%2B3qaCt%2FftNMor4oKLfNCUmWId%2BhZWMrO4h6ymbkdPv%2Bz372s%2FjOd75TrRpknWO%2FR7dAWwHbPKCQ%2B%2BVdziLQjqVLYlYZVroKOOWJzcShhm7Dcj2ns7%2B3LAFysEghKgEIQOStXvIx%2B6KUiJMEgIBaH9oB4MbDL0ScWt4n%2BJEvjYqLzt8X15Y%2FP9zZ1XhpDjkSgNoS8ciXVyGARL4HKLaVOfu2G%2BPVm8pbSMvk65GrV8Tg8pDPsqaXiuMLvKIbm5BZZMwInZHSMUspn%2F%2F85%2BOP%2FuiPqlEjdTr2%2B%2FMt0C5KmWVK%2FAHDcxWvue%2B2mHz4tvYDi1vj82eeG%2BtGNF55hp2hLW%2FC5GyRAtCAiXOBCAA4zjHANkwtXLiwasu24yKibTmbfVGEU%2FGs0%2BI1J5Td9eVPD8u%2FU667IJ51aeOGzK1b11Ug1p62ALh%2BaU4ExNPQa2KQOeyuAqbH7%2B9PHcq7tOL88mjjD2fN7WtWWeBnH7Jl3qoAIGsP75e97GXVPXj1TtjH5NjGf2qB9pzlZsmWMuOdVHumYkB55O85C%2B%2BJD5%2FbP3vjHNHLxEVUAIAk5%2BSJHJZLKcCaEwvRIxN7TpNnOS8NsA8oeT55Ovfs1zyu%2FNecdxCXf5EsZQDecUAAtLzLWTSvUw7rCT7nhm4rDxFVT4n0l7SgMrysFebDS6IaefAzSbESIDLrYIB3%2BeWXx7Oe9axjSyn9Jvx%2F2moX%2Bep0fu2KQR4fWm4QbSlGz4eXOB0A6rmRqMVB%2F51Lc8kfkOs88ahHFODZsrX%2Fv0EyugK%2FfFXkzmUiw76IlQTMwFSnQx0zo3fzqiMu0e0sT83VwWeolpYgsgGi6PyJT3wiPFV2jH4xFmg38ajTT8s%2FUD578V31Q3FP%2BbdG4MvoJgIkAY%2FkPpdSOAvlpTnRbWd3uRt4XLkqsmtsbBtULr0dN7rctl9uMz5MGWnscjJnA01GVmAAOh9A134upXgWN2%2B9Ul%2BEyvL2yayz1EGojY%2Bd%2BvB49tL7Y%2FL%2BcnNDSSk%2Bf%2Fq5VTRXV0cCPrykCUD9zW9%2Bs5o84XmMfnEWaCm3dB9i5CTOPbE82vj48pdY43q6Y%2FG4ifGNE0%2BLXcUp8jX5jxxQbsS5hnBDYjoYSACH84Bx39%2FdGK1jysPtZTmtjOYlOpWPFyK%2B%2FXHZZJW7iaaG1Dol0AEi%2Bbs0Rw7DfL6AiCxZVn3bJkH4kdF9flm%2Fzt92W8kbd5eP1EA9dciuTZcd3Q7lGvgx%2BuVY4EEArDdzqKfcbr6%2FMVHgGJEAqDg1hz7gtWRjbY3T8njyWXlieSHi8xvXefOY3%2BEfOy%2Fa14%2BpDnG4PE5kqhPQGGa1LQ8DUhE7L82pVwdevS6Aks1EQtRUv55bqqd%2B5pOiMN3wN8S%2B%2B93vrm5KqPM8tv2Lt0BLGSoP6eH1vIkTRBVRwVDEWTn0iXiiC%2Beqw6mAKdlXz71sOQwTt3NXAd9l98XBm8bHobM3xMC1E2PAXRNj4JbGSx%2BBGbDq4AMM%2FN0qL5oaFg2jIpKlkYxmO7Zvjc%2B8%2Fa6YVV6l%2B8xL%2B28w1a7OAFwiNgJkeqQ%2Bcl9t1jvVc5%2F73Oo%2FLeoz3qrysa9fmgXaRZe8N43hAYlzjnZpjkNdGcilDuARuYBFDijfa6aR5X87Nn9vSExYe1LE%2FPI5TMAAFECeEw7A1T4Q4wmI8kEgJA%2Fgo%2B49C%2BILV6yNT3xjTmzY0hpzZ%2FVU7927c%2BG4w9wN9Y1lnTyQbWgT0VV75HjFK15RPeQD5MfoV2uB6kJn5nWcI4rZN4QZviyl2AdSC8miEKc5Jxd0L5%2BoIooBj%2B1mGrr0xDgwqvEoJNCKpmatIhvegAbI1gsNlbYdQ4AI8OokdfcMi8nlvzhe%2Bj8WxhWf7igpQcTfvvCePF39ioBkbCYy0k2Ef%2Fvb3x6udXtRzzHwNVvqV7N%2FxJX2jDii4kNdmsuhuC5ezmJFrttvv71%2BqtoeNqS8q3jH8MrpeWnOZAVIRLh8ag7IE3jJBMiVqdOwEdPinkUDYsLYg3HSrEExf1FbeZquOzqOb9wnmJE5o566Olfy%2BeQnPxnuL3z2s599VJDW2zq2%2Fcu1QPU3DTn0dXQ0nvvgKHdxyA0NkXKuzmUPxOs2r47e9gFx7bTZsXTykbfSiyqAqy5%2BbocCHiTaiJCGUdEzQZxLKYZ8kdA5Ec%2FwmBMGQylemfelOVp6Hqj%2Br3bluvZ4y0dPK%2F9SOaj8g%2BOoqr4ImrkpQOMpUl911VXVgnXyOPb767dAS7kx4JAIlEADAkOeiCFCoS2rVsb7Vi484sGe75x4atw1qf%2BOFKDjbKC1TGKo80GGN9tABFCGWoAETEspAKN%2Bkn2gAWB1XEVRvk5Shf%2Fz%2BlvLW0fPOOKpOfLrCECuTZfhLKUY2o%2FRb54FWsqSw6EEGvE4TSQEDsShU%2B%2B4JV5U%2FjCvTgfK7PfdtUcbRTFRxw0AAJgEQMAsqolkgGSIzEtzQKuNZsIvczhgxLeZ8MH%2FaEspbvx817veVV2Zaa53bP83xwLtdfARq%2FlBahHrQOuDk3l%2FmJeEByDJ64AvZ6yO%2F7y7nLM%2BAGqnTqKYSJhLJS63kS2HZhFTW8pp1z6guxvlda97XQX4Or9j27%2BZFmgHHPlXknWxZlAunX1SHLy7XNHIQuX3uumN2bAIZDYrwiFAAApDsciFv6hn8dgaXvXwUueKaPuT8neo0w9Gzx3l7fvTd8aYzmkx5Jo5FQ9fht8cwoHOhEKkIxuw2ge8zCfd%2BOlffI7NZvtM%2BFux0fL4xz%2F%2BkNknEHKsYQ14RJM6tZWca1p5s9NZ2zfGd2edHDt6%2Bt9%2BBQyGbHXzNW5yNAB0LG%2BHws%2BxrjdcG63lb1uPoHLr%2Fuh5T%2Bg7pH15ab1z5MmMuPbf%2Bc53Vm%2BIysiYZY79%2FnZYoPittQJc5nwAk8sVdRV6y5raA%2BMnxuennhCL1zX%2BqsACMTAob40w73IW9QzDCL86mEWoro8cV2ddbR9aU%2F77Y3RjrdABPOrLKI7hY1jWUbwZyjMdbgQ9Bj7W%2Be2k6rExDjVsIkOwyANchrgkIDMEAlZ96MulFHeloJyF5kQEOOoAVGby9pNj39dbY%2BjCOXFw5O5o21XezloeYELqG1Z1iGwfGEVOAPd%2FFiLqMfrdsMD%2FBVE8xr6VCTE9AAAAAElFTkSuQmCC%3C%2Fthumbnail%3E%3Cstage%20name%3D%22Stage%22%20costume%3D%220%22%20tempo%3D%2260%22%20threadsafe%3D%22false%22%20id%3D%221%22%3E%3Cpentrails%3Edata%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAOiklEQVR4Ae3VwQkAIAwEQbX%2FniM24X4mDRwMgd0zsxwBAgQIECDwV%2BD8nbNGgAABAgQIPAEB9gcECBAgQCAQEOAA3SQBAgQIEBBgP0CAAAECBAIBAQ7QTRIgQIAAAQH2AwQIECBAIBAQ4ADdJAECBAgQEGA%2FQIAAAQIEAgEBDtBNEiBAgAABAfYDBAgQIEAgEBDgAN0kAQIECBAQYD9AgAABAgQCAQEO0E0SIECAAAEB9gMECBAgQCAQEOAA3SQBAgQIEBBgP0CAAAECBAIBAQ7QTRIgQIAAAQH2AwQIECBAIBAQ4ADdJAECBAgQEGA%2FQIAAAQIEAgEBDtBNEiBAgAABAfYDBAgQIEAgEBDgAN0kAQIECBAQYD9AgAABAgQCAQEO0E0SIECAAAEB9gMECBAgQCAQEOAA3SQBAgQIEBBgP0CAAAECBAIBAQ7QTRIgQIAAAQH2AwQIECBAIBAQ4ADdJAECBAgQEGA%2FQIAAAQIEAgEBDtBNEiBAgAABAfYDBAgQIEAgEBDgAN0kAQIECBAQYD9AgAABAgQCAQEO0E0SIECAAAEB9gMECBAgQCAQEOAA3SQBAgQIEBBgP0CAAAECBAIBAQ7QTRIgQIAAAQH2AwQIECBAIBAQ4ADdJAECBAgQEGA%2FQIAAAQIEAgEBDtBNEiBAgAABAfYDBAgQIEAgEBDgAN0kAQIECBAQYD9AgAABAgQCAQEO0E0SIECAAAEB9gMECBAgQCAQEOAA3SQBAgQIEBBgP0CAAAECBAIBAQ7QTRIgQIAAAQH2AwQIECBAIBAQ4ADdJAECBAgQEGA%2FQIAAAQIEAgEBDtBNEiBAgAABAfYDBAgQIEAgEBDgAN0kAQIECBAQYD9AgAABAgQCAQEO0E0SIECAAAEB9gMECBAgQCAQEOAA3SQBAgQIEBBgP0CAAAECBAIBAQ7QTRIgQIAAAQH2AwQIECBAIBAQ4ADdJAECBAgQEGA%2FQIAAAQIEAgEBDtBNEiBAgAABAfYDBAgQIEAgEBDgAN0kAQIECBAQYD9AgAABAgQCAQEO0E0SIECAAAEB9gMECBAgQCAQEOAA3SQBAgQIEBBgP0CAAAECBAIBAQ7QTRIgQIAAAQH2AwQIECBAIBAQ4ADdJAECBAgQEGA%2FQIAAAQIEAgEBDtBNEiBAgAABAfYDBAgQIEAgEBDgAN0kAQIECBAQYD9AgAABAgQCAQEO0E0SIECAAAEB9gMECBAgQCAQEOAA3SQBAgQIEBBgP0CAAAECBAIBAQ7QTRIgQIAAAQH2AwQIECBAIBAQ4ADdJAECBAgQEGA%2FQIAAAQIEAgEBDtBNEiBAgAABAfYDBAgQIEAgEBDgAN0kAQIECBAQYD9AgAABAgQCAQEO0E0SIECAAAEB9gMECBAgQCAQEOAA3SQBAgQIEBBgP0CAAAECBAIBAQ7QTRIgQIAAAQH2AwQIECBAIBAQ4ADdJAECBAgQEGA%2FQIAAAQIEAgEBDtBNEiBAgAABAfYDBAgQIEAgEBDgAN0kAQIECBAQYD9AgAABAgQCAQEO0E0SIECAAAEB9gMECBAgQCAQEOAA3SQBAgQIEBBgP0CAAAECBAIBAQ7QTRIgQIAAAQH2AwQIECBAIBAQ4ADdJAECBAgQEGA%2FQIAAAQIEAgEBDtBNEiBAgAABAfYDBAgQIEAgEBDgAN0kAQIECBAQYD9AgAABAgQCAQEO0E0SIECAAAEB9gMECBAgQCAQEOAA3SQBAgQIEBBgP0CAAAECBAIBAQ7QTRIgQIAAAQH2AwQIECBAIBAQ4ADdJAECBAgQEGA%2FQIAAAQIEAgEBDtBNEiBAgAABAfYDBAgQIEAgEBDgAN0kAQIECBAQYD9AgAABAgQCAQEO0E0SIECAAAEB9gMECBAgQCAQEOAA3SQBAgQIEBBgP0CAAAECBAIBAQ7QTRIgQIAAAQH2AwQIECBAIBAQ4ADdJAECBAgQEGA%2FQIAAAQIEAgEBDtBNEiBAgAABAfYDBAgQIEAgEBDgAN0kAQIECBAQYD9AgAABAgQCAQEO0E0SIECAAAEB9gMECBAgQCAQEOAA3SQBAgQIEBBgP0CAAAECBAIBAQ7QTRIgQIAAAQH2AwQIECBAIBAQ4ADdJAECBAgQEGA%2FQIAAAQIEAgEBDtBNEiBAgAABAfYDBAgQIEAgEBDgAN0kAQIECBAQYD9AgAABAgQCAQEO0E0SIECAAAEB9gMECBAgQCAQEOAA3SQBAgQIEBBgP0CAAAECBAIBAQ7QTRIgQIAAAQH2AwQIECBAIBAQ4ADdJAECBAgQEGA%2FQIAAAQIEAgEBDtBNEiBAgAABAfYDBAgQIEAgEBDgAN0kAQIECBAQYD9AgAABAgQCAQEO0E0SIECAAAEB9gMECBAgQCAQEOAA3SQBAgQIEBBgP0CAAAECBAIBAQ7QTRIgQIAAAQH2AwQIECBAIBAQ4ADdJAECBAgQEGA%2FQIAAAQIEAgEBDtBNEiBAgAABAfYDBAgQIEAgEBDgAN0kAQIECBAQYD9AgAABAgQCAQEO0E0SIECAAAEB9gMECBAgQCAQEOAA3SQBAgQIEBBgP0CAAAECBAIBAQ7QTRIgQIAAAQH2AwQIECBAIBAQ4ADdJAECBAgQEGA%2FQIAAAQIEAgEBDtBNEiBAgAABAfYDBAgQIEAgEBDgAN0kAQIECBAQYD9AgAABAgQCAQEO0E0SIECAAAEB9gMECBAgQCAQEOAA3SQBAgQIEBBgP0CAAAECBAIBAQ7QTRIgQIAAAQH2AwQIECBAIBAQ4ADdJAECBAgQEGA%2FQIAAAQIEAgEBDtBNEiBAgAABAfYDBAgQIEAgEBDgAN0kAQIECBAQYD9AgAABAgQCAQEO0E0SIECAAAEB9gMECBAgQCAQEOAA3SQBAgQIEBBgP0CAAAECBAIBAQ7QTRIgQIAAAQH2AwQIECBAIBAQ4ADdJAECBAgQEGA%2FQIAAAQIEAgEBDtBNEiBAgAABAfYDBAgQIEAgEBDgAN0kAQIECBAQYD9AgAABAgQCAQEO0E0SIECAAAEB9gMECBAgQCAQEOAA3SQBAgQIEBBgP0CAAAECBAIBAQ7QTRIgQIAAAQH2AwQIECBAIBAQ4ADdJAECBAgQEGA%2FQIAAAQIEAgEBDtBNEiBAgAABAfYDBAgQIEAgEBDgAN0kAQIECBAQYD9AgAABAgQCAQEO0E0SIECAAAEB9gMECBAgQCAQEOAA3SQBAgQIEBBgP0CAAAECBAIBAQ7QTRIgQIAAAQH2AwQIECBAIBAQ4ADdJAECBAgQEGA%2FQIAAAQIEAgEBDtBNEiBAgAABAfYDBAgQIEAgEBDgAN0kAQIECBAQYD9AgAABAgQCAQEO0E0SIECAAAEB9gMECBAgQCAQEOAA3SQBAgQIEBBgP0CAAAECBAIBAQ7QTRIgQIAAAQH2AwQIECBAIBAQ4ADdJAECBAgQEGA%2FQIAAAQIEAgEBDtBNEiBAgAABAfYDBAgQIEAgEBDgAN0kAQIECBAQYD9AgAABAgQCAQEO0E0SIECAAAEB9gMECBAgQCAQEOAA3SQBAgQIEBBgP0CAAAECBAIBAQ7QTRIgQIAAAQH2AwQIECBAIBAQ4ADdJAECBAgQEGA%2FQIAAAQIEAgEBDtBNEiBAgAABAfYDBAgQIEAgEBDgAN0kAQIECBAQYD9AgAABAgQCAQEO0E0SIECAAAEB9gMECBAgQCAQEOAA3SQBAgQIEBBgP0CAAAECBAIBAQ7QTRIgQIAAAQH2AwQIECBAIBAQ4ADdJAECBAgQEGA%2FQIAAAQIEAgEBDtBNEiBAgAABAfYDBAgQIEAgEBDgAN0kAQIECBAQYD9AgAABAgQCAQEO0E0SIECAAAEB9gMECBAgQCAQEOAA3SQBAgQIEBBgP0CAAAECBAIBAQ7QTRIgQIAAAQH2AwQIECBAIBAQ4ADdJAECBAgQEGA%2FQIAAAQIEAgEBDtBNEiBAgAABAfYDBAgQIEAgEBDgAN0kAQIECBAQYD9AgAABAgQCAQEO0E0SIECAAAEB9gMECBAgQCAQEOAA3SQBAgQIEBBgP0CAAAECBAIBAQ7QTRIgQIAAAQH2AwQIECBAIBAQ4ADdJAECBAgQEGA%2FQIAAAQIEAgEBDtBNEiBAgAABAfYDBAgQIEAgEBDgAN0kAQIECBAQYD9AgAABAgQCAQEO0E0SIECAAAEB9gMECBAgQCAQEOAA3SQBAgQIEBBgP0CAAAECBAIBAQ7QTRIgQIAAAQH2AwQIECBAIBAQ4ADdJAECBAgQEGA%2FQIAAAQIEAgEBDtBNEiBAgAABAfYDBAgQIEAgEBDgAN0kAQIECBAQYD9AgAABAgQCAQEO0E0SIECAAAEB9gMECBAgQCAQEOAA3SQBAgQIEBBgP0CAAAECBAIBAQ7QTRIgQIAAAQH2AwQIECBAIBAQ4ADdJAECBAgQEGA%2FQIAAAQIEAgEBDtBNEiBAgAABAfYDBAgQIEAgEBDgAN0kAQIECBAQYD9AgAABAgQCAQEO0E0SIECAAAEB9gMECBAgQCAQEOAA3SQBAgQIEBBgP0CAAAECBAIBAQ7QTRIgQIAAAQH2AwQIECBAIBAQ4ADdJAECBAgQEGA%2FQIAAAQIEAgEBDtBNEiBAgAABAfYDBAgQIEAgEBDgAN0kAQIECBAQYD9AgAABAgQCAQEO0E0SIECAAAEB9gMECBAgQCAQEOAA3SQBAgQIEBBgP0CAAAECBAIBAQ7QTRIgQIAAAQH2AwQIECBAIBAQ4ADdJAECBAgQEGA%2FQIAAAQIEAgEBDtBNEiBAgAABAfYDBAgQIEAgEBDgAN0kAQIECBAQYD9AgAABAgQCAQEO0E0SIECAAAEB9gMECBAgQCAQEOAA3SQBAgQIEBBgP0CAAAECBAIBAQ7QTRIgQIAAAQH2AwQIECBAIBAQ4ADdJAECBAgQEGA%2FQIAAAQIEAgEBDtBNEiBAgAABAfYDBAgQIEAgEBDgAN0kAQIECBC4qcoFzaZQGfQAAAAASUVORK5CYII%3D%3C%2Fpentrails%3E%3Ccostumes%3E%3Clist%20id%3D%222%22%3E%3C%2Flist%3E%3C%2Fcostumes%3E%3Csounds%3E%3Clist%20id%3D%223%22%3E%3C%2Flist%3E%3C%2Fsounds%3E%3Cvariables%3E%3C%2Fvariables%3E%3Cblocks%3E%3C%2Fblocks%3E%3Cscripts%3E%3C%2Fscripts%3E%3Csprites%3E%3Csprite%20name%3D%22Sprite%22%20idx%3D%221%22%20x%3D%221.552893027776463%22%20y%3D%227.771545243273181%22%20heading%3D%2265%22%20scale%3D%227.900000000000001%22%20rotation%3D%221%22%20draggable%3D%22true%22%20costume%3D%221%22%20color%3D%2280%2C80%2C80%22%20id%3D%228%22%3E%3Ccostumes%3E%3Clist%20id%3D%229%22%3E%3Citem%3E%3Ccostume%20name%3D%22Screen%20Shot%202012-12-22%20at%207%22%20center-x%3D%2269.5%22%20center-y%3D%2215.5%22%20image%3D%22data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAIsAAAAfCAYAAADX7j6qAAAGMklEQVR4Ae1bTWskRRh%2B5iOZyXfCZEISNsQQRUhYITkYUAy7kCAiXgQPHkTPgncP%2BwP8B4K3nETvOexl1YMIXhQlCpsENjNxh2TyMZNMJjOZL%2Fup0L3z0dVd3dM9K7FfGLpSXR9Pv%2FXUW2%2B9VQmtra01EEigAQUNhBXKBEUCDQgNRFX0UK1WUSqVUC6XwXS9XlepplwmHA4jGo0iFoshHo%2BLtHJlm4IBdrmCnOrdkiy1Wg0XFxdoNBpYWlrC1NQUBgYGEAqFxE8OQ%2F6Gddken5Srqyvs7e0JMjJ9cnIiSDM6OopIJCJvyOZNgL1VQV7oPSTzWWhJCoUCVlZWMDMzg%2BvrazGgHATOVq%2BkUqmItvX22P7p6SnOz88xNjYmLI3%2BTvUZYLfXlBu9m5KFJOHsX19fBwePf9PCeEkSu88hOdPpNAYHBzE8PGxX3HgfYDdU4SphpfcOB5ezkkTZ2NgQPsrx8THOzs56ShR%2BJZe7hYUFFItFYdFUvjzArqIl6zJWem%2FxWXQrsrm5icvLSxwdHQnLYtX8zs6O8D%2FoLNHHoJPKDulzMN2N9PX1YW5uDqlUCkxb%2BTBusHeDza5uL7FzQh0cHHRsPDgm8%2FPzwjrb4W1%2BL8PeQhYuNaurq8KK0JpwAFRk9vs06hWgXgKqeaCYAU53gfjfr2AOr1oOsl37JN7ExIRYBvmUiVvsJHuzcDe2uLgosvb39zus2vLycnNxy7Tf2Nm5TpTF6yK%2BLJxg8HbfYOAqZlPYeu0%2BTmdmjTyVhBl2gyz0R7j8TE9Pix0JTbqyaADD%2Fbe%2F6KhGkjlg7E2tduMZ%2FvnlGWafPES0ohVwKYlEwlgKucVul66wa42lfjpsaXIvtYcvvnpX5G1%2Fc4j7rze%2FPsR7n9%2B%2Ba86Vpf3EbkcUYiJ5Pt39E1ta2ilh2rEbPgvJwVlDB4ez1BPRgI6%2BBRx%2F9APSz9PIZDJiaaMf5ES4%2FIyPj3fMcr0NX7DrjXf59Au7ClF06DphEpnnepbSsx27QRYG3JLJpBF4U2pNsdCgNjOjj%2F5C6ZM%2FcPnB78hv%2Fobsw8eKtW%2BLDQ0NCWxmlfzEbtaf0zw%2FsNNHkS09Zvh0wtzLnZu9luY1YzfIQlPOdcqv7fHAPDDxDjD5PpD8EOh7IMVn%2BoK%2BhAyb39hNATnI9AM7o%2BhmPooVLBLm451frYp0vGvGbpCFnTPKJxuQjlZ6mMEAEpca2THD%2FxU7B9%2BpxByc1LTr3SALO%2BWAsIATmZycdFLcdVm7nZkb7K7BOKx4V7AbWwvuyXd3d0U8w4kuaI1unmjLy88bqMUryE48xcBnGYSMlp20Zl5WtyjEaCZusZu15XXeXcJuaJ9bUs5ON8IzwXA1gr5CHLPpN1D97h7qZTctmdfhlp5KN9s2s0Y32M179C7XL%2ByyieMdci3y0aZ3gyyMtvLU1wtJPl3G0Ndv40bzpWqX3bVIktCMc3mURYS9xN4d2tbafmJnZLbo4tpa2RjxVqztf5lhNxYLer28HsDts1VYvb1R2d%2Bx82FMbWvBq22gPF5AOZFDbeRCW6ryaEQ1BkXUvpQk4S%2BXy4FBIjPxGrtZH27y%2FMTOA1ZGZhlwU3V0SZRvlxkttRcz7AZZaMo5Q3k9gPdWvJRYbhj8ORXuzPi7ublBf3%2B%2F5TLkF3anmPXyvcDOiOyW1qEKYXSiHI7Lj0zssLcYJR7%2B8R4Jo7gvW2gGSRIynJiIzUrcYrc66%2BEZkRZ6ciy9wk5ggjCahbFakpwQxQp7x30WOrkM9%2FN6AE8fVST74DGSP6qfl9i1yVlJkhALl8aRkRGlS1BusNthcfr%2BZWFnZJYBt%2FY4ihOi2GHvIAuVwwtEPHvg9QBGdXslZDUB06Lwmc1mRf9OLz8F2J2NmKreTcnCrjhL8%2Fm8uB5Ax7LZ6eVAcltF4VO%2F38m%2F9TSfqkKwbEff9ZAs3V6rDLDba9%2Bp3qVkYVccPC5JPKjjqS8PlbjzIJFkUUk7srSTS%2F8kAufSw10PnVn6IM0E1cupPgPsrZryQu%2BWZNG7oyUhQYJ%2FBdE18uLJ4Ji%2Bk%2BREkgUOX9RQT%2F3X9K5EFvXPC0reZQ20bJ3v8ocG39a9BqJ0BAMJNKCigcCyqGgpKCM0EJAlIIKyBv4FMOTh%2FS1DiKYAAAAASUVORK5CYII%3D%22%20id%3D%2210%22%2F%3E%3C%2Fitem%3E%3C%2Flist%3E%3C%2Fcostumes%3E%3Csounds%3E%3Clist%20id%3D%2211%22%3E%3C%2Flist%3E%3C%2Fsounds%3E%3Cvariables%3E%3C%2Fvariables%3E%3Cblocks%3E%3C%2Fblocks%3E%3Cscripts%3E%3Cscript%20x%3D%2250%22%20y%3D%2253%22%3E%3Cblock%20s%3D%22receiveKey%22%3E%3Cl%3E%3Coption%3Espace%3C%2Foption%3E%3C%2Fl%3E%3C%2Fblock%3E%3Cblock%20s%3D%22setScale%22%3E%3Cl%3E100%3C%2Fl%3E%3C%2Fblock%3E%3Cblock%20s%3D%22setEffect%22%3E%3Cl%3E%3Coption%3Emosaic%3C%2Foption%3E%3C%2Fl%3E%3Cl%3E0%3C%2Fl%3E%3C%2Fblock%3E%3Cblock%20s%3D%22doForever%22%3E%3Cscript%3E%3Cblock%20s%3D%22changeEffect%22%3E%3Cl%3E%3Coption%3Emosaic%3C%2Foption%3E%3C%2Fl%3E%3Cl%3E1%3C%2Fl%3E%3C%2Fblock%3E%3Cblock%20s%3D%22turn%22%3E%3Cl%3E1%3C%2Fl%3E%3C%2Fblock%3E%3Cblock%20s%3D%22changeScale%22%3E%3Cl%3E10%3C%2Fl%3E%3C%2Fblock%3E%3C%2Fscript%3E%3C%2Fblock%3E%3C%2Fscript%3E%3C%2Fscripts%3E%3C%2Fsprite%3E%3C%2Fsprites%3E%3C%2Fstage%3E%3Cblocks%3E%3C%2Fblocks%3E%3Cvariables%3E%3C%2Fvariables%3E%3C%2Fproject%3E

 */

SpriteMorph.prototype.mosaicAmt = 1;
SpriteMorph.prototype.setEffect = function (effect, value) {
    var eff = effect instanceof Array ? effect[0] : null;
    if (eff === 'ghost') {
        this.alpha = 1 -
        Math.min(Math.max(parseFloat(value), 0), 100) / 100;
        this.changed();
    }
    if (eff === 'mosaic') {
        this.mosaicAmt = isNaN(value) ? this.mosaicAmt : Number(value);
        this.changed();
        this.drawNew();
    }
};
SpriteMorph.prototype.changeEffect = function (effect, value) {
    var eff = effect instanceof Array ? effect[0] : null;
    if (eff === 'ghost') {
        this.setEffect(effect, this.getGhostEffect() + parseFloat(value));
    }
    if (eff === 'mosaic') {
        this.setEffect(effect, this.mosaicAmt + (Number(value)||0));
    }
};

SpriteMorph.prototype.clearEffects = function () {
    this.setEffect(['ghost'], 0);
    this.setEffect(['mosaic'], 1);
};

SpriteMorph.prototype.drawNew = function () {
    var myself = this,
    currentCenter = this.center(),
    facing, // actual costume heading based on my rotation style
    isFlipped,
    pic, // (flipped copy of) actual costume based on my rotation style
    stageScale = this.parent instanceof StageMorph ?
    this.parent.scale : 1,
    newX,
    corners = [],
    origin,
    shift,
    corner,
    costumeExtent,
    ctx;
    
    facing = this.rotationStyle ? this.heading : 90;
    if (this.rotationStyle === 2) {
        facing = 90;
        if ((this.heading > 180 && (this.heading < 360))
            || (this.heading < 0 && (this.heading > -180))) {
            isFlipped = true;
        }
    }
    if (this.costume) {
        pic = isFlipped ? this.costume.flipped() : this.costume;
        
        // determine the rotated costume's bounding box
        corners = pic.bounds().corners().map(function (point) {
                                             return point.rotateBy(
                                                                   radians(facing - 90),
                                                                   myself.costume.center()
                                                                   );
                                             });
        origin = corners[0];
        corner = corners[0];
        corners.forEach(function (point) {
                        origin = origin.min(point);
                        corner = corner.max(point);
                        });
        costumeExtent = origin.corner(corner)
        .extent().multiplyBy(this.scale * stageScale);
        
        // determine the new relative origin of the rotated shape
        shift = new Point(0, 0).rotateBy(
                                         radians(-(facing - 90)),
                                         pic.center()
                                         ).subtract(origin);
        
        // create a new, adequately dimensioned canvas
        // and draw the costume on it
        this.image = newCanvas(costumeExtent);
        this.silentSetExtent(costumeExtent);
        ctx = this.image.getContext('2d');
        ctx.scale(this.scale * stageScale, this.scale * stageScale);
        ctx.translate(shift.x, shift.y);
        ctx.rotate(radians(facing - 90));
        
        // Calculate new mosaic amount based on +10 intervals, get positive integral value
        var newMosaicAmt = this.mosaicAmt>0 ? Math.floor(this.mosaicAmt/10) + 1 : 1;
        for (var xpic = 0;  xpic < newMosaicAmt; xpic++) {
            for (var ypic = 0;  ypic < newMosaicAmt; ypic++) {
                ctx.drawImage(pic.contents, xpic*pic.contents.width/newMosaicAmt, ypic*pic.contents.height/newMosaicAmt, pic.contents.width/newMosaicAmt, pic.contents.height/newMosaicAmt);
            }
        }
        
        // adjust my position to the rotation
        this.setCenter(currentCenter);
        
        // determine my rotation offset
        this.rotationOffset = shift
        .translateBy(pic.rotationCenter)
        .rotateBy(radians(-(facing - 90)), shift)
        .scaleBy(this.scale * stageScale);
    } else {
        facing = isFlipped ? -90 : facing;
        newX = Math.min(
                        Math.max(
                                 this.normalExtent.x * this.scale * stageScale,
                                 5
                                 ),
                        1000
                        );
        this.silentSetExtent(new Point(newX, newX));
        this.image = newCanvas(this.extent());
        this.setCenter(currentCenter);
        SpriteMorph.uber.drawNew.call(this, facing);
        this.rotationOffset = this.extent().divideBy(2);
    }
    this.version = Date.now();
}

Teh almighty changeset!

JK, the top bit is a little program to test it, and to check how fast it is (it's actually kind of slow, maybe some caching when the mosaic amount doesn't change?).

EDIT: http://pastebin.com/sn4ciGkN  smile

Last edited by Hardmath123 (2012-12-22 08:48:18)


Hardmaths-MacBook-Pro:~ Hardmath$ sudo make $(whoami) a sandwich

Offline

 

#6447 2012-12-22 09:37:10

alloplastic
New Scratcher
Registered: 2012-08-30
Posts: 12

Re: BYOB 3 - Discussion Thread

xly wrote:

I like your Byob video tutorial .Maybe you can find some ideas by going to my :

   http://www.xleroy.net/ByobTuto/thumbnails.html

Hi, xly.

Interesting stuff... I bet there is quite a bit of interest in applying BYOB to games.  I would be using Stencyl for my game writing class (a commercial tool built on visual programming), but I like the simplicity and flexibility of BYOB much better.

Offline

 

#6448 2012-12-22 10:57:07

xly
Scratcher
Registered: 2010-04-17
Posts: 100+

Re: BYOB 3 - Discussion Thread

alloplastic wrote:

xly wrote:

I like your Byob video tutorial .Maybe you can find some ideas by going to my :

   http://www.xleroy.net/ByobTuto/thumbnails.html

Hi, xly.

Interesting stuff... I bet there is quite a bit of interest in applying BYOB to games.  I would be using Stencyl for my game writing class (a commercial tool built on visual programming), but I like the simplicity and flexibility of BYOB much better.

No doubt that "games" are a strong incentive for kids to learn programming. Transposition of Byob to Snap! will still increase their interest for several reasons (publishing, block sharing , library extensions etc). Much to do !

Offline

 

#6449 2012-12-22 11:29:04

shadow_7283
Scratcher
Registered: 2007-11-07
Posts: 1000+

Re: BYOB 3 - Discussion Thread

bharvey wrote:

If you use the same name for two variables it's presumably because you're deliberately shadowing the global one.

Right, but not always. With things like iteration variables, I'll often use "i" for multiple loops, while still needing to reference both. I know, probably bad semantics, but...

Code:

    var something = function ()
    {
        for (var i=0;i<10;i++)
        {    
            console.log('second'+i);
        }    
    }
    for (var i=0;i<10;i++)
    {    
        something();
        console.log('first'+i);
    }

functions correctly.

Offline

 

#6450 2012-12-22 12:17:14

joefarebrother
Scratcher
Registered: 2011-04-08
Posts: 1000+

Re: BYOB 3 - Discussion Thread

It will be cool if there was some functionality to allow snap! to communicate with BYOB 3, Scratch 1.4, Panther, and other modifications.


My latest project is called http://tinyurl.com/d2m8hne! It has http://tinyurl.com/d395ygk views, http://tinyurl.com/cnasmt7 love-its, and http://tinyurl.com/bwjy8xs comments.
http://tinyurl.com/756anbk   http://tinyurl.com/iplaychess

Offline

 

Board footer