a6fed85ac9
Stop discarding the authenticator's resolved roles during impersonation. HandleImpersonation now sets args.Identity to a RoleCarryingUserIdentity (: UserIdentity) that carries result.Roles, so a downstream method handler can read them off context.UserIdentity for the inbound AlarmAck gate (T18). Verified via the decompiled SDK (1.5.378.106) that the instance we assign to ImpersonateEventArgs.Identity is stored by reference onto Session.Identity / EffectiveIdentity and surfaced unchanged on OperationContext.UserIdentity -- the custom subclass survives the round-trip. No auth-decision logic changes.