Scriptnode synthesizer. - How to?
-
So I want to dive into making a scriptnode synth, in fact I want to make a 2 osc polysynth with modern functions and a vintage style monosynth.
I do not want to use any of the "modules", only scriptnode.I assume I need to use the Scriptnode synth module, but that has some issues.
If I use the Scriptnode synth module , it has its own adsr etc , I want to make the whole thing in scriptnode , what is the method for doing that ?If I make scriptnode fx it seems I do not have the midi module working, so I need to use the scriptnode synth.
Any tips to get me started?
-
@lalalandsynth I think a scriptnode synth would be a great collab project :)
-
@DanH Indeed , that would be perfect , how do we start ?
I am stuck at the beginning, although I can make and adsr , filter , lfo etc not sure if basing it from a Scriptnode Synthesizer or if there is another method ?
-
@lalalandsynth here's a little example of midi use in a scriptFX :
HiseSnippet 1748.3oc2Y07aaTDEe1XOI0I8SnT0iVp8PpTID2FZQhCYSbhainN0jMMzakoqGGux6NyxtichKsRHARzaUBINTtP+K.wUN.TIDRfTqTkJ+APufD2B+E.uYm0d20dSpiaRPpIRQddyGuey6ieu23TwiaR884dHsbq11khzNL1nMSTuXchECszBHsihKS7ETu7JQy21k36SqhzzxbEo.sbYQA+r0rySrILSZjHDZMtkI8ZVNVhHoUz+.Ka6RjpzUsbhs5YzWxjyJxs4MA7jAOMxkX1frNcYhbYifQZitXUKA2yPPDTejV144UaaTmuASs90r7stsMUNn.x.NHk3Rb6pRDK+LpXcK6pU5bu8QHMbkHqPFkU3j3xVUs5JOxZb7fIxGsi31CsQRBuLIfWgsCdo.IsXPJqBRm.aX5Y4JhlQhmIvKw.mSMBX1iCE0ZQZOFWjCKfIlxgzfVxCFzcCSdoom974g+bt2uVSlovhyxyYKyEzqyl7bi+oima76Md9dmpVsTmSpFOtsM0K0okdZucZiSxZ5bap24y2hX2j1cgv0OoMczAylZpt0wVHmsDyRbcWZ33nfhBo3APglM3S2XoEHBhzoDJCVmK0SXIgi1BzVPDtxEkCu.0ugf6Bw384+fHGd0l1DQxvIYNT3Df8HgOT5nX9Vh1wyw5MFK61aOlN0TfTusCHbOAthkvrd53cjTvKX01uwaXF6QvKVqF0TDA1r3R2bGSOyNXgRCNTNpBJSfMrXz.Zz.fbpfw4+HRKZ9qPYTOoQsvNvj9rAkI0cfYRuto.T+pdDluK2OwAaPcrVkyjVjHg2vGHKnexJRubb4E4DuTmZqYKAWxT2iAQzzKHbYNGdSlHQ3QlgxmjLqI15SgKM69E89AZp2qNSQlACtujpQ45fQCKGWa5hrVTafNL.iuAv+UizzVzQZxf7xbF2sNmYYFOBXEpvyZ80odwwdpWn4DBnefHImTeEpMkDOZ9r5WChBIdfchNj1hcek4T8WmFqfadYlY9WOX3y7ZOC+f5xGOrYLP+Rfb3vg4KcyBo1F18wQs735QcIdzU4UrIsmzmHSi.NS54yeaatYCCq6P6uOIWEDlWthIMqSXLps+vzN0n6QIBnU3MEVr0KSfz2MglnWtoiATtwjVLDcfLsQjkLTimVNVUugUMXv+B+DNYA4XsvIKzYxXMgsLUrA2qQf6H7yvcQY68CLx2p1lEPyYay2nH2w0JL5E7AAxpvsa2g6QKiZEcPZmpRJ3dUh+pDKaYCMqQ87CNjwvSOE7KDpub.wxnkHlfQrcEBThGxYjcaBAkTuoL6Fbl.WwiIjGQmRyJKB.GG40T9DGounBwCdwCzktrAyQzxDqgSUznbDjCNhROK4ulbVShMZMo2VtIjTKxkGhXr5wBNP0MEDSbCdqX2fnkL3fduChigI0q56kDdGGSCKnLkZ1cAxv6HxNlLrMl4NDbpHAjwFRtvUIdqSEA.MtfvGDvnAYd9IGFdoVBPHF65PPc0gTzXXkdP634IuG.0vlcd8wBV9t.iw7MAVPEuTBIxaDqJcyNIOKB4+UAZsfsKMEnX2Sf+t6HHbtrEK7lGQqWlrYRY2+WzMDTWI+TnrG8vG9CyZzftgxaEJUe4x+9rRi6gBKAhhNmOapG8PiuQGsqUNTWrGkqZsrWkq5dXAY0BkxuFEhbP8cXn8+q+n3qB0UP8cxG.pdLnQLSR63F9ylE8UO5fvvmCazzWxkz6M+OOHL54vc5IrmCelCxfthM8ZQ2Kt+ohfslc6QvD3n9o2Ch7105eT3YJBZJpNpixt7onX79JVxDr9GInnDzKyTxoF1hQoo3sko1uUsjL0SfkunsIkY1tG9yLwrkis+DM0oLQeG8bMEbGvLG7st7Rbpa8yu5.YbbY3QcVt1wXT99eq0O8s+0OlHldexNfwyUMFO5cO42ckWbm+X1swJzWfkzo1SfUMKa4JmRN0PGX0S44RpyL5i6xBxityFxYz6mb745CjgT+ycdZH4PTzbxiR+A5CbPk9Eu3ymsGv73m7jyLXfAcl+4YAfIC9Ci.wCz+54+0Sc5WFG8Edb+QSWPe2EMMZvWjx9F4XJp9ieyEddn82vgyE0gmMkP+5u3NewvTb3356Vx4fuWj+OpKjCuHi.Orr5N0JlpC8XXQAZYPKZuKi3o28uurLin6VeGwwZLwWdO8gtedEAEZdNugCI3QpC2+zfChmTePnCGhoG+VgUukVxCEHAx4YA+m7xgKKGmu.pU36sjuuFIe44sLMkeuNucADJ88bggXOWbH1yLCwdd2gXOWZH1ykGh87d63djeq2gE.jQ6ffJKppSo0IuEJOh9OHY0BSI
And for the scriptnode synth it depends on what you want to put in there but the beginning is simple :) (you can use either the envelope module or add the envelope node) :
HiseSnippet 1431.3oc4X0zaiSDFdbZmzMcKPWzdXOlCbnqToJYorfDGZ5GorQzzMptTwspo1SZFE6YLiG21.BoUhK7WXk3.m4e.2PhSb.IDbgi7Sn7K.dG+QrcianIaZAAoRUddmOdel2Oddes6HEVTeegDYT4vAdTjwRXyAbUus6QXbTqcPFuNtMwWQkUiDs0.OhuO0FYXL2GpEXTYdT3uK2XKhCgaQSEgPGIXVz8XtLUpzNM9HliytDa5gL2Lqd8FsrD7sENh..Oygqg7HV8ImR2mnWVILxnbSalRHMUDE0GYL+VB6Al8DmyiV+QLe1INT8f5HS3fhDuqvwViX8yns6wbr6jbu8QHCbmTqvbQVgGhayrYCkmZMVNbhpo6Hq8vnTd3MWN3U+5fWAPxHCjlOBRO.aZIYdpzYz3493Vbv4zk.l8rPIZsHiuGus.V.WslKoOcWILX3FV4o0psZU3eO9C5FvsTLAupfuuPQeNekGu3muXkE+hEqd0o51sv4zpQJbbnxBmV6okiaiqvCbOgJWs5YDm.5vEBW+71zx2LapUzsNyBE7Vbl54dz3woAE0KvCfhMavSebqcHJh1oDKCVmGUpXZ3XrC8LHBOxEUAuC0uuR3Aw3i3+fHGgcfCQkObRmCEOAXOx4C0NJtOSMHaN1Uiwl+5sG0JLEnva6MDtO.2gor5ULdKU.dAq1sMdiyXeMbytcoVpTvNOd2OYromybnTIAJQYegDogP4QwR3BaZUsXpOymJqOF1ze9lxl5ciYSS3DVEOI4ekuwFsr4e4Cqyr9BH6Jeaw+dmla7pmJOaJWTIAilLWOGZS9YTGfuJDiuIPP0kD3nRjlOBrsfK75I3LqrAcGPUR1omRkYwdgWnMUJnfcpjG13.pCk3mIp7sZrGiSIRvNQu8sEiye8HbDbqpSap9eCJ349eOE73Lc2C27BkjT+e4d3XX9j+of4Ah.EieZaBj1eAzc79AtlPMDKJ.QNm5.JBaTR2hTz3Z5wZ.YR41gC9S3W7j00iMhmrdxjY5tZep5bgreXla7yPEgnDT+gEMO1OSQyMcbDmusv0iEmA.1mPYcDNCR3uLJEshDTuoqH.TXLzeFw+PByQurinR+vCYAbs0f+fzk8CImv6Rr.i6fNDnJNj2oaoD7QT4ZVYHQtFLl02oOtj5vQVJ.Zt5qe36zLWl9Iinuzi.GcIsFVB2x+H8rVDGzQ5ZyZPizmod4IXMJvgzy1GTdNfuLlFS1uV3zSBzviEZugNznCQBucF7FE9InKxBiLOWyScHQdJUEhzrBh6llSC6BwO+v3aUKaMkhv2BZuQmgTGMTW5oJGVuMudF4X0WGnH3EIcvuCy2ygLXq.fnJpZQNI5KF2ldQRbZSnkHaHWIb6ZKBJy0ExDGNBfSaFO1.jx71lbQdYe0OzvTQ8LYeVhru4ku761vrO87HmVrzF629G2HxmFWTcjyFMwJGXLthxC+MhxiJvui15Go78nP.DZjCCc6e8KieFPVMKt7SrpW.5UxhLHitegwBnxeci6.CeErYfulrIU6e6e7KsOY4e6tvnWAmz11UN70abGFzscf7rQPvuuwLBAWtw0if6iSa481Jsab5WyronEn5zl9FRqhxv+mmrbjpWR5ZoyO0EnloLpwcCjiTs7jafWtwjZfCe8iI02tdiQys90aXt0W59SwwV6JoeZ.kaM3J5+E8+6xttbiQu50lvq9Rg5u5A5nnYAi9LJ3dlo5wwrr.tSuBX0x62W31Q2wcqLxorYfR3BFjvOfVtDAzVBQeWRXqwS22f7tnQdWhkTbrUz2PRm9duPI.oAO7i1WA2VOtZczYwcGp6xF4xrYGaYoeCw2FdIjh2ySlh87NSwdVeJ1y6NE64oSwdduoXOu+X2i96mEG0o60FDzoYDarQSNAdcwvRBn+BviYy6J
-
@Matt_SF Yes, but for both examples there is the Default envelope ?
How would you deal with that, I would not want 2 envelopes on the synth.Should I just max out the release on the default envelope or ? Bit of a hack ?
If I want to build it fully in Scriptnode you would need to get rid of that envelope, I gather ? -
@lalalandsynth you must have "at least one envelope module" attached to the synth module, you can't get rid of this one. But you can indeed max it (0 attack, full sustain, ...) and actually use the one into the scriptnode module
-
@Matt_SF ok, that is a bummer, would that affect polyphony ?
-
@Matt_SF this quickly becomes a problem actually.
If you set the Default envelope to 20sec and the "SN" envelope to 20 sec , the overall envelope is no longer 20 sec. Apart from the fact that using 2 envelopes is hacky.
-
I am also still wondering if its possible to make a monophonic synth in HISE ?
-
@Matt_SF ok, that is a bummer, would that affect polyphony ?
From the little time I played around earlier, It doesn't seem so.
If you set the Default envelope to 20sec and the "SN" envelope to 20 sec , the overall envelope is no longer 20 sec. Apart from the fact that using 2 envelopes is hacky.
What do you mean ? I tried with both envelopes at 20sec and it seem to last 20sec...
I am also still wondering if its possible to make a monophonic synth in HISE ?
I think that would be best handled with scripting
-
" What do you mean ? I tried with both envelopes at 20sec and it seem to last 20sec..."
You can hear the difference between default at 20 sec and disable the SN envelope.
Then enable the SN envelope on top of the other one, not the same , understandably. -
@lalalandsynth ha indeed, I didn't even bother to try them, I tought they would be the same. We should have access to a "Release curve" parameter...
-
@lalalandsynth and replacing the 'global' envelope module by a Script Envelope Modulator doesn't seem to work...
Tweaking the skew factor of the OSC gain parameter does the trick. This way the release is not linear (but the release time is not precise though) : -
You can do the entire synth in scriptnode but then you must implement the voice killing logic there too or the voices will stack up until the polyphonic limit.
- Remove the default envelope and replace it with a "Scriptnode Voice Killer" envelope - you will definitely need a HISE envelope that tells the voice to stop at some point but this module is made for precisely this use case and will handle the voice killing when a voice kill message is sent from within scriptnode.
- In your scriptnode network, add a
envelope.voice_manager
node. This will send a voice kill message to the envelope when the value is zero. - Connect the gate output of a envelope with the "Kill Voice" parameter of the voice_manager node. Now the voices should be killed properly when the ahdsr gate closes (watch the voice counter if it works correctly).
HiseSnippet 1415.3oc4X8zaaTDEeVmLN0ooPpDRTwIefCoRkH6RnfDGhyeasnN0JNDwsno69b7Hu6LK6NaRLHjPhK8qPuwWCtUINwAjPhu.7QneCf2ryZ6cscMdcSbQhToJOu2al2ad+426May.oMDFJCHVkNomOPrVi1pmP0YuNLtfTeeh06QavBUPPYCoc64yBCAGhk0ROVSvpzxj3+d816xbYBaXHIB4TI2FdJ2iqFRsYsuh65dHyANg6kR5spU2VJ1S5JiP6YIZEhOytK6b3HlVrBThUwCb3JYPKESAgnL6Jc50pi7RgQ9S4g7m6B5EUIsvCxPlrWGtqSy920PBwh1b3MeIyM+CnM3N7AzG5AVOlQ4g6HsOvpvzLop4vjrRYRKaLo6RaYGv8UC4nsmaSqKv.RaF5pSaJFYIVuhtmDEPn1zi0ENL.WLXCa7nJUdPY7+t+W1NRXq3RQYo3HoBdlXi6u52uZoU+gUKOJq1smHOsZBjttPvDYqitASaiaHh7dND7fxWvbifABhW+r9zhylO01bqSInTTWvUOyGRVenz0Q6qz+d7H.Iwsg+5qquOSwzAkDZnb9PfhqMGq8gKvrZSHpDceHrqR5i40iE+vLGoSjKSkMcRW2jv.8GYhg5.kHjq5kttJG4XUlZN1rZh2k1jqr6LYarvDrQzScSXiIUl2gdP61fsZnAtL8vuYdKCmc0Wpu5MUVw.iwp+dITDRGnrlLDxCgfpSAc7OlUzQ+YFcre89Cn4o1ZDHzkmsZqrorojeB.YEeGfsd8j2+1WZt7rYhSGHJSqfhF68CSkxEm1nyR.SCgOJc5XLyxFtYSHaHER+NRA2NcN3wfJfe94PPZhusvPUu4ggV5+MvPSyEcK5AWoBXU+OXSjDS6gKRS6XYjhKNuACyouBmx6nHuVHdoMflkP.t3gSsJna0aVWQuVaDs.gS7h+F+KgYU8ZqDlU6yL0TBGApKkAciqXS9MVuZZPDNnh7rvTMH1w0Ud4dROedRFM5Sho0T51qewoUAiD8s5c7jQnBSL8mvBOgwc0hcJDDFeHqPqrI9OL8+HTinjGxrQGZulLriEVGoGMBiKPvl1ChOuQaLc7Reb864X7Tno4ou9wyiuTp4hLvV5UXvsfVCqQqGdplqMykbptOj1nI5yTK9RI1pQTYnMhYoSgHiY7AvloXOu1mlkuKbU+Q61mG56x5saDVUafcyPQeIDNvU8C7Gf8ScPT63s2OYnIK.ebhBRZ70eE96FbQxUdH5TC1UiPa8ZsTfeK92AoKHZ0Etz3DRSU6mJpqz.xXmLY5pdqZio5W7mip5e9ku7WFW009IueeayyNNL.91HPX2aD8+icq8un+Wu83W8J47puVr9KerttgL14SxuuGUVN88OFwmtwTMhy7FU8JzlcXg4Otecn6hwCEMgqcpx2UnrNNgiT4tNEDW.tXA3lFt4nvkNUfk2WCrmpzKw1L3ijVWpmZ3DVv4fRu6BoIj7lNADOub3HhOF2zKSPWq6nMfKziYclGSvziNMvVzLWipm9xLH10KnC5Yxh3TJ2g+W7qyXY+QM9ssMsw2QoX1cGMA3iqs.x8tShxeJfIRWGUd495Wj9DbVcxX3oK.UuBcevlMJX6qBVDN9RzVQgpIT2+WKBmdI5wfKLA.usVjIc6EEbAbcb+ycmlaSG9praJH+72oSezCdJ1.30zsAFEVLS6f6MrcPVoxQagBYlmKCTnUJ2xJ2LtkL.6icV6DojdnaK9ajkw1H6Jkc8XwuTX99zhKh203wrCjmYa97QZO5shofCQKh+96knMzqKWkbQR6V8iNHdbG9Y115GC+IUIjIumGNG64Smi8r0brmOaN1yili874ywd9hotG8mNKIqSOdBRn4AlAErNPvvWLGWRQ9GfgnxRK
-
And a mono synth can be implemented using a ScriptFX and a
midi_chain
container. In this example I'm using a midi node to control the frequency of the oscillator so that I can smooth it for a portamento effect. In this case I need to put the oscillator in ano_midi
container so that the frequency is not controlled by the note input.HiseSnippet 1534.3ocwY0zaaaCFlxIzoNM8KrMrK6fOrCo.cA1aYcCXGpSbhWMVcpQTVPuEvHQGSXIRUIpj3MLfsa81N2CCX+M1sBrS679CreB87tr8RQIaJaOuHiD2TfTwW9RxG979oT5FJbnQQhPjUkiFFPQVafsGxk8a1mv3n16grtKtCIRRCqpEs6v.RTD0EYYsxWqDXUYUTxOu8I6R7HbG5XQHzwBlC8YLelbrztM9FlmWKhK8Hlug1a2nsif2T3IhA7rBtFJf3LfbF8.hRsRXjU48cYRQnsjHoQfN6JbGZ2WbAWq+wrH1odT0f5HaXizhQM6y7b6lcWiPHqU6N9luh9l+93NLW1H4iYf6mLQ0wqvjCrJMOHUu.Pxx.RqpgzCv1Ngr.43YT34131bvfzi.TsITz5hrdCto.TfK2xmLf1JDFLZAa93Z0dTU3WO7q5EycjLAupfefPReNeyGt92udk0+g0qN4T85My4TGSnvyiFNyoUV2v4svM4w9mRCeT0yIdwzQJBW+7bZ4qFm5nu0FJJ3s4L4yCnoiaI7bUbk54os.nTZCd5aauGQRTFkTYfdAzPISAGq8nmCd0ZSTE7dznARQ.3WOk8C7bDtwdDYd2IUbS5D.ejyFpLT7HlbnYbUA7wpMWerqJDe.tKS5ze1XrzLvHvT2DXLMx7N3860i5HGCvUwsdwhFFVqvggqmFFBmo5v2HcX0Vun9LC.eEdrydPHMfDRORz0iLbyHhefG8P.iOp5odBmA1ruiNcDRfFB6pzXSm9DNm5EsHARkulRNgNTDKY7y5PjgrKQV3Ch8sgzzNzlonCjYURECoGWSMV4WXS4tIC9G3mzIqqFakNY8rIMB+NfJuPDNHwbj9LbWzbeTBIeRuKqi1wySbQSge.K0KErAIx5J7FFzWvYNJQZMxP5N9hX3PRg6SIQGQXdJ25iogQIaxZ3ZaA+CboOP3BjCtEwAHwgcIx9pXCUdFvQjFtkyHGxb3xzmPsEYkzzLB.Ge00Lof1JFIVz9dpQPjUI8t1N5X0rNDOzwJaqBnH0dp4FM9zEE7ghTZ.kCuefAdGqxxBhkLf3cv8XWV+wmj33mGjenAHMU5lElqLBlqX.yxILYd7c2D7AQZITXQf0p4fUoIfUEbSOXmZ6lgIXInIzorJCMMSgaiaEReYLk6LDgFmf9HR3YTYTZEKN0QGOjP+vtCM2D4KDx9T2SfzQP+TP+.ntYOozXMr9DTvGxQcYZAP7QDHCgJEfsGykF1EZISMZmXWlnESOE7+vtndZOVT.jna2XHgsNad1YnFXvxyDP437OZDmOCMu1bLxytqiel3hpcgstHj6FXQjCzRqpHZdRMm0xjJ.TM5tXsVGFOE.iKn1gb4Dxd6Srkz.UECS8rGPuPyalZptZYVzo15chkBenhPR0bjAPJOAP90W+5e6ISAjF+biI.Rhd+2.4dX6DKHT.Ioieis6u+kW+Surw7vPAHi2NGLTAuOW4I6hlZiLcKqf4hSlN9+8LxOkov6hr747zlprTHcKioWT7MQB.qIComPh5RvcoWlUFeenSDWnK6jkmUZOmqe4hasueihYsyGUaXpmeT21Ml5ne0eVPmcyP97a0ONnwUNxKY6llGpUPdXiDvT8PUZr4yF2PgckgW1QRuwN54m9qaeRzLR+sDN6xIui27t1yq13ZXRe2nIBvuOlxOm5Awoaoms.w234l+4dpt4MvRJp0MHiruP8pfiKAVxTP9RhQSn9zydclZIoUIy7JUJrc8U+9UK3twAc9iD65sv6HkPGPSZY+3FKAmp6jd3OiB9AWGgTE95WF+Tg2TUP2twR3nWCuG0gLYJ02DtLH9JX63H4+S.8M1MuB9PpGcFYx1dY5z0LN77oPvesLJgba39KCYmcFbF2T4xKdILzLeAg4jeeWgXfOI4iZrXedwkwmfwm3DJNI88tT4TuUhDnCQdx2fuBtiZb05nySKRn9VIHU+vm33n9tbeRcDZ1q4SWf07YKvZ1dAVymu.q4wKvZ9hEXMe4bWi5OMQZWkpWJEDzcec8QqrW3Q8gN9W.kYXt5C
-
@Christoph-Hart nice! I wouldn't ever have thought of doing this . And we don't have to even connect the envelope to anything, just having it "filtering" the signal is sufficient... interesting.
-
@Christoph-Hart that is interesting but is it possible to have note priority as well , this particular one is " last note " but not really as you hold one note , play another , let go of the second it should go back to playing the previous one , and without retriggering any envelopes.
Portamento as also strange as it glides to the note then jump to it at the end.
prominent if you set the time higher like 5 sec -
@lalalandsynth That's the job of a MIDI processor. Just add a Legato with Retrigger script or script one yourself with the behaviour you want.
And the portamento might sound better with a linear fade in the smoother node.
-
@Christoph-Hart great , will check it out.
-
@Christoph-Hart Would this work with script node?
HiseSnippet 2127.3oc6Z80aabbD+NIcJlz1RI.0nOEfK7IJ.YERE2zhDzHJIJYQXIJVQE6DH3Fu5tkjKzwcud2RIQaH.i9TeqOa+TA5mh9l.5WfBzG5q4if6Wf5NytGI2ihhhQ.J01nDBPbmclY+M+Y2Y1UpVjviFGKhrryre2Ppk8cbp2kKasdKBiaUork8m4rifKbUToOmESib4BoarWDKTxE9Tq05FRhio9V11S+PTL6LyXo97lUViDP3dzAjrrdrf4Q2l0lIGPsVoGwBB1j3S2m01f6GTphmfutHPzAf3zNErBIdGQZRqRP1lxwxd1M7YRQTcIQRisrmYMge25sDmv07+XVL6v.JNnnUcPQZxaJB7QDie2Z8Vr.+Z8bEwVV1N0F3XlV6X9EN6v7Y8oOvA8wpIbGHgo+vdpzva5TvqnI7JX.uQ.IaCHMiFRehScUTXvLHdtsSEtjF0f3kNzn40Zp+8rNqK.N3xkZSNhtYDLnuD4+xBEVz8AEJrvWmMaDsoaU2eq6KxEFQQ0bDsabtux8fmdFLKDXhktGSh.SmIdD+PfydJtIUttncnfCCxmKY9bfNSKz1GFLVgf4QgxlkwCXbpaiNbOISvcE7DchxFIBx60SvEAkGzgtP1WjMSfviD3FBbJomJgU5fbaKNgFKysnatsI5euEqYKjzS+5rYxlIYUWJlBP.kBXomBNPo4mB.BM+qvTQMj.t0IAAGBos4GF0flLrnpvhrKOuB46.taHKeIVStHhtwwntkQfYo.I593f4ziK.BnvU6z9PZTdjGjiiSywiof6fI6lWqCVC27p8zJo6ztlNB+HHBmeA2uws3BYy..IS0kLh8KE1ItUdNpA0RD1.+F7S7ILoWK27I1mZ8PmU9E.0nzSFORL0svWk4y+7L5f.RbH0CovRE9fOgM.7mZ5CJ7T26Cj3ZFNLhRNR809punV8jDkOBUjd8Bn7lxV2u3Uo2kU5MIS4mNtmzEE91YZ+oNxP78qg9U7bw7UWh4unKr4LrA7KbwNCiizfX5UDoPIAL0WmIIZEWzkC6VRTFvElRwU58rrtCmX1ngNy7py8t5bqBI4VCRgRi8HZawwzDz++ytdmH6RKCWmJTlFP5R8Wqq5joJ98DegKFK8BnDcdQRFVGtOsAbXt+HxzRNWL.yjvjsglF6MXzyzqL.WkFZVC.YDJXltJrykWE1rIAO8Q7FLJ3U3L4tgzjwWrNsURcArIhDTArJU0qmKodc8.lOMxhAkky3jjTaofrYqSVSf3S6r50UvxCI3e5eVZxDrdJA+Ku5U267ISv8FZEeyenj02VoLQRv1aR7afuLjFIYXXxtL8XnWQcyNYbJSiORJBUN1jBt.Y8Bd2jEbaxgz.05MqCTGun0olsd10bvILeYq9DN+OVpEE1BZzTZ0RM.LUm87TMjhcBXY+oN6ra0cqs0tUqrtamXFuoasJ6u9VtatZ4MrnP1FoeacVSBbcP3Zf1yCJ00DJoQ6KIW.seyHPagDzNuS0c2eC2Z6UY28pr+2OF7c6IHS8R.4Ke7UCxxkhkcCTWyXKQD64.hIAVsIlQIfEZXZ63Mqzl46GPqIhY3NdyYhgcm6CV4ZhS0lClJMr8bQ+s1bR6yGeFxHMmPRDrNlA39tIsqGRCgBFVTN5uStvwnBTWdH4Nxj6enMgMCDDIjusOCXFsja6rZ4568vHRXKyPyglglFCEZNOZXa4kGTJYGXu6At5V8U6gM6cErLy95W+51n.LIs8.pu8su82kl5xIj+6HYzWjhYs6C25auoyKx55lq+gnU7gqXjCsobKhSTAJXbJPpfZDbws.wIOQDcTLbUPJPG6KN6YobYylNpWivSh5yq7UngB2dCRrO0LVNve8r3g7Wkd4HNcvdFikbtwdF8jliY86uv5T4h4XCaEswagCYZp6NatYBNSeTalh6znA6T7LG21wVWbq0+ABPuck+bovAgDT83hB2+NBt5MbaQj1sbVUJga1jx4O2XK5L.bkdVoOb7DeDTcxizMkiX9wVD0vQDdS4HvZldL7HOSi+0uB+72tzyTW971lOhy2ed5ymsLbZ9qYcktlLN06DivZhyR1yv47rS+.JKIiydTne3Xpk0EeMmO1YGgem.hL8iKgunVxD3xY9hN3q1vAXz0DrC+hSyLYu3zfGDajc0Ngv8SbTWoXz3cpQfWnyuaZ7l79c20YiFMndxAfcFmM+tw9XcyLYWSXxgx8zP41NOgbLUciJEPtmZbCQTa2GRgDTzmVbLOq5+XReV0vI9YU20SBPX+HBONTDSKZp4glaYy4JSkc3oYWSJEWn4sIXdF7cqR8HtrIQnTcJkAiSoocXFGE8iqrgpsp5TvZ72M1CLVz2YtcnVG3JrOAOznnofCHurI4sHQ9PbwKUB5zWqrhz6aM3eDus6r2TO27Oqa9uQOq5mvi2a9R4yqw6Go6lUAyjClMAG9W3HrkfyRE32iJiXMaRSkOMR6P2Ez5chNt+lr+0e8GWQ0RPJpCX9hT1ldLTn1X82BLyzarvNLLpU0qtpwMw6Uew3N1a3I1Q2Mvk52mdx76Wwenjwkab2jNEcUGD8tcQr45gUcD4cavdGcimuO3WmuWifuW3XmqWuZuO3ZGaeWS+ATeW2DUsfdJbeuoC6eoCzmyxtpvs6+6i26I5fOF0NDnTIdCopcZWGZpziBHlyoA3isaOE9r35wEvwHbpS49pA3cmRlrHN1NYxh8l7mk0nMwKR7Cd5mwFKrcKEEvt4p+SCx3rCN1sXu2v1wovREv6Bx9AOOLm99f+Yzxr70Plu3ZHyCtFx7qtFx7kWCY90WCY9MiUFrK3U6HEs04+.gZanePQ6M58Xq1Sa8ewHzTSD