public static LogicObject getPrototype(Description description) {
    if (description == null) {
      return (null);
    }
    { Stella_Object prototype = Logic.accessBinaryValue(description, Logic.SGT_PL_KERNEL_KB_CONCEPT_PROTOTYPE);

      if (prototype == null) {
        prototype = Logic.applyCachedRetrieve(Cons.list$(Cons.cons(Logic.SYM_LOGIC_pC, Cons.cons(Logic.SYM_LOGIC_pP, Cons.cons(Stella.NIL, Stella.NIL)))), Cons.list$(Cons.cons(Logic.SYM_PL_KERNEL_KB_CONCEPT_PROTOTYPE, Cons.cons(Logic.SYM_LOGIC_pC, Cons.cons(Logic.SYM_LOGIC_pP, Cons.cons(Stella.NIL, Stella.NIL))))), Cons.consList(Cons.cons(description, Cons.cons(null, Stella.NIL))), Cons.consList(Stella.NIL), Logic.SYM_LOGIC_F_GET_PROTOTYPE_QUERY_000, new Object[2]).value;
      }
      { Object old$Evaluationmode$000 = Logic.$EVALUATIONMODE$.get();
        Object old$Queryiterator$000 = Logic.$QUERYITERATOR$.get();

        try {
          Native.setSpecial(Logic.$EVALUATIONMODE$, Logic.KWD_EXTENSIONAL_ASSERTION);
          Native.setSpecial(Logic.$QUERYITERATOR$, null);
          Logic.elaborateMetaInstance(prototype);
          return (((LogicObject)(prototype)));

        } finally {
          Logic.$QUERYITERATOR$.set(old$Queryiterator$000);
          Logic.$EVALUATIONMODE$.set(old$Evaluationmode$000);
        }
      }
    }
  }