         return unwrappedClassName
     }
     
+    func unwrappedImplicitClassName(_ string: String?) -> String? {
+        var unwrappedClassName: String? = string
+        if string?.characters.count > 29 {
+            if (string?.substring(to: (string?.characters.index((string?.startIndex)!, offsetBy: 28))!))! == "ImplicitlyUnwrappedOptional<" {
+                unwrappedClassName = string?.substring(to: (string?.characters.index((string?.startIndex)!, offsetBy: (string?.characters.count)! - 1))!)
+                unwrappedClassName = unwrappedClassName?.substring(from: (unwrappedClassName?.characters.index((unwrappedClassName?.startIndex)!, offsetBy: 28))!)
+            }
+        }
+        return unwrappedClassName
+    }
+    
     func unwrappedArrayElementClassName(_ string: String?) -> String? {
         var unwrappedClassName: String? = string
         if string?.characters.count > 6 {

                if object.responds(to: Selector(propertyKey)) {
                    let propertyClassName = propertyTypeStringForName(object, name: propertyKey)!
                    var isDeserialized = false
                    for deserializer in self.deserializers! {
                        let nameOfClass = deserializer.nameOfClass()
                        if propertyClassName == nameOfClass {
                            isDeserialized = true
                            object.setValue(deserializer.valueForObject(json[key]!), forKey: propertyKey)
                        }
                    }
                    if !isDeserialized {
                        if let jsonValue = json[key] {
                            if jsonValue.isKind(of: NSDictionary.self) {
                                if let mirror = propertyMirrorFor(object, name: propertyKey) {
                                    if mirror.displayStyle == .optional {
                                        let typeName = unwrappedClassName(String(describing: mirror.subjectType))
                                        var mirrorClass = NSClassFromString(typeName!)
                                        if mirrorClass == nil {
                                            var appName = Bundle.main.object(forInfoDictionaryKey: "CFBundleName") as! String
                                            appName = appName.replacingOccurrences(of: " ", with: "_")
                                            mirrorClass = NSClassFromString(appName + "." + typeName!)
                                        }
                                        let mirrorType: NSObject.Type = mirrorClass.self as! NSObject.Type
                                        setValueOfObject(object, value: fromJsonDictionary(json[key] as? [String: AnyObject], clazz: mirrorType as! NSObject.Type)!, key: propertyKey)
                                    }else{
                                        setValueOfObject(object, value: fromJsonDictionary(json[key] as? [String: AnyObject], clazz: mirror.subjectType as! NSObject.Type)!, key: propertyKey)
                                    }
                                }else{
                                    setValueOfObject(object, value: json[key]!, key: propertyKey)


import UIKit
fileprivate func < <T : Comparable>(lhs: T?, rhs: T?) -> Bool {
    switch (lhs, rhs) {
    case let (l?, r?):
        return l < r
    case (nil, _?):
        return true
    default:
        return false
    }
}

fileprivate func > <T : Comparable>(lhs: T?, rhs: T?) -> Bool {
    switch (lhs, rhs) {
    case let (l?, r?):
        return l > r
    default:
        return rhs < lhs
    }
}


