userLogin ulSyncTime partnerId ulPartnerAuthToken ulUserName ulPassword = do
    let ul = UserLogin {..}

        target = endpointSecure
        postBody = J.encode $ ul
        postBodyC = enc $ BSL.toStrict postBody

        opts = defaults & header "Content-type" .~ ["text/plain; charset=utf8"]
                        & header "User-Agent" .~ [userAgent]
                        & param "method" .~ ["auth.userLogin"]
                        & param "partner_id" .~ [partnerId]
                        & param "auth_token" .~ [ulPartnerAuthToken]
    resp <- postWith opts target postBodyC

    let Just (Right resp') = fmap J.eitherDecode $ resp ^? responseBody :: Maybe (Either String (PandoraReply UserLoginReply))

    return (ulrUserAuthToken $ prResult resp', ulrUserId $ prResult resp', not $ ulrHasAudioAds $ prResult resp')
userLogin ulSyncTime partnerId ulPartnerAuthToken ulUserName ulPassword = do
    let ul = UserLogin {..}

        target = endpointSecure
        postBody = J.encode $ ul
        postBodyC = enc $ BSL.toStrict postBody

        opts = defaults & header "Content-type" .~ ["text/plain; charset=utf8"]
                        & header "User-Agent" .~ [userAgent]
                        & param "method" .~ ["auth.userLogin"]
                        & param "partner_id" .~ [partnerId]
                        & param "auth_token" .~ [ulPartnerAuthToken]
    resp <- postWith opts target postBodyC

    let Just (Right resp') = fmap J.eitherDecode $ resp ^? responseBody :: Maybe (Either String (PandoraReply UserLoginReply))

    return (ulrUserAuthToken $ prResult resp', ulrUserId $ prResult resp', not $ ulrHasAudioAds $ prResult resp')
userLogin ulSyncTime partnerId ulPartnerAuthToken ulUserName ulPassword = do
    let ul = UserLogin {..}

        target = endpointSecure
        postBody = J.encode $ ul
        postBodyC = enc $ BSL.toStrict postBody

        opts = defaults & header "Content-type" .~ ["text/plain; charset=utf8"]
                        & header "User-Agent" .~ [userAgent]
                        & param "method" .~ ["auth.userLogin"]
                        & param "partner_id" .~ [partnerId]
                        & param "auth_token" .~ [ulPartnerAuthToken]
    resp <- postWith opts target postBodyC

    let Just (Right resp') = fmap J.eitherDecode $ resp ^? responseBody :: Maybe (Either String (PandoraReply UserLoginReply))

    return (ulrUserAuthToken $ prResult resp', ulrUserId $ prResult resp', not $ ulrHasAudioAds $ prResult resp')