_uncached_customContextFromGates(outerRowOffset) {
        let results = [];
        let stickyCtx = new Map();
        for (let col = 0; col < this.columns.length; col++) {
            let ctx = new Map(stickyCtx);
            let c = this.columns[col];
            for (let row = 0; row < c.gates.length; row++) {
                let g = c.gates[row];
                if (g === undefined || this.gateAtLocIsDisabledReason(col, row) !== undefined) {
                    continue;
                }

                for (let {key, val} of g.customColumnContextProvider(outerRowOffset + row, g)) {
                    //noinspection JSUnusedAssignment
                    ctx.set(key, val);
                    if (!g.isContextTemporary) {
                        stickyCtx.set(key, val);
                    }
                }
            }
            results.push(ctx);
        }
        return results;
    }
@param {!int} outerRowOffset
@returns {!Array.<!Map.<!string, *>>}