'Resolve a URN of a flow with this id belonging to a given client.
Note that this may need a roundtrip to the datastore. Resolving algorithm
is the following:
1.  If the flow id doesn\'t contain slashes (flow is not nested), we just
append it to the <client id>/flows.
2.  If the flow id has slashes (flow is nested), we check if the root
flow pointed to by <client id>/flows/<flow id> is a symlink.
2a. If it\'s a symlink, we append the rest of the flow id to the symlink
target.
2b. If it\'s not a symlink, we just append the whole id to
<client id>/flows (meaning we do the same as in 1).
Args:
client_id: Id of a client where this flow is supposed to be found on.
token: Credentials token.
Returns:
RDFURN pointing to a flow identified by this flow id and client id.
Raises:
ValueError: if this flow id is not initialized.'

def ResolveClientFlowURN(self, client_id, token=None):

    if (not self._value):
        raise ValueError("Can't    call    ResolveClientFlowURN    on    an    empty    client    id.")
    components = self.Split()
    if (len(components) == 1):
        return self._FlowIdToUrn(self._value, client_id)
    else:
        root_urn = self._FlowIdToUrn(components[0], client_id)
        try:
            flow_symlink = aff4.FACTORY.Open(root_urn, aff4_type=aff4.AFF4Symlink, follow_symlinks=False, token=token)
            return flow_symlink.Get(flow_symlink.Schema.SYMLINK_TARGET).Add('/'.join(components[1:]))
        except aff4.InstantiationError:
            return self._FlowIdToUrn(self._value, client_id)
