move(conf, sid1, sid2, after) {
		const sa = this.sections(conf);
		let s1 = null;
		let s2 = null;

		sid1 = this.resolveSID(conf, sid1);
		sid2 = this.resolveSID(conf, sid2);

		for (let i = 0; i < sa.length; i++) {
			if (sa[i]['.name'] != sid1)
				continue;

			s1 = sa[i];
			sa.splice(i, 1);
			break;
		}

		if (s1 == null)
			return false;

		if (sid2 == null) {
			sa.push(s1);
		}
		else {
			for (let i = 0; i < sa.length; i++) {
				if (sa[i]['.name'] != sid2)
					continue;

				s2 = sa[i];
				sa.splice(i + !!after, 0, s1);
				break;
			}

			if (s2 == null)
				return false;
		}

		for (let i = 0; i < sa.length; i++)
			this.get(conf, sa[i]['.name'])['.index'] = i;

		this.state.reorder[conf] = true;

		return true;
	}
Move the first specified section within the given configuration
before or after the second specified section.

@param {string} conf
The configuration to move the section within.

@param {string} sid1
The ID of the section to move within the configuration.

@param {string} [sid2]
The ID of the target section for the move operation. If the
`after` argument is `false` or not specified, the section named by
`sid1` will be moved before this target section, if the `after`
argument is `true`, the `sid1` section will be moved after this
section.

When the `sid2` argument is `null`, the section specified by `sid1`
is moved to the end of the configuration.

@param {boolean} [after=false]
When `true`, the section `sid1` is moved after the section `sid2`,
when `false`, the section `sid1` is moved before `sid2`.

If `sid2` is null, then this parameter has no effect and the section
`sid1` is moved to the end of the configuration instead.

@returns {boolean}
Returns `true` when the section was successfully moved, or `false`
when either the section specified by `sid1` or by `sid2` is not found.