How does a ViewModel survive configuration changes internally? Describe the role of ViewModelStore and NonConfigurationInstances.