'Make a copy of one AFF4 object to a different URN.'

def Copy(self, old_urn, new_urn, age=NEWEST_TIME, token=None, limit=None, update_timestamps=False, sync=False):

    if (token is None):
        token = data_store.default_token
    new_urn = rdfvalue.RDFURN(new_urn)
    if (update_timestamps and (age != NEWEST_TIME)):
        raise ValueError("Can't    update    timestamps    unless    reading    the    latest    version.")
    values = {}
    for (predicate, value, ts) in data_store.DB.ResolvePrefix(old_urn, AFF4_PREFIXES, timestamp=self.ParseAgeSpecification(age), token=token, limit=limit):
        if update_timestamps:
            values.setdefault(predicate, []).append((value, None))
        else:
            values.setdefault(predicate, []).append((value, ts))
    if values:
        data_store.DB.MultiSet(new_urn, values, token=token, replace=False, sync=sync)
        self._UpdateChildIndex(new_urn, token)
