diff --git a/.idea/xcode.xml b/.idea/xcode.xml
index e3905c7..46d81b7 100644
--- a/.idea/xcode.xml
+++ b/.idea/xcode.xml
@@ -1,4 +1,4 @@
-
+
\ No newline at end of file
diff --git a/App/Base.lproj/Main.storyboard b/App/Base.lproj/Main.storyboard
index 9a2e0c6..badcc7d 100644
--- a/App/Base.lproj/Main.storyboard
+++ b/App/Base.lproj/Main.storyboard
@@ -1435,6 +1435,9 @@
+
+
+
@@ -1464,6 +1467,7 @@
+
@@ -1740,6 +1744,7 @@
+
diff --git a/App/Localizable.strings b/App/Localizable.strings
index e038c87..3d61a4b 100644
--- a/App/Localizable.strings
+++ b/App/Localizable.strings
@@ -1,5 +1,5 @@
-khong_de_trong = "Không được để trống";
-muc_chup_da_ton_tai = "Mục chụp đã tồn tại";
+khong_de_trong = "Can not be empty";
+muc_chup_da_ton_tai = "existed";
empty_muc_chup = "No item for Shooting";
//co_luu_anh_khong = "Sau khi chụp và sau khi đã chọn ảnh từ list sẽ hiển thị pop up có lưu ảnh không?";
@@ -7,7 +7,11 @@ empty_muc_chup = "No item for Shooting";
//no = "no";
co_chup_lai_khong = "bạn có muốn chụp lại không?";
"OK"= "OK";
+"Loading"= "Loading";
+"Uploading" = "Uploading";
"list_empty"= "Empty";
+"successful"= "successful";
+"Has_Error_occurred" = "Error has occurred, please check internet connection and try again.";
//Camera =======
diff --git a/App/addPerson/VCConfirmId.swift b/App/addPerson/VCConfirmId.swift
index bb6d33d..660a9ea 100644
--- a/App/addPerson/VCConfirmId.swift
+++ b/App/addPerson/VCConfirmId.swift
@@ -5,30 +5,35 @@ class VCConfirmId: UIViewController {
@IBOutlet weak var topMargin: NSLayoutConstraint!
@IBOutlet weak var vTopLogo: VTopLogo!
+ weak var vcHome: VCHome?
+
static func openController(_ viewController: UIViewController) {
let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let vcOpen = storyboard.instantiateViewController(withIdentifier: "VCConfirmId") as! VCConfirmId
+ vcOpen.vcHome = viewController as? VCHome
viewController.present(vcOpen, animated: true, completion: nil)
}
+ override func viewDidLoad() {
+ super.viewDidLoad()
+ vTopLogo.leftBtnClick = { self.dismiss(animated: true) }
+ edtTitle.text = getIDWork()
+ }
@IBAction func btnLeftClick(_ sender: Any) {
dismiss(animated: true)
}
@IBAction func btnRightClick(_ sender: Any) {
+ dismiss(animated: true)
+ self.vcHome?.getVcRoot()?.changeCurrentController(VCInputId.getInstance())
}
@IBAction func edtActionTrigerClick(_ sender: Any) {
edtTitle.endEditing(true)
}
-
- override func viewDidDisappear(_ animated: Bool) {
- super.viewDidDisappear(animated)
- }
-
- override var prefersStatusBarHidden : Bool {
+ override var prefersStatusBarHidden: Bool {
return true
}
}
diff --git a/App/commons/CellMucChupWithCamera.swift b/App/commons/CellMucChupWithCamera.swift
index 882721e..e33b98d 100644
--- a/App/commons/CellMucChupWithCamera.swift
+++ b/App/commons/CellMucChupWithCamera.swift
@@ -1,10 +1,11 @@
import Foundation
import UIKit
import GeneralUtils
+import Alamofire
class CellMucChupWithCamera: BaseTableViewCellUI {
var tvTitle: UILabel!, imv: UIImageView!
- var mucChup: ShootItem!
+ var shootItem: ShootItem!
static func registerClass(tableView: UITableView, forCellReuseIdentifier: String) {
tableView.register(CellMucChupWithCamera.self, forCellReuseIdentifier: forCellReuseIdentifier)
@@ -50,30 +51,22 @@ class CellMucChupWithCamera: BaseTableViewCellUI {
func titleClick() {
guard let viewController = self.viewController else { return }
if viewController is VCConfirmMucDaChon { return }
- var imgObjs = [ImgObj]()
- var imgObj = ImgObj()
- imgObj.url = "http://thosonnha.nhq.vn/wp-content/uploads/2015/05/son-lot-tuong.jpg"
- imgObjs.append(imgObj)
-
- imgObj = ImgObj()
- imgObj.url = "http://media.vietq.vn/files/meo-tay-vet-ban-tren-tuong-1.jpg"
- imgObjs.append(imgObj)
-
- imgObj = ImgObj()
- imgObj.url = "http://file1.batdongsan.com.vn/file.396375.jpg"
- imgObjs.append(imgObj)
-
- VCPageImgs.openController(viewController, imgObjs: imgObjs)
+ if let imgs = shootItem.imgs, imgs.count > 0 {
+ VCPageImgs.openController(viewController, imgObjs: imgs)
+ }
}
func btnImvClick() {
guard let viewController = self.viewController else { return }
if viewController is VCConfirmMucDaChon { return }
- let cameraViewController = CameraViewController(croppingEnabled: false, allowsLibraryAccess: true) { [weak viewController, weak self] image, asset in
- viewController?.dismiss(animated: true, completion: nil)
+ let cameraViewController = CameraViewController(croppingEnabled: false, allowsLibraryAccess: true) { image, asset in
+ viewController.dismiss(animated: true, completion: nil)
guard let image = image else { return }
- self?.imv?.image = image
- //TODO save image
+ self.imv?.image = image
+ guard let id = self.shootItem.id, let data = UIImageJPEGRepresentation(image, 1.0) else { return }
+ let signboard = self.shootItem?.signboard ?? 1
+
+ self.uploadImage(id: id, signboard: signboard, data: data)
}
viewController.present(cameraViewController, animated: true, completion: nil)
@@ -81,7 +74,54 @@ class CellMucChupWithCamera: BaseTableViewCellUI {
override func configCellWithData(baseObj: Any, index: Int) {
super.configCellWithData(baseObj: baseObj, index: index)
- mucChup = baseObj as! ShootItem
- tvTitle.text = mucChup.name
+ shootItem = baseObj as! ShootItem
+ tvTitle.text = shootItem.name
+ if let imgs = shootItem.imgs, imgs.count > 0, let imgUrl = imgs[0].url {
+ setImageUrl(imv: imv, imageUrl: imgUrl)
+ } else {
+ imv.image = #imageLiteral(resourceName:"camera_black_ic").imageWithInsets(insetDimen: 10) ?? #imageLiteral(resourceName:"camera_black_ic")
+ }
+ }
+
+ //region upload =======
+ fileprivate func uploadImage(id: Int, signboard: Int, data: Data) {
+ let tvProgress = SwiftOverlays.showBlockingWaitOverlayWithText(LocalizedString("Uploading") + ".....")
+ Alamofire.upload(multipartFormData: { (multipartFormData: MultipartFormData) in
+ multipartFormData.append(data, withName: "file", fileName: "file_\(DataTypeUtils.getCurrentTimeSecond()).jpg", mimeType: "image/jpeg")
+ multipartFormData.append("\(id)".data(using: String.Encoding.utf8)!, withName: "idShooting")
+ multipartFormData.append("\(signboard)".data(using: String.Encoding.utf8)!, withName: "signboard")
+// if let note = self.shootItem. {
+//multipartFormData.append("\(note)".data(using: String.Encoding.utf8)!, withName: "note")
+// }
+ }, to: Constants.PathManager.ROOT_SERVER + "api/board/store", method: .post, encodingCompletion: { (encodingResult: SessionManager.MultipartFormDataEncodingResult) in
+ switch encodingResult {
+ case .success(let upload, _, _):
+ upload.uploadProgress(closure: { progress in
+ CommonUtils.excuteOnMainThread({tvProgress.text = (LocalizedString("Uploading") + " \(Int(progress.fractionCompleted * 100))%")})
+ })
+ .responseString { response in
+ SwiftOverlays.removeAllBlockingOverlays()
+ debugPrint("SUCCESS RESPONSE: \(response.result.value)")
+ if let value = response.result.value{
+ let json = JSON.parse(value)
+ if let isSuccess = json["isSuccess"].bool, isSuccess, let url = json["url"].string{
+ self.shootItem.addImg(img: ImgObj(url: url, signboard: signboard, date: nil, note: nil))
+ CommonUtils.showToastLong(text: LocalizedString("successful"))
+ return
+ }
+ }
+ self.handleError()
+ }
+ case .failure(let encodingError):
+ SwiftOverlays.removeAllBlockingOverlays()
+ self.handleError()
+ print("ERROR RESPONSE: \(encodingError)")
+ }
+ })
+ }
+
+ fileprivate func handleError() {
+ //DialogUtils.showQuestion(messageParam: <#T##String?##Swift.String?#>, yesAction: <#T##@escaping () -> Void##@escaping () -> Swift.Void#>)
}
+ //endregion
}
diff --git a/App/commons/VCRoot.swift b/App/commons/VCRoot.swift
index 8c07aee..49e3075 100644
--- a/App/commons/VCRoot.swift
+++ b/App/commons/VCRoot.swift
@@ -1,5 +1,6 @@
import UIKit
import Foundation
+import GeneralUtils
class VCRoot: VCContainerFullScreen {
var id: String?
@@ -10,7 +11,14 @@ class VCRoot: VCContainerFullScreen {
override func viewDidLoad() {
super.viewDidLoad()
-// changeCurrentController(VCInputId.getInstance()) //TODO: neu chua co id -> Ra cai nay
- changeCurrentController(VCHome.getInstance())
+ if let _ = PreferenceUtils.getString(key: Constants.PreferenceKeys.ID) {
+ changeCurrentController(VCHome.getInstance())
+ } else {
+ changeCurrentController(VCInputId.getInstance())
+ }
}
}
+
+func getIDWork() -> String {
+ return PreferenceUtils.getString(key: Constants.PreferenceKeys.ID)!
+}
diff --git a/App/createNew/CellChonMucChup.swift b/App/createNew/CellChonMucChup.swift
index c55f0b6..428087e 100644
--- a/App/createNew/CellChonMucChup.swift
+++ b/App/createNew/CellChonMucChup.swift
@@ -37,7 +37,7 @@ class CellChonMucChup: BaseTableViewCellUI {
mucChup = baseObj as! ShootItem
tvTitle.text = mucChup.name
- if mucChup.isSelected == true {
+ if mucChup.willShoot == 1 {
self.contentView.backgroundColor = UIColor(hexString: "#1C9CF6")
} else {
self.contentView.backgroundColor = UIColor.white
diff --git a/App/createNew/VCChonMucChup.swift b/App/createNew/VCChonMucChup.swift
index bd56aab..a164448 100644
--- a/App/createNew/VCChonMucChup.swift
+++ b/App/createNew/VCChonMucChup.swift
@@ -55,10 +55,10 @@ class VCChonMucChup: UIViewController, IVCLoadDataTableViewUIThread {
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if let mucChup = self.tableView.getItem(indexPath) as? ShootItem {
- if mucChup.isSelected == true {
- mucChup.isSelected = nil
+ if mucChup.willShoot == 1 {
+ mucChup.willShoot = nil
} else {
- mucChup.isSelected = true
+ mucChup.willShoot = 1
}
self.tableView.reloadRows(at: [indexPath], with: .none)
}
diff --git a/App/createNew/VCConfirmMucDaChon.swift b/App/createNew/VCConfirmMucDaChon.swift
index 4bd5b57..594ba27 100644
--- a/App/createNew/VCConfirmMucDaChon.swift
+++ b/App/createNew/VCConfirmMucDaChon.swift
@@ -44,7 +44,7 @@ class VCConfirmMucDaChon: UIViewController, IVCLoadDataTableViewUIThread {
if let list = getVcRoot()?.mucChups {
var mucChups = [ShootItem]()
for item in list {
- if item.isSelected == true { mucChups.append(item) }
+ if item.willShoot == 1 { mucChups.append(item) }
}
complete(mucChups)
} else {
diff --git a/App/createNew/VCRootCreateNew.swift b/App/createNew/VCRootCreateNew.swift
index 683bfa2..d971a85 100644
--- a/App/createNew/VCRootCreateNew.swift
+++ b/App/createNew/VCRootCreateNew.swift
@@ -1,9 +1,12 @@
import UIKit
import Foundation
+import GeneralUtils
+import Alamofire
class VCRootCreateNew: VCContainerFullScreen {
var tenCty: String?, tenCtruong: String?
var mucChups: [ShootItem]?
+ var signboard: Int = 1
static func openController(_ viewController: UIViewController) {
let vcOpen = VCRootCreateNew()
@@ -15,5 +18,30 @@ class VCRootCreateNew: VCContainerFullScreen {
changeCurrentController(VCNhapTenCty.getInstance())
}
-
+ func createNewToServer() {
+ var ShootingItem = [Any]()
+ if let mucChups = mucChups {
+ for item in mucChups {
+ if let name = item.name {
+ ShootingItem.append(["name": name, "willShoot": (item.willShoot == 1)])
+ }
+ }
+ }
+ let parameters: Parameters = [
+ "idWorker": getIDWork(),
+ "signboard": signboard == 1,
+ "companyName": tenCty ?? "",
+ "constructionName": tenCtruong ?? "",
+ "ShootingItem": ShootingItem
+ ]
+ NetWorkUtils.excutePostTypeRawJSONEncoding(parameters: parameters, url: Constants.PathManager.ROOT_SERVER + "api/regulations/store",
+ isShowProgress: true, vc: self, responseStringParam: { response in
+ if response.result.isSuccess {
+ CommonUtils.showToastLong(text: LocalizedString("successful"))
+ self.dismiss(animated: true)
+ } else {
+ DialogUtils.builderDialog(showCloseButton: true, showTitle: false).showError("", subTitle: LocalizedString("Has_Error_occurred"))
+ }
+ })
+ }
}
diff --git a/App/createNew/VCSettingBienQC.swift b/App/createNew/VCSettingBienQC.swift
index 1c013b0..34c80de 100644
--- a/App/createNew/VCSettingBienQC.swift
+++ b/App/createNew/VCSettingBienQC.swift
@@ -3,6 +3,7 @@ import UIKit
class VCSettingBienQC: UIViewController {
@IBOutlet weak var topMargin: NSLayoutConstraint!
@IBOutlet weak var vTopLogo: VTopLogo!
+ @IBOutlet weak var swich: UISwitch!
static func getInstance() -> VCSettingBienQC {
let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
@@ -16,17 +17,26 @@ class VCSettingBienQC: UIViewController {
self.btnLeftClick(self.vTopLogo)
}
}
+
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
+ if getVcRoot()?.signboard == 0{
+ swich.isOn = false
+ }else{
+ swich.isOn = true
+ }
}
@IBAction func btnLeftClick(_ sender: Any) {
_ = getVcRoot()?.changeCurrentController(VCConfirmMucDaChon.getInstance())
}
+ @IBAction func swichValueChange(_ sender: Any) {
+ getVcRoot()?.signboard = swich.isOn ? 1 : 0
+ }
+
@IBAction func btnRightClick(_ sender: Any) {
- getVcRoot()?.dismiss(animated: true)
- //TODO: server
+ getVcRoot()?.createNewToServer()
}
func getVcRoot() -> VCRootCreateNew? {
diff --git a/App/firstInput/VCInputId.swift b/App/firstInput/VCInputId.swift
index e630ba2..9fbafd2 100644
--- a/App/firstInput/VCInputId.swift
+++ b/App/firstInput/VCInputId.swift
@@ -14,14 +14,24 @@ class VCInputId: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
registerKeyBoardEvent()
- edtId.text = getVcRoot()?.id
+ if let id = getVcRoot()?.id {
+ edtId.text = id
+ } else {
+ edtId.text = PreferenceUtils.getString(key: Constants.PreferenceKeys.ID)
+ }
}
@IBAction func btnUnknowClick(_ sender: Any) {
+ _ = getVcRoot()?.changeCurrentController(VCSendTraoDoi.getInstance())
}
@IBAction func btnNextClick(_ sender: Any) {
- _ = getVcRoot()?.changeCurrentController(VCSendTraoDoi.getInstance())
+ if let id: String = edtId.text?.trimAndReturn(), id.length > 0 {
+ PreferenceUtils.saveString(key: Constants.PreferenceKeys.ID, value: id)
+ _ = getVcRoot()?.changeCurrentController(VCHome.getInstance())
+ } else {
+ CommonUtils.showToastLong(text: LocalizedString("khong_de_trong"))
+ }
}
@IBAction func edtActionTrigerClick(_ sender: Any) {
diff --git a/App/firstInput/VCNoiDungTraoDoi.swift b/App/firstInput/VCNoiDungTraoDoi.swift
index 82c9140..cb101d8 100644
--- a/App/firstInput/VCNoiDungTraoDoi.swift
+++ b/App/firstInput/VCNoiDungTraoDoi.swift
@@ -13,7 +13,7 @@ class VCNoiDungTraoDoi: UIViewController {
}
@IBAction func btnBackToTopClick(_ sender: Any) {
- _ = getVcRoot()?.changeCurrentController(VCHome.getInstance())
+ _ = getVcRoot()?.changeCurrentController(VCInputId.getInstance())
}
func getVcRoot() -> VCRoot? {
diff --git a/App/listCtruong/CellCtruong.swift b/App/listCtruong/CellCtruong.swift
index 53e3f8c..4ed52d6 100644
--- a/App/listCtruong/CellCtruong.swift
+++ b/App/listCtruong/CellCtruong.swift
@@ -9,12 +9,17 @@ class CellCtruong: BaseTableViewCellUI {
var ctruong: CongTruong!
+ override func awakeFromNib() {
+ super.awakeFromNib()
+ self.selectionStyle = .none
+ }
+
override func configCellWithData(baseObj: Any, index: Int) {
super.configCellWithData(baseObj: baseObj, index: index)
ctruong = baseObj as! CongTruong
- tvTitle.text = ctruong.tenCtuong
- tvCatured.text = String(ctruong.daChup ?? 0)
- tvRemaining.text = String(ctruong.conLai ?? 0)
+ tvTitle.text = ctruong.companyName
+ tvCatured.text = String(ctruong.noCaptured ?? 0)
+ tvRemaining.text = String(ctruong.noRemain ?? 0)
}
}
diff --git a/App/listCtruong/VCListCtruong.swift b/App/listCtruong/VCListCtruong.swift
index 50fdfda..0b38f5e 100644
--- a/App/listCtruong/VCListCtruong.swift
+++ b/App/listCtruong/VCListCtruong.swift
@@ -24,7 +24,10 @@ class VCListCtruong: UIViewController, IVCLoadDataTableViewUIThread {
}
//region TableView ========
func loadDataOnUI(complete: @escaping ([Any]?) -> ()) {
- complete(AppUtils.getListCtruong())
+// complete(AppUtils.getListCtruong())
+ NetWorkUtils.excuteHttpGet(urlStr: Constants.PathManager.ROOT_SERVER + "api/regulations/get/" + getIDWork(), completeArray: { (result: [CongTruong]?, errorText: String?) in
+ complete(result)
+ })
}
func getAllCell() -> [BaseCell] {
diff --git a/App/listCtruong/VCShootItemList.swift b/App/listCtruong/VCShootItemList.swift
index cb4ad35..ec0c565 100644
--- a/App/listCtruong/VCShootItemList.swift
+++ b/App/listCtruong/VCShootItemList.swift
@@ -5,6 +5,7 @@ class VCShootItemList: UIViewController, IVCLoadDataTableViewUIThread {
@IBOutlet weak var topMargin: NSLayoutConstraint!
@IBOutlet weak var tableView: UITableViewLoadDataFromUIThread!
@IBOutlet weak var imvLogo: UIImageView!
+ @IBOutlet weak var tvTitle: UILabel!
var cTruong: CongTruong!
@@ -17,7 +18,7 @@ class VCShootItemList: UIViewController, IVCLoadDataTableViewUIThread {
override func viewDidLoad() {
super.viewDidLoad()
- tableView.emptyText = localizedString("empty_muc_chup")
+ tableView.emptyText = LocalizedString("empty_muc_chup")
CellMucChupWithCamera.registerClass(tableView: tableView, forCellReuseIdentifier: "CellMucChupWithCamera")
self.tableView.separatorStyle = UITableViewCellSeparatorStyle.singleLine
self.tableView.rowHeight = UITableViewAutomaticDimension
@@ -25,6 +26,7 @@ class VCShootItemList: UIViewController, IVCLoadDataTableViewUIThread {
let tap = UITapGestureRecognizer.init(target: self, action: #selector(VCShootItemList.logoClick))
imvLogo.addGestureRecognizer(tap)
tableView.initAndLoadData(self)
+ tvTitle.text = cTruong.constructionName
}
@IBAction func btnEditClick(_ sender: Any) {
@@ -34,8 +36,17 @@ class VCShootItemList: UIViewController, IVCLoadDataTableViewUIThread {
//region ============== TableView Data =========
func loadDataOnUI(complete: @escaping ([Any]?) -> ()) {
- print("VCListCtruong: Load data UI")
- complete(cTruong.shootItems)
+ guard let shootItems = cTruong.shootItems else {
+ complete(nil)
+ return
+ }
+ var shootItemsWillShoot = [ShootItem]()
+ for item in shootItems {
+ if let willShoot = item.willShoot, willShoot > 0 {
+ shootItemsWillShoot.append(item)
+ }
+ }
+ complete(shootItemsWillShoot)
}
func getAllCell() -> [BaseCell] {
diff --git a/App/model/CongTruong.swift b/App/model/CongTruong.swift
index 90fef33..0f1d410 100644
--- a/App/model/CongTruong.swift
+++ b/App/model/CongTruong.swift
@@ -1,10 +1,25 @@
import Foundation
+import GeneralUtils
-class CongTruong {
- var tenCtuong: String?
- var tenCty: String?
- var daChup: Int?, conLai: Int?
+class CongTruong: Mappable {
+ var id: Int?
+ var companyName: String?
+ var constructionName: String?
+ var noCaptured: Int?, noRemain: Int?
var shootItems: [ShootItem]?
+ var signboard: Int?
+ // region: ========== Mappable
+ init() {}
+ required init?(map: Map) {}
+ func mapping(map: Map) {
+ companyName <- map["companyName"]
+ constructionName <- map["constructionName"]
+ noCaptured <- map["noCaptured"]
+ noRemain <- map["noRemain"]
+ shootItems <- map["shootingItems"]
+ signboard <- map["signboard"]
+ }
+ //endregion
}
diff --git a/App/model/ImgObj.swift b/App/model/ImgObj.swift
index d28ddd0..4c82e2b 100644
--- a/App/model/ImgObj.swift
+++ b/App/model/ImgObj.swift
@@ -1,8 +1,28 @@
import Foundation
+import GeneralUtils
-class ImgObj {
- var url: String!
- var signboard: Bool?
+class ImgObj: Mappable {
+ var url: String?
+ var signboard: Int?
var date: Int64?
var note: String?
+
+ init() {}
+ init(url: String, signboard: Int?, date: Int64?, note: String?) {
+ self.url = url
+ self.signboard = signboard
+ self.date = date
+ self.note = note
+ }
+
+ // region: ========== Mappable
+ required init?(map: Map) {}
+
+ func mapping(map: Map) {
+ url <- map["url"]
+ signboard <- map["signboard"]
+ date <- map["date"]
+ note <- map["note"]
+ }
+ //endregion
}
diff --git a/App/model/MucChup.swift b/App/model/MucChup.swift
deleted file mode 100644
index e384740..0000000
--- a/App/model/MucChup.swift
+++ /dev/null
@@ -1,19 +0,0 @@
-import Foundation
-
-class ShootItem: Equatable {
- var id: Int?
- var name: String?
- var isSelected: Bool?
-
- init(id: Int? = nil, name: String? = nil) {
- self.id = id
- self.name = name
- }
-}
-
-func ==(lhs: ShootItem, rhs: ShootItem) -> Bool {
- if let lhsName = lhs.name, let rhsName = rhs.name {
- return lhsName == rhsName
- }
- return ObjectIdentifier(lhs) == ObjectIdentifier(rhs)
-}
diff --git a/App/model/ShootItem.swift b/App/model/ShootItem.swift
new file mode 100644
index 0000000..dd8648c
--- /dev/null
+++ b/App/model/ShootItem.swift
@@ -0,0 +1,40 @@
+import Foundation
+import GeneralUtils
+
+class ShootItem: Equatable, Mappable {
+ var id: Int?
+ var name: String?
+ var willShoot: Int?
+ var signboard: Int?
+ var imgs: [ImgObj]?
+
+ init(id: Int? = nil, name: String? = nil) {
+ self.id = id
+ self.name = name
+ }
+
+ func addImg(img: ImgObj) {
+ if imgs == nil { imgs = [ImgObj]() }
+ imgs?.append(img)
+ }
+
+ // region: ========== Mappable
+ init() {}
+ required init?(map: Map) {}
+
+ func mapping(map: Map) {
+ id <- map["id"]
+ name <- map["name"]
+ willShoot <- map["willShoot"]
+ imgs <- map["imgs"]
+ }
+ //endregion
+}
+
+func ==(lhs: ShootItem, rhs: ShootItem) -> Bool {
+ if let lhsName = lhs.name, let rhsName = rhs.name {
+ return lhsName == rhsName
+ }
+ return ObjectIdentifier(lhs) == ObjectIdentifier(rhs)
+}
+
diff --git a/App/utils/AppUtils.swift b/App/utils/AppUtils.swift
index 9348fe6..703bc38 100644
--- a/App/utils/AppUtils.swift
+++ b/App/utils/AppUtils.swift
@@ -14,23 +14,23 @@ class AppUtils {
shootItems.append(ShootItem(id: nil, name: "仕上げ"))
var ctruong = CongTruong()
- ctruong.tenCtuong = "山田 花子様"
- ctruong.daChup = 1
- ctruong.conLai = 4
+ ctruong.companyName = "山田 花子様"
+ ctruong.noCaptured = 1
+ ctruong.noRemain = 4
ctruong.shootItems = shootItems
result.append(ctruong)
ctruong = CongTruong()
- ctruong.tenCtuong = "鈴木 一郎様"
- ctruong.daChup = 12
- ctruong.conLai = 1
+ ctruong.companyName = "鈴木 一郎様"
+ ctruong.noCaptured = 12
+ ctruong.noRemain = 1
ctruong.shootItems = shootItems
result.append(ctruong)
ctruong = CongTruong()
- ctruong.tenCtuong = "斎藤 太郎様"
- ctruong.daChup = 0
- ctruong.conLai = 24
+ ctruong.companyName = "斎藤 太郎様"
+ ctruong.noCaptured = 0
+ ctruong.noRemain = 24
ctruong.shootItems = shootItems
result.append(ctruong)
diff --git a/App/utils/Constants.swift b/App/utils/Constants.swift
new file mode 100644
index 0000000..77d4652
--- /dev/null
+++ b/App/utils/Constants.swift
@@ -0,0 +1,16 @@
+//
+// Created by Philip Tran on 3/4/17.
+//
+
+import Foundation
+
+struct Constants {
+
+ struct PreferenceKeys {
+ static let ID = "ID";
+ }
+
+ struct PathManager{
+ static let ROOT_SERVER = "https://api-morooka.herokuapp.com/"
+ }
+}
diff --git a/App/utils/FileUpload.swift b/App/utils/FileUpload.swift
new file mode 100644
index 0000000..bfc141c
--- /dev/null
+++ b/App/utils/FileUpload.swift
@@ -0,0 +1,110 @@
+import Foundation
+import Alamofire
+
+private struct FileUploadInfo {
+ var name: String
+ var mimeType: String
+ var fileName: String
+ var url: URL?
+ var data: Data?
+
+ init(name: String, withFileURL url: URL, withMimeType mimeType: String? = nil) {
+ self.name = name
+ self.url = url
+ self.fileName = name
+ self.mimeType = "application/octet-stream"
+ if mimeType != nil {
+ self.mimeType = mimeType!
+ }
+ fileName = url.lastPathComponent
+ if mimeType == nil {
+ let _extension = url.pathExtension
+ switch _extension.lowercased() {
+ case "jpeg", "jpg":
+ self.mimeType = "image/jpeg"
+
+ case "png":
+ self.mimeType = "image/png"
+
+ default:
+ self.mimeType = "application/octet-stream"
+ }
+ }
+ }
+
+ init(name: String, withData data: Data, withMimeType mimeType: String) {
+ self.name = name
+ self.data = data
+ self.fileName = name
+ self.mimeType = mimeType
+ }
+}
+
+class FileUploader {
+
+ private var parameters = [String: String]()
+ private var files = [FileUploadInfo]()
+ private var headers = [String: String]()
+
+ func setValue(value: String, forParameter parameter: String) {
+ parameters[parameter] = value
+ }
+
+ func setValue(value: String, forHeader header: String) {
+ headers[header] = value
+ }
+
+ func addParametersFrom(_ map: [String: String]) {
+ for (key, value) in map {
+ parameters[key] = value
+ }
+ }
+
+ func addHeadersFrom(_ map: [String: String]) {
+ for (key, value) in map {
+ headers[key] = value
+ }
+ }
+
+ func addFileURL(url: URL, withName name: String, withMimeType mimeType: String? = nil) {
+ files.append(FileUploadInfo(name: name, withFileURL: url, withMimeType: mimeType))
+ }
+
+ func addFileData(data: Data, withName name: String, withMimeType mimeType: String = "application/octet-stream") {
+ files.append(FileUploadInfo(name: name, withData: data, withMimeType: mimeType))
+ }
+
+ func uploadFile(to: String, method: HTTPMethod) -> UploadRequest? {
+ let data = NSMutableData()
+ let boundary = "FileUploader-boundary-\(arc4random())-\(arc4random())"
+ // Amazon S3 (probably others) wont take parameters after files, so we put them first
+ for (key, value) in parameters {
+ data.append("\r\n--\(boundary)\r\n".data(using: String.Encoding.utf8)!)
+ data.append("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n\(value)".data(using: String.Encoding.utf8)!)
+ }
+
+ for fileUploadInfo in files {
+ data.append("\r\n--\(boundary)\r\n".data(using: String.Encoding.utf8)!)
+ data.append("Content-Disposition: form-data; name=\"\(fileUploadInfo.name)\"; filename=\"\(fileUploadInfo.fileName)\"\r\n".data(using: String.Encoding.utf8)!)
+ data.append("Content-Type: \(fileUploadInfo.mimeType)\r\n\r\n".data(using: String.Encoding.utf8)!)
+ if fileUploadInfo.data != nil {
+ data.append(fileUploadInfo.data!)
+ } else if fileUploadInfo.url != nil, let fileData = try? Data(contentsOf: fileUploadInfo.url!) {
+ data.append(fileData)
+ } else {
+ // ToDo: report error
+ return nil
+ }
+ }
+ data.append("\r\n--\(boundary)--\r\n".data(using: String.Encoding.utf8)!)
+
+ var headerParam = HTTPHeaders()
+ headerParam["multipart/form-data;boundary=\(boundary)"] = "Content-Type"
+ for (name, value) in headers {
+ headerParam[value] = name
+ }
+
+ return Alamofire.upload(Data(referencing: data), to: to, method: method, headers: headerParam)
+ }
+
+}
\ No newline at end of file
diff --git a/App/utils/NetWorkUtils.swift b/App/utils/NetWorkUtils.swift
new file mode 100644
index 0000000..4468e99
--- /dev/null
+++ b/App/utils/NetWorkUtils.swift
@@ -0,0 +1,39 @@
+import GeneralUtils
+import Foundation
+import Alamofire
+
+extension NetWorkUtils {
+
+ /**
+ The JSONEncoding type creates a JSON representation of the parameters object, which is set as the HTTP body of the request. The Content-Type HTTP header field of an encoded request is set to application/json.
+
+ */
+ public static func excutePostTypeRawJSONEncoding(parameters: Parameters, url: String, isShowProgress: Bool? = nil, vc: UIViewController? = nil,
+ responseStringParam: @escaping (DataResponse) -> Void) {
+ NetWorkUtils.excutePost(parameters: parameters, url: url, isShowProgress: isShowProgress, vc: vc, encoding: JSONEncoding.default, responseStringParam: responseStringParam)
+ }
+
+ public static func excutePostTypeFormURLEncoded(parameters: Parameters, url: String, isShowProgress: Bool? = nil, vc: UIViewController? = nil,
+ responseStringParam: @escaping (DataResponse) -> Void) {
+ NetWorkUtils.excutePost(parameters: parameters, url: url, isShowProgress: isShowProgress, vc: vc, encoding: URLEncoding.default, responseStringParam: responseStringParam)
+ }
+
+ public static func excutePostTypePropertyListEncoding(parameters: Parameters, url: String, isShowProgress: Bool? = nil, vc: UIViewController? = nil,
+ responseStringParam: @escaping (DataResponse) -> Void) {
+ NetWorkUtils.excutePost(parameters: parameters, url: url, isShowProgress: isShowProgress, vc: vc, encoding: PropertyListEncoding.default, responseStringParam: responseStringParam)
+ }
+
+ public static func excutePost(parameters: Parameters, url: String, isShowProgress: Bool? = nil, vc: UIViewController? = nil, encoding: ParameterEncoding,
+ responseStringParam: @escaping (DataResponse) -> Void) {
+ if isShowProgress == true {
+ vc?.showWaitOverlay(isBlockTouch: true)
+ }
+ Alamofire.request(url, method: .post, parameters: parameters, encoding: encoding)
+ .responseString { response in
+ if isShowProgress == true {
+ vc?.removeAllOverlays()
+ }
+ responseStringParam(response)
+ }
+ }
+}
\ No newline at end of file
diff --git a/GeneralUtils/.idea/GeneralUtils.iml b/GeneralUtils/.idea/GeneralUtils.iml
new file mode 100644
index 0000000..74121dc
--- /dev/null
+++ b/GeneralUtils/.idea/GeneralUtils.iml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/GeneralUtils/.idea/encodings.xml b/GeneralUtils/.idea/encodings.xml
new file mode 100644
index 0000000..97626ba
--- /dev/null
+++ b/GeneralUtils/.idea/encodings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/GeneralUtils/.idea/inspectionProfiles/Project_Default.xml b/GeneralUtils/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..8d66637
--- /dev/null
+++ b/GeneralUtils/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/GeneralUtils/.idea/misc.xml b/GeneralUtils/.idea/misc.xml
new file mode 100644
index 0000000..e1f8477
--- /dev/null
+++ b/GeneralUtils/.idea/misc.xml
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Objective-C
+
+
+ RELAX NG
+
+
+ Spelling
+
+
+ Swift
+
+
+ TypeScript
+
+
+
+
+ Objective-C
+
+
+
+
+
+
+
+
+
+ 1.7
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/GeneralUtils/.idea/modules.xml b/GeneralUtils/.idea/modules.xml
new file mode 100644
index 0000000..a48e046
--- /dev/null
+++ b/GeneralUtils/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/GeneralUtils/.idea/vcs.xml b/GeneralUtils/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/GeneralUtils/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/GeneralUtils/.idea/workspace.xml b/GeneralUtils/.idea/workspace.xml
new file mode 100644
index 0000000..10a7426
--- /dev/null
+++ b/GeneralUtils/.idea/workspace.xml
@@ -0,0 +1,715 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ DEFINITION_ORDER
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ project
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1488469363911
+
+
+ 1488469363911
+
+
+
+
+
+
+
+
+
+
+ 1488469537760
+
+
+
+ 1488469537760
+
+
+ 1488470556293
+
+
+
+ 1488470556293
+
+
+ 1488471395256
+
+
+
+ 1488471395256
+
+
+ 1488508151673
+
+
+
+ 1488508151673
+
+
+ 1488508233306
+
+
+
+ 1488508233306
+
+
+ 1488509320246
+
+
+
+ 1488509320246
+
+
+ 1488510219152
+
+
+
+ 1488510219152
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/GeneralUtils/.idea/xcode.xml b/GeneralUtils/.idea/xcode.xml
new file mode 100644
index 0000000..60e5770
--- /dev/null
+++ b/GeneralUtils/.idea/xcode.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/GeneralUtils/GeneralUtils.podspec b/GeneralUtils/GeneralUtils.podspec
new file mode 100644
index 0000000..afac799
--- /dev/null
+++ b/GeneralUtils/GeneralUtils.podspec
@@ -0,0 +1,15 @@
+Pod::Spec.new do |s|
+ s.platform = :ios
+ s.ios.deployment_target = '9.0'
+ s.name = "GeneralUtils"
+ s.summary = "GeneralUtils is network manager"
+ s.requires_arc = true
+ s.version = "1.1"
+ s.license = { :type => "MIT", :file => "LICENSE" }
+ s.author = { "Quan Trinh" => "quanptit410@gmail.com" }
+ s.homepage = "https://github.com/quanptit/GeneralUtils"
+ s.source = { :git => "https://github.com/quanptit/GeneralUtils.git", :tag => "#{s.version}"}
+ s.framework = "UIKit"
+ s.source_files = "GeneralUtils/**/*.{swift,h,m}"
+ #s.resources = "GeneralUtils/**/*.{png,jpeg,jpg,storyboard,xib}"
+end
\ No newline at end of file
diff --git a/GeneralUtils/GeneralUtils.xcodeproj/project.pbxproj b/GeneralUtils/GeneralUtils.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..f4370f4
--- /dev/null
+++ b/GeneralUtils/GeneralUtils.xcodeproj/project.pbxproj
@@ -0,0 +1,1169 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 660BB017307C97835E430B85 /* Generics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB7C469F3295449B48747 /* Generics.swift */; };
+ 660BB02813284FF82C9A5C68 /* RandomBytesSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB176F48EC804605D945A /* RandomBytesSequence.swift */; };
+ 660BB05547B110F273DFEBFE /* UIButtonCustom.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB810558E7D7420EF7BE0 /* UIButtonCustom.swift */; };
+ 660BB09490F2E44D8A54B835 /* SCLAlertView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB0E5F9ECF184D4433074 /* SCLAlertView.swift */; };
+ 660BB096980E50195EC9E6C4 /* ToastWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB6C6DEBAEE62102CED69 /* ToastWindow.swift */; };
+ 660BB0AB7BCC0CD54BC3F694 /* Data+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBDD6CA2B01B39EEE98F0 /* Data+Extension.swift */; };
+ 660BB0CDC8E38699F67BDCDF /* Padding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB56D86EA67C397D97E4E /* Padding.swift */; };
+ 660BB10AC416E1F583DB5781 /* ToastCenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB9A0DFB90DDB7F1BD9A2 /* ToastCenter.swift */; };
+ 660BB1470B2BD1017A147821 /* UILabelCustom.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBE857B2FF54AFC7F5CC6 /* UILabelCustom.swift */; };
+ 660BB195A1D42FC892A02A44 /* String+FoundationExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBA5731B2425A91A7B7C4 /* String+FoundationExtension.swift */; };
+ 660BB1A4E46E2C1130AD3978 /* BaseUIPresentationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBD62C125875A7D977481 /* BaseUIPresentationController.swift */; };
+ 660BB1CED2484BBB77382C52 /* TransformType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB5012299257B8EA4C3DF /* TransformType.swift */; };
+ 660BB1E7887AA04473643D5E /* VCContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBD1E3926FDFEEA4C3E9B /* VCContainer.swift */; };
+ 660BB211B3285CA16F2CC432 /* PBKDF1.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB7C6CB72E9D07866674F /* PBKDF1.swift */; };
+ 660BB214E6EFB96A34FBBA3E /* Checksum.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBC70A8038A3A8EF66430 /* Checksum.swift */; };
+ 660BB22A39A192A41D4F3344 /* VPlayerControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBBB6BD143E05E992EDA8 /* VPlayerControl.swift */; };
+ 660BB23BB6D055996A8BF62B /* BlockModeOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB604C1941534593A1C44 /* BlockModeOptions.swift */; };
+ 660BB271F8FC8E5BA195C74E /* Authenticator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB961FF0DD677BD299896 /* Authenticator.swift */; };
+ 660BB275D72E072967319D3C /* DateFormatterTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBC4B54E57DC9FF98302D /* DateFormatterTransform.swift */; };
+ 660BB28A34746B71F32CBFA2 /* FromJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB0C57701B0E930D621DE /* FromJSON.swift */; };
+ 660BB28C653560033F478E62 /* Array+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB4D5825BC7F02DB04003 /* Array+Extension.swift */; };
+ 660BB296CC86AD7275DD7EBF /* UIViewCustomGradientBg.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB2DDB3FBB3B88F726D55 /* UIViewCustomGradientBg.swift */; };
+ 660BB29A28A9512DE1B658A1 /* UInt32+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBD3C1756EAE55528C2A3 /* UInt32+Extension.swift */; };
+ 660BB29C372A958C0B86C416 /* Queue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBDE96B42528FE255B5C5 /* Queue.swift */; };
+ 660BB2B063B9EEB6BAE10A4D /* CSArrayType+Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBBA0B59200A63CC5C49F /* CSArrayType+Foundation.swift */; };
+ 660BB2B2F6151FFF78E72CC8 /* UITableViewLoadDataBg.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBDDA727C4F10116C6DF3 /* UITableViewLoadDataBg.swift */; };
+ 660BB3029621648615E3E9E1 /* FileUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBB47A50033D64F099A59 /* FileUtils.swift */; };
+ 660BB3149D2BBC2BEF0E2CA7 /* RecordUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB1D9E1D3F3A4CA67C287 /* RecordUtils.swift */; };
+ 660BB3171CAED790D4BE5B12 /* CommonUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB091EE4A5B55273D74C2 /* CommonUtils.swift */; };
+ 660BB31B77CEBBF559611F63 /* Operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB53A77A128D39D246C80 /* Operators.swift */; };
+ 660BB33A23DDEC11377AFBC6 /* UITableViewLoadDataFromUIThread.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB06AB76AC8C25F03C45E /* UITableViewLoadDataFromUIThread.swift */; };
+ 660BB34B0E661054F3EE3F24 /* AES+Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBAD1B1ECD02481A86166 /* AES+Foundation.swift */; };
+ 660BB368E7B84778781FCE3C /* NetWorkUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBE4C5CC8638788123CFC /* NetWorkUtils.swift */; };
+ 660BB36DCF3F46251B8EE3FB /* OFB.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB63FA48D20F64E7601EB /* OFB.swift */; };
+ 660BB3747F292ACB52E42079 /* CBC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB2997837FA6B1C43C043 /* CBC.swift */; };
+ 660BB38A40811060B4268DDF /* TransformOperators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBF8A846AE94CA97F1325 /* TransformOperators.swift */; };
+ 660BB39B8103E48A8CCD11E4 /* RandomAccessBlockModeWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB37E485037901CB53692 /* RandomAccessBlockModeWorker.swift */; };
+ 660BB39E46E69ABBE1766E3A /* NoPadding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB5FBB1FC126C8B5DFDE0 /* NoPadding.swift */; };
+ 660BB3B75EE3FD06FCEA216B /* VTopNotification.xib in Resources */ = {isa = PBXBuildFile; fileRef = 660BBBAC2F5E734910E2F1FC /* VTopNotification.xib */; };
+ 660BB3BDAECA7622691BAA71 /* UICollectionViewLoadData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBD0E2B7CF1AD7818CCB3 /* UICollectionViewLoadData.swift */; };
+ 660BB3D0D6B9F632CA86D222 /* Collection+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBB9583DB947DB3A048A0 /* Collection+Extension.swift */; };
+ 660BB3DEB8563F6C19997C46 /* Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB50FFF818E312491F252 /* Utils.swift */; };
+ 660BB3F33AF55AE1AB398817 /* PKCS5.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBA8B1C7C6962F1F225CD /* PKCS5.swift */; };
+ 660BB401D73E4F771BE53A63 /* FloatRatingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB022BC1FB91F190D27B9 /* FloatRatingView.swift */; };
+ 660BB47326AA4D3CEB5D959F /* SwiftOverlays.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB1D131D0294D71F457F6 /* SwiftOverlays.swift */; };
+ 660BB4C4C7B206E20897C273 /* ViewTopBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBC8A059E90CD7DB470CC /* ViewTopBar.swift */; };
+ 660BB4DB26E542023BE791A3 /* Cryptors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBDEFCF681709EAD2FB6A /* Cryptors.swift */; };
+ 660BB4E07507BBD9FFD59844 /* UILableCustomLeftImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB69DA413B6B970E70694 /* UILableCustomLeftImage.swift */; };
+ 660BB4EB34BB99E2AEFA0329 /* Blowfish.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB0AA9740EF11D34188AB /* Blowfish.swift */; };
+ 660BB509C00D339853CD3516 /* URLTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB06D9754DB8833DE8B43 /* URLTransform.swift */; };
+ 660BB52A9CABD5BF9FAB9D37 /* CommonExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB459F7FFFE9742A3B38E /* CommonExtension.swift */; };
+ 660BB534E53CE88CE12E5BE5 /* PBKDF2.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB530DC81A2B7D4D6A075 /* PBKDF2.swift */; };
+ 660BB53FAFFF909C2E1C9BCB /* ChaCha20+Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB0282AEE873F45A0BEEE /* ChaCha20+Foundation.swift */; };
+ 660BB5500B0E8B28CFBD0AA3 /* DigestType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB8D43009ACE8FA90B51D /* DigestType.swift */; };
+ 660BB564D493CC0EA4F7E80D /* ToJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB3DED3B6A0EA1658B82D /* ToJSON.swift */; };
+ 660BB567122A08A7880178BE /* Updatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB9F128FBFECA116F838E /* Updatable.swift */; };
+ 660BB598C593836339B1EBC0 /* DateTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB2FF8D5B2F0D39DAF74D /* DateTransform.swift */; };
+ 660BB5A0E9B5F854773C2B7C /* CacheUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB329CCA6116DC566C7EC /* CacheUtils.swift */; };
+ 660BB5EDEC866BD4D755F3F6 /* UIImageViewCustom.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB9862858C648E7A2913D /* UIImageViewCustom.swift */; };
+ 660BB5F6F9E8243D2BDC44F4 /* SHA2.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBE36EA589E9A87A6CA7A /* SHA2.swift */; };
+ 660BB62EEC22830D63048FE8 /* ECB.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB4F148620A46352C8BFE /* ECB.swift */; };
+ 660BB63DEC21DA281E71D7FB /* AES.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB36713CCEF1025DAA864 /* AES.swift */; };
+ 660BB6418F3B36DB8CAB963E /* UIViewCustomPressHightLight.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB2D9306FF40787602A43 /* UIViewCustomPressHightLight.swift */; };
+ 660BB6623229B3104AC3F530 /* DropDown.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB83C13A6BF8C70DA02FD /* DropDown.swift */; };
+ 660BB674657F1FBF15DDABE5 /* String+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBC24E9C194110A5ADED4 /* String+Extension.swift */; };
+ 660BB6A863BAE2C92F215CF9 /* DialogUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB183616C474DA865EF52 /* DialogUtils.swift */; };
+ 660BB6B4930C9C9A68A23238 /* SwiftyJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB259BD12F23C07D28B6A /* SwiftyJSON.swift */; };
+ 660BB6D1CEC505522F484BE3 /* AnimatedControllerFromBottom.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB75B3BFD437D420BEC71 /* AnimatedControllerFromBottom.swift */; };
+ 660BB6E884453AC44D47C904 /* EnumTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB47302AD40CB9B0040A9 /* EnumTransform.swift */; };
+ 660BB6EB1178785DF70C6083 /* HexColorTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB8097091C9DE74926BE5 /* HexColorTransform.swift */; };
+ 660BB702C71DEECC871DBCE8 /* Int+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBFE2105C6A1EDFD52F1B /* Int+Extension.swift */; };
+ 660BB70E3CD72CAF4737F3F6 /* TransformOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB9327F1A29A238848D02 /* TransformOf.swift */; };
+ 660BB722BC16861C5A13A71C /* Rabbit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB5350E970DF5E9C640CA /* Rabbit.swift */; };
+ 660BB7348DC81863AC0B7D69 /* CellLoadMore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB105FA331EE64030B3DF /* CellLoadMore.swift */; };
+ 660BB73DAF74E5D158619545 /* ZeroPadding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB521E5B40346D865AF79 /* ZeroPadding.swift */; };
+ 660BB763F29C94A0DFB810B9 /* UInt16+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB7837AC018AB4F02088D /* UInt16+Extension.swift */; };
+ 660BB7A6680B8DC96970636D /* ISRadioButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBBF9DBE36AD64EF7A088 /* ISRadioButton.swift */; };
+ 660BB7B90D211A04BE805BCA /* SHA3.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB0EDACEF4F3A11D45AA9 /* SHA3.swift */; };
+ 660BB7C0931100C45D2A4709 /* GeneralMenuController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB002E1E06FBF9C7EE8A6 /* GeneralMenuController.swift */; };
+ 660BB7FEF1D1C33D574AD39F /* UIViewCustom.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBD58BF51A8CF5A05BFAF /* UIViewCustom.swift */; };
+ 660BB876DDFD2B33CC105757 /* ImmutableMappable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB3F05127AE28636B07EC /* ImmutableMappable.swift */; };
+ 660BB87ADEE46A00BFB1E2AD /* SCLExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBDA6244648043A2EACB9 /* SCLExtensions.swift */; };
+ 660BB883A116CE74CC9EE7D8 /* CTR.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBB61A48A134AD3049B36 /* CTR.swift */; };
+ 660BB8FE9365F2F946AD9FCA /* UInt8+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBCDEFE5560B4C4239FAA /* UInt8+Extension.swift */; };
+ 660BB90C319A5DAEAD289D9D /* DataTypeUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBDD1799055BEC5CE5940 /* DataTypeUtils.swift */; };
+ 660BB922FAB4EFFC6DA16A90 /* RandomAccessCryptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBB074D45462CB8D6D086 /* RandomAccessCryptor.swift */; };
+ 660BB9320EDFA44DB9E76A5A /* DropDownCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB8B80EDDDC9F6FB6618B /* DropDownCell.swift */; };
+ 660BB94B68EB2F4D5EBFF98D /* PCBC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB7D1246730E3C0A10755 /* PCBC.swift */; };
+ 660BB9566076EE2DDC7CE2E8 /* Bit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBE903D7FF61A49962895 /* Bit.swift */; };
+ 660BB977B861049752788962 /* DPDKeyboardListener.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBD820E5BE874917E8EB4 /* DPDKeyboardListener.swift */; };
+ 660BB99342616A64D8779A24 /* UInt64+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB5B239E1B2BC3BDA47A0 /* UInt64+Extension.swift */; };
+ 660BB9A6AE5DC32DE19DBABF /* ViewTopBar.xib in Resources */ = {isa = PBXBuildFile; fileRef = 660BB3C4D28B44FD15017017 /* ViewTopBar.xib */; };
+ 660BB9F302854FD3B6394FB0 /* DrawerController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB6585B2B229B4CD64794 /* DrawerController.swift */; };
+ 660BB9F41D77949A45917C40 /* CFB.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB53576D9837788B89B16 /* CFB.swift */; };
+ 660BBA04490927989BAE074E /* BlockModeWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB27373A195C8F1FEA5ED /* BlockModeWorker.swift */; };
+ 660BBA0B4A44F77A7231535B /* HMAC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBCFC470D2DB341A5B5AD /* HMAC.swift */; };
+ 660BBA1E335DD4E71931DDF8 /* PreferenceUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBC8645A4F542EB45CB99 /* PreferenceUtils.swift */; };
+ 660BBA307B2FAAC75FAB932C /* MapError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB2950BC5B3B32EE27C48 /* MapError.swift */; };
+ 660BBA43A564BC8CDD6F4B1D /* IContainerController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBB5C8436A73A79FC944B /* IContainerController.swift */; };
+ 660BBA5A1887353812391145 /* Blowfish+Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBF18BB7037C2ACE44AC8 /* Blowfish+Foundation.swift */; };
+ 660BBA78A2FB3117F3F0F105 /* DataTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBF2E4D60371CFCA8DC8D /* DataTransform.swift */; };
+ 660BBA8F2D1E0B38B941AA5D /* SecurityUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB972E0E2D74CE8074DDF /* SecurityUtils.swift */; };
+ 660BBAA747957EEF9193D5D1 /* HMAC+Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB595A76E4789432D15C2 /* HMAC+Foundation.swift */; };
+ 660BBB256B6DBCE6A136D1D8 /* UITextViewCustom.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB343E55D2B9B85CA01FF /* UITextViewCustom.swift */; };
+ 660BBB4946D8F14B33D7B434 /* EnumOperators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB6F58D44898F9AFD8D42 /* EnumOperators.swift */; };
+ 660BBB7A0F35D6324DE5FCA5 /* DPDConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB41E63AE5F14D2FAB0C2 /* DPDConstants.swift */; };
+ 660BBBA4C085D12BC882B01B /* Mappable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB143B094DFEE1DEB6308 /* Mappable.swift */; };
+ 660BBBAF48437D32BC2E9ED6 /* Cipher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB71E69B75077967CE687 /* Cipher.swift */; };
+ 660BBBC1CC0A02BE671BC7C2 /* VTopNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB14B1226E5D778D9EFB2 /* VTopNotification.swift */; };
+ 660BBBDACD3534EB52AEC32F /* DictionaryTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB309E5CABE571009195A /* DictionaryTransform.swift */; };
+ 660BBBDF4CE07E9369B7A0BE /* Rabbit+Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB29F9B379AC3DE165B5D /* Rabbit+Foundation.swift */; };
+ 660BBC1564A61534A95EE11F /* ComboBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB1E8D21904BC23E8A988 /* ComboBox.swift */; };
+ 660BBC1AD7840540E6234A84 /* NSDecimalNumberTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBFBFBE49D2DF93ED1409 /* NSDecimalNumberTransform.swift */; };
+ 660BBC24B162B9D0627A204B /* PKCS7.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB357ABC9D61A4FE9FC40 /* PKCS7.swift */; };
+ 660BBC4099897B2D268FD716 /* CSArrayType+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBC3CD49C6DB102DBDA73 /* CSArrayType+Extensions.swift */; };
+ 660BBC4AF5B23D206515241F /* BaseTbLoadData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB0EE87A69672537B1730 /* BaseTbLoadData.swift */; };
+ 660BBC607B7C9EEC7AA35F56 /* Toaster.h in Headers */ = {isa = PBXBuildFile; fileRef = 660BBC557EB1233B301FC676 /* Toaster.h */; };
+ 660BBC6872E19063EAB297C1 /* AnimatedTransitioning.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB76CDA9432C229F6D293 /* AnimatedTransitioning.swift */; };
+ 660BBC9CC373AAB73C6C74E2 /* GeneralUtils.podspec in Resources */ = {isa = PBXBuildFile; fileRef = 660BB40C90C48543A4A5D098 /* GeneralUtils.podspec */; };
+ 660BBCBA4021E9807BC26C44 /* SecureBytes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB52399A43573D51E26E6 /* SecureBytes.swift */; };
+ 660BBCFB13F7C0980EF8844A /* ToastView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB72FB5E47C4EA0CE02E3 /* ToastView.swift */; };
+ 660BBD0FE3DB483CBF87B2DD /* DrawerBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB282901996CBE32F18AE /* DrawerBarButtonItem.swift */; };
+ 660BBD38F499BDC8FD830503 /* Utils+Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB92A63F2195321CF86D0 /* Utils+Foundation.swift */; };
+ 660BBD3D9677DACCF050D2A6 /* BasePageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB3C988109B8EF4492314 /* BasePageViewController.swift */; };
+ 660BBD46DC6D3DF2DF46EEC4 /* BaseCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBEFDB0C6C51E324BE954 /* BaseCell.swift */; };
+ 660BBD6EA511BF216FFE9807 /* BytesSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB1DD713B75A8245F77A3 /* BytesSequence.swift */; };
+ 660BBDC2F499F5A06289EDA4 /* DPDUIView+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB3DBE117B9C5E1CFA072 /* DPDUIView+Extension.swift */; };
+ 660BBDCD6C885D47F48F2711 /* Toast.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBE566526783A34B92E56 /* Toast.swift */; };
+ 660BBDE6B9635AA67A47C6C3 /* Map.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBBB9740469B8D8B93A31 /* Map.swift */; };
+ 660BBE0EA3C641CAB4E13722 /* AnimatedMenuButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB6F91F29724BEB82A0A6 /* AnimatedMenuButton.swift */; };
+ 660BBE32F64C4A63C38A2A33 /* BlockCipher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBF10747F6743A335F6D9 /* BlockCipher.swift */; };
+ 660BBE3884FAF5A6041108D2 /* DrawerVisualStateManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBF64A961C03D9A68FC8F /* DrawerVisualStateManager.swift */; };
+ 660BBE6D5D83B258C173D089 /* Mapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBC7ADEFEBAFF39A487C9 /* Mapper.swift */; };
+ 660BBE6E74262696D06D3396 /* Digest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBFB61C5945D61F956A86 /* Digest.swift */; };
+ 660BBE969598871ADCCC5A46 /* UITableViewLoadMore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBADD9397444A4D0AE48D /* UITableViewLoadMore.swift */; };
+ 660BBE9717148FD1FD0A6B53 /* ISO8601DateTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB476D80C5BC75D17D120 /* ISO8601DateTransform.swift */; };
+ 660BBE9AEB71901AB0FB1FD6 /* DrawerVisualState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB6297DE7449544B9F1E2 /* DrawerVisualState.swift */; };
+ 660BBEAFEE4B7074195BB228 /* BlockMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBC38F01F8727031A1E1F /* BlockMode.swift */; };
+ 660BBEB5FF4B1440CBE3ED42 /* DrawerController.h in Headers */ = {isa = PBXBuildFile; fileRef = 660BB0449C844F79AECE464A /* DrawerController.h */; };
+ 660BBEB72FD420C5370241FF /* MD5.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB22E32E7867182F932AD /* MD5.swift */; };
+ 660BBED47DCF543CFF09130A /* UITableViewLoading.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBA587C4EB16F5C7B6F72 /* UITableViewLoading.swift */; };
+ 660BBED8076643223A1A1F9F /* SHA1.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBD53861230A02DEBFD95 /* SHA1.swift */; };
+ 660BBEE0871750BFEFD26E3E /* CustomDateFormatTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB5723BD2238D62A5DB0A /* CustomDateFormatTransform.swift */; };
+ 660BBEE19174C58FC617F9F0 /* BaseViewControllerShowTransculent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB3CCB355725DF41E9F50 /* BaseViewControllerShowTransculent.swift */; };
+ 660BBF1814F172D685CDDFB0 /* Poly1305.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB6DBA145E5AAB587B78A /* Poly1305.swift */; };
+ 660BBF78048DEF820E87FC3E /* UICollectionViewLoading.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB2454201E512E17C80C1 /* UICollectionViewLoading.swift */; };
+ 660BBFB98C0904C89DCFD491 /* DownloadTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBF3465EB342B13F54876 /* DownloadTask.swift */; };
+ 660BBFDE1C1F2729DA32D9A3 /* IntegerConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB84ECDAC06DF8A370C00 /* IntegerConvertible.swift */; };
+ 660BBFDEFD7AA2DFDBF25937 /* StringExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB639F6E0051D120BD08A /* StringExtension.swift */; };
+ 660BBFF1A3DE36950FF834FA /* ChaCha20.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBBE5553388AA439B36DA /* ChaCha20.swift */; };
+ F976D50B1E68747800708D6A /* GeneralUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = F976D5091E68747800708D6A /* GeneralUtils.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ F976D5171E69025200708D6A /* Session.swift in Sources */ = {isa = PBXBuildFile; fileRef = F976D5161E69025200708D6A /* Session.swift */; };
+ F976D52D1E6902DC00708D6A /* AnimatedImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F976D5181E6902DC00708D6A /* AnimatedImageView.swift */; };
+ F976D52E1E6902DC00708D6A /* Box.swift in Sources */ = {isa = PBXBuildFile; fileRef = F976D5191E6902DC00708D6A /* Box.swift */; };
+ F976D52F1E6902DC00708D6A /* CacheSerializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F976D51A1E6902DC00708D6A /* CacheSerializer.swift */; };
+ F976D5301E6902DC00708D6A /* Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = F976D51B1E6902DC00708D6A /* Filter.swift */; };
+ F976D5311E6902DC00708D6A /* Image.swift in Sources */ = {isa = PBXBuildFile; fileRef = F976D51C1E6902DC00708D6A /* Image.swift */; };
+ F976D5321E6902DC00708D6A /* ImageCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = F976D51D1E6902DC00708D6A /* ImageCache.swift */; };
+ F976D5331E6902DC00708D6A /* ImageDownloader.swift in Sources */ = {isa = PBXBuildFile; fileRef = F976D51E1E6902DC00708D6A /* ImageDownloader.swift */; };
+ F976D5341E6902DC00708D6A /* ImagePrefetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = F976D51F1E6902DC00708D6A /* ImagePrefetcher.swift */; };
+ F976D5351E6902DC00708D6A /* ImageProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = F976D5201E6902DC00708D6A /* ImageProcessor.swift */; };
+ F976D5361E6902DC00708D6A /* ImageTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = F976D5211E6902DC00708D6A /* ImageTransition.swift */; };
+ F976D5371E6902DC00708D6A /* ImageView+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = F976D5221E6902DC00708D6A /* ImageView+Kingfisher.swift */; };
+ F976D5381E6902DC00708D6A /* Indicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = F976D5231E6902DC00708D6A /* Indicator.swift */; };
+ F976D5391E6902DC00708D6A /* Kingfisher.h in Headers */ = {isa = PBXBuildFile; fileRef = F976D5241E6902DC00708D6A /* Kingfisher.h */; };
+ F976D53A1E6902DC00708D6A /* Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = F976D5251E6902DC00708D6A /* Kingfisher.swift */; };
+ F976D53B1E6902DC00708D6A /* KingfisherManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F976D5261E6902DC00708D6A /* KingfisherManager.swift */; };
+ F976D53C1E6902DC00708D6A /* KingfisherOptionsInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = F976D5271E6902DC00708D6A /* KingfisherOptionsInfo.swift */; };
+ F976D53D1E6902DC00708D6A /* RequestModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = F976D5281E6902DC00708D6A /* RequestModifier.swift */; };
+ F976D53E1E6902DC00708D6A /* Resource.swift in Sources */ = {isa = PBXBuildFile; fileRef = F976D5291E6902DC00708D6A /* Resource.swift */; };
+ F976D53F1E6902DC00708D6A /* String+MD5.swift in Sources */ = {isa = PBXBuildFile; fileRef = F976D52A1E6902DC00708D6A /* String+MD5.swift */; };
+ F976D5401E6902DC00708D6A /* ThreadHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = F976D52B1E6902DC00708D6A /* ThreadHelper.swift */; };
+ F976D5411E6902DC00708D6A /* UIButton+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = F976D52C1E6902DC00708D6A /* UIButton+Kingfisher.swift */; };
+ F983E1261E69ADF4008FEC23 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F983E1251E69ADF4008FEC23 /* Assets.xcassets */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+ 660BB002E1E06FBF9C7EE8A6 /* GeneralMenuController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneralMenuController.swift; sourceTree = ""; };
+ 660BB022BC1FB91F190D27B9 /* FloatRatingView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FloatRatingView.swift; sourceTree = ""; };
+ 660BB0282AEE873F45A0BEEE /* ChaCha20+Foundation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "ChaCha20+Foundation.swift"; sourceTree = ""; };
+ 660BB0449C844F79AECE464A /* DrawerController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DrawerController.h; sourceTree = ""; };
+ 660BB06AB76AC8C25F03C45E /* UITableViewLoadDataFromUIThread.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UITableViewLoadDataFromUIThread.swift; sourceTree = ""; };
+ 660BB06D9754DB8833DE8B43 /* URLTransform.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = URLTransform.swift; sourceTree = ""; };
+ 660BB091EE4A5B55273D74C2 /* CommonUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CommonUtils.swift; sourceTree = ""; };
+ 660BB0AA9740EF11D34188AB /* Blowfish.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Blowfish.swift; sourceTree = ""; };
+ 660BB0C57701B0E930D621DE /* FromJSON.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FromJSON.swift; sourceTree = ""; };
+ 660BB0E5F9ECF184D4433074 /* SCLAlertView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SCLAlertView.swift; sourceTree = ""; };
+ 660BB0EDACEF4F3A11D45AA9 /* SHA3.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SHA3.swift; sourceTree = ""; };
+ 660BB0EE87A69672537B1730 /* BaseTbLoadData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseTbLoadData.swift; sourceTree = ""; };
+ 660BB105FA331EE64030B3DF /* CellLoadMore.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CellLoadMore.swift; sourceTree = ""; };
+ 660BB143B094DFEE1DEB6308 /* Mappable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Mappable.swift; sourceTree = ""; };
+ 660BB14B1226E5D778D9EFB2 /* VTopNotification.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VTopNotification.swift; sourceTree = ""; };
+ 660BB176F48EC804605D945A /* RandomBytesSequence.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RandomBytesSequence.swift; sourceTree = ""; };
+ 660BB183616C474DA865EF52 /* DialogUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DialogUtils.swift; sourceTree = ""; };
+ 660BB1D131D0294D71F457F6 /* SwiftOverlays.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwiftOverlays.swift; sourceTree = ""; };
+ 660BB1D9E1D3F3A4CA67C287 /* RecordUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RecordUtils.swift; sourceTree = ""; };
+ 660BB1DD713B75A8245F77A3 /* BytesSequence.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BytesSequence.swift; sourceTree = ""; };
+ 660BB1E8D21904BC23E8A988 /* ComboBox.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ComboBox.swift; sourceTree = ""; };
+ 660BB22E32E7867182F932AD /* MD5.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MD5.swift; sourceTree = ""; };
+ 660BB2454201E512E17C80C1 /* UICollectionViewLoading.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UICollectionViewLoading.swift; sourceTree = ""; };
+ 660BB259BD12F23C07D28B6A /* SwiftyJSON.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwiftyJSON.swift; sourceTree = ""; };
+ 660BB27373A195C8F1FEA5ED /* BlockModeWorker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BlockModeWorker.swift; sourceTree = ""; };
+ 660BB282901996CBE32F18AE /* DrawerBarButtonItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DrawerBarButtonItem.swift; sourceTree = ""; };
+ 660BB2950BC5B3B32EE27C48 /* MapError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MapError.swift; sourceTree = ""; };
+ 660BB2997837FA6B1C43C043 /* CBC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CBC.swift; sourceTree = ""; };
+ 660BB29F9B379AC3DE165B5D /* Rabbit+Foundation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Rabbit+Foundation.swift"; sourceTree = ""; };
+ 660BB2D9306FF40787602A43 /* UIViewCustomPressHightLight.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIViewCustomPressHightLight.swift; sourceTree = ""; };
+ 660BB2DDB3FBB3B88F726D55 /* UIViewCustomGradientBg.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIViewCustomGradientBg.swift; sourceTree = ""; };
+ 660BB2FF8D5B2F0D39DAF74D /* DateTransform.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DateTransform.swift; sourceTree = ""; };
+ 660BB309E5CABE571009195A /* DictionaryTransform.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DictionaryTransform.swift; sourceTree = ""; };
+ 660BB329CCA6116DC566C7EC /* CacheUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CacheUtils.swift; sourceTree = ""; };
+ 660BB343E55D2B9B85CA01FF /* UITextViewCustom.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UITextViewCustom.swift; sourceTree = ""; };
+ 660BB357ABC9D61A4FE9FC40 /* PKCS7.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PKCS7.swift; sourceTree = ""; };
+ 660BB36713CCEF1025DAA864 /* AES.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AES.swift; sourceTree = ""; };
+ 660BB37E485037901CB53692 /* RandomAccessBlockModeWorker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RandomAccessBlockModeWorker.swift; sourceTree = ""; };
+ 660BB3C4D28B44FD15017017 /* ViewTopBar.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ViewTopBar.xib; sourceTree = ""; };
+ 660BB3C988109B8EF4492314 /* BasePageViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BasePageViewController.swift; sourceTree = ""; };
+ 660BB3CCB355725DF41E9F50 /* BaseViewControllerShowTransculent.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseViewControllerShowTransculent.swift; sourceTree = ""; };
+ 660BB3DBE117B9C5E1CFA072 /* DPDUIView+Extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "DPDUIView+Extension.swift"; sourceTree = ""; };
+ 660BB3DED3B6A0EA1658B82D /* ToJSON.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ToJSON.swift; sourceTree = ""; };
+ 660BB3F05127AE28636B07EC /* ImmutableMappable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImmutableMappable.swift; sourceTree = ""; };
+ 660BB40C90C48543A4A5D098 /* GeneralUtils.podspec */ = {isa = PBXFileReference; lastKnownFileType = file.podspec; path = GeneralUtils.podspec; sourceTree = ""; };
+ 660BB41E63AE5F14D2FAB0C2 /* DPDConstants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DPDConstants.swift; sourceTree = ""; };
+ 660BB459F7FFFE9742A3B38E /* CommonExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CommonExtension.swift; sourceTree = ""; };
+ 660BB47302AD40CB9B0040A9 /* EnumTransform.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EnumTransform.swift; sourceTree = ""; };
+ 660BB476D80C5BC75D17D120 /* ISO8601DateTransform.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ISO8601DateTransform.swift; sourceTree = ""; };
+ 660BB4D5825BC7F02DB04003 /* Array+Extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Array+Extension.swift"; sourceTree = ""; };
+ 660BB4F148620A46352C8BFE /* ECB.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ECB.swift; sourceTree = ""; };
+ 660BB5012299257B8EA4C3DF /* TransformType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TransformType.swift; sourceTree = ""; };
+ 660BB50FFF818E312491F252 /* Utils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Utils.swift; sourceTree = ""; };
+ 660BB521E5B40346D865AF79 /* ZeroPadding.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ZeroPadding.swift; sourceTree = ""; };
+ 660BB52399A43573D51E26E6 /* SecureBytes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureBytes.swift; sourceTree = ""; };
+ 660BB530DC81A2B7D4D6A075 /* PBKDF2.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PBKDF2.swift; sourceTree = ""; };
+ 660BB5350E970DF5E9C640CA /* Rabbit.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Rabbit.swift; sourceTree = ""; };
+ 660BB53576D9837788B89B16 /* CFB.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CFB.swift; sourceTree = ""; };
+ 660BB53A77A128D39D246C80 /* Operators.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Operators.swift; sourceTree = ""; };
+ 660BB56D86EA67C397D97E4E /* Padding.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Padding.swift; sourceTree = ""; };
+ 660BB5723BD2238D62A5DB0A /* CustomDateFormatTransform.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CustomDateFormatTransform.swift; sourceTree = ""; };
+ 660BB595A76E4789432D15C2 /* HMAC+Foundation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "HMAC+Foundation.swift"; sourceTree = ""; };
+ 660BB5B239E1B2BC3BDA47A0 /* UInt64+Extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UInt64+Extension.swift"; sourceTree = ""; };
+ 660BB5FBB1FC126C8B5DFDE0 /* NoPadding.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NoPadding.swift; sourceTree = ""; };
+ 660BB604C1941534593A1C44 /* BlockModeOptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BlockModeOptions.swift; sourceTree = ""; };
+ 660BB6297DE7449544B9F1E2 /* DrawerVisualState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DrawerVisualState.swift; sourceTree = ""; };
+ 660BB639F6E0051D120BD08A /* StringExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StringExtension.swift; sourceTree = ""; };
+ 660BB63FA48D20F64E7601EB /* OFB.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OFB.swift; sourceTree = ""; };
+ 660BB6585B2B229B4CD64794 /* DrawerController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DrawerController.swift; sourceTree = ""; };
+ 660BB69DA413B6B970E70694 /* UILableCustomLeftImage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UILableCustomLeftImage.swift; sourceTree = ""; };
+ 660BB6C6DEBAEE62102CED69 /* ToastWindow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ToastWindow.swift; sourceTree = ""; };
+ 660BB6DBA145E5AAB587B78A /* Poly1305.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Poly1305.swift; sourceTree = ""; };
+ 660BB6F58D44898F9AFD8D42 /* EnumOperators.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EnumOperators.swift; sourceTree = ""; };
+ 660BB6F91F29724BEB82A0A6 /* AnimatedMenuButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnimatedMenuButton.swift; sourceTree = ""; };
+ 660BB71E69B75077967CE687 /* Cipher.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Cipher.swift; sourceTree = ""; };
+ 660BB72FB5E47C4EA0CE02E3 /* ToastView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ToastView.swift; sourceTree = ""; };
+ 660BB75B3BFD437D420BEC71 /* AnimatedControllerFromBottom.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnimatedControllerFromBottom.swift; sourceTree = ""; };
+ 660BB76CDA9432C229F6D293 /* AnimatedTransitioning.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnimatedTransitioning.swift; sourceTree = ""; };
+ 660BB7837AC018AB4F02088D /* UInt16+Extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UInt16+Extension.swift"; sourceTree = ""; };
+ 660BB7C469F3295449B48747 /* Generics.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Generics.swift; sourceTree = ""; };
+ 660BB7C6CB72E9D07866674F /* PBKDF1.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PBKDF1.swift; sourceTree = ""; };
+ 660BB7D1246730E3C0A10755 /* PCBC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PCBC.swift; sourceTree = ""; };
+ 660BB8097091C9DE74926BE5 /* HexColorTransform.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HexColorTransform.swift; sourceTree = ""; };
+ 660BB810558E7D7420EF7BE0 /* UIButtonCustom.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIButtonCustom.swift; sourceTree = ""; };
+ 660BB83C13A6BF8C70DA02FD /* DropDown.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DropDown.swift; sourceTree = ""; };
+ 660BB84ECDAC06DF8A370C00 /* IntegerConvertible.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IntegerConvertible.swift; sourceTree = ""; };
+ 660BB8B80EDDDC9F6FB6618B /* DropDownCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DropDownCell.swift; sourceTree = ""; };
+ 660BB8D43009ACE8FA90B51D /* DigestType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DigestType.swift; sourceTree = ""; };
+ 660BB92A63F2195321CF86D0 /* Utils+Foundation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Utils+Foundation.swift"; sourceTree = ""; };
+ 660BB9327F1A29A238848D02 /* TransformOf.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TransformOf.swift; sourceTree = ""; };
+ 660BB961FF0DD677BD299896 /* Authenticator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Authenticator.swift; sourceTree = ""; };
+ 660BB972E0E2D74CE8074DDF /* SecurityUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecurityUtils.swift; sourceTree = ""; };
+ 660BB9862858C648E7A2913D /* UIImageViewCustom.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIImageViewCustom.swift; sourceTree = ""; };
+ 660BB9A0DFB90DDB7F1BD9A2 /* ToastCenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ToastCenter.swift; sourceTree = ""; };
+ 660BB9F128FBFECA116F838E /* Updatable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Updatable.swift; sourceTree = ""; };
+ 660BBA5731B2425A91A7B7C4 /* String+FoundationExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "String+FoundationExtension.swift"; sourceTree = ""; };
+ 660BBA587C4EB16F5C7B6F72 /* UITableViewLoading.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UITableViewLoading.swift; sourceTree = ""; };
+ 660BBA8B1C7C6962F1F225CD /* PKCS5.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PKCS5.swift; sourceTree = ""; };
+ 660BBAD1B1ECD02481A86166 /* AES+Foundation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AES+Foundation.swift"; sourceTree = ""; };
+ 660BBADD9397444A4D0AE48D /* UITableViewLoadMore.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UITableViewLoadMore.swift; sourceTree = ""; };
+ 660BBB074D45462CB8D6D086 /* RandomAccessCryptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RandomAccessCryptor.swift; sourceTree = ""; };
+ 660BBB47A50033D64F099A59 /* FileUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FileUtils.swift; sourceTree = ""; };
+ 660BBB5C8436A73A79FC944B /* IContainerController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IContainerController.swift; sourceTree = ""; };
+ 660BBB61A48A134AD3049B36 /* CTR.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CTR.swift; sourceTree = ""; };
+ 660BBB9583DB947DB3A048A0 /* Collection+Extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Collection+Extension.swift"; sourceTree = ""; };
+ 660BBBA0B59200A63CC5C49F /* CSArrayType+Foundation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CSArrayType+Foundation.swift"; sourceTree = ""; };
+ 660BBBAC2F5E734910E2F1FC /* VTopNotification.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = VTopNotification.xib; sourceTree = ""; };
+ 660BBBB6BD143E05E992EDA8 /* VPlayerControl.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VPlayerControl.swift; sourceTree = ""; };
+ 660BBBB9740469B8D8B93A31 /* Map.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Map.swift; sourceTree = ""; };
+ 660BBBE5553388AA439B36DA /* ChaCha20.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChaCha20.swift; sourceTree = ""; };
+ 660BBBF9DBE36AD64EF7A088 /* ISRadioButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ISRadioButton.swift; sourceTree = ""; };
+ 660BBC24E9C194110A5ADED4 /* String+Extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "String+Extension.swift"; sourceTree = ""; };
+ 660BBC38F01F8727031A1E1F /* BlockMode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BlockMode.swift; sourceTree = ""; };
+ 660BBC3CD49C6DB102DBDA73 /* CSArrayType+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CSArrayType+Extensions.swift"; sourceTree = ""; };
+ 660BBC4B54E57DC9FF98302D /* DateFormatterTransform.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DateFormatterTransform.swift; sourceTree = ""; };
+ 660BBC557EB1233B301FC676 /* Toaster.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Toaster.h; sourceTree = ""; };
+ 660BBC70A8038A3A8EF66430 /* Checksum.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Checksum.swift; sourceTree = ""; };
+ 660BBC7ADEFEBAFF39A487C9 /* Mapper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Mapper.swift; sourceTree = ""; };
+ 660BBC8645A4F542EB45CB99 /* PreferenceUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PreferenceUtils.swift; sourceTree = ""; };
+ 660BBC8A059E90CD7DB470CC /* ViewTopBar.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViewTopBar.swift; sourceTree = ""; };
+ 660BBCDEFE5560B4C4239FAA /* UInt8+Extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UInt8+Extension.swift"; sourceTree = ""; };
+ 660BBCFC470D2DB341A5B5AD /* HMAC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HMAC.swift; sourceTree = ""; };
+ 660BBD0E2B7CF1AD7818CCB3 /* UICollectionViewLoadData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UICollectionViewLoadData.swift; sourceTree = ""; };
+ 660BBD1E3926FDFEEA4C3E9B /* VCContainer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VCContainer.swift; sourceTree = ""; };
+ 660BBD3C1756EAE55528C2A3 /* UInt32+Extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UInt32+Extension.swift"; sourceTree = ""; };
+ 660BBD53861230A02DEBFD95 /* SHA1.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SHA1.swift; sourceTree = ""; };
+ 660BBD58BF51A8CF5A05BFAF /* UIViewCustom.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIViewCustom.swift; sourceTree = ""; };
+ 660BBD62C125875A7D977481 /* BaseUIPresentationController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseUIPresentationController.swift; sourceTree = ""; };
+ 660BBD820E5BE874917E8EB4 /* DPDKeyboardListener.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DPDKeyboardListener.swift; sourceTree = ""; };
+ 660BBDA6244648043A2EACB9 /* SCLExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SCLExtensions.swift; sourceTree = ""; };
+ 660BBDD1799055BEC5CE5940 /* DataTypeUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DataTypeUtils.swift; sourceTree = ""; };
+ 660BBDD6CA2B01B39EEE98F0 /* Data+Extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Data+Extension.swift"; sourceTree = ""; };
+ 660BBDDA727C4F10116C6DF3 /* UITableViewLoadDataBg.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UITableViewLoadDataBg.swift; sourceTree = ""; };
+ 660BBDE96B42528FE255B5C5 /* Queue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Queue.swift; sourceTree = ""; };
+ 660BBDEFCF681709EAD2FB6A /* Cryptors.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Cryptors.swift; sourceTree = ""; };
+ 660BBE36EA589E9A87A6CA7A /* SHA2.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SHA2.swift; sourceTree = ""; };
+ 660BBE4C5CC8638788123CFC /* NetWorkUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NetWorkUtils.swift; sourceTree = ""; };
+ 660BBE566526783A34B92E56 /* Toast.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Toast.swift; sourceTree = ""; };
+ 660BBE857B2FF54AFC7F5CC6 /* UILabelCustom.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UILabelCustom.swift; sourceTree = ""; };
+ 660BBE903D7FF61A49962895 /* Bit.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Bit.swift; sourceTree = ""; };
+ 660BBEFDB0C6C51E324BE954 /* BaseCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseCell.swift; sourceTree = ""; };
+ 660BBF10747F6743A335F6D9 /* BlockCipher.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BlockCipher.swift; sourceTree = ""; };
+ 660BBF18BB7037C2ACE44AC8 /* Blowfish+Foundation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Blowfish+Foundation.swift"; sourceTree = ""; };
+ 660BBF2E4D60371CFCA8DC8D /* DataTransform.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DataTransform.swift; sourceTree = ""; };
+ 660BBF3465EB342B13F54876 /* DownloadTask.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DownloadTask.swift; sourceTree = ""; };
+ 660BBF64A961C03D9A68FC8F /* DrawerVisualStateManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DrawerVisualStateManager.swift; sourceTree = ""; };
+ 660BBF8A846AE94CA97F1325 /* TransformOperators.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TransformOperators.swift; sourceTree = ""; };
+ 660BBFB61C5945D61F956A86 /* Digest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Digest.swift; sourceTree = ""; };
+ 660BBFBFBE49D2DF93ED1409 /* NSDecimalNumberTransform.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSDecimalNumberTransform.swift; sourceTree = ""; };
+ 660BBFE2105C6A1EDFD52F1B /* Int+Extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Int+Extension.swift"; sourceTree = ""; };
+ F976D5061E68747800708D6A /* GeneralUtils.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GeneralUtils.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ F976D5091E68747800708D6A /* GeneralUtils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneralUtils.h; sourceTree = ""; };
+ F976D50A1E68747800708D6A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ F976D5161E69025200708D6A /* Session.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Session.swift; sourceTree = ""; };
+ F976D5181E6902DC00708D6A /* AnimatedImageView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnimatedImageView.swift; sourceTree = ""; };
+ F976D5191E6902DC00708D6A /* Box.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Box.swift; sourceTree = ""; };
+ F976D51A1E6902DC00708D6A /* CacheSerializer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CacheSerializer.swift; sourceTree = ""; };
+ F976D51B1E6902DC00708D6A /* Filter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Filter.swift; sourceTree = ""; };
+ F976D51C1E6902DC00708D6A /* Image.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Image.swift; sourceTree = ""; };
+ F976D51D1E6902DC00708D6A /* ImageCache.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageCache.swift; sourceTree = ""; };
+ F976D51E1E6902DC00708D6A /* ImageDownloader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageDownloader.swift; sourceTree = ""; };
+ F976D51F1E6902DC00708D6A /* ImagePrefetcher.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImagePrefetcher.swift; sourceTree = ""; };
+ F976D5201E6902DC00708D6A /* ImageProcessor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageProcessor.swift; sourceTree = ""; };
+ F976D5211E6902DC00708D6A /* ImageTransition.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageTransition.swift; sourceTree = ""; };
+ F976D5221E6902DC00708D6A /* ImageView+Kingfisher.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "ImageView+Kingfisher.swift"; sourceTree = ""; };
+ F976D5231E6902DC00708D6A /* Indicator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Indicator.swift; sourceTree = ""; };
+ F976D5241E6902DC00708D6A /* Kingfisher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Kingfisher.h; sourceTree = ""; };
+ F976D5251E6902DC00708D6A /* Kingfisher.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Kingfisher.swift; sourceTree = ""; };
+ F976D5261E6902DC00708D6A /* KingfisherManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KingfisherManager.swift; sourceTree = ""; };
+ F976D5271E6902DC00708D6A /* KingfisherOptionsInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KingfisherOptionsInfo.swift; sourceTree = ""; };
+ F976D5281E6902DC00708D6A /* RequestModifier.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RequestModifier.swift; sourceTree = ""; };
+ F976D5291E6902DC00708D6A /* Resource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Resource.swift; sourceTree = ""; };
+ F976D52A1E6902DC00708D6A /* String+MD5.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "String+MD5.swift"; sourceTree = ""; };
+ F976D52B1E6902DC00708D6A /* ThreadHelper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ThreadHelper.swift; sourceTree = ""; };
+ F976D52C1E6902DC00708D6A /* UIButton+Kingfisher.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIButton+Kingfisher.swift"; sourceTree = ""; };
+ F983E1251E69ADF4008FEC23 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ F976D5021E68747800708D6A /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 660BB08F437B180191B7E8B7 /* BlockMode */ = {
+ isa = PBXGroup;
+ children = (
+ 660BB2997837FA6B1C43C043 /* CBC.swift */,
+ 660BB53576D9837788B89B16 /* CFB.swift */,
+ 660BBB61A48A134AD3049B36 /* CTR.swift */,
+ 660BB4F148620A46352C8BFE /* ECB.swift */,
+ 660BB63FA48D20F64E7601EB /* OFB.swift */,
+ 660BB7D1246730E3C0A10755 /* PCBC.swift */,
+ 660BBC38F01F8727031A1E1F /* BlockMode.swift */,
+ 660BB27373A195C8F1FEA5ED /* BlockModeWorker.swift */,
+ 660BB604C1941534593A1C44 /* BlockModeOptions.swift */,
+ 660BB37E485037901CB53692 /* RandomAccessBlockModeWorker.swift */,
+ );
+ path = BlockMode;
+ sourceTree = "";
+ };
+ 660BB15FC9B49DF01FB4DD59 /* page */ = {
+ isa = PBXGroup;
+ children = (
+ 660BB3C988109B8EF4492314 /* BasePageViewController.swift */,
+ );
+ path = page;
+ sourceTree = "";
+ };
+ 660BB17204A9CED25BF09584 /* DrawerController */ = {
+ isa = PBXGroup;
+ children = (
+ 660BB0449C844F79AECE464A /* DrawerController.h */,
+ 660BB6585B2B229B4CD64794 /* DrawerController.swift */,
+ 660BB6297DE7449544B9F1E2 /* DrawerVisualState.swift */,
+ 660BB6F91F29724BEB82A0A6 /* AnimatedMenuButton.swift */,
+ 660BB282901996CBE32F18AE /* DrawerBarButtonItem.swift */,
+ 660BBF64A961C03D9A68FC8F /* DrawerVisualStateManager.swift */,
+ );
+ path = DrawerController;
+ sourceTree = "";
+ };
+ 660BB227787C5154B9F8A7CA /* SCLAlertView */ = {
+ isa = PBXGroup;
+ children = (
+ 660BB0E5F9ECF184D4433074 /* SCLAlertView.swift */,
+ 660BBDA6244648043A2EACB9 /* SCLExtensions.swift */,
+ );
+ path = SCLAlertView;
+ sourceTree = "";
+ };
+ 660BB27368730D615070D1E2 /* libs */ = {
+ isa = PBXGroup;
+ children = (
+ 660BBBE466B2294A030154B6 /* ObjectMapper */,
+ 660BBDF3E8E390B1EA68EA3A /* CryptoSwift */,
+ 660BB259BD12F23C07D28B6A /* SwiftyJSON.swift */,
+ 660BB66E813D9FCA4514E7A6 /* Kingfisher */,
+ 660BB227787C5154B9F8A7CA /* SCLAlertView */,
+ 660BB7D123299D890699ED7F /* Toaster */,
+ 660BB1D131D0294D71F457F6 /* SwiftOverlays.swift */,
+ );
+ path = libs;
+ sourceTree = "";
+ };
+ 660BB2C4386C7190322EA06B /* Foundation */ = {
+ isa = PBXGroup;
+ children = (
+ 660BBAD1B1ECD02481A86166 /* AES+Foundation.swift */,
+ 660BBDD6CA2B01B39EEE98F0 /* Data+Extension.swift */,
+ 660BB595A76E4789432D15C2 /* HMAC+Foundation.swift */,
+ 660BB92A63F2195321CF86D0 /* Utils+Foundation.swift */,
+ 660BB29F9B379AC3DE165B5D /* Rabbit+Foundation.swift */,
+ 660BBF18BB7037C2ACE44AC8 /* Blowfish+Foundation.swift */,
+ 660BB0282AEE873F45A0BEEE /* ChaCha20+Foundation.swift */,
+ 660BBBA0B59200A63CC5C49F /* CSArrayType+Foundation.swift */,
+ 660BBA5731B2425A91A7B7C4 /* String+FoundationExtension.swift */,
+ );
+ path = Foundation;
+ sourceTree = "";
+ };
+ 660BB35AE8A552BDA1358CF8 /* models */ = {
+ isa = PBXGroup;
+ children = (
+ F976D5161E69025200708D6A /* Session.swift */,
+ );
+ path = models;
+ sourceTree = "";
+ };
+ 660BB4A65AF559E60AD04599 /* ui */ = {
+ isa = PBXGroup;
+ children = (
+ 660BB15FC9B49DF01FB4DD59 /* page */,
+ 660BBA3B9D8B683F7641F10F /* views */,
+ 660BB17204A9CED25BF09584 /* DrawerController */,
+ 660BBD1E3926FDFEEA4C3E9B /* VCContainer.swift */,
+ 660BBC4F31CD8939D2704751 /* PresentationDialog */,
+ 660BBB5C8436A73A79FC944B /* IContainerController.swift */,
+ 660BB002E1E06FBF9C7EE8A6 /* GeneralMenuController.swift */,
+ );
+ path = ui;
+ sourceTree = "";
+ };
+ 660BB59EBD27343E01AE44C9 /* PKCS5 */ = {
+ isa = PBXGroup;
+ children = (
+ 660BBA8B1C7C6962F1F225CD /* PKCS5.swift */,
+ 660BB7C6CB72E9D07866674F /* PBKDF1.swift */,
+ 660BB530DC81A2B7D4D6A075 /* PBKDF2.swift */,
+ );
+ path = PKCS5;
+ sourceTree = "";
+ };
+ 660BB66E813D9FCA4514E7A6 /* Kingfisher */ = {
+ isa = PBXGroup;
+ children = (
+ F976D5181E6902DC00708D6A /* AnimatedImageView.swift */,
+ F976D5191E6902DC00708D6A /* Box.swift */,
+ F976D51A1E6902DC00708D6A /* CacheSerializer.swift */,
+ F976D51B1E6902DC00708D6A /* Filter.swift */,
+ F976D51C1E6902DC00708D6A /* Image.swift */,
+ F976D51D1E6902DC00708D6A /* ImageCache.swift */,
+ F976D51E1E6902DC00708D6A /* ImageDownloader.swift */,
+ F976D51F1E6902DC00708D6A /* ImagePrefetcher.swift */,
+ F976D5201E6902DC00708D6A /* ImageProcessor.swift */,
+ F976D5211E6902DC00708D6A /* ImageTransition.swift */,
+ F976D5221E6902DC00708D6A /* ImageView+Kingfisher.swift */,
+ F976D5231E6902DC00708D6A /* Indicator.swift */,
+ F976D5241E6902DC00708D6A /* Kingfisher.h */,
+ F976D5251E6902DC00708D6A /* Kingfisher.swift */,
+ F976D5261E6902DC00708D6A /* KingfisherManager.swift */,
+ F976D5271E6902DC00708D6A /* KingfisherOptionsInfo.swift */,
+ F976D5281E6902DC00708D6A /* RequestModifier.swift */,
+ F976D5291E6902DC00708D6A /* Resource.swift */,
+ F976D52A1E6902DC00708D6A /* String+MD5.swift */,
+ F976D52B1E6902DC00708D6A /* ThreadHelper.swift */,
+ F976D52C1E6902DC00708D6A /* UIButton+Kingfisher.swift */,
+ );
+ path = Kingfisher;
+ sourceTree = "";
+ };
+ 660BB7D123299D890699ED7F /* Toaster */ = {
+ isa = PBXGroup;
+ children = (
+ 660BB72FB5E47C4EA0CE02E3 /* ToastView.swift */,
+ 660BB6C6DEBAEE62102CED69 /* ToastWindow.swift */,
+ 660BB9A0DFB90DDB7F1BD9A2 /* ToastCenter.swift */,
+ 660BBC557EB1233B301FC676 /* Toaster.h */,
+ 660BBE566526783A34B92E56 /* Toast.swift */,
+ );
+ path = Toaster;
+ sourceTree = "";
+ };
+ 660BB7D3C520848F3D2CB2FD /* CollectionView */ = {
+ isa = PBXGroup;
+ children = (
+ 660BB2454201E512E17C80C1 /* UICollectionViewLoading.swift */,
+ 660BBD0E2B7CF1AD7818CCB3 /* UICollectionViewLoadData.swift */,
+ );
+ path = CollectionView;
+ sourceTree = "";
+ };
+ 660BB9246F72CA782E0D51B4 /* TableView */ = {
+ isa = PBXGroup;
+ children = (
+ 660BBEFDB0C6C51E324BE954 /* BaseCell.swift */,
+ 660BB105FA331EE64030B3DF /* CellLoadMore.swift */,
+ 660BB0EE87A69672537B1730 /* BaseTbLoadData.swift */,
+ 660BBA587C4EB16F5C7B6F72 /* UITableViewLoading.swift */,
+ 660BBADD9397444A4D0AE48D /* UITableViewLoadMore.swift */,
+ 660BBDDA727C4F10116C6DF3 /* UITableViewLoadDataBg.swift */,
+ 660BB06AB76AC8C25F03C45E /* UITableViewLoadDataFromUIThread.swift */,
+ );
+ path = TableView;
+ sourceTree = "";
+ };
+ 660BBA3B9D8B683F7641F10F /* views */ = {
+ isa = PBXGroup;
+ children = (
+ 660BBB2BC1F2654E8842A3ED /* vTopBar */,
+ 660BBCE62EE713590AC9C251 /* DropDown */,
+ 660BB9246F72CA782E0D51B4 /* TableView */,
+ 660BB7D3C520848F3D2CB2FD /* CollectionView */,
+ 660BBE68D5D2C911182BDFBE /* VTopNotification */,
+ 660BBD58BF51A8CF5A05BFAF /* UIViewCustom.swift */,
+ 660BBBF9DBE36AD64EF7A088 /* ISRadioButton.swift */,
+ 660BBE857B2FF54AFC7F5CC6 /* UILabelCustom.swift */,
+ 660BB810558E7D7420EF7BE0 /* UIButtonCustom.swift */,
+ 660BBBB6BD143E05E992EDA8 /* VPlayerControl.swift */,
+ 660BB022BC1FB91F190D27B9 /* FloatRatingView.swift */,
+ 660BB343E55D2B9B85CA01FF /* UITextViewCustom.swift */,
+ 660BB9862858C648E7A2913D /* UIImageViewCustom.swift */,
+ 660BB69DA413B6B970E70694 /* UILableCustomLeftImage.swift */,
+ 660BB2DDB3FBB3B88F726D55 /* UIViewCustomGradientBg.swift */,
+ 660BB2D9306FF40787602A43 /* UIViewCustomPressHightLight.swift */,
+ );
+ path = views;
+ sourceTree = "";
+ };
+ 660BBB2BC1F2654E8842A3ED /* vTopBar */ = {
+ isa = PBXGroup;
+ children = (
+ 660BB3C4D28B44FD15017017 /* ViewTopBar.xib */,
+ 660BBC8A059E90CD7DB470CC /* ViewTopBar.swift */,
+ );
+ path = vTopBar;
+ sourceTree = "";
+ };
+ 660BBBC081AE41EEA62CFDB5 /* commonUtils */ = {
+ isa = PBXGroup;
+ children = (
+ 660BBDE96B42528FE255B5C5 /* Queue.swift */,
+ 660BBB47A50033D64F099A59 /* FileUtils.swift */,
+ 660BB329CCA6116DC566C7EC /* CacheUtils.swift */,
+ 660BB091EE4A5B55273D74C2 /* CommonUtils.swift */,
+ 660BB183616C474DA865EF52 /* DialogUtils.swift */,
+ 660BB1D9E1D3F3A4CA67C287 /* RecordUtils.swift */,
+ 660BBF3465EB342B13F54876 /* DownloadTask.swift */,
+ 660BBE4C5CC8638788123CFC /* NetWorkUtils.swift */,
+ 660BBDD1799055BEC5CE5940 /* DataTypeUtils.swift */,
+ 660BB459F7FFFE9742A3B38E /* CommonExtension.swift */,
+ 660BBC8645A4F542EB45CB99 /* PreferenceUtils.swift */,
+ 660BB639F6E0051D120BD08A /* StringExtension.swift */,
+ 660BB972E0E2D74CE8074DDF /* SecurityUtils.swift */,
+ );
+ path = commonUtils;
+ sourceTree = "";
+ };
+ 660BBBE466B2294A030154B6 /* ObjectMapper */ = {
+ isa = PBXGroup;
+ children = (
+ 660BB309E5CABE571009195A /* DictionaryTransform.swift */,
+ 660BB8097091C9DE74926BE5 /* HexColorTransform.swift */,
+ 660BB9327F1A29A238848D02 /* TransformOf.swift */,
+ 660BB6F58D44898F9AFD8D42 /* EnumOperators.swift */,
+ 660BB5012299257B8EA4C3DF /* TransformType.swift */,
+ 660BB47302AD40CB9B0040A9 /* EnumTransform.swift */,
+ 660BBF2E4D60371CFCA8DC8D /* DataTransform.swift */,
+ 660BB2950BC5B3B32EE27C48 /* MapError.swift */,
+ 660BB06D9754DB8833DE8B43 /* URLTransform.swift */,
+ 660BBFBFBE49D2DF93ED1409 /* NSDecimalNumberTransform.swift */,
+ 660BB476D80C5BC75D17D120 /* ISO8601DateTransform.swift */,
+ 660BB3DED3B6A0EA1658B82D /* ToJSON.swift */,
+ 660BB2FF8D5B2F0D39DAF74D /* DateTransform.swift */,
+ 660BBC4B54E57DC9FF98302D /* DateFormatterTransform.swift */,
+ 660BB53A77A128D39D246C80 /* Operators.swift */,
+ 660BBF8A846AE94CA97F1325 /* TransformOperators.swift */,
+ 660BB5723BD2238D62A5DB0A /* CustomDateFormatTransform.swift */,
+ 660BB0C57701B0E930D621DE /* FromJSON.swift */,
+ 660BBBB9740469B8D8B93A31 /* Map.swift */,
+ 660BB143B094DFEE1DEB6308 /* Mappable.swift */,
+ 660BB3F05127AE28636B07EC /* ImmutableMappable.swift */,
+ 660BBC7ADEFEBAFF39A487C9 /* Mapper.swift */,
+ );
+ path = ObjectMapper;
+ sourceTree = "";
+ };
+ 660BBC4F31CD8939D2704751 /* PresentationDialog */ = {
+ isa = PBXGroup;
+ children = (
+ 660BB76CDA9432C229F6D293 /* AnimatedTransitioning.swift */,
+ 660BB75B3BFD437D420BEC71 /* AnimatedControllerFromBottom.swift */,
+ 660BBD62C125875A7D977481 /* BaseUIPresentationController.swift */,
+ 660BB3CCB355725DF41E9F50 /* BaseViewControllerShowTransculent.swift */,
+ );
+ path = PresentationDialog;
+ sourceTree = "";
+ };
+ 660BBCE62EE713590AC9C251 /* DropDown */ = {
+ isa = PBXGroup;
+ children = (
+ 660BB1E8D21904BC23E8A988 /* ComboBox.swift */,
+ 660BB83C13A6BF8C70DA02FD /* DropDown.swift */,
+ 660BB41E63AE5F14D2FAB0C2 /* DPDConstants.swift */,
+ 660BB8B80EDDDC9F6FB6618B /* DropDownCell.swift */,
+ 660BBD820E5BE874917E8EB4 /* DPDKeyboardListener.swift */,
+ 660BB3DBE117B9C5E1CFA072 /* DPDUIView+Extension.swift */,
+ );
+ path = DropDown;
+ sourceTree = "";
+ };
+ 660BBDF3E8E390B1EA68EA3A /* CryptoSwift */ = {
+ isa = PBXGroup;
+ children = (
+ 660BBDEFCF681709EAD2FB6A /* Cryptors.swift */,
+ 660BBCDEFE5560B4C4239FAA /* UInt8+Extension.swift */,
+ 660BBC3CD49C6DB102DBDA73 /* CSArrayType+Extensions.swift */,
+ 660BB5FBB1FC126C8B5DFDE0 /* NoPadding.swift */,
+ 660BBC70A8038A3A8EF66430 /* Checksum.swift */,
+ 660BBCFC470D2DB341A5B5AD /* HMAC.swift */,
+ 660BB50FFF818E312491F252 /* Utils.swift */,
+ 660BB1DD713B75A8245F77A3 /* BytesSequence.swift */,
+ 660BB22E32E7867182F932AD /* MD5.swift */,
+ 660BB7837AC018AB4F02088D /* UInt16+Extension.swift */,
+ 660BB7C469F3295449B48747 /* Generics.swift */,
+ 660BB59EBD27343E01AE44C9 /* PKCS5 */,
+ 660BBFE2105C6A1EDFD52F1B /* Int+Extension.swift */,
+ 660BB6DBA145E5AAB587B78A /* Poly1305.swift */,
+ 660BB4D5825BC7F02DB04003 /* Array+Extension.swift */,
+ 660BB8D43009ACE8FA90B51D /* DigestType.swift */,
+ 660BB176F48EC804605D945A /* RandomBytesSequence.swift */,
+ 660BB5350E970DF5E9C640CA /* Rabbit.swift */,
+ 660BB2C4386C7190322EA06B /* Foundation */,
+ 660BBD53861230A02DEBFD95 /* SHA1.swift */,
+ 660BB36713CCEF1025DAA864 /* AES.swift */,
+ 660BBBE5553388AA439B36DA /* ChaCha20.swift */,
+ 660BBE36EA589E9A87A6CA7A /* SHA2.swift */,
+ 660BBB9583DB947DB3A048A0 /* Collection+Extension.swift */,
+ 660BB71E69B75077967CE687 /* Cipher.swift */,
+ 660BB56D86EA67C397D97E4E /* Padding.swift */,
+ 660BBB074D45462CB8D6D086 /* RandomAccessCryptor.swift */,
+ 660BBC24E9C194110A5ADED4 /* String+Extension.swift */,
+ 660BB5B239E1B2BC3BDA47A0 /* UInt64+Extension.swift */,
+ 660BB521E5B40346D865AF79 /* ZeroPadding.swift */,
+ 660BB52399A43573D51E26E6 /* SecureBytes.swift */,
+ 660BBD3C1756EAE55528C2A3 /* UInt32+Extension.swift */,
+ 660BB9F128FBFECA116F838E /* Updatable.swift */,
+ 660BB84ECDAC06DF8A370C00 /* IntegerConvertible.swift */,
+ 660BBF10747F6743A335F6D9 /* BlockCipher.swift */,
+ 660BBFB61C5945D61F956A86 /* Digest.swift */,
+ 660BB08F437B180191B7E8B7 /* BlockMode */,
+ 660BB961FF0DD677BD299896 /* Authenticator.swift */,
+ 660BB0AA9740EF11D34188AB /* Blowfish.swift */,
+ 660BB0EDACEF4F3A11D45AA9 /* SHA3.swift */,
+ 660BB357ABC9D61A4FE9FC40 /* PKCS7.swift */,
+ 660BBE903D7FF61A49962895 /* Bit.swift */,
+ );
+ path = CryptoSwift;
+ sourceTree = "";
+ };
+ 660BBE68D5D2C911182BDFBE /* VTopNotification */ = {
+ isa = PBXGroup;
+ children = (
+ 660BBBAC2F5E734910E2F1FC /* VTopNotification.xib */,
+ 660BB14B1226E5D778D9EFB2 /* VTopNotification.swift */,
+ );
+ path = VTopNotification;
+ sourceTree = "";
+ };
+ F976D4FC1E68747800708D6A = {
+ isa = PBXGroup;
+ children = (
+ F976D5081E68747800708D6A /* GeneralUtils */,
+ F976D5071E68747800708D6A /* Products */,
+ 660BB40C90C48543A4A5D098 /* GeneralUtils.podspec */,
+ );
+ sourceTree = "";
+ };
+ F976D5071E68747800708D6A /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ F976D5061E68747800708D6A /* GeneralUtils.framework */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ F976D5081E68747800708D6A /* GeneralUtils */ = {
+ isa = PBXGroup;
+ children = (
+ F983E1251E69ADF4008FEC23 /* Assets.xcassets */,
+ F976D5091E68747800708D6A /* GeneralUtils.h */,
+ F976D50A1E68747800708D6A /* Info.plist */,
+ 660BBBC081AE41EEA62CFDB5 /* commonUtils */,
+ 660BB27368730D615070D1E2 /* libs */,
+ 660BB4A65AF559E60AD04599 /* ui */,
+ 660BB35AE8A552BDA1358CF8 /* models */,
+ );
+ path = GeneralUtils;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXHeadersBuildPhase section */
+ F976D5031E68747800708D6A /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ F976D5391E6902DC00708D6A /* Kingfisher.h in Headers */,
+ F976D50B1E68747800708D6A /* GeneralUtils.h in Headers */,
+ 660BBC607B7C9EEC7AA35F56 /* Toaster.h in Headers */,
+ 660BBEB5FF4B1440CBE3ED42 /* DrawerController.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXHeadersBuildPhase section */
+
+/* Begin PBXNativeTarget section */
+ F976D5051E68747800708D6A /* GeneralUtils */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = F976D50E1E68747800708D6A /* Build configuration list for PBXNativeTarget "GeneralUtils" */;
+ buildPhases = (
+ F976D5011E68747800708D6A /* Sources */,
+ F976D5021E68747800708D6A /* Frameworks */,
+ F976D5031E68747800708D6A /* Headers */,
+ F976D5041E68747800708D6A /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = GeneralUtils;
+ productName = GeneralUtils;
+ productReference = F976D5061E68747800708D6A /* GeneralUtils.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ F976D4FD1E68747800708D6A /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastUpgradeCheck = 0820;
+ ORGANIZATIONNAME = english;
+ TargetAttributes = {
+ F976D5051E68747800708D6A = {
+ CreatedOnToolsVersion = 8.2;
+ LastSwiftMigration = 0820;
+ ProvisioningStyle = Automatic;
+ };
+ };
+ };
+ buildConfigurationList = F976D5001E68747800708D6A /* Build configuration list for PBXProject "GeneralUtils" */;
+ compatibilityVersion = "Xcode 3.2";
+ developmentRegion = English;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ );
+ mainGroup = F976D4FC1E68747800708D6A;
+ productRefGroup = F976D5071E68747800708D6A /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ F976D5051E68747800708D6A /* GeneralUtils */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ F976D5041E68747800708D6A /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 660BBC9CC373AAB73C6C74E2 /* GeneralUtils.podspec in Resources */,
+ 660BB9A6AE5DC32DE19DBABF /* ViewTopBar.xib in Resources */,
+ F983E1261E69ADF4008FEC23 /* Assets.xcassets in Resources */,
+ 660BB3B75EE3FD06FCEA216B /* VTopNotification.xib in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ F976D5011E68747800708D6A /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ F976D53A1E6902DC00708D6A /* Kingfisher.swift in Sources */,
+ F976D53D1E6902DC00708D6A /* RequestModifier.swift in Sources */,
+ F976D53E1E6902DC00708D6A /* Resource.swift in Sources */,
+ 660BB29C372A958C0B86C416 /* Queue.swift in Sources */,
+ 660BB3029621648615E3E9E1 /* FileUtils.swift in Sources */,
+ 660BB5A0E9B5F854773C2B7C /* CacheUtils.swift in Sources */,
+ 660BB3171CAED790D4BE5B12 /* CommonUtils.swift in Sources */,
+ 660BB6A863BAE2C92F215CF9 /* DialogUtils.swift in Sources */,
+ 660BB3149D2BBC2BEF0E2CA7 /* RecordUtils.swift in Sources */,
+ 660BBFB98C0904C89DCFD491 /* DownloadTask.swift in Sources */,
+ 660BB368E7B84778781FCE3C /* NetWorkUtils.swift in Sources */,
+ 660BB90C319A5DAEAD289D9D /* DataTypeUtils.swift in Sources */,
+ 660BB52A9CABD5BF9FAB9D37 /* CommonExtension.swift in Sources */,
+ 660BBA1E335DD4E71931DDF8 /* PreferenceUtils.swift in Sources */,
+ 660BBFDEFD7AA2DFDBF25937 /* StringExtension.swift in Sources */,
+ 660BBBDACD3534EB52AEC32F /* DictionaryTransform.swift in Sources */,
+ 660BB6EB1178785DF70C6083 /* HexColorTransform.swift in Sources */,
+ 660BB70E3CD72CAF4737F3F6 /* TransformOf.swift in Sources */,
+ 660BBB4946D8F14B33D7B434 /* EnumOperators.swift in Sources */,
+ 660BB1CED2484BBB77382C52 /* TransformType.swift in Sources */,
+ 660BB6E884453AC44D47C904 /* EnumTransform.swift in Sources */,
+ F976D52E1E6902DC00708D6A /* Box.swift in Sources */,
+ F976D5411E6902DC00708D6A /* UIButton+Kingfisher.swift in Sources */,
+ 660BBA78A2FB3117F3F0F105 /* DataTransform.swift in Sources */,
+ 660BBA307B2FAAC75FAB932C /* MapError.swift in Sources */,
+ 660BB509C00D339853CD3516 /* URLTransform.swift in Sources */,
+ 660BBC1AD7840540E6234A84 /* NSDecimalNumberTransform.swift in Sources */,
+ 660BBE9717148FD1FD0A6B53 /* ISO8601DateTransform.swift in Sources */,
+ 660BB564D493CC0EA4F7E80D /* ToJSON.swift in Sources */,
+ 660BB598C593836339B1EBC0 /* DateTransform.swift in Sources */,
+ 660BB275D72E072967319D3C /* DateFormatterTransform.swift in Sources */,
+ F976D5401E6902DC00708D6A /* ThreadHelper.swift in Sources */,
+ 660BB31B77CEBBF559611F63 /* Operators.swift in Sources */,
+ 660BB38A40811060B4268DDF /* TransformOperators.swift in Sources */,
+ 660BBEE0871750BFEFD26E3E /* CustomDateFormatTransform.swift in Sources */,
+ 660BB28A34746B71F32CBFA2 /* FromJSON.swift in Sources */,
+ 660BBDE6B9635AA67A47C6C3 /* Map.swift in Sources */,
+ F976D5301E6902DC00708D6A /* Filter.swift in Sources */,
+ 660BBBA4C085D12BC882B01B /* Mappable.swift in Sources */,
+ 660BB876DDFD2B33CC105757 /* ImmutableMappable.swift in Sources */,
+ 660BBE6D5D83B258C173D089 /* Mapper.swift in Sources */,
+ 660BB6B4930C9C9A68A23238 /* SwiftyJSON.swift in Sources */,
+ 660BB4DB26E542023BE791A3 /* Cryptors.swift in Sources */,
+ 660BB8FE9365F2F946AD9FCA /* UInt8+Extension.swift in Sources */,
+ 660BBC4099897B2D268FD716 /* CSArrayType+Extensions.swift in Sources */,
+ 660BB39E46E69ABBE1766E3A /* NoPadding.swift in Sources */,
+ 660BB214E6EFB96A34FBBA3E /* Checksum.swift in Sources */,
+ 660BBA0B4A44F77A7231535B /* HMAC.swift in Sources */,
+ 660BB3DEB8563F6C19997C46 /* Utils.swift in Sources */,
+ 660BBD6EA511BF216FFE9807 /* BytesSequence.swift in Sources */,
+ F976D53F1E6902DC00708D6A /* String+MD5.swift in Sources */,
+ 660BBEB72FD420C5370241FF /* MD5.swift in Sources */,
+ 660BB763F29C94A0DFB810B9 /* UInt16+Extension.swift in Sources */,
+ 660BB017307C97835E430B85 /* Generics.swift in Sources */,
+ 660BB3F33AF55AE1AB398817 /* PKCS5.swift in Sources */,
+ 660BB211B3285CA16F2CC432 /* PBKDF1.swift in Sources */,
+ 660BB534E53CE88CE12E5BE5 /* PBKDF2.swift in Sources */,
+ 660BB702C71DEECC871DBCE8 /* Int+Extension.swift in Sources */,
+ 660BBF1814F172D685CDDFB0 /* Poly1305.swift in Sources */,
+ 660BB28C653560033F478E62 /* Array+Extension.swift in Sources */,
+ 660BB5500B0E8B28CFBD0AA3 /* DigestType.swift in Sources */,
+ 660BB02813284FF82C9A5C68 /* RandomBytesSequence.swift in Sources */,
+ 660BB722BC16861C5A13A71C /* Rabbit.swift in Sources */,
+ 660BB34B0E661054F3EE3F24 /* AES+Foundation.swift in Sources */,
+ 660BB0AB7BCC0CD54BC3F694 /* Data+Extension.swift in Sources */,
+ 660BBAA747957EEF9193D5D1 /* HMAC+Foundation.swift in Sources */,
+ 660BBD38F499BDC8FD830503 /* Utils+Foundation.swift in Sources */,
+ F976D5311E6902DC00708D6A /* Image.swift in Sources */,
+ 660BBBDF4CE07E9369B7A0BE /* Rabbit+Foundation.swift in Sources */,
+ F976D5321E6902DC00708D6A /* ImageCache.swift in Sources */,
+ 660BBA5A1887353812391145 /* Blowfish+Foundation.swift in Sources */,
+ 660BB53FAFFF909C2E1C9BCB /* ChaCha20+Foundation.swift in Sources */,
+ 660BB2B063B9EEB6BAE10A4D /* CSArrayType+Foundation.swift in Sources */,
+ F976D53B1E6902DC00708D6A /* KingfisherManager.swift in Sources */,
+ 660BB195A1D42FC892A02A44 /* String+FoundationExtension.swift in Sources */,
+ 660BBED8076643223A1A1F9F /* SHA1.swift in Sources */,
+ 660BB63DEC21DA281E71D7FB /* AES.swift in Sources */,
+ 660BBFF1A3DE36950FF834FA /* ChaCha20.swift in Sources */,
+ 660BB5F6F9E8243D2BDC44F4 /* SHA2.swift in Sources */,
+ 660BB3D0D6B9F632CA86D222 /* Collection+Extension.swift in Sources */,
+ 660BBBAF48437D32BC2E9ED6 /* Cipher.swift in Sources */,
+ 660BB0CDC8E38699F67BDCDF /* Padding.swift in Sources */,
+ 660BB922FAB4EFFC6DA16A90 /* RandomAccessCryptor.swift in Sources */,
+ 660BB674657F1FBF15DDABE5 /* String+Extension.swift in Sources */,
+ 660BB99342616A64D8779A24 /* UInt64+Extension.swift in Sources */,
+ 660BB73DAF74E5D158619545 /* ZeroPadding.swift in Sources */,
+ 660BBCBA4021E9807BC26C44 /* SecureBytes.swift in Sources */,
+ 660BB29A28A9512DE1B658A1 /* UInt32+Extension.swift in Sources */,
+ 660BB567122A08A7880178BE /* Updatable.swift in Sources */,
+ 660BBFDE1C1F2729DA32D9A3 /* IntegerConvertible.swift in Sources */,
+ 660BBE32F64C4A63C38A2A33 /* BlockCipher.swift in Sources */,
+ 660BBE6E74262696D06D3396 /* Digest.swift in Sources */,
+ F976D52F1E6902DC00708D6A /* CacheSerializer.swift in Sources */,
+ 660BB3747F292ACB52E42079 /* CBC.swift in Sources */,
+ 660BB9F41D77949A45917C40 /* CFB.swift in Sources */,
+ 660BB883A116CE74CC9EE7D8 /* CTR.swift in Sources */,
+ 660BB62EEC22830D63048FE8 /* ECB.swift in Sources */,
+ 660BB36DCF3F46251B8EE3FB /* OFB.swift in Sources */,
+ 660BB94B68EB2F4D5EBFF98D /* PCBC.swift in Sources */,
+ 660BBEAFEE4B7074195BB228 /* BlockMode.swift in Sources */,
+ 660BBA04490927989BAE074E /* BlockModeWorker.swift in Sources */,
+ F976D5381E6902DC00708D6A /* Indicator.swift in Sources */,
+ 660BB23BB6D055996A8BF62B /* BlockModeOptions.swift in Sources */,
+ 660BB39B8103E48A8CCD11E4 /* RandomAccessBlockModeWorker.swift in Sources */,
+ F976D53C1E6902DC00708D6A /* KingfisherOptionsInfo.swift in Sources */,
+ 660BB271F8FC8E5BA195C74E /* Authenticator.swift in Sources */,
+ 660BB4EB34BB99E2AEFA0329 /* Blowfish.swift in Sources */,
+ 660BB7B90D211A04BE805BCA /* SHA3.swift in Sources */,
+ 660BBC24B162B9D0627A204B /* PKCS7.swift in Sources */,
+ 660BB9566076EE2DDC7CE2E8 /* Bit.swift in Sources */,
+ 660BB09490F2E44D8A54B835 /* SCLAlertView.swift in Sources */,
+ 660BB87ADEE46A00BFB1E2AD /* SCLExtensions.swift in Sources */,
+ 660BBCFB13F7C0980EF8844A /* ToastView.swift in Sources */,
+ 660BB096980E50195EC9E6C4 /* ToastWindow.swift in Sources */,
+ 660BB10AC416E1F583DB5781 /* ToastCenter.swift in Sources */,
+ F976D5351E6902DC00708D6A /* ImageProcessor.swift in Sources */,
+ 660BBDCD6C885D47F48F2711 /* Toast.swift in Sources */,
+ F976D5171E69025200708D6A /* Session.swift in Sources */,
+ 660BB47326AA4D3CEB5D959F /* SwiftOverlays.swift in Sources */,
+ 660BBA8F2D1E0B38B941AA5D /* SecurityUtils.swift in Sources */,
+ 660BBD3D9677DACCF050D2A6 /* BasePageViewController.swift in Sources */,
+ 660BB4C4C7B206E20897C273 /* ViewTopBar.swift in Sources */,
+ 660BBC1564A61534A95EE11F /* ComboBox.swift in Sources */,
+ 660BB6623229B3104AC3F530 /* DropDown.swift in Sources */,
+ 660BBB7A0F35D6324DE5FCA5 /* DPDConstants.swift in Sources */,
+ 660BB9320EDFA44DB9E76A5A /* DropDownCell.swift in Sources */,
+ 660BB977B861049752788962 /* DPDKeyboardListener.swift in Sources */,
+ 660BBDC2F499F5A06289EDA4 /* DPDUIView+Extension.swift in Sources */,
+ F976D5371E6902DC00708D6A /* ImageView+Kingfisher.swift in Sources */,
+ 660BBD46DC6D3DF2DF46EEC4 /* BaseCell.swift in Sources */,
+ F976D52D1E6902DC00708D6A /* AnimatedImageView.swift in Sources */,
+ 660BB7348DC81863AC0B7D69 /* CellLoadMore.swift in Sources */,
+ F976D5361E6902DC00708D6A /* ImageTransition.swift in Sources */,
+ 660BBC4AF5B23D206515241F /* BaseTbLoadData.swift in Sources */,
+ 660BBED47DCF543CFF09130A /* UITableViewLoading.swift in Sources */,
+ 660BBE969598871ADCCC5A46 /* UITableViewLoadMore.swift in Sources */,
+ 660BB2B2F6151FFF78E72CC8 /* UITableViewLoadDataBg.swift in Sources */,
+ 660BB33A23DDEC11377AFBC6 /* UITableViewLoadDataFromUIThread.swift in Sources */,
+ 660BBF78048DEF820E87FC3E /* UICollectionViewLoading.swift in Sources */,
+ 660BB3BDAECA7622691BAA71 /* UICollectionViewLoadData.swift in Sources */,
+ 660BBBC1CC0A02BE671BC7C2 /* VTopNotification.swift in Sources */,
+ 660BB7FEF1D1C33D574AD39F /* UIViewCustom.swift in Sources */,
+ 660BB7A6680B8DC96970636D /* ISRadioButton.swift in Sources */,
+ 660BB1470B2BD1017A147821 /* UILabelCustom.swift in Sources */,
+ 660BB05547B110F273DFEBFE /* UIButtonCustom.swift in Sources */,
+ 660BB22A39A192A41D4F3344 /* VPlayerControl.swift in Sources */,
+ 660BB401D73E4F771BE53A63 /* FloatRatingView.swift in Sources */,
+ 660BBB256B6DBCE6A136D1D8 /* UITextViewCustom.swift in Sources */,
+ 660BB5EDEC866BD4D755F3F6 /* UIImageViewCustom.swift in Sources */,
+ 660BB4E07507BBD9FFD59844 /* UILableCustomLeftImage.swift in Sources */,
+ 660BB296CC86AD7275DD7EBF /* UIViewCustomGradientBg.swift in Sources */,
+ F976D5331E6902DC00708D6A /* ImageDownloader.swift in Sources */,
+ 660BB6418F3B36DB8CAB963E /* UIViewCustomPressHightLight.swift in Sources */,
+ 660BB9F302854FD3B6394FB0 /* DrawerController.swift in Sources */,
+ 660BBE9AEB71901AB0FB1FD6 /* DrawerVisualState.swift in Sources */,
+ 660BBE0EA3C641CAB4E13722 /* AnimatedMenuButton.swift in Sources */,
+ 660BBD0FE3DB483CBF87B2DD /* DrawerBarButtonItem.swift in Sources */,
+ F976D5341E6902DC00708D6A /* ImagePrefetcher.swift in Sources */,
+ 660BBE3884FAF5A6041108D2 /* DrawerVisualStateManager.swift in Sources */,
+ 660BB1E7887AA04473643D5E /* VCContainer.swift in Sources */,
+ 660BBC6872E19063EAB297C1 /* AnimatedTransitioning.swift in Sources */,
+ 660BB6D1CEC505522F484BE3 /* AnimatedControllerFromBottom.swift in Sources */,
+ 660BB1A4E46E2C1130AD3978 /* BaseUIPresentationController.swift in Sources */,
+ 660BBEE19174C58FC617F9F0 /* BaseViewControllerShowTransculent.swift in Sources */,
+ 660BBA43A564BC8CDD6F4B1D /* IContainerController.swift in Sources */,
+ 660BB7C0931100C45D2A4709 /* GeneralMenuController.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+ F976D50C1E68747800708D6A /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ CURRENT_PROJECT_VERSION = 1;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 10.2;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ SDKROOT = iphoneos;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Debug;
+ };
+ F976D50D1E68747800708D6A /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ CURRENT_PROJECT_VERSION = 1;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 10.2;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ SDKROOT = iphoneos;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALIDATE_PRODUCT = YES;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Release;
+ };
+ F976D50F1E68747800708D6A /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_IDENTITY = "";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = GeneralUtils/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ PRODUCT_BUNDLE_IDENTIFIER = com.GeneralUtils;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SKIP_INSTALL = YES;
+ SWIFT_OBJC_BRIDGING_HEADER = "";
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 3.0;
+ };
+ name = Debug;
+ };
+ F976D5101E68747800708D6A /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_IDENTITY = "";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = GeneralUtils/Info.plist;
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ PRODUCT_BUNDLE_IDENTIFIER = com.GeneralUtils;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SKIP_INSTALL = YES;
+ SWIFT_OBJC_BRIDGING_HEADER = "";
+ SWIFT_VERSION = 3.0;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ F976D5001E68747800708D6A /* Build configuration list for PBXProject "GeneralUtils" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ F976D50C1E68747800708D6A /* Debug */,
+ F976D50D1E68747800708D6A /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ F976D50E1E68747800708D6A /* Build configuration list for PBXNativeTarget "GeneralUtils" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ F976D50F1E68747800708D6A /* Debug */,
+ F976D5101E68747800708D6A /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = F976D4FD1E68747800708D6A /* Project object */;
+}
diff --git a/GeneralUtils/GeneralUtils.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/GeneralUtils/GeneralUtils.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..66efec1
--- /dev/null
+++ b/GeneralUtils/GeneralUtils.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/GeneralUtils/GeneralUtils.xcodeproj/project.xcworkspace/xcuserdata/ptran.xcuserdatad/UserInterfaceState.xcuserstate b/GeneralUtils/GeneralUtils.xcodeproj/project.xcworkspace/xcuserdata/ptran.xcuserdatad/UserInterfaceState.xcuserstate
new file mode 100644
index 0000000000000000000000000000000000000000..2605ff568185943a814e0e90d8a3427bd9c14386
GIT binary patch
literal 56222
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