static WoodyBot loadWoodyBot(S botID) { new WoodyBot bot; File zip = loadLibrary(botID); print("Have zip: " + f2s(zip) + ", size: " + fileSize(zip)); // Find out main folder name ("Woody-2017-...") S prefix = commonPrefixMulti(listFilesInZip(zip)); int i = prefix.indexOf('/'); S mainFolderName = i >= 0 ? substring(prefix, 0, i) : ""; bot.files = zipFileSnippetToLazyTextMap_subfolder(botID, mainFolderName); bot.globals = ctxLoadGlobals(botID); bot.regexpMacros = ctxLoadRegexpMacros(botID); woodyLoadRules(bot); ret bot; }