private static void createRepositoryItem(LocalFileSystem repoFilesystem, String name,
			String folderPath, int numFunctions) throws Exception {

		ToyProgramBuilder builder = new ToyProgramBuilder(name, true);

		try {
			Program program = builder.getProgram();

			int funcAddr = 0;
			for (int i = 0; i < numFunctions; i++) {
				String funcAddrStr = String.valueOf(funcAddr);
				builder.createMemory("func" + i, funcAddrStr, 2);
				builder.addBytesReturn(funcAddrStr);
				builder.disassemble(funcAddrStr, 2);
				builder.createFunction(funcAddrStr);
				funcAddr += 2;
			}

			setProgramHashes(program);

			createRepositoryItem(repoFilesystem, name, folderPath, program);
		}
		catch (CancelledException e) {
			throw new RuntimeException(e); // unexpected
		}
		catch (InvalidNameException e) {
			throw new IOException(e);
		}
		finally {
			builder.dispose();
		}
	}
Creates a versioned server repository filesystem prior to starting a Ghidra Server.
The following test user permissions are granted:
<pre>
	test=ADMIN
 userA=READ_ONLY
 userB=WRITE
</pre>
@param dirPath the location for the server to be created
@param repoName the name of the repository
@param userAccessLines the permissions for the set of users being created (see above)
@return newly created versioned filesystem (caller is responsible for invoking the
dispose method on the returned object.
@throws IOException
Ghidra/Test/IntegrationTest/src/test.slow/java/ghidra/server/remote/ServerTestUtil.java