code: def process_instance_change_msg(self, instChg: InstanceChange, frm: str) -> None:
          
          if frm not in self.provider.connected_nodes():
              self.provider.discard(
                  instChg,
                  "received instance change request: {} from {} "
                  "which is not in connected list: {}".format(
                      instChg, frm, self.provider.connected_nodes()), logger.info)
              return
  
          logger.info("{} received instance change request: {} from {}".format(self, instChg, frm))
  
          # TODO: add sender to blacklist?
          if not isinstance(instChg.viewNo, int):
              self.provider.discard(
                  instChg, "{}field view_no has incorrect type: {}".format(
                      VIEW_CHANGE_PREFIX, type(instChg.viewNo)))
          elif instChg.viewNo <= self.view_no:
              self.provider.discard(
                  instChg,
                  "Received instance change request with view no {} "
                  "which is not more than its view no {}".format(
                      instChg.viewNo, self.view_no), logger.info)
          else:
              # Record instance changes for views but send instance change
              # only when found master to be degraded. if quorum of view changes
              #  found then change view even if master not degraded
              self._on_verified_instance_change_msg(instChg, frm)
  
              if self.instance_changes.has_inst_chng_from(instChg.viewNo, self.name):
                  logger.info("{} received instance change message {} but has already "
                              "sent an instance change message".format(self, instChg))
              elif not self.provider.is_master_degraded():
                  logger.info("{} received instance change message {} but did not "
                              "find the master to be slow".format(self, instChg))
              else:
                  logger.display("{}{} found master degraded after receiving instance change"
                                 " message from {}".format(VIEW_CHANGE_PREFIX, self, frm))
                  self.sendInstanceChange(instChg.viewNo)
docs: Validate and process an instance change request.
  
          :param instChg: the instance change request
          :param frm: the name of the node that sent this `msg`