class ThreadLocalScopeManager extends ScopeManager {

    private final Scope rootScope;
    private final ThreadLocal<Scope> threadLocalScopes = new ThreadLocal<>();

    public ThreadLocalScopeManager() {
        this(Scope.getCurrentScope());
    }

    public ThreadLocalScopeManager(Scope rootScope) {
        this.rootScope = rootScope;
    }

    @Override
    public synchronized Scope getCurrentScope() {<FILL_FUNCTION_BODY>}

    @Override
    protected synchronized void setCurrentScope(Scope scope) {
        this.threadLocalScopes.set(scope);
    }
    @Override
    protected Scope init(Scope scope) throws Exception {
        return rootScope;
    }


}

        Scope current = threadLocalScopes.get();

        if (current == null) {
            threadLocalScopes.set(rootScope);
            current = rootScope;
        }

        return current;
    
<methods>public non-sealed void <init>() ,public abstract liquibase.Scope getCurrentScope() <variables>