private boolean applyBoundsCheck(@NotNull DfaMemoryState memState,
                                  @NotNull DfaValue array,
                                  @NotNull DfaValue index) {
    DfaValueFactory factory = index.getFactory();
    DfaValue length = getLengthDescriptor().createValue(factory, array);
    DfaCondition lengthMoreThanZero = length.cond(RelationType.GT, intValue(0));
    if (!memState.applyCondition(lengthMoreThanZero)) return false;
    DfaCondition indexNonNegative = index.cond(RelationType.GE, intValue(0));
    if (!memState.applyCondition(indexNonNegative)) return false;
    DfaCondition indexLessThanLength = index.cond(RelationType.LT, length);
    if (!memState.applyCondition(indexLessThanLength)) return false;
    return true;
  }
private boolean applyBoundsCheck(@NotNull DfaMemoryState memState,
                                  @NotNull DfaValue array,
                                  @NotNull DfaValue index)