HISE Logo Forum
    • Categories
    • Register
    • Login
    1. HISE
    2. It_Used
    • Profile
    • Following 1
    • Followers 0
    • Topics 8
    • Posts 36
    • Groups 0

    It_Used

    @It_Used

    Steinway & Sons

    8
    Reputation
    7
    Profile views
    36
    Posts
    0
    Followers
    1
    Following
    Joined
    Last Online
    Age 21
    Website t.me/MiDi_CC64
    Location Russian, Siberia

    It_Used Unfollow Follow

    Best posts made by It_Used

    • RE: Hise won't open on Windows 10

      @bendurso I had this on Win 11, and after clearing AppData path (Use Win + R, paste and run it) %AppData% delete folders HISE or HISE.exe.
      You will lose the settings, but Hise will start running.

      posted in General Questions
      It_UsedI
      It_Used
    • RE: Few questions from a newbie

      @ScreamingWaves I think it will work, but I can't know in advance.
      I use this naming format:
      Mic1¹_21²_3³ [A-1]⁴.wav
      (You can use many of your custom separators into sample mapper).

      1. Mic position.
      2. Key (numberic type).
      3. Fixed velocity value.
      4. Key (string type).
      posted in Newbie League
      It_UsedI
      It_Used
    • RE: Custom vectorized piano keyboard with unique octave indicator (Keyboard from VSL)

      19.08.25 Update. Wtat's new?

      • Fully rewritten to stock graphics pipeline. Do not use SVG anymore (More freedom for customize).
      • Fixed issue with scaling by Vertical and Horizontal (When keys and octave-marks incorrectly shows).
      • Some core optimisations.

      Many thanks to this wonderful people - @ustk for help! ❤️

      Script:

      /*
      
      	Author: It_Used, ustk
      	Date: 19.08.25 | 03:26
      	Copyright:(c)2025, Vienna Symphonic Library
      
      */
      
      Content.makeFrontInterface(1140, 500);
      
      // Change both-key spacing (white).
      reg KeySpacing = 2;
      
      // Change octave-mark visible.
      reg ShowOctaveMark = 1;
      
      // Octaves array.
      const var Octaves = ["-2", "-1", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11"];
      
      // Key for octave center (add +-12 to change).
      const var OctCenter = 60;
      
      // Declare keyboard.
      const var fltKeyboard = Content.getComponent("fltKeyboard");
      
      // Create LookAndFeel.
      const keyboardLaf = Content.createLocalLookAndFeel();
      fltKeyboard.setLocalLookAndFeel(keyboardLaf);
      
      keyboardLaf.registerFunction("drawKeyboardBackground", function(g, obj)
      {
          // Draw background.
          g.fillAll(Colours.black);
      });
      
      // Draw white note via LAF.
      keyboardLaf.registerFunction("drawWhiteNote", function(g, obj)
      {	
          var mark_proportion = 0.75;
          var font_proportion = 12.0 / 15.0;
          var text_y_proportion = 1.5 / 15.0;
          
          var mark_width = obj.area[2] * mark_proportion;
          var mark_height = mark_width;
          var font_size = mark_width * font_proportion;
          var text_y_offset = mark_width * text_y_proportion;
      
          if (!obj.down)
          {
              // Up key.
              
              // Bottom bounds.
              g.setColour(Colours.withAlpha(0x9E9E9E, 100));
              g.fillRect([obj.area[0], obj.area[1] + 25, obj.area[2] - KeySpacing, obj.area[3] - 30]);
              
              // Key body.
              g.setColour(Colours.withAlpha(0xBABABA, 100));
              g.fillRoundedRectangle([obj.area[0], obj.area[1] + 3, obj.area[2] - KeySpacing, obj.area[3] - 15], 2.50);
              
              if (ShowOctaveMark && obj.noteNumber % 12 == 0)
              {
                  var is_center = (OctCenter == obj.noteNumber);
                  var bg_color = is_center ? Colours.withAlpha(0xB26776, 100) : Colours.withAlpha(0x6B6B6B, 100);
                  
                  var mark_x = obj.area[0] + (obj.area[2] - mark_width - KeySpacing) / 2;
                  var mark_y = obj.area[1] + obj.area[3] - 30;
                  
                  g.setColour(bg_color);
                  g.fillEllipse([mark_x, mark_y, mark_width, mark_height]);
                  
                  g.setFont("Inria Sans", font_size);
                  g.setColour(Colours.withAlpha(0xBABABA, 100));
                  g.drawAlignedText(Octaves[Math.floor(obj.noteNumber / 12) + 1], [mark_x, mark_y + text_y_offset, mark_width, mark_height], "centred");
              }
          }
          else
          {
              // Down key.
              
              // Top bounds.
              g.setColour(Colours.withAlpha(0x666666, 100));
              g.fillRoundedRectangle([obj.area[0], obj.area[1] + 3, obj.area[2] - KeySpacing, obj.area[3] - 15], 2.50);
          
              // Key body gradient.
              g.setGradientFill([Colours.withAlpha(0xD9D9D9, 100), obj.area[0], obj.area[1] + 5, Colours.withAlpha(0x737373, 100), obj.area[0], obj.area[1] + 90]);
              g.fillRoundedRectangle([obj.area[0], obj.area[1] + 5, obj.area[2] - KeySpacing, obj.area[3] - 7], 2.50);
              
              if (ShowOctaveMark && obj.noteNumber % 12 == 0)
              {
                  var is_center = (OctCenter == obj.noteNumber);
                  var bg_color = is_center ? Colours.withAlpha(0xB26776, 100) : Colours.withAlpha(0x575757, 100);
                  
                  var mark_x = obj.area[0] + (obj.area[2] - mark_width - KeySpacing) / 2;
                  var mark_y = obj.area[1] + obj.area[3] - 20;
                  
                  g.setColour(bg_color);
                  g.fillEllipse([mark_x, mark_y, mark_width, mark_height]);
                  
                  g.setFont("Inria Sans", font_size);
                  g.setColour(Colours.withAlpha(0xBABABA, 100));
                  g.drawAlignedText(Octaves[Math.floor(obj.noteNumber / 12) + 1], [mark_x, mark_y + text_y_offset, mark_width, mark_height], "centred");
              }
          }
      });
      
      // Draw black note via LAF.
      keyboardLaf.registerFunction("drawBlackNote", function(g, obj)
      {
          if (!obj.down)
          {
              // Up key.
              
              // Background.
              g.setColour(Colours.black);
              g.fillRoundedRectangle(obj.area, {CornerSize: 4, Rounded: [0, 0, 1, 1]});
              
              // Top gradient.
              g.setGradientFill([Colours.withAlpha(0x4C4C4C, 100), obj.area[0], obj.area[1] + 2, Colours.withAlpha(0x323232, 100), obj.area[0], obj.area[1] + 53]);
              g.fillRoundedRectangle([obj.area[0] + 2, obj.area[1] + 2, obj.area[2] - 4, obj.area[3] - 10], 2);
              
              // Bottom gradient.
              g.setGradientFill([Colours.withAlpha(0x252525, 100), obj.area[0], obj.area[3] - 6, Colours.withAlpha(0x0D0D0D, 100), obj.area[0], obj.area[3]]);
              g.fillRoundedRectangle([obj.area[0] + 2, obj.area[3] - 6, obj.area[2] - 4, 6], {CornerSize: 2, Rounded: [1, 1, 1, 1]});
          }
          else
          {
              // Down key.
              
              // Background.
              g.setColour(Colours.black);
              g.fillRoundedRectangle(obj.area, {CornerSize: 4, Rounded: [0, 0, 1, 1]});
              
              // Top gradient.
              g.setGradientFill([Colours.withAlpha(0x3E3E3E, 100), obj.area[0], obj.area[1] + 4, Colours.withAlpha(0x262626, 100), obj.area[0], obj.area[1] + 52]);
              g.fillRoundedRectangle([obj.area[0] + 2, obj.area[1] + 4, obj.area[2] - 4, obj.area[3] - 7], 2);
          }
      });
      
      

      Snippet:

      HiseSnippet 2126.3oc6YstaiiaEVNSzhMdm.rKP6+YCPWXOqiij7s3DDrIwNd2fIYlf0YlsEAAAzRz1rQVzPhNYbmlGh9l0Gk9FzdN5hMkhykw6rnKZqYfh44B4GO7vOQSdluvlEDH70xk+7oiYZ4dod2odxgsFR4dZG2VK2WpSct85QtZGNcLMHf4nkK2K9ATat0VUK7y+76Oj5R8rYyEoo8dA2lcBeDWNW5Y6+ZtqaGpC6b9HEqqt+w1BuVBWwD.IuP2PaL09Z5.1annYqnq8izfgZ4dkNyoeCCaSpikAqQCnRcyZ8Y8pVkY1neid8ZRsptMcaSsbewQNbovuqjJYAZ4V8PgyztCE25E0AumGv64xvJlZcgdNRbGgqCNDQoZsFxccNKIDEnAsxYyCXuHJf86zOk6vmIedf6qCUPl6gZ.L2Jog2KRAOSU3Yn.uE.obJPZ0HH8M5cs84iky0f34qzO1Sx76Sg4IUnDYq1Ju42qu0qVO+54W6fIxgB+cHGKu5cfQkHSBjWCxaCXcGhYyxFaW1pF4uQLpriUcPQKw3o97ACk6TvtnkgUsRj2yYddTR2oiFOT3wsImv64S8mhcvq1Be1R.vwSVdD8ZVGenxL3UvzrpQIRMCih6hVt0VDHr5MfQ5IjC27Z1TR.jfv8FPJb6PtjUr7548YCHulMsarh8HVY7UXKo2v1bD0+ZxMQg2X2v39aC0dJpbOhYhqQRCHTee5TvZHKMPRtg5OSydjK1XSqMJQ1XSS7oA9H7agBqfOphOpgOpiOZfO1FezLz3HWL23xjdEFFj9B+XDSrYXfgTf53P9tMMsHRAwNbLULKjZEY5dj5FIMValsK0mQfnVOA02IkK8ckuNVN3TxLx.lrkXzXgGTovFJ1rw74CeFjLPNQHt9.OmNLl6r1MoiNg1WoMsCc3DgM0UwoBXCpzAkCXx6YiRCF0+JBJCye7.XL2YhmsjK7JrgiO81j16PfFYfuXhmCDi6mXxfRDQu+Rw0y+w0ySfOXTBbhzal0kiTLnbefu5.W2BQbSAk64B1fn3tYghPWCSCIdB3wMbJ4jC5T94fyeFc6MfWKFdqEACblBSauZruXrvGMBhrFkaTa24FzGBzoMvzprAYKhYsxFJ1IYePd0zLVVtVZCyzu2xcjCA6.XUFxknWXcI4UYgztYbZHCYD.ul2DYga.+uxRY.zpYFG2G4h98grjrtcugU3zC5JuOove.QtCvtVLRV7De7j+6FiIskmKKk1CERoXDP8.4EAJFM.SVixKlkdbKWN7.2wCoEL9PyivRIhIPiUbWU+vjpehYKKbwr.pwkklGcMuj7cDjDUMduoB6lhlJnlJFWp1CofORlzCd4xm.xO7.r7fHGCDLGb..bPtrGcTT44OHLqAdaUtlwhGJ3zXFh5u8aCaBbU2alLpGP78GgjdxdvZihycTYtNIShGbkcBSYAEZy8xzdpHIw2dCtxFhYnqyalumrv3nU8FMpGEGI6rPSpeHVhLISmc+tNLg+CpqCMvXbgzQXkkEpg6hvJbqcefFcpZiFNwkMA6QAmZBUR7I6vIJ44HWW93.HmIZrTJt6Kof5RpzGWV7o63NB70TG64CDucodAHWZB6x8Qwxk5G4KRYefKefGy4bfuoP7l.t3TpbX49tBgegLIj.qpUQHbZB41YFyfzTLZObL.1d.lm4yhdAbBdtK5qw+i4FvVD4Vaf06wn2NWL9Smaqd3m+iyPrPhNx.epCG2yQlwyODKuC.wBWrngU6lXIZXUh7HfF3lWj+Mpfkmg+MSSXuDgsOg2Nz3+A4Uq0.K+lmW05+yq9aYd0LaxOby+e5ax+PzsGdS9el1kZ1e6xCMqL6Wv7DjOIIpkHerkv2i42El12gTsDI1zcHW.+Hc3OS3uKu6A2.J9BlkmRtZKr7LnTsVLkbEKr7bnzq7oRIG0o2CEoYMpduWhgcs0CFsh+0FKe.ypFVd7AbHPpu3.lQar7T9+KLVk.f6EqpeYl7MK07MynjsT4a+B29y+sttoxQX4Yj2WcwoAV0wxyYci0mi0MUex0MMTW1LmaNgPkH7PJ125UnX9Oles72kmjUU+9KTGdBU9BWWl+BUimTs+i4XAuvWIUBdqu6D1LC0xsZ5i38Kd3i3U8DnsiNvLECEdG6wkucLKt9ieF0Zwm3F7s2cbapjhmQbrLvtwLeIGgSt1ra31rnSLdM81rfqkhwg1FezeZ4doL9HtiNi3NtBpD1xy4b.1b.Aqqqb1cZeP83+mNuBe+v28NSv+3uueLdh5775yZhdCRtDfWpW0Z6pMp2rx1FZbIaThhuRuZMqlaWc6JlJxsh7nY0l0aX0rlFtC.06SHLPrxayo+QH+YCn+9YDRa.7KFkPIs4AicoSi13QzdL.k8o.qRn9SD3YJBhLsBq+i73pFaGVu0j.f1FVVNdH2NHkqsY8oSbkGLdLi5i2RRJsgaN.ZqeBhrBPiQ4Z0BUbtX.rv4TgSZ6w6T.OPaOlK18gxdW.68vJMguR+K8mvRT1wkJ6Jm5xTke5YGM6XcS0AmcDjw5Km2IVIxOxyQoqqm+NsnMRMep9Ouu18uNhuVGFES.Lj91Qv6PJVArdJ0URf2DfW.WNU8Nl9rckIOWH9M5mwk1CWLFWYAXDVo8qAFiuno00OpeeXZdN.WUuye5WmaURCHvwU5vFv84v5ZcXIQWXwjMKNA.Zb8bqfrMQ0Mv5XDnKyyIrx+B9DqzDqmKVoYhRsQTaewU1Qrn3UY8kgR.L4EdseqoeJVmXpExrpFmGAqBtx1NcScOGsVVGqrrNVcYcr1x5X8k0wFKqia+zNhjTGLAHDiV1noAjGgLv4xcjGEx.CyV092vq1OFJ
      
      posted in Presets / Scripts / Ideas
      It_UsedI
      It_Used
    • RE: Custom vectorized piano keyboard with unique octave indicator (Keyboard from VSL)

      @ustk No, thanks, I already understand everything. Thanks again for the help ❤️!

      posted in Presets / Scripts / Ideas
      It_UsedI
      It_Used
    • Custom vectorized piano keyboard with unique octave indicator (Keyboard from VSL)

      I will be glad if my code is reviewed, as well as give me feedback.
      I also want to thank David Healey for his instructive videos. See.
      Visit to a HISE Bootcamp.
      Link to Figma project: Soon...
      Known issues: The keyboard breaks when zooming horizontally or vertically. SVG does not have stretches.

      Resault:
      Template.png

      Script:

      /*
      	Author: It_Used
      	Date: 13.08.25 | 02:20
      	Copyright:(c)2025, Vienna Symphonic Library
      
      */
      
      Content.makeFrontInterface(1140, 100);
      
      // Define Keyboard (KeyRange: 24-108).
      const var fltKeyboard = Content.getComponent("fltKeyboard");
      
      // Create LookAndFeel.
      const keyboardLaf = Content.createLocalLookAndFeel();
      
      // Declare SVGpath for state: Key up/Key down.
      
      // --- UP State --- \\
      const WK_up = Content.createSVG("168.nT6K8CFE.TOA.HMhd7ATAwB.4hv5uwu2QVD0.9e+ppX3aU.JR51iQmVmq3DEBXZyXBQSx6ZzdURRBEBF3qrPdOvdj20zAvQAbgzgEsLf4sYLwLqRsHniE8fRoozAAjR263CLf5d1CzyaH70XUqkW9cEpgxdy8bAj2RW6wb6Uq2NIiGcay3R.M..P.4AbQn3dUtuJC4BSWQNfg0qJenRrnX.TlgEV7ZVF");
      const BK_up = Content.createSVG("443.nT6K8C1nBzXC.XH1LMBHsUOhXDdaecZP62idX9gSldMStetkbjQholalOUBgHjggEDD.DAvP.PqNLjRxRCEwxb2eFT0zBFVKrrrXrCnt2nVZkpSbw8TZRpk0JEB+O6r2xqIDrlzHb+hs7FAQmQb+eKitOTKFJhUIzFJH7niuwK5vir+92h9u.1XdsF7CxOHCN5QCVX.jeFOx+Bs7gitMTJIKrVBmlZDWmY0.t+gyUv+vCPfZEEsL51PQ.UPxROsOHwvzogxgpokhVZuToGffs7+qVEb2ZsrcwcKen7UZReZpTPIYwBY9njr.wZtVdUw8CgsJ39a4EqpYJQqO7qT..r.EwxlWZjkiOxtyuXiw03EYXieQ+cQ9elO53+FN6czsoAJZ0gw8LdGrwJ36VKuSKDHSrNAOfVVMUmbHfoltVkvLf.FQJTQKGbgjv0BAf.jzgVOaqWYgTojSyCryHCU9DNIU6.99huUvXwhGx.TD6IC412RQEBzVdWIbA3EjH.7wo0K7xOp6s.xPy3R9Phj8+CGx66hQ+gMJiTHELSPtJw9cZKfzOEKUrMyCakoXe5F.HDPN4hCyVCu0td.");
      
      // --- Down State --- \\
      const WK_down = Content.createSVG("338.nT6K8ClFATjB.X4D.QB.q4J.PwhQvcWYhBifmey9u2K6SEjSYJzjMwEAZuQUUknt.F.M.bC.1.PVhBWBGG26QfVNe8I1h4PWepMy9IFVspkJMrge1kU.Gst0G1D+LeYUoW8kJedkopbs0FFJwFNcTQoW53CTl7HUjPtXoY5EY23.eRjvzQENcDgOo5qrjFDRz6MLIgwPdhdgPht0F9AgP4y5F7Oopc1RqTR2CfPhvUTJAZhNVVXjNtRTaEyALaqRZHB.69X4ytaeIC7Me9P+3mcu2fXAmFwEw.Pj0F98TR73mYJtpJ68GCP74MCKaZfVKKigPhNEyvl.cRRSgKE+3SbtZYX02gQ1Ee3yXWGGf.iwnXldMIgpV.sVdfDV.dYIBTONtdAVtiwUsBRcXDUvSAE3+eui4ruiBjHwHxnhuQRX9h8DII0MS67G4.nL+BKdsJC");
      const BK_down = Content.createSVG("377.nT6K8ClZAz2B.XWkDMBLqUCIFZ0xraRCFrVoCo1Uk2NKtD2FMch9IKi4898xHnRJ9fC.7.fN.zbN22lVUJKvTvvvZsBt4LkGw1JDYsKsUVOVqzo9+10NOlUY.ljd0NCziYpIUR09+djJKQw54E1INIOylEjzRqPbYKE5t3wLq1aZZd9hGin82iYM+gHnpC4Hok.KOjkkAdHtDATsh3QpLzUwkVi5oSxiOuvAUM+fEI7nUUsJRQeqxXmjGWhcXUPFAcYvRhi3QblZcLa+gd7+rWDs+dd7k0tGknc1JoRPVH3j7fmjRAvy7B2jYJEVCtGOrcNlFGj.kGikFLvt40LP22On6UVf8+Ld3i+a3ZWBWpLzBWZMxI4ow79yiYIdZJPIf.CBPJz7UkD9rP.P.RngdrH1B0kgg.KCXCq9gjC.3zA7gKeFIYH1FfWHQ.+i6WunkynNt.G1Mgjd9+gSh0.v.r+9sfP8NCwa+7OeFcw.H.HGr3vf0vasqG."); 
      
      // Declare SVGpath for keys with octave mark.
      
      // --- UP State --- \\
      const WK_oct0_up = Content.createSVG("503.nT6K8C1pCz1C.X7EEABPsMNhMA9.bUzPhHiILCY4UbyNQl9OY2Lst+MCOjYFAXD.8..M.3ff.JH0.4QBhnlz3nwsQWTTTRx.R.A4jTdvXQDQrDCiFLRJKV77foqgFlThzPQDyCDKgqLo.4z7v3XIcSJNPN7DYMPdPPv1p6yE946e260JSqY85bo0y0zx2+SkHjTbvbfVPBEKLQU0bYfhHNrjx7Au.Ml9cBKkIkHIIHZXgEL.0.S.Hn.qbe728s++KI7MdJuIep53s5laer04gr4q99cYWey44lx+as3MepMSPw+oLeY91+5gA.PAMPdjv.83DofstUl3BQe+9V4xRc9tv+ecq7016J0xK14wo2piY1ykMWoZwYxKlczuF40QkqFpQ0JYJqFRTzR.fY.fUlY.whQM.Lh5..4H.X0d.qM3EY10VaFmkQNSylrxRCLpMwFhmzkjX1mCqnlrXQKs9gkFhK9yAZctaD4mBFDWK1ONhg5zIq49NimrG1iUNSSVGhU.9heN8SWLaac5UqAXig+aqQnRFXlXk.HFZgHbXKnIzd.ANfFnF..m.0A.puCILKRXVjfopPTKbYrtJXKLnaO8cBWZpFibCokIIlgJe.p5cvZwXD9bvLFe62kBFPruox7W55Y8j7Y7qDwUAyLhmFk4RuHLcO.");
      const WK_oct1_up = Content.createSVG("255.nT6K8CFy.z5A.HmCtDBPo0M5xf07PurYJBrd0seMCVvQEynIi1Tx0LLuY3gQFV..HZnlVPoSbd.SqU7uKgO7DcyU7HMiQ7DsFm7t9MmBe3LIrl61el4LNmclqu6HgYtA6qgFkKXXw0d++6NBVZ6qRR2u0JPQ.jdUX99ZPWeeUqUAFKdPPx.JcH.DaC0zp69WMRQLaxy4bsFfAoLtuInmEpzEBEAsumGmDzmos16qJZYBcnzsc99jwFGXT2msunrgyTanlNTFf.GREP2C2DZ9DrlHcwMQqbj+VQ1lklgGMFwgWjV1msC3BTbgx8eFxvzA4vv5o7gRrHG.kYVXwqbY");
      const WK_oct2_up = Content.createSVG("582.nT6K8C1zCTdD.XSXYEBLsR5.XzUDQl9y4uzx4PzE0.d0ZHWIY2j1IzgDxHBuf5.Y.nD.EAPlXafhKTPob2CTB3WRoSfRXp4BSBhFVHBCNMzfBAATPxgkJL2cIiCJSL8wdddXXFPBGmGolJRhDwETpgjIRRMQh.4ATpnCcolKST7z.hET5ZL037vAjFOPoTSMObb.xCxgkJDD8hoxY06Um5lJt+kl2K6KU9l5m03Bkhmq9sczVD0tZL97ZSD4Gs9s9UJGob2706OCzu1RDgaQFN21qHB0KMElPpwAzCmEjPQe3kgm+kFq52eubdwkw74EyVa29++CuiYKwE4l5g77r6T1zeYkpaO2s+leaaOW62FiHE6Won1MUlJq4iaV2FajducKFWF64FF.E3vRElFNPd7n.BIy9u9kli4RYGulSq0K89WGQiw0yG2FiKx6LF4JaKhOaWE00xs25Y5w2mKFrRcMMEhTnprGW8u75lu9aMtPOXGpgghCSQ1jTndAf5.PYTWz3zPEQDC5f.feSI.bxdqohWZpASjlBDNlD050vMopwRm5TEkRRSnfxFfujGURTWQDxBy6orniJYpED3dPAeCIjc4.Gt.JQGNfmjnqMnWAAKlK9vu1UHoLPdhs8V7eqoVuaDH01PtGkDSXHRaBfcHyWfYtAAsf1L7LQ1yhHwJLzbaDgQbhOqxDIjIOuy+AqFwoDVrCi0jOqd9c5cOX6P4DiFV5GkR4AudCEHKjrJ+9ZutsNFirW+ULLgzLQFEPYx1Wj43G");
      const WK_oct3_up = Content.createSVG("709.nT6K8ClTEzcE.XZZoABDQBL.6pcnoDqYRC.EfG4z0PVrI6lz1QFA9GKh.UffX7G.SAPU.7tYn+R58iV+T+EXdDwQhEGt3.sdYlc0fCz.iCigHBs.awz2FGly7PCGLS.gCTdvBDPvff.JfIRFUbTUYNhfgEzcgtb4hCGCbgEKRXdToBJTnwgAREVTAyCJTlHwwtScJlGZXwAWfLIiCSom4gEIQl.QxgwNlGRrDwjKmHYTgf.q0UL4a4h1eZz1Sqmz2n2PjqtOLeqYWDmWpogXdte2oBlga9uZaeIKUSM5dywsVLc+vUe8H7uI7MIR4O6oBQkze3lOKSZeClG049t2l6k3e9Kha1GO53yNS2a9Yn1UpD9CpUiZ6csO8ptTaqZa0u1qyCYpZNFY31R+GYsk4RVpGpkd6c8WLsDNKo6NCMcOAC07LyVuMgmWtNJu8zTJsEQtzMaRsNokQM..EDIiJNfXYhjKMzewe9oMqMeJSVw8NtER3qFyFs13N4r07T8zsWyiW1ZVVaDo2Fx+rnRMWKwu4puEi418oZkTlrcGm3lnlVaXgmtDe617pP7PqLlreVKffhZXfjnPEMXffVJ..5.PUjB.AgEaITMDPCD.8CGw+vxwzOggmr6bkx45XnREHaaVIeBDh2nVwuFfvjG9cRaFFMuXOSXlpCPBjxmbpYCg7Fc+In4vvIfTaBDkAIEJFCNTGcuoH81jCBXx7zomPTCzn3F3oV1l2hjPv0Tqg+7YkYKBgOWRuz2yeVNILQ+3DqXAwhvzdyadJK3vN3KsfrjxYgXi23FHyAN117NFhYe.6Tz4DvDXCd4jvda+DQQUO0aDjfyDoPSY2AGbFMfxPefKTfFyTcFn.qrClJmkAlTBtyTMX.cYFf3stoYsft6lOMxoq6v406550u.FBJVnieM5pzkQf5GxLdkfJjQPMnL8xK5U0C");
      const WK_oct4_up = Content.createSVG("370.nT6K8CFnATzB.XmkBIBLMNM.fg1h1nQHHSsLaFrrTht2Xrztksrk+li.Isv.X.xBAA.O..C.MRhnjRIUoAxiTEkQQQJJCHADjCtDwQiHlbHiiGNvkFMdd3T0ktDtL4gAQLORNLwGWfbZdXbNTU3hCjCOQWijHJBiV0jodBZmK0ONwsrOB3hCmCzBRrXL9omTUOWfAKtLAxg5tGzBvRXqNtLwgGWlnfPzvBMX.pAFHJBf.LPZks9qO245Wq3Lsat9hskea12Tp319b+0Vatpes1Zp9hNkLS0T42OYmQZeB7psx1C.DzHIhBCziSjB5aohYsT86Mtosb+wWoTbt9hd0oV4k0rsUrdS1Wvp1I6L1Ma5OtsTI+aEm.BflIfrjGvRQnMsDFkjMgxAAjhZllf9RNnrAkfqOkyXZLT9HYwhxDj9CkMzRiA2zA87uPuoEDa.F0vNZarUfCjAbAWbS49YF5goK4xv5c4CgXQZ.TlagEunkA");
      const WK_oct5_up = Content.createSVG("567.nT6K8CF3CzVD.XnXa8ALOBCUrnyN8FUHdv8eLX4nfphcJSOkTRupvST5Gz2XoA.S.bD.qcFh3sFbvELNHTUDt.rgdlwAcHlKMPS.gCRdfBDNvff.J.8nxjFlYXiGXXQkVJKVrznw.WPgBDDyjJjPwkCxQEVTAhQhjHRbv7XGCwbwhCr3HRkCx1CwPAxiHNfbPXhXfPIhHVNOpLgfJeWq9Noz49r8YEeMmsuXd6I69X1z34jUo8ExmOJZHpolzc3QE9dszKgtNdL7Le0WBpVM1Wk8qj0tvSAb2Ry6b83JuEPLQbfPwgKNHjkl1M0mDp32ro+UMpu673EU8EdmN87ZkWS1mSqMLepz6f507s4qLs6tVtw0Zrto8V811IkcwMaxLrHV60qR2zChYooc0uFM.TviJSZ3fRDHVZ3fWai2DMUa598xkZ3x2Ps4ZhqzgqpYyOOtz0pz4apRHlbsIMuex9EuHWblXJKlW6+fG0Zul+cUsO7LlK2be+s.xgZPjrvdzoAQuF.3L.DoBDNLJEYyPBPBAr3NPi6lC15kQvrNVQQeNzApG1nMWFsVF3niqQLjJqToyypD.Wllhwd6VifDJ0ubu.zJxDYTYX917z9mKh1.rR4k4+rW00f61KHjZrBK4UshGFYdnZrw5JrMp0KC27jQuYmUMrO.Tb2NiRThocehuqDv8Tz3nJLa2g8isBt9KfmgvGkGuL4Le8aVvWQfyqO+Hsea22mn2dRbeBBXhV00xjiu3LqO");
      const WK_oct6_up = Content.createSVG("710.nT6K8CFOETdE.XhJq8ALOBCUrnyN8FUHdvaiDX6T3WrjRRbozB+87IJ8C5aL+AfU.XE.eaz1UJ9yUqq9Jvz7vABEFp3.0tc2c0fCtXwg4PHDZAViowyzbwg4LMWXvDgCLHoAJN3vBBBn.lGUlvvL6X7vBJJzRYwhEFLFnBJTfvzLYBIRb4v3XBJlfoQhjHPbN7XGio4BEGXwQjJGFSOSCEHOh3.xg4PlFHTdHhkyiJSHHf3xnU6S2TFuJ+4Vs3CuB8ztnpOFk6UllG8P0SIpqCeiqnJYs+y59AO2HW2SJp+1nBST9BkMaU9zYXo+ruLTi0lLe5U7SIdUaWW7OZw3O4tY0+b5VapC+zqV6SGaM2Ms6Ky8sIjZO0MuzL9nn7vWhG6Bw2.O9ttve5NW7E5IEgXMKjcqRDqU9zem3Scajp3hIU2yqxM+yOCcMuqok.haNUztV0+roloMQoU7OGF.E7nxDFNnDAhkENYxLe7nZx3hKZ74emVI2pgWxVheuepVnmJZ4YXlUlZnKxK2bxGx2Mq2TYz4NgPrcYkOuNg596y8P0ZGxYooFnqREV3n5q7fHVn8ouMxWQEG.FIpwAhxwJZjBPPGE.HC.EQbCDGMsUUiw.fDBbNcCoS+fHmg79GwUAQcjU4wnf7xeK8iuKp+wF4PnbUqSBHS9sfnw3l6i4rJgn.MGzS5FhEQvIJOXzIFSMookNBPhpbivE5zRGcEjNYxVax7nzG6oKADvA33pGswT441j.MI0A4h3viN6VFh5hXpuyF4FrHsMUmz+.rsJCXgCpG7dNA19w+ad4n+Wq6zdgP6hMutEktvI1diiSQqyEpDgYGQdxDCVgAlUoxGWJAOWHkkRsl57eS4pr.lWJvfRFMpcl4cR7Mbfq3gMKCnNDtog3i5iDNV769xEaSvML59mQ5q0+opC9J7vCYTnBTla5ESD6A");
      const WK_oct7_up = Content.createSVG("345.nT6K8C1WAzmB.XBk8HBPIha.32R8zXYeq6Cf0C1qmGhmi.pcWYWQDIbYxXGcLDfE3.vM.zB.LRhn9jNMMonL.CQQM4CBxyBSvbARDH464wIArcbwMeShjXZwQBy847E0v3rzfY64qI5gyDxHAcH58pTGaP9dfMQMXHwu71cyOAIT4ahDLakp.m.rMcNmuFvjy2DkTAGMdPHxwhjCAfHYjfT1cak.9tNcwHyt1bFWNF+80m8WeVg2Zpxca+r5MGSYL5VkxNiLWuzFqve00LCkRaMG.ffQBRYIxoY5fELbuozlWzTW2Mkw3RsTl4ZeqNa0s2w91yZlWpt8phU3rlqJdwpXLbBHPpn.p3gBegxvSXmkr.VM+H70b3LM1.6nDI9VbgCYArMM7FTPP5.h7fTCA3KDsXnfMXfYXGrsZkbfNfKRwEJ22yPJL8IGLr9U9vIVDCfxLVXwqSY.");
      const WK_oct8_up = Content.createSVG("812.nT6K8C1sFTQF.X4r84ALwAyP.FlX1sONAxG.L9jYiIRoKtTZo+e9eWj6m.pk.jF.mAvdzs8WtG1bRiv6LZ8xV5k1tb9b7bH0MGsny4kS0jRq.yiGVjPgAKN3kKyLeCNPiKVXryAgUfrX1aiEFy7PCGLQ3.CRz.EGfbAAAT.SjLvvQUk4HxEUPWEpRkJNbLfETnHg4AFTHwDZrv.ghJnf4gDRLAhE6Vpkh4gFUbPEHSxXgotYdPQRjIPjrvXGyCITdXRkkHYfAAAhjZactxiSZUTuenpw5Q9Tkg3AIS0yU8MO1Y2U5py26iZ53kLQ5nGtfVYunyMlw6Xt6R38OKHhzazzTlkuiuE8zEsSlabd2drSsmpzcYRG2bpWBMUGu70lRujpt5ori1WocRR+86jMIFvl2o6kaIslYDKpN58a8NJUM1cLpjscyy9QUUw8eukL7m0py14+mtSX8c9RzNK+q0eiyCu8zzq4tzYEVXw4dviTubWeRpatitVQlqa4jZyWib9ip7NmVzLst4ZYEh0pTt3on71a21kM.TPjLvvADJSjTYgkiKma5Zpkda6b7WddRmSmWGgNAqJBMilZ0Y3pGZkvyL6ikWPizaPqt87Xj5ksHc84L7+RDMJOaCt5u4KuYoUmKO6EoqwEobW5KlKGqTsX4sVZ5bL7VdUoylGgt4tpriAf3hZTXbPsrZPPBAB5..pD.yPU.DGRMFLBYPgRHHlbzIStrHSEK39gEaaDNZ9RvZTAKb+SCBD217Zn9nqOhtyoEpPDwwJjOc+IezZRTCPqPjdnwlRLcSXhav0ATREaXxTZtOqfij1PXbThJew0ISRyvlitPDQ45BMfSMIrlD0lA.JnOMk1LrONNaWjeCqLBw0MWQAtjj9dEnjW.G6QxPGOUSz5BGm.VqHmGHHX49q+oBgSmx7.5wy8D5RI9vHiH3Loy1tSTtv7gzXni.yX74TI+FAcNxiFX9kXbJioD+qVxLWf1KgLS+yQTFMHf3FmZ55F6kShFWFVeoQo1woCls32FaRhA3G5GcOjCX52YAVHRSB6xWmdHzUwmhOhX7UBpZFAJqxzXdwEld.");
      
      // --- Down State --- \\
      const WK_oct0_down = Content.createSVG("663.nT6K8C1rDzFE.XuXkQBDOha.H06e3+gUUQklIL5rpfZ3wz4IjPatjPkVqKGQ..HPUMvX.fE.PAvyXbFCc5xlkO3580kLCL4Fz3iTBUiIKJENZ7LAkiFoCB.AMBkok0ZwVhHEsspsppZYwfITTRz3DzSEURsAJBRiOONPRVKW4RiUhRnpwgRpqGqQJIQbZjjJqoQITObpxHTlNHv15dY7m+yV1c6yL826peHzeOlsPN8lsNy3r8abxO7Wm6V7hwbM9QP6LIXNGSBoFMPNORrnfbZLQfAdjrn0XEoTYtk9z3EoxZrxh9DHBHClAlY.aYm7uXa.t0ctaaca471Lzca2MjYZ7ysf6qYtecCWv0WcCtrEqaHhl091u6a6+mgw6qk0MtWFCt1F64aia91LS57xtD97c4XZue+8SG7WmA589Zlgq+..HDgxzxRyoZlf.IZQeEDPiRQOQNJHmDQMoMSP.4PiiFSdPpYxBMNQ4.AQjTgNVEl0HWIUM9vIofZbdzPZgIHMOZnbjTku0ytYds+as50gs22GyzMb+jet8Y5+WnmOL.GpwCJQHoifBB.QAD.PDBwL3wQXfvPHkTBwPoD.NOTeoZpEnEme0YFxKBzqj3R3I5MqgHBaWECE0qjmCnPO401IDZHrp3lurvhjZWq9.s6LxzJLXX+3f6iMKi3pQs.f05Ieyx8EE6.pGkOJQCF0R1XQFbAiVMby8rW+ZdOd1TZstTJzSmN3lS4uHzzEUUvZrDusUPwYXxrVkPvt7GtsZMMzXANeVBjJAvKHK.oCgxE6Q5YTM2Bnqc5Ijk4nMOb+cJ.kd9gNNUOnjpaOSH55Aa2.TFy8JgEnUlW3ffsLXpgtBdydBgGhI0KUrIZX4QteUl26hZX7");
      const WK_oct1_down = Content.createSVG("417.nT6K8ClzAzKC.XMlMMBHsUOhXDdaeI1Hq0CBk0pxb13AX9un6RHIakFtYxI.oHgzZPD.CAPP.L8v8A8pQgSGEwl3btOI5pp8vZXXXIIDXcuR8zRMEQF2TpJpdNMUgv+icrqmYUEfQqQ31I8ddkhpTIt+WOktPULNJhsItKU8wZQ.SWR.6Y1E2ez0xdNA2dOyRZ4hFVb3Lb2wB6uGCYmw8Ml2.kmAjiL7Y4hiQoEY2fE1SnmPrz8wpQgSRCwimXgPgn2pDVCnyw+xkVzY3Q2wq3dMEmAD1XdN+PISK5MVdtl67u87FRu8PmeYbo8ThN28e74RAftCPX7c35gRUmbH.3DEwlj7TZumWpEBjpjl4fE87pZp5w.rU001nvooVFnTf93wZgKpUhdZuUJFh3dI9Y9DbK8d5Yb2SnJeonUnmKDZT3zIf.EfPDkGMYBEs.ZTd.I7CvKIQf8330KZ4Nlq6qfTG9BIv4+s5XtgWcBKBMpbDmjBgAmd1qls0gRS6iFFw1pgq6YeFEiHwHxTw2XILdwdfjjxMSq7G8.nL2BKdQKC");
      const WK_oct2_down = Content.createSVG("748.nT6K8CV1DTwE.XJa5IBHQNGDQ+B+2Up4QEyHeTZlOOrQnVQDQDorY1dY+u..FjWCAB.Z..F.WTqjYqd4rgZgKmLMqV.IdGHCH53U0pvFKuV93ICqhUap5m07iU3yqPGVNPTRldXoYcQEOlPwTEPWNH.DVQzPpgwXYSjKUNEygACllFCrLMIY4HQYBFYTKHJUnrblLIxBUpJlhsbxTIALPQZnVrFWNSRhDAIQsRc4HYBRDFUDMjNH35XY9k8hYyY06mN+S0MUbeVddureM9zx+VmcM1PSQl2N+31waQU650O97ylHxOdJpv9O+aMW0b+9EUOu+NPm0WhLfL5v49ZKpP0YFxxjUrIXwI1kyIt7.hRzjIXSThdXQfAlbIic4jIiYpWebv3dI2zCcMuFpZn1tGe5W06Wd8yW+uFeP2S7YYp52e+37hKiW97hYqses+YHiw7kXC4lXpLOelxm9K2ZmhOc64t827ea64y98wnRw9a50GKaLy3l0swVor+vGN..HDQColF0W3xYBRxBKpzrZJHvx4RkIUpn.kkJSRKHoHn7.TEOr.wEHoLVNRSQThHhZ8blAwkClQsVNPhTSTfhf73xBRV.AAZJRBFFRl8ecVdOl2hOJ6myZNOmkd+qi3w3yyW2GiMjL10JW4iUL63UQc4a8VY2F.3enFFFKIkoFgFRJCxBvo.SUEY.ghyyXTQLfnA.Monj1RqFYAbd05.lr9Fva35VOrkQMA5dGvOeKuexT2SgLK+lfQC5KaUdrTUG7W.WPuwZivsCQpWSRmfTlUhLoBDF9o.WQ0DbWqObWn3oeOI3NQvaAPFtA.fDBKZNAIGOboRluiVhBQ.6Y6xAS.eDAA84ZtM3Ir0ud.Ai1jfkjcEc5YHXwrb1OfG3t+y6kBGD2qnadrYIdBYKIpPDb08frDDxGMC6jGv2ChtkDQeyquRGFoA+O2l+fF6L7qh.KzKSOnwlv+xSkYtBjX4mYWgCpHjFTlo8ESf9A.");
      const WK_oct3_down = Content.createSVG("879.nT6K8CFVFzxF.X+7IJB.yBM.yNQObuDN+HJ8R6z07Y10I2TRII8p9G7MU++uqZXDcB.a.vF.mhL0iBMRlfwxEJTbvXQxFBLvEMbjoHdnAkNUk1TjOPomh3AjzJvDKINC+RrPThdqNquG9XHQJJOztTMaJ5OKzcHE4BTENR1.RJCKjboBNVLQyAAfPhRGafnTpCBEMYLri0oSGHPLXCNbpjhrAyEM7.klfIClTjKWrfA5PjBoRQ7HSBclXoCTRsOEgSEJVlTAkNLEoBmKrzAQoiMGDrxEsV027QW3xKkwG04wndus+Y+k4R0Ml5y6Uakont5ko9U+t0FtKWV+4suy1o6smg+AW8pVFdzR0eQK+aK+illdDe64Z6QqdgmpF+mTQSoGsJ+t4d0rsN5WY8y6Vh9rw4Qq52ZVUWcmheIHCf3RSVyUu9VZpRbYqwiPletRkXd1U2xti3qehFtv6KC+ywK2VoqkGkq5YOF+139cYSw6wpqXTwbY+AWoD+X6Nt8oJantXtpEYD6yodLfmZYdIZCOCWt5Wq00ba5W7Rg1965s1dblK0xZa70psB.BT5XCDHHmlrACLx.I0JHPJhlLWxXQAnMxvYyjMQf4gIVHYCHzLYCGoHa3XASDTPokdd7OPo6AJkhbgEDGLSrbgDMKrAiIWLgikJc5y4QG2ds851pqMY7IqRSup2qcd8sZco8p3t2R9qhKdgO7Z6Lsquz9Ror9HNwkhs0eP0Y0JUtabWkxmtt..1JpgggBTYiHDV.AJET..x.RQTgAQwjSQTsADMPSNJMrznob8a5ZROXpBpk6Cg0yIMw5P+2FJifZeT3XrKYNWIOqcseRLYVhVTAgIehYhsw.swzk5eibX0oHID21z0HWyg8Hh7sOsgF59bO4vzHZB.JAmQPH2Q23FLCgQd.Ffjuz8dnTIxki8YTQ3XZGih7Twv4.HBJ.zohiASA4LgkTskGkA2LJiLXczPy+1ygMhkIgrGxnKwDwrXrol0ujk3Yi+L.HVNdRObcaPTWWJNnUv1LEltVHkzz3zXJpopt0RY2hVybM3c3Isv.XXM8XzXdlGBGnxoFouFmnIjHPkDBlAlmx+OvSttcCVdgauQz5a4dWm8PivZ0MMfc6YgmW.bLIxTgMZFuE5gfwK.HUmJ1TdXstHnFTlh5EUx6A");
      const WK_oct4_down = Content.createSVG("529.nT6K8CloBzCD.XJXgUBDsha.q6ldn+8U.bn6lIalQS797GfbDQDkTF540hKoppZJvfS.cAPU.rD.5KxjP1ocST6D1YDkhkSEFJZvrP.wI5AKHOTLTzXmXohgwXNyDpItcwWWWLLDTwxhxNqjhh3htORSR6LJBRh5MkorcdYxfqGHK5xd8NsnLA5ghtdamTrh.coSrTwH8imK53X6P5NG+9gK4225i8hrzfWiCV.qYt6Z8Sfuc3em6.kyiDTjCLKIHmJKBHhRhemWnz0cr8syIzs24El8sng3i1Q2OhZ2Z5qsj4rzaftiWc56A7XW2HcRlzeOTBeYCJeF1MO2kLrc7OKas9htF+Z0wbL6aU1OI6ZU1db+O65lOx9Kg8y3+E+l+VitmceqRW5bqajLFBcm8WKaF1NZW.PiIVpXXZvs2o0SkDISLq7fE6jZJZBx.ZkIqJFJZrOULHovCDmJKP8TIwNqrfjXXhtQmeomP2Wuy9ht6LBjZI8.EwgBAFJZTI4IxiEDkKui7+fQt0ZGeQOxcq0B1.BX.YJBs2DIT2BnA4AjvO.ujDAVOtY8BWtCv0oUPtCCgDh4+qJGyR7pmyRfByfXYf.onlgInGjCJLp9fkf6LEiaP3T9xmEKJIH8Gh1vVZ.3FGz4cqnWcXmJMsLZZDaslttmwYTThLiHiJ9FQByWrWRRRxloU9id.TlbgEudkA");
      const WK_oct5_down = Content.createSVG("738.nT6K8Cl4DTrE.XDa4EBHQJNDCpVg3CvF.KKzwXmrhwdTlHo7aR6ysQvWK.gC.dDf.fF.dAPJWpDmb5vRXxYyiDKvDtDHCHJgq1Z3qx6ymNYXsksowt56aY3ianCImH1jHHZ7HggEPpTQjEPXNH.DRR3HyCkRkOjf4xoZNMZz73gAZDEMI4jwRkL1XIHKWrjbpTgxEVplxTImMWRPCDENrjhwjSzDITflXoTSNShhPQiIgiLGDrM964nsVe6F6n5Z74a0yohrot+o9342K0sPK4+z9aaSUl65YgX94sXCO+6sHC9oVThW0+bjgcuWc7T+usW+Rrgj4asn8K1m1KEpxboHSvhTr6Jo.CDHKTpPgJxBEHZHv.Uvrwlb1fwBsp4RutY0+V94dL97Oy65X9cpb+f+qzaWLubaka9r93Odetu6J17t+kn4qW+8T7Q8uUkqR8W2hVt3yydiG5teLZq1SV44oVp046YWsT+7GVaI3Lu9W73WsVpJ7d7YC..BR3HyiGZmvjSDTlKt3xizqf.IGLWpbwhBLMtDkIAkIBKO.YADMf.CTlMRNYhnXIBIVxW4FDSN3FKkbhPwhr.QIBDLKj4BnHPQTlnwxecUyZp18w8249VUx8qx842UeXx6pd+J12hUGaOuNNSsudsJ9l5+4b1W.FHpgwwhZYHXlYAjAP..vpfglhB.wRiRYJZHfQC.MonHeockascdMEACH8tPxgqW9H1rjIGjPt82a7S.84p2qU1Zw9rNgtYf0VmBDhcGL0y2gUF7o9+X.jJlkAXpiFtUU7YkhhsfBdYrKMHOpQ+ENito1.PF07mi8JqAthOXYzVTpXn6kEJ2ApkeX9Dpf.DPtuZNKz95r73TRM1fZ0LkullKKObwM73eZEJnkL.NTXPYJIfe1y2DhEcXFa2B2ZiFyoJZ8j59iNzWCPv3MtQm6Yv2EowLhLx0FjBuedFPmf.IU5Yo6P09HOYUlAwKJexC");
      const WK_oct6_down = Content.createSVG("875.nT6K8ClPFzvF.XKMKFBHQJNDCpVg3CvFhkPvgXlrhwdTXujraR6ysQvWK.gC.djl..G.wAPSvhSrKmSfIBjEJUlPEYgRDMDXfJX1XSNavXojUoN4zgkvjylGoV.IdHHCHB4UaMboxakOdxvZrso0uZ4Ga3yanCIGKrIQQz3QBiJhTghnJfvbP.HjjvQlGJkJeHAykS0bZzn4wCCzHJZRxIikJYrwRPVtXI4ToBkKrTMkoRNatjfFHJbXIUiImnIRn.MwRolblDYAEMlDNxbPlyM+37xp6UU8WUmiOnZ47aMOFsz6aoZdK939dpeYOOrYqy8xGdWmtHDr2q+dgHeIZJ9K8uDe5cg9ZOUsLdKud0w3SpzqQywCW547+Ym2iOrlmhQCU45dz5asnwty2Bsr86eVnCwWzvVstkyJTkIqXbOeat2m3snoOe9CjMu1AIrtwqMU0icruE9f9Rer26Qa4843CpqlcmUI5+uR+YaExc5bxJ0eKe6mrh551Egn4m45TzVK1U7o28vu4Sgpi2uOFePbwJxsu1tUWe51w2O+O05QCS0hMmXypF1e8butqtEF.ffDNx73g5InLWbwkGokBBjbvboxkJJvz3RTFnLQX4AnJhnADXfxrQxISDEKQHwROmaPL4farTxwBJVjEHJVDAyBYt.xBnHJSzXL++ip0M+peK9ntpd7wL6i+UqzjeEqnmX18wH2phSkx70OPZWeeue87qehJ0x49WjOGse8r6qR93luEmqaWq.fghZXfnnZ1LyfE.IAE.ICH0TEGDHOrkQis.hF.zjhRYiF4gV+.rpo7KWBXS2mBKc1mw7AJvFQNfdhrJ0JAVI5FURp0ryIkfAKEQjFnjHNs+jPXmNHix3tk.0mESLUSNirZU0jkPljVjercz8B4+vB0FrWfrrBtLGogSvHlJy.feQ.kt59Cq0QJLc5n+s1ThGkdzd5nfyOT8bGSpkabp0ahNlW9gDT5p8IE8CtE55vFMCMy1DArnkUqYyCtAJklPA.OZ9D8woDFGYuBx5ZjWswSprQ5.eLYfuM6HzQAVF8DFXGingoEbdJXl6npRVaHMg5xto16dAZlxQCRtgaibsB6lWjK2quY2I0YIZt3oYqhouNC+cAvTpKCC0frwaimdIu.Phg7r8aHEWDnBJSz7hcG8.");
      const WK_oct7_down = Content.createSVG("500.nT6K8CVYBT0C.XmmaQBLKhd.sJ6+Pel9shUv2SaDaNbYRuHFxUHkxj86L+ax.GzIn3iU.3D.HAf2PtNBLUx5TwPYQBFKrCQXfZnJRcZQBFbSEpEFi8KMSRcypsrrVVHfRUkCSohfd3Z4ZjTDSgfdlreaYKioWREXUeprLC5Lsxo4o5r72XpSkjGqsoB0hvb9CmqmMeaOy0y3i4r+eMGJfyg3buGxDSM5ABBqJ5gghh.flfvwzqok+GigLMhkcldsvPELHe3Nb+gb8VacqOYeO+Fw2gaeq6WnjMi8a2QeetW+woD9sK9dIbFgRX7c+4dIrcdiVT1Zm6ve91XrY+708VOc99l9BYvN5MXC8FMoresI6gd6jyXG8cxb867MN+WK8FMXG..ilJTKKsH6LspRMYhzBOMPASmjfjhLvRQphZQBFbkZgnDpQXnnvTkBBlRU8DsPyxx2e4QrLzYpesLSk7rUQ0GILSGrHACpIUI0pGGKGOZMoqe2grYuLTCJPZlglrSLXoPGyzBZ1YdSFJ7.ZlaLDG3kSHfGWiWfcGO5HDDCFlSFL0Os7FExWMMINW7hsW5vWG7o8PdTFwwwEOAN1lCu3hMIgHojMRnzSayItCAqQ.EYaImIhyxGEWjDEYl3arGSA1a1SRWyz1eTffxTKrXhnL.");
      const WK_oct8_down = Content.createSVG("980.nT6K8CVuGTkG.XFOZBB.yB9rSzC2KgyOhRuzNcMelcuHI6lr08Eudj++eW0vH3J.7Afe.rpV98ntUqdnz8t5dsyPbyiIPOJTcQJzHYBFKWnv3fwhjMDXfKZ3PSQ7PCJgqk3TjOPoKEwCHIVfIbINFtSBOQJ5dCqGeZjAEsHEQraeWK5dbz4PJxEnJbjrAjTFVH4REbrXhlCB.gDkN1.wLCgPQSlJ6Tc5zABDC1fCmJoHavbQCOPoIXxfIE4xEKXfvDYHKEwiLIzYhkNPIiuTDNUnXYRETByTjJbtvRGDkN1bPfL90Ve9VdVqWWludxZcOmmEplg6paktmmY72JlXxdolxOepekdnt2bQKZHaUdO3sIu8+Oerh1cq9w6q71tTuD4o+KxEdOW+Jp1mtWY1co2S52W6U2dH9uq5C0t+tZXV1xViZWOmbp9SueVM9b1etOZiEmIV+gdyyFeTdJmddcHry5v9JUwszmcuzuyZumLMC486DwXWFdO6Z0odx74nT85dvTuE+G0Ixp6Ot+L+4mKqn6w2xCUlYt3qg+x7xduqsiY2X945bYjazYu+uxygIPW+5lkeH04t76IU+QqxyRj19C+XgMm00oVeY5hW82C6FZ6l16neUq56IeN.HPoiMPfjMmIav.iLPRuBBjhnIykLVT.ZiLb1LYSDXdXhER1.BMS1vQJxFNVvDAETxWzi6CT57.kRQtvBhClIVtPhlE1fwjKlvwRkNHdQJeU6saNeGp7xYqbWJWKaYsWCnYEi2hnk39dtmWbh3c7ZGZus5mEMF4VwxOza+oItLm8tX05+ruyLdYyH1noYmHa0+29a4+W8uMJfKiZTTf7zJC.F.jP.n..nP.LCsxPj33R0LTggM.PyVnNMfVVJg9LsX.HOA.Lza+X34L9GGOzbyCKkjiidJSYaSTC1Dl7cEyzA72.Uja0EjCRDyc5tLuaILNXhgaoqie3I87fPfQk0tEblnDQ4tvlUJcv2hkwI6N.GzpmCQFbHpBvABkqIUuGHUN1IYMy4RJhQjhAMjFLeEYh+jUF6AeA7FgTmImSHevGjHHEL.AfTfWr4f9.EJ9l9Il9QHbcXRBfKxIeuNiovE.ZgJUpTvS8Zsd84bLXejiEBFT3lJuXByaorAH0KWYybKEeytfuXBMCXuofbnZx2QBT3hZluOysMcFRDbxqeGBFl.9Mg5GZepMkd.TDEFOm5UjxFhAKGKakPVigyQJ+LJn9I0ZCRwbJm9Vqm+NFtFwGDasQo1yTpcAUGn1L8lazz3SDdn11uUI1gybZC48Q5zZYhktXxoN.");
      
      // Draw path white note via LAF.
      keyboardLaf.registerFunction("drawWhiteNote", function(g, obj)
      {
      	var OctKey = 12; // First octave key.
      
      	if (obj.down) // Key state condition.
      	{
      		g.drawSVG(WK_down, obj.area, 100);
      		
      		switch (obj.noteNumber) // Separate by octave.
      		{
      			case OctKey*2:
      				g.drawSVG(WK_oct0_down, obj.area, 100);
      			break;
      			
      			case OctKey*3:
      				g.drawSVG(WK_oct1_down, obj.area, 100);
      			break;
      			
      			case OctKey*4:
      				g.drawSVG(WK_oct2_down, obj.area, 100);
      			break;
      			
      			case OctKey*5:
      				g.drawSVG(WK_oct3_down, obj.area, 100);
      			break;
      			
      			case OctKey*6:
      				g.drawSVG(WK_oct4_down, obj.area, 100);
      			break;
      			
      			case OctKey*7:
      				g.drawSVG(WK_oct5_down, obj.area, 100);
      			break;
      			
      			case OctKey*8:
      				g.drawSVG(WK_oct6_down, obj.area, 100);
      			break;
      			
      			case OctKey*9:
      				g.drawSVG(WK_oct7_down, obj.area, 100);
      			break;
      			
      			case OctKey*10:
      				g.drawSVG(WK_oct8_down, obj.area, 100);
      			break;
      		}
      	}
      	else
      	{
      		g.drawSVG(WK_up, obj.area, 100);
      		
      		switch (obj.noteNumber) // Separate by octave.
      		{
      			case OctKey*2:
      				g.drawSVG(WK_oct0_up, obj.area, 100);
      			break;
      			
      			case OctKey*3:
      				g.drawSVG(WK_oct1_up, obj.area, 100);
      			break;
      			
      			case OctKey*4:
      				g.drawSVG(WK_oct2_up, obj.area, 100);
      			break;
      			
      			case OctKey*5:
      				g.drawSVG(WK_oct3_up, obj.area, 100);
      			break;
      			
      			case OctKey*6:
      				g.drawSVG(WK_oct4_up, obj.area, 100);
      			break;
      			
      			case OctKey*7:
      				g.drawSVG(WK_oct5_up, obj.area, 100);
      			break;
      			
      			case OctKey*8:
      				g.drawSVG(WK_oct6_up, obj.area, 100);
      			break;
      			
      			case OctKey*9:
      				g.drawSVG(WK_oct7_up, obj.area, 100);
      			break;
      			
      			case OctKey*10:
      				g.drawSVG(WK_oct8_up, obj.area, 100);
      			break;
      		}
      	}
      });
      fltKeyboard.setLocalLookAndFeel(keyboardLaf);
      
      // Draw path black note via LAF.
      keyboardLaf.registerFunction("drawBlackNote", function(g, obj)
      {
      	var areaPath = [obj.area[0], obj.area[1], obj.area[2], obj.area[3] - 8];
      
      	if (obj.down) // Key state condition.
      	{
      		g.drawSVG(BK_down, areaPath, 100);
      	}
      	else
      	{
      		g.drawSVG(BK_up, areaPath, 100);
      	}
      });
      fltKeyboard.setLocalLookAndFeel(keyboardLaf);
      
      

      Snippet:

      HiseSnippet 14484.3oMk6luyjqbkmXWMSKC2BtArA7CvE8e0SyoYy8k1vvC2222IFfAjI2IStmIWfef7imeDLKo4JoFRWAOUgBeeLIYDQdhy42RDQYuN8pbaaZ8m9M+N+q4xe527+xu06ZbugqIqc7mT3+oey+y+V60xsx8eh8ZNaaqr3m9M+l+iR+3t+l+9+te52+m+e++hMaHa7U4e5i9oeJbp8Uod6618+zmZ+eQqcXPLqnzu88e1Si8eQ40zH2zvzmmQx+weKzOMm8pOqtzL6GO1+ge6OIms07S+l+4eKBR0KJHHJTTbnrLzhrLL3RT5xJhpW3PzPE43PO+k3m9M+OITztOs5smsWt8znrSEWdMSGi+gNHrcqMen7GW.+SdO87e3i+Itl1gB6eIrr8S+zu4uy9OEj9O9GBR+u+aMZKZ+ie9eJX8+5u+F+7e5M9yCZ+l+C+sFRv+OvP527mMj969CCo+29sduVam2+S24Gim+teafx+twve3g9o+C++X+a+W+m+c+8Le1alV+29Yk8+aAOOwu6um+Yn8u8yvnfPTfH3+7+2+LDx+FBzu6umaZ9ZsstY+e6e50+IDHD7+y+bXa43X1O6c8dtYZr80Oq2lulsd869c+y+q+teG2z3d43N36r9Rw0mKTdtdsJ6U4+DLLFz+4eFFB5+z+G+C+t+ge2+5+5OyWV0NV9yZkW4SYqE+7+zyu4lMV+LTPv9Wfgn9OA9O76dxP11+4uYq+b0v9e7Q++7m+kdptbma587z3yE+S+i+YOy+3ere3VKe998y5SS8LiEhkkC+w1s++9CqmU8m0lu98uf9zqrg+rW5e5Oaf+ZHas7m8Bkly1a94po0eda+2GCe58e9y7+5O9QwyTL3+823e4e4e4mCr+4eeNvu+h+q+W+kgPj1+sOy+Ec9SS+O8OBSPAN5SnQwIJ.5aw.JazTPx3ybvBh07E+ywGDmPdHP5Rf44Xzr.PUWb3Vm2guWP4EXiSuhYc7NIRuKBbcYEXEQWVsKr9Vzg.cy70gIu9tVXSuBaKQ+PewcSdrUfpxcZ5lgoyEg.kSuBu.l69JSlDJNXoOh9kvb8YwEUNSGhaDwQNQvBhoRqzqrKTWPCPPaPLlbmQzhf8OpbXrdQNlU0PKpkitqiwf9C0Bgjogh+9oo+Pjf8WORfgg9eOR.OxdGyAFKCqavJuEX0DyWjU9J0l.osHlt1anvvaubuOuyoYZHavJfsVtqtVfmGjm4qMn8hodm6oKmvwYNRonOzMqXn155Z7J23NxXXZ+rW9Akep6bOjp.KfEwJx4hB+5vsbNPyFoHiyambfRs1cKeMQ0l.kaQUYxw1OGZ3eaWAnQZn+.BGWrIRxcZIyYh6vEFC1UJZcBvtQV2ta3qpnsFx9dHkO5cBD3NP8UvWfub1UoBOSK3v1NfA1mtVaVxGeumpOqmm5aBS+3OIUUsQBrDJjijts953kV4HYPpaY5rusRxAaB8X2J3Q5dXQvAEW8lJJcFlvxbhpyhE4hOH3J3SPXHJsqu05b+5Sb6ADpPRbaoCvKG5xAKbT.QShW2aSLpoP0GT5ERqGpnDgZe7z3k8VMYrpBCMBdmKWMMrG1+UuBTzQ02QSJut6KDKSEX2ccnU1RTRs+Tm2E25kLW.MuoR.AHMcymfuwGMRmf97DJbXvHtNBr2gEQJ4LnBcxfjGSPZjmVyDafm1OYYz1McT.bRmDDMN.0Fps9xB5d16pGzuR0ptsDzBVMt3x5mhKwEAk4sMwZ3tB49.sW.9mvG9Q8H+Sw5uV44OJj+qmVhh9KEnChL9crfwX7fNrfKXpf1GMNeeEkzv1V8t7h9ChFgmPmWh5cmwg.S5Gmff9m1S7odImCDFzNrgMhURBgvoJzrjRAtAyNpb13hVQLbatW0XstDtO.TZaGRBlGPuLIXJhpWsrneZNeCRTT8Pz7kuyTDNJm+.obPm8d7TBtPBBJXoa22aGAyW70VS3Kqch7t2DF5J0G1EME01M6PhzL01XW3hjVSyufcW7cQ3pra9F3qxj1XFFF2Yt65mIbwnms3lJyBRPGicsmUpvQZTRaCf990GjpXl2hGBGf1cOMJkuKI56D08YUBJINaRLCNsrzpPMs1m90T356.3KWWuZMA.Tu78zjXHjZGXgRzq3HIoJv1iw3mhak54PvsvhJ9PvhDEVeKy8Blv81ifMV2Ww7Ae8XDPAJ+zhs9oksS9P9br4iiaLcCEuhBjgGAoDF3nN.qVwlJ2+dLn+FS2jj+xzcJyMxyzcTOuAq9R.mhXJz4ZlKm3Z3D2DbPOho1NOhnwqFZEsVLJZpS4QWU5JNPRvJSv6bSDjgv.Usu9e+9McicGSuW5.VkOYSaKHzJb4dhF.FxzZHHAbnq.xj6tMYVIvEhFnnSUy4.GS.VwTw5ZPn61cwNOQS.eG8AIGNKMsftQpcjBoMw.nVdblCSdpGTypqumoPdmmweqA0YV+N3nOrEex6r05yWl.CfJAExwffMUWmxky32cRQMuhCrEYdk70soE0IeH8kdFPcAIvZD+FPQAYOztT+3KX0IW6PYzNxp2ctLeuHYQ5RTEB41krVeYNHJ0A1K01Kp+cGCR2FAwZjHHrhBPu.sEHCMMhM5YTwFkZbpfMcPRe0lnTjpZqTAxwZqdSFzySu9fkC5NVWrJCyB0WWCpwEysPW2wAhdyPVqUJpjHCKVEI6.BzRD8Yr+ZzbGTB1ntqfFn1qAB7K3CZ8VkMkI2QF.oUo3qCPYPYoUzuUPey1Vj9AZwO+2f8+QGw1Oez9b0zq8ruk+76r09++G4+yK.8qx6gC8G48l4tge38HEDXXs2LLaLXnAyCtsajaUz4RvBxuLcFnsRPz21AL3r5RDYh4Ao.e.XPqp.Ukg.wbXaFGtQGO1bh788cOAcAYv57K9F6v6rxy0Jp6ppERRVMsTKN32ba6vewwqUunOAhcS9EMV4kmposIIehgcgs8W3YhKAZLhRDBHUukDJ77InKn6SD.ud4N+7u4Ug1rBZ5NAP4IUMxlqcmjLe.MFnewp0qzKqnHmFWKnCBA5AJOBtjWRhPsA.noPZTn9QobFGcCeHqbEBqdEagl9URT4EF1vIP1FpwCPom8AvzCnHML.dMCnMyyvq6KHEJ+T01dv.JqSI.cH1o6K58u.kuVHgfITgN0fwNlPlaSfu5MhlRORN0Fdc+QDCxoeQb1ARMQcQz0+1ErJArJXHA7Ae2.TuAGDDSFLFp.bw3g4DFJLS7cuio20v5iFC8YiCwl228cwvu4VFGVicz1nq6EaznuXReRW3wdyJxGoAaY1TieqrfQa19dUBtMvz6IMnI.jtozjxKROK6EdvBSbaMP1hynqX7PbOnrXZsbdr1nxcAHiYk3nHH3aPHFv4ObJ5ZtwgcUSy19Z4Iq6pwZ5iYVTudJulEay4l5UTFpUKAmwe8M8HlmN+qtXIAROqn85moSxHb7DpNxDxE9i.lK8l2h8Xtej0eYA9mAd9Gxlg+UylQvw+E8rWf23O5YeysyyZOAYfeVAQZ+YMQkcs.ZqzfK7qiv0nRKr+Ijt9mDzZGwPPP4zwgP6Iu7BPuk.xOZ0Vj7utBHkMZcH42DeStSa7lsDUWYcf.tb.S278qgkODx0I6LDOI08ZwwGPE..DlrgoDKttHefTeTZ0UDDSSm9P5VFrDvHp8jbeBp9RFjOiC5dlfNxv0QO67BKeSrhYRe+ix3ag4aAVAlsOukdye+dZClXQMMg80381KZ5tCQoXej2aeFWqu7yFGL8Eq.kbErQ3P3SoejUJ+5vvYIuCHzAdnenVxP7nNpKD98FGJqed8IUo342aFruewmHqcWkk.6SBiOVxS9KlBP90ATnP9E.kaN+BdvXu3DAV8MWbv36.9G.jKrO2mX12BPfEPoxQJIHcvJ207mxrepvAS.G4AEXrGhypZz7smxQ37YQibm7pbimez5y1HFJyxYZbWwxv3aeV2qpi7RokS0Sm5nnnHNVzlU5szzfpaC+gf+bcmhqqgSyiuA+4QtWSCZd9j2fMB93o5PnjeY5Dsrm78LrxyAO49QixyS0Lcl.QD7FePcGne3QjkV.8.9aHT19l2KzautebHsmpSSl5wiIsQuQGnJ8LnIgHr3t+.6xWm4HZh.uHyBoYHLXOevby8Vny1oDsu9MPu3BNR4m7hi9CRLgqvLDZ..tOsIZGBXC30jjqD9v2kI8yYVHa.CkYYVQDHhsxBDQSivFACpKXsYgHhYcEedoIFIRfIJBJf90UXPzztfbDjU4QlHc+PKlahzmAuEHMJ5HImGM4WROMl1IgtHlZlViUVj.Dz4FBdB9AxaMwU2WFFBM9iyqRQTeHwG9PmYraaEKMWW2v44.24OVv7L+Ym3GcidaK3vygWAVU5o.leVrL07fGv30MvxaNvCgC80XZ9v8MtuP+itrwpSwpOcRAt9QN7mrWDSqispIyB7nE1LkbJcuv.k1AUcjLeH9GWLFiXXzFzn+9ANPdR+Qh4FUHY4xT3mLdYHX6G4B7dwxtYrUujuhpdpOY1pf0I0cfuZjOT0uyy3qcxarVN4U5Tr9bAvrHdLwGtx0B0YsTP+B+kULgMFeqXHtTuKFymBNAYstUU.5zO6alhsqQ.A55025NhB1ImvQcXnR+EkMn+pkMjPz+hxOeg6WBfwooSLr7Nr5fDyuFm3WRb4.EpjvtgrCWUHFtgcDYnkzZ.CpphIk.8XrC.I2SFAbwoZCA7ADhK3ObZDj1QA2JRFdAUwcC1x0VKytAlcbiHJMbQZyIo6AV+Tt9kk296OXxqTbECx8CRLappeFP064OVaj3xqEdP6K7mXU8GOpYbEB8Yt3T8GjON18doNHkFevDUo+TL5M8FqVPwY.z4r9vbPxck+nS6sbhecE3BTfNVFVCbY5Mr2x6ajQD6tkcK8xkjH92QyS0wE6kHSrC0YzeRej+qE3YfWbcrEp+B3aPIkL4mG1aEWLKhIVm96RzAKMuzRtAIHL5cjAhdzRZslLXoGilWldHYzIivAy7zbyAsoDu1rnl28yVRyf9.ubwkLmZJlfB6BHkr8PBENKM2WP7hJRei2Tahvjy3kECGDo9U3Gi52Q6lpent8U2Db1uMxb2Lm5eXtAE3UZUMqhSZ5zLtKOJomLVLJU8BOnL2EbQWDuD2fQMwVgH8ot2htZifSCCy3mPDOAVGcMhzN9fM+QnEClZJs2eX8kzazgGJpr35267kDvjy1j1K5CqkgZUUMowUci1BFwUUgpffOkiAO9FYpExT7M3s4dzqwIc.78731pt98JQd+IFd7nqfbVVnRIKeCxX3wGwpucRzubyDEM9Da4EOLyYy1c9NeNgqlT7Efx3CWgRkeFKeOihfpHmouzqOSxTvcbrwmj2Sus84tGQEQmBgGPZ5r+B4uTCPlzmnwVaE494F4pLzTQ2A.keIl4n46cwUVgpF5WSTsspGYbI0wsHnhxWLlvvjlhMIkfD92X7e4i4Jv59VjAv63DXAkw2UcwOY6kfvHkKZTcZWVo4WId4+R7Qw2J2f56dlAe18KeiXvWIhUna6SIaU6DCVFmSKDewfHvwg9.JxpFN1VZfOe26TgKcpWzWo14XaLpScpgG.w8WTfi8qVfiRB8KRSFY7uer18tmUgU2vz.rpFtAdzQV1aSOSbc0uYGId8dueasGXnETY6KXL34CUGnEHHGngayXmqRvDyY6C1oiiipJmLCe2iXmCmV4gb41VIyu8hFEEn9P86765X0LN5Vtl5GRQU4oEw4l9AnMbcbVNQscxprsgPcSErou0frLO1VsXet8ataV20Xc5o29AVQULZ65Lm036R2reciWL20OpkhFFqru+x9DSmYDeZqJPc6z9M5EKDL7nET8src5ls9xLXD+YTX5bfGcr6ykavoyzMl85dP9XHVIucRKYIm2Ne7hveKqzv9XI0qiEOapIYymhvXeZKG3HZxO+oEKflBw5gV2BVK7fi9NCqPnCajgasu4q.jI7FjsZP4IMR5qqynwFuXemQ8ICSWS5vPEsq43JSe0hU+UbptOsbxQyIeGMWuwsaKCxMCE4G6OSB7YfhPeMSyVCp35XxYhx8vnSDwqmzvN+h+BiqN1IEzeHqV3wFHyeQxA9utnIhew2uHJ2ibBv3w3LJFcKVtf0wKSJw.4huTk5wXiUyMuT8r58c+L+0yGW5FIdh4wRSNO3xKwFzMw7uB5lx9A76fq0ECGLujGzLr+ADuaQ0C66uGhGjZ7rSbHItUJN1oO7wS1583AXjcMKO+UmZm8QO2oyOP3abZ5jcy+RFKwcjezvshJ69bSXtC6mjPYypb63l3JakF4PSqY85J0xnEZyoaL5UpDgRiG0owEDJDzwv2nXcASTBmusTSkmmFteg5HPWrcqUuaV7vNWBEwNGZ.G0SszAs+0iIGw8hHmBU8ifstSdk8QslobW+.rAza9YTj0If.i4ODjnBATBEuMoHS6i7fe6sXnWNeSTgCQtgsnuQrGte.kttOQERACqz+HMN6TeUNj.ZwE4lqIYZ5EzGQCP+uspdonUt7xgO+HJqEg2HHCml5rOE8DwdCKsY4tdYN4xxZ+FZ9FKa18oBbSw3S4IsvG4n7gXUsgHBfJInzOC.uB1rH0GzPxKA1.OqSs6V+VbOw37QDDUGje5YJRWUH4xl0lkYE0ztkXfCFu246pYniSo4MyrD7nQj3VnH5X6hidm5h+z00LOXzvPyQAQXaEuJzm7Of2pm7I9Iwzvj2zu0ZfAWcw5w.ViffpHf0j6RWY0vB1ZjDSJFSWOvUWMlgz3PH6b9j7NvX0BzOGwr00uY5UYymE9uT9Ol7U0yPpoZ2X2o0pdW+UpW5iNldIUV32HmpqEK.4sxLDj2iHEt4krrwMgO5J6Z+fpuX8WThP7qKPB9OheZI3W7HPpQc4unDIqkOlvGMZsy0Me5lEfhTQkhCOSGfoJ.LV.rL6FNPk9JXYgV868ipeVAwYTPn8WH+Pdzd7QMlsLeJSX6zw0c9yk5FQwe4q4zkmXTMQ+xxxNBNHEL78qNQL4WVU0a2GbCAQcwwGgQUeu0SXUbyw9hFypNTM8ixG6bymxm1ILVAo3CmNUIQOKuGgjVMnOYAX1Chx9ExM8WO4bxxUnmiADdH9heTAvB2P49vRcuONaI1SDLLHQYC4oLuvU1tLplrAbgSyXgHGg3oNC.Ox54Sy1ajEPemDOAr9Q2uEZPuDOfzSoHHKJhzJ8.0BaOABHGOLalC3dIjvSJy.wXiP6hZSoK0Bx3ysN83H42nFIB1CDPK588uk3lQjB3JB0wFZcuVb4Wd5ox2ndux5lQaTBPtVNM.tr3dY7YYpGrIyL3dODBXcZXxvYJfzR5weB43Iun4HOSSufYxodI4X5IZiVJIV46PEj45nyvlxOkygiuUSwRhGBFRG0NepeNkNQLVP7StwLqsWekza8wrFml35I3jJc9TGKNt7nQEcDegrRNbjZ5iwYjifDnnxiKrlyC0zNVaaIAP4G40N4b7RFaAAsGfU7r4lu3l7.pjeWSRKcDv37pK.6Xrh7rTip8i1LvgHl8XdvhGqrG8V03A5.QK1pZ8HngzsGtXifyWEUq3aEQOioodSV6l471uB32tRuD5d9NGlcRNdKQLowv+kAEcVZ6vGCCtCzPAhAqA8aqIQnXCdS77mKQLwU4Mif22.fqapbw0byRjElLvzG.YEXi.QKD2E01DMFe1E52+p.Wz154rbILyWmH4TbxyEVyLDLcJEoxXEI226tMfSV5gMuBNDo9sxUzX90.1KWRi7pEzZCMtQS98oZzV7VdyPRB5SgLuuF53zucvWf.ll4nUI+xk3Ox9PBhK3wS7WRBR9qqPB6WV7F3Hl62OJjX6ojYenTx.QQbotiSJWH3pf3fWdK07tEb9UTxiUQk7jyXoW57UBnfeM.eDWo+nPhtyzvXZTGjyww.ii87h06aNyCTNFA1gBy5q7CiRult3zCG1KJLRAnunq2UIDXKJ30W7mxOLm3Ty9RY1zEUFNFwxGeHgecYwn3ik0vqm0OC9Fb03k46Ohe6tP368YjLJrkOOZ53XpjS5p7gek0CRua95P9ZGNWLxTDfB5MUTYXMR574qLfUbCIuDc7v9SyV8nO2hKeKgfz45cyLj.qpbXcSTNmRvqDzy+LcODc6GgXzef5t4OfkVtXlAsgbPCekNDMuSM2DftNrnVbLGqmyJaOOBNiVyVVe906Q84JXnAfLITNptALHwHuBcXdMWBypgAonusMNXCYkOGCpF+V7X0iihjXo0sz97JyJM2CAUDjKaUcJEI8U5.5uJg7bUm5+XMi7R9KW2Npe0odJ3+3hFsI56HBFisRgwnevbYCJNDCuYYxbJApS2kzp3Nos6mNATRWF0Q7FbtGrSD7MyCG5FUztDbta6WB8TpyP7d38b5bxbYHCoswKrdOnN2EvqVovN6ZFMSzdsK8RtGJVsv30Kl5fp0X3rVAw+fuXGTPN2aPAopbFFFePuN8uecB5wjOEBriDlc6UMy0qD7GkqwXD8kO3SW+BV2nNVgUy6pyzHPDN22fU+3n1VP16LtdZOov1wsS4GT+wRWbJ9Ewt88xIUO8RSWZ1q8yVuz.+OkiyG3Nz980nLJdPWATFVvIHA3yWHDso3n85N3iR6UgIeFuLFNHh2IbQorzjatytu8G5+z9Qf5VXyaHKu.oX0a6878qDWIj74HVi.oOjPCte5l2wmVagild45BPQzYnH9c.YhnOSYaHgWa1DmJixTMv.9k9b21qqKZmffCpxO85juglufw.du6ES8h181TCXApr8h6wb78B19chvSlAVw2V+O4QktyY6s6gNCKYXcoWQs4zsyjluCu021wRSDZfl82QmFIgyPf6ezhY+iPOCupWmeRceq16L7zGq4YD4jQEEtu8dGIUaxrnxZzNjBk7fil1+8RmnsOxt8NydYmhLtCueS9EElNIfKugpUF2N9GLsOISAu0rHDlVNDlxiv0FzjV72hw1BSwy0ICKBltFjp2w1mWaYpPaR8iys2VSseDowhCB9n85xN.jWx0PTmMwt1U9QH3sh29prmfFJ8iG7LdyTZ2uo9LZ4.dbr7HvjoiziKVM6WSBy17GGpcVOlqKuSc84rWr6JFOFb0e4E2j8Ehw2UHK9zOc2ZopsC1NN2uQs7.Rwy856P6tMuCFNqQkmgx5.Oz.Cn5nkQOr9pkoYVTWI2hN6AjQjCydWGcgvXWDnDgyosjUf2MNqzavvE42RxxwXzK.Sr0duOIAwOtn3wcUn+J2JipOcAu64u+kr9NdrE7JlD6wukHyKyyVwX593b01IdfkvS8nJXsZcOfKGeQiGcMhuSwwEI58ZDiDCKmblfOl3F1PQDybaXPkvkdY0wEiijvDJ65wRbF8tP9N33ciUSLY.6bpHi5x4cbwgvv+irS6+98B6We+WIH9i6F1J+s3iHyOw8Nr7VOTPxPDkn.0AAN8CJ53qyUonG2XJc1Y6c18gKZRNffx1AFeiAqD.sY9dEmKx8B+bn2BEmBpWmSGS7Fs0mMnUQSUvLkTmouUbhiEjwfsepGJ8HrQVXaadadNM4nRw228Fk+1SHvciQk0s0xxz1MTKBysMnw8Abn1cdQZwQUwIOs6wFvjihuU97or+fo7WX7hDx2.WgvuHtzoPHlKkuKsF1rMoF1LuPWoxxOsHidSDR1bjaP6XSnqDaJ4wNIZXaZ4tNVkmp6TwTzsNBEKL4mr2SeiJLcltd1PyKyJyMvLj.lk7l7SbF3Nzq8rrWYXjv52uxPL5RRIu1pHVR1KewE8EJ5E29pvRlby.DM7GhLBf20GDK8PF6Qhb6vhDXYsYzv5d3jm67zjuvhS+TBP4I8LVYvonSGpW.dh370m2mtWSoCUfJoNkB71stNVNlpxu4cLlL7rAwraaE8JrmSNYMLcv.Yb57qMCEFfjiTBLd3tlpRyKtsSqUjMrRGy676+.c8fSuAjsgCUugfHccajCzUtSkfCDM91RGTZ9fS0QdpshkEzggGzlm8PG8vIt5qsbuO6g8DOnoke4T5rvnv6RnDwSM16kNTWTEbikZY1rHANAnkt2bi1VXPvJ7oxqynCeV+9PE7XiFbiP+7VUONF.shn0PqEc1YCrBBWo75jRPf.bVp2R0gSDxEN1QLmoMzH+hZMBHsvp.1Oca2W816sI5fG1G46agffuoq7e1BrORhOWC6s+tSJsukZXbGyXVFx1ox7USVCbhq9TfvAOw2.gcb4EtRWO1ngUNvKUv9B5ZSy.qwt4LKOYbblLDPewKJ0ZgwfgHzppM8345c1hqB1ZoFEHsfUkzXLm8xfADhlzXx+Jaw2udQJF7e7PRbybqwAFaLX7meTsTfkWf3X6glOygQYho+LR3Jqj0Ktmbp.NIWemZyCxwXaCpS8khgZ1o1SR3X.Me2RAedl5aZbbrhBe7qOOBOcMDbDQ7mUmKLMBp+Bz9Zc4cRfPkyhCJrBUQQeyruxNPjU+tcftoZylxtV.0QpCnWjKHQBr.R4Mz4iLcjBqK2TrFwvGkW4HGrDej3RdePYLf.1+loqUmLAqo0YRHAoR.1a7s85M0wOFjtbGsuiqsqGQl4C4FuN.N6CuSPcPNVPKLDdyvCGWXBXq3ogaDVrOPP9ghTz8Ck86xj7IJ+FSDpRRLWlpcN6XxWn30t+3nUAhx+DB5H8S+7NZVfsata.qRfhbNcF+.bM.BBd76zTn3neEM5QZs1bPSQ5m.UwFzBE5DZ9bMpB7jbDuQ0xowfw2Z7o9n2JUfBU178RFIrBafo9EfJjbe0TbpnPQgzRwLGVHVp7knYU9hArgGuWG8hUi0XNm+cGaMy6B3kgMnZWOhVQwC345EhjRQg1eb3a7OPhUzKNJp55NM7VHkn.G0QX0Jbz39qr4k+5IWjX+xAtJDl2+3gAPMCWgU1wTh2AfE.IXFyQ3RtzOcvxZ0YLzg2geZMAtHA3CHnXWDGCKX5yuAF4uzkrTfsV+DpdqarDBpTHIyIiiF.M+UT6SHMpB2RSP1L9aHx1.zqEaoPSae2gh3ojWNBVC1G9B1Qlxf7gN21y0GwIdcZAlBW0LbCChbq5FJIXxNIrhI9ZxpAiq4C5JmrAypCMa4m9JL51NoigqOFO7ba3YTb1begImv5xKFvazYJihGmP2S0jbk.Q71DvCxHHuLrn3yZoA88IP36WFv1dNCHl.nvGYNAD3PVzjWCxmVEpyeos.xLhfxAnEBr9.XZ+FJpQuRG+KFcp1r8Ov8N6dJ8iOTf6uT1IAabu6Th87aJheXWFxUZeg0ozlLGUl+8IiB49Gqcf3b5H7tTIdDDQTA0UDvGwRaDOxjjYbjR.TxFs1HZxljksxMfD41Cx9XNrg3Ycqxgy2zZHoOJGdQfsSgPVlQfcQScL5dPmgCIokoegN.scDNsB7Ux7GLJNbSChPQnmOQnSVs460TU4umXt8JAOtn56U8b0jmjGIA8ErVAODjmzCMc8b7ajaRoxGXN54Fb1dlKa787qZpHQOYcCAYXRUcYEEcGnJeEVXMfzXoR79J0z5ceAvRK5A50UDhTqQmNLjZDVafNAZfyKrLpvDDQPzxQQQQMk9IwZQWUtS1uSfdABIOVNtth8czqFY.eL91A6tHlvjW.gCNrRK9MCEOzZs2wfAuP5qUo1mxSeDuZcMfgJGNbsrfhU+fG9UvH6OGose23bli7beW4ODznOwxKROAF4.wmGsXkGMhNUZofZ57MiwVbm4GKYhVpIihjU9j6vm1vFVmGrOhSFOvRdFFJrzcCTkUnOEfLsvcU8cuDdgmHGerlCaUIgtCbQzyJwirLlUrlnTvlno7nJNGhpZkm+TxfinS5KBWydOuS40xGWIwIF.KjAfJQBcxkFPsaMOqGMyeAN85S1Y6hwdmDUyMK2I5OLQI3UQy.9WYyY+0gEnH+ksmULT797wfJ.ohJK3EqA3koiU9GdS.YUJWhaHxDXHEDeWEEpYZIRi..fOKow7uXAy.+9XTsQGpk0vcn53TP0O+aryoHq9WAi7tI4hQldyfdX+NK6o2MnLc2pe40TL4.bWseJUVLW9HQGK6npZcu6ajohaoc+RV.i0WvzEF7ImPqKeh0LT24hgoxtwUJqZzeliUvHQesEZxSR1VOlyLetqYk4RvfDrenRgavuSKZshA2ticx0gT1i80P7Dmu6lkPsmfZ3f+yvSWXh8s15MiyTqgD+5ovVHDBoySAiV+gDD1wXwmmJQfdLWHiA7Khfr9mfJd+Dc.vNj3tVTH.11mK3Ihs20.LQTyghE2tPkNZ.YZ.sCCE7kDXoDNKE0umEAd663MIsoBriU.stYhGkPcQD1Pudf4rfijFFD85cSohLWEpqW3UvG5vzY27jkiV6gxc293B3.jy8VzkxFw8uDZb.WGZHgSK8R8K3IVh.vnzuR7NHNlWh8OxSdFYOlXhIL2olTyF2i2mER3ItlJzqdmlTnjxYwEsiGs.AkmgGQ5VCSSfuAWjOnAcllQBMuwBx5iGywKK+dXkgS+DTARU1VsYPO5L1gYz37axUmgSEVsRnbBm7sdBmzjbFZLiGuu8TeQA4S5.AiZeSds.ujt2ZdMug1JSqRjdcau5K7KLGIjhMJb34EiDRkEWuOyHKuJn1ReMQMiti3RuznUTaQlRnus74l1cZkV17nuYCp7AgFRMXOKOp+789NHHr5bccMqeRqL+CxkpfOH3InqieMiyQ2CV2FCugsmopw583TN0icbWq3Y14dBtZnKEiCba.DQ01pzRez3UsDyHEqkWakt5IgMg9L0JkMIMaGfaG283ks4wPSxJOdhuejkeUSI2PtYsUKhSmag88VNkETk4sisLhCBpnNWsSAnXU2maphQeky9VpDeGz3To1FR+iuXfxrpf2SMsLdLX5089aOyzLH5ps5wutsu.fupMZ5UpWkNG0N3OViWmFf9z0ilzBnCJGZV3Zk+Jy1OJR0bL3Krtvvdnb+8M5cr57z7NjaBRS3UtA5Kze+F0FaPE+3LcPhUZ7bRb5i36QkNY6dd1GSRuOAr95su+hKrnN6iyMdFVQzaJ61uoPFFUuHRpeGAl+Pf6WajJ9Q.ut5PCTN3sJreQ71t73CJVCtPv4ekkWE6uAHFNxe7LlLwdyw+nsItNfke6wc6BwPwH.U.X9HwfR1fiGIMoTU9i3ldeQbLnFsoGGopeq7.e8iyYxJOHt1YmM7zKOeBd3D99ldOAQ0zuq1fGJ3LZxV9592wuimZdTsXdwOqr+5HJJRW+QZ0Yyo4RWSCZytkqmKg9i41Fbi9o0WEImUKRxZ3mETlai5L30M6EYu8Wa.eM4s5eHS09VCGMlvF2TBftVCCAAukpY8tJpkKD7wmIQJkW0mWnkuI.6uZ4863z0TjeqpwJ231T9NZ7F50J01kx8FBlv.01XMZKrChUSJRJ9xVG15cV0dazKbBFx3HD4WtCOdm8YKS3TKEgMrP50WeQZoksQ2rKBjBcjqSjE.aoPjF7.B.XQfOXcRqUScgBH.L.D1t+9U4haDd9RVmtH6q2TQZYhvloQf1sJgywwoe2Plf754U7zWHqDH5RUSYOAS6UVTehvqVA5xSe43e9xXS4qbXtrV0EG2r67tb5sMRzmqmwCgNaWpBEnvQMKyyq4qfob1Jv2q8okDnxYGJUpzw570BDKLHaLXhJ6FBuh+iKOFLltuVfe53YBs1SnXi149BMEXuywUy2fArnJc4RN+9xsh8pJNoBbZbnVYTpiSUeltpuhPWnMyF0m97sflphLkTC72vTPTQoarWKiQuheqZromlxmsMru+9Hw2uQuUtUkVzg8JZMx008bXJfts.ze3A36Swe0sU+ugb9+z++Iv38WejyymgI7HmW0jmaNrFk6gPVS69H98ZyQg+f7DYlKw0ly2HMvZNvB9JvJQvBFa0nY9243eciOSdRmz9xuy+nkWsdANEc4j35sYR7V+1zwNNQVBZa1HmxaY3NY4TR45ZA6YemNA63eHk20EU9hq2s2pqB6bJ0zH8lDslIkWvPAq6vsWGNVQ9gLtKe1+w9c37viN92FQt1b7BlqcMOHv2OyUUO7y9dldMM1NsJ0s5O7wFzDXiagkDhDi3ojXYPWSMqS6.SznXHZPa1ZX.2zYYdACD3I0wzXawbV.DaxbzSg9MQP.4c0u9D8hzG3yVzizi5NrrsQJM32vZBOFqmj8913uRnNA9vro4OaWqdxJHmJ+EL365wPNb0A61Ll6merAigzXE5zjVWD3wzulyAp.Vtyhz+jm0mQuRiZUTt+gPElbGneDaIBfxmzg5SP+hKUzC.69ir3hVI78R8zEXuPLrovYHLhjnMe.RovLET8OzQjnQagypjEjIbffr+HL2Jk99a2CO5f1N5Y68REnhjdzb9QCqtwNeuBSuBqlEXxCcVEHm+fgqYRyXrBqR3YDlHumIpnVedi8QyJniBKutVGF6nrsi+v3wY4qfqzYXpCJDL5vfSpkSJLjfx3Sh4B.UXjl.oLqOlldaeJ1ToGvAvxgi.Ekebyczj9H+cHgoiwFD76bU8PCK3gaqahZp7ir7eHkWtb5Ue11qGC9LbxT61m0KQzxvqcJRc1OtZxH8.ovdX6CfSOnWMq2SpfBeyx27RRG5BoNPjbhFHFrScnmIdtUbOHfLouoYqhsHYUyP1Z1APvrceBFzVDh7cKk5BydiUbxcn+b7HQufJBybeYLM+bEHu89mTSsaZ7URTeWC3pTH89OCCZZV4GFjnkoBpi85fl9w1IpJUkvWH7MBuhEyPXQRaEulTSo5voaMui3r+hZ7fdQj7EQX5PuQ+DRri8SYgn86m4q.7jIBaHZYqjfGuUZpkmb+UN7.+sDv+Kat3fs38SQerlgl3+dffld6u0wC+dff3Ocq+6AB5F.Ak.OXrex68V0d6Uov1InFLXKjT6xavGWoFCG6Yl8MdpKXxD6tt+a20fzzO78K+fUvhEjYjOcl0aUb9MccaB5SJlTF50OvJjzVUbbtQcXaUa7qaFUq9laCJ2080YPRsWsTl4p2CJO8dD6fi6VVM08T4Q6Wx5gqc3drBl+Dau1p+CKpqY1dWknrZdrRPqxiDD2QPiC2og7A9DFAiAdyyb6gKiGCzmyDAATQAuasFSwHyLrD2tIxlRKznQoKlKSrrVSVtnNkdzprKyuhr.TTKWpjpRqQ8guD+UMcpUvldg1mBnCTu46EmqCtHbLRfj2HsVqCuab3BvvKdj7rMdregvtsRQTFNxcDc+Mbau+R0+ghKN25YdC4M513jUIMWmwGXFk08iEi.n1WqeDnqncKWQHbxvnvP4lWFd8NPAG3iKPRlv4K77SUnRsRhGTcbbXg5Qr2X392gZvAjSHTe+f4UO2h7wRrzN+P8b6C7dPTIN7AhEfEDtCmGTiw63qYQ3Rp7O6K6BhfUUOwrGXZbkQ8n7idoodV1t7uOSo8ppeuQc8EG0chwXFUaFYdxHNWcNU73EzbjObsdmYqiUks5edvpF1IHqFxybwlrCd9fln5cGqC.zNCY.LWpQOtOWPdnSzBDrb2UJrL9N9AjQFYtwq+jDxxNMpr7SIE4ieFUnSL5nNKosRpUhEWZzgOBuWxhV.qp+wYBcbLEV+pR.Tg44ebxP9BR7x+X4.Z2.aDAu6ZbSZEwpCA.WmmH0hXi8Pdyp8B98AIi5WQGyphlUUHUlPEbw.2Yn0Kk9JFMAmNwwNYyMfN632lxsmn68fPuE7zC7LaWSCf55sG5B6JWecSwhA7kERbMpZckcWWZp16q7f5EXUoCX+NNM2Bjip9K7QfMX+Fo9h6B7wpKKepbIu49r7YnrFygH5Zde7YJEAJtcAb7uhFbFWv7Lqi8AKIWb6O1kFrY.sRo4oNl3EkR9vdhm1Esc3Mu5fCVpmT8wfP91gITjhWLVpcrdRHuPMdfXb1MLS1nF+7ASjnfIc3zgycuNqMeikXHpSCY4SBhBThR5N5TxRyzmGW5uX95OqwwAUsdj09tP4CncSM4JUlrPD+H6yzL4CpLE3ekiFweCs6P+xweJLg0GhCL986LGVcslBvMUB.6xA5slfuHdY7Yl4ItejEOCj6O6nHzAxNAktUFQaC.Q4AkYpPr2MY0CNw8OrSbXE0V4bhqRGUcek9bYtmvrfXKklgm6qq4s00vP4J2fdNuolpBzTrzNedu5phgmgXhV6TjqPbP47pNGt914D1zCs.R7rWemzx1DKTy2bZt2KuMJyrtftPawVAJMjTqtpQy+Hcx6YfyvxtnhWW2z.VMT883dYpGPpsV+wh1qghsu1B5xknl4.04TgYuVrRJs.DOPpyJWHhF6LZoxPbJK2i.dlto2znKTxEqciIeAfUn7XrnMzGN8Mw2RZ330D.RHpPqWzzCzrIeMwMh4nDMlVK2THpKH5thkndclSQPZXBDo8buXIPv1AUeMsM4GKzytFIM2rVF1Ldu6p5Zz+55L276Cg8o0i7yNwiie8efIFbCn32ruNOQJwbV0uSlK2z85IWCbfjTz8jVkY3lUBTflkjzjrRMlVJQpWS9n6yoZmNTOr5oGOYKccylBmT3IpRBlNjoyKg16IWIE0FU8RxBWlmmSbvSTGxZiTT3LxvPwLhrYKB+ajD4Dkcgu3wwgfEiI7.2GzFCkZ4oNC2waurKkcNlEGPgjLk2JMWmRBQc7BICnYqRdLvYvdtQW2vk9UUm9ZqwMi5+0NqG+54xzT+wb4OR98RfwhVor+XwznW8t4PzpurZb+ba9xnb30GYEhgUHpGw+c..kQPekQUAIYpJevoBooF2CVJFuo1wK1tryuZUrsT8e4ndKm7jXGM9Es5no6G7yZon1dNj1bOh16Q+8qvllvAmrRXkRtho3tGqkiJdA2hTYZGivlrfyZVYjFdQ9Mls5ovnZd2JSmuXnLlqP9yW9ANVvZ9dSXvCctZaGuAUB+W32Lr7bvUbuUmjy9l6v8zWJwmUJBXmBZwUe4Sje56Vck6jldSak1O97lAiwItB9rW9cp46eck9QCmaWoSCEVRGVDtDEM7o3L8k062ByC0DyY86uemPhnNDeVLMbZUNW1WLtij6nkJmETXgto7gBvpbsA90B8AwBI7t+GdrI.sSgBqH.0Y326QIvulP7vQhHBPJjo+rfyAsCrmFGBeF1lFY8Nel16SYnAcNb4tUZqvakPf5hqKwR+B02EEujWuv+RqFbrc+90m6OWoedqavgQQveDGIVXQjBMUbRhM5SgW70+i.fDjxi5Cqc.c.r2ZKiDGHmbACI6nK0.mjmEeV1ZSPdrnfmmzkcm7A3y4UshcD.9PeoLD1NIgR.fyx4kaGLMGPbswaHnovxD7lHJDNBwThAXhwxfEbBkRSPY6oVC6pNi2JYeAa0sc+7Pi2Lpb0qG5Cl1pmCqm3wGWD2H393L1vC9qi5onY3WdFA+yn6VBNebRvdWm8urMbCJg61MCBOVd5zF99XeyTtvQsLfXKyrTZl7LYIOR8wmexVD2XhPKRyX+ixp82Q4MnuHSkR+rg+VvPDK73z5NCXRYW+M0dLDNv5mK8hjKY3woj2xYP.HzYX.QTeLTqzZS88qHuU4.EA6rAGAAGsA041Ns6PQcgz8qqM.suBGMMpBCUqo02hAksX.0e5jXTLcZIIq67KNs9t11BUujLOeNX9AxWBW2LjHfAcYPBcbt7Wuv20+jonaF2TmMszVhpPQVYW4zCsKjOLx6fs+cHP80Wjl9CEByGVm42bNh4xyreYX6WTB9HIGXBqjXbg4p13z0vXzIpWJjz.zEHRvTxPJV6+V4smb4WoGyyB5fLU9UQqXUzfBOtmnUFncjyeE6xVocpT9wrc5q.XZsZvr+WOpzsBJrb83xtVAVQezA0OwrWYSqLxPZQIW4ZBkW6UOenAW7mop7wzSDGVezlzgOVWaFuDc4yOWJkX++qXt95osQBh6fpqNmpHc2q2SV7DbkKJNg+DZUkNffyAEHPCPq.gp1XuIYabrcsWSHf3Cw8M69FwMyZmDGRLP2SmtGRTlcl42L65cl0VJ9moSwMga.n9ET+C6YW7zZ6Z1n+Zm8saL6t0Gq+QRuiOm0Y3I6+1C12cy8JcwNeZPq86u44eu+agtIlCpWiDdhmwvS8s15r5tFGT0gb6sUZVy10vH5r8L5Lr0EP4wIqc6EPa.9Wtw6nT+aVpEPFnKdEvGzkwo5tdvWWyH5GrkYwB4SwsLECncXgbZfYjqEm44tzh1fyeFc6HvqEWQu8HMcVQ2q02VtP96JjWC48lFVHm1.8pMJ+dcHrlr.nOdx6YNDDwqYtFqs9RfeEw95Kilg9HHkFcnwuMCwFrTCQUqSQL7X29D5sPDyhD3PfwTzilF9Ib.ia0MFZb9cTT+Vz.Q.ZR8IAH9sFljMH9wAPyhDRSx7eq76DCMcTG+W8YtgVqEH2K9myfWkLvyPR7VMC7JKIdqkAdUjDu0y.uUkDuMx.u0jDupYf25Rh2lYf2FRhmQoL.r5KBv6guvOTmP5bKfh7+ep7Ii.KYwiLnkcoiLnkcgiLnkcYiLnkcQiLnkcIiLnkcAiLn8DkKOObIEK2iJRQFaECo7Y3SsTGPNmyTa4Pr58iel51naO6Yp3D3XLJeP+xQSnKKc0jY2kFoEJmVnxU5+td0qd++lic2dzwtiRjIqlY2pY63VMy0E4VvGs.o64hKYMbWZ472kWK+840erp1smqN74GC7bbnAyUMR3iAOkiK4J5Hth90DmH5XCUx8poYMwW+xXMQq3GmMkgdt64x3M7oIxldN1HoHh+dVNVTI44ggec1d0HbBR6hIiA14SC3LLcxUidMyhFSBiZp0ng83d9BaS3hPkbugmvZjwrunoiGgyb6bJCRaFjAETSc8R4lzrn4vzBIgONV4UG6QqNinNSsWaaa+.ZKb+j8mL5CO7vuN8nkSFVXLmdCehwiBmXVuPibp2kWWeQHZelYy6t36zKWZEbjZrPeGxvFhirhOOCT1l.aYE5Ova.3DZ+pB4+jEKZj3+NQgbu90CH9cYVgS4ZMZaRjCeKeeJbznqEcJshJaAEQBag.MkJtgX7S85zwgdnm8zliTx4NcIttTGL5hwNKjdN0B1VkJ77fH5HklNDdS9PmGgzw6NlTIez3v1y.9jnTdz365ZmJ1qm+dkA3p33Kq+8e8GJyxlm+rJLKhfbXZxEEoc0DEPsyTD6IRultgL9vzzx5O.iiV5IYbzWZJ9KpGi2ly7ywElSNBUU+WjiI7zZA0ca2FtLOIAekp4WjkTVelv+IuHrp9PBOfA0vpPEQSnhxhlb8G.WM2BXYbrbITFWAZRcsEBX4XhRCTNWhRiQJU5SrB79pUbGSjIX+IwHPN4JXJWM0CQYcCEQWzzqy8gpfuZYMMTy3XYYcrhrNtprNtlrNttrNtgrNV84cDaRsUDzOLtrQQA5cHZ.mK2ttDXGnX2px+vevBYg
      
      posted in Presets / Scripts / Ideas
      It_UsedI
      It_Used
    • RE: Release Triggers with Sustain pedal support

      @d-healey Thank you, I will study it and maybe make some changes, or I will use it as a reference.

      posted in Presets / Scripts / Ideas
      It_UsedI
      It_Used
    • RE: LAF errors

      @paper_lung throuble with Colour in else branch on second condition if(obj.obj.isHighlighted)
      Use double-click on the error line number from the console to move the cursor of the code editor to the place where the compiler show the error.

      fixed code:

      Content.makeFrontInterface(600, 600);
      
      /// Set LAF for combo boxes
      
      const comboBox = Content.createLocalLookAndFeel();
      
      
      
      
      comboBox.registerFunction("drawComboBox", function(g, obj)
      {
      		
      	if (obj.active)
      	{
      		g.fillAll(obj.bgColour);
      		g.setColour(Colours.black);
      		g.setFontWithSpacing("Oxygen", 15, 0.1);
      		g.drawAlignedText(obj.text, obj.area, "centred");
      	}
      	else
      	{
      		g.fillAll(0xFFD2D2D2);
      		g.setColour(Colours.black);
      		g.setFontWithSpacing("Oxygen", 15, 0.1);
      		g.drawAlignedText(obj.text, obj.area, "centred");
      	
      	}
      });
      
      comboBox.registerFunction("drawPopupMenuBackground", function(g, obj)
      {
      	g.fillAll(Colours.black);
      });
      
      comboBox.registerFunction("drawPopupMenuItem", function(g, obj)
      {
      	
      	g.setFontWithSpacing("Avenir Next", 15, 0.1);
      	g.setColour(Colours.white);
      	g.drawAlignedText(obj.text, obj.area, "centred");
      	
      	var a = obj.area;
      	
      		if(obj.obj.isHighlighted)
      		{
      			g.setColour(Colours.white);
        	        g.fillRect(a);
      		}
      	
      		if(obj.obj.isHighlighted)
      		{
      			g.setColour(Colours.black);
      		}
      		else
      		{
      			g.setColour(Colours.black);
      		}
      		
      		g.drawAlignedText(obj.text, a, "centred");
      });
      
      // declare combobox variables 
      
      const var ComboBox1 = Content.getComponent("ComboBox1");
      
      
      // link 'comboBox' LAF declared in 'Set LAF for combo boxes' to above combobox variables 
      ComboBox1.setLocalLookAndFeel(comboBox);
      
      posted in Scripting
      It_UsedI
      It_Used

    Latest posts made by It_Used

    • RE: Few questions from a newbie

      @ScreamingWaves said in Few questions from a newbie:

      @d-healey i would start simpler as well, but that's what i need at the moment for a school project, and i have 5 months time to finish it. Would it be that hard for a newbie?

      If you have such a small amount of time, then don't waste it creating a plugin without scripts, because you'll probably do it quickly without revealing your full idea, so learn programming, at least from the same videos from David Healey, he explains it perfectly, I only know two languages, it's Russian and Serbian, but even with the language barrier, I understand what he means. And I have experience using Hise/in programming - only a month, or even less. But I can already do many things that I couldn't before, and I'm proud of this result. Of course, this is mostly due to the participants of the forum, David, and all those who helped me, I am pleased with the fact that it works.

      posted in Newbie League
      It_UsedI
      It_Used
    • RE: Few questions from a newbie

      @ScreamingWaves I think it will work, but I can't know in advance.
      I use this naming format:
      Mic1¹_21²_3³ [A-1]⁴.wav
      (You can use many of your custom separators into sample mapper).

      1. Mic position.
      2. Key (numberic type).
      3. Fixed velocity value.
      4. Key (string type).
      posted in Newbie League
      It_UsedI
      It_Used
    • RE: Few questions from a newbie

      @ScreamingWaves You wrote that you started studying the creation of plugins without using scripts, I want to say in advance that most issues cannot be solved with this approach, or the approach will be greatly complicated and the result may not be impressive at all.

      1. I don't know exactly how it's implemented there, but i think, it will definitely be impossible to link the button to audio routing without using scripts.
      2. it is definitely impossible to do this without scripts, your interface will be based on panels, each panel contains ui controls, if you want hide one any panel - you need change it's visibility parameters, and you can control parameters such as panel visibility or status (on/off) only through scripts.
      3. The question is not entirely clear, if we are talking about samples, then yes, Hise has an excellent Sample Mapper, to be honest, I only have such in the sampler from Steinberg (HALion). There you can sort all their characteristics by the name of the samples, from notes to velocity and proximity to a specific microphone position. And you won't even need scripts for that.
      4. This is what I was talking about, the result may not make the right impression, and too much effort may be put in. It is possible to style knobs, but it will be necessary to create a huge photo in which there will be frames on which it rotates, or how the progress is filled (its named filmstrip). this is very inconvenient, and you may not get a clear picture at the output.

      To do well, change your approach, start learning js.

      posted in Newbie League
      It_UsedI
      It_Used
    • RE: setMinValue not working.

      @Chazrox I need to keep the range the way it is. See the last line of the script. Your solution can change only range, not current value

      posted in Bug Reports
      It_UsedI
      It_Used
    • setMinValue not working.

      Hello, I noticed that cannot set the minimum value for the slider in range mode. Only setMaxValue works. Is that how it should be?
      Commit hash: 71968e90

      Snippet:

      HiseSnippet 902.3ocsVssaaaDDcWYyzXgzfFf7APnmjKLbDUjMkQPQb8sVgTYKD5Zz2LVsbn0BQtKwxUNRsn+a8SpO12ZmkWrnrcbKDZDDD3b4L7vYOyPMRq3PVlRSnMubQJPnuvIXgzL43ILgjL3DB8kNCYYFP6V35nEorrLHjPoa7CVGzs1jj+4Oe+QrXljCKcQHWoDb3mDIByRuiN7Ch33yXgvkhjZY26vAbk7XUrZFxmMb5PRY7orafyY1zZ3P9QV1DB8acfvH+NbOVX2NfuOZru2dQv3d8.O+H+wiOf0sWeVeOB8YmFJLJcfgYfLrnGoBWDLQ8IYwM3JQlXbLXM7HA3ctvM43Ih3vQUMmLBgt4nkspMJZUu1YnHTbm+ksruIOf6RD0aZzFOEk7pSoNOMkn0nzlET5UNAbsH0rLhkOekyGYxafUnQQdjF+E04MuwcfTX1s4wJoAjlcSXSgyznw.zVGw3Paut82wcuNa+tl3QTlw8Vl1cpbbdcc+N2JjrvvOHUia2pJVqcb6feQbUd1MCL4WzFC300G+4dQCLKhg1sJveuXsaMAD2LwzpjMqFKicKLPNRCnElQDKNCdXRXu9RXt4H07OSNCExqXwyf1us61uyEaOmqLteRomJj23pjtbUBJnca46cv98gC5zZ2UgylW.2GgGMSxMBDjRhUAtP1d6l+VysZ96McuennnGMls2pUwwf9QCamgzOEv1xYIiA8N3YFRp6RD0LqJDc97Bw5yF7hi5ZIpjV4yEoPo8CkpjR8Ad0OO3DlgYUuk9v7RAsQXo.8D3VbeQgVdKmSfroFUZdtIoJosBzWXxi9xRkdPrHDzDAJpa5TcJPliONT6NkEUWjYEUKGERDggwvHUlv1rtaGzebwg3ttz.wuB0WrkvluLkqOrlB5txWS4U4Kgw0pxCA6n44J2g0cUnjwB+rtUqKe3DMtKQENKlYVcAic0aY.K+qOYaGZk3y0h5OA+us04+JEekyHggO4w4XiGginj3KAGK2U+0NmFEAbyRBtoyY+xWlEyjOplYvUECYFsvpPNeVR.9NMNf2coDhsCazF1whB6NUJl.PFla723mxfdVaZYPupfEhqq4ERI6aCddtGjSx72VtkStVy0ijO1WuOiZew0b9pk5A.6tt.e65Br25Bbu0E39qKP+0EX++cf1+6v2OynRJFaHjgiNMemIkdpjgJvb0J4eTSa05J
      

      Script:

      // Init.
      Content.makeFrontInterface(128, 50);
      const var knbRange = Content.addKnob("knbRange", 0, 0);
      knbRange.setRange(0, 127, 1);
      knbRange.setStyle("Range");
      knbRange.set("height", 50);
      knbRange.set("saveInPreset", false);
      knbRange.set("showTextBox", false);
      knbRange.setMinValue(32); // Not working on commit "71968e90".
      knbRange.setMaxValue(72);
      
      posted in Bug Reports
      It_UsedI
      It_Used
    • RE: How i can create a Multi-Mic monolith?

      @d-healey Yes, I did that later, and found out that it turns out that samples with the same duration are needed there.

      posted in Newbie League
      It_UsedI
      It_Used
    • RE: How i can create a Multi-Mic monolith?

      And i can't find info aboutMulti-Mic into documentation. There are only contain functions related to Multi-Mic.

      posted in Newbie League
      It_UsedI
      It_Used
    • RE: How i can create a Multi-Mic monolith?

      @d-healey I know this, I learned from your video how it works, but I guess my mistake was trying already created monolith sample maps convert to multi-mic. It was probably necessary to put all the samples decompressed into one sampler, combine them into a multi-microphone system, and then "bake" them into a monolith

      posted in Newbie League
      It_UsedI
      It_Used
    • How i can create a Multi-Mic monolith?

      I don't want to create a lot of samples, and I don't want to store 500+GB of wav samples for the sake of combining them in one sampler, is it possible to create a multi-mic monolith?
      Thank in advance.

      posted in Newbie League
      It_UsedI
      It_Used
    • RE: Hise won't open on Windows 10

      I found the file, as well as the string in it that prevent Hise from starting.
      file editorData.json into %AppData% Hise folder.

      Temporary solution:

      You have into position variable, here you have a array

      "Position": [
          x,
          y,
          w,
          h
        ]
      

      decriment values for w and h variables and off "isFullScreen" parameter by false value, then Hise will launching again.

      Broken strings:

      {
        "Position": [
          0,
          0,
          2560,
          1345
        ],
        "isFullScreen": true,
      

      Other broken settings (Hise has launched)

      {
        "Position": [
          0,
          0,
          25659,
          1344
        ],
        "isFullScreen": false,
      

      Resault screenshot

      f639dab5-8a2d-4378-bc54-98d93b1632b0-image.png

      Manually repaired strings:

      {
        "Position": [
          0,
          0,
          2555,
          1340
        ],
        "isFullScreen": false,
      
      posted in General Questions
      It_UsedI
      It_Used