docs: static int[] shiftLeftMultiPrecision(int[] number, int length, int shifts)
      {
          if (shifts == 0) {
              return number;
          }
          // wordShifts = shifts / 32
          int wordShifts = shifts >>> 5;
          // we don't wan't to loose any leading bits
          for (int i = 0; i < wordShifts; i++) {
              checkState(number[length - i - 1] == 0);
          }
          if (wordShifts > 0) {
              arraycopy(number, 0, number, wordShifts, length - wordShifts);
              fill(number, 0, wordShifts, 0);
          }
          // bitShifts = shifts % 32
          int bitShifts = shifts & 0b11111;
          if (bitShifts > 0) {
              // we don't wan't to loose any leading bits
              checkState(number[length - 1] >>> (Integer.SIZE - bitShifts) == 0);
              for (int position = length - 1; position > 0; position--) {
                  number[position] = (number[position] << bitShifts) | (number[position - 1] >>> (Integer.SIZE - bitShifts));
              }
              number[0] = number[0] << bitShifts;
          }
          return number;
      }