You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: jwt_authenticatable.rb
    path of file: ./repos/gitlabhq/lib/gitlab
    
    the code of the file until where you have to start completion: # frozen_string_literal: true

module Gitlab
  module JwtAuthenticatable
    # Supposedly the effective key size for HMAC-SHA256 is 256 bits, i.e. 32
    # bytes https://www.rfc-editor.org/rfc/rfc4868#section-2.6
    SECRET_LENGTH = 32

    def self.included(base)
      base.extend(ClassMethods)
    end

    module ClassMethods
      include Gitlab::Utils::StrongMemoize

      def decode_jwt(
        encoded_message, jwt_secret = secret, algorithm: 'HS256', issuer: nil, iat_after: nil, audience: nil)
        options = { algorith
    
      def decode_jwt(
        encoded_message, jwt_secret = secret, algorithm: 'HS256', issuer: nil, iat_after: nil, audience: nil)
        options = { algorithm: algorithm }
        options = options.merge(iss: issuer, verify_iss: true) if issuer.present?
        options = options.merge(verify_iat: true) if iat_after.present?
        options = options.merge(aud: audience, verify_aud: true) if audience.present?

        decoded_message = JWT.decode(encoded_message, jwt_secret, true, options)
        payload = decoded_message[0]
        if iat_after.present?
          raise JWT::DecodeError, "JWT iat claim is missing" if payload['iat'].blank?

          iat = payload['iat'].to_i
          raise JWT::ExpiredSignature, 'Token has expired' if iat < iat_after.to_i
        end