Page 36 of 90 FirstFirst ... 2634353637384686 ... LastLast
Results 876 to 900 of 2238

Thread: [C][SRL5]ZMI-Extreme

  1. #876
    Join Date
    Jan 2012
    Location
    New Zealand
    Posts
    331
    Mentioned
    4 Post(s)
    Quoted
    94 Post(s)

    Default

    Quote Originally Posted by pkerfan View Post
    With the new update efficiency should be increased by alot as it's just a single right click once at the altar. If this could be sorted quickly it'd be really nice. Trying to do it myself now but not doing so good.
    yes , yes i should be a lot! efficent , emptying and filling the pouches is fine, there is a 1/100 guessing that it may or may not fail. but repairing pouches is completely .. erm broken i guess you can say if you are using the "contact" spell can i know how you are solveing this ? can you post the code you have got so far ? perhaps if its good or it may need just a little more tweaking Flight may be able to assist? =o working together is allways good!

    Sorry i think i may have miss read your comment.."pkerfan"

    erm
    but once in a while 1 or ess can get stuck in pouch because after crafting ess from large pouch there is less than 12 inventory slots.
    I posted a progress report with a picture , my pouch set up didnt fail , meaning it used all the essence in all the pouches , if your using the small pouch i really dont think it would do much of a help it just takes up a space and doesnt really improve your exp/h..

    P.s good luck on the "repair" pouch spell i hope it works for ya , i wish i had done livid farm for that..
    Last edited by Note; 02-21-2012 at 02:53 PM.

  2. #877
    Join Date
    Dec 2011
    Posts
    193
    Mentioned
    5 Post(s)
    Quoted
    51 Post(s)

    Default

    Flight this may interest you, in "Other news" section of latest dominion tower update, little note saying
    - Runecrafting essence pouches now have the left-click option dynamically switch between "Empty" and "Fill" depending on whether it has essence inside.
    This should stop the rare bug where the emptying or filling would mess up. It never stopped the script just made it do a run without filling all...

    Thanks to this new effigy update I'm having to slave bot agility, soon as that's done I'm back to using this script

    OSRS Color Scripts: Borland_Salamanders | Borland_Iron_Ores
    Utilities & Snippets: [Color] OSBuddy Item Looting

  3. #878
    Join Date
    Jan 2012
    Location
    New Zealand
    Posts
    331
    Mentioned
    4 Post(s)
    Quoted
    94 Post(s)

    Default

    Im going to take a break from botting i guess =O will still be active on this thread. am just going to watch movies or something till the fix for repairing pouches is completed. Wish you all the best Flight and other's who are trying to solve the matter.

  4. #879
    Join Date
    Jan 2012
    Posts
    537
    Mentioned
    1 Post(s)
    Quoted
    16 Post(s)

    Default

    with the new rs update the script will also need an update

    Quote Originally Posted by onilika View Post
    Dominion Tower Boss - Sunfreet


    One of the highlights of Runefest 2011 was the A Character Is Born insider session, where our intrepid artists collaborated with a hall full of RuneScape fans to create a new monster, the Sunfreet, to be featured in the Dominion Tower.



    The beast has now manifested within the tower, and can be faced in Special Mode. This flying monstrosity rains fire from above before closing for the kill with teeth, claws and its lethal tail; at combat level 530, the Sunfreet is sure to test the toughest of you. There’s also an easier encounter, featuring a level 80 Sunfreet. This fight is an opportunity for everyone, even those without the skills or completed quests usually required, to try some hands-on Dominion Tower action.

    Those defeating the high-level Sunfreet will have the achievement recorded on their dominion marker, and the marker will change visually to commemorate the victory. While there are no rewards for defeating the easier version, it's a great way for lower levelled players to see what's in store once they meet the requirements.

    --------------------------------------------------------------------------------

    Since the Dominion Tower has launched, we've received a wealth of feedback from you on how to improve the content. Accordingly, we’ve made the following changes:
    •You can now carry multiple sets of goliath, swift and spellcaster gloves. No more trekking back to the tower halfway through a Slayer task! The gloves also last longer before they degrade.
    •Where a fight requires access to the standard spellbook for elemental spells, such as the dagannoth mothers, your spellbook will automatically switch to the standard book when the fight begins. It will switch back afterwards.
    •Power-up items can now be exchanged for XP books. Have a surplus of scorpion meat or a proliferation of potions? Simply click the 'exchange' option on your reward chest to convert any unwanted consumables therein to tomes of XP.
    •Better and more varied spectator angles are available. There are now more ways to view the action, and the camera will track the combatant by default.
    •Adamant arrows and bolts will no longer appear as rewards, meaning better loot, more often.
    •It's now possible to skip taunt and victory cutscenes, so you can get right into the action or straight on to your next match.
    •We’ve upped the conversion rate of dominion factor-to-XP to a level that we feel is competitive. We’ll be keeping an eye on this in the near future and tweaking if necessary, but we hope the extra XP will be icing on the cake of the awesome combat and rewards available in the tower.

    We’d love to hear your thoughts on this, so feel free to join the discussion on the forums.

    Enjoy!

    Mod Tim

    In Other News

    - A new "Total XP" tooltip has been added on the stat interface when hovering over the total level gained.

    - Runecrafting essence pouches now have the left-click option dynamically switch between "Empty" and "Fill" depending on whether it has essence inside.
    - Hati and Skoll have returned to their icy homes. Remember that you still have until the 17th of May 2012 to use up your XP boosts from the gloves and boots
    Second last sentence says it all...

  5. #880
    Join Date
    Jan 2012
    Posts
    72
    Mentioned
    1 Post(s)
    Quoted
    2 Post(s)

    Default

    going to be useing this later today most likely im starting a new 24/7 rc'er and 24/7 essence miner so i can always have ess to power through with.

  6. #881
    Join Date
    Jan 2012
    Location
    New Zealand
    Posts
    331
    Mentioned
    4 Post(s)
    Quoted
    94 Post(s)

    Default

    Quote Originally Posted by tallmantreee View Post
    going to be useing this later today most likely im starting a new 24/7 rc'er and 24/7 essence miner so i can always have ess to power through with.
    Just a little heads up , it currntley doesnt repair pouches through the "contact" spell.

  7. #882
    Join Date
    May 2011
    Posts
    9
    Mentioned
    0 Post(s)
    Quoted
    0 Post(s)

    Default

    Quote Originally Posted by big man 1 View Post
    Just a little heads up , it currntley doesnt repair pouches through the "contact" spell.
    It was doing it fine last night, but not so much today.
    Also there seems to be a few issues where my character will forget to turn prayer on so I have to turn it on myself then resume it. Sometimes it will try to fill pouches before withdrawing the essence. Been working flawless other than those things

  8. #883
    Join Date
    Jan 2012
    Location
    New Zealand
    Posts
    331
    Mentioned
    4 Post(s)
    Quoted
    94 Post(s)

    Default

    there has been a runescape update that why the repair pouch via "contact" is not working .. as for other issues you are saying im not aware of hasn't happend to me im running it without pouches or prayer

  9. #884
    Join Date
    Nov 2011
    Posts
    1,589
    Mentioned
    9 Post(s)
    Quoted
    17 Post(s)

    Default

    Try this on Line 1733
    Simba Code:
    MouseBox(480, 230, 490, 290, 1);
    May work not sure tho.
    Mat
    E:Not working changing it agian



    ^^

  10. #885
    Join Date
    Nov 2011
    Posts
    1,589
    Mentioned
    9 Post(s)
    Quoted
    17 Post(s)

    Default

    Just Replace this function with this temp fix!
    Simba Code:
    Function ContactScreen: Boolean;
      var
        X, Y: Integer;
      begin
        //Result := FindText(x, y, 'Choose a character', UpCharsEx, 170, 10, 340, 30);
        Wait(1200+Random(300));
        Result := True;
      end;
    then on the first MouseBox Put this:
    Simba Code:
    MouseBox(480, 230, 485, 290, 1);
    Mat



    ^^

  11. #886
    Join Date
    Feb 2012
    Posts
    5
    Mentioned
    0 Post(s)
    Quoted
    0 Post(s)

    Default

    As for choosing the pouches in a certain order find this section:

    //Pouch settings
    SS = 1; //Which slot # has your small pouch (0 for not using)
    MS = 2; //Which slot # has your medium pouch (0 for not using)
    LS = 4; //Which slot # has your large pouch (0 for not using)
    GS = 3; //Which slot # has your giant pouch (0 for not using)
    RepairMethod = 'Contact'; //Spell or Contact

    Make your LS number 4 and your GS number 3!!

  12. #887
    Join Date
    Jan 2012
    Location
    New Zealand
    Posts
    331
    Mentioned
    4 Post(s)
    Quoted
    94 Post(s)

    Default

    Quote Originally Posted by Mat View Post
    Just Replace this function with this temp fix!
    Simba Code:
    Function ContactScreen: Boolean;
      var
        X, Y: Integer;
      begin
        //Result := FindText(x, y, 'Choose a character', UpCharsEx, 170, 10, 340, 30);
        Wait(1200+Random(300));
        Result := True;
      end;
    then on the first MouseBox Put this:
    Simba Code:
    MouseBox(480, 230, 485, 290, 1);
    Mat
    OMG thank you!!!

  13. #888
    Join Date
    Jan 2012
    Location
    New Zealand
    Posts
    331
    Mentioned
    4 Post(s)
    Quoted
    94 Post(s)

    Exclamation

    Simba Code:
    {/////////////////////////////////////////
                      //       ~ZMI-Extreme by Flight~      //
                      //                                               //
                      //            Version: 1.5                   //
                      /////////////////////////////////////////}


    program ZMIExtreme;
      {$DEFINE SMART}

      {$i SRL/srl.simba}
      {$i SPS/sps.simba}
      {$i SRL/SRL/misc/reports.simba}
      {$i SRL/SRL/misc/paintsmart.simba}

    Const

    //SRL Stats
      SRLStats_Username = '';
      SRLStats_Password = '';

    //General settings
      HPLevel      = 99;          //Your (max) Constitution/Hitpoints level
      Food         = 'monkfish';  //Trout, Tuna, Lobster, Swordfish, Monkfish, Shark
      EatAt        = 80;          //Eat at this health percent or less
      UsePrayer    = False;        //Use ranged protection prayers?
      RuneType     = 'fire';      //Type of rune to use for bank payment (20 runes per session)
      RestAt       = 55;          //Run energy % to rest at (after banking)
      SwitchWorlds = True;        //Switch worlds after a break?

    //Pouch settings
      SS            = 0;           //Which slot # has your small pouch (0 for not using)
      MS            = 0;           //Which slot # has your medium pouch (0 for not using)
      LS            = 0;           //Which slot # has your large pouch (0 for not using)
      GS            = 0;           //Which slot # has your giant pouch (0 for not using)
      RepairMethod  = 'Contact';     //Spell or Contact

    //Break settings
      BreakIn      = 143;          //How long before we take a break? (minutes)
      BreakFor     = 1;           //How long will we break for? (minutes)
      Bir          = 1;           //Random minutes to add/subtract from how long until we break
      Bfr          = 1;            //Random minutes to add/subjtract from break duration

    Var
      MPoint: TPoint;
      Version: String;
      Exp,Exp_C,ReportTime,Runs,
      CommitTime,FoodC,RepairC,
      XPToLvl: Integer;
      PP1,PP2,OptionsSet: Boolean;
      Path_ToAltar,Path_ToAltar2: TPointArray;
      LCols,ACols: TIntegerArray;

    //Break variables
      w,x,y,z,RealBTime,CurrentBTime,
      BreakRounds,TotalBreaks: Integer;


      Procedure DeclarePlayers;
      begin
        HowManyPlayers := 1;
        NumberOfPlayers(HowManyPlayers);
        CurrentPlayer := 0;
        with Players[0] do
        begin
          Name        := ' ';
          Pass        := '';
          Pin         := '';
          Level[SKILL_HITPOINTS] := HPLevel;
          BoxRewards  := ['XP','xp','lamp'];
          LampSkill   := Skill_Runecrafting;
          Active      := True;
        end;
      end;

      Procedure LoadVars;
      begin

        Version := '1.5';

        w := (BreakIn * 60000);
        x := (BreakFor * 60000);
        y := RandomRange(-Bir * 60000, Bir * 60000);
        z := RandomRange(-Bfr * 60000, Bfr * 60000);

        Path_ToAltar := [Point(160, 545), Point(160, 600), Point(165, 655), Point(175, 715),
                        Point(235, 710), Point(285, 720), Point(330, 720)];

        Path_ToAltar2 := [Point(160, 545), Point(160, 585), Point(160, 635), Point(165, 685),
                        Point(190, 725), Point(235, 715), Point(285, 720), Point(330, 720)];

        LCols := [789517, 921102, 1052689];   //Ladder colors
        ACols := [7500141, 8092534, 8355706]; //Altar colors

        Case Lowercase(RuneType) of
          'fire': MPoint := Point(340, 125);
          'body': MPoint := Point(105, 170);
          'mind': MPoint := Point(200, 80);
          'air': MPoint := Point(300, 200);
        end;

        PP1 := (not (LS = 0));
        PP2 := (not (GS = 0));

      end;

      Procedure Report;
      begin
        ClearDebug;

        SRLProgressReport(ResultDebugBox, 'ZMI-Extreme', 'Flight', '1.5',
          ['Run time', 'Exp gained', 'Loads completed', Capitalize(Food)+' ate',
          'Pouches repaired', 'Breaks'],
        [MsToTime(GetTimeRunning, Time_Abbrev), Exp, Runs, FoodC, RepairC, TotalBreaks]);

        MarkTime(ReportTime);
      end;

      Procedure Commit;
      begin
        stats_IncVariable('Runecrafting EXP (Gained)', Exp_C);
        Stats_Commit;
        Exp_C := 0;
        MarkTime(CommitTime);
      end;

      Procedure Shutdown(Reason: String);
      begin
        ClearDebug;
        Writeln('');
        WriteLn('{{{==Script shutdown==}}}');
        Writeln('----Reason: '+Reason+'----');
        Writeln('');
        Wait(RandomRange(1000,1300));
        CloseBank;
        Report;
        Logout;
        TerminateScript;
      end;

      Procedure DrawLogo;
      var
        Pic: Integer;
        Canvas: TCanvas;
      begin
        SmartSetDebug(True);
        Pic := BitmapFromString(367, 40, 'meJztXQebVFW2rZPuubHJICA5Z' +
            'xUUxDHQgIqKYGAUUQaZEZCHaQTUUXTAAQQBETEgosIASg7vD75V6/' +
            'QtbndXVd+6VdCtr/fXw8dg9amT9t5rx1MqNUZSzgrDo1F01Pff87y' +
            'XjHna856z9nUpx5dKXqkkGhwvP2FkXSpZIUZgFi0dOZBySivGsRiq' +
            'VBrQiqH6qRnyhRh9O69iPzVE4K9xSs2XcroQdwkxVMqJkBtx/Ftb2' +
            '//m+YmiE563Vqn7KGFKlAOKfzZMnMn9vr8tio4JMVKpe6Sc1KJlCr' +
            'I/vuLuUqmtyaHC8AsOGAnRL096i7D/nrWvav1QvzDpAyS1bgfk8Lz' +
            'Vnvei563z/S3WbvS8NVo/AKYTYiB+lJpn7bog2BtFP9cRKUlyIwz3' +
            'RNG3QfAvKcdQKM2hVMlJytq/heG+OP4lSa5jQDCsMautXduq1UbR2' +
            'SS5VCrFlCr5J9aVjHmSIvQIJDA2p6/eZEnxHnKxJsfngbUSIRLsE0' +
            'R6qhf6Lgkx3Np/JMmFIPikmdPsp5aQEG1SjgUIwaFYux4mTGrIrA+' +
            'CD8LwYBR9h58g2GXMMxAOABtR9BN+gmA3ZA4kDPi9qmDx/bc5/lCl' +
            'FuaDKAKgCJyeJFcrg4ThbqVmW7upBQsVw41ZlSQXMWwcX8eUhJhee' +
            'DisHeMEwQ7K4b+22hBrCQVB8JGTyUlyGQda4xQwc0+p6SkzCqXm4A' +
            'fblX4AUii6Q1NuhKScEcenubrr1r7RL0x6l6BSw/BIHismSc77/pt' +
            'aPwr7FHdPylFaL7V2q5RTfP+9qr8CbAPthj8hi4BtckxH+P7WOP6p' +
            's/V0WKlZvr8jn2KtPXQZXM0x5vHKyEIMghlVWPkCemEQorUPyKd9i' +
            'qQQo+P418w2ngmCPdZu8LyX6eRRziWFA4W4hlonFn1Rysmd9xnyNj' +
            'EGB70Bcr7XVlOFYiGGABbyZt6M45Owi3t7Sv/PSRjzFCAHrorWj+A' +
            'iCTEMPwAqUs4EnMAP/h0MCM0LrtH6fnxGyvFSjoYwUepeY5ZBRQfB' +
            'p1kskcKSbRgHWpvH/TuOPsd8jOetxd3oJpRWYZJSTiu+TjFEiBFCD' +
            'IBl7cbE5KWcCJSSb2JVKI5PxPEprDEMvyMy6ROEXYrjs9k9DIL3jW' +
            'mH1qDFOpzGS+h5L0DCp5z4X60XZNS6wce0XhbHP2ZUyfXcGuG2E8S' +
            'a1n/BD6wbgsyzWE4x71w/9RIpmt4hzepbBOEThvu6CBNYTOAypWYG' +
            'wU6qxeO0j3okX+uF1YTJGoAfa/+n0LQlEBT4SKkHoJQrYwKlcGLfc' +
            'UWNDyrHU2BuMeYJTFjr5YXm1koCRDRmOWR+xkL8gu4voCbrJD/OxZ' +
            'muzvZxPh+6j7qQojx5NAi2R9EJ8CydEp9X++SdJ9/zXofogLailLu' +
            'ERRU7xH7qawRVGEXf4nLSZXoFN5Bu20nQgMY8w+O+AuXoYig9kV/x' +
            'u3YWTRshTADaC0wPTAQVhrsXBB9VBoQuA1CBEPD9zQXGZPjgH+Ayr' +
            'BSQCQNq/WChcVpLkbWblZoRRV+nmMTZhhD+FoI0in5IYcbVOD4dhv' +
            'txQDRaq5JgvLWN3hK/7+h9peZiIdAOuFf09n8hxMjenlQ/tYQU2Bz' +
            'sj2sJHMIrpylPYDRNBLvF8UXcbaXuyTEUbq/Cr1Rz5G7ht1xufHra' +
            '814B7+P6Ob9rymWfab04ik4zbNH4oPoR8KPvbwcYgI1A90se3HUHy' +
            'AOXQXRTYlyg11rQPIQ8iXEiSk3HnIUYRNneBz3GPRD2GYsKw2MQ40' +
            'BcgCXGPN1X42j91BhBQbuoDT0tkyBPfH+r7+8Ar4XhISBqYFEKmVw' +
            'kxJAkqZLWAg2LYaGGGkezg2GP+P7OrOlEE/t5azf4/rsF7qEQA31/' +
            'F8MH63GTaSkca3SQ20ZhEHxs7Rtc5kmuzvT98G5+AsiM45+hnkoMC' +
            'kfRyUzIqZ/+wOT8IRQmW6EywKHkrJ9gj1j7nlKzeZPzRuuEGJwkv2' +
            'c8fjfj+IYTArDrwbkEAI0BWtgydNNd6Ww0bZByAqyeQuGJAUKMdX4' +
            '/rA5WEt0veaXlHSCl5vv+JrdSCHuAqCajYH2JfOBMGGgwXYUYADBs' +
            'zEu9PaV+apaEGBfHp1IPXtl1gH8Dz8bxJShEY55sXBvKincUkIZfM' +
            'Rhc4OQA4IrnPUfXxOLGBpVjYNFkJYkxy2EIeN4LnreqwRk6UlJOTV' +
            'nVcLZHCo1zu4iWVzkiLOUohtrfqe0V+YORUnOdP02pOVgmY8HumvW' +
            'bOX9Q8qDZu8RuGNJ9CZgzir7Xur3A4Uo5HfDVsQCUjuethEiBQeG8' +
            'phAmwDlR9A3zYPN7AsuZvRV3LuYMeCxEmzHPav1UozNMKUiS8wRjb' +
            '2L83LAkZGB6IixBV2cEaASR63mvYUXGLGGVU8WCE814M5gOepWSJK' +
            'SoP9x3fKe5qTqaDcOD7hyVmkb/zyL8KeWM1GE14M9k0P3pScrJUPT' +
            'ZaEuS3AiCPWCxKPrO2k043GIjB8H+OL7ovGop4DkOYeJ5q2n+n6Aw' +
            'OcqU2jxRoTJBKEXRjxVvSRB87ILaGLOosh6GX3TLB7bBZKLoh7qSU' +
            'wgxyvM2YtPC8MsoOs0Y6zX8MNlvLOHcpSg6BjvRmJVSzmQBwgAKli' +
            'LFPrDpwnA/Zebgto7Shn1/BGQiCURLaWln1epRG8dn01t3HohL60X' +
            'YXibrQp5Hvv8RDqW/SOoPQVJOA0eAEVz8Io7P0Zf+RKk0kEyqC+vT' +
            'INiFYZkoezxjj6zEjbJ2S5pqsgqKCT+lUs74i6COvpEJCb2t1CzKq' +
            'FHF5lkqI+1p6XyAnfYRKVVddTkBFeDKScVSKVYKCnQgLayOZWItDL' +
            'wKlkW3AUsAnyh1j+c9Q2/26PS/5p/bDByKtX8j+mp3Stz3iyXn3Dm' +
            'izTKeAaYSwG2SXGSC3FEgNxYCu8B0YszjkLpMEiiH9mDm4AiC4H0m' +
            'mUTObx+GBwBxe3tB/dQjaTBOklzGD47MmBWetzbVJs1QuawYmIT2w' +
            'ozOiWqvlZjr6KAFbhFEAVQ8YG2OYSWV/i1JEsenPO9FjOb727ok3e' +
            'Um2CZTwa2c28u4wGG415jHaolQJsacZbLcjDS96jcINPAIg7NDsZ+' +
            'QNk4m48+KD8olm8XxmSD41NpXGdsd3aMfG0tz3iHwGjaKSz7vec/3' +
            'cVgCDQXTD3A0DL/FDjjUB20Vhl/F8UmsyPc3Y9OwIbCglZoL5cXih' +
            'Y3GLDPmOZqNd7NKYpm1f8d687no/3gx8T8RAXXElaAt8LmrI27R4I' +
            'Y5lpfAEBluOuAMYSgs971R9JVSU6F3jFna04DQ5glsrqxoYpzUsND' +
            'v+aL+OmXtG3F8DYAEUhSCAjitVmMEQouJuOHOFwrcBeuDsHxIiuJ8' +
            'Icay1QN28i5YN5BUrFlYix/oXFd1AuiOOUMu0RNVR54IpeZhD9s6M' +
            'lqhqS9BFjW4wIDmVaObo8ibkusqEGefCNu2Sz4AzZYAOwN8kk0PwA' +
            'ZSnV0Jgu2sIdLdvrHH0KFiNXRLWtnkpHKxdmHz/89HQowAI7vAShj' +
            'uAZszLe0vzQ8Mxa31YnAcEzIPAEswk/a072+tVLBWAtAA7U4gZNwm' +
            'MnOdnLoBW023dl1aAna94jPB7wICKdVYPKhCkGOYIdsyLIKuxLC43' +
            'rUkKhOAx2q9jAHus64bQ7UPavZCGQY8r9T91m4Lw28AV8ApsKfwg+' +
            'Xg62AQQWvX96PijCp8R2k/mt4DT+sHYelAKOFPgEmob4imMDwehkd' +
            '9/10mgB11gfgg2Asupktzav6APi3HY9hYLjBqJAztviLCl0bRYRwZ' +
            'LFlrX2fgfhIQCEZ2ITxODwb1MmASHCiTmgo4RrB7Q7ReggUCWObOo' +
            'ixOtHP/EwS7GQGcrPXC/qJmehGTIPgwTdJYz4qbT8ACTY8cGrMatz' +
            '29zLuAZjEyc7wr4qLcyyiOL1U8b7x+06DWiZDLAp/1iW28YAHUHMQ' +
            'IuA/zhMSTcoLz2rngSxieyO1y6UrGLPf9t/AVYfg5oc4Z3PbaHxfM' +
            'ki2b/7hRdT/ZhXz8Ir4CW0Fj51zq8Kmf9i+48O8ruM7zXoCUBv4He' +
            '1bydrLaP4qOgyshG/EDqegK+fGNSs2GXYZfzBkDgjrAbOnpPUicZr' +
            't7yCHocFI0QET6L2NYeDiGI4xj9egEgjTI1UFADgCBmB62ouI8x63' +
            'DbtAFlNcD35li2KT0m92HwdnVqv44Cec2pWgsDFqvDQfhULHDWncW' +
            'Ed0BajiJGuebTdWAdHWdG4t6HrI0OAg+wjh0t66CMsJ9o67vot0Uz' +
            'qVzPtu1zibMTw4AOO4D3wkxSusF0D6wIFyDBdgOvv8O3cXFKADHGf' +
            'Mk9GYc/0K3yUs9aS4FGQKOpmnTqEqCwJxtzFMwfNj2YVH9LyKnrMz' +
            'uSY8/bJp0r2tcw9qHsQSKExm5huR8JmdrOxpo05zEpntcMBXw1t2g' +
            'M+d9z3uFAspj+fZ4/N3z1oXh3lKHYLmXosYwhqUpUR8y5jnmu55iw' +
            'fgk4ChGpopJEixtHJtuHaL8fA4ol0G9qpQY084YpcCHG89sNFo/DF' +
            'kt5UjIrlR0f0U3e34fo2TosNhiO0aAeiWMbxIO3QqsKDUXYBtMhMt' +
            'PDT5C6waStaQcX9F3YFgcOh16QUvcemA0Yj8DvcZcsgk1PojrNxLX' +
            'CZAjjm9V7tCTv9FFRiBPougEts6luhEtv06FONWFVKjp3ilaEWZxk' +
            '+P4Z0BxVz4Qxz/m+0XR9FHK+sIfe4gpwUDoIitwWLQZrzlbD+qAnU' +
            'xW4vPMacHFHp5+8grdvFnyqENzQTilHqA/uS2KvnG+Ux7W6ErKB63' +
            'CXQ7wGPMsa7jmGfN4kvxGu7VU19+SYM6QA0GwHftfw1TMQ2DwJUHw' +
            'b5hLsPgwDvQOpFnmAxpYl20NIMSW4T8pNb9Uji6dyJ3erIjVJUagY' +
            '6fMLJ73fBQdZTJn2c2eE8xrvYIFbo/Rf55T9XfaPUhseq2/hkplmK' +
            'xwrfcAIsYB2BPf3wJ8mPFq7k9bQOciXJIwPFn59W5XrknSwP/QjLh' +
            'dcXwBZ13no0pN5yXEhZyOFbFUZwuAPVHxYKg5ZsaWYSRdLuet3cEN' +
            'NPg8QCZ4igb4C8WsYCoywPjD0DiYMO4J+8f2BdJBsLOL/eJ60rJk+' +
            'wVrt8A003opbpQxKyAS6d/4OYr+S/H7le+/RxOsGYknlHqQboGJkO' +
            '3s8XKadqiLv8PwXApFBmkD4c+GDxYWqLNbIU/q4ltAuwW0FwbH8e/' +
            'sylgwCgN0Aejrct6i6ExasuS+OvS8l4PgAG6gtX/H/jDNL3IQlOXJ' +
            '43sa3gNkZdZ3XMHwRFPjIDaVascgzHESnEkPlUSMk67GoWBz2NW23' +
            'rJcSxD2qJnU+RCHMHY5yrE8matR7e8kvKd1O91Z2KIPgmB3EPwLej' +
            'kIPm/ryFTPyVASSC8jiPa2NmkZAp86cT0gRByf6cndLajg/kkfyyJ' +
            'sNeQGOzhNwHZhdYBewOrsoLiO7QcdATPHPNmPIFqlzO+4uEUQoWF4' +
            'jIZYO8sYd4B/C4xzOwiXLY5vWXxs9zTG82DQbWMAeiwVhyTjhLQfE' +
            '/4L2HMQLcphrbBVSzRtJtCrORNfmiTnwbY4BWg0Zn2Uo1c8qcO42K' +
            '400mEngJkartRYqYXUMmB8RcDzO0u9CpOFlq80F2Wi4LdKPRJFPyf' +
            'JBdgj1EfzuTmRU+UUwotzpPoMtPYtunMDyh/ArWuQmcAV5PSyvwUw' +
            'jGYjduYysFmdsYSYDBGk9aP0lj9X56shPXAPAXjApNh27vyMzDhDr' +
            'd3s8sEAjcAUYDSuJScl7J11Iop+hVAC9GUPNM/dFsgoqPK2cqFczh' +
            'JLA9hQuajUIK3tiiOj6BdIb9x/V1GeQ1JJ+uHXMuXg5zA8wXc3/qr' +
            '1kwSiliyT9ZVBY85l16aLjAg/VYhxRBjiLF501is9jdfYn7lPELsN' +
            'fAqudE3yoUSACrBFMO4YWL+jGSYQVsYAAg1zTuO0zUg5ehtFX7N/1' +
            'BJwaMYDfIYtQKucO1CE58Eoe4kgEObtUex8I7xQhXBJsp2KAV+xV6' +
            '76GBsJEQf2p6xbSkyVU29aNp4qd9AFJgHkg84FvMkYp4o7M5S53Gt' +
            'yONJD6ESm2fw7/RfZGXJY9jkcI0QCWYfr7VxVkLQMMXQQzBwXJnCG' +
            'J+5JFB2y9rU8S8JsfR/w41VjlvD/JpSuIl3wOhbOHAFf5AOKgTErK' +
            'w5P4GFnP7aQXJczAAxIbCgs1n7mPL686IgI8156SoH23yuWZQ2ADd' +
            'wL6ybrlOhLrVDbcPnBcThiLJbZLN/0atWbovV6oIvlRU/FNtg+lfJ' +
            't5s9U918xveS0q8hmdAkW7rNYYNMgSrO/3DXKsSM4UzYxBsqdofVy' +
            'Ke9r/C0VixnCfmFl5ak4vgx9TZ3bff9VJSHZ5XXXGNCwLnUflDhAj' +
            'vsKOhVhKi5kL3d33OUuZL7/Pvaz0oPU9zfRknLKtGz+QPO6WFJbOV' +
            'VgEiaZr0xewhaGjmaD0/kA/BnAA5t6O8taQ5gD1N31hYkV4m5MGLr' +
            'Y999m1uiq1j1Yc4vYhvFt6qxTsMJ6dDMWIDY1LZH3k8I+bcYoNzNz' +
            'e00qWs/1mRpVjWPSeikby8+jlX2hwULI20EC1mi2DpR3eLDnrXR9w' +
            'lmzWU83USpecLVFYBBwkNb3t6KRXQA2ASfyYkgCid+C4AMaIz3yRR' +
            'fCDicEvTfZ7XweL1iSRiHdnyJ7T9yGwMypm+0fwRgkxnB1WyX2s5r' +
            'Etw9ec01T2W3sQpqzN4h7ddMFI+j3nu48Zta+zWKltzPOUnw+Ij6v' +
            'SeB95o3fxGExU+sHY1a4FUEjs+X4enraf6DMHFR7JMMeXNPZlauc2' +
            'kEr7HaFxaWcBbkKKxsXLH07qbUOmftdfwAIw2beZpJyJlQAdKUL4r' +
            'R19EHqE+1B2KgEfz4K3eoqjoNgL4+sN2UddD2b2t0qBTXmMTBI6vw' +
            '8wVtdj/BhukoiZyuxX/cerrFJiqm/PCemnNOGzNWo7C0/mAINmEVf' +
            'zJLardQCwuA3ff9Dsr/vjE1cIfdh399e1w0yns69FRRNmt80muWfE' +
            'xloGEpHyvps/3P26ul4WyoMv8SVgJEFCQzoAtwVxyczM7zKlOxaws' +
            'SQ9ye7vHHmDU7hF3XUXdLSCVkh8jthz7TaCxHMXh5KLdDOpKkDbOt' +
            '6tZFsq/xULnJxDXzYI7rlvAlB+qyryKOUXl/Ye4DNh5bE5mTuzI6+' +
            'gEyYKnaIkXqJG8UiwSnU+L2ZY8mWU5/SyS/p743o6vyBYcFDfJyxZ' +
            'wsR95C2QEge2c3f/byZhwnSYUfz20WGvy4WcH9pvdh1/e0SiA/DY/' +
            'h3SCocB51sku6CFcAMrqSip2iUNmaZS9iGRWDta8zlm83deALiiE7' +
            'dpzqPoKPoXFamgeVT/HxDCAiT00lyvpKUBbwBa6vb9yo650e6ZlOu' +
            'IgOgKwy/hsDU+uk4vs4E9Z+YygvOHcP35updsyD40L3T57xnzFK4y' +
            'j25LYyDVUOYJMkN6qmCL03UHvwumDYu8xN6jcm6I4oN5XkbXBzHub' +
            'MgWPqI99WZXXwCYBLTz6bxGb6hvSfooK8net4rzFC12DG+i1GOFkX' +
            'RcSa3TOTLR7mm55Ki2zqa/y9jeXWTvRktzdUJbP55M40lfc1XPxoi' +
            'AZ7qIknSiDxERzmKCtZjKHw4H6c7CJSFy8OC0HprZ+rLwWw2JjAGH' +
            'cIrXFCGLdmzIwgp52QnAIWS9m+/wUo0zf4MC5yT1jkPu8WavVJpIB' +
            '+lequLmwviCPOXcnRqocCUnkq1VR8iSsb9L2fFLGQjPe23qbhSuFw' +
            'yNogumNxec2gxEEsGVOb+fwipCwkAo7tQDdqYINgTRUfYHvBpJ7Fb' +
            'FEttkhRPv/yQDZ85G89Z9UolrOeUlNar+aCepVO9Pb1FlyhDNmHfW' +
            'IDzXU7fNbg+bRqzBvZCXZ0uGWjr4XCZpDQfwjYIPkjndsaYxxsFcp' +
            'h/FH2fiqMLrP74mFmytwxh1oCfdnWgnvfX9HR6INfiOMvRLCMd5dK' +
            'tIaAYue60cIjH1PQ+zrkNd24ZlowNSSc8ELvnEjsZoe5SJOthet1f' +
            'lmkrtzR82PlviSt+8/13+MhvfYTv0W2+MyNJyrUkrai7qUMx1E1bR' +
            'yF/yynkK+ejnOuPmuJ0sReysJ9E6R0nBa3BoqHeJ9rsn7gGC5B17v' +
            '2ppo9MuYRhQp2caY0+hYNv7Zs0pTuCdLxFV6CPAJUh1V2GCcxwaF5' +
            'WYfRMYAG3OugF39+uVK1qgnL6PbCiEONrDwYzcBn/AuTwBIx35/hi' +
            'MWMB/TI8beZzitGTEp2N9zrDh0bK+Sj6CRiMutjLKeG1bq+8QpKBO' +
            'tJ5UHHxGPbt4ttJYAM6H3WaxHKN5ZArOvsNDMtmtzjHLORe5+Xc5b' +
            'oZszJ0KJsc3sUEv2XugTau9CJFUI/yUACPab2Ur0jc5A8kyd7CL9z' +
            'lI0EJ+VhbOTQ89zbkQiQuq5kG4w18ketF3/g4lu/93eSVng+9E4Zf' +
            'tRxHFSOy54GMCjtEazFnIlC2bF+yHvw+z/sbvaaXwnC/K2bMM5ArT' +
            'MbecodXsS/NWfbGPM7ajXFpdwLInCEQ7JgkXaB5Tty6nVdqBtMquj' +
            'O+YNqnC3lIrr0622q9EEvjgwJb3QOFYPw8q6ux5GEuLsOFKKYh7al' +
            'odkqYHZxtY88MsQi9U7lZEHzmmoLi3xly6r5pMgj2MyVgOmbF95v2' +
            's/qpC1kH8CDxCJYOZzeKTU1vQsJj2g7hZLuTEZC8m3MJuEUARfTb4' +
            'Kw/gEyjz7yZ2qI8ZLVeAHlCk6Hlr7BBvQ7CumAOx/E54G2YjVF0sk' +
            'B0m3kpxnWgtXYbJszQf++7XktlYTIx+4iwA6V1laBLjU6ofSYzjjy' +
            'HTQ8WgOvdhWFPlcn8wMScy6QKg0X/K/SmSwsE7MdGdWnLwB6tA4Gg' +
            'cLuYpZDH3w5O2Uv2PEnf8qjOYlyyjmZBOo2hdO5VHTaAfmS5lnDdl' +
            'pjJ2cwhDkkdGusgyqCFjXmWfSNnsRwp5jQaG5+tLb7sAkswPiXMJc' +
            'r26nJJiJGpJFkYht8RC3UffAzDQwPdK72sxLzF4M7H4gq1+J9cAvA' +
            'IVoC2d5dgrnql2gIHVN4rh1rhXRpLpmtmq63L55dyHu/kgGo2KWDh' +
            'NNadrWVcu7WkmGyzOI7PE7xNgTRmRmLDROg4FWySJBfZ2nowQyd9h' +
            'Nq62LkMf0Q1PqzYLhKHCy0/i7VsD0PkWruR75hvYzTzdXpgTlq7JQ' +
            '0I9kgD2M1pDbAfC4EH1oZGIWu3v2THpx97DA13TLrsYzlKdXmUzxT' +
            'OTPMHjJTTXHJmiY3aoFjpFa8yZzYcKJfpUdfvrL1F+UnE8RXHMoBM' +
            'NJ/zeF3qtZzS+sHs83AVG4dNlV+tbyixs9CiOL7GJMDqhQnl/8W/s' +
            'qzyBr24WYPFY9RmJwsHBta1ZcrTYA7/jm4YQBOd/tfdSfyFWWQ7qL' +
            'CGE74OrrFLvosicZKBa4cF8cieGO9H0WGocq0fogk2iEON6O6Hd09' +
            'aAFoTprY2lCmYmbPUrQubk9Y2NjwOoBp2mJtzLo2S9J1ef+Vkv+zd' +
            'ow8QSGMh+Ma58QkzRqXX2FKnjGTNyyKabPsyEcOXtX5EqftTMSLyQ' +
            'fSQtsz4PL4a1qovhPrgQ/Yv5hh8GGuvpuFGpZD7ahDsJnie50IwTO' +
            '76p+9vdvHxqjN0zfooSf7TouMrQ98o+iZNA1N1+gkzFrPENa0luKp' +
            'OdM3dyJ5mGGK2Jfa4qD/nNhcXiOMbnle95McFi1M2P9WtoZl2mfnM' +
            'hTvLBh3dj15RLAxyYpns3GlWQoxja+iuT/p2+WGg+S9svTWdrpV3s' +
            'UzARXbm3AqtzVetD8fxmaq/jiWw1GtCF5vX8zbwdc5FnFjLDQfFZm' +
            'KbnGOh6NuRGORNaFJqxm+p0erk+/UC4Sa7NLD0+h1kGGtxl8dVAey' +
            't3aT1E8wbv9faV1gmczktP7F8HVVSqlcysXsU7+UHRIDqCYdyeQaA' +
            'TJR6gAw4hR6AHk9E0FsylZWV7zucybP4HuYPzhfSCYfL1tk1o+FOU' +
            '1Mp32jdq39tUt4NKUczZBOLx1X3CRizmpla+Orf+azzOUaOqhNThr' +
            '7IcM1VAC3WIPd4EK7++lc+jVQVVHisPTzLwvkLLEnogs0UJkbLdyr' +
            'b8O639p3UE9VBuCEs0/iK1Trt7B7fRcRZ5wru/gNwxbqqg2H4OUxC' +
            'Co338PdKu2PMKgh2uf5InMDnziGMP9kQ+ELny3yaavSI6z2eOZHRv' +
            'Crd/UXNkwnDY1AEzCPaU7RRrWbl5jY2SVjeR1wlWSLkG+QiC91/eB' +
            '8CNmreWGmvCuFPFTPUtSSls32/Ug83/tUFmopotkjaS3H3TT63ieI' +
            'NmU0bDfbUsxDvLFUL0ma5G+q7d5S6B/c/CD5u9OG2uiRZW/GS64YB' +
            'JgqC/VhXEHxIcDgIYpYdtP7BtoHlPL0w/DfTgWoWxZOXZ/I53YOs8' +
            'F1LeJkLR7nedD1G39iReFRVyc8m7Z+wjdIQrR9gGdR67K1ScwFlIR' +
            'U97zX2qXAl27LahmtI/mw0ihVV82izzKCDbh4wCVsrrKFd3O58s2k' +
            'facW/DHd/p72j2M31AT7tF2A/XQocg79eHP/CNwtufXupbM9ugurP' +
            's2ONkHBtSDFnMEuOZmi1qNxDA+qbGrwvdncXYiwdqiOz8gR3O03G9' +
            'pxeYBl7xIqwxeVOPyluYU/mz6hYG94fugQLEITANFxaNt7MGXgS1E' +
            'E+71i5mxwRzhxMgPkb03viOOEs8VbrAgCzhWxQsAR4Dxai4zjIbSK' +
            'lisdJ0cZUBEj1e7bMZp65JY8Ufy+mMOFusGP5Y+TfhfhhLwuIuFku' +
            'Rb/+rxvzDH7XlV8RgFnculpqrjNuOYrvhaR1iIX9UnYxc+9C5kr/h' +
            'w4xn9pzsFLztV7eWXiWd9v14rsNezMEMJiP+5xooiW4YPMT52gK+5' +
            'K35BZRdwwj1t3ApNOneRDXmft0ma99XUlP5JDv72RPiXPYFpxaE4X' +
            'Pomi3OqX1Q2G4D0ZxM+8a0HCe1usvbUk5hl3+vqYhgz2/3pf88w0T' +
            '+JSVfYe5nJvQ/sCBzNzIk6Kp+JjLhzBSsq68OL4WBLutfQs/+Eu28' +
            'Q5ETS1pg4/hP+HzkNV5mk4w130zZtv8JtRY21y6gj9pzlKWRCZj+/' +
            'CLk5q1GyMYQ8QduAGoiYMDTjbmec97lc1elmI36CZNWHs1nKigV+p' +
            '3BNgN4o75V7c7/eBOEOOGD/n+O9a+UVTA9inCPXdd2Rurlfs/VkgA' +
            'rw==');

        Canvas := TCANVAS.Create;
        Canvas.Handle := SmartGetDebugDC;
        DrawBitmap(Pic, Canvas, 90, 15);
        FreeBitmap(Pic);
      end;

      Procedure OnScreen;
      Var
        XPH,RPH,TTB: Integer;
      begin
        if (Exp < 1) then
          Exp := 1;

        XPH := Round((Exp * 3600) / (GetTimeRunning / 1000));
        RPH := Round((Runs * 3600) / (GetTimeRunning / 1000));
        TTB := (((w) + (y) + BreakRounds)-GetTimeRunning);

        SMART_DrawTextMulti(True, True, ['Version '+Version+' (by Flight)',
          ''+MsToTime(GetTimeRunning, Time_Abbrev),
          'Runecrafting XP: '+IntToStr(Exp)+' ('+IntToStr(XPH)+' / hour)',
          'XP to next lvl: '+IntToStr(XPToLvl-Exp),
          'Load done: '+IntToStr(Runs)+' ('+IntToStr(RPH)+' / hour)'],
          Point(15, 255), SmallCharsNS, 16777215);

        SMART_DrawTextMulti(False, True, ['Time till break: '+MsToTime(TTB,Time_Bare)], Point(575, 445), SmallCharsNS, 65280);

        DrawLogo;
      end;

      Function IsMoving_F: Boolean;
      begin
        Result := PixelShift(IntToBox(MMCX-30, MMCY-30, MMCX+30, MMCY+30), 200) > 200;
      end;

      Function RunesMenu: Boolean;
      var
        X,Y: Integer;
      begin
        Result := FindText(x, y, 'light', UpCharsEx, 145, 275, 360, 315);
      end;

      Function UsingQuickPrayers: Boolean;
      Var
        X,Y: Integer;
      begin
        Result := FindColorTolerance(X, Y, 9154193, 710, 75, 730, 85, 20);
      end;

      Procedure HumanMMouse(eX, eY, ranX, ranY: Integer);
      var
        randSpeed: extended;
        X,Y,X2,Y2,A,Dist,MP: integer;
      begin
        A := MouseSpeed;
        GetMousePos(X, Y);
        Dist := Distance(X, Y, eX, eY);
        MP := Round(Dist/150);
        if MP < 0 then
          MP := 1;

        randSpeed := (random(MouseSpeed) / 2.0 + MouseSpeed) / 10.0;
        X2 := RandomRange(eX-(A*MP), eX+(A*MP));
        Y2 := RandomRange(eY-(A*MP), eY+(A*MP));
        WindMouse(X, Y, X2, Y2, 11, 8, 10.0 / randSpeed, 12.0 / randSpeed, 10.0 * randSpeed, 10.0 * randSpeed);
        GetMousePos(X, Y);
        MMouse(eX, eY, ranX, ranY);
        MouseSpeed := A;
      end;

      Procedure ActivateQuickPrayer;
      begin
        if UsingQuickPrayers then Exit;

        HumanMMouse(723, 70, 10, 10);
        ClickMouse2(True);
      end;

      Function LowPrayer: Boolean;
      begin
        Result := FindColorTolerance(X, Y, 255, 740, 70, 760, 80, 10)
      end;

      Function GetClosestMMDot(WhatDot: String): TPoint;
      var
        TPA: TPointArray;
      begin
        TPA := GetMiniMapDots(WhatDot);
        if (Length(TPA) < 1) then
          Exit;

        SortTPAFrom(TPA, Point(MMCX, MMCY));
        Result := TPA[0];
      end;

      Function FoundSymbol(Ident: Integer; var X, Y, Dist: Integer): Boolean;
      var
        B: TBox;
        TPA: TPointArray;
        L,i,CTS: Integer;
        ATPA,ATPA2: T2DPointArray;
      begin
        CTS := GetColorToleranceSpeed;
        ColorToleranceSpeed(2);

        if ((Ident = 1) or (Ident = 2) or (Ident = 5) or (Ident = 6)) then
          FindColorsTolerance(TPA, 12632256, MMX1, MMY1, MMCX+10, MMY2, 10)
        else
        FindColorsTolerance(TPA, 12632256, MMX1, MMY1, MMX2, MMY2, 10);

        if Length(TPA) < 1 then
        begin
          ColorToleranceSpeed(CTS);
          Exit;
        end;

        ATPA := TPAtoATPAEx(TPA, 10, 10);
        L := High(ATPA);
        SetArrayLength(ATPA2, L+1);
        for i := 0 to L do
        begin
          B := GetTPABounds(ATPA[i]);
          with B do
          begin
            if (Ident = 1) then
              FindColorsTolerance(ATPA2[i], 16382969, B.X1, B.Y1, B.X2, B.Y2, 5)  //Altar (white)
            else if (Ident = 2) then
              FindColorsTolerance(ATPA2[i], 1244922, B.X1, B.Y1, B.X2, B.Y2, 5)    //Altar (yellow)
            else if (Ident = 3) then
              FindColorsTolerance(ATPA2[i], 2413294, B.X1, B.Y1, B.X2, B.Y2, 5)   //Bank
            else if (Ident = 4) then
              FindColorsTolerance(ATPA2[i], 2370858, B.X1, B.Y1, B.X2, B.Y2, 5)   //Hunter
            else if (Ident = 5) then
              FindColorsTolerance(ATPA2[i], 1787389, B.X1, B.Y1, B.X2, B.Y2, 5)   //Big arrow
            else if (Ident = 6) then
              FindColorsTolerance(ATPA2[i], 2763504, B.X1, B.Y1, B.X2, B.Y2, 5);  //Dungeon
            Result := (Length(ATPA2[i]) > 0);
            if Result then
            begin
              ColorToleranceSpeed(CTS);
              MiddleTPAEx(ATPA2[i], X, Y);
              Dist := Distance(MMCX, MMCY, X, Y);
              Exit;
            end;
          end;
        end;
      end;

      Function NearSymbol(Which: Integer): Boolean;
      var
        X,Y,D: Integer;
      begin
        Result := FoundSymbol(Which, X, Y, D);
      end;

      Function AboveGround: Boolean;
      var
        X,Y,D: Integer;
      begin
        Result := FoundSymbol(4, X, Y, D);
      end;

      Function NearLadder: Boolean;
      var
        X,Y,D: Integer;
      begin
        Result := False;

        if FoundSymbol(6, X, Y, D) then
        begin
          Result := (D < 15);
          Exit;
        end;

        if FoundSymbol(1, X, Y, D) then
          Result := (D < 15);

      end;

      Function FindObjEx_F(ColorA, ColorB, Tol, Bounds, sX, sY: Integer; UpText: TStringArray; Var X, Y: Integer; Debug: Boolean): Boolean;
      var
        B: TBox;
        TPA: TPointArray;
        L,i,CTS: Integer;
        ATPA,ATPA2: T2DPointArray;
      begin
        CTS := GetColorToleranceSpeed;
        ColorToleranceSpeed(2);
        FindColorsSpiralTolerance(sX, sY, TPA, ColorA, MSX1, MSY1, MSX2, MSY2, Tol)

        if Length(TPA) < 1 then
        begin
          ColorToleranceSpeed(CTS);
          Exit;
        end;

        ATPA := TPAtoATPAEx(TPA, Bounds, Bounds);
        L := High(ATPA);
        SetArrayLength(ATPA2, L+1);

        for i := 0 to L do
        begin
          B := GetTPABounds(ATPA[i]);
          with B do
          begin
            FindColorsSpiralTolerance(sX, sY, ATPA2[i], ColorB, B.X1-Bounds, B.Y1-Bounds, B.X2+Bounds, B.Y2+Bounds, Tol)
            if Length(ATPA2[i]) > 0 then
            begin
              MiddleTPAEx(ATPA2[i], X, Y);
              HumanMMouse(X, Y, 5, 5);
              if WaitUpTextMulti(UpText, 800) then
              begin
                Result := True;
                ColorToleranceSpeed(CTS);

                if DeBug then
                  SMART_DrawBox(IntToBox(X-Bounds, Y-Bounds, X+Bounds, Y+Bounds));

                GetMousePos(X, Y);
                Exit;
              end;
            end;
          end;
        end;
      end;

      Procedure ReturnValues(colors: TIntegerArray; var HueMods, SatMods: Extended; var color, Tolerance: Integer);
      Var
        h, s, t: Extended;
        I,II : integer;
        HSLColor : Array[1..3] of Extended;
        HSL : Array[0..1] of Array[1..3] of Extended;
      begin;
        For I:= 1 to 3 do
        begin;
          HSL[0][i] := 255;
        end;

        For I:= 0 to High(Colors) do
        begin;
          ColortoHSL(Colors[i],HSLColor[1],HSLColor[2],HSLColor[3]);
          For II:= 1 to 3 do
          begin;
            HSL[0][II] := MinE(HSLColor[II],HSL[0][II]);
            HSL[1][II] := MaxE(HSLColor[II],HSL[1][II]);
          end;
        end;

        H := (HSL[1][1] - HSL[0][1]);
        S := (HSL[1][2] - HSL[0][2]);
        T := (HSL[1][3] - HSL[0][3]);

        try
          HueMods := (H/T);
          SatMods := (S/T);
          Tolerance := Round(t);
        except
          HueMods := 0;
          SatMods := 0;
          Tolerance := Round(0.0);
        end;

        Color := HSLToColor((HSL[1][1] + HSL[0][1]) div 2,(HSL[1][2] + HSL[0][2]) div 2,(HSL[1][3] + HSL[0][3]) div 2);
      end;

      Procedure SetPrayers;
      var
        X,Y,X2,Y2,T,T2: Integer;
        PPoint: TPoint;
      label
        MoveM;
      begin
      {Right-click prayer icon}
        HumanMMouse(724, 70, 8, 8);
        ClickMouse2(False);
        WaitOption('elect', 400);

      {Wait for the quick-prayer selection menu}
        MarkTime(T);
        repeat
          if TimeFromMark(T) > 5000 then
            Exit;
          if FindColorTolerance(X, Y, 8499692, 610, 445, 630, 465, 10) then
            break;
        until(false);

      {Determine the player's prayer type & choose the right protection prayer}
        if (FindText(X, Y, 'urses', StatChars, 630, 200, 690, 230) or FindText(x, y, 'rayers', StatChars, 630, 200, 690, 230)) then
        begin
          if FindText(X, Y, 'urses', StatChars, 630, 200, 690, 230) then
            PPoint := Point(671, 274)
          else if FindText(X, Y, 'rayers', StatChars, 630, 200, 690, 230) then
            PPoint := Point(670, 343);

      {Check if prayers are already set}
          if not FindColorTolerance(X2, Y2, 461806, PPoint.X-10, PPoint.Y-10, PPoint.X+10, PPoint.Y+10, 10) then
          begin
            MoveM:
            if not LoggedIn then Exit;

            HumanMMouse(671, 274, 4, 4);

            if WaitUpText('elect', 400) then
            begin
              ClickMouse2(True);
              Wait(RandomRange(175, 350));
            end else
              goto MoveM;
          end else
            Writeln('Prayers already selected');

      {Hit confirm}
          HumanMMouse(645, 456, 15, 5);
          ClickMouse2(True);
        end;

      {Wait for the prayer selection to be confirmed}
        MarkTime(T2);
        repeat
          if TimeFromMark(T2) > 5000 then
            Exit;
          if (not FindText(x, y, 'urses', StatChars, 630, 200, 690, 230) and (not FindText(x, y, 'rayers', StatChars, 630, 200, 690, 230))) then
            break;
        until(false);

        OptionsSet := True;
        Gametab(Tab_Inv);

        Writeln('Quick-prayers set');

      end;

      Function TeleportOut: Boolean;
      var
        X,Y,I,DTM: Integer;
        Angle: Extended;
      label
        Start;
      begin
        Result := False;
        ColorToleranceSpeed(1);

        DTM := DTMFromString('mWAAAAHicY2FgYNjGxMCwBYj3MkHYjIwMDH+A4v+AmAPItra2YjDUPclw8ZAnGPMDxZExExoGAQBaKgrC');

        Start:
        if not LoggedIn then Exit;
        Gametab(tab_Magic);
        Wait(RandomRange(375, 550));

        if FindDTMRotated(DTM, X, Y, MIX1, MIY1, MIX2, MIY2, (-Pi/4), (Pi/4), (Pi/60), Angle) then
        begin
          I := 0;
          HumanMMouse(X, Y, 7, 7);
          ClickMouse2(True);
          Gametab(tab_Inv);
          HumanMMouse(580, 115, 15, 15);

          if not WaitFunc(@AboveGround, 100, 6000) then
            Exit;

        end else
        begin
          Inc(I);
          if (I > 3) then
            Shutdown('Failed to find spell DTM')
          else
          begin
            Writeln('Failed to find spell '+IntToStr(I)+' time');
            FindNormalRandoms;
            Gametab(tab_Magic);
            Wait(RandomRange(125, 275));
            goto Start;
          end;
        end;

        Result := NearSymbol(4);
        SetRun(True);

        FreeDTM(DTM);
      end;

      Function FindLadder(Var X, Y: Integer): Boolean;
      var
        B: TBox;
        Loop: Boolean;
        TPA: TPointArray;
        L,i,CTS: Integer;
        ATPA,ATPA2: T2DPointArray;
        label
          Start;
      begin
        Result := False;
        Loop := False;

        Start:
        FindNormalRandoms;
        CTS := GetColorToleranceSpeed;
        ColorToleranceSpeed(2);
        FindColorsSpiralTolerance(130, 170, TPA, 3029573, MSX1, MSY1, MSCX, MSY2, 15)

        if Length(TPA) < 1 then
        begin
          ColorToleranceSpeed(CTS);
          Exit;
        end;

        ATPA := TPAtoATPAEx(TPA, 20, 20);
        L := High(ATPA);
        SetArrayLength(ATPA2, L+1);

        for i := 0 to L do
        begin
          B := GetTPABounds(ATPA[i]);
          with B do
          begin
            FindColorsSpiralTolerance(130, 170, ATPA2[i], 921102, B.X1, B.Y1, B.X2, B.Y2, 15)
            if Length(ATPA2[i]) > 0 then
            begin
              ColorToleranceSpeed(CTS);
              MiddleTPAEx(ATPA2[i], X, Y);
              HumanMMouse(X, Y, 5, 5);
              Result := True;
              Exit;
            end;
          end;
        end;
        ColorToleranceSpeed(CTS);
        if Loop then
          goto Start;

      end;

      Function FindChaosAltar(Var X, Y: Integer): Boolean;
      var
        B: TBox;
        TPA: TPointArray;
        L,i,CTS: Integer;
        ATPA,ATPA2: T2DPointArray;
      begin
        Result := False;

        CTS := GetColorToleranceSpeed;
        ColorToleranceSpeed(2);
        FindColorsSpiralTolerance(MSCX, MSCY, TPA, 3685505, MSX1, MSY1, MSX2, MSY2, 20)

        if Length(TPA) < 1 then
        begin
          ColorToleranceSpeed(CTS);
          Exit;
        end;

        ATPA := TPAtoATPAEx(TPA, 30, 30);
        L := High(ATPA);
        SetArrayLength(ATPA2, L+1);

        for i := 0 to L do
        begin

          B := GetTPABounds(ATPA[i]);
          with B do
          begin
            FindColorsSpiralTolerance(MSCX, MSCY, ATPA2[i], 11908541, B.X1, B.Y1, B.X2, B.Y2, 20)
            if Length(ATPA2[i]) > 0 then
            begin
              ColorToleranceSpeed(CTS);
              MiddleTPAEx(ATPA2[i], X, Y);
              HumanMMouse(X, Y, 5, 5);
              Result := True;
              Exit;
            end;
          end;

        end;
      end;

      Function WalkToLadder: Boolean;
      var
        X,Y,Dist: Integer;
      label
        Start;
      begin
        Result := False;

        Start:
        if not LoggedIn then Exit;
        FindNormalRandoms;

        if FoundSymbol(6, X, Y, Dist) then   //Dungeon
        begin

          HumanMMouse(X, Y, 2, 2);
          ClickMouse2(True);
          Wait(RandomRange(755, 910));
          HumanMMouse(255, 210, 30, 30);
          if FlagPresent then
            FFlag(1)
          else
            While IsMoving_F do
              Wait(1);

          if NearLadder then
          begin
            Result := True;
            Exit;
          end else
            goto Start;

        end else if FoundSymbol(1, X, Y, Dist) then  //Altar
        begin

          HumanMMouse(X, Y, 2, 2);
          ClickMouse2(True);
          Wait(RandomRange(755, 910));
          HumanMMouse(255, 210, 30, 30);
          if FlagPresent then
            FFlag(1)
          else
            While IsMoving_F do
              Wait(1);

          if NearLadder then
          begin
            Result := True;
            Exit;
          end else
            goto Start;

        end else if ((not NearSymbol(6)) and (not NearSymbol(1))) then
        begin
          Writeln('Failed to find symbols, static walking');
          Mouse(580, 120, 4, 4, True);
          Wait(RandomRange(255, 360));
          if FlagPresent then
            FFlag(0)
          else
            While IsMoving_F do
              Wait(1);
          goto Start;
        end;

      end;

      Function HandleAltar: Boolean;
      var
        A,B: Boolean;
        X,Y,T,I: Integer;
      label
        Start;
      begin
        Result := False;

        if not LowPrayer then
        begin
          Result := True;
          Exit;
        end;

        A := False;
        B := False;

        if FlagPresent then
          FFlag(1)
        else
          While IsMoving_F do
            Wait(1);

        Start:
        MarkTime(T);
        repeat
          if not LoggedIn then Exit;
          FindNormalRandoms;

          if FindChaosAltar(X, Y) then
          begin

            if WaitUpTextMulti(['ay-at', 'aos alt'], 400) then
            begin

              ClickMouse2(True);

              if DidRedClick then
              begin
                if FlagPresent then
                  FFlag(1)
                else
                  While IsMoving_F do
                    Wait(1);

                B := True;
                break;
              end;

            end else
            begin

              ClickMouse2(False);
              if WaitOption('ray-at', 500) then
              begin
                if FlagPresent then
                  FFlag(1)
                else
                  While IsMoving_F do
                    Wait(1);

                B := True;
                break;
              end;

            end;
          end;

          if (TimeFromMark(T) > 7000) then
          begin
            A := True;
            break;
          end;

        until(false)

        if A then
        begin
          Inc(I);

          Mouse(MMCX, MMCY+10, 2, 2, mouse_left);
          FFlag(0);
          While IsMoving_F do
            Wait(1);

          if (I > 3) then
          begin
            if not FindChaosAltar(X, Y) then
            begin
              if TeleportOut then
              begin
                Wait(RandomRange(2100, 2600));
                I := 0;
                Exit;
              end;
            end;
          end;

          Wait((RandomRange(600, 775)));
          goto Start;

        end;

        if B then
        begin
          While IsMoving_F do
            Wait(1);

          ActivateQuickPrayer;

          Result := True;
          Exit;
        end;

      end;

      Function HandleLadder: Boolean;
      var
        A,B,C: Boolean;
        X,Y,T,T2,I: Integer;
      label
        Start;
      begin
        Result := False;
        A := False;
        B := False;
        C := False;

        if FlagPresent then
          FFlag(1)
        else
          While IsMoving_F do
            Wait(1);

        Start:
        MarkTime(T);
        repeat
          FindNormalRandoms;

          if FindLadder(X, Y) then
          begin

            if WaitUpTextMulti(['limb', 'mb L', 'adder'], 400) then
            begin

              ClickMouse2(True);

              if DidRedClick then
              begin
                if FlagPresent then
                  FFlag(1)
                else
                  While IsMoving_F do
                    Wait(1);
                B := True;
                break;
              end else
              begin
                C := True;
                break;
              end;

            end else
            begin

              ClickMouse2(False);
              if WaitOptionMulti(['limb', 'b L'], 500) then
              begin
                if FlagPresent then
                  FFlag(1)
                else
                  While IsMoving_F do
                    Wait(1);
                B := True;
                break;
              end else
              begin
                C := True;
                break;
              end;

            end;
          end;

          if (TimeFromMark(T) > 7000) then
          begin
            A := True;
            break;
          end;

        until(false)

        if A then
        begin
          if NearSymbol(3) then
          begin
            Result := True;
            Exit;
          end;

          Inc(I);

          Mouse(MMCX, MMCY+10, 2, 2, mouse_left);
          FFlag(0);
          While IsMoving_F do
            Wait(1);

          if (I > 3) then
          begin
            if not FindLadder(X, Y) then
            begin
              if TeleportOut then
              begin
                Wait(RandomRange(2100, 2600));
                I := 0;
                Exit;
              end;
            end;
          end;

          Wait((RandomRange(600, 775)));
          goto Start;

        end;

        if B then
        begin

          MarkTime(T2);
          repeat
            FindNormalRandoms;
            if (TimeFromMark(T2) > 5000) then
              Exit;
            if NearSymbol(3) then
              break;
          until(false)

          Result := NearSymbol(3);
        end;

        if C then
          goto Start;

      end;

      Function BankToAltar: Boolean;
      begin
        Result := False;

      //No more walking east!
        if not InvFull then Exit;
        if NearSymbol(4) then Exit;

        SetRun(True);

        case RandomRange(1, 2) of
          1: SPS_WalkPath(Path_ToAltar);
          2: SPS_WalkPath(Path_ToAltar2);
        end;

        if FlagPresent then
          FFlag(1)
        else
          While IsMoving_F do
            Wait(1);

        Result := True;

      end;

      Function FindBanker(Var X,Y: Integer): Boolean;
      var
        TPA,PBox: TPointArray;
        HMod,SMod: Extended;
        L,i,CTS,MSP,Col,
        CType,Tol: Integer;
        ATPA: T2DPointArray;
      label
        Start;
      begin
        Result := False;
        if not LoggedIn then Exit;

        PBox := TPAFromBox(IntToBox(240, 130, 275, 185));

        CTS := GetColorToleranceSpeed;

        Start:
        if BankScreen then
        begin
          Result := True;
          Exit;
        end;

        if (CType = 2) then
        begin
          Col := 6453887;
          Tol := 7;
          HMod := 0.10;
          SMod := 0.11;
        end else if (CType = 3) then
        begin
          Col := 5273721;
          Tol := 6;
          HMod := 0.07;
          SMod := 0.11;
        end;

        if (CType = 0) then
        begin
          ColorToleranceSpeed(3);
          FindColorsSpiralTolerance(MSCX, MSCY, TPA, 6848905, MSX1, MSY1, 510, 330, 4);
          ColorToleranceSpeed(CTS);
        end else if (CType = 1) then
        begin
          ColorToleranceSpeed(3);
          FindColorsSpiralTolerance(MSCX, MSCY, TPA, 5800071, MSX1, MSY1, 510, 330, 4);
          ColorToleranceSpeed(CTS);
        end else if ((CType = 2) or (CType = 3)) then
        begin
          ColorToleranceSpeed(2);
          SetColorSpeed2Modifiers(Hmod, SMod);
          FindColorsSpiralTolerance(MSCX, MSCY, TPA, Col, MSX1, MSY1, MSX2, MSY2, Tol);
          ColorToleranceSpeed(CTS);
        end;

        TPA := ClearTPAFromTPA(TPA, PBox);

        if (Length(TPA) < 1) then
        begin
          Inc(CType);
          if (CType > 3) then
            Exit;
          goto Start;
        end;

        ATPA := TPAToATPAEx(TPA, 40, 40);
        SortATPAFrom(ATPA, Point(MSCX,MSCY));
        L := High(ATPA);
        SetArrayLength(ATPA, L+1);

        for i := 0 to L do
        begin

          MiddleTPAEx(ATPA[i], X, Y);
          MSP := MouseSpeed;
          MouseSpeed := (RandomRange(26, 33));
          HumanMMouse(X, Y, 15, 15);
          MouseSpeed := MSP;

          if WaitUpTextMulti(['niola'], 400) then
          begin
            Result := True;
            GetMousePos(X, Y);
            Exit;
          end;

        end;

      end;

      Function OpenBankEniola: Boolean;
      var
        X,Y,T,T2,
        BFail: Integer;
        GoOn: Boolean;
      label
        Start;
      begin
        Result := False;
        GoOn := False;

        Start:
        if BankScreen then
        begin
          Result := True;
          Exit;
        end;

        FindNormalRandoms;
        if not LoggedIn then Exit;

        if FindBanker(X, Y) then
        begin
          GoOn := True
        end else
        begin
          Inc(BFail);

          if (BFail = 1) then
            MouseFlag(620, 105, 5, 5, 0);

          While IsMoving_F do
            Wait(1);

          if (BFail > 10) then
          begin
            TeleportOut;
            Exit;
          end;

          goto Start;
        end;

        if GoOn then
        begin
          ClickMouse2(False);
          if not WaitOptionMulti(['ank', 'nk E'], 500) then
            goto Start;

          While IsMoving_F do
            Wait(1);

          MarkTime(T);
          repeat
            FindNormalRandoms;
            if (TimeFromMark(T) > 3000) then
              Exit;
            if RunesMenu then
              break;
          until(false);

          if RunesMenu then
          begin
            HumanMMouse(MPoint.X, MPoint.Y, 7, 7);
            ClickMouse2(True);

            MarkTime(T2);
            repeat
              FindNormalRandoms;
              if (TimeFromMark(T2) > 5000) then
                Exit;
              if (BankScreen) or (PinScreen) then
                break;
              Wait(100);
            until(false)

            if PinScreen then
              if (Players[CurrentPlayer].Pin <> '') then
                InPin(Players[CurrentPlayer].Pin)
              else
                Shutdown('No PIN # given');

            Wait(RandomRange(175, 350));

          end;
        end;

        Result := BankScreen;
      end;

      Procedure Eat;
      var
        DTM,X,Y,X2,
        Y2,T: Integer;
      begin
        if not LoggedIn then Exit;
        if not BankScreen then Exit;

        Case lowercase(Food) of
          'trout'   : DTM := DTMFromString('mlwAAAHicY2dgYCgD4kIgzgbiAiCuAOJaIG4EYhUgVgRiTSDWBWJtqJg8EGfERAJJJqxYDkjiwox4MBQAALdhBks=');
          'tuna'    : DTM := DTMFromString('mlwAAAHicY2dgYFAAYikgFgFiCShfHYh1gFgFiOWBWA2I9YBYFyonC8QpEWFAkgkrFoGahw0z4sFQAABkyQOa');
          'lobster' : DTM := DTMFromString('mbQAAAHicY2VgYOgB4g4g7gPiyUA8FYjPA/F1IL4CxHeA+DQQrw+TAJJMKJiLARMwYsFgAACaUQgl');
          'swordfish' : DTM := DTMFromString('mlwAAAHicY2dgYGhmZGDoBuKJQNwHxJ2MELFyIJZhgGAFIFYCYmUglofSzTFdQJIJK+YCknI4MCMeDAUA/+8G2A==');
          'monkfish': DTM := DTMFromString('mggAAAHicY2NgYJjEyMAwEYgXQPE8IJ4GxB+Bct+A+A0DhP0diH8AsbejJcP8miogiwkFcwFJEEYHjDgwBAAAZ90L0w==');
          'shark'   : DTM := DTMFromString('mggAAAHicY2NgYLBjZGAwB2JHIHYHYg8g1gfiEqBcAxBXA3EzEJcCcQsQd+RHAUkmDMzFgB0w4sAQAAAltwXX');
        end;

        if FindDTM(DTM, X, Y, MSX1, MSY1, MSX2, MSY2) then
        begin
          HumanMMouse(X, Y, 5, 5);
          ClickMouse2(False);
          WaitOption('Withdraw-5', 300);

          MarkTime(T);
          repeat
            FindNormalRandoms;
            if (TimeFromMark(T) > 5000) then
              Exit;
            if (HPPercent >= 90) then
              break;
            if FindDTM(DTM, X2, Y2, MIX1, MIY1, MIX2, MIY2) then
            begin
              HumanMMouse(X2, Y2, 5, 5);
              ClickMouse2(False);
              if WaitOption('Eat', 300) then
              begin
                Wait(RandomRange(705, 815));
                MarkTime(T);
                Inc(FoodC);
              end;
            end;
          until(false)

        end;

        if FindDTM(DTM, X, Y, MIX1, MIY1, MIX2, MIY2) then
        begin
          HumanMMouse(X, Y, 5, 5);
          ClickMouse2(False);
          WaitOption('Deposit-All', 300);
          Wait(RandomRange(425, 675));
        end;

        FreeDTM(DTM);
      end;

      Function WithdrawEss: Boolean;
      var
        X,Y,Ess,ItemFail: Integer;
      label
        Start;
      begin
        Start:
        if not BankScreen then
          Exit;

        ColorToleranceSpeed(1);
        FixBank;

        Ess := BitmapFromString(9, 11, 'meJx1zNEKgCAQRNGfDBMRERHbysq' +
            'I/r+BIQmWYN7O3RXZRLZlObBaz32/sNZurJQVkzeAMgDlPGM6gMaY' +
            'U5owBt/nISQog64MvI9Ufetc+FPQV/tnkLVeK8kYp5U/h2GkMoDyJ' +
            '+gB5qx01w==');

        if BankScreen then
        begin
          if FindBitmapToleranceIn(Ess, X, Y, 35, 85, 480, 295, 20) then
          begin
            HumanMMouse(X, Y, 5, 5);
            ClickMouse2(False);
            Result := WaitOptionMulti(['Withdraw-All', 'w-A'], 300)
          end else
          begin
            if (ItemFail > 3) then
              Shutdown('Out of essence');

            Inc(ItemFail);
            if (ItemFail = 0) then
              Writeln('Failed finding essence '+IntToStr(ItemFail)+' time')
            else if (ItemFail > 0) then
              Writeln('Failed finding essence '+IntToStr(ItemFail)+' times');
            Wait(RandomRange(1750, 2205));
            goto Start;
          end;
        end;

        FreeBitmap(Ess);
      end;

      Function DepositEss: Boolean;
      var
        T,Slot: Integer;
      begin
        if not BankScreen then exit;

        Slot := RandomRange(9, 20);
        MouseItem(Slot, mouse_right);
        Wait(RandomRange(50, 115));
        WaitOption('Deposit-5', 300);

        MarkTime(T);
        repeat
          FindNormalRandoms;
          if (TimeFromMark(T) > 3000) then
            Result := False;
          if not InvFull then
            break;
        until(False)

        Result := (not InvFull);
      end;

      Function WithdrawRunes(Method: String): Boolean;
      var
        ABMP,CBMP,X,Y: Integer;
      begin
        Result := False;
        if not LoggedIn then Exit;

        if InvFull then
        begin
          if not BankScreen then
            OpenBankEniola
          else if BankScreen then
              DepositEss;
          Wait(RandomRange(350, 625));
        end;

        ColorToleranceSpeed(1);

        ABMP := BitmapFromString(7, 7, 'meJy7efPxzZuPCwvLiosrSkurboK5' +
              'EJSfXwIRh4tk5xTk5hUhq8nIyMnKykMWAaK0tCw0EWRDIAhoDtBwN' +
              'HMgggArDGec');
        CBMP := BitmapFromString(7, 5, 'meJyTvXBJFoaKiytKS6sg7Ny8IiDK' +
              'zy8pLCyDiGRk5GRl5WXnFEDEIYJpaVlwcbg5KSkZEHEgggsCAOmnNDQ=');

        if FindBitmapToleranceIn(CBMP, X, Y, MSX1, MSY1, MSX2, MSY2, 20) then
        begin
          HumanMMouse(X, Y, 5, 5);
          Wait(RandomRange(25, 75));
          ClickMouse2(True);
          Wait(RandomRange(350, 675));
        end;

        if (Lowercase(Method) = 'contact') then
        begin
          if FindBitmapToleranceIn(ABMP, X, Y, MSX1, MSY1, MSX2, MSY2, 20) then
          begin
            HumanMMouse(X, Y, 5, 5);
            Wait(RandomRange(25, 75));
            ClickMouse2(True);
            Wait(RandomRange(275, 475));
            ClickMouse2(True);
            Wait(RandomRange(275, 475));
          end;
        end;

        CloseBank;

        Result := True;
        FreeBitmap(ABMP);
        FreeBitmap(CBMP);

      end;

      Function HandlePouches(Method, Seq: Integer): Boolean;
      begin
        Result := False;

        if (Method = 1) then
        begin
          //Small pouch
          if not (SS = 0) then
          begin
            MouseItem(SS, mouse_right);
            Wait(RandomRange(20, 75));
            if (Seq = 1) then
              WaitOptionMulti(['ill', 'Fill'], 400)
            else
              WaitOptionMulti(['mpty', 'Empty'], 400);
          end;

          //Medium pouch
          if not (MS = 0) then
          begin
            MouseItem(MS, mouse_right);
            Wait(RandomRange(20, 75));
            if (Seq = 1) then
              WaitOptionMulti(['ill', 'Fill'], 400)
            else
              WaitOptionMulti(['mpty', 'Empty'], 400);
          end;

          //Large pouch
          if not (LS = 0) then
          begin
            MouseItem(LS, mouse_right);
            Wait(RandomRange(20, 75));
            if (Seq = 1) then
              WaitOptionMulti(['ill', 'Fill'], 400)
            else
              WaitOptionMulti(['mpty', 'Empty'], 400);
          end;

          //Giant pouch
          if not (GS = 0) then
          begin
            MouseItem(GS, mouse_right);
            Wait(RandomRange(20, 75));
            if (Seq = 1) then
              WaitOptionMulti(['ill', 'Fill'], 400)
            else
              WaitOptionMulti(['mpty', 'Empty'], 400);
          end;

        end else if (Method = 2) then
        begin

          //Giant pouch
          if not (GS = 0) then
          begin
            MouseItem(GS, mouse_right);
            Wait(RandomRange(20, 75));
            if (Seq = 1) then
              WaitOptionMulti(['ill', 'Fill'], 400)
            else
              WaitOptionMulti(['mpty', 'Empty'], 400);
          end;

        end else if (Method = 3) then
        begin
          //Small pouch
          if not (SS = 0) then
          begin
            MouseItem(SS, mouse_right);
            Wait(RandomRange(20, 75));
            if (Seq = 1) then
              WaitOptionMulti(['ill', 'Fill'], 400)
            else
              WaitOptionMulti(['mpty', 'Empty'], 400);
          end;

          //Medium pouch
          if not (MS = 0) then
          begin
            MouseItem(MS, mouse_right);
            Wait(RandomRange(20, 75));
            if (Seq = 1) then
              WaitOptionMulti(['ill', 'Fill'], 400)
            else
              WaitOptionMulti(['mpty', 'Empty'], 400);
          end;

          //Large pouch
          if not (LS = 0) then
          begin
            MouseItem(LS, mouse_right);
            Wait(RandomRange(20, 75));
            if (Seq = 1) then
              WaitOptionMulti(['ill', 'Fill'], 400)
            else
              WaitOptionMulti(['mpty', 'Empty'], 400);
          end;

        end else if (Method = 4) then
        begin
          //Large pouch
          if not (LS = 0) then
          begin
            MouseItem(LS, mouse_right);
            Wait(RandomRange(20, 75));
            if (Seq = 1) then
              WaitOptionMulti(['ill', 'Fill'], 400)
            else
              WaitOptionMulti(['mpty', 'Empty'], 400);
          end;
        end else if (Method = 5) then
        begin
          //Small pouch
          if not (SS = 0) then
          begin
            MouseItem(SS, mouse_right);
            Wait(RandomRange(20, 75));
            if (Seq = 1) then
              WaitOptionMulti(['ill', 'Fill'], 400)
            else
              WaitOptionMulti(['mpty', 'Empty'], 400);
          end;

          //Medium pouch
          if not (MS = 0) then
          begin
            MouseItem(MS, mouse_right);
            Wait(RandomRange(20, 75));
            if (Seq = 1) then
              WaitOptionMulti(['ill', 'Fill'], 400)
            else
              WaitOptionMulti(['mpty', 'Empty'], 400);
          end;
        end;

        Result := True;
      end;

      Function FindDecayedPouch(Var Slot: Integer): Boolean;
      var
        B: TBox;
        TPA: TPointArray;
        Hmod,Smod: Extended;
        L,i,Tol,CTS,Col,X,Y: Integer;
        ATPA: T2DPointArray;
      begin
        Result := False;

        CTS := GetColorToleranceSpeed;
        ColorToleranceSpeed(2);
        ReturnValues([3422525, 3619647, 3751234], Hmod, Smod, Col, Tol);
        SetColorSpeed2Modifiers(Hmod, SMod);
        FindColorsSpiralTolerance(MSCX, MSCY, TPA, Col, MIX1, MIY1, MIX2, MIY2, Tol);
        ColorToleranceSpeed(CTS);

        if (Length(TPA) < 1) then
          Exit;
        ATPA := TPAToATPAEx(TPA, 18, 18);
        SortATPAFrom(ATPA, Point(650, 330));
        L := High(ATPA);
        SetArrayLength(ATPA, L+1);
        for i := 0 to L do
        begin
          B := GetTPABounds(ATPA[i]);
          if (GetArrayLength(ATPA[i])>10) then
          begin
            MiddleTPAEx(ATPA[i], X, Y);
            Slot := CoordsToItem(X, Y);
            Result := True;
          end;
        end;

      end;

      Function CheckPouches: Boolean;
      var
        S: Integer;
      begin
        Result := FindDecayedPouch(S);
      end;

    Function ContactScreen: Boolean;
      var
        X, Y: Integer;
      begin
        //Result := FindText(x, y, 'Choose a character', UpCharsEx, 170, 10, 340, 30);
        Wait(1200+Random(300));
        Result := True;
      end;

      Function ContactRepair: Boolean;
      var
        T,T2,T3: Integer;
      begin

        MarkTime(T);
        repeat
          FindNormalRandoms;
          if (TimeFromMark(T) > 4000) then
            Exit;
          if ContactScreen then
            break;
        until(false)

        if ContactScreen then
        begin
          MouseBox(480, 230, 485, 290, 1);
          Wait(RandomRange(275, 480));
          MouseBox(380, 80, 435, 160, 1);
        end;

        MarkTime(T2);
        repeat
          FindNormalRandoms;
          if (TimeFromMark(T2) > 6000) then
            Exit;
          if ClickToContinue then
            MarkTime(T2);
          Wait(RandomRange(125, 275));
          if FindNPCChatText('epai', ClickLeft) then
            break;
        until(false)

        MarkTime(T3);
        repeat
          FindNormalRandoms;
          if (TimeFromMark(T3) > 2000) then
            Exit;
          if ClickToContinue then
            MarkTime(T3);
          Wait(RandomRange(125, 275));
        until(false)

        Result := True;

      end;

      Function RepairPouches(Method: String): Boolean;
      var
        X,Y,Slot,Spell: Integer;
      label
        Start;
      begin
        ColorToleranceSpeed(1);

        Start:
        FindNormalRandoms;
        if not LoggedIn then Exit;

        Case Lowercase(Method) of
          'spell':
            Spell := BitmapFromString(6, 6, 'meJybsPnUqr2nmQVNHMtXAMni7mUT' +
                    'Np8CIiAbLgjh6vgXQRgQQSC3Yf46IEIWhIgADQEiZDMjihc6JbYBA' +
                    'DJlKvQ=');

          'contact':
            Spell := BitmapFromString(7, 5, 'meJx79fr1K3LRr6cHMUU+HarHFGFk' +
                    'YAAA0ZFcCA==');
        end;

        if FindDecayedPouch(Slot) then
        begin
          Writeln('Decayed pouch detected in slot '+IntToStr(Slot));
          GameTab(tab_Magic);
          Wait(Random(100));
          if FindBitmapIn(Spell, X, Y, 550, 200, 720, 435) then
          begin
            MMouse(X, Y, 5, 5);
            Wait(Random(100));
            if (Lowercase(Method) = 'spell') then
            begin
              if WaitUpText('epair',RandomRange(250,350)) then
              begin
                ClickMouse2(True);
                Wait(RandomRange(20, 75));
                MouseItem(Slot, mouse_left);
                Wait(RandomRange(1575, 2150));
                Inc(RepairC);
                Writeln('Pouch repaied');
              end;
            end else if (Lowercase(Method) = 'contact') then
            begin
              if WaitUpText('Contact',RandomRange(250,350)) then
              begin
                ClickMouse2(True);
                if ContactRepair then
                begin
                  Inc(RepairC);
                  Writeln('Pouches repaied');
                end;
              end;
            end;
          end;
        end;

        if not FindDecayedPouch(Slot) then
          Result := True
        else
          goto Start;

        FreeBitmap(Spell);
      end;

      Procedure HandleBank;
      var
        S: String;
        T: Integer;
      begin

        if BankScreen then
        begin

          Mouse(370, 305, 6, 6, True);

          if (HPPercent <= EatAt) then
            Eat;

          WithdrawEss;

          if PP2 then
          begin
            if HandlePouches(2, 1) then
              WithdrawEss;
            if HandlePouches(3, 1) then
              WithdrawEss;
          end else
          begin
            if HandlePouches(3, 1) then
              WithdrawEss;
          end;
        end;

        MarkTime(T);
        repeat
          FindNormalRandoms;
          if (TimeFromMark(T) > 5000) then
            Exit;
          if InvFull then
            break;
        until(false)

        if InvFull then
        begin
          Wait(RandomRange(375, 550));

          if CheckPouches then
            if WithdrawRunes(Lowercase(RepairMethod)) then
              if RepairPouches(Lowercase(RepairMethod)) then
                if OpenBankEniola then
                  if WithdrawEss then
                    if CloseBank then
                      Exit;

          if (GetMMLevels('run',S) <= RestAt) then
            RestUntil(RandomRange(90, 100));

        end;

      end;

      Function FindAltar(Var X,Y: Integer): Boolean;
      var
        B: TBox;
        Loop: Boolean;
        TPA: TPointArray;
        Hmod,Smod: Extended;
        L,i,Tol,CTS,Col,F,MSP: Integer;
        ATPA: T2DPointArray;
      label
        Start;
      begin
        Result := False;
        Loop := False;
        CTS := GetColorToleranceSpeed;

        Start:
        ColorToleranceSpeed(2);
        ReturnValues(ACols, Hmod, Smod, Col, Tol);
        SetColorSpeed2Modifiers(Hmod, SMod);
        FindColorsSpiralTolerance(MSCX, MSCY, TPA, Col, MSX1, MSY1, MSX2, MSY2, 10);
        ColorToleranceSpeed(CTS);

        if (Length(TPA) < 1) then
          Exit;

        ATPA := TPAToATPAEx(TPA, 20, 20);
        SortATPAFrom(ATPA, Point(MSCX,MSCY));
        L := High(ATPA);
        SetArrayLength(ATPA, L+1);

        for i := 0 to L do
        begin
          if (GetArrayLength(ATPA[i]) > 30) then
          begin
            B := GetTPABounds(ATPA[i]);

            MiddleTPAEx(ATPA[i], X, Y);
            MSP := MouseSpeed;
            MouseSpeed := (RandomRange(26, 33));
            HumanMMouse(X, Y, 15, 15);
            MouseSpeed := MSP;
            if WaitUpTextMulti(['-rune', 'unec', 'rafting'], 555) then
            begin
              Result := True;
              GetMousePos(X, Y);
              Exit;
            end else
            begin
              Inc(F);
              if (F > 7) then
                Exit;
              Loop := True;
              Break;
            end;

          end;
        end;
        if Loop then
          goto Start;

      end;

      Function CraftRunes: Boolean;
      var
        X,Y,Seq: Integer;
        A,B: LongInt;
      label
        Start;
      begin
        Seq := 0;
        A := Round(GetXPBarTotal);

        Start:
        if not LoggedIn then Exit;

        if FindAltar(X, Y) then
        begin
          ClickMouse2(True);
          if not DidRedClick then
            goto Start;
          While IsMoving_F do
            Wait(1);

          if (Seq < 3) then
          begin
            HumanMMouse(640, 220, 15, 15);
            Wait(RandomRange(675, 1125));
            While IsMoving_F do
              Wait(1);
            Wait(RandomRange(105, 165));
          end else
          begin
            GameTab(tab_Magic);
            Wait(RandomRange(675, 930));
          end;

        end else
        begin
          SetRun(True);
          BankToAltar;
          FindNormalRandoms;
          SetRun(True);
          goto Start;
        end;

        if (Seq = 0) then
        begin
          if PP1 then  //Large pouch
          begin
            if HandlePouches(4, 2) then
              Seq := 1;
          end else if not PP1 then
            if HandlePouches(5, 2) then
              Seq := 3;

          goto Start;
        end;

        if (Seq = 1) then
        begin
          if PP2 then  //Giant pouch
          begin
            if HandlePouches(2, 2) then
              Seq := 2;

            goto Start;
          end else if not PP2 then
            if HandlePouches(5, 2) then
              Seq := 3;

          goto Start;

        end;

        if (Seq = 2) then
        begin
          if HandlePouches(5, 2) then
            Seq := 3;

          goto Start;
        end;

        if (Seq = 3) then
          Result := True;

        if Result then
        begin
          B := Round(GetXPBarTotal);
          Inc(Runs);
          IncEx(Exp, (B-A));
          IncEx(Exp_C, (B-A));
          OnScreen;
        end;
      end;

      Function BreakHandler(BreakIn, BreakFor, randBreakIn, randBreakFor: Integer): Boolean;
      Var
        h,m,s: integer;
      begin
        if not LoggedIn then Exit;

        if (HowManyPlayers = 1) then
        begin
          if (GetTimeRunning < ((w) + (y) + BreakRounds)) then Exit
          else
            if (GetTimeRunning > ((w) + (y) + BreakRounds)) then
            begin
              if NearSymbol(3) then
              begin
                RealBTime := ((x+z)/60000);
                Writeln('Taking a break for about ' + IntToStr(RealBTime) + ' minutes.');
                CloseBank;
                Logout;
                MarkTime(CurrentBTime);
                repeat
                  Wait(21000);
                  ConvertTime((x+z)-TimeFromMark(CurrentBTime), h, m, s);
                  ClearDebug;
                  Writeln('Breaktime left: '+IntToStr(h)+':'+IntToStr(m)+':'+IntToStr(s));
                until(TimeFromMark(CurrentBTime)>(x+z));
                Writeln('Logging in.');
                OnScreen;
                if SwitchWorlds then
                  if LoginPlayerToLob then
                    ChangeWorld(RandomWorld(True, False))
                else
                  LoginPlayer;
                Wait(4000);
                Result := LoggedIn;
                ClickNorth(SRL_ANGLE_HIGH);
                IncEx(BreakRounds, (w) + (x));
                Inc(TotalBreaks);
                Writeln('The next break will occur in about ' + IntToStr(BreakIn) + ' minutes.');
                w := (BreakIn * 60000);
                x := (BreakFor * 60000);
                y := RandomRange(-Bir * 60000, Bir * 60000);
                z := RandomRange(-Bfr * 60000, Bfr * 60000);
              end;
            end;
        end;
      end;

      Procedure SuperDuperLooper;
      begin
        if not LoggedIn then Exit;
        FindNormalRandoms;

        if NearSymbol(3) then                                     //Bank
        begin
          if not InvFull then
            if OpenBankEniola then
              HandleBank
            else
              Exit
          else if InvFull then
            if BankToAltar then
              if CraftRunes then
                TeleportOut
              else
                While IsMoving_F do
                  Wait(1)
            else
              While IsMoving_F do
                Wait(1);
        end else if NearLadder then                               //At the ladder
        begin
          if UsePrayer then
          begin
            if HandleAltar then
              HandleLadder;
          end else
            HandleLadder;
        end else if (NearSymbol(4) and (not NearLadder)) then     //Teleport area
        begin
          WalkToLadder;

          if FlagPresent then
            FFlag(1)
          else
            While IsMoving_F do
            Wait(1);
        end else if ((not NearSymbol(3)) and (not NearSymbol(4))  //We're either at the altar or lost
          and (not NearLadder)) then
          if not CraftRunes then
            TeleportOut;

      end;

    begin
      Smart_Server := 70;
      Smart_Members := True;
      Smart_Signed := True;
      Smart_SuperDetail := False;
      setupSRL();
      DeclarePlayers;

      LoginPlayer;
      ClickNorth(SRL_ANGLE_HIGH);

      SPS_Setup(runecrafting_altars, ['0_1']);
      SPS_Continue := True;

      LoadVars;
      SetupSRLStats(157, SRLStats_Username, SRLStats_Password);
      Smart_ClearCanvas;

      ToggleXPBar(True);
      XPToLvl := XPTillNextLevel(Skill_Runecrafting);

      if UsePrayer then
      begin
        SetPrayers;
        ActivateQuickPrayer;
      end;

      OnScreen;

      Repeat

        if not LoggedIn then
        begin
          LoginPlayer;
          ClickNorth(SRL_ANGLE_HIGH);
        end;

        BreakHandler(BreakIn,BreakFor,Bir,Bfr);

        if (TimeFromMark(CommitTime)>=30000) then
          Commit;

        if (TimeFromMark(ReportTime)>=5000) then
          Report;

        SuperDuperLooper;

      Until(AllPlayersInactive)

    end.

    Script Fully working! supporting "contact spell and repairing pouches like a pro thanks to Mat For the fix!

    All Credits go to its respective owners

  14. #889
    Join Date
    Nov 2011
    Posts
    1,589
    Mentioned
    9 Post(s)
    Quoted
    17 Post(s)

    Default

    <3.



    ^^

  15. #890
    Join Date
    Jan 2012
    Posts
    537
    Mentioned
    1 Post(s)
    Quoted
    16 Post(s)

    Default

    although i didnt need the fix because im using repair spell its good you gave such a quick fix for people who needed

    ps: i know ive said this and flight said he will look onto it but i say again just in case: banking at w70 when its full of people at zmi can sometimes be very difficult because there wont be the right click banking option, only the name of the banker which requires it to go to the name so that the option to bank shows up

    its always better to craft at w70, plenty of people so plenty of targets, which allows us to not need prayer and theres less chance to get reported
    Last edited by wister1; 02-21-2012 at 11:48 PM.

  16. #891
    Join Date
    Nov 2011
    Posts
    1,589
    Mentioned
    9 Post(s)
    Quoted
    17 Post(s)

    Default

    I always crafter other worlds as a Human can find the bank on w70 no problem but as were colour it finds people so I always go a different world.
    Mat



    ^^

  17. #892
    Join Date
    Jan 2012
    Location
    New Zealand
    Posts
    331
    Mentioned
    4 Post(s)
    Quoted
    94 Post(s)

    Default

    Quote Originally Posted by wister1 View Post
    although i didnt need the fix because im using repair spell its good you gave suck a quick fix for people who needed it
    yeah i cant use the repair spell option 137k produce points lol i have like 13k ..

    but yes as long as it works im happy! im sure others will be too using this method, Thank you again matt

  18. #893
    Join Date
    Nov 2011
    Posts
    1,589
    Mentioned
    9 Post(s)
    Quoted
    17 Post(s)

    Default

    No Problem
    Mat



    ^^

  19. #894
    Join Date
    Feb 2012
    Posts
    38
    Mentioned
    0 Post(s)
    Quoted
    0 Post(s)

    Default

    Quote Originally Posted by big man 1 View Post
    Simba Code:
    {/////////////////////////////////////////
                      //       ~ZMI-Extreme by Flight~      //
                      //                                               //
                      //            Version: 1.5                   //
                      /////////////////////////////////////////}


    program ZMIExtreme;
      {$DEFINE SMART}

      {$i SRL/srl.simba}
      {$i SPS/sps.simba}
      {$i SRL/SRL/misc/reports.simba}
      {$i SRL/SRL/misc/paintsmart.simba}

    Const

    //SRL Stats
      SRLStats_Username = '';
      SRLStats_Password = '';

    //General settings
      HPLevel      = 99;          //Your (max) Constitution/Hitpoints level
      Food         = 'monkfish';  //Trout, Tuna, Lobster, Swordfish, Monkfish, Shark
      EatAt        = 80;          //Eat at this health percent or less
      UsePrayer    = False;        //Use ranged protection prayers?
      RuneType     = 'fire';      //Type of rune to use for bank payment (20 runes per session)
      RestAt       = 55;          //Run energy % to rest at (after banking)
      SwitchWorlds = True;        //Switch worlds after a break?

    //Pouch settings
      SS            = 0;           //Which slot # has your small pouch (0 for not using)
      MS            = 0;           //Which slot # has your medium pouch (0 for not using)
      LS            = 0;           //Which slot # has your large pouch (0 for not using)
      GS            = 0;           //Which slot # has your giant pouch (0 for not using)
      RepairMethod  = 'Contact';     //Spell or Contact

    //Break settings
      BreakIn      = 143;          //How long before we take a break? (minutes)
      BreakFor     = 1;           //How long will we break for? (minutes)
      Bir          = 1;           //Random minutes to add/subtract from how long until we break
      Bfr          = 1;            //Random minutes to add/subjtract from break duration

    Var
      MPoint: TPoint;
      Version: String;
      Exp,Exp_C,ReportTime,Runs,
      CommitTime,FoodC,RepairC,
      XPToLvl: Integer;
      PP1,PP2,OptionsSet: Boolean;
      Path_ToAltar,Path_ToAltar2: TPointArray;
      LCols,ACols: TIntegerArray;

    //Break variables
      w,x,y,z,RealBTime,CurrentBTime,
      BreakRounds,TotalBreaks: Integer;


      Procedure DeclarePlayers;
      begin
        HowManyPlayers := 1;
        NumberOfPlayers(HowManyPlayers);
        CurrentPlayer := 0;
        with Players[0] do
        begin
          Name        := ' ';
          Pass        := '';
          Pin         := '';
          Level[SKILL_HITPOINTS] := HPLevel;
          BoxRewards  := ['XP','xp','lamp'];
          LampSkill   := Skill_Runecrafting;
          Active      := True;
        end;
      end;

      Procedure LoadVars;
      begin

        Version := '1.5';

        w := (BreakIn * 60000);
        x := (BreakFor * 60000);
        y := RandomRange(-Bir * 60000, Bir * 60000);
        z := RandomRange(-Bfr * 60000, Bfr * 60000);

        Path_ToAltar := [Point(160, 545), Point(160, 600), Point(165, 655), Point(175, 715),
                        Point(235, 710), Point(285, 720), Point(330, 720)];

        Path_ToAltar2 := [Point(160, 545), Point(160, 585), Point(160, 635), Point(165, 685),
                        Point(190, 725), Point(235, 715), Point(285, 720), Point(330, 720)];

        LCols := [789517, 921102, 1052689];   //Ladder colors
        ACols := [7500141, 8092534, 8355706]; //Altar colors

        Case Lowercase(RuneType) of
          'fire': MPoint := Point(340, 125);
          'body': MPoint := Point(105, 170);
          'mind': MPoint := Point(200, 80);
          'air': MPoint := Point(300, 200);
        end;

        PP1 := (not (LS = 0));
        PP2 := (not (GS = 0));

      end;

      Procedure Report;
      begin
        ClearDebug;

        SRLProgressReport(ResultDebugBox, 'ZMI-Extreme', 'Flight', '1.5',
          ['Run time', 'Exp gained', 'Loads completed', Capitalize(Food)+' ate',
          'Pouches repaired', 'Breaks'],
        [MsToTime(GetTimeRunning, Time_Abbrev), Exp, Runs, FoodC, RepairC, TotalBreaks]);

        MarkTime(ReportTime);
      end;

      Procedure Commit;
      begin
        stats_IncVariable('Runecrafting EXP (Gained)', Exp_C);
        Stats_Commit;
        Exp_C := 0;
        MarkTime(CommitTime);
      end;

      Procedure Shutdown(Reason: String);
      begin
        ClearDebug;
        Writeln('');
        WriteLn('{{{==Script shutdown==}}}');
        Writeln('----Reason: '+Reason+'----');
        Writeln('');
        Wait(RandomRange(1000,1300));
        CloseBank;
        Report;
        Logout;
        TerminateScript;
      end;

      Procedure DrawLogo;
      var
        Pic: Integer;
        Canvas: TCanvas;
      begin
        SmartSetDebug(True);
        Pic := BitmapFromString(367, 40, 'meJztXQebVFW2rZPuubHJICA5Z' +
            'xUUxDHQgIqKYGAUUQaZEZCHaQTUUXTAAQQBETEgosIASg7vD75V6/' +
            'QtbndXVd+6VdCtr/fXw8dg9amT9t5rx1MqNUZSzgrDo1F01Pff87y' +
            'XjHna856z9nUpx5dKXqkkGhwvP2FkXSpZIUZgFi0dOZBySivGsRiq' +
            'VBrQiqH6qRnyhRh9O69iPzVE4K9xSs2XcroQdwkxVMqJkBtx/Ftb2' +
            '//m+YmiE563Vqn7KGFKlAOKfzZMnMn9vr8tio4JMVKpe6Sc1KJlCr' +
            'I/vuLuUqmtyaHC8AsOGAnRL096i7D/nrWvav1QvzDpAyS1bgfk8Lz' +
            'Vnvei563z/S3WbvS8NVo/AKYTYiB+lJpn7bog2BtFP9cRKUlyIwz3' +
            'RNG3QfAvKcdQKM2hVMlJytq/heG+OP4lSa5jQDCsMautXduq1UbR2' +
            'SS5VCrFlCr5J9aVjHmSIvQIJDA2p6/eZEnxHnKxJsfngbUSIRLsE0' +
            'R6qhf6Lgkx3Np/JMmFIPikmdPsp5aQEG1SjgUIwaFYux4mTGrIrA+' +
            'CD8LwYBR9h58g2GXMMxAOABtR9BN+gmA3ZA4kDPi9qmDx/bc5/lCl' +
            'FuaDKAKgCJyeJFcrg4ThbqVmW7upBQsVw41ZlSQXMWwcX8eUhJhee' +
            'DisHeMEwQ7K4b+22hBrCQVB8JGTyUlyGQda4xQwc0+p6SkzCqXm4A' +
            'fblX4AUii6Q1NuhKScEcenubrr1r7RL0x6l6BSw/BIHismSc77/pt' +
            'aPwr7FHdPylFaL7V2q5RTfP+9qr8CbAPthj8hi4BtckxH+P7WOP6p' +
            's/V0WKlZvr8jn2KtPXQZXM0x5vHKyEIMghlVWPkCemEQorUPyKd9i' +
            'qQQo+P418w2ngmCPdZu8LyX6eRRziWFA4W4hlonFn1Rysmd9xnyNj' +
            'EGB70Bcr7XVlOFYiGGABbyZt6M45Owi3t7Sv/PSRjzFCAHrorWj+A' +
            'iCTEMPwAqUs4EnMAP/h0MCM0LrtH6fnxGyvFSjoYwUepeY5ZBRQfB' +
            'p1kskcKSbRgHWpvH/TuOPsd8jOetxd3oJpRWYZJSTiu+TjFEiBFCD' +
            'IBl7cbE5KWcCJSSb2JVKI5PxPEprDEMvyMy6ROEXYrjs9k9DIL3jW' +
            'mH1qDFOpzGS+h5L0DCp5z4X60XZNS6wce0XhbHP2ZUyfXcGuG2E8S' +
            'a1n/BD6wbgsyzWE4x71w/9RIpmt4hzepbBOEThvu6CBNYTOAypWYG' +
            'wU6qxeO0j3okX+uF1YTJGoAfa/+n0LQlEBT4SKkHoJQrYwKlcGLfc' +
            'UWNDyrHU2BuMeYJTFjr5YXm1koCRDRmOWR+xkL8gu4voCbrJD/OxZ' +
            'muzvZxPh+6j7qQojx5NAi2R9EJ8CydEp9X++SdJ9/zXofogLailLu' +
            'ERRU7xH7qawRVGEXf4nLSZXoFN5Bu20nQgMY8w+O+AuXoYig9kV/x' +
            'u3YWTRshTADaC0wPTAQVhrsXBB9VBoQuA1CBEPD9zQXGZPjgH+Ayr' +
            'BSQCQNq/WChcVpLkbWblZoRRV+nmMTZhhD+FoI0in5IYcbVOD4dhv' +
            'txQDRaq5JgvLWN3hK/7+h9peZiIdAOuFf09n8hxMjenlQ/tYQU2Bz' +
            'sj2sJHMIrpylPYDRNBLvF8UXcbaXuyTEUbq/Cr1Rz5G7ht1xufHra' +
            '814B7+P6Ob9rymWfab04ik4zbNH4oPoR8KPvbwcYgI1A90se3HUHy' +
            'AOXQXRTYlyg11rQPIQ8iXEiSk3HnIUYRNneBz3GPRD2GYsKw2MQ40' +
            'BcgCXGPN1X42j91BhBQbuoDT0tkyBPfH+r7+8Ar4XhISBqYFEKmVw' +
            'kxJAkqZLWAg2LYaGGGkezg2GP+P7OrOlEE/t5azf4/rsF7qEQA31/' +
            'F8MH63GTaSkca3SQ20ZhEHxs7Rtc5kmuzvT98G5+AsiM45+hnkoMC' +
            'kfRyUzIqZ/+wOT8IRQmW6EywKHkrJ9gj1j7nlKzeZPzRuuEGJwkv2' +
            'c8fjfj+IYTArDrwbkEAI0BWtgydNNd6Ww0bZByAqyeQuGJAUKMdX4' +
            '/rA5WEt0veaXlHSCl5vv+JrdSCHuAqCajYH2JfOBMGGgwXYUYADBs' +
            'zEu9PaV+apaEGBfHp1IPXtl1gH8Dz8bxJShEY55sXBvKincUkIZfM' +
            'Rhc4OQA4IrnPUfXxOLGBpVjYNFkJYkxy2EIeN4LnreqwRk6UlJOTV' +
            'nVcLZHCo1zu4iWVzkiLOUohtrfqe0V+YORUnOdP02pOVgmY8HumvW' +
            'bOX9Q8qDZu8RuGNJ9CZgzir7Xur3A4Uo5HfDVsQCUjuethEiBQeG8' +
            'phAmwDlR9A3zYPN7AsuZvRV3LuYMeCxEmzHPav1UozNMKUiS8wRjb' +
            '2L83LAkZGB6IixBV2cEaASR63mvYUXGLGGVU8WCE814M5gOepWSJK' +
            'SoP9x3fKe5qTqaDcOD7hyVmkb/zyL8KeWM1GE14M9k0P3pScrJUPT' +
            'ZaEuS3AiCPWCxKPrO2k043GIjB8H+OL7ovGop4DkOYeJ5q2n+n6Aw' +
            'OcqU2jxRoTJBKEXRjxVvSRB87ILaGLOosh6GX3TLB7bBZKLoh7qSU' +
            'wgxyvM2YtPC8MsoOs0Y6zX8MNlvLOHcpSg6BjvRmJVSzmQBwgAKli' +
            'LFPrDpwnA/Zebgto7Shn1/BGQiCURLaWln1epRG8dn01t3HohL60X' +
            'YXibrQp5Hvv8RDqW/SOoPQVJOA0eAEVz8Io7P0Zf+RKk0kEyqC+vT' +
            'INiFYZkoezxjj6zEjbJ2S5pqsgqKCT+lUs74i6COvpEJCb2t1CzKq' +
            'FHF5lkqI+1p6XyAnfYRKVVddTkBFeDKScVSKVYKCnQgLayOZWItDL' +
            'wKlkW3AUsAnyh1j+c9Q2/26PS/5p/bDByKtX8j+mp3Stz3iyXn3Dm' +
            'izTKeAaYSwG2SXGSC3FEgNxYCu8B0YszjkLpMEiiH9mDm4AiC4H0m' +
            'mUTObx+GBwBxe3tB/dQjaTBOklzGD47MmBWetzbVJs1QuawYmIT2w' +
            'ozOiWqvlZjr6KAFbhFEAVQ8YG2OYSWV/i1JEsenPO9FjOb727ok3e' +
            'Um2CZTwa2c28u4wGG415jHaolQJsacZbLcjDS96jcINPAIg7NDsZ+' +
            'QNk4m48+KD8olm8XxmSD41NpXGdsd3aMfG0tz3iHwGjaKSz7vec/3' +
            'cVgCDQXTD3A0DL/FDjjUB20Vhl/F8UmsyPc3Y9OwIbCglZoL5cXih' +
            'Y3GLDPmOZqNd7NKYpm1f8d687no/3gx8T8RAXXElaAt8LmrI27R4I' +
            'Y5lpfAEBluOuAMYSgs971R9JVSU6F3jFna04DQ5glsrqxoYpzUsND' +
            'v+aL+OmXtG3F8DYAEUhSCAjitVmMEQouJuOHOFwrcBeuDsHxIiuJ8' +
            'Icay1QN28i5YN5BUrFlYix/oXFd1AuiOOUMu0RNVR54IpeZhD9s6M' +
            'lqhqS9BFjW4wIDmVaObo8ibkusqEGefCNu2Sz4AzZYAOwN8kk0PwA' +
            'ZSnV0Jgu2sIdLdvrHH0KFiNXRLWtnkpHKxdmHz/89HQowAI7vAShj' +
            'uAZszLe0vzQ8Mxa31YnAcEzIPAEswk/a072+tVLBWAtAA7U4gZNwm' +
            'MnOdnLoBW023dl1aAna94jPB7wICKdVYPKhCkGOYIdsyLIKuxLC43' +
            'rUkKhOAx2q9jAHus64bQ7UPavZCGQY8r9T91m4Lw28AV8ApsKfwg+' +
            'Xg62AQQWvX96PijCp8R2k/mt4DT+sHYelAKOFPgEmob4imMDwehkd' +
            '9/10mgB11gfgg2Asupktzav6APi3HY9hYLjBqJAztviLCl0bRYRwZ' +
            'LFlrX2fgfhIQCEZ2ITxODwb1MmASHCiTmgo4RrB7Q7ReggUCWObOo' +
            'ixOtHP/EwS7GQGcrPXC/qJmehGTIPgwTdJYz4qbT8ACTY8cGrMatz' +
            '29zLuAZjEyc7wr4qLcyyiOL1U8b7x+06DWiZDLAp/1iW28YAHUHMQ' +
            'IuA/zhMSTcoLz2rngSxieyO1y6UrGLPf9t/AVYfg5oc4Z3PbaHxfM' +
            'ki2b/7hRdT/ZhXz8Ir4CW0Fj51zq8Kmf9i+48O8ruM7zXoCUBv4He' +
            '1bydrLaP4qOgyshG/EDqegK+fGNSs2GXYZfzBkDgjrAbOnpPUicZr' +
            't7yCHocFI0QET6L2NYeDiGI4xj9egEgjTI1UFADgCBmB62ouI8x63' +
            'DbtAFlNcD35li2KT0m92HwdnVqv44Cec2pWgsDFqvDQfhULHDWncW' +
            'Ed0BajiJGuebTdWAdHWdG4t6HrI0OAg+wjh0t66CMsJ9o67vot0Uz' +
            'qVzPtu1zibMTw4AOO4D3wkxSusF0D6wIFyDBdgOvv8O3cXFKADHGf' +
            'Mk9GYc/0K3yUs9aS4FGQKOpmnTqEqCwJxtzFMwfNj2YVH9LyKnrMz' +
            'uSY8/bJp0r2tcw9qHsQSKExm5huR8JmdrOxpo05zEpntcMBXw1t2g' +
            'M+d9z3uFAspj+fZ4/N3z1oXh3lKHYLmXosYwhqUpUR8y5jnmu55iw' +
            'fgk4ChGpopJEixtHJtuHaL8fA4ol0G9qpQY084YpcCHG89sNFo/DF' +
            'kt5UjIrlR0f0U3e34fo2TosNhiO0aAeiWMbxIO3QqsKDUXYBtMhMt' +
            'PDT5C6waStaQcX9F3YFgcOh16QUvcemA0Yj8DvcZcsgk1PojrNxLX' +
            'CZAjjm9V7tCTv9FFRiBPougEts6luhEtv06FONWFVKjp3ilaEWZxk' +
            '+P4Z0BxVz4Qxz/m+0XR9FHK+sIfe4gpwUDoIitwWLQZrzlbD+qAnU' +
            'xW4vPMacHFHp5+8grdvFnyqENzQTilHqA/uS2KvnG+Ux7W6ErKB63' +
            'CXQ7wGPMsa7jmGfN4kvxGu7VU19+SYM6QA0GwHftfw1TMQ2DwJUHw' +
            'b5hLsPgwDvQOpFnmAxpYl20NIMSW4T8pNb9Uji6dyJ3erIjVJUagY' +
            '6fMLJ73fBQdZTJn2c2eE8xrvYIFbo/Rf55T9XfaPUhseq2/hkplmK' +
            'xwrfcAIsYB2BPf3wJ8mPFq7k9bQOciXJIwPFn59W5XrknSwP/QjLh' +
            'dcXwBZ13no0pN5yXEhZyOFbFUZwuAPVHxYKg5ZsaWYSRdLuet3cEN' +
            'NPg8QCZ4igb4C8WsYCoywPjD0DiYMO4J+8f2BdJBsLOL/eJ60rJk+' +
            'wVrt8A003opbpQxKyAS6d/4OYr+S/H7le+/RxOsGYknlHqQboGJkO' +
            '3s8XKadqiLv8PwXApFBmkD4c+GDxYWqLNbIU/q4ltAuwW0FwbH8e/' +
            'sylgwCgN0Aejrct6i6ExasuS+OvS8l4PgAG6gtX/H/jDNL3IQlOXJ' +
            '43sa3gNkZdZ3XMHwRFPjIDaVascgzHESnEkPlUSMk67GoWBz2NW23' +
            'rJcSxD2qJnU+RCHMHY5yrE8matR7e8kvKd1O91Z2KIPgmB3EPwLej' +
            'kIPm/ryFTPyVASSC8jiPa2NmkZAp86cT0gRByf6cndLajg/kkfyyJ' +
            'sNeQGOzhNwHZhdYBewOrsoLiO7QcdATPHPNmPIFqlzO+4uEUQoWF4' +
            'jIZYO8sYd4B/C4xzOwiXLY5vWXxs9zTG82DQbWMAeiwVhyTjhLQfE' +
            '/4L2HMQLcphrbBVSzRtJtCrORNfmiTnwbY4BWg0Zn2Uo1c8qcO42K' +
            '400mEngJkartRYqYXUMmB8RcDzO0u9CpOFlq80F2Wi4LdKPRJFPyf' +
            'JBdgj1EfzuTmRU+UUwotzpPoMtPYtunMDyh/ArWuQmcAV5PSyvwUw' +
            'jGYjduYysFmdsYSYDBGk9aP0lj9X56shPXAPAXjApNh27vyMzDhDr' +
            'd3s8sEAjcAUYDSuJScl7J11Iop+hVAC9GUPNM/dFsgoqPK2cqFczh' +
            'JLA9hQuajUIK3tiiOj6BdIb9x/V1GeQ1JJ+uHXMuXg5zA8wXc3/qr' +
            '1kwSiliyT9ZVBY85l16aLjAg/VYhxRBjiLF501is9jdfYn7lPELsN' +
            'fAqudE3yoUSACrBFMO4YWL+jGSYQVsYAAg1zTuO0zUg5ehtFX7N/1' +
            'BJwaMYDfIYtQKucO1CE58Eoe4kgEObtUex8I7xQhXBJsp2KAV+xV6' +
            '76GBsJEQf2p6xbSkyVU29aNp4qd9AFJgHkg84FvMkYp4o7M5S53Gt' +
            'yONJD6ESm2fw7/RfZGXJY9jkcI0QCWYfr7VxVkLQMMXQQzBwXJnCG' +
            'J+5JFB2y9rU8S8JsfR/w41VjlvD/JpSuIl3wOhbOHAFf5AOKgTErK' +
            'w5P4GFnP7aQXJczAAxIbCgs1n7mPL686IgI8156SoH23yuWZQ2ADd' +
            'wL6ybrlOhLrVDbcPnBcThiLJbZLN/0atWbovV6oIvlRU/FNtg+lfJ' +
            't5s9U918xveS0q8hmdAkW7rNYYNMgSrO/3DXKsSM4UzYxBsqdofVy' +
            'Ke9r/C0VixnCfmFl5ak4vgx9TZ3bff9VJSHZ5XXXGNCwLnUflDhAj' +
            'vsKOhVhKi5kL3d33OUuZL7/Pvaz0oPU9zfRknLKtGz+QPO6WFJbOV' +
            'VgEiaZr0xewhaGjmaD0/kA/BnAA5t6O8taQ5gD1N31hYkV4m5MGLr' +
            'Y999m1uiq1j1Yc4vYhvFt6qxTsMJ6dDMWIDY1LZH3k8I+bcYoNzNz' +
            'e00qWs/1mRpVjWPSeikby8+jlX2hwULI20EC1mi2DpR3eLDnrXR9w' +
            'lmzWU83USpecLVFYBBwkNb3t6KRXQA2ASfyYkgCid+C4AMaIz3yRR' +
            'fCDicEvTfZ7XweL1iSRiHdnyJ7T9yGwMypm+0fwRgkxnB1WyX2s5r' +
            'Etw9ec01T2W3sQpqzN4h7ddMFI+j3nu48Zta+zWKltzPOUnw+Ij6v' +
            'SeB95o3fxGExU+sHY1a4FUEjs+X4enraf6DMHFR7JMMeXNPZlauc2' +
            'kEr7HaFxaWcBbkKKxsXLH07qbUOmftdfwAIw2beZpJyJlQAdKUL4r' +
            'R19EHqE+1B2KgEfz4K3eoqjoNgL4+sN2UddD2b2t0qBTXmMTBI6vw' +
            '8wVtdj/BhukoiZyuxX/cerrFJiqm/PCemnNOGzNWo7C0/mAINmEVf' +
            'zJLardQCwuA3ff9Dsr/vjE1cIfdh399e1w0yns69FRRNmt80muWfE' +
            'xloGEpHyvps/3P26ul4WyoMv8SVgJEFCQzoAtwVxyczM7zKlOxaws' +
            'SQ9ye7vHHmDU7hF3XUXdLSCVkh8jthz7TaCxHMXh5KLdDOpKkDbOt' +
            '6tZFsq/xULnJxDXzYI7rlvAlB+qyryKOUXl/Ye4DNh5bE5mTuzI6+' +
            'gEyYKnaIkXqJG8UiwSnU+L2ZY8mWU5/SyS/p743o6vyBYcFDfJyxZ' +
            'wsR95C2QEge2c3f/byZhwnSYUfz20WGvy4WcH9pvdh1/e0SiA/DY/' +
            'h3SCocB51sku6CFcAMrqSip2iUNmaZS9iGRWDta8zlm83deALiiE7' +
            'dpzqPoKPoXFamgeVT/HxDCAiT00lyvpKUBbwBa6vb9yo650e6ZlOu' +
            'IgOgKwy/hsDU+uk4vs4E9Z+YygvOHcP35updsyD40L3T57xnzFK4y' +
            'j25LYyDVUOYJMkN6qmCL03UHvwumDYu8xN6jcm6I4oN5XkbXBzHub' +
            'MgWPqI99WZXXwCYBLTz6bxGb6hvSfooK8net4rzFC12DG+i1GOFkX' +
            'RcSa3TOTLR7mm55Ki2zqa/y9jeXWTvRktzdUJbP55M40lfc1XPxoi' +
            'AZ7qIknSiDxERzmKCtZjKHw4H6c7CJSFy8OC0HprZ+rLwWw2JjAGH' +
            'cIrXFCGLdmzIwgp52QnAIWS9m+/wUo0zf4MC5yT1jkPu8WavVJpIB' +
            '+lequLmwviCPOXcnRqocCUnkq1VR8iSsb9L2fFLGQjPe23qbhSuFw' +
            'yNogumNxec2gxEEsGVOb+fwipCwkAo7tQDdqYINgTRUfYHvBpJ7Fb' +
            'FEttkhRPv/yQDZ85G89Z9UolrOeUlNar+aCepVO9Pb1FlyhDNmHfW' +
            'IDzXU7fNbg+bRqzBvZCXZ0uGWjr4XCZpDQfwjYIPkjndsaYxxsFcp' +
            'h/FH2fiqMLrP74mFmytwxh1oCfdnWgnvfX9HR6INfiOMvRLCMd5dK' +
            'tIaAYue60cIjH1PQ+zrkNd24ZlowNSSc8ELvnEjsZoe5SJOthet1f' +
            'lmkrtzR82PlviSt+8/13+MhvfYTv0W2+MyNJyrUkrai7qUMx1E1bR' +
            'yF/yynkK+ejnOuPmuJ0sReysJ9E6R0nBa3BoqHeJ9rsn7gGC5B17v' +
            '2ppo9MuYRhQp2caY0+hYNv7Zs0pTuCdLxFV6CPAJUh1V2GCcxwaF5' +
            'WYfRMYAG3OugF39+uVK1qgnL6PbCiEONrDwYzcBn/AuTwBIx35/hi' +
            'MWMB/TI8beZzitGTEp2N9zrDh0bK+Sj6CRiMutjLKeG1bq+8QpKBO' +
            'tJ5UHHxGPbt4ttJYAM6H3WaxHKN5ZArOvsNDMtmtzjHLORe5+Xc5b' +
            'oZszJ0KJsc3sUEv2XugTau9CJFUI/yUACPab2Ur0jc5A8kyd7CL9z' +
            'lI0EJ+VhbOTQ89zbkQiQuq5kG4w18ketF3/g4lu/93eSVng+9E4Zf' +
            'tRxHFSOy54GMCjtEazFnIlC2bF+yHvw+z/sbvaaXwnC/K2bMM5ArT' +
            'MbecodXsS/NWfbGPM7ajXFpdwLInCEQ7JgkXaB5Tty6nVdqBtMquj' +
            'O+YNqnC3lIrr0622q9EEvjgwJb3QOFYPw8q6ux5GEuLsOFKKYh7al' +
            'odkqYHZxtY88MsQi9U7lZEHzmmoLi3xly6r5pMgj2MyVgOmbF95v2' +
            's/qpC1kH8CDxCJYOZzeKTU1vQsJj2g7hZLuTEZC8m3MJuEUARfTb4' +
            'Kw/gEyjz7yZ2qI8ZLVeAHlCk6Hlr7BBvQ7CumAOx/E54G2YjVF0sk' +
            'B0m3kpxnWgtXYbJszQf++7XktlYTIx+4iwA6V1laBLjU6ofSYzjjy' +
            'HTQ8WgOvdhWFPlcn8wMScy6QKg0X/K/SmSwsE7MdGdWnLwB6tA4Gg' +
            'cLuYpZDH3w5O2Uv2PEnf8qjOYlyyjmZBOo2hdO5VHTaAfmS5lnDdl' +
            'pjJ2cwhDkkdGusgyqCFjXmWfSNnsRwp5jQaG5+tLb7sAkswPiXMJc' +
            'r26nJJiJGpJFkYht8RC3UffAzDQwPdK72sxLzF4M7H4gq1+J9cAvA' +
            'IVoC2d5dgrnql2gIHVN4rh1rhXRpLpmtmq63L55dyHu/kgGo2KWDh' +
            'NNadrWVcu7WkmGyzOI7PE7xNgTRmRmLDROg4FWySJBfZ2nowQyd9h' +
            'Nq62LkMf0Q1PqzYLhKHCy0/i7VsD0PkWruR75hvYzTzdXpgTlq7JQ' +
            '0I9kgD2M1pDbAfC4EH1oZGIWu3v2THpx97DA13TLrsYzlKdXmUzxT' +
            'OTPMHjJTTXHJmiY3aoFjpFa8yZzYcKJfpUdfvrL1F+UnE8RXHMoBM' +
            'NJ/zeF3qtZzS+sHs83AVG4dNlV+tbyixs9CiOL7GJMDqhQnl/8W/s' +
            'qzyBr24WYPFY9RmJwsHBta1ZcrTYA7/jm4YQBOd/tfdSfyFWWQ7qL' +
            'CGE74OrrFLvosicZKBa4cF8cieGO9H0WGocq0fogk2iEON6O6Hd09' +
            'aAFoTprY2lCmYmbPUrQubk9Y2NjwOoBp2mJtzLo2S9J1ef+Vkv+zd' +
            'ow8QSGMh+Ma58QkzRqXX2FKnjGTNyyKabPsyEcOXtX5EqftTMSLyQ' +
            'fSQtsz4PL4a1qovhPrgQ/Yv5hh8GGuvpuFGpZD7ahDsJnie50IwTO' +
            '76p+9vdvHxqjN0zfooSf7TouMrQ98o+iZNA1N1+gkzFrPENa0luKp' +
            'OdM3dyJ5mGGK2Jfa4qD/nNhcXiOMbnle95McFi1M2P9WtoZl2mfnM' +
            'hTvLBh3dj15RLAxyYpns3GlWQoxja+iuT/p2+WGg+S9svTWdrpV3s' +
            'UzARXbm3AqtzVetD8fxmaq/jiWw1GtCF5vX8zbwdc5FnFjLDQfFZm' +
            'KbnGOh6NuRGORNaFJqxm+p0erk+/UC4Sa7NLD0+h1kGGtxl8dVAey' +
            't3aT1E8wbv9faV1gmczktP7F8HVVSqlcysXsU7+UHRIDqCYdyeQaA' +
            'TJR6gAw4hR6AHk9E0FsylZWV7zucybP4HuYPzhfSCYfL1tk1o+FOU' +
            '1Mp32jdq39tUt4NKUczZBOLx1X3CRizmpla+Orf+azzOUaOqhNThr' +
            '7IcM1VAC3WIPd4EK7++lc+jVQVVHisPTzLwvkLLEnogs0UJkbLdyr' +
            'b8O639p3UE9VBuCEs0/iK1Trt7B7fRcRZ5wru/gNwxbqqg2H4OUxC' +
            'Co338PdKu2PMKgh2uf5InMDnziGMP9kQ+ELny3yaavSI6z2eOZHRv' +
            'Crd/UXNkwnDY1AEzCPaU7RRrWbl5jY2SVjeR1wlWSLkG+QiC91/eB' +
            '8CNmreWGmvCuFPFTPUtSSls32/Ug83/tUFmopotkjaS3H3TT63ieI' +
            'NmU0bDfbUsxDvLFUL0ma5G+q7d5S6B/c/CD5u9OG2uiRZW/GS64YB' +
            'JgqC/VhXEHxIcDgIYpYdtP7BtoHlPL0w/DfTgWoWxZOXZ/I53YOs8' +
            'F1LeJkLR7nedD1G39iReFRVyc8m7Z+wjdIQrR9gGdR67K1ScwFlIR' +
            'U97zX2qXAl27LahmtI/mw0ihVV82izzKCDbh4wCVsrrKFd3O58s2k' +
            'facW/DHd/p72j2M31AT7tF2A/XQocg79eHP/CNwtufXupbM9ugurP' +
            's2ONkHBtSDFnMEuOZmi1qNxDA+qbGrwvdncXYiwdqiOz8gR3O03G9' +
            'pxeYBl7xIqwxeVOPyluYU/mz6hYG94fugQLEITANFxaNt7MGXgS1E' +
            'E+71i5mxwRzhxMgPkb03viOOEs8VbrAgCzhWxQsAR4Dxai4zjIbSK' +
            'lisdJ0cZUBEj1e7bMZp65JY8Ufy+mMOFusGP5Y+TfhfhhLwuIuFku' +
            'Rb/+rxvzDH7XlV8RgFnculpqrjNuOYrvhaR1iIX9UnYxc+9C5kr/h' +
            'w4xn9pzsFLztV7eWXiWd9v14rsNezMEMJiP+5xooiW4YPMT52gK+5' +
            'K35BZRdwwj1t3ApNOneRDXmft0ma99XUlP5JDv72RPiXPYFpxaE4X' +
            'Pomi3OqX1Q2G4D0ZxM+8a0HCe1usvbUk5hl3+vqYhgz2/3pf88w0T' +
            '+JSVfYe5nJvQ/sCBzNzIk6Kp+JjLhzBSsq68OL4WBLutfQs/+Eu28' +
            'Q5ETS1pg4/hP+HzkNV5mk4w130zZtv8JtRY21y6gj9pzlKWRCZj+/' +
            'CLk5q1GyMYQ8QduAGoiYMDTjbmec97lc1elmI36CZNWHs1nKigV+p' +
            '3BNgN4o75V7c7/eBOEOOGD/n+O9a+UVTA9inCPXdd2Rurlfs/VkgA' +
            'rw==');

        Canvas := TCANVAS.Create;
        Canvas.Handle := SmartGetDebugDC;
        DrawBitmap(Pic, Canvas, 90, 15);
        FreeBitmap(Pic);
      end;

      Procedure OnScreen;
      Var
        XPH,RPH,TTB: Integer;
      begin
        if (Exp < 1) then
          Exp := 1;

        XPH := Round((Exp * 3600) / (GetTimeRunning / 1000));
        RPH := Round((Runs * 3600) / (GetTimeRunning / 1000));
        TTB := (((w) + (y) + BreakRounds)-GetTimeRunning);

        SMART_DrawTextMulti(True, True, ['Version '+Version+' (by Flight)',
          ''+MsToTime(GetTimeRunning, Time_Abbrev),
          'Runecrafting XP: '+IntToStr(Exp)+' ('+IntToStr(XPH)+' / hour)',
          'XP to next lvl: '+IntToStr(XPToLvl-Exp),
          'Load done: '+IntToStr(Runs)+' ('+IntToStr(RPH)+' / hour)'],
          Point(15, 255), SmallCharsNS, 16777215);

        SMART_DrawTextMulti(False, True, ['Time till break: '+MsToTime(TTB,Time_Bare)], Point(575, 445), SmallCharsNS, 65280);

        DrawLogo;
      end;

      Function IsMoving_F: Boolean;
      begin
        Result := PixelShift(IntToBox(MMCX-30, MMCY-30, MMCX+30, MMCY+30), 200) > 200;
      end;

      Function RunesMenu: Boolean;
      var
        X,Y: Integer;
      begin
        Result := FindText(x, y, 'light', UpCharsEx, 145, 275, 360, 315);
      end;

      Function UsingQuickPrayers: Boolean;
      Var
        X,Y: Integer;
      begin
        Result := FindColorTolerance(X, Y, 9154193, 710, 75, 730, 85, 20);
      end;

      Procedure HumanMMouse(eX, eY, ranX, ranY: Integer);
      var
        randSpeed: extended;
        X,Y,X2,Y2,A,Dist,MP: integer;
      begin
        A := MouseSpeed;
        GetMousePos(X, Y);
        Dist := Distance(X, Y, eX, eY);
        MP := Round(Dist/150);
        if MP < 0 then
          MP := 1;

        randSpeed := (random(MouseSpeed) / 2.0 + MouseSpeed) / 10.0;
        X2 := RandomRange(eX-(A*MP), eX+(A*MP));
        Y2 := RandomRange(eY-(A*MP), eY+(A*MP));
        WindMouse(X, Y, X2, Y2, 11, 8, 10.0 / randSpeed, 12.0 / randSpeed, 10.0 * randSpeed, 10.0 * randSpeed);
        GetMousePos(X, Y);
        MMouse(eX, eY, ranX, ranY);
        MouseSpeed := A;
      end;

      Procedure ActivateQuickPrayer;
      begin
        if UsingQuickPrayers then Exit;

        HumanMMouse(723, 70, 10, 10);
        ClickMouse2(True);
      end;

      Function LowPrayer: Boolean;
      begin
        Result := FindColorTolerance(X, Y, 255, 740, 70, 760, 80, 10)
      end;

      Function GetClosestMMDot(WhatDot: String): TPoint;
      var
        TPA: TPointArray;
      begin
        TPA := GetMiniMapDots(WhatDot);
        if (Length(TPA) < 1) then
          Exit;

        SortTPAFrom(TPA, Point(MMCX, MMCY));
        Result := TPA[0];
      end;

      Function FoundSymbol(Ident: Integer; var X, Y, Dist: Integer): Boolean;
      var
        B: TBox;
        TPA: TPointArray;
        L,i,CTS: Integer;
        ATPA,ATPA2: T2DPointArray;
      begin
        CTS := GetColorToleranceSpeed;
        ColorToleranceSpeed(2);

        if ((Ident = 1) or (Ident = 2) or (Ident = 5) or (Ident = 6)) then
          FindColorsTolerance(TPA, 12632256, MMX1, MMY1, MMCX+10, MMY2, 10)
        else
        FindColorsTolerance(TPA, 12632256, MMX1, MMY1, MMX2, MMY2, 10);

        if Length(TPA) < 1 then
        begin
          ColorToleranceSpeed(CTS);
          Exit;
        end;

        ATPA := TPAtoATPAEx(TPA, 10, 10);
        L := High(ATPA);
        SetArrayLength(ATPA2, L+1);
        for i := 0 to L do
        begin
          B := GetTPABounds(ATPA[i]);
          with B do
          begin
            if (Ident = 1) then
              FindColorsTolerance(ATPA2[i], 16382969, B.X1, B.Y1, B.X2, B.Y2, 5)  //Altar (white)
            else if (Ident = 2) then
              FindColorsTolerance(ATPA2[i], 1244922, B.X1, B.Y1, B.X2, B.Y2, 5)    //Altar (yellow)
            else if (Ident = 3) then
              FindColorsTolerance(ATPA2[i], 2413294, B.X1, B.Y1, B.X2, B.Y2, 5)   //Bank
            else if (Ident = 4) then
              FindColorsTolerance(ATPA2[i], 2370858, B.X1, B.Y1, B.X2, B.Y2, 5)   //Hunter
            else if (Ident = 5) then
              FindColorsTolerance(ATPA2[i], 1787389, B.X1, B.Y1, B.X2, B.Y2, 5)   //Big arrow
            else if (Ident = 6) then
              FindColorsTolerance(ATPA2[i], 2763504, B.X1, B.Y1, B.X2, B.Y2, 5);  //Dungeon
            Result := (Length(ATPA2[i]) > 0);
            if Result then
            begin
              ColorToleranceSpeed(CTS);
              MiddleTPAEx(ATPA2[i], X, Y);
              Dist := Distance(MMCX, MMCY, X, Y);
              Exit;
            end;
          end;
        end;
      end;

      Function NearSymbol(Which: Integer): Boolean;
      var
        X,Y,D: Integer;
      begin
        Result := FoundSymbol(Which, X, Y, D);
      end;

      Function AboveGround: Boolean;
      var
        X,Y,D: Integer;
      begin
        Result := FoundSymbol(4, X, Y, D);
      end;

      Function NearLadder: Boolean;
      var
        X,Y,D: Integer;
      begin
        Result := False;

        if FoundSymbol(6, X, Y, D) then
        begin
          Result := (D < 15);
          Exit;
        end;

        if FoundSymbol(1, X, Y, D) then
          Result := (D < 15);

      end;

      Function FindObjEx_F(ColorA, ColorB, Tol, Bounds, sX, sY: Integer; UpText: TStringArray; Var X, Y: Integer; Debug: Boolean): Boolean;
      var
        B: TBox;
        TPA: TPointArray;
        L,i,CTS: Integer;
        ATPA,ATPA2: T2DPointArray;
      begin
        CTS := GetColorToleranceSpeed;
        ColorToleranceSpeed(2);
        FindColorsSpiralTolerance(sX, sY, TPA, ColorA, MSX1, MSY1, MSX2, MSY2, Tol)

        if Length(TPA) < 1 then
        begin
          ColorToleranceSpeed(CTS);
          Exit;
        end;

        ATPA := TPAtoATPAEx(TPA, Bounds, Bounds);
        L := High(ATPA);
        SetArrayLength(ATPA2, L+1);

        for i := 0 to L do
        begin
          B := GetTPABounds(ATPA[i]);
          with B do
          begin
            FindColorsSpiralTolerance(sX, sY, ATPA2[i], ColorB, B.X1-Bounds, B.Y1-Bounds, B.X2+Bounds, B.Y2+Bounds, Tol)
            if Length(ATPA2[i]) > 0 then
            begin
              MiddleTPAEx(ATPA2[i], X, Y);
              HumanMMouse(X, Y, 5, 5);
              if WaitUpTextMulti(UpText, 800) then
              begin
                Result := True;
                ColorToleranceSpeed(CTS);

                if DeBug then
                  SMART_DrawBox(IntToBox(X-Bounds, Y-Bounds, X+Bounds, Y+Bounds));

                GetMousePos(X, Y);
                Exit;
              end;
            end;
          end;
        end;
      end;

      Procedure ReturnValues(colors: TIntegerArray; var HueMods, SatMods: Extended; var color, Tolerance: Integer);
      Var
        h, s, t: Extended;
        I,II : integer;
        HSLColor : Array[1..3] of Extended;
        HSL : Array[0..1] of Array[1..3] of Extended;
      begin;
        For I:= 1 to 3 do
        begin;
          HSL[0][i] := 255;
        end;

        For I:= 0 to High(Colors) do
        begin;
          ColortoHSL(Colors[i],HSLColor[1],HSLColor[2],HSLColor[3]);
          For II:= 1 to 3 do
          begin;
            HSL[0][II] := MinE(HSLColor[II],HSL[0][II]);
            HSL[1][II] := MaxE(HSLColor[II],HSL[1][II]);
          end;
        end;

        H := (HSL[1][1] - HSL[0][1]);
        S := (HSL[1][2] - HSL[0][2]);
        T := (HSL[1][3] - HSL[0][3]);

        try
          HueMods := (H/T);
          SatMods := (S/T);
          Tolerance := Round(t);
        except
          HueMods := 0;
          SatMods := 0;
          Tolerance := Round(0.0);
        end;

        Color := HSLToColor((HSL[1][1] + HSL[0][1]) div 2,(HSL[1][2] + HSL[0][2]) div 2,(HSL[1][3] + HSL[0][3]) div 2);
      end;

      Procedure SetPrayers;
      var
        X,Y,X2,Y2,T,T2: Integer;
        PPoint: TPoint;
      label
        MoveM;
      begin
      {Right-click prayer icon}
        HumanMMouse(724, 70, 8, 8);
        ClickMouse2(False);
        WaitOption('elect', 400);

      {Wait for the quick-prayer selection menu}
        MarkTime(T);
        repeat
          if TimeFromMark(T) > 5000 then
            Exit;
          if FindColorTolerance(X, Y, 8499692, 610, 445, 630, 465, 10) then
            break;
        until(false);

      {Determine the player's prayer type & choose the right protection prayer}
        if (FindText(X, Y, 'urses', StatChars, 630, 200, 690, 230) or FindText(x, y, 'rayers', StatChars, 630, 200, 690, 230)) then
        begin
          if FindText(X, Y, 'urses', StatChars, 630, 200, 690, 230) then
            PPoint := Point(671, 274)
          else if FindText(X, Y, 'rayers', StatChars, 630, 200, 690, 230) then
            PPoint := Point(670, 343);

      {Check if prayers are already set}
          if not FindColorTolerance(X2, Y2, 461806, PPoint.X-10, PPoint.Y-10, PPoint.X+10, PPoint.Y+10, 10) then
          begin
            MoveM:
            if not LoggedIn then Exit;

            HumanMMouse(671, 274, 4, 4);

            if WaitUpText('elect', 400) then
            begin
              ClickMouse2(True);
              Wait(RandomRange(175, 350));
            end else
              goto MoveM;
          end else
            Writeln('Prayers already selected');

      {Hit confirm}
          HumanMMouse(645, 456, 15, 5);
          ClickMouse2(True);
        end;

      {Wait for the prayer selection to be confirmed}
        MarkTime(T2);
        repeat
          if TimeFromMark(T2) > 5000 then
            Exit;
          if (not FindText(x, y, 'urses', StatChars, 630, 200, 690, 230) and (not FindText(x, y, 'rayers', StatChars, 630, 200, 690, 230))) then
            break;
        until(false);

        OptionsSet := True;
        Gametab(Tab_Inv);

        Writeln('Quick-prayers set');

      end;

      Function TeleportOut: Boolean;
      var
        X,Y,I,DTM: Integer;
        Angle: Extended;
      label
        Start;
      begin
        Result := False;
        ColorToleranceSpeed(1);

        DTM := DTMFromString('mWAAAAHicY2FgYNjGxMCwBYj3MkHYjIwMDH+A4v+AmAPItra2YjDUPclw8ZAnGPMDxZExExoGAQBaKgrC');

        Start:
        if not LoggedIn then Exit;
        Gametab(tab_Magic);
        Wait(RandomRange(375, 550));

        if FindDTMRotated(DTM, X, Y, MIX1, MIY1, MIX2, MIY2, (-Pi/4), (Pi/4), (Pi/60), Angle) then
        begin
          I := 0;
          HumanMMouse(X, Y, 7, 7);
          ClickMouse2(True);
          Gametab(tab_Inv);
          HumanMMouse(580, 115, 15, 15);

          if not WaitFunc(@AboveGround, 100, 6000) then
            Exit;

        end else
        begin
          Inc(I);
          if (I > 3) then
            Shutdown('Failed to find spell DTM')
          else
          begin
            Writeln('Failed to find spell '+IntToStr(I)+' time');
            FindNormalRandoms;
            Gametab(tab_Magic);
            Wait(RandomRange(125, 275));
            goto Start;
          end;
        end;

        Result := NearSymbol(4);
        SetRun(True);

        FreeDTM(DTM);
      end;

      Function FindLadder(Var X, Y: Integer): Boolean;
      var
        B: TBox;
        Loop: Boolean;
        TPA: TPointArray;
        L,i,CTS: Integer;
        ATPA,ATPA2: T2DPointArray;
        label
          Start;
      begin
        Result := False;
        Loop := False;

        Start:
        FindNormalRandoms;
        CTS := GetColorToleranceSpeed;
        ColorToleranceSpeed(2);
        FindColorsSpiralTolerance(130, 170, TPA, 3029573, MSX1, MSY1, MSCX, MSY2, 15)

        if Length(TPA) < 1 then
        begin
          ColorToleranceSpeed(CTS);
          Exit;
        end;

        ATPA := TPAtoATPAEx(TPA, 20, 20);
        L := High(ATPA);
        SetArrayLength(ATPA2, L+1);

        for i := 0 to L do
        begin
          B := GetTPABounds(ATPA[i]);
          with B do
          begin
            FindColorsSpiralTolerance(130, 170, ATPA2[i], 921102, B.X1, B.Y1, B.X2, B.Y2, 15)
            if Length(ATPA2[i]) > 0 then
            begin
              ColorToleranceSpeed(CTS);
              MiddleTPAEx(ATPA2[i], X, Y);
              HumanMMouse(X, Y, 5, 5);
              Result := True;
              Exit;
            end;
          end;
        end;
        ColorToleranceSpeed(CTS);
        if Loop then
          goto Start;

      end;

      Function FindChaosAltar(Var X, Y: Integer): Boolean;
      var
        B: TBox;
        TPA: TPointArray;
        L,i,CTS: Integer;
        ATPA,ATPA2: T2DPointArray;
      begin
        Result := False;

        CTS := GetColorToleranceSpeed;
        ColorToleranceSpeed(2);
        FindColorsSpiralTolerance(MSCX, MSCY, TPA, 3685505, MSX1, MSY1, MSX2, MSY2, 20)

        if Length(TPA) < 1 then
        begin
          ColorToleranceSpeed(CTS);
          Exit;
        end;

        ATPA := TPAtoATPAEx(TPA, 30, 30);
        L := High(ATPA);
        SetArrayLength(ATPA2, L+1);

        for i := 0 to L do
        begin

          B := GetTPABounds(ATPA[i]);
          with B do
          begin
            FindColorsSpiralTolerance(MSCX, MSCY, ATPA2[i], 11908541, B.X1, B.Y1, B.X2, B.Y2, 20)
            if Length(ATPA2[i]) > 0 then
            begin
              ColorToleranceSpeed(CTS);
              MiddleTPAEx(ATPA2[i], X, Y);
              HumanMMouse(X, Y, 5, 5);
              Result := True;
              Exit;
            end;
          end;

        end;
      end;

      Function WalkToLadder: Boolean;
      var
        X,Y,Dist: Integer;
      label
        Start;
      begin
        Result := False;

        Start:
        if not LoggedIn then Exit;
        FindNormalRandoms;

        if FoundSymbol(6, X, Y, Dist) then   //Dungeon
        begin

          HumanMMouse(X, Y, 2, 2);
          ClickMouse2(True);
          Wait(RandomRange(755, 910));
          HumanMMouse(255, 210, 30, 30);
          if FlagPresent then
            FFlag(1)
          else
            While IsMoving_F do
              Wait(1);

          if NearLadder then
          begin
            Result := True;
            Exit;
          end else
            goto Start;

        end else if FoundSymbol(1, X, Y, Dist) then  //Altar
        begin

          HumanMMouse(X, Y, 2, 2);
          ClickMouse2(True);
          Wait(RandomRange(755, 910));
          HumanMMouse(255, 210, 30, 30);
          if FlagPresent then
            FFlag(1)
          else
            While IsMoving_F do
              Wait(1);

          if NearLadder then
          begin
            Result := True;
            Exit;
          end else
            goto Start;

        end else if ((not NearSymbol(6)) and (not NearSymbol(1))) then
        begin
          Writeln('Failed to find symbols, static walking');
          Mouse(580, 120, 4, 4, True);
          Wait(RandomRange(255, 360));
          if FlagPresent then
            FFlag(0)
          else
            While IsMoving_F do
              Wait(1);
          goto Start;
        end;

      end;

      Function HandleAltar: Boolean;
      var
        A,B: Boolean;
        X,Y,T,I: Integer;
      label
        Start;
      begin
        Result := False;

        if not LowPrayer then
        begin
          Result := True;
          Exit;
        end;

        A := False;
        B := False;

        if FlagPresent then
          FFlag(1)
        else
          While IsMoving_F do
            Wait(1);

        Start:
        MarkTime(T);
        repeat
          if not LoggedIn then Exit;
          FindNormalRandoms;

          if FindChaosAltar(X, Y) then
          begin

            if WaitUpTextMulti(['ay-at', 'aos alt'], 400) then
            begin

              ClickMouse2(True);

              if DidRedClick then
              begin
                if FlagPresent then
                  FFlag(1)
                else
                  While IsMoving_F do
                    Wait(1);

                B := True;
                break;
              end;

            end else
            begin

              ClickMouse2(False);
              if WaitOption('ray-at', 500) then
              begin
                if FlagPresent then
                  FFlag(1)
                else
                  While IsMoving_F do
                    Wait(1);

                B := True;
                break;
              end;

            end;
          end;

          if (TimeFromMark(T) > 7000) then
          begin
            A := True;
            break;
          end;

        until(false)

        if A then
        begin
          Inc(I);

          Mouse(MMCX, MMCY+10, 2, 2, mouse_left);
          FFlag(0);
          While IsMoving_F do
            Wait(1);

          if (I > 3) then
          begin
            if not FindChaosAltar(X, Y) then
            begin
              if TeleportOut then
              begin
                Wait(RandomRange(2100, 2600));
                I := 0;
                Exit;
              end;
            end;
          end;

          Wait((RandomRange(600, 775)));
          goto Start;

        end;

        if B then
        begin
          While IsMoving_F do
            Wait(1);

          ActivateQuickPrayer;

          Result := True;
          Exit;
        end;

      end;

      Function HandleLadder: Boolean;
      var
        A,B,C: Boolean;
        X,Y,T,T2,I: Integer;
      label
        Start;
      begin
        Result := False;
        A := False;
        B := False;
        C := False;

        if FlagPresent then
          FFlag(1)
        else
          While IsMoving_F do
            Wait(1);

        Start:
        MarkTime(T);
        repeat
          FindNormalRandoms;

          if FindLadder(X, Y) then
          begin

            if WaitUpTextMulti(['limb', 'mb L', 'adder'], 400) then
            begin

              ClickMouse2(True);

              if DidRedClick then
              begin
                if FlagPresent then
                  FFlag(1)
                else
                  While IsMoving_F do
                    Wait(1);
                B := True;
                break;
              end else
              begin
                C := True;
                break;
              end;

            end else
            begin

              ClickMouse2(False);
              if WaitOptionMulti(['limb', 'b L'], 500) then
              begin
                if FlagPresent then
                  FFlag(1)
                else
                  While IsMoving_F do
                    Wait(1);
                B := True;
                break;
              end else
              begin
                C := True;
                break;
              end;

            end;
          end;

          if (TimeFromMark(T) > 7000) then
          begin
            A := True;
            break;
          end;

        until(false)

        if A then
        begin
          if NearSymbol(3) then
          begin
            Result := True;
            Exit;
          end;

          Inc(I);

          Mouse(MMCX, MMCY+10, 2, 2, mouse_left);
          FFlag(0);
          While IsMoving_F do
            Wait(1);

          if (I > 3) then
          begin
            if not FindLadder(X, Y) then
            begin
              if TeleportOut then
              begin
                Wait(RandomRange(2100, 2600));
                I := 0;
                Exit;
              end;
            end;
          end;

          Wait((RandomRange(600, 775)));
          goto Start;

        end;

        if B then
        begin

          MarkTime(T2);
          repeat
            FindNormalRandoms;
            if (TimeFromMark(T2) > 5000) then
              Exit;
            if NearSymbol(3) then
              break;
          until(false)

          Result := NearSymbol(3);
        end;

        if C then
          goto Start;

      end;

      Function BankToAltar: Boolean;
      begin
        Result := False;

      //No more walking east!
        if not InvFull then Exit;
        if NearSymbol(4) then Exit;

        SetRun(True);

        case RandomRange(1, 2) of
          1: SPS_WalkPath(Path_ToAltar);
          2: SPS_WalkPath(Path_ToAltar2);
        end;

        if FlagPresent then
          FFlag(1)
        else
          While IsMoving_F do
            Wait(1);

        Result := True;

      end;

      Function FindBanker(Var X,Y: Integer): Boolean;
      var
        TPA,PBox: TPointArray;
        HMod,SMod: Extended;
        L,i,CTS,MSP,Col,
        CType,Tol: Integer;
        ATPA: T2DPointArray;
      label
        Start;
      begin
        Result := False;
        if not LoggedIn then Exit;

        PBox := TPAFromBox(IntToBox(240, 130, 275, 185));

        CTS := GetColorToleranceSpeed;

        Start:
        if BankScreen then
        begin
          Result := True;
          Exit;
        end;

        if (CType = 2) then
        begin
          Col := 6453887;
          Tol := 7;
          HMod := 0.10;
          SMod := 0.11;
        end else if (CType = 3) then
        begin
          Col := 5273721;
          Tol := 6;
          HMod := 0.07;
          SMod := 0.11;
        end;

        if (CType = 0) then
        begin
          ColorToleranceSpeed(3);
          FindColorsSpiralTolerance(MSCX, MSCY, TPA, 6848905, MSX1, MSY1, 510, 330, 4);
          ColorToleranceSpeed(CTS);
        end else if (CType = 1) then
        begin
          ColorToleranceSpeed(3);
          FindColorsSpiralTolerance(MSCX, MSCY, TPA, 5800071, MSX1, MSY1, 510, 330, 4);
          ColorToleranceSpeed(CTS);
        end else if ((CType = 2) or (CType = 3)) then
        begin
          ColorToleranceSpeed(2);
          SetColorSpeed2Modifiers(Hmod, SMod);
          FindColorsSpiralTolerance(MSCX, MSCY, TPA, Col, MSX1, MSY1, MSX2, MSY2, Tol);
          ColorToleranceSpeed(CTS);
        end;

        TPA := ClearTPAFromTPA(TPA, PBox);

        if (Length(TPA) < 1) then
        begin
          Inc(CType);
          if (CType > 3) then
            Exit;
          goto Start;
        end;

        ATPA := TPAToATPAEx(TPA, 40, 40);
        SortATPAFrom(ATPA, Point(MSCX,MSCY));
        L := High(ATPA);
        SetArrayLength(ATPA, L+1);

        for i := 0 to L do
        begin

          MiddleTPAEx(ATPA[i], X, Y);
          MSP := MouseSpeed;
          MouseSpeed := (RandomRange(26, 33));
          HumanMMouse(X, Y, 15, 15);
          MouseSpeed := MSP;

          if WaitUpTextMulti(['niola'], 400) then
          begin
            Result := True;
            GetMousePos(X, Y);
            Exit;
          end;

        end;

      end;

      Function OpenBankEniola: Boolean;
      var
        X,Y,T,T2,
        BFail: Integer;
        GoOn: Boolean;
      label
        Start;
      begin
        Result := False;
        GoOn := False;

        Start:
        if BankScreen then
        begin
          Result := True;
          Exit;
        end;

        FindNormalRandoms;
        if not LoggedIn then Exit;

        if FindBanker(X, Y) then
        begin
          GoOn := True
        end else
        begin
          Inc(BFail);

          if (BFail = 1) then
            MouseFlag(620, 105, 5, 5, 0);

          While IsMoving_F do
            Wait(1);

          if (BFail > 10) then
          begin
            TeleportOut;
            Exit;
          end;

          goto Start;
        end;

        if GoOn then
        begin
          ClickMouse2(False);
          if not WaitOptionMulti(['ank', 'nk E'], 500) then
            goto Start;

          While IsMoving_F do
            Wait(1);

          MarkTime(T);
          repeat
            FindNormalRandoms;
            if (TimeFromMark(T) > 3000) then
              Exit;
            if RunesMenu then
              break;
          until(false);

          if RunesMenu then
          begin
            HumanMMouse(MPoint.X, MPoint.Y, 7, 7);
            ClickMouse2(True);

            MarkTime(T2);
            repeat
              FindNormalRandoms;
              if (TimeFromMark(T2) > 5000) then
                Exit;
              if (BankScreen) or (PinScreen) then
                break;
              Wait(100);
            until(false)

            if PinScreen then
              if (Players[CurrentPlayer].Pin <> '') then
                InPin(Players[CurrentPlayer].Pin)
              else
                Shutdown('No PIN # given');

            Wait(RandomRange(175, 350));

          end;
        end;

        Result := BankScreen;
      end;

      Procedure Eat;
      var
        DTM,X,Y,X2,
        Y2,T: Integer;
      begin
        if not LoggedIn then Exit;
        if not BankScreen then Exit;

        Case lowercase(Food) of
          'trout'   : DTM := DTMFromString('mlwAAAHicY2dgYCgD4kIgzgbiAiCuAOJaIG4EYhUgVgRiTSDWBWJtqJg8EGfERAJJJqxYDkjiwox4MBQAALdhBks=');
          'tuna'    : DTM := DTMFromString('mlwAAAHicY2dgYFAAYikgFgFiCShfHYh1gFgFiOWBWA2I9YBYFyonC8QpEWFAkgkrFoGahw0z4sFQAABkyQOa');
          'lobster' : DTM := DTMFromString('mbQAAAHicY2VgYOgB4g4g7gPiyUA8FYjPA/F1IL4CxHeA+DQQrw+TAJJMKJiLARMwYsFgAACaUQgl');
          'swordfish' : DTM := DTMFromString('mlwAAAHicY2dgYGhmZGDoBuKJQNwHxJ2MELFyIJZhgGAFIFYCYmUglofSzTFdQJIJK+YCknI4MCMeDAUA/+8G2A==');
          'monkfish': DTM := DTMFromString('mggAAAHicY2NgYJjEyMAwEYgXQPE8IJ4GxB+Bct+A+A0DhP0diH8AsbejJcP8miogiwkFcwFJEEYHjDgwBAAAZ90L0w==');
          'shark'   : DTM := DTMFromString('mggAAAHicY2NgYLBjZGAwB2JHIHYHYg8g1gfiEqBcAxBXA3EzEJcCcQsQd+RHAUkmDMzFgB0w4sAQAAAltwXX');
        end;

        if FindDTM(DTM, X, Y, MSX1, MSY1, MSX2, MSY2) then
        begin
          HumanMMouse(X, Y, 5, 5);
          ClickMouse2(False);
          WaitOption('Withdraw-5', 300);

          MarkTime(T);
          repeat
            FindNormalRandoms;
            if (TimeFromMark(T) > 5000) then
              Exit;
            if (HPPercent >= 90) then
              break;
            if FindDTM(DTM, X2, Y2, MIX1, MIY1, MIX2, MIY2) then
            begin
              HumanMMouse(X2, Y2, 5, 5);
              ClickMouse2(False);
              if WaitOption('Eat', 300) then
              begin
                Wait(RandomRange(705, 815));
                MarkTime(T);
                Inc(FoodC);
              end;
            end;
          until(false)

        end;

        if FindDTM(DTM, X, Y, MIX1, MIY1, MIX2, MIY2) then
        begin
          HumanMMouse(X, Y, 5, 5);
          ClickMouse2(False);
          WaitOption('Deposit-All', 300);
          Wait(RandomRange(425, 675));
        end;

        FreeDTM(DTM);
      end;

      Function WithdrawEss: Boolean;
      var
        X,Y,Ess,ItemFail: Integer;
      label
        Start;
      begin
        Start:
        if not BankScreen then
          Exit;

        ColorToleranceSpeed(1);
        FixBank;

        Ess := BitmapFromString(9, 11, 'meJx1zNEKgCAQRNGfDBMRERHbysq' +
            'I/r+BIQmWYN7O3RXZRLZlObBaz32/sNZurJQVkzeAMgDlPGM6gMaY' +
            'U5owBt/nISQog64MvI9Ufetc+FPQV/tnkLVeK8kYp5U/h2GkMoDyJ' +
            '+gB5qx01w==');

        if BankScreen then
        begin
          if FindBitmapToleranceIn(Ess, X, Y, 35, 85, 480, 295, 20) then
          begin
            HumanMMouse(X, Y, 5, 5);
            ClickMouse2(False);
            Result := WaitOptionMulti(['Withdraw-All', 'w-A'], 300)
          end else
          begin
            if (ItemFail > 3) then
              Shutdown('Out of essence');

            Inc(ItemFail);
            if (ItemFail = 0) then
              Writeln('Failed finding essence '+IntToStr(ItemFail)+' time')
            else if (ItemFail > 0) then
              Writeln('Failed finding essence '+IntToStr(ItemFail)+' times');
            Wait(RandomRange(1750, 2205));
            goto Start;
          end;
        end;

        FreeBitmap(Ess);
      end;

      Function DepositEss: Boolean;
      var
        T,Slot: Integer;
      begin
        if not BankScreen then exit;

        Slot := RandomRange(9, 20);
        MouseItem(Slot, mouse_right);
        Wait(RandomRange(50, 115));
        WaitOption('Deposit-5', 300);

        MarkTime(T);
        repeat
          FindNormalRandoms;
          if (TimeFromMark(T) > 3000) then
            Result := False;
          if not InvFull then
            break;
        until(False)

        Result := (not InvFull);
      end;

      Function WithdrawRunes(Method: String): Boolean;
      var
        ABMP,CBMP,X,Y: Integer;
      begin
        Result := False;
        if not LoggedIn then Exit;

        if InvFull then
        begin
          if not BankScreen then
            OpenBankEniola
          else if BankScreen then
              DepositEss;
          Wait(RandomRange(350, 625));
        end;

        ColorToleranceSpeed(1);

        ABMP := BitmapFromString(7, 7, 'meJy7efPxzZuPCwvLiosrSkurboK5' +
              'EJSfXwIRh4tk5xTk5hUhq8nIyMnKykMWAaK0tCw0EWRDIAhoDtBwN' +
              'HMgggArDGec');
        CBMP := BitmapFromString(7, 5, 'meJyTvXBJFoaKiytKS6sg7Ny8IiDK' +
              'zy8pLCyDiGRk5GRl5WXnFEDEIYJpaVlwcbg5KSkZEHEgggsCAOmnNDQ=');

        if FindBitmapToleranceIn(CBMP, X, Y, MSX1, MSY1, MSX2, MSY2, 20) then
        begin
          HumanMMouse(X, Y, 5, 5);
          Wait(RandomRange(25, 75));
          ClickMouse2(True);
          Wait(RandomRange(350, 675));
        end;

        if (Lowercase(Method) = 'contact') then
        begin
          if FindBitmapToleranceIn(ABMP, X, Y, MSX1, MSY1, MSX2, MSY2, 20) then
          begin
            HumanMMouse(X, Y, 5, 5);
            Wait(RandomRange(25, 75));
            ClickMouse2(True);
            Wait(RandomRange(275, 475));
            ClickMouse2(True);
            Wait(RandomRange(275, 475));
          end;
        end;

        CloseBank;

        Result := True;
        FreeBitmap(ABMP);
        FreeBitmap(CBMP);

      end;

      Function HandlePouches(Method, Seq: Integer): Boolean;
      begin
        Result := False;

        if (Method = 1) then
        begin
          //Small pouch
          if not (SS = 0) then
          begin
            MouseItem(SS, mouse_right);
            Wait(RandomRange(20, 75));
            if (Seq = 1) then
              WaitOptionMulti(['ill', 'Fill'], 400)
            else
              WaitOptionMulti(['mpty', 'Empty'], 400);
          end;

          //Medium pouch
          if not (MS = 0) then
          begin
            MouseItem(MS, mouse_right);
            Wait(RandomRange(20, 75));
            if (Seq = 1) then
              WaitOptionMulti(['ill', 'Fill'], 400)
            else
              WaitOptionMulti(['mpty', 'Empty'], 400);
          end;

          //Large pouch
          if not (LS = 0) then
          begin
            MouseItem(LS, mouse_right);
            Wait(RandomRange(20, 75));
            if (Seq = 1) then
              WaitOptionMulti(['ill', 'Fill'], 400)
            else
              WaitOptionMulti(['mpty', 'Empty'], 400);
          end;

          //Giant pouch
          if not (GS = 0) then
          begin
            MouseItem(GS, mouse_right);
            Wait(RandomRange(20, 75));
            if (Seq = 1) then
              WaitOptionMulti(['ill', 'Fill'], 400)
            else
              WaitOptionMulti(['mpty', 'Empty'], 400);
          end;

        end else if (Method = 2) then
        begin

          //Giant pouch
          if not (GS = 0) then
          begin
            MouseItem(GS, mouse_right);
            Wait(RandomRange(20, 75));
            if (Seq = 1) then
              WaitOptionMulti(['ill', 'Fill'], 400)
            else
              WaitOptionMulti(['mpty', 'Empty'], 400);
          end;

        end else if (Method = 3) then
        begin
          //Small pouch
          if not (SS = 0) then
          begin
            MouseItem(SS, mouse_right);
            Wait(RandomRange(20, 75));
            if (Seq = 1) then
              WaitOptionMulti(['ill', 'Fill'], 400)
            else
              WaitOptionMulti(['mpty', 'Empty'], 400);
          end;

          //Medium pouch
          if not (MS = 0) then
          begin
            MouseItem(MS, mouse_right);
            Wait(RandomRange(20, 75));
            if (Seq = 1) then
              WaitOptionMulti(['ill', 'Fill'], 400)
            else
              WaitOptionMulti(['mpty', 'Empty'], 400);
          end;

          //Large pouch
          if not (LS = 0) then
          begin
            MouseItem(LS, mouse_right);
            Wait(RandomRange(20, 75));
            if (Seq = 1) then
              WaitOptionMulti(['ill', 'Fill'], 400)
            else
              WaitOptionMulti(['mpty', 'Empty'], 400);
          end;

        end else if (Method = 4) then
        begin
          //Large pouch
          if not (LS = 0) then
          begin
            MouseItem(LS, mouse_right);
            Wait(RandomRange(20, 75));
            if (Seq = 1) then
              WaitOptionMulti(['ill', 'Fill'], 400)
            else
              WaitOptionMulti(['mpty', 'Empty'], 400);
          end;
        end else if (Method = 5) then
        begin
          //Small pouch
          if not (SS = 0) then
          begin
            MouseItem(SS, mouse_right);
            Wait(RandomRange(20, 75));
            if (Seq = 1) then
              WaitOptionMulti(['ill', 'Fill'], 400)
            else
              WaitOptionMulti(['mpty', 'Empty'], 400);
          end;

          //Medium pouch
          if not (MS = 0) then
          begin
            MouseItem(MS, mouse_right);
            Wait(RandomRange(20, 75));
            if (Seq = 1) then
              WaitOptionMulti(['ill', 'Fill'], 400)
            else
              WaitOptionMulti(['mpty', 'Empty'], 400);
          end;
        end;

        Result := True;
      end;

      Function FindDecayedPouch(Var Slot: Integer): Boolean;
      var
        B: TBox;
        TPA: TPointArray;
        Hmod,Smod: Extended;
        L,i,Tol,CTS,Col,X,Y: Integer;
        ATPA: T2DPointArray;
      begin
        Result := False;

        CTS := GetColorToleranceSpeed;
        ColorToleranceSpeed(2);
        ReturnValues([3422525, 3619647, 3751234], Hmod, Smod, Col, Tol);
        SetColorSpeed2Modifiers(Hmod, SMod);
        FindColorsSpiralTolerance(MSCX, MSCY, TPA, Col, MIX1, MIY1, MIX2, MIY2, Tol);
        ColorToleranceSpeed(CTS);

        if (Length(TPA) < 1) then
          Exit;
        ATPA := TPAToATPAEx(TPA, 18, 18);
        SortATPAFrom(ATPA, Point(650, 330));
        L := High(ATPA);
        SetArrayLength(ATPA, L+1);
        for i := 0 to L do
        begin
          B := GetTPABounds(ATPA[i]);
          if (GetArrayLength(ATPA[i])>10) then
          begin
            MiddleTPAEx(ATPA[i], X, Y);
            Slot := CoordsToItem(X, Y);
            Result := True;
          end;
        end;

      end;

      Function CheckPouches: Boolean;
      var
        S: Integer;
      begin
        Result := FindDecayedPouch(S);
      end;

    Function ContactScreen: Boolean;
      var
        X, Y: Integer;
      begin
        //Result := FindText(x, y, 'Choose a character', UpCharsEx, 170, 10, 340, 30);
        Wait(1200+Random(300));
        Result := True;
      end;

      Function ContactRepair: Boolean;
      var
        T,T2,T3: Integer;
      begin

        MarkTime(T);
        repeat
          FindNormalRandoms;
          if (TimeFromMark(T) > 4000) then
            Exit;
          if ContactScreen then
            break;
        until(false)

        if ContactScreen then
        begin
          MouseBox(480, 230, 485, 290, 1);
          Wait(RandomRange(275, 480));
          MouseBox(380, 80, 435, 160, 1);
        end;

        MarkTime(T2);
        repeat
          FindNormalRandoms;
          if (TimeFromMark(T2) > 6000) then
            Exit;
          if ClickToContinue then
            MarkTime(T2);
          Wait(RandomRange(125, 275));
          if FindNPCChatText('epai', ClickLeft) then
            break;
        until(false)

        MarkTime(T3);
        repeat
          FindNormalRandoms;
          if (TimeFromMark(T3) > 2000) then
            Exit;
          if ClickToContinue then
            MarkTime(T3);
          Wait(RandomRange(125, 275));
        until(false)

        Result := True;

      end;

      Function RepairPouches(Method: String): Boolean;
      var
        X,Y,Slot,Spell: Integer;
      label
        Start;
      begin
        ColorToleranceSpeed(1);

        Start:
        FindNormalRandoms;
        if not LoggedIn then Exit;

        Case Lowercase(Method) of
          'spell':
            Spell := BitmapFromString(6, 6, 'meJybsPnUqr2nmQVNHMtXAMni7mUT' +
                    'Np8CIiAbLgjh6vgXQRgQQSC3Yf46IEIWhIgADQEiZDMjihc6JbYBA' +
                    'DJlKvQ=');

          'contact':
            Spell := BitmapFromString(7, 5, 'meJx79fr1K3LRr6cHMUU+HarHFGFk' +
                    'YAAA0ZFcCA==');
        end;

        if FindDecayedPouch(Slot) then
        begin
          Writeln('Decayed pouch detected in slot '+IntToStr(Slot));
          GameTab(tab_Magic);
          Wait(Random(100));
          if FindBitmapIn(Spell, X, Y, 550, 200, 720, 435) then
          begin
            MMouse(X, Y, 5, 5);
            Wait(Random(100));
            if (Lowercase(Method) = 'spell') then
            begin
              if WaitUpText('epair',RandomRange(250,350)) then
              begin
                ClickMouse2(True);
                Wait(RandomRange(20, 75));
                MouseItem(Slot, mouse_left);
                Wait(RandomRange(1575, 2150));
                Inc(RepairC);
                Writeln('Pouch repaied');
              end;
            end else if (Lowercase(Method) = 'contact') then
            begin
              if WaitUpText('Contact',RandomRange(250,350)) then
              begin
                ClickMouse2(True);
                if ContactRepair then
                begin
                  Inc(RepairC);
                  Writeln('Pouches repaied');
                end;
              end;
            end;
          end;
        end;

        if not FindDecayedPouch(Slot) then
          Result := True
        else
          goto Start;

        FreeBitmap(Spell);
      end;

      Procedure HandleBank;
      var
        S: String;
        T: Integer;
      begin

        if BankScreen then
        begin

          Mouse(370, 305, 6, 6, True);

          if (HPPercent <= EatAt) then
            Eat;

          WithdrawEss;

          if PP2 then
          begin
            if HandlePouches(2, 1) then
              WithdrawEss;
            if HandlePouches(3, 1) then
              WithdrawEss;
          end else
          begin
            if HandlePouches(3, 1) then
              WithdrawEss;
          end;
        end;

        MarkTime(T);
        repeat
          FindNormalRandoms;
          if (TimeFromMark(T) > 5000) then
            Exit;
          if InvFull then
            break;
        until(false)

        if InvFull then
        begin
          Wait(RandomRange(375, 550));

          if CheckPouches then
            if WithdrawRunes(Lowercase(RepairMethod)) then
              if RepairPouches(Lowercase(RepairMethod)) then
                if OpenBankEniola then
                  if WithdrawEss then
                    if CloseBank then
                      Exit;

          if (GetMMLevels('run',S) <= RestAt) then
            RestUntil(RandomRange(90, 100));

        end;

      end;

      Function FindAltar(Var X,Y: Integer): Boolean;
      var
        B: TBox;
        Loop: Boolean;
        TPA: TPointArray;
        Hmod,Smod: Extended;
        L,i,Tol,CTS,Col,F,MSP: Integer;
        ATPA: T2DPointArray;
      label
        Start;
      begin
        Result := False;
        Loop := False;
        CTS := GetColorToleranceSpeed;

        Start:
        ColorToleranceSpeed(2);
        ReturnValues(ACols, Hmod, Smod, Col, Tol);
        SetColorSpeed2Modifiers(Hmod, SMod);
        FindColorsSpiralTolerance(MSCX, MSCY, TPA, Col, MSX1, MSY1, MSX2, MSY2, 10);
        ColorToleranceSpeed(CTS);

        if (Length(TPA) < 1) then
          Exit;

        ATPA := TPAToATPAEx(TPA, 20, 20);
        SortATPAFrom(ATPA, Point(MSCX,MSCY));
        L := High(ATPA);
        SetArrayLength(ATPA, L+1);

        for i := 0 to L do
        begin
          if (GetArrayLength(ATPA[i]) > 30) then
          begin
            B := GetTPABounds(ATPA[i]);

            MiddleTPAEx(ATPA[i], X, Y);
            MSP := MouseSpeed;
            MouseSpeed := (RandomRange(26, 33));
            HumanMMouse(X, Y, 15, 15);
            MouseSpeed := MSP;
            if WaitUpTextMulti(['-rune', 'unec', 'rafting'], 555) then
            begin
              Result := True;
              GetMousePos(X, Y);
              Exit;
            end else
            begin
              Inc(F);
              if (F > 7) then
                Exit;
              Loop := True;
              Break;
            end;

          end;
        end;
        if Loop then
          goto Start;

      end;

      Function CraftRunes: Boolean;
      var
        X,Y,Seq: Integer;
        A,B: LongInt;
      label
        Start;
      begin
        Seq := 0;
        A := Round(GetXPBarTotal);

        Start:
        if not LoggedIn then Exit;

        if FindAltar(X, Y) then
        begin
          ClickMouse2(True);
          if not DidRedClick then
            goto Start;
          While IsMoving_F do
            Wait(1);

          if (Seq < 3) then
          begin
            HumanMMouse(640, 220, 15, 15);
            Wait(RandomRange(675, 1125));
            While IsMoving_F do
              Wait(1);
            Wait(RandomRange(105, 165));
          end else
          begin
            GameTab(tab_Magic);
            Wait(RandomRange(675, 930));
          end;

        end else
        begin
          SetRun(True);
          BankToAltar;
          FindNormalRandoms;
          SetRun(True);
          goto Start;
        end;

        if (Seq = 0) then
        begin
          if PP1 then  //Large pouch
          begin
            if HandlePouches(4, 2) then
              Seq := 1;
          end else if not PP1 then
            if HandlePouches(5, 2) then
              Seq := 3;

          goto Start;
        end;

        if (Seq = 1) then
        begin
          if PP2 then  //Giant pouch
          begin
            if HandlePouches(2, 2) then
              Seq := 2;

            goto Start;
          end else if not PP2 then
            if HandlePouches(5, 2) then
              Seq := 3;

          goto Start;

        end;

        if (Seq = 2) then
        begin
          if HandlePouches(5, 2) then
            Seq := 3;

          goto Start;
        end;

        if (Seq = 3) then
          Result := True;

        if Result then
        begin
          B := Round(GetXPBarTotal);
          Inc(Runs);
          IncEx(Exp, (B-A));
          IncEx(Exp_C, (B-A));
          OnScreen;
        end;
      end;

      Function BreakHandler(BreakIn, BreakFor, randBreakIn, randBreakFor: Integer): Boolean;
      Var
        h,m,s: integer;
      begin
        if not LoggedIn then Exit;

        if (HowManyPlayers = 1) then
        begin
          if (GetTimeRunning < ((w) + (y) + BreakRounds)) then Exit
          else
            if (GetTimeRunning > ((w) + (y) + BreakRounds)) then
            begin
              if NearSymbol(3) then
              begin
                RealBTime := ((x+z)/60000);
                Writeln('Taking a break for about ' + IntToStr(RealBTime) + ' minutes.');
                CloseBank;
                Logout;
                MarkTime(CurrentBTime);
                repeat
                  Wait(21000);
                  ConvertTime((x+z)-TimeFromMark(CurrentBTime), h, m, s);
                  ClearDebug;
                  Writeln('Breaktime left: '+IntToStr(h)+':'+IntToStr(m)+':'+IntToStr(s));
                until(TimeFromMark(CurrentBTime)>(x+z));
                Writeln('Logging in.');
                OnScreen;
                if SwitchWorlds then
                  if LoginPlayerToLob then
                    ChangeWorld(RandomWorld(True, False))
                else
                  LoginPlayer;
                Wait(4000);
                Result := LoggedIn;
                ClickNorth(SRL_ANGLE_HIGH);
                IncEx(BreakRounds, (w) + (x));
                Inc(TotalBreaks);
                Writeln('The next break will occur in about ' + IntToStr(BreakIn) + ' minutes.');
                w := (BreakIn * 60000);
                x := (BreakFor * 60000);
                y := RandomRange(-Bir * 60000, Bir * 60000);
                z := RandomRange(-Bfr * 60000, Bfr * 60000);
              end;
            end;
        end;
      end;

      Procedure SuperDuperLooper;
      begin
        if not LoggedIn then Exit;
        FindNormalRandoms;

        if NearSymbol(3) then                                     //Bank
        begin
          if not InvFull then
            if OpenBankEniola then
              HandleBank
            else
              Exit
          else if InvFull then
            if BankToAltar then
              if CraftRunes then
                TeleportOut
              else
                While IsMoving_F do
                  Wait(1)
            else
              While IsMoving_F do
                Wait(1);
        end else if NearLadder then                               //At the ladder
        begin
          if UsePrayer then
          begin
            if HandleAltar then
              HandleLadder;
          end else
            HandleLadder;
        end else if (NearSymbol(4) and (not NearLadder)) then     //Teleport area
        begin
          WalkToLadder;

          if FlagPresent then
            FFlag(1)
          else
            While IsMoving_F do
            Wait(1);
        end else if ((not NearSymbol(3)) and (not NearSymbol(4))  //We're either at the altar or lost
          and (not NearLadder)) then
          if not CraftRunes then
            TeleportOut;

      end;

    begin
      Smart_Server := 70;
      Smart_Members := True;
      Smart_Signed := True;
      Smart_SuperDetail := False;
      setupSRL();
      DeclarePlayers;

      LoginPlayer;
      ClickNorth(SRL_ANGLE_HIGH);

      SPS_Setup(runecrafting_altars, ['0_1']);
      SPS_Continue := True;

      LoadVars;
      SetupSRLStats(157, SRLStats_Username, SRLStats_Password);
      Smart_ClearCanvas;

      ToggleXPBar(True);
      XPToLvl := XPTillNextLevel(Skill_Runecrafting);

      if UsePrayer then
      begin
        SetPrayers;
        ActivateQuickPrayer;
      end;

      OnScreen;

      Repeat

        if not LoggedIn then
        begin
          LoginPlayer;
          ClickNorth(SRL_ANGLE_HIGH);
        end;

        BreakHandler(BreakIn,BreakFor,Bir,Bfr);

        if (TimeFromMark(CommitTime)>=30000) then
          Commit;

        if (TimeFromMark(ReportTime)>=5000) then
          Report;

        SuperDuperLooper;

      Until(AllPlayersInactive)

    end.

    Script Fully working! supporting "contact spell and repairing pouches like a pro thanks to Mat For the fix!

    All Credits go to its respective owners
    IT is working PERFECT!! Thank you!!

  20. #895
    Join Date
    Nov 2011
    Posts
    22
    Mentioned
    0 Post(s)
    Quoted
    1 Post(s)

    Default

    Is the Code safe? can anyone verify this please.

    p.s: not being a prick just don't want to lose bank.

  21. #896
    Join Date
    Jan 2010
    Posts
    1,414
    Mentioned
    0 Post(s)
    Quoted
    1 Post(s)

    Default

    It's very safe, Tocholoko. You don't have to worry at all!
    Simba Code:
    (* Main *)

    repeat
      WriteLn('I am an idiot!');
    until(False);

  22. #897
    Join Date
    Nov 2011
    Posts
    118
    Mentioned
    0 Post(s)
    Quoted
    3 Post(s)

    Default

    Just thought I'd let flight note that my problem earlier was fixed--I didn't update my SRL/client.

  23. #898
    Join Date
    Nov 2011
    Posts
    22
    Mentioned
    0 Post(s)
    Quoted
    1 Post(s)

    Thumbs up

    Quote Originally Posted by RISK View Post
    It's very safe, Tocholoko. You don't have to worry at all!
    all right thanks abunch for a reply.

  24. #899
    Join Date
    Feb 2012
    Location
    Texas
    Posts
    25
    Mentioned
    0 Post(s)
    Quoted
    0 Post(s)

    Default

    when i run it when it starts it seems to click the run on and off rapidly nonstop. any ideas on fixing this?

  25. #900
    Join Date
    Jan 2007
    Posts
    75
    Mentioned
    0 Post(s)
    Quoted
    0 Post(s)

    Default

    Quote Originally Posted by itz_Adren View Post
    when i run it when it starts it seems to click the run on and off rapidly nonstop. any ideas on fixing this?
    check the size of the map that you saved, needs to be 500x500 or try reading former posts

Page 36 of 90 FirstFirst ... 2634353637384686 ... LastLast

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •