Linking knobs causes DAW crash for multiple instances!
-
Well, while debugging I found something is weird that might involve many people.
This plugin has a link button for linking L&R eq band gains, very simple code and works great when used about up to 5 - 7 instances. But when I increase the plugin usage to about 10, Cubase 9, Cubase 10 and Studio One 4 DAWs (these are the DAWs that I tested so far) crash in multiple plugin instances. Cubase says
The thread tried to read from or write to a virtual address for which it does not have the appropriate access
But when I remove the link option and let the knobs operate individually, DAWs don't crash on multiple instances.
The code is very simple. Is there any abnormal thing in the code that might cause the issue?
PC Specs: Intel i9 10850K, 128 GB RAM, NVidia 2080Ti, 2 TB M.2 SSD - Windows 10.
const var Link_LR_MS_Units_Button = Content.getComponent("Link_LR_MS_Units_Button"); const var L_Gain = Content.getComponent("L_Gain"); const var R_Gain = Content.getComponent("R_Gain"); inline function onLink_LR_MS_Units_ButtonControl(component, value) { local val = L_Gain.getValue(); if (value) { R_Gain.setValue(val); R_Gain.changed(); } }; Content.getComponent("Link_LR_MS_Units_Button").setControlCallback(onLink_LR_MS_Units_ButtonControl); inline function onL_GainControl(component, value) { local index = LM_EQ.Gain + 1 * LM_EQ.BandOffset; LM_EQ.setAttribute(index, value); if (Link_LR_MS_Units_Button.getValue()) { R_Gain.setValue(value); R_Gain.changed(); } }; Content.getComponent("L_Gain").setControlCallback(onL_GainControl); inline function onR_GainControl(component, value) { local index = RS_EQ.Gain + 1 * RS_EQ.BandOffset; RS_EQ.setAttribute(index, value); if (Link_LR_MS_Units_Button.getValue()) { L_Gain.setValue(value); L_Gain.changed(); } }; Content.getComponent("R_Gain").setControlCallback(onR_GainControl);
-
Circular references. L changes R which changes L which changes R which changes L which changes R... There's a tool in the Tools menu to check for these things.
-
@d-healey said in Linking knobs causes DAW crash for multiple instances!:
Circular references. L changes R which changes L which changes R which changes L which changes R...
Do you mean the code is not correctly written?
@d-healey said in Linking knobs causes DAW crash for multiple instances!:
There's a tool in the Tools menu to check for these things.
Which tool?
-
@Fortune said in Linking knobs causes DAW crash for multiple instances!:
@d-healey said in Linking knobs causes DAW crash for multiple instances!:
Circular references. L changes R which changes L which changes R which changes L which changes R...
Do you mean the code is not correctly written?
@d-healey said in Linking knobs causes DAW crash for multiple instances!:
There's a tool in the Tools menu to check for these things.
Which tool?
Tools> Check javascript objects for cyclic references
-- its right there at number 4 on the list.
-
@Fortune said in Linking knobs causes DAW crash for multiple instances!:
Do you mean the code is not correctly written?
In your
onR_GainControl
callback you are callingL_Gain.changed()
which will trigger theonL_GainControl
callback, and in that callback you are callingR_Gain.changed()
which will trigger theonR_GainControl
callback again. -
Tools> Check javascript objects for cyclic references
Actually it seems that tool doesn't pick this up as a cyclic reference....
Maybe because the
.changed()
method has this:
-
@d-healey Yes I've just tried Check javascript objects for cyclic references tool and it doesn't recognize any cyclic reference.
But when I remove
.changed()
methods from.onR_GainControl
. and.onl_GainControl
, the value is not updated in the eq of the controlled knob. What is the proper way for this? -
HiseSnippet 857.3ocsV0riSCCD1oaMPCTDHwCPDmJRvRZfcAIDZK8OTErKUTXE2PtINar1D6JGGfJzdjGHdJ3ggK7F.iSR2jVBktUPtM+7M9aF6YlLVJbowwBIxnwalOihLtFdxbtJnW.gwQi5iLtN9PRrhJsxT0c9LRbL0CYXryy0JLZTGk98iC5RBIbWZgJD5XAyk9RVDSUncbmWvBCGR7nugEUx6G1Yjqf2SDJR.9rC1FMi3dJ4D5QDsa0vHiKMvioDxIJhhFC9zU3MeRf3i7L+OlEylFR0BsQSf.koF0KfE5MdQtFiPF0GWj46jk42BeHyict9hJvMRMXUfnbMvn1xTp9RTp8ehRCEgd5.7GnmQI5UOid2DOwUxloJrn41Uwi3vkiOAJ6koUlunZeqFtm.7fq1MhbJcnDDNGQq8ssuq0d1124IMMaZBE+Xk0GHRqWvESaa8TqEPOgp5IhlI3fPqamZ81YXX7PFmZ4mvcULA2RvSspAJEgsbWf5tPbCSn2oo4maZ1P6iytwT0wZksxLAwqQb.QR8FlGsVZcmkdNqkI5Hkeh8HggSgWMsVlHYjc0TzYsonyZSQmMHEa+OJEcVWJ5rTJtJYW8zRImE7c+62WXEqR78sBnRpkJfnLOqTRdjPQeEfv7ylMLOyzZUS99UZKmMgTYkl0c7x0ArEOIZJUtnXtvQnMX49rKsY8YtYE0RNJ3i3L0qlQykK5DaWQmHJ+VA5IqkyPvUUZG40y6HmDx7nRDCBxkwo26nTxmOYy5Ke+qGf1XvNU.9si5STD8bgb5.TbFUpX5JgQe5GfgrYSIZf6SiOUIlkx27WQPw6ux3OULG9QclWHzsC5BDGmxwwubbNnC52moASVEdIgD0xia06UxM.uMVZtld1EOlolWduyEXFrckyfq7leCo6MwiYJ2fp4asJ3q9oz+Y9luQqIdfuO0UUP153guaaWecAnxqEIJF+jCIJICdPfOJIZBrT2kBLgyogvAgMpo6txjs0x5JyDJ2KU3mvWtw1ZYibisWXDEQbkh26l0Vo2YdkTM.m3o+tPC3+V.YqyaFwX6csQQvp7265pKE2C3d0Xb1BLOXKv7vs.ydaAl82BLOZKv730hQ+WTOKQIhxZS.EiGjNWyvX.m.uxReQh9EL+LpuL
-
@d-healey Thanks. But actually I couldn't find a way to link-unlink knobs with this shared function.
HiseSnippet 1411.3oc6Y0saaaCEVJ1pq1ctncnEaWJDrKbA5Brz5OCqXHt4uNi1zXT2ktcy5XjniIBEogDUVCJ56VdD1ivdD106lsCojrnbTTT8ZZWJpbfg44vC424iGd3QLCC4d3nHdngYqmezTrg4maM5HlXx5SPDlwfMLLup01nHANzNQzZGMEEEg8MLMa7Ho.yVMMTO+0pqgnHlGNWjgwtbhG9Ij.hHW5v9OlPoag7wOmDn066zefGmsNmxiA7zvpmwTj2An8wOEI61RVFlWZSehfGNRfD3HCylqw8OZzD9uyR5+tjHxdTrrgiwHXfRDuEm5KQr72FqOgP8Gl42QFFlVCyYgFIrvMr1l3SlIOmMtlRgctE57g4RUAOmyFdNkAOSM30LAdW2ZjWHYpHWiDaWwZ.CVnFifk.cXkzWik96lVqygdvDqDfN.uUHzXlEcuWud219t85cqGzocm1vBQjv9PTn8HRvTJVtT6X+C1pfiU1GK1b7Xrmn6xZpWVZZYF5VsgtyY3SHrCd4ZwBAmAFlAYvz04AS4LnQ2k05yxIHN4S9n7XFeOmS0dk1TKILJggsGGy7DDXN4LkVoggbZWuLqtMLtzX7s5z90cZaCOIeqw.qDgEOTHBI6EKvc0UH+Ny9GjYcK473JMZWohtyT2JZBJD6uUJh5Jk8FEVqzajiTJpWGQo6A6d5VzYxnphzjakzjakzj6YSSZqzmFA4VAA47NhfbqhfbmifNoypEwUsK2hx8PToDfVSbf8yb.E1U+IcPxX6tZCqV2fQpUJ6k8bxXE0f8FIZqx0KrSobB3jtV9Vp4Ih4IdkKm3TseiFc8Tt.uCnu8qkJZaOupwiKUW57SwgkpVdfQXUF1kEGrGNLaAIqiPlyholspWpYuDJUqib1.FQryTL6zRXajtN.otajhJ3WBUh6qll3dDk3iCMHP94OyREiXn.b9gge+wF01X22BiSVlUF2wRage9g.d9oAafDH4IPodD3kSwgBhj.M2.eHbzdx4Qsr1.GcffOU4xogd.5NSm9U4S386eTdi05GnWZwubb.5U5XKf36SwC4QD4xetlARGu1yuq97OVe9W8cx72rlTe9Pe7upghi+s9Fm7renBDteLEIJVVhL+YpBIhzO+WdFOCP5Q50p8VTqRuZWqRcg60sFRDdSJGuKUBdgfvya7lV4WGqjBTxAaSqs942sk4UZUnKogkKOqV7YmPpfRGMANmVo31x8+afonB72KH9hIZQz8KoX8ArCgs2C4TT37reihtbi54xk3lMqcHhzkruvDR+EVJJ+hDfUgDWb.70rFh9+P.wy3wBBa+sQPYrPlaqmFGLBdiUOL.UFCSkUWXtjrNfj18jsk.ZDl4qZ7OvSpRGYayTkNYJMdKyE39obAeJWvmxE7QetfalPIWw5EnCwpaTQwF2T0dLOLv9QXFNTxUNUbSc+Qcuoto09l51wS.P34gHVzTdD1QejmSmqttMvhXVwtmHpPujt2Vf6o0uK2OSnqtPHrnvfAsKLRaSzpi+OWcSFBVzGgAuwemHOvYkbmdbyvXZDVs6vQ2vbwt5h+QTnOrt3UU9xZVtXwB505eIIRuzGfav77XS8+0WhoQ8f6YbIqsxvXxAraBmDRgW7cVp8wnXpHSZw8YayY7oS3LRgHfmggzC6uOtPfUoNzCEBj2A4RtQ+mgoXTj1duutO7piXTHvS3EjKbpOWT050WYk.WaYxA6ONd4yFeD8xmmG6Pg7mWbVo+RKHmtqsZ419C+586ihEdeLGAHuP9K8RtfQYBiKqj.9MS8Opqk01x11ytSSKqdqzSdmYjW54Iio+FfeJ2F2EvlucAr4NKfM2cAr4dKfM2eAr46pzF4I9OLVvCRh+AAC2Tc2tllIU.o1JX7udKtC+C
-
@Fortune You need to put the button check inside each callback. The shared function is where you call shared functionality, without having to retrigger each knob's changed callback.
-
@d-healey Thank you. I am really really so confused. Would you mind sharing a simple example from my snippet please.
-
HiseSnippet 931.3ocsV0saaaCElxwrsVatXEnO.B8JGfrTY0l1ATTDW+2fQVRMl6B5cEzRTwDQhzfhpcFA4AI2sWm8VrGg9FzcnDcjrmhSpwhtw9bN76vuymnN7LVJ7oIIBIxpwGVLmhr9Q7jEb0rdyHLNZTej0iwGSRTToStqtKlSRRnAHKqc9UsCqF0QYOe8vtjHB2mV3BgNUv7o+FKloJ7NtyQrnngj.5GXwkV8K6LxWv6IhDo.e1A6hlS7OmbF8DhdY0vHqGLHfoDxIJhhlfrp2UDrXxLwW34q+TVBaZDUazFMARTt6ghn.Mi0dQ8lwhBFurtSPPVFWnB6jqBOEeLKfcs+B03mxB3TfnrdXUaSzqcY54d2omUI5UOmdOAOwWxlqJhn41OfGwgWTgD3UPYZkuVTsGTG2S.qfq1OlbNcnDLtFQqW45tmyAtt69ll1MsgWDIJmOSjNcSUJAusyacVB9LppmHdtfCFsdlI9yxww3QLN0ILk6qXBtifahqAKEQs7WhbOH6QozcaZeQSaG3gE5zZoqFZGGwES81OgpNU6sk1rsdyyM2UugWlso2Bwzovr88HQQSgCUsVmWqW0Ya1MVyYQuwJNK5cqdMjnbUUcwmi8MlfvOIyHRZvPyt151DCCiqVJJS3pDBuMJDdaTH79+PHZWgPrcZf2lz.uUzf0qm02sq4+yedegShJMLzYFURcTyHJ6KKoCmHTz2CHruvtg8k1NqGJLrxXF1DQkUFV27TtIfs3owSoxk58xEBcQVsME9laSUtKpetnVZgB9HNS894T9M07BYdS.sw1wvJ3eprlXO1zDaRDKfJQLnW0CwYusQYD1bwvec0U+8gn6LXuuCv4G5x.2.aNAtB77m+XTehhn6DapFnBmSkJlV7r5S+LbEWde4F39zjyUh4Ykq4fGn22ZA+mEa3q6rnvnaGz2Qd7Jmmvx44vMkmJkgRYZPoL8OS6f9u2GA2JJBRiHpUupTOefI.bvbk6jz26vSXpEkme3d49y6JceBdLS4OqZ9VqB9BGHtu4qYZjl3AggTeUAYqiG9w6+QOP+tHUw3mcLQIYvAB7IowSfgy7o.S3bZjt4gUM8m441tZasxLgxCxL9F7XB1VaaYB1dYPTLwWJ9je9mn54cdTlGfS7rw9Z.yeB1NW+kIF6tuKJFFC6S99Zo3mAtWMFus.yK1BLubKvbvVf4UaAlWuEX9kMhQOA76RUh37OS.GiGj0gzxZ.m.mxxNQh9W.hxpau.
-
@d-healey Thank you sir. Let's say each knob controls a simple gain. The simple gain value is not updated. In this situation what should be inside the shared function?
HiseSnippet 1412.3oc6Y0saaaCEVx1rK1YtncnEaWJDrKb.5Rsz5OCnaHNINtyn0IFwYoa2rVFIpXhHQZHQkUih9fz61iRdD1ivdD1avFIkrEkqrii2RVSP7EEkmCOjemuygGdDS2.pMJLjFnoWd+gCPZ5eNn2PBq+V8gXhV6lZ52FzAFxPAFwh1b3.XXHxQSWu3yEBzKWRS96uVeSnGjXiREooc.EaidI1GyRk1swKvddsfNn8w9Jy9QMZaSIaQ8nQb7TDTWa.z9X3QncfhoU.noeqscvLZPOFjgB0zKsI0YXu9zeiDO+Cvg3C8PhAlZ83KTr3VTOGAhER01pO1yo6H+NTSSGzMkEJFyB2CzA6fGKOkMtiTgQpEp7gdgYAOSU3Ue9gmtB7JECu6B5YGfGvR0Hv1xf1DdfxExCApvJdtZEVF.1hxmAgslO7XTq.9fwVT6I0q+.iGWu9pOqZkpU3AhPlwIv.idX+AdHQn1z3GLjIGqcDhssqKxlUaEE0qHLMOCslsgVqDumpFuYDiQk63HHyMcKp+.JgOn1JI5SrDS7vDjgaDwlgoDCJIQuv3.pWM6QV9.9p6EgVsZk2UshA+G10n1HQkEBdAgdn0ZgH1ABo0DCMEad7vUEa36ka5Y.LwRjr8aA87NjmJWaRbMxuy56xsbpdtT6T8ao1y1qUhZBbtAiEfOLhgpopP7uir7Yw1kxYINhJyjOAN19xwKP4v9v.jSqDLW6rHzD+Me5T0cmNYZMSxzZljo04gLslFYZ8ugLMygLWLdzZV7n0GwiSxHStiiYfG9vlTiPVjqqQeT.xf0Gx3noZEExbGJCsK2nJuqR4JuuhwjpbcyUWBn7PA4pVbCRvrLrFIx+PTvHpezD4kRyVqFL8Z0pWkXGysJSjRZSvrcGfHSqBtVR.gWKuXBp3+OlrR9sSpj2yC6fBzv7B1eFPFz0j.N41we+CeX8S0laisNGFGm6IMtLHIQLi4xq109o1MgLn35nDug6gCPALrf7zahNgeOe7kSkAMQgGynCjtaR9GGYmoC+1zM7oMFlNXyF9p8Y7Km5CeqZOF9XGGOTWZHVD5S0zV3zy89aot+tp6+5+mr+klCZOcYO8WUPvouog1G2D.uUDpSjGjks+DQglDEBzn1Hf3xdBGkCUirWHMsLuv8tftXlc+7wagbvKOA7hFuIs.VED2oRJXKAZ8yKZ+d42NZ8752qfBVVZbS4iuJQBkpJBLmVO4xy8MQdvL72qvNr9JYyMxoq81jS3Gs6R8fASx9Ey5xEmOWNG2rzbmhHbIiqLozeAPR4Wk.rLk3pCfuCnK7SgDh8nQLL4nNPd+d7J2fch76w+zUaDGpDBxSzUgdAw8+wiqKFK.TODwQN3u4+RTZJFqmnzbjRsyYs.qoUK3Mtte+M0BtoVvM0BtVTK39wTxxfWAOAIeZEIabe4XWZfuwyQDTffqLmwS18Gy6S1MXtextcsYbHre.jDNfFhLUW4IzYopqIhEQxN8XQYlkv8ZwcOk4sTiQBsTExSKxrX7wYVoNXkd3+y02l.4A8dHt23ranM2YEbmZdS2HuPj7zgopgohsTE+iv.GdbwdV0KO2sKl6yCdqOoe8xKuuao37A2y3AVKOBiw2otM+xOO924NtZtKLxiMRZ1iVcnD5f9TBNSPeODuhvQGgxjKkqCsAiAsONUx8ZrGxCACUNt80MdIlffAbdBsfbg47yEyJd8UfX3ZHpGXb836MKdM56MuHNgxKYd0IR+k.dYbKCY313++38kQ+AWF6gOzNf9Z632RTTvXIoDteSj+Q5JC5HFaL9IDAf5qUW7DY3WaaKxo+FN+juMVKfMe6BXyiV.ad7BXySV.ad5BXy2MSaD23uQDi5Gm+yEzca4S4pqG2zi7nf1+XM8OrD
-
@Fortune Shared function is for anything that both knobs need to do.
-
@d-healey Is button check needed in shared function?
-
@Fortune I wouldn't have thought so, because the shared function should trigger whether or not the knobs are linked, hover if you only want it to trigger when the knobs are linked you could just wrap the call in the button check we already have in the knob callbacks.
Tasks that are only done by one knob should go in that knob's callback rather than the shared function.
-
@d-healey said in Linking knobs causes DAW crash for multiple instances!:
@Fortune I wouldn't have thought so, because the shared function should trigger whether or not the knobs are linked, hover if you only want it to trigger when the knobs are linked you could just wrap the call in the button check we already have in the knob callbacks.
Tasks that are only done by one knob should go in that knob's callback rather than the shared function.
So we are back to start again, right? :) shared function is not working, .changed() is crashing for multiple instances. I also saw lot's of suggestions for using .changed() for linking knobs on forum.
Actually it is avery simple process, link/unlink knobs with a button, any ideas anyone?
-
@Fortune We're not back to where we started. Don't used
.changed()
you don't need it here.HiseSnippet 1400.3oc6Y8taaaCDWx1rK1ctncnEaeTHXevAHKyRo+CnXHNwNtyn0IFwYoaeYsLRTwDQhzPhJqFEEXOZ4QXOB6QX6IXijR1hxS1w0nIqoH9Csk2wi7286Nd7Dau.pMJLjFnoW9vQCQZ5eIn+HBaPyAPLQqSKM86.5BCYn.iXQ6LZHLLD4noqW74BA5kKoI+8WasCzCRrQohzzNhhsQuD6iYoR603EXOu1PGzgXekY+vFcrojlTOZDGOEA00FBsOEdBZOnXZE.Z52ZWGLiFzmAYnPM8R6PcF0e.82Hwy+HbH9XOjXfoVe9BEKtM0yQfXgTslCvdN8F62gZZ5fdorPwXV39ftXG7D4orwckJLRsPkOzKLO3YpBu5KN7zUfWoX3cOPe6.7PVpFA1tMnCgGnbg7PfJrhmqVg+tDnIkOCBaCe3on1A7ASrn1iqWeciGUu9ZOqZkpU3AhPlwYv.i9X+gdHQn1z3GLjIGabBhsqqKxlUaUE0qJLMOCslugVqN8dtSDiQk62X.yMrI0eHkvGTa0D8I1gIdXBxvMhXyvThAkjnWXb.0ql8XKWmu5dQn0pV4cUqXv+gcMpMVTYgfWPnGasQHhcjPZMwPSwlGObMwF9d4ldA.SrDIaeSnm2w7D4ZSiqo8Z4lMSeVpcldrT677Wgyk5yI.Q0yxm.hs+YIJ4+U3.X.xocxNW6hHjDTmOcnB57HCq4RFVykLr9XQFl4PFKGOXMOdvJCOLsOM8tMIAV43mXs2lwBvGGwP0TUH9y0MxKWN6RXMqkvRYIrl93P0JJT+dTFZeN.q7tJkq79JFSqx0MWcINuGJHW0h6IBlmg0HQ9GiBFGhGOQdAyrUjAythr5EF1wwPkIRIcHX19CQjYUmVKIvyqXWLAU7+ESVu9NI0q66gcPAZXdY4u.HiGZR.mbGXiM276OWagM1Jiwuw08oy133bbowkAII7YLO92O0oEjAEW5j3MbObHJfgEjmdKzY7ayiuBpLnEJ7TFcnzcSxy4H6Bc32ltgOownzA6zvWsahe4be3aUwlO1wwC0iFhEg9TMcDN8Bu+Vp6uq59u0Gk8uzBP6oK64+pBBN+MMz9uW0ya3f5D4AYY6BQbdLQg.MpW2KtRmvQ4H0VytTZMYQg68.8vL6A4i2B4fWdB3kMdSZzqJHtejTvVBz9mW1t5xuoy540UWAErrxjVumTwUBkpJBLmUm2xhFsPdvL72qvNrAJYyMxo27Njy3Gs6Q8fASy9Ey5xEWLWNG2rzBmhHbIiqMozeEPR4Wm.rLk35CfuKnG7SgDhCnQLL4jtPdaQ7J2f8h76y+.UaDGpDBxSzUgdAw8+wiqKFK.TeDwQN3e3+RTZJFqmnzbrRsOvZAVypVvuK5A3lZA2TK3lZAeNTK3AwTxsAuBdFR9.JR13Axwtz.eimiHn.AWYNmGl6OVzGla3B+vb6ay3P3v.HIbHMDYptxSoyRUWKDKhjc5whxLKg60l6dJyakFiEZoJjmVjYw3iyrRcwJ8v+masKAxC58QbuwY+PatyJ3N07ldQdgH4oCSUCSEaoJ9GgAN73h87pW9A2tXtOB3s9j9MJu59tkhKFbufmQs7XLFem5t7K+73em6jp4tvHO1XoYOZ0kRnCGPI3LA8CP7JBmbBJStTtNz1LFz9zTI2uwAHODLT431213kXBBFv4IzRxElKNWLu302.hgqgndfwmGeuYwOi9dyKiSn7RlWehzeMfWF2xPFtM9+OdeUzevUwd3CsCnu1N9sDEELVQJg62D4+UbkAcEiMl7Dh.P8MpKdhL7qssE4zeGmex2FqkvlMWBad3RXyiVBad7RXySVBad5bsQbi+1QLpeb9OWPuckOkqtdbSOxiBZ+Kjp6JrB
-
@d-healey after clicking the Link button, the Knob2 value has been updating but Simple Gain value is not being updated. You can check that.
-
But interestingly putting the shared function on the button callback works!
I will check it in the daws and let's see if that one crashes or not. Thank you so much @d-healey for this brillant idea and help.
HiseSnippet 1379.3oc6Y0saaaCEVx1bK1ctncHCXWJDrKb.xBrz5OanXHNw+TXz5Di3rzsaVGiDcLQjHEjnxpQQeP5c8QIOB6QXOB6MXijR1hxU1w0KsXIK5BEyygGxuyGO7viX5GPsQggz.M8xGM1Goo+EfAiIrQMGAwDstszzuKnGLjgBLhEs2XeXXHxQSWu3SEBzKWRS97W6rGzERrQohzzNlhsQOG6gYoR623YXW2NPGzQXOkd+fFcsojlTWZDGOEA007g1mAOEsOTzsB.M8OqsClQCFvfLTnldo8nNiGLh96j39eLNDehKRzvTa.efhE2g55HPrPpVyQXWm9S76PMMcP+TVnXLKrNnG1AOUdJabOoBiTKT4C8BKBdlpvq9xCOcE3UJFd2GLvN.6yR0Hv1c.cI7EpgP9RfJrh6qVg1.PSJuGD11dvyPcB3MlZQsGUu9VFOrd8MeR0JUqvWHBYFmCCLFf87cQhkZSiezPFbr8oHV6gCQ1rZanndCgo4Yn0hMzZi34T038hXLpbFm.YtoMod9TBuQsMRzmXIl3hIHigQDaFlRLnjD8BiCnt0rmX4V7Q2MBsY0JutZEC9CdnQsIhJKD7LB8DqsCQriERqIZZJl73laJlPY+x9mvQv.jSmD.TKFVuQ99Rb.wTk.ylPW2S3g70lE+S3mrbjDZykgjZmK+H0d4ri5aASk.KU9HeZKdbdxkRRKhhR7f7IHUGX9zi0BoGqEROVW0ziYNzCW8JvJVKhUrdOVYV+a1Ybp+nrYVL96xXA3ShXnZpJDu2xHu8EYGBq4MDVJCgUNCA2+qVQYwXeJCc.GlUdckxUdSEiYUMbXt5RnAWTPtpEm8DrHCqQh7NAELYQeRG4IgylkGL+r7pGBYGuZpzQJoKAyNvGQlWtesjP.9o.ESPE+WL4Y.2M4LfAtXGTfFlmp+yAxUEMIfSNW8cu8s+vEZKswVe.FGGsKMtLHIzOi4xhBz9otsfLn3frDug6g9n.FVPd5sPmyqPH9XsxfVnvyXTeo6lDwyQ1k5vuJcBebiwoM1qgmZEJ+xEdvWoVchG1wwE0mFhEK8oZ5Jb5kd9sTm+gpy+NWIyeokf1SG1K9UED7teqg16W9.uHFpSjKjksxFwtxDEBznVBgnLABGkiUWY+nTtyxB26C5iY1ixGuExAu7.vO13Mo3wpf3ZbRAaIPme9psRw54UoXAErr1zx4ml2UBkpJBLmW07WH122B4Byveu.6vFoDM2Hm586RNmu0tO0EFLK6WLqKWb4RaliaVZoCQDtjw0lP5uDHo7qS.VFRb8Av2CzG9eg.hCoQLL4zdPdwQ7L2f8i7Fv+nWaDGpDBxUTUgdAw4+wsqKZK.z.DwQ13u4OIJMEs0STZNQo1GXt.qayEbatfayEbiOWv5wTxc.u.dNRdoLR13qjsGRC7LdJhfBDbk4Btru+XYurO+k9x9NvlwgvQAPRnOMDYpNxynyRUWKDKhjs6whxzKg60g6dJ8asFSDZoJjGVjYv3syLR8vJ0v+m6zl.4K5CPbuw4fPatyJ3N03l9QtgH4tCSUCSEaoJd1bikVtbiWquiyOceiRwkCtWx0vVdBFiO+rM+fNW92zNMy8PXjKahzrai5QIT+QTB1VMl5PDe2+omhxD2jqCsKiAsOKUx5MND4hfgJas9lFOGSPv.NOgVQtvb44hEsd80fX3ZH16aby3aKKdi+aK+2sCkmd7+Imp9oXN7f1AzWZGeCbhsdqIkv8ah7eJVYPOQaioW7F.Te65hKVB+RaaQzw2x4m7swZEr46VAadvJXyCWAadzJXyiWAa99EZi3ryciXTu33etf9skW.ptdboBxsBZ+CzbgkiO