<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def update(cls, first_name=None, middle_name=None, last_name=None, public_nick_name=None, address_main=None, address_postal=None, avatar_uuid=None, tax_resident=None, document_type=None, document_number=None, document_country_of_issuance=None, document_front_attachment_id=None, document_back_attachment_id=None, date_of_birth=None, place_of_birth=None, country_of_birth=None, nationality=None, language=None, region=None, gender=None, status=None, sub_status=None, legal_guardian_alias=None, session_timeout=None, card_ids=None, card_limits=None, daily_limit_without_confirmation_login=None, notification_filters=None, display_name=None, custom_headers=None):
 """ Modify a specific person object's data. :type user_person_id: int :param first_name: The person's first name. :type first_name: str :param middle_name: The person's middle name. :type middle_name: str :param last_name: The person's last name. :type last_name: str :param public_nick_name: The person's public nick name. :type public_nick_name: str :param address_main: The user's main address. :type address_main: object_.Address :param address_postal: The person's postal address. :type address_postal: object_.Address :param avatar_uuid: The public UUID of the user's avatar. :type avatar_uuid: str :param tax_resident: The user's tax residence numbers for different countries. :type tax_resident: list[object_.TaxResident] :param document_type: The type of identification document the person registered with. :type document_type: str :param document_number: The identification document number the person registered with. :type document_number: str :param document_country_of_issuance: The country which issued the identification document the person registered with. :type document_country_of_issuance: str :param document_front_attachment_id: The reference to the uploaded picture/scan of the front side of the identification document. :type document_front_attachment_id: int :param document_back_attachment_id: The reference to the uploaded picture/scan of the back side of the identification document. :type document_back_attachment_id: int :param date_of_birth: The person's date of birth. Accepts ISO8601 date formats. :type date_of_birth: str :param place_of_birth: The person's place of birth. :type place_of_birth: str :param country_of_birth: The person's country of birth. Formatted as a SO 3166-1 alpha-2 country code. :type country_of_birth: str :param nationality: The person's nationality. Formatted as a SO 3166-1 alpha-2 country code. :type nationality: str :param language: The person's preferred language. Formatted as a ISO 639-1 language code plus a ISO 3166-1 alpha-2 country code, seperated by an underscore. :type language: str :param region: The person's preferred region. Formatted as a ISO 639-1 language code plus a ISO 3166-1 alpha-2 country code, seperated by an underscore. :type region: str :param gender: The person's gender. Can be: MALE, FEMALE and UNKNOWN. :type gender: str :param status: The user status. You are not allowed to update the status via PUT. :type status: str :param sub_status: The user sub-status. Can be updated to SUBMIT if status is RECOVERY. :type sub_status: str :param legal_guardian_alias: The legal guardian of the user. Required for minors. :type legal_guardian_alias: object_.Pointer :param session_timeout: The setting for the session timeout of the user in seconds. :type session_timeout: int :param card_ids: Card ids used for centralized card limits. :type card_ids: list[object_.BunqId] :param card_limits: The centralized limits for user's cards. :type card_limits: list[object_.CardLimit] :param daily_limit_without_confirmation_login: The amount the user can pay in the session without asking for credentials. :type daily_limit_without_confirmation_login: object_.Amount :param notification_filters: The types of notifications that will result in a push notification or URL callback for this UserPerson. :type notification_filters: list[object_.NotificationFilter] :param display_name: The person's legal name. Available legal names can be listed via the 'user/{user_id}/legal-name' endpoint. :type display_name: str :type custom_headers: dict[str, str]|None :rtype: BunqResponseInt """


        if custom_headers is None:
            custom_headers = {}

        api_client = client.ApiClient(cls._get_api_context())

        request_map = {
            cls.FIELD_FIRST_NAME: first_name,
            cls.FIELD_MIDDLE_NAME: middle_name,
            cls.FIELD_LAST_NAME: last_name,
            cls.FIELD_PUBLIC_NICK_NAME: public_nick_name,
            cls.FIELD_ADDRESS_MAIN: address_main,
            cls.FIELD_ADDRESS_POSTAL: address_postal,
            cls.FIELD_AVATAR_UUID: avatar_uuid,
            cls.FIELD_TAX_RESIDENT: tax_resident,
            cls.FIELD_DOCUMENT_TYPE: document_type,
            cls.FIELD_DOCUMENT_NUMBER: document_number,
            cls.FIELD_DOCUMENT_COUNTRY_OF_ISSUANCE: document_country_of_issuance,
            cls.FIELD_DOCUMENT_FRONT_ATTACHMENT_ID: document_front_attachment_id,
            cls.FIELD_DOCUMENT_BACK_ATTACHMENT_ID: document_back_attachment_id,
            cls.FIELD_DATE_OF_BIRTH: date_of_birth,
            cls.FIELD_PLACE_OF_BIRTH: place_of_birth,
            cls.FIELD_COUNTRY_OF_BIRTH: country_of_birth,
            cls.FIELD_NATIONALITY: nationality,
            cls.FIELD_LANGUAGE: language,
            cls.FIELD_REGION: region,
            cls.FIELD_GENDER: gender,
            cls.FIELD_STATUS: status,
            cls.FIELD_SUB_STATUS: sub_status,
            cls.FIELD_LEGAL_GUARDIAN_ALIAS: legal_guardian_alias,
            cls.FIELD_SESSION_TIMEOUT: session_timeout,
            cls.FIELD_CARD_IDS: card_ids,
            cls.FIELD_CARD_LIMITS: card_limits,
            cls.FIELD_DAILY_LIMIT_WITHOUT_CONFIRMATION_LOGIN: daily_limit_without_confirmation_login,
            cls.FIELD_NOTIFICATION_FILTERS: notification_filters,
            cls.FIELD_DISPLAY_NAME: display_name
        }
        request_map_string = converter.class_to_json(request_map)
        request_map_string = cls._remove_field_for_request(request_map_string)

        request_bytes = request_map_string.encode()
        endpoint_url = cls._ENDPOINT_URL_UPDATE.format(cls._determine_user_id())
        response_raw = api_client.put(endpoint_url, request_bytes,
                                      custom_headers)

        return BunqResponseInt.cast_from_bunq_response(
            cls._process_for_id(response_raw)
        )